SORU
21 EKİM 2012, Pazar


Komut kullanılırken bulunamadı sudo

Senaryo benim ev klasöründe foo.sh aradım.

Ben bu klasöre gidin ve ./foo.sh, girin

-bash: ./foo.sh: Permission denied.

sudo ./foo.sh, ben kullandığımda alıyorum

sudo: foo.sh: command not found.

Neden düzeltebilirim Peki bu nasıl oluyor?

CEVAP
21 EKİM 2012, Pazar


İzin engellendi

Bir komut dosyası çalıştırmak için dosya olmalıçalıştırılabilir izni bit kümesi.

Tam 23 ** Linux anlamak için chmod komut belgelerine eğitim görebilirsiniz. chmod kısaltmasımodu değiştirbir dosyanın izin ayarlarını değiştirmek için kullanılan komut.

Yerel sistem için chmod belgeleri okumak için , komut satırından man chmod info chmod çalıştırın. Bir kez çalışan çıkışını anlamak gerekir okudum ve anladım

ls -l foo.sh

... hangi liste olacak OKUMA, YAZMA ve YÜRÜTME izinleri için dosya sahibi, grubu sahibi ve herkes kim olduğunu değil, dosyanın sahibi veya üye grubuna hangi dosyaya ait (son izin gruptur bazen olarak anılacaktır "Dünya" ya da "diğer")

İşte gidermek için nasıl bir özetİzin Engellendisenin durumunda.

$ 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 ama çalıştırılabilir izni eksik olduğunu gösterir

chmod komut giderir. (Grup ve diğer iznine dosyayı ayarlayın okuma, yazma veya çalıştırma) olamaz

$ 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 şimdi Linux ile ilgili olarak yürütülebilir.

Kullanarak sudo Komut bulunamadı sonuçları

Bir komut kullanarak çalıştırdığınızdasudoetkili bir şekilde root veya root olarak çalıştırıyorsunuz.

Kök kullanıcı olarak komut bulma nedeni kök PATH ortam değişkeni içermeyen muhtemeldirfoo.sh nereye dizin yer almaktadır. Dolayısıyla komutu bulunamadı.

YOL ortam değişkeni komutları için aranır hangi dizinlerin bir listesini içerir. Her kullanıcı kendi ihtiyaçlarına göre kendi YOLUNU kendi değişkenini ayarlar. Çalıştırmak için ne olduğunu görmek için

env | grep ^PATH

Burada root kullanıcı sudo kullanarak gibi sıradan bir kullanıcı olarak ve yukarıdaki env komut ilk çalışan bazı örnek çıktı

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 olsa da, bu durumda dizinleri ayrıcalıklı olmayan kullanıcı (rkielty) ve süper kullanıcı YOLU bulunan unutmayınaynı değil.

foo.sh bulunduğu dizine root kullanıcısı için PATH değişkeninde mevcut değildir, bu nedenlekomut bulunamadıhata.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bmarian22

    bmarian22

    22 Aralık 2007
  • CNNMoney

    CNNMoney

    16 Kasım 2006
  • Hollyscoop

    Hollyscoop

    30 Ocak 2007