sudo: ไม่สามารถเรียกใช้. /script.sh: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


27

ฉันนิ่งงัน ฉันมีสคริปต์ใน/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

3
ลองใช้sh qa.shแทน./qa.sh
Networker

@Networker ไม่มีการเปลี่ยนแปลงพฤติกรรมเมื่อใช้รูปแบบนี้
theillien

คำตอบ:


28

สิ่งนี้มักจะเกิดขึ้นเมื่อ#!บรรทัด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 ซึ่งเป็นความผิดพลาด


11
นี่คือปัญหา มี^Mตัวละครที่ซ่อนอยู่และล่ามก็อ่านมันเป็นส่วนหนึ่งของแนว Shebang ฉันวิ่งผ่านdos2unixและซ่อมมันขึ้นมา ขอบคุณ ~
theillien

1
คุณใช้โปรแกรมแก้ไขอะไร
ctrl-alt-delor

5
ในกรณีของฉันการตั้งค่าการสิ้นสุดบรรทัดไม่ถูกต้องเป็น CR-LF สำหรับ Windows ควรเป็น LF สำหรับ Linux สามารถใช้เวลาสักครู่ก่อนที่คุณจะพบว่า
RolfBly

11

ฉันเพิ่งมีปัญหาตรงนี้มันกลายเป็นปัญหาการเข้ารหัสไฟล์ข้อความ สำหรับฉันที่จะแก้ไขในขณะที่ใช้งาน 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

ในขณะที่ใช้งานได้โปรดตระหนักว่าการแปลความหมายของอักขระที่ลงท้ายด้วยบรรทัดจะถูกกำหนดโดย shebang ในไฟล์ ดังนั้นสิ่งนี้สามารถแก้ไขปัญหาได้ แต่สามารถเปลี่ยน shebang ได้
ErikE

ฉันมีปัญหานี้กับตัวแก้ไข Atom บน Windows การสิ้นสุดบรรทัดเริ่มต้นคือ CRLF แต่ถ้าคุณไปที่การตั้งค่า> แพ็คเกจ> ตัวเลือกการสิ้นสุดบรรทัดคุณสามารถเปลี่ยนบรรทัดเริ่มต้นที่ลงท้ายด้วย LF จากนั้นเมื่อคุณ WinSCP สคริปต์ bash เป็น Linux ควรดำเนินการโดยไม่มีNo such file or directoryข้อผิดพลาดที่ทำให้เข้าใจผิด
snark
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.