내 쉘 bash에서 오류가 발생했는데 bash : ... : command not found
오류 수정을 시작하는 방법을 모르겠습니다. 그리고 "bash" "Debian" 외에 어떤 마녀 태그를 선택해야 할지 모르겠습니다.
저는 루트이고 이 두 프로그램이 설치되어 있습니다. 운영 체제는 Debian Buster이며 새로 설치되었습니다. 설치하는 동안 Tasksel 구성 단계에서 모든 옵션을 선택 취소했습니다. 나는 그것이 내 껍질과 더 관련이 있다고 생각합니다. 나중에 저는 Awesome tiling windows를 설치하곤 했습니다.
이것은 내 경로의 결과입니다.
root@machine:~# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
다음은 두 가지 예입니다. 먼저 프로그램을 실행해 봅니다. 둘째, 프로그램이 설치되어 있는지 확인합니다.
root@machine:~# modprobe --verbose
bash: modprobe: command not found
root@adrien:~# apt-get install kmod
Reading package lists...
Done Building dependency tree
Reading state information...
Done kmod is already the newest version (26-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
root@machine:~# openvpn
bash: openvpn: command not found
root@adrien:~# apt-get install openvpn
Reading package lists... Done Building dependency tree
Reading state information...
Done openvpn is already the newest version (2.4.7-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
답변1
$PATH
귀하의 컴퓨터에 이러한 프로그램이 있는지 확인하십시오 .
$ echo $PATH
시스템 검색 경로가 무엇인지 표시해야 합니다. 어떤 비교
$ dpkg-query -L <package_name>
당신에게 말할 것입니다.
$ command -v program
프로그램의 전체/절대 경로를 알려줍니다.
이 방법으로 찾을 수 없으면 다음을 시도해 보세요.
find /sbin modprobe
find /usr/sbin modprobe
Modprobe는 상주 /sbin
하거나 위치할 수 있으며 /usr/sbin
에 대한 심볼릭 링크입니다 /bin/kmod
. modprobe가 있는 디렉터리에 대한 경로가 없으면 전체 경로(예: )를 제공하지 않으면 해당 경로를 사용할 수 없습니다 $ /sbin/modprobe
.
결과를 보내주시면 $ set | grep PATH
무엇이 잘못되었는지 확인할 수 있습니다.
출력에 and PATH
가 없다고 나타나 므로 이를 테스트하려면 먼저 다음 을 사용하십시오./sbin
/usr/sbin
$HOME/.bashrc
$ export PATH=$PATH:/sbin:/usr/sbin
그리고 그것이 작동하는지 확인하십시오. 그렇다면 추가 $HOME/.bashrc
하고 모든 사용자가 사용할 수 있도록 하려면 /etc/profile
@GAD3R이 제안한 곳에 추가하세요.
추신. $
명령 프롬프트입니다. 콘솔에 넣지 않으면 해당 명령이 셸에서 사용된다는 것을 나타냅니다. 일반적으로 일반 사용자의 경우 $
쉘 프롬프트로 사용되며, 이는 루트뿐만 아니라 일반적인 문제일 수 있으므로 를 사용했습니다 #
. 귀하의 경우에는 $ "become" # 그러나 이미 로그인되어 있기 때문입니다. 루트로는 아무 것도 변경되지 않습니다.root
$
root
답변2
데비안 10에서는 데비안이 su
이 명령의 다른 포크("Buster")로 전환했습니다. 이전 버전의 Debian과 달리 일반을 사용하여 루트가 되면 더 이상 시스템에 /sbin
및 /usr/sbin
을 자동으로 추가하지 않습니다./usr/local/sbin
$PATH
su
이는 많은 사람들을 놀라게 했습니다.
su -
루트로 전환할 때 환경의 명시적인 전체 재초기화를 사용할 수 있습니다 . 이렇게 하면 .../sbin
디렉터리가 $PATH
.
$PATH
또는 루트가 되면 자동으로 디렉터리를 추가할 수 있습니다.GAD3R의 답변에서 제안한대로.
또한 다음 명령을 사용하여 컴퓨터를 다시 시작할 수 있다는 것도 알았습니다.
root@machine:~# 다시 시작
바꾸다.
root@machine:~# systemctl 재시작
(참고: 질문 게시물당 하나의 질문만 하는 것이 Stack Exchange의 관례입니다. 이와 같은 질문이 여러 개 있으면 동일한 문제를 가진 다른 사람들이 적용 가능한 답변을 찾기가 더 어려워집니다.)
이는 오랜 Linux/Unix 관리자의 근육 기억 속에 깊이 내장되어 있는 고전적인 SysV 스타일의 종료/다시 시작 명령을 계속 사용할 수 있게 해주는 호환성 래퍼입니다.
답변3
실행 파일의 위치를 확인할 수 있습니다 $ which modprobe
.$ which openvpn
명령 su
은
# /usr/sbin/modprobe
# /sbin/openvpn
그것으로 su -
그것은된다
# modprobe
# openvpn
즉, su -
완전한 루트 권한/루트의 PATH만 제공됩니다. 일부 /sbin/
명령에는 필요합니다 /usr/sbin/
: Debian 10.
답변4
다음과 같이 편집하십시오 /etc/profile
(처음 6줄).
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
그런 다음 시스템을 다시 시작하십시오.