Unix liste komutu 'ls' sayısal chmod izinleri verebilir mi?


179

Bir dizini listelerken, -rw-rw-r-- sembolik çıktısından ziyade 644 gibi sayısal unix izinlerini görüntülemek mümkün müdür?

Teşekkürler.

Yanıtlar:


339

neredeyse olabilir ..

 ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
             *2^(8-i));if(k)printf("%0o ",k);print}'

31
Diğer ad olarak oluşturmak için (aşağıdaki örnek: 'cls' komutu), şunu kullanın: alias cls="ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\"%0o \",k);print}'"
danger89

6
Çizgiyi tehlike89'dan kopyalayıp yapıştırdım ve çıktının garip bir şekilde 755 yerine% 0..o ile başladığını gördüm. Başka biri bununla karşılaşırsa, neden 0 ile o arasında gizli bir karakter gibi görünüyor. Silindikten sonra komut güzel bir şekilde ayarlanır. Şerefe!
Donna

Bence bir hesaplama sorunu var. chmod 777 dirKomutunuz izinleri yazdırdıktan sonra767
Julian F. Weinert

Donna'nın bahsettiği gibi, 0 ve o arasında komik bir karakter (veya 2) var, ayrıca garip bir şekilde SO ekliyor gibi görünüyor ...
nbsp

3
Bu, t ve s bitlerini tanıyamaz. Dosya izni bilgilerini almak için 'stat' komutunu kullanmalısınız. Elle hesaplamak hatalara yol açacaktır!
Evan Langlois

148

Aklınıza gelebilecek en yakın şey (yeterince basit tutmak), stathangi dosyaları aradığınızı bildiğinizi varsayar. Bunu yapmazsanız, *çoğunu bulabilirsiniz:

/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...

Yapışkan, suid ve şirketi kutudan çıkarır:

$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo

20
Bu Linux altında harika çalışıyor stat -f '%A %N' *, aynı şeyi bir mac (FreeBSD) üzerinde buldum
12'de reevesy

2
Ben argüman olduğunu tahmin statdeğil lsbu nedenle bu doğru çözüm değil. Ancak, bunun istenen çıktı bağlamında doğru cevap olduğuna inanıyorum. Eğer awkbir boru içinde izin verilir, daha sonra findburada izin verilmelidir statdenir -exec; o zaman statdoğrudan kullanabilirsiniz*
javafueled

2
Bu çok daha kısa ve% 100 herhangi bir sistem üzerinde çalışıyor
Kanguru

