sudo: 실행할 수 없습니다. ./script.sh: 해당 파일이나 디렉터리가 없습니다.

sudo: 실행할 수 없습니다. ./script.sh: 해당 파일이나 디렉터리가 없습니다.

혼란스러워요. 내 디렉토리에 실행 가능한 스크립트가 있습니다 /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

이것은 새로운 버전입니다. 문제를 일으킬 수 있는 변경 사항은 적용되지 않았습니다. 실제로 스크립트의 전체 요점은 스크립트가 실제로 우리 전략에 따라 구축되었는지 확인하는 것입니다. 어쩌면 그렇지 않고 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

답변1

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

답변2

방금 이 문제가 발생했는데 텍스트 파일 인코딩 문제로 밝혀졌습니다. 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

관련 정보