>

PATH, HOME과 같은 Linux OS에서 제공하는 표준 환경 변수가 어떻게 자동으로 설정되는지 알고 싶습니다. 어떤 파일을 읽을 수 있습니까? 특정 사용자 로그인시 이러한 변수가 설정되는 파일이 있어야합니다.

  • 답변 # 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 MAILLOGNAME  로그인 셸을 시작하십시오. 그러면 셸에서 자체 초기화를 수행합니다.

    의사 터미널에서 로그인 할 때 약간의 꼬임이 발생합니다. 종종 환경은 TERM 보다 연결을 처리하는 프로세스에서 더 많은 초기화를 얻습니다.  환경 변수 (네트워크 프로토콜은 종종 다른 쪽에서 환경을 전송하는 방법이 있습니다) 따라서 login  환경을 정리하지 않는 모드에서 사용되는 경우 정리는 연결을 처리하는 프로그램에 의해 수행됩니다.

    그래픽 환경은 일반적으로 login 에 위임하지 않습니다  그러나 비슷하게 행동하십시오. 신임 정보를 확인한 후 일반 환경 변수와 최소한 DISPLAY 의 깨끗한 환경을 작성합니다.  올바르게 설정하십시오. 그들은 종종 sysadmin이 제공 한 스크립트로 물건을 추가하도록 허용합니다. 로그인 쉘에서 환경을 얻으려고 시도 할 수도 있고 설정을 완료하기위한 스크립트를 제공 할 수도 있습니다. 데스크톱에서 프로그램을 실행할 때 환경은 그래픽 로그인 프로그램, 데스크톱 환경 및 로그인 스크립트가 설정 한 것의 조합입니다.

    마지막으로, 터미널 에뮬레이터를 시작할 때 로그인 쉘을 얻을 수 있습니다 (이 경우 쉘의 로그인 스크립트가 실행되어 최신 변경의 영향을 볼 수는 있지만 원합니다) 다른 프로그램과 동일한 환경이 표시되지 않거나 쉘의 로그인 스크립트가 실행되지 않으면 최신 변경 사항이 표시되지 않지만 다른 프로그램과 동일한 환경이 나타납니다. 쉘의 대화식 초기화 스크립트).

  • 답변 # 3

    /etc/bash* 확인  와이즈 비즈  파일.

  • 답변 # 4

    /etc/profile* 를 살펴 봐야합니다.  사용자 디렉토리의 루트에있는 파일-이와 같은 변수를 설정하거나 재정의 할 수 있습니다.

    그러나 모든 환경 변수가 어디에서 설정되는지를 의미하는 경우 일부 상위 프로세스에서 상속된다고 가정합니다. 아마도 이와 같은 것을 살펴보면 도움이 될 것입니다.

  • 답변 # 5

    배치에 따라 검사 된 (그리고 순서대로) 모든 파일을 제공해야하므로 bash의 맨 페이지를 확인하십시오. 와이즈 비즈  명령은 설정 내용을 알려줍니다. 그러나, 빠른 grep은 설정 위치를 알려줍니다.

    .profile

관련 자료

  • 이전 Dualboot win10/Linux Mint boots directly into win10 - Dualboot win10/Linux Mint가 win10으로 직접 부팅됩니다애벌레를 표시하지 않습니다
  • 다음 linux - ELF 파일의 프로그램 헤더 내용 읽기