sudo: निष्पादित करने में असमर्थ ।/cript.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

@ नेटवर्क इस प्रारूप का उपयोग करते समय व्यवहार में कोई बदलाव नहीं करता है।
जिलियन

जवाबों:


28

यह आमतौर पर तब होता है जब #!आपकी स्क्रिप्ट में शेबंग ( ) लाइन टूट जाती है।

शेबंग वह है जो कर्नेल को बताता है कि फ़ाइल को दुभाषिया का उपयोग करके निष्पादित करने की आवश्यकता है। जब बिना चलाया जाता है 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संदेश स्पष्ट रूप से इंगित करता है कि यह मामला जो दोषपूर्ण है।


11
यह मुद्दा था। छिपे हुए ^Mपात्र थे और दुभाषिया इसे शेबंग लाइन के हिस्से के रूप में पढ़ रहा था। मैंने इसे चलाया dos2unixऔर इसे ठीक किया। धन्यवाद ~
२१:०४ पर १५'१४

1
आप किस संपादक का उपयोग कर रहे हैं?
ctrl-alt-delor 23

5
मेरे मामले में, विंडोज के लिए सीआर-एलएफ के लिए लाइन एंडिंग गलत था, लिनक्स के लिए एलएफ होना चाहिए। यह पता लगाने से पहले आपको कुछ समय लग सकता है।
रॉल्फबली

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

हालांकि यह काम करता है, यह महसूस करें कि लाइन एंडिंग वर्णों की व्याख्या फ़ाइल पर शेबंग द्वारा आकारित है। तो यह समस्या को ठीक कर सकता है, लेकिन इसलिए शेबंग को बदल सकता है।
यूरिक

मुझे विंडोज पर एटम संपादक के साथ यह समस्या थी। डिफ़ॉल्ट लाइन समाप्त हो रही थी CRLF। लेकिन अगर आप सेटिंग> पैकेज> लाइन एंडिंग सिलेक्टर में जाते हैं तो आप डिफ़ॉल्ट लाइन को LF में बदल सकते हैं। फिर जब आप Linux को bash स्क्रिप्ट को WinSCP करते हैं तो उसे उस भ्रामक No such file or directoryत्रुटि के बिना निष्पादित करना चाहिए ।
स्नार्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.