programing

sudo를 사용할 때 명령을 찾을 수 없습니다.

i4 2023. 5. 11. 21:06
반응형

sudo를 사용할 때 명령을 찾을 수 없습니다.

는 라는대본있습다라는 .foo.sh내 홈 폴더에 있습니다.

폴더로 하여 을 하면,./foo.sh알겠습니다

-bash: ./foo.sh: Permission denied.

를 할 때sudo ./foo.sh알겠습니다

sudo: foo.sh: command not found.

이 문제가 발생하는 이유와 해결 방법은 무엇입니까?

권한 거부

스크립트를 실행하려면 파일에 실행 권한 비트가 설정되어 있어야 합니다.

Linux 파일 사용 권한을 완전히 이해하려면 다음에 대한 설명서를 참조하십시오.chmod지휘권chmod(변경 모드의 약어)는 파일의 권한 설정을 변경하는 데 사용되는 명령입니다.

를 실행합니다.man chmod또는info chmod 에는 실행 할 수 있어야 합니다.읽고 이해한 후에는 실행 결과를 이해할 수 있어야 합니다...

ls -l foo.sh

여기에는 파일 소유자, 그룹 소유자 및 파일 소유자 또는 파일이 속한 그룹의 구성원이 아닌 다른 모든 사용자에 대한 읽기, 쓰기 및 실행 권한이 나열됩니다(마지막 권한 그룹을 "월드" 또는 "기타"라고 부르기도 함).

다음은 사용자의 경우 사용 권한 거부 오류를 해결하는 방법에 대한 요약입니다.

$ ls -l foo.sh                    # Check file permissions of foo
-rw-r--r-- 1 rkielty users 0 2012-10-21 14:47 foo.sh 
    ^^^ 
 ^^^ | ^^^   ^^^^^^^ ^^^^^
  |  |  |       |       | 
Owner| World    |       |
     |          |    Name of
   Group        |     Group
             Name of 
              Owner 

소유자에게 읽기 및 쓰기 액세스 권한이 있지만 -는 실행 권한이 없음을 나타냅니다.

chmod는 이 ( 그룹은 할 수 .)

$ chmod +x foo.sh               # The owner can set the executable permission on foo.sh
$ ls -l foo.sh                  # Now we see an x after the rw 
-rwxr-xr-x 1 rkielty users 0 2012-10-21 14:47 foo.sh
   ^  ^  ^

foo.sh 은 이제 Linux에 관한 한 실행 가능합니다.

sudo를 사용하면 명령을 찾을 수 없습니다.

sudo를 사용하여 명령을 실행하면 슈퍼 사용자 또는 루트로 효과적으로 실행됩니다.

를 찾지 는 root 사용자가 명령어를 수 없기 일 수 .PATH루트에 대한 환경 변수에 위치한 디렉터리가 포함되어 있지 않습니다.따라서 명령을 찾을 수 없습니다.

PATH 환경 변수에는 명령을 검색하는 디렉터리 목록이 포함됩니다.각 사용자는 필요에 따라 자신의 PATH 변수를 설정합니다.실행하도록 설정된 항목 확인

env | grep ^PATH

의 다은위샘출다니입력플을 입니다.env는 먼저 하는 루트 됩니다. sudo를 사용하여 루트 사용자로 사용합니다.

rkielty@rkielty-laptop:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

rkielty@rkielty-laptop:~$ sudo env | grep ^PATH
[sudo] password for rkielty: 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

유사하지만 이 경우 PATH에 포함된 디렉토리는 권한이 없는 사용자(rkelty)와 슈퍼 사용자가 같지 않습니다.

이 있는 foo.shresides가 루트 사용자의 PATH 변수에 없으므로 명령을 찾을 수 없습니다. 오류가 발생했습니다.

지금까지 본 다른 솔루션은 일부 시스템 정의를 기반으로 하지만 실제로는sudo의 류를타를 합니다.PATH((으)로 env the 명령) 및/또는사환경지머(명령어)-E옵션) 오른쪽을 호출하는 것만으로:

sudo -E env "PATH=$PATH" <command> [arguments]

사실, 사람들은 그것으로 가명을 만들 수 있습니다.

