Я в тупике. У меня есть скрипт в моем /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
bash
shell-script
executable
theillien
источник
источник
sh qa.sh
вместо./qa.sh
Ответы:
Обычно это происходит, когда
#!
строка shebang ( ) в вашем скрипте не работает.Шебанг - это то, что сообщает ядру, что файл должен быть выполнен с использованием интерпретатора. При запуске без
sudo
, сообщение немного более значимым. Но сsudo
вами получите сообщение, которое вы получили.Например:
bad interpreter
Сообщение ясно указывает на то, что это притон , который неисправен.источник
^M
символы, и переводчик читал их как часть линии Шебанга. Я проверил это,dos2unix
и это исправило это прямо. Спасибо ~У меня была именно эта проблема, оказалось, что это проблема кодирования текстового файла. Чтобы исправить это во время работы Xubuntu 14.04.3 LTS, я установил dos2unix и преобразовал кодировку скрипта, а затем снова запустил скрипт, используя sudo, и он работал нормально. Вы можете найти пример ниже:
источник
No such file or directory
ошибки.