sudo: không thể thực thi ./script.sh: không có tệp hoặc thư mục như vậy


27

Tôi bối rối. Tôi có một tập lệnh trong /homethư mục của tôi có thể thực thi được:

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

Tuy nhiên, khi tôi cố chạy nó với sudonó thì nó không thể tìm thấy:

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

Đây là một bản dựng mới. Không có thay đổi đã được thực hiện sẽ gây ra vấn đề. Trong thực tế, quan điểm của kịch bản là đảm bảo rằng nó thực sự được xây dựng theo chính sách của chúng tôi. Có lẽ nó không phải và sudothực sự bị phá vỡ trong quá trình xây dựng?

Tôi cũng cần lưu ý rằng tôi có thể chạy sudovới các lệnh khác trong các thư mục khác.

EDIT: Kịch bản (Tôi đã không viết nó vì vậy đừng để /bin/bashtôi vượt qua nó, làm ơn;))

#! /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
cố gắng sử dụng sh qa.shthay vì./qa.sh
Networker

@Networker Không thay đổi hành vi khi sử dụng định dạng này.
theillien

Câu trả lời:


28

Điều này thường xảy ra khi dòng shebang ( #!) trong tập lệnh của bạn bị hỏng.

Shebang là thứ cho kernel biết tập tin cần được thực thi bằng trình thông dịch. Khi chạy mà không có sudo, thông điệp có ý nghĩa hơn một chút. Nhưng với sudobạn nhận được tin nhắn bạn nhận được.

Ví dụ:

$ 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

Các bad interpreterthông điệp rõ ràng cho thấy rằng đó là công việc mà là bị lỗi.


11
Đây là vấn đề. Có những ^Mnhân vật ẩn và người phiên dịch đang đọc nó như một phần của dòng shebang. Tôi chạy nó qua dos2unixvà nó sửa nó ngay. Cảm ơn ~
theillien

1
Bạn đang sử dụng trình soạn thảo nào?
ctrl-alt-delor

5
Trong trường hợp của tôi, kết thúc dòng đã được đặt sai, thành CR-LF cho Windows, phải là LF cho Linux. Có thể mất một lúc trước khi bạn phát hiện ra điều đó.
RolfBly

11

Tôi chỉ có vấn đề chính xác này, hóa ra đó là một vấn đề mã hóa tập tin văn bản. Để tôi sửa nó trong khi chạy Xubfox 14.04.3 LTS, tôi đã cài đặt dos2unix và chuyển đổi mã hóa của tập lệnh và sau đó chạy lại tập lệnh bằng sudo và nó hoạt động tốt. Bạn có thể tìm thấy một ví dụ dưới đây:

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

Trong khi điều này không hoạt động, nhận ra rằng việc giải thích các ký tự kết thúc dòng được định hình bởi shebang trên tệp. Vì vậy, điều này có thể khắc phục vấn đề, nhưng vì vậy có thể thay đổi shebang.
ErikE

Tôi gặp vấn đề này với trình soạn thảo Atom trên Windows. Dòng kết thúc mặc định là CRLF. Nhưng nếu bạn đi tới Cài đặt> Gói> Bộ chọn kết thúc dòng, bạn có thể thay đổi dòng mặc định kết thúc thành LF. Sau đó, khi bạn WinSCP, tập lệnh bash cho Linux, nó sẽ thực thi mà không có No such file or directorylỗi sai.
sủa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.