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

나는 충격을 받았다. 내 /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



답변

일반적으로 #!스크립트 의 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이라는 것을 분명히 나타냅니다.


답변

방금이 정확한 문제가 있었는데 텍스트 파일 인코딩 문제였습니다. 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


답변