Eğer hakları tekrar tekrar görmek için stat kullanmak istiyorsanız, bash altında kullanın stat -c '%a %n' * **/*.
Denis Chevalier

61

GNU bulmayı kullanabilirsiniz.

find . -printf "%m:%f\n"

Bu aslında hatırlayabildiğim bir komut. Yararlı ve etkili.
Trent

5
Bu da bir -maxdepth 1seçenek olmalıdır , aksi takdirde tüm dizin ağacını geçer.
Ruslan

36

Aşağıdaki komutu kullanabilirsiniz

stat -c "%a %n" *

Ayrıca, belirli bir sonuç almak için herhangi birini filenameveya directorynamebunun yerine kullanabilirsiniz *.

Mac'te şunları kullanabilirsiniz:

stat -f '%A %N' *

1
Benim için çalışmadı. stat: illegal option -- c usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
rschwieb

1
ubuntu 14.04 üzerinde çalışır .. bunu hatırlamak zorunda asla .bashrc benim bir takma ad ekledim: alias xxx = "stat -c '% a% n' *"
faeb187

1
Faydalı! Mac'teki stat adamında bile görünmeyen% A'yı nasıl kazıyorsunuz?
igonejack

1
Aslında bir FreeBSD komutudur ve Mac bunu üst çekirdek olarak kullanarak inşa edilmiştir.
Mohd Abdul Mujib

Yalnızca man statmacOS 10.14.4'te sunulan bilgileri kullanırsak , komutun olması gerekir stat -f "%Lp %N" *. %Lpile aynı şeyi yazdırıyor gibi görünüyor %A.
Cesar Andreu

17

@YaseminYeni

vay canına, güzel awk! Peki ya suid, sgid ve sticky bit?

Filtrenizi s ve t ile uzatmanız gerekir, aksi takdirde sayılmazlar ve yanlış sonuç alırsınız. Bu özel Bayraklar için sekizli sayısını hesaplamak için, prosedür aynıdır ancak endeks olan bit kümesi yürütmek dosyalar için 4 7 ve 10. olası bayrakları olan ---s--s--thiçbir vardır bit kümesi yürütmek dosyalar için amd---S--S--T

ls -l | awk '{
    k = 0
    s = 0
    for( i = 0; i <= 8; i++ )
    {
        k += ( ( substr( $1, i+2, 1 ) ~ /[rwxst]/ ) * 2 ^( 8 - i ) )
    }
    j = 4 
    for( i = 4; i <= 10; i += 3 )
    {
        s += ( ( substr( $1, i, 1 ) ~ /[stST]/ ) * j )
        j/=2
    }
    if ( k )
    {
        printf( "%0o%0o ", s, k )
    }
    print
}'  

Test için:

touch blah
chmod 7444 blah

sonuçlanacak:

7444 -r-Sr-Sr-T 1 cheko cheko   0 2009-12-05 01:03 blah

ve

touch blah
chmod 7555 blah

verecek:

7555 -r-sr-sr-t 1 cheko cheko   0 2009-12-05 01:03 blah

3
+1 Teşekkürler! 1 satır takma alias "lsmod=ls -al|awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
adına kısalttım

+1, çalışma dosyası izinlerini geri yükleme fikrini daha da ileri götürdü: ysgitdiary.blogspot.fi/2013/04/…
Yordan Georgiev

5
Lsmod'u takma ad olarak kullanmayın. Bu, çekirdek modlarını listelemek için bilinen bir posix komutudur.
shadowbq

@JeroenWiertPluimers Bu bana awk bir sözdizimi hatası veriyor
Evan Langlois

@EvanLanglois yeni bir soru sor.
Jeroen Wiert Pluimers

9

Unix sayısal izin değerlerini (sekizli değerler) ve dosya adını görüntülemek için bunu kullanın.

stat -c '%a %n' *

Unix sayısal izin değerlerini (sekizlik değerler) ve klasörün sgid ve yapışkan bitini, sahibin kullanıcı adını, grup adını, bayt cinsinden toplam boyutu ve dosya adını görüntülemek için bunu kullanın.

stat -c '%a %A %U %G %s %n' *

resim açıklamasını buraya girin

%yİnsan tarafından okunabilir biçimde son değişiklik zamanına ihtiyacınız varsa ekleyin . Daha fazla seçenek için stat .

Takma Ad kullanarak daha iyi sürüm

Bir takma ad kullanmak, ihtiyacınız olanı başarmanın daha etkili bir yoludur ve ayrıca renk içerir. Aşağıda, önce grup dizinlerine göre düzenlenmiş, renkli, baskı boyutlarında okunabilir biçimde (örn. 1K 234M 2G) sonuçlarınız düzenlenir ~/.bashrcve hesabınız için veya genel olarak düzenleyerek bir takma ad eklenir/etc/profile.d/custom.sh

Yazarken clsyeni LS komut sonuçlarınızı görüntüler.

alias cls="ls -lha --color=always -F --group-directories-first |awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"

Takma ad en etkili çözümdür

Klasör Ağacı

Bashrc veya custom.sh dosyanızı düzenlerken, yazmanın lstreegeçerli klasör ağacı yapınızı görüntüleyeceği grafik bir gösterimi görmek için aşağıdaki diğer adı ekleyin

alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'"

Şunları görüntüler:

   |-scripts
   |--mod_cache_disk
   |--mod_cache_d
   |---logs
   |-run_win
   |-scripts.tar.gz

4

Bir dosyanın izin bilgilerini almak için ls kullanmazsınız. Stat komutunu kullanırsınız. Size istediğiniz sayısal değerleri verecektir. "Unix Yolu" ls (veya 'echo *') ve stat kullanarak kendi betiğinizi icat etmeniz ve bilgileri istediğiniz formatta vermek istediğiniz her şeyi söylemeniz gerektiğini söylüyor.


1

Off Bina seçilen cevap ve bir takma ad kullanmak öneri , ben listeye bir dizin geçen mümkündür böylece bir işleve çevirdim.

# ls, with chmod-like permissions and more.
# @param $1 The directory to ls
function lls {
  LLS_PATH=$1

  ls -AHl $LLS_PATH | awk "{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/) \
                            *2^(8-i));if(k)printf(\"%0o \",k);print}"
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.