Izin ditolak
Untuk menjalankan skrip file harus memiliki set bit izin yang dapat dieksekusi .
Untuk memahami izin file Linux, Anda dapat mempelajari dokumentasi untuk chmod
perintah tersebut. chmod , singkatan dari mode perubahan , adalah perintah yang digunakan untuk mengubah pengaturan izin file.
Untuk membaca dokumentasi chmod untuk sistem lokal Anda, jalankan man chmod
atau info chmod
dari baris perintah. Setelah membaca dan memahami Anda harus dapat memahami output dari menjalankan ...
ls -l foo.sh
... yang akan mencantumkan izin MEMBACA, MENULIS dan MENGEKSEKUSI untuk pemilik file, pemilik grup, dan semua orang lain yang bukan pemilik file atau anggota grup yang dimiliki file tersebut (grup izin terakhir kadang-kadang disebut sebagai sebagai "dunia" atau "lainnya")
Berikut ringkasan tentang cara memecahkan masalah Izin Ditolak dalam kasus Anda.
$ 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
Pemilik telah membaca dan menulis akses rw tetapi - menunjukkan bahwa izin yang dapat dieksekusi hilang
The chmod
perintah perbaikan itu. (Grup dan lainnya hanya memiliki izin baca yang ditetapkan pada file, mereka tidak dapat menulis atau menjalankannya)
$ 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 sekarang dapat dieksekusi sejauh menyangkut Linux.
Menggunakan hasil sudo di Command tidak ditemukan
Saat Anda menjalankan perintah menggunakan sudo, Anda menjalankannya secara efektif sebagai superuser atau root.
Alasan bahwa pengguna root tidak menemukan perintah Anda kemungkinan PATH
variabel lingkungan untuk root tidak termasuk direktori di mana foo.sh
berada . Karenanya perintah tidak ditemukan.
Variabel lingkungan PATH berisi daftar direktori yang dicari perintah. Setiap pengguna menetapkan variabel PATH mereka sendiri sesuai dengan kebutuhan mereka. Untuk melihat apa yang sudah diatur untuk dijalankan
env | grep ^PATH
Berikut ini beberapa contoh keluaran dari menjalankan env
perintah di atas pertama sebagai pengguna biasa dan kemudian sebagai pengguna root menggunakan 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
Perhatikan bahwa, walaupun serupa, dalam hal ini direktori yang terdapat dalam PATH pengguna yang tidak memiliki hak istimewa (rkielty) dan pengguna super tidak sama .
Direktori tempat foo.sh
tinggal tidak ada dalam variabel PATH dari pengguna root, karenanya perintah tidak ditemukan kesalahan.
sudo
IniPATH
sama dengan pengguna?Solusi lain yang saya lihat di sini sejauh ini didasarkan pada beberapa definisi sistem, tetapi sebenarnya mungkin untuk
sudo
menggunakan arusPATH
(denganenv
perintah) dan / atau seluruh lingkungan (dengan-E
opsi) hanya dengan menjalankannya dengan benar :Bahkan, seseorang dapat membuat alias dari situ:
(Dimungkinkan juga untuk memberi nama alias itu sendiri
sudo
, menggantikan yang aslisudo
.)sumber
command not found
masalah yang dihadapi di distro Ubuntu. Terima kasih sobat../bashrc
untuk menyimpannya di antara sesiPeriksa secure_path pada sudo
Jika
$PATH
sedang diganti, gunakanvisudo
dan edit/etc/sudoers
sumber
chmod +x foo.sh
#!/bin/sh
atau semacamnya.sudo pwd
sumber
Anda juga dapat membuat tautan lunak ke skrip Anda di salah satu direktori (
/usr/local/bin
misalnya) di PATH pengguna super. Kemudian akan tersedia untuk sudo.Lihat jawaban ini untuk mengetahui direktori mana yang akan dijadikan tautan lunak.
sumber
Tampaknya linux akan mengatakan "command not found" bahkan jika Anda secara eksplisit memberikan path ke file tersebut.
Ini adalah kesalahan yang agak menyesatkan, namun mungkin secara teknis benar. File bukan perintah sampai file tersebut dapat dieksekusi, dan karenanya tidak dapat ditemukan.
sumber
Ok ini solusi saya: di ~ / .bash_aliases cukup tambahkan yang berikut ini:
Voila! Sekarang Anda dapat menjalankan skrip Anda sendiri dengan sudo atau ditetapkan sebagai ROOT tanpa harus melakukan ekspor PATH = $ PATH: / home / your_user / bin setiap saat.
Perhatikan bahwa saya harus eksplisit ketika menambahkan PATH saya karena HOME untuk superuser adalah / root
sumber
Coba
chmod u+x foo.sh
alih-alihchmod +x foo.sh
jika Anda mengalami masalah dengan panduan di atas. Ini bekerja untuk saya ketika solusi lain tidak.sumber
Ada jawaban bagus di atas. Jika, setelah mencobanya, Anda masih dapat
command not found
mencoba lagi dengan seluruh path file:sumber