ปฏิเสธการอนุญาต
ในการเรียกใช้สคริปต์ไฟล์จะต้องมีชุดบิตสิทธิ์การใช้งาน
เพื่อให้เข้าใจถึงการอนุญาตของไฟล์ Linux อย่างสมบูรณ์คุณสามารถศึกษาเอกสารสำหรับchmodคำสั่ง chmodคำย่อของโหมดการเปลี่ยนแปลงเป็นคำสั่งที่ใช้ในการเปลี่ยนการตั้งค่าการอนุญาตของไฟล์
หากต้องการอ่านเอกสาร chmod สำหรับระบบโลคัลของคุณให้รันman chmodหรือinfo chmodจากบรรทัดรับคำสั่ง เมื่ออ่านและเข้าใจแล้วคุณควรจะสามารถเข้าใจผลลัพธ์ของการรัน ...
ls -l foo.sh
... ซึ่งจะแสดงรายการสิทธิ์ในการอ่านเขียนและดำเนินการสำหรับเจ้าของไฟล์เจ้าของกลุ่มและคนอื่น ๆ ที่ไม่ใช่เจ้าของไฟล์หรือสมาชิกของกลุ่มที่ไฟล์นั้นอยู่ (บางครั้งกลุ่มสิทธิ์สุดท้ายจะถูกอ้างถึง เป็น "โลก" หรือ "อื่น ๆ ")
นี่คือบทสรุปของวิธีการแก้ไขข้อผิดพลาดการอนุญาตที่ถูกปฏิเสธในกรณีของคุณ
$ ls -l foo.sh                    # Check file permissions of foo
-rw-r--r-- 1 rkielty users 0 2012-10-21 14:47 foo.sh 
    ^^^ 
 ^^^ | ^^^   ^^^^^^^ ^^^^^
  |  |  |       |       | 
Owner| World    |       |
     |          |    Name of
   Group        |     Group
             Name of 
              Owner 
เจ้าของได้อ่านและเขียนการเข้าถึง rw แล้ว แต่ - บ่งชี้ว่าสิทธิ์การใช้งานจะหายไป
chmodแก้ไขคำสั่งที่ (กลุ่มและอื่น ๆ มีสิทธิ์อ่านตั้งไว้บนไฟล์เท่านั้นพวกเขาไม่สามารถเขียนหรือเรียกใช้งานได้)
$ chmod +x foo.sh               # The owner can set the executable permission on foo.sh
$ ls -l foo.sh                  # Now we see an x after the rw 
-rwxr-xr-x 1 rkielty users 0 2012-10-21 14:47 foo.sh
   ^  ^  ^
foo.sh สามารถทำงานได้เท่าที่ Linux เกี่ยวข้อง
การใช้ผลลัพธ์ sudo ในไม่พบคำสั่ง
เมื่อคุณรันคำสั่งโดยใช้sudoคุณจะรันมันอย่างมีประสิทธิภาพในฐานะ superuser หรือ root
เหตุผลที่ผู้ใช้รากจะไม่พบคำสั่งของคุณเป็นไปได้ว่าPATHตัวแปรสภาพแวดล้อมสำหรับรากไม่รวมไดเรกทอรีที่foo.shตั้งอยู่ ดังนั้นจึงไม่พบคำสั่ง
ตัวแปรสภาพแวดล้อม PATH มีรายการไดเรกทอรีที่จะค้นหาคำสั่ง ผู้ใช้แต่ละคนตั้งค่าตัวแปร PATH ของตนเองตามความต้องการ เพื่อดูว่ามันถูกตั้งค่าให้ทำงาน
env | grep ^PATH
นี่คือตัวอย่างบางส่วนของการรันenvคำสั่งด้านบนก่อนเป็นผู้ใช้ธรรมดาและจากนั้นในฐานะผู้ใช้รูทที่ใช้ sudo
rkielty@rkielty-laptop:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
rkielty@rkielty-laptop:~$ sudo env | grep ^PATH
[sudo] password for rkielty: 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
หมายเหตุว่าแม้ว่าที่คล้ายกันในกรณีนี้ไดเรกทอรีที่มีอยู่ในเส้นทางของผู้ใช้ที่ไม่ได้รับการยกเว้น (rkielty) และผู้ใช้ super จะไม่เหมือนกัน
ไดเร็กทอรีที่foo.shไม่มีอยู่ในตัวแปร PATH ของผู้ใช้รูทดังนั้นคำสั่งไม่พบข้อผิดพลาด