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