방금 새로운 Debian Buster를 설치했습니다:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
$ cat /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
[...]
$ whoami
zozo
$ su
Password:
# id -u
0
# printenv | grep -i ^path
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
루트로 실행하는 경우:
# grep -i path /etc/profile.d/*
출력 없음# grep -i path ~/.profile
출력 없음# grep -i path ~/.bashrc
출력 없음
데비안 시스템에서는 ~/.bash_profile
둘 다~/.bash_login
vi ~/.profile
PATH="/usr/bin:/bin:/usr/sbin:/sbin"
하지만 문제는 여전히 존재합니다.
Ctrl+ D일반 사용자로 돌아가기
그 다음에
$ su
password:
# printenv | grep -i ^path
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
그래서 몇 가지 검색을 해봤습니다.6.2 Bash 시작 파일
그 다음에
if [ -z "$PS1" ];then echo NOT interactive shell ;else echo INteractive shell ;fi
INteractive shell
그것은 말한다:
Bash가 대화형 로그인 셸로 호출되면 [...] 먼저 [...] /etc/profile [...]을 읽고 실행합니다. [...] 다음에 [...] ~/.profile ...을 찾습니다.
PATH
그래서 왜 로드되지 않는지 ( 호출/로드 ~/.profile
하지 않음 ) 궁금합니다 . ~/.profile
물론 에 넣으면 ~/.bashrc
작동합니다.
따라서 마지막으로 기본적으로 종료 또는 재부팅과 같은 기본 명령에 대한 경로가 없습니다.
systemctl
또한 와 같은 도구 는 본질적으로 관리 명령 /usr/bin
이지 /sbin
or /usr/sbin
(그리고 다른 많은 관리 명령, 예를 들어 getfacl
... setfacl
하지만 그것은 또 다른 질문입니다) 이라는 것을 알고 있습니다 .
여기에 뭔가가 빠져 있어야합니다.
답변1
로그인 쉘만 /etc/profile
및 를 읽을 수 있습니다 ~/.profile
.
에 전화하시면 확인하실 수 있습니다 echo $0
.
출력이 빼기 기호(예 -bosh
: )로 시작하는 경우 이는 로그인 쉘입니다.
따라서 변경 후 로그아웃했다가 다시 로그인하는 것이 좋습니다./etc/profile
/etc/sh.shrc
, /etc/bash.bashrc
또는 $HOME의 해당 파일은 다음과 같이 제공됩니다.어느단순한 로그인 셸이 아닌 대화형 셸입니다.
귀하의 쉘은 로그인 쉘이 아니기 때문에 왜 이런 일이 발생하는지 알아내려고 노력해야 합니다. 텍스트 콘솔을 통해 로그인 ssh
하고 쉘이 로그인 쉘로 표시되지 않은 경우 배포판과 관련된 버그 보고서를 작성해야 합니다.
올바른 X11 환경은 새로 생성된 쉘 창에서 argv[0]
시작하는 모든 쉘을 시작하므로 -
이러한 쉘은 자신을 로그인 쉘로 식별합니다. 이런 일이 발생하지 않으면 X11 환경이 손상될 수 있습니다.
로 수퍼유저 세션을 시작하면 su
로그인 쉘이 시작되지 않습니다 . 이러한 쉘이 로그인 쉘처럼 작동하도록 하려면 다음을 호출하십시오.
su -
시도해 보셨나요?