내 쉘 bash에서 bash : ... : command not found
오류가 발생했는데 오류 해결을 시작하는 방법을 모르겠습니다. 또한 "bash" "Debian"을 제외하고 마녀 태그를 선택해야 한다는 것도 몰랐습니다.
저는 루트이고 이 두 프로그램도 이미 설치되어 있습니다. OS는 Debian Buster이고 새로 설치되었습니다. 설치 과정에서 Tasksel 구성 단계의 모든 옵션을 선택 취소했습니다. 내 Shell.Later에 더 많이 연결되어 있다고 생각합니다. 나중에 Awesome 타일링 창을 설치하는 데 사용합니다.
내 경로에 대한 출력은 다음과 같습니다.
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
무엇이 문제인지 확인할 수 있습니다.
출력 에 와 가 PATH
없다는 것을 나타내 므로 . 먼저 테스트하려면 다음을 사용하세요./sbin
/usr/sbin
$HOME/.bashrc
$ export PATH=$PATH:/sbin:/usr/sbin
그리고 작동하는지 확인해보세요. 그렇다면 추가 $HOME/.bashrc
하고 모든 사용자가 사용할 수 있도록 하려면 /etc/profile
@GAD3R이 제안한 대로 추가하세요.
추신. $
명령 프롬프트는 콘솔에 넣지 않고 쉘에서 명령이 사용된다는 것을 보여줍니다. 일반적으로 일반 사용자의 경우 가 $
쉘 프롬프트 표시기로 사용되고 . 루트 뿐만 아니라 일반적인 문제일 수도 있기 때문에 . 귀하의 경우에는 $ "becomes" #이지만 이미 루트로 로그인했기 때문에 아무 것도 변경되지 않는다는 점을 명심하십시오 .#
root
$
root
답변2
데비안은 su
데비안 10에서 명령의 다른 분기("Buster")로 전환했습니다. 이전 버전의 데비안과 달리 루트가 되기 위해 일반을 사용할 때 더 이상 자동으로 /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/
에는 Debian 10이 필요합니다 /usr/sbin/
.
답변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
그런 다음 시스템을 재부팅하십시오.