백엔드 개발 PHP 튜토리얼 Linux/Unix 로그인 스크립트

Linux/Unix 로그인 스크립트

Feb 03, 2017 pm 03:38 PM

환경 변수를 설정해야 하거나 쉘 또는 데스크탑 환경을 설정하기 위해 프로그램을 실행해야 할 때 이러한 시나리오를 접한 적이 있는지 모르겠지만 가장 편리한 위치가 어디인지 모르겠습니다. 설정하세요.

Debian의 패키지 관리자부터 Iaas 관리까지 몇 가지 일반적인 상황이 있으며, 많은 작업이 제대로 실행되기 위해서는 환경 변수를 설정해야 합니다.

경우에 따라 xrandr 명령과 같이 프로그램은 일반적으로 처음 로그인할 때 한 번만 실행하면 됩니다.

또한 rbenv, rvn 또는 SitePoint의 자체 envswith 프로그램과 같은 프로그램이 때때로 셸에 삽입됩니다.

Debian GNU/Linux Jessie 설치에 나타나는 몇 가지 일반적인 옵션을 살펴보고 모든 것을 이해해 봅시다.

/etc/profile

기본적으로 데비안은 /etc/profile 파일을 제공합니다. 이 파일은 $PATH 변수를 설정하는 데 사용됩니다($PATH는 일반적으로 검색 경로를 선언하는 데 사용됩니다). 명령)을 즉시 적용할 수 있습니다. 아래 코드는 /etc/profile의 일부입니다.

if [ "`id -u`" -eq 0 ]; then
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
    PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH
로그인 후 복사

편의상 루트 사용자(ID 0)의 경로는 다른 사용자와 다릅니다. 이는 시스템 바이너리 디렉터리(sbin 디렉터리)의 위치가 전통적으로 루트로 실행되어야 하는 시스템 관리 프로그램이나 프로그램용으로 예약되어 있기 때문입니다. 루트 사용자는 꼭 필요한 경우가 아니면 게임 프로그램을 실행할 수 없으므로 게임 경로는 생략합니다.

