Yanıtlar:
İzin reddedildi
Bir komut dosyasını çalıştırmak için dosyanın yürütülebilir izin biti ayarlanmış olması gerekir .
Linux dosya izinlerini tam olarak anlamak için chmod
komutun belgelerini inceleyebilirsiniz . Değişiklik modunun kısaltması olan chmod , bir dosyanın izin ayarlarını değiştirmek için kullanılan komuttur.
Yerel sisteminizin chmod belgelerini okumak için man chmod
veya info chmod
komut satırından çalıştırın . Okuduktan ve anladıktan sonra koşmanın çıktısını anlayabilmelisiniz ...
ls -l foo.sh
... dosya sahibi, grup sahibi ve dosya sahibi veya dosyanın ait olduğu grubun üyesi olmayan herkes için READ, WRITE ve EXECUTE izinlerini listeleyecektir (son izin grubuna bazen atıfta bulunulur) "dünya" veya "diğer" olarak)
Durumunuzda İzin Reddedildi hatasının nasıl giderileceği hakkında bir özet .
$ 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
Sahibi okuma ve yazma erişimi rw var ama - yürütülebilir izin eksik olduğunu gösterir
chmod
Komut giderdiği. (Grup ve diğerleri yalnızca dosyada okuma iznine sahiptir, dosyaya yazamaz veya yürütemezler)
$ 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 artık Linux konusunda yürütülebilir.
Komutta sudo sonuçlarını kullanma bulunamadı
Sudo kullanarak bir komut çalıştırdığınızda , etkin bir şekilde süper kullanıcı veya kök olarak çalıştırırsınız.
Kök kullanıcı komutu bulma olmadığını nedeni olasıdır PATH
root için ortam değişkeni içermez dizini foo.sh
yer almaktadır . Bu nedenle komut bulunamadı.
PATH ortam değişkeni, komutlar için aranan dizinlerin bir listesini içerir. Her kullanıcı kendi PATH değişkenini ihtiyaçlarına göre ayarlar. Neyin çalıştırıldığını görmek için
env | grep ^PATH
Yukarıdaki env
komutu önce sıradan bir kullanıcı olarak ve ardından sudo kullanan kök kullanıcı olarak çalıştırmanın bazı örnek çıktısı
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
Benzer olmasına rağmen, bu durumda PATH'de bulunan dizinlerin ayrıcalıksız kullanıcı (rkielty) ve süper kullanıcının aynı olmadığını unutmayın .
foo.sh
Kök kullanıcının PATH değişkeninde ikamet ettiği dizin bu nedenle komut bulunamadı hatası.
sudo
's PATH
kullanıcının aynı?
Burada şimdiye kadar gördüğüm diğer çözümler bazı sistem tanımlarına dayanıyor, ama aslında sudo
akımı PATH
( env
komutla) ve / veya ortamın geri kalanını ( -E
seçenekle) doğru şekilde çağırarak kullanmak mümkün. :
sudo -E env "PATH=$PATH" <command> [arguments]
Aslında, bundan bir takma ad yapılabilir:
alias mysudo='sudo -E env "PATH=$PATH"'
( sudo
Orijinali değiştirerek takma adı da adlandırmak mümkündür sudo
.)
command not found
Ubuntu dağıtımında karşılaşılan sorun için doğru ve en standart çözüm olduğuna inanıyorum . Teşekkürler dostum.
./bashrc
oturumlar arasında kaydetmek için takma adı ekleyebilirsiniz
Sudo üzerinde secure_path olup olmadığını kontrol edin
[root@host ~]# sudo -V | grep 'Value to override'
Value to override user's $PATH with: /sbin:/bin:/usr/sbin:/usr/bin
Eğer $PATH
geçersiz kılınan kullanımını ediliyor visudo
ve düzenle/etc/sudoers
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
Ayrıca /usr/local/bin
, süper kullanıcı PATH'indeki dizinlerden birinde ( örneğin) komut dosyasına yumuşak bir bağlantı da oluşturabilirsiniz . Daha sonra sudo tarafından kullanılabilir.
chmod +x foo.sh
sudo ln -s path-to-foo.sh /usr/local/bin/foo
Yumuşak bağlantıyı hangi dizine koyacağınıza dair bir fikir edinmek için bu cevaba bir göz atın .
Görünüşe göre, dosya yolunu açıkça verseniz bile linux "komut bulunamadı" diyecektir.
[veeam@jsandbox ~]$ sudo /tmp/uid.sh;echo $?
sudo: /tmp/uid.sh: command not found
1
[veeam@jsandbox ~]$ chmod +x /tmp/uid.sh
[veeam@jsandbox ~]$ sudo /tmp/uid.sh;echo $?
0
Bu biraz yanıltıcı bir hata, ancak muhtemelen teknik olarak doğru. Bir dosya yürütülebilir olana kadar bir komut değildir ve bu nedenle bulunamaz.
Tamam bu benim çözüm: ~ / .bash_aliases sadece aşağıdakileri ekleyin:
# ADDS MY PATH WHEN SET AS ROOT
if [ $(id -u) = "0" ]; then
export PATH=$PATH:/home/your_user/bin
fi
İşte bu kadar! Artık kendi komut dosyalarınızı sudo ile yürütebilir veya bir dışa aktarma yapmak zorunda kalmadan ROOT olarak ayarlayabilirsiniz. PATH = $ PATH: / home / your_user / bin her seferinde.
Süper kullanıcı için HOME / root olduğundan PATH'ımı eklerken açık olmam gerektiğine dikkat edin
Yukarıdaki kılavuzlarla ilgili sorun yaşıyorsanız chmod u+x foo.sh
bunun yerine deneyin chmod +x foo.sh
. Diğer çözümler işe yaramadığında bu benim için çalıştı.