sudo: çalıştırılamıyor ./script.sh: böyle bir dosya veya dizin yok


27

Şoktayım. /homeDizinimde çalıştırılabilir bir komut dosyası var :

[user@server ~]$ ll
total 4
-rwx------ 1 user user 2608 Jul 15 18:23 qa.sh

Ancak, onunla çalıştırmayı denediğimde sudoonu bulamadığını söylüyor:

[user@server ~]$ sudo ./qa.sh 
[sudo] password for user: 
sudo: unable to execute ./qa.sh: No such file or directory

Bu yeni bir yapıda. Sorun yaratacak hiçbir değişiklik yapılmamıştır. Aslında, senaryonun amacı, aslında politikalarımıza göre oluşturulmasını sağlamaktır. Belki de belki değil ve sudoinşa sırasında gerçekten kırılıyor?

Ayrıca sudodiğer dizinlerdeki diğer komutlarla da çalışabileceğime dikkat etmeliyim .

EDIT: Senaryo (Yazmadım, o yüzden /bin/bashbeni geçme, lütfen;)

#! /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

3
sh qa.shyerine kullanmayı deneyin./qa.sh
Networker

@ Networker Bu formatı kullanırken davranışta değişiklik olmaz.
theillien

Yanıtlar:


28

Bu genellikle #!betiğinizdeki shebang ( ) satırı bozulduğunda gerçekleşir.

Shebang, çekirdeğe dosyanın bir tercüman kullanılarak yürütülmesi gerektiğini söyleyen şeydir. Onsuz çalıştırdığınızda sudo, mesaj biraz daha anlamlı. Ama sudoseninle aldığın mesajı al.

Örneğin:

$ 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 interpreterMesajı açıkça arızalı shebang olduğunu gösterir.


11
Sorun buydu. Gizli ^Mkarakterler vardı ve tercüman onu Shebang hattının bir parçası olarak okuyordu. Ben araştırdım dos2unixve düzeltildi. Thanks ~
theillien

1
Hangi editörü kullanıyorsunuz?
ctrl-alt-delor

5
Benim durumumda, satır sonu yanlış ayarlanmış, Windows için CR-LF, Linux için LF olmalıdır. Bunu bulmadan önce biraz zaman alabilir.
RolfBly

11

Ben sadece bu kesin sorunu yaşadım, bir metin dosyası kodlama sorunu olduğu ortaya çıktı. Xubuntu 14.04.3 LTS'yi çalıştırırken düzeltmem için dos2unix'i kurdum ve betiğin kodlamasını dönüştürdüm ve sonra sudo kullanarak betiği tekrar çalıştırdım ve iyi çalıştı. Aşağıda bir örnek bulabilirsiniz:

sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh && sudo ./test.sh

Bu işe yaramasına rağmen, satır biten karakterlerin yorumlanmasının dosyadaki shebang tarafından şekillendirildiğini fark edin. Böylece bu problemi çözebilir, ancak shebang'ı da değiştirebilir.
ErikE,

Windows'taki Atom editöründe bu sorunu yaşadım. Varsayılan satır biten CRLF idi. Ancak, Ayarlar> Paketler> Satır Sonu Seçici seçeneğine giderseniz, LF olarak biten varsayılan satırı değiştirebilirsiniz. Sonra da WinSCP bash betiğini Linux'a kopyaladığınızda bu yanıltıcı No such file or directoryhata olmadan çalışmalıdır .
Şubat’ta
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.