다음으로 /etc/profile은 $PS1 변수의 설정을 처리합니다. $PS1 변수는 기본 프롬프트 문자열(즉, 사용자가 로그인할 때 표시되는 문자)을 설정하는 데 사용됩니다. 시스템 쉘이 Bash라는 점을 제외하면 시스템 $PS1 변수는 기본적으로 $로 설정됩니다(루트 사용자의 기본값은 #입니다). 시스템의 쉘이 Bash를 사용하는 경우 /etc/bash.bashrc 파일은 $PS 변수를 대체하여 기본 프롬프트 문자열을 처리합니다(특별한 상황 제외). 나중에 /etc/bash.bashrc에 대해 간략하게 설명하겠습니다.

이 시점에서 로그인하는 동안 모든 쉘이 /etc/profile을 읽는다는 것을 추론할 수 있습니다(예: login 명령 사용). /etc/profile은 보다 효율적인 Bash 내장 변수 ${UID}를 사용하는 대신 id 명령을 호출하여 사용자 ID를 읽습니다. Bash는 다른 많은 쉘에서는 정의하지 않는 u(사용자 이름) 및 h(호스트 이름)와 같은 백슬래시 이스케이프 특수 문자를 지원하기 때문에 멋진 쉘 프롬프트를 정의하는 대신 소스별 구성을 사용합니다. /etc/profile은 사용자가 직접 설치할 수 있는 모든 쉘과 호환되도록 POSIX 규격을 준수해야 합니다.

Debian GNU/linux에는 일반적으로 POSIX(및 일부 Berkeley) 확장 기능만 구현하도록 설계된 기본 셸인 Dash가 사전 설치되어 있습니다. /etc/profile을 수정하여(수정하기 전에 백업) PS1='$ ' 행에 다른 값을 설정한 다음 Dash 로그인을 시뮬레이션하면(dash -l 명령을 통해) Dash가 맞춤형 힌트. 그러나 -l 매개변수 없이 dash 명령을 호출하면 dash는 /etc/profile을 읽지 않습니다. 이때 Dash는 기본값을 사용합니다(이는 현재 PS1의 값이 수정 전의 값임을 의미합니다).

/etc/profile에 대한 마지막 흥미로운 점은 다음 코드 조각입니다.

if [ -d /etc/profile.d ]; then
    for i in /etc/profile.d/*.sh; do
        if [ -r $i ]; then
            . $i
        fi
    done
    unset i
fi
로그인 후 복사

즉, /etc/profile.d/*.sh와 일치하는 읽을 수 있는 모든 항목은 가변 소스. 이는 /etc/profile을 직접 편집하는 것이 실제로 필요하지 않음을 보여주기 때문에 매우 중요합니다(따라서 이전 백업을 복원하십시오). 위에 정의된 모든 변수는 별도의 파일에서 구성한 다음 /etc/profile의 설정을 재정의할 수 있습니다. 이것의 장점은 시스템이 업그레이드될 때 해당 변경 사항이 /etc/profile 파일에 자동으로 추가될 수 있다는 것입니다. 데비안의 Apt 패키지 관리 시스템은 일반적으로 기본 구성 파일을 수정하지 않기 때문입니다.

~/.bash_profile, ~/.bash_login 및 ~/.profile

/etc/profile의 잠재적인 문제는 시스템 전체 경로에 있다는 것입니다. 이는 이를 수정하면 이 시스템의 모든 사용자에게 영향을 미친다는 것을 의미합니다. 개인용 컴퓨터에서는 이것이 큰 문제가 아닐 수도 있지만 수정하려면 루트 권한이 필요합니다. 이러한 이유로 각 개별 Bash 사용자 계정은 Bash 구성 파일의 소스로 ~/.bash_profile, ~/.bash_login 및 ~/.profil 파일을 생성할 수 있습니다. 나열된 순서대로 발견된 첫 번째 파일이 구성 파일로 사용되고 나머지는 무시됩니다.

Dash와 같은 다른 셸도 비슷한 기능을 지원하지만 ~/.profile 파일만 찾습니다. 이를 통해 사용자는 어느 시점에서 로그인 셸로 Dash 또는 다른 셸로 전환해야 하는 경우(예: chsh -s dash 명령을 통해) Bash 관련 사용 사례에 대해 별도의 .bash_profile 파일을 구성할 수 있습니다. ~/.profile은 이러한 쉘의 구성 파일로 유지될 수 있습니다.

需要牢记的一点是,默认的Debian框架目录(/etc/skel,用于存放要复制到新用户账户主目录的文件和目录)包含.profile文件,但不包含.bash_profile和.bash_login文件。此外Debian使用Bash作为默认的shell,因此,许多Debian用户习惯于将他们的Bash 登录shell设置放在.profile文件中。

我曾经看到过一些项目的安装说明,例如RVN,这个项目建议用户创建一个.bash_profile文件,但是这样做是非常危险的,根据上面提到的知识我们知道,这个会改变用户的shell环境。即使用户没有修改.profile文件,它也可能利用默认~/.profile功能,将~/bin添加到$PATH环境变量。一个可能提高安全性的选项是,在创建用户的账户之前,将.bash_profile作为.bash_rc的符号链接文件,放到/etc/skel目录中。

如果我们查看Debian Jessie的默认.profile脚本,我们可以看到下面的代码片段:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi
로그인 후 복사

这和我们在/etc/profile里面看到的相似,如果shell是Bash,且发现了/etc/bash.bashrc文件,/etc/bash.bashrc文件就被当作Bash的配置文件。这一点的意义将在下一节讨论。

/etc/bash.bashrc 和 ~/.bashrc

启动的时候,Bash会同时读取/etc/bash.bashrc和~/.bashrc,但是只有在Bash Shell作为交互式Shell而不是登录Shell启动时(意味着通过xtem启动),会依照这种顺序,这是Bash Shell的标准行为。然而,Debian分别从 /etc/profile和~/.profile登录脚本中获取配置文件。这会显著地改变行为,使得/etc/bash.bashrc和.bashrc(如果它们存在)总是在Bash启动时调用,而不管是不是登录Shell。不要期待这种情况在不同地发行版中是一样的。

.bashrc是一个添加命令别名的好地方,实际上,一些用户拥有太多的别名,以至于他们宁愿将别名都放在一个单独的文件中去。Debian的默认.bashrc会查找.bash_alias,如果这个文件存在的话,会将它作为别名配置来源。所以你可以在这个文件中随意保存所有的Bash别名。如果用户愿意的话,.bashrc文件也是用户重写shell变量,例如$PS1或者$HISTSIZE的绝佳位置。Debian的默认.bashrc有超过100行,但是仍然可以非常清晰地阅读,且有良好地注释。见名知意,.bashrc不是其他非Bash shell的配置文件来源。

~/.xsession 和 ~/.xsessionrc

如果你是一个GNU/Linux桌面用户,通过显示管理器本地登录(而不是通过getty登录程序),则/etc/profile和~/.profile不会像预期的那样工作。一些显示管理器会直接将这些文件视为错误地配置文件,例如Gnome显示管理器。但一些其他的显示管理器,例如LightDm不会这样。幸运的是,你还有一些其他的选项。

当启动X Window系统会话时(不管是用显示管理或从虚拟终端启动startx),将会执行/etc/X11/Xsessionshell脚本。这基本上相当于登录shell调用/etc/profile。这个只对X Window生效,并且不是将其作为源配置文件,而是直接执行。但是它也相当复杂,类似于/etc/profile怎么从/etc/profile.d目录中的脚本读取配置,怎么从/etc/X11/Xsession.d/目录下的/etc/X11/Xsessions脚本中读取配置。在/etc/X11/Xsession.d目录下的所有脚本名称都以数字开头,因此所有的脚本都会按照数字顺序来读取。

Debian Jessie包含一个名叫40×11-common_xsessionrc的文件,这个文件做的工作就是检查~/.xsessionrc是不是可读的,如果是就用它作为配置文件的来源。这就使得~/.xsessions是一个加载环境变量或者运行一个一次性使用程序(例如xrandr或xmodmap)的完美位置(仅适用于X会话)。如果你希望的话,你同样可以将/etc/profile或~/.profile作为来源。那么任何指定的环境变量也都会被你的会话管理器继承(如果还没有继承的话)。请注意,默认情况下.xsessionrc是不存在的,需要你自己创建这个文件。

如果我们继续浏览/etc/X11/Xsession中的文件, 我们会发现50×11-common_determine-startup会决定加载哪个会话管理器。如果~/.xsessions文件存在而且是可执行的,它会被保存并且随后作为99×11-common_start的一部分执行,当~/.xsession用于运行会话管理器,X会话将会被注销。并且当这个脚本终止时,你会返回到显示管理器登录界面。

和~/.xsessionrc相似,~/.xsession默认也是不存在的,在你需要的时候你可以创建一个。你可能会创建一个类似下面给的简单的.xsession脚本

# Start our session manager of choice.
#
exec x-session-manager
로그인 후 복사

其中x-session-manager默认设置为通过update-alternatives命令配置的任何内容,这样,你可以轻松地更改系统范围默认地会话管理器,只需要将x-session-manager替换为/usr/bin/startfce4(切换到XFCE),其他的用户账户将完全不受影响。

当然,许多显示管理器提供从登录界面直接选择公共会话管理器的能力,所以这个文件通常是不必要的。然而.xsession提供了更多地灵活性,你可以用任何程序调用这个文件,而不仅仅是会话管理器。例如,在这里你可以在while循环中调用chromium或者iceweasel,而不是执行基本的kiosk模式设置。

~/.bash_logout

我们前面介绍了当用户运行交互式Bash登录shell时读取的文件,但是如果你想在注销以后仍然运行程序该怎么办?对于这个用例,~/.bash_logout文件就非常方便了。在Debian中默认的配置仅用于清除屏幕(我认为从安全角度来说很重要),但是可以轻微地想象以下就知道能用于其他目的,例如,在你离开你的机器之前显示一个几秒钟的提醒。

主要的限制因素在于.bash_logout仅在注销交互式shell时读取,并且并不能假定它在注销X会话时会被加载。

其他选项

上面那些已经为你介绍了大部分的通用选项。其他的选项可能会存在,取决于你的安装环境(例如/etc/environment),但是我不认为他们可能在其他的平台上存在,并且极少有需要去接触它们。

示例

那么你应该在哪放置你的系统范围环境变量?如果你希望一个环境变量可以影响所有用户,/etc/profiled./someifle.sh会是一个好的选择。但是,这假设你是使用一个登录管理器以/etc/profile作为配置来源。如果不是这样,你可以(作为一个管理员)添加一个脚本到/etc/X11/Xsession.d/来替代/etc/profile作为配置来源。

如果你希望一个脚本可以找到一个私人目录路径,并且添加它到你的PATH中,你需要考虑这个目录是不是会移动很多东西,如果你向.profile添加代码来实现,用户需要注销然后再登录来更改用户会话期间的PATH。如果你将代码添加到.bashrc中,这意味着代码将在用户每次打开xterm时执行,如果执行大约半秒以上可能就不太理想。所以这是一个权衡取舍的问题。

如果你仅仅是为了你个人登录会话时的一个环境变量,且它只关心X会话,你可以将它添加到~/.xsessionrc中。这样做的优点是,它通常将可用于通过X会话管理器启动的所有程序,因为它在启动X会话管理器之前被设置,并且被继承。例如,某些图形驱动程序可以通过运行

export vblank_mode=0
로그인 후 복사

来禁用vsync。 所以位于.xsessionrc中的变量会影响到所有的程序。

然而如果这一行被添加到.bashrc中,则只有通过xterm登录的程序会被影响。通过一个窗口管理器启动的程序照常运行。你可以把它添加到.profile,并且从.xessionrc作为.profile的来源。但是之后,当你的X服务没有在运行的时候,你就不需要导出环境变量。

希望你现在可以更好地了解了登录和注销脚本在Debian GNU/Linux系统上的工作原理。


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. Apr 05, 2025 am 12:04 AM

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

PHP에서 늦은 정적 결합의 개념을 설명하십시오. PHP에서 늦은 정적 결합의 개념을 설명하십시오. Mar 21, 2025 pm 01:33 PM

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

프레임 워크 보안 기능 : 취약점 보호. 프레임 워크 보안 기능 : 취약점 보호. Mar 28, 2025 pm 05:11 PM

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.

프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법. 프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법. Mar 28, 2025 pm 05:12 PM

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

PHP의 CURL 라이브러리를 사용하여 JSON 데이터가 포함 된 게시물 요청을 보내는 방법은 무엇입니까? PHP의 CURL 라이브러리를 사용하여 JSON 데이터가 포함 된 게시물 요청을 보내는 방법은 무엇입니까? Apr 01, 2025 pm 03:12 PM

PHP 개발에서 PHP의 CURL 라이브러리를 사용하여 JSON 데이터를 보내면 종종 외부 API와 상호 작용해야합니다. 일반적인 방법 중 하나는 컬 라이브러리를 사용하여 게시물을 보내는 것입니다 ...

확실한 원칙과 PHP 개발에 적용되는 방법을 설명하십시오. 확실한 원칙과 PHP 개발에 적용되는 방법을 설명하십시오. Apr 03, 2025 am 12:04 AM

PHP 개발에서 견고한 원칙의 적용에는 다음이 포함됩니다. 1. 단일 책임 원칙 (SRP) : 각 클래스는 하나의 기능 만 담당합니다. 2. Open and Close Principle (OCP) : 변경은 수정보다는 확장을 통해 달성됩니다. 3. Lisch의 대체 원칙 (LSP) : 서브 클래스는 프로그램 정확도에 영향을 미치지 않고 기본 클래스를 대체 할 수 있습니다. 4. 인터페이스 격리 원리 (ISP) : 의존성 및 사용되지 않은 방법을 피하기 위해 세밀한 인터페이스를 사용하십시오. 5. 의존성 반전 원리 (DIP) : 높고 낮은 수준의 모듈은 추상화에 의존하며 종속성 주입을 통해 구현됩니다.

세션 납치는 어떻게 작동하며 PHP에서 어떻게 완화 할 수 있습니까? 세션 납치는 어떻게 작동하며 PHP에서 어떻게 완화 할 수 있습니까? Apr 06, 2025 am 12:02 AM

세션 납치는 다음 단계를 통해 달성 할 수 있습니다. 1. 세션 ID를 얻으십시오. 2. 세션 ID 사용, 3. 세션을 활성 상태로 유지하십시오. PHP에서 세션 납치를 방지하는 방법에는 다음이 포함됩니다. 1. 세션 _regenerate_id () 함수를 사용하여 세션 ID를 재생산합니다. 2. 데이터베이스를 통해 세션 데이터를 저장하십시오.

See all articles