Linux의 PATH 환경 변수

Linux의 PATH 환경 변수

Linux 운영체제에서 제공하는 표준 환경변수(PATH, HOME 등)가 어떻게 자동으로 설정되는지 알고 싶습니다. 어떤 파일에서 읽혀지는가? 특정 사용자가 로그인할 때 이러한 변수를 설정하는 파일이 있어야 합니다.

답변1

귀하의 질문에 대한 답변은 INVOCATION섹션에서 찾을 수 있습니다 man bash. 관련 발췌문은 다음과 같습니다.

   When  bash is invoked as an interactive login shell, or as a non-inter-
   active shell with the --login option, it first reads and executes  com-
   mands  from  the file /etc/profile, if that file exists.  After reading
   that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
   in  that order, and reads and executes commands from the first one that
   exists and is readable.  The --noprofile option may be  used  when  the
   shell is started to inhibit this behavior.

   When  a  login  shell  exits, bash reads and executes commands from the
   file ~/.bash_logout, if it exists.

   When an interactive shell that is not a login shell  is  started,  bash
   reads  and executes commands from ~/.bashrc, if that file exists.  This
   may be inhibited by using the --norc option.  The --rcfile file  option
   will  force  bash  to  read  and  execute commands from file instead of
   ~/.bashrc.

   When bash is started non-interactively, to  run  a  shell  script,  for
   example, it looks for the variable BASH_ENV in the environment, expands
   its value if it appears there, and uses the expanded value as the  name
   of  a  file to read and execute.  Bash behaves as if the following com-
   mand were executed:
          if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
   but the value of the PATH variable is not used to search for  the  file
   name.

매뉴얼 페이지에 더 많은 내용이 있으므로 읽어보는 것이 좋습니다.

답변2

쉘이 제공하는 것보다 상황이 조금 더 복잡합니다.

로그인하는 방법은 크게 세 가지가 있습니다.

  • 실제 터미널(요즘은 대부분 콘솔)에서 로그인하세요.
  • 의사 터미널에서 로그인(주로 네트워크 연결)
  • 그래픽 환경에서 로그인

둘 다 셸을 실행하기 전에 환경을 설정하는 기능이 있으며 둘 다 수행합니다( HOME, LOGNAME, TERM은 셸에서 설정하지 않을 수 있으며 PATH시작 파일이 없더라도 셸은 일반적으로 환경 변수를 상속합니다).

실제 터미널에서 로그인하면 연결을 처리하는 프로세스가 TERM환경 변수를 설정하고 나머지 작업을 프로그램에 위임할 수 있습니다 login. 프로그램은 루트가 보안되지 않은 터미널에 로그인하는 것을 방지하는 것과 같은 몇 가지 확인을 수행하고 전체 환경이 TERM깨끗한지 확인하고 HOME, PATH, SHELL, TERM, MAIL을 초기화한 LOGNAME다음 로그인 쉘을 시작합니다. 그러면 쉘이 자체 초기화를 수행합니다.

의사 터미널에서 로그인할 때에도 동일한 일이 발생하지만 약간 다릅니다. 일반적으로 환경은 단순한 환경 변수보다 연결을 처리하는 프로세스에서 더 많은 초기화를 가져옵니다 TERM(네트워크 프로토콜에는 일반적으로 다른 쪽 끝에서 환경을 전송하는 방법이 있음). 따라서 login환경을 정리하지 않는 모드에서 사용하면 정리가 필요합니다. 연결을 처리하는 프로그램이 완료되었습니다.

그래픽 환경은 일반적으로 위임하지 않지만 login유사하게 작동합니다. 자격 증명을 확인한 후 일반 환경 변수를 사용하여 최소한 DISPLAY올바르게 설정한 깨끗한 환경을 만든 다음 일반적으로 시스템 관리자가 제공한 스크립트를 사용하여 항목을 추가할 수 있도록 허용한 다음 데스크톱 환경에 대한 시작 스크립트를 시작할 수 있습니다. 로그인 셸에서 환경을 얻으려는 시도가 이루어지며 일반적으로 설정을 완료하기 위한 스크립트를 제공할 수도 있습니다. 따라서 데스크탑에서 프로그램을 시작할 때 해당 환경은 그래픽 로그인 프로그램, 데스크탑 환경 및 로그인 스크립트 설정의 조합입니다.

마지막 사항: 터미널 에뮬레이터를 시작하면 로그인 셸이 나타날 수 있습니다. 이 경우 셸의 로그인 스크립트가 실행되므로 최신 변경 사항의 효과를 볼 수 있지만 동일한 환경은 볼 수 없습니다. 다른 프로그램) 또는 다릅니다(이 경우 셸의 로그인 스크립트가 실행되지 않고 최신 변경 사항이 표시되지 않지만 다른 프로그램과 동일한 환경을 얻습니다. 셸은 대화형 초기화 스크립트에 의해 수정됩니다).

답변3

/etc/bash* /etc/profile*파일을 확인하세요 .

답변4

배포판에 따라 확인된 모든 파일을 순서대로 제공해야 하므로 bash의 매뉴얼 페이지를 확인하세요. 이 env명령은 무엇이 설정되었는지 알려주지만 어디에 설정되어 있는지는 알려주지 않습니다. 그러나 빠른 grep을 사용하면 이러한 설정이 어디에 있는지 알 수 있습니다.

관련 정보