sudo : ./script.sh를 실행할 수 없습니다 : 해당 파일 또는 디렉토리가 없습니다.


27

나는 충격을 받았다. 내 /home디렉토리에 실행 가능한 스크립트 가 있습니다.

[user@server ~]$ ll
total 4
-rwx------ 1 user user 2608 Jul 15 18:23 qa.sh

그러나 그것을 실행하려고하면 sudo찾을 수 없다고 말합니다.

[user@server ~]$ sudo ./qa.sh 
[sudo] password for user: 
sudo: unable to execute ./qa.sh: No such file or directory

이것은 새로운 빌드입니다. 문제점을 야기하는 변경 사항이 없습니다. 실제로 스크립트의 요점은 Google 정책에 따라 실제로 작성되도록하는 것입니다. 아마도 sudo빌드 중이 아닐 수도 있고 실제로 손상되고 있습니까?

또한 sudo다른 디렉토리에서 다른 명령으로 실행할 수 있습니다 .

편집 : 스크립트 (필자는 작성하지 않았으므로 /bin/bash제발;))

#! /bin/bash

. /root/.bash_profile

customer=$1

if [ -z "$customer" ]; then

        echo "Customer not provided. Exiting..."
        exit 1

fi

space ()
{
echo
echo '###########################################################################'
echo '###########################################################################'
echo '###########################################################################'
echo
}

g=/bin/egrep

$g ^Listen /etc/ssh/sshd_config
$g ^PermitR /etc/ssh/sshd_config
$g ^LogL /etc/ssh/sshd_config
$g ^PubkeyA /etc/ssh/sshd_config
$g ^HostbasedA /etc/ssh/sshd_config
$g ^IgnoreR /etc/ssh/sshd_config
$g ^PermitE /etc/ssh/sshd_config
$g ^ClientA /etc/ssh/sshd_config

space

$g 'snyder|rsch|bream|shud|mweb|dam|kng|cdu|dpr|aro|pvya' /etc/passwd ; echo ; echo ; $g 'snyder|rsch|bream|shud|mweb|dam|kng|cdu|dpr|aro|pvya' /etc/shadow

space

$g 'dsu|scan' /etc/passwd ; echo ; echo ; $g 'dsu|scan' /etc/shadow

space

$g ${customer}admin /etc/passwd

space

chage -l ${customer}admin

space

$g 'urs|cust|dsu' /etc/sudoers

space

$g dsu /etc/security/access.conf

space

$g account /etc/pam.d/login

space

/sbin/ifconfig -a | $g addr | $g -v inet6

space

echo "10.153.156.0|10.153.174.160|10.120.80.0|10.152.80.0|10.153.193.0|172.18.1.0|10.153.173.0"
echo
$g '10.153.156.0|10.153.174.160|10.120.80.0|10.152.80.0|10.153.193.0|172.18.1.0|10.153.173.0' /etc/sysconfig/network-scripts/route-eth1

space

cat /etc/sysconfig/network-scripts/route-eth2

space

netstat -rn | tail -1

space

cat /etc/sysconfig/iptables

space

cat /etc/hosts

space

##file /usr/local/groundwork ; echo ; echo ; /sbin/service gdma status

##space

cat /etc/resolv.conf

space

HOSTNAME=`echo $HOSTNAME | awk -F. '{ print $1 }'`

nslookup ${HOSTNAME}

echo
echo

nslookup ${HOSTNAME}-mgt

echo
echo

nslookup ${HOSTNAME}-bkp

space

/sbin/service rhnsd status ; echo ; echo ; /sbin/chkconfig --list rhnsd ; echo ; echo ; yum update --security

space

/sbin/service osad status ; echo ; echo ; /sbin/chkconfig --list osad

space

/sbin/service sshd status ; echo ; echo ; /sbin/chkconfig --list sshd

space

/sbin/service snmpd status ; echo ; echo ; /sbin/chkconfig --list snmpd ; echo ; echo ; echo ; cat /etc/snmp/snmpd.conf

space

df -h

space

cat /proc/cpuinfo | $g ^processor

space

free -g

space

if [ -f /etc/rsyslog.conf ]; then

        tail -3 /etc/rsyslog.conf

else

        echo "This system is not running rsyslog."

fi

rm -f $0

3
sh qa.sh대신 사용하십시오./qa.sh
Networker

@Networker이 형식을 사용할 때 동작에 변화가 없습니다.
theillien

답변:


28

일반적으로 #!스크립트 의 shebang ( ) 줄이 깨졌을 때 발생합니다 .

shebang은 커널에게 인터프리터를 사용하여 파일을 실행해야 함을 알려줍니다. 없이 실행 sudo하면 메시지가 조금 더 의미가 있습니다. 그러나 sudo당신은 당신이받은 메시지를 얻을.

예를 들면 다음과 같습니다.

$ cat test.sh
#!/bin/foo
echo bar

$ ./test.sh
bash: ./test.sh: /bin/foo: bad interpreter: No such file or directory

$ bash test.sh
bar

$ sudo ./test.sh
sudo: unable to execute ./test.sh: No such file or directory

$ sudo bash ./test.sh
bar

bad interpreter메시지는 그것이 잘못 된 shebang이라는 것을 분명히 나타냅니다.


11
이것이 문제였습니다. 숨겨진 ^M문자 가 있었고 통역사가 셰방 라인의 일부로 읽었습니다. 나는 그것을 통해 dos2unix그것을 바로 고쳤다. 감사합니다
theillien

1
어떤 편집기를 사용하고 있습니까?
ctrl-alt-delor

5
필자의 경우 줄 끝이 Windows의 CR-LF로 잘못 설정되어 Linux의 경우 LF가되어야합니다. 당신이 그것을 발견하기 전에 시간이 걸릴 수 있습니다.
RolfBly

11

방금이 정확한 문제가 있었는데 텍스트 파일 인코딩 문제였습니다. Xubuntu 14.04.3 LTS를 실행하는 동안 문제를 해결하기 위해 dos2unix를 설치하고 스크립트 인코딩을 변환 한 다음 sudo를 사용하여 스크립트를 다시 실행하면 정상적으로 작동했습니다. 아래에서 예를 찾을 수 있습니다.

sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh && sudo ./test.sh

이것이 작동하는 동안 줄 끝 문자의 해석은 파일의 shebang에 의해 형성됨을 인식하십시오. 따라서 문제를 해결할 수 있지만 Shebang을 변경할 수 있습니다.
ErikE

Windows의 Atom 편집기 에서이 문제가 발생했습니다. 기본 줄 끝은 CRLF입니다. 그러나 설정> 패키지> 줄 끝 선택기로 이동하면 기본 줄 끝을 LF로 변경할 수 있습니다. 그런 다음 Linux에서 bash 스크립트를 WinSCP 할 때 잘못된 No such file or directory오류 없이 실행해야 합니다.
스나크
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.