데비안 - "command" 명령을 찾을 수 없습니다

데비안 - "command" 명령을 찾을 수 없습니다

내 쉘 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를 자동으로 추가하지 않습니다.$PATHsu

이것은 꽤 많은 사람들을 놀라게 했습니다.

대신 을 사용하여 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

그런 다음 시스템을 재부팅하십시오.

관련 정보