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