alias mysudo='sudo -E env "PATH=$PATH"'

자체의 을 지정할 도 있습니다.sudo의 교체본을 sudo.)

sudo에서 secure_path 확인

[root@host ~]# sudo -V | grep 'Value to override'
Value to override user's $PATH with: /sbin:/bin:/usr/sbin:/usr/bin

한다면$PATH를 사용하여 재정의되고 .visudo/etc/sudoers

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
  1. chmod +x foo.sh
  2. 해당 스크립트의 첫 번째 줄이 다음인지 확인합니다.#!/bin/sh혹은 그와 같은 것들.
  3. 물론 당신은 잘못된 디렉토리에 있습니다.와 대조를 보다.sudo pwd

중 수도 ./usr/local/bin예를 들어 슈퍼유저 PATH에 있습니다.그러면 스도에게 제공될 것입니다.

chmod +x foo.sh
sudo ln -s path-to-foo.sh /usr/local/bin/foo

답변을 보고 소프트 링크를 넣을 디렉터리에 대한 아이디어를 얻으십시오.

파일 경로를 명시적으로 지정해도 Linux에서 "command not found"라고 표시될 것 같습니다.

[veeam@jsandbox ~]$ sudo /tmp/uid.sh;echo $?
sudo: /tmp/uid.sh: command not found
1
[veeam@jsandbox ~]$ chmod +x /tmp/uid.sh
[veeam@jsandbox ~]$ sudo /tmp/uid.sh;echo $?
0

다소 오해의 소지가 있는 오류이지만, 기술적으로는 정확할 수 있습니다.파일은 실행 파일이 될 때까지 명령어가 아니므로 찾을 수 없습니다.

ㅠㅠchmod u+x foo.shchmod +x foo.sh위의 가이드와 문제가 있는 경우.이것은 다른 해결책들이 효과가 없을 때 저에게 효과가 있었습니다.

sudo를 사용할 때 "command not found"와 관련하여 훨씬 덜 해커적인 방법은 secure_path를 편집하는 것입니다.

여기에 완벽하게 설명되어 있습니다. https://superuser.com/questions/927512/how-to-set-path-for-sudo-commands

네, 이것이 제 솔루션입니다. ~/.bash_aliases에서 다음을 추가하면 됩니다.

# ADDS MY PATH WHEN SET AS ROOT
if [ $(id -u) = "0" ]; then
   export PATH=$PATH:/home/your_user/bin 
fi

Voila! 이제 매번 내보내기 PATH=$PATH:/home/your_user/bin을 수행할 필요 없이 sudo 또는 ROOT로 설정된 자체 스크립트를 실행할 수 있습니다.

Superuser용 HOME은 /root이므로 PATH를 추가할 때 명시적으로 설명해야 합니다.

명령줄이 불편하고 Ubuntu를 사용하는 경우 다음과 같이 문제를 해결할 수 있습니다.

  1. 파일이 있는 폴더 창 열기
  2. 실행 파일을 마우스 오른쪽 버튼으로 클릭하고 다음을 선택합니다.Properties
  3. Permissions 강조 합니다.Allow executing file as program

여기에 이미지 설명 입력

이 솔루션을 사용하면 사용자가 파일을 프로그램으로 실행할 수 있으며 sudo(또는 변경)가 필요하지 않습니다.PATH루트에 대한 환경 변수).

It seems sudo command not found

되어 있는지 하려면 sudo 패키가시설치있어는확다다같음입이니력합과면려를 합니다.sudoEnter 키를 누릅니다.가지고 계신다면,sudo메시지가 됩니다. 그렇지 " 된치시은짧도움메말표를다시니시합지은설스템다표니▁▁like"와 같은 메시지가 됩니다. 그렇지 않으면 다음과 같은 것을 볼 수 있습니다.sudo: command not found

sudo를 설치하려면 루트 계정을 사용하여 다음 명령 중 하나를 실행합니다.

apt-get install sudo package 한 package manager를 기반으로 합니다.

yum install sudo manageryum을 하는 경우 yum 패키지 관리자 yum을 하십시오.

언급URL : https://stackoverflow.com/questions/12996397/command-not-found-when-using-sudo

반응형