GNU/Linux >> Belajar Linux >  >> Linux

perintah tidak ditemukan saat menggunakan sudo

Periksa secure_path di sudo

[[email protected] ~]# sudo -V | grep 'Value to override'
Value to override user's $PATH with: /sbin:/bin:/usr/sbin:/usr/bin

Jika $PATH sedang diganti menggunakan visudo dan edit /etc/sudoers

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

Izin ditolak

Untuk menjalankan skrip, file harus memiliki set bit izin yang dapat dieksekusi .

Untuk memahami sepenuhnya izin file Linux, Anda dapat mempelajari dokumentasi untuk chmod memerintah. chmod, singkatan dari ubah mode , adalah perintah yang digunakan untuk mengubah setelan izin suatu 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 hasil dari menjalankan ...

ls -l foo.sh

... yang akan mencantumkan izin BACA, TULIS, dan EKSEKUSI untuk pemilik file, pemilik grup, dan semua orang yang bukan pemilik file atau anggota grup tempat file tersebut berada (grup izin terakhir terkadang dirujuk ke sebagai "dunia" atau "lainnya")

Berikut ringkasan cara memecahkan masalah kesalahan 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 tidak ada

chmod perintah memperbaikinya. (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 not found

Saat Anda menjalankan perintah menggunakan sudo Anda secara efektif menjalankannya sebagai superuser atau root.

Alasan mengapa pengguna root tidak menemukan perintah Anda kemungkinan adalah PATH variabel lingkungan untuk root tidak menyertakan direktori tempat foo.sh terletak . Oleh karena itu perintah tidak ditemukan.

Variabel lingkungan PATH berisi daftar direktori yang dicari untuk perintah. Setiap pengguna menetapkan variabel PATH mereka sendiri sesuai dengan kebutuhan mereka. Untuk melihat apa yang diatur untuk dijalankan

env | grep ^PATH

Berikut ini beberapa contoh hasil menjalankan env di atas perintah pertama sebagai pengguna biasa dan kemudian sebagai pengguna root menggunakan sudo

[email protected]:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

[email protected]:~$ 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, meskipun 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 berada tidak ada dalam variabel PATH dari pengguna root, oleh karena itu perintah tidak ditemukan kesalahan.


Solusi lain yang saya lihat di sini sejauh ini didasarkan pada beberapa definisi sistem, tetapi sebenarnya dimungkinkan untuk memiliki sudo gunakan PATH saat ini (dengan env perintah) dan/atau lingkungan lainnya (dengan -E option) hanya dengan menjalankannya dengan benar:

sudo -E env "PATH=$PATH" <command> [arguments]

Faktanya, seseorang dapat membuat alias darinya:

alias mysudo='sudo -E env "PATH=$PATH"'

(Anda juga dapat menamai alias itu sendiri sudo , menggantikan sudo asli .)


Linux
  1. [Memperbaiki] bash:Sudo:perintah tidak ditemukan

  2. Perintah Perbarui-alternatif Tidak Ditemukan?

  3. id:perintah tidak ditemukan

  1. w:perintah tidak ditemukan

  2. df:perintah tidak ditemukan

  3. du:perintah tidak ditemukan

  1. Sudo:Tidak Benar:Perintah Tidak Ditemukan?

  2. Mengapa sudo:perintah bundel tidak ditemukan?

  3. sudo:npm:perintah tidak ditemukan