Neden okuma izinleri olan bir dizini listeleyemiyorum?


14

İçinde bir dizin dve bir dosya oluşturdum f. Daha sonra kendime bu dizinde yalnızca okuma izinleri verdim. Bunun dosyaları listeleyebileceğim anlamına geldiğini anlıyorum (örneğin burada ), ama yapamam.

will@wrmpb /p/t/permissions> ls -al
total 0
drwxr-xr-x   3 will  wheel  102  4 Oct 08:30 .
drwxrwxrwt  16 root  wheel  544  4 Oct 08:30 ..
dr--------   3 will  wheel  102  4 Oct 08:42 d
will@wrmpb /p/t/permissions> ls d
will@wrmpb /p/t/permissions>

Yazma ve yürütme izinlerini değiştirirsem dosyayı görebilirim.

will@wrmpb /p/t/permissions> chmod 500 d
will@wrmpb /p/t/permissions> ls d
f
will@wrmpb /p/t/permissions> 

Bu neden? MacOS kullanıyorum.

Düzenleme: @ ccorn cevabına atfen, balık kullandığım ve type lsaşağıdakileri verdiğim alakalı :

will@wrmpb /p/t/permissions> type ls
ls is a function with definition
function ls --description 'List contents of directory'
    command ls -G $argv
end

Kopya soruya cevap vermiyor. Bu, gösteremeyeceğim şeyi yapabileceğiniz anlamına gelir. @ ccorn'un cevabı mükemmel.
wrgrs

Vay be, Balık şey (başlangıçta) eksik bilgilerin oldukça önemli bir parçasıdır.
Stephen Kitt

Evet haklısın, eklemeliydim, ama aynı şeyi bash'ta da olurmuş gibi görünüyor alias ls='ls -G', ki bence birçok insan bunu yapıyor.
wrgrs

Benim için yapar. MacOS'ta mısınız? Belki burada başka bir soru daha vardır. Düzenleme: evet, Linux'ta farklı davranışlar elde ediyorum.
wrgrs

Yanıtlar:


8

Bazı hazırlıklar, sadece olması lsgerekenden daha fazla şey denemediğinden emin olmak için:

$ unalias ls 2>/dev/null
$ unset -f ls
$ unset CLICOLOR

Gösterilmesi rdizin izni:

$ ls -ld d
dr--------  3 ccorn  ccorn  102  4 Okt 14:35 d
$ ls d
f
$ ls -l d
ls: f: Permission denied
$ ls -F d
ls: f: Permission denied

Geleneksel Unix dosya sistemlerinde, bir dizin basitçe (ad, inode numarası) çiftlerinin bir listesiydi. Bir inode numarası, dosya sisteminin geri kalan meta tablosunun saklandığı yerdeki inode tablosunda dizin olarak kullanılan bir tamsayıdır.

rBir dizinde izni sağlayan listelemek vb dosya türünü, dosya uzunluğu, dosya izinlerini almak veya dosyayı açarak olduğu inode tablosunun, depolanan bilgileri içinde isimleri değil, erişmek için. Bunun için xdizin üzerinde izne ihtiyacınız var .

Bu nedenle ls -l, ls -F, lsrenk kodlu çıkışın vb ile olmadan başarısız xizni sadece oysa lsbaşarır.

xİzin yalnız, bu dizin içinde açık bir isim verilir inode ulaşım imkanı xolan düğüm ve dizin girişinin meta erişimin aramak için izin verir:

$ chmod 100 d
$ ls -l d/f
-rw-r--r--  1 ccorn  ccorn  0  4 Okt 14:35 d/f
$ ls d
ls: d: Permission denied

Bu nedenle, bir dosyayı açmaya /a/b/c/fveya meta verilerini, dizinleri listelemek /, /a, /a/bve /a/b/cverilmiş olması gerekir xizni.

Şaşırtıcı değil, dizin girişleri oluştururken de ihtiyacı var wve xizinler:

$ chmod 100 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 200 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 300 d
$ touch d/g
$

Wikipedia'nın dosya sistemi izinleri hakkındaki bir makalede kısa bir özeti vardır .


İnanılmaz. /bin/ls dbenim için içeriği gösterir. Teşekkürler!
wrgrs

Tamam, bu yüzden bir yeniden tanımlama -Gsorunuydu ( metadata ihtiyacı olan renklendirilmiş çıktı için, dolayısıyla izin verir x). Bu nedenle unalias lsve ile yaptığım hazırlıklar unset CLICOLOR. Ben de unset -f lsböyle bir işlev tanımını kaldırmak için eklemeliydim . Düzenlenen.
kaktüs


4

Bir dizini okumak için dizine (x bit) geçiş yapabilmeniz gerekir. Bu nedenle, bir dizinin herhangi bir şekilde erişebilmesi için en azından rx'e ihtiyacınız vardır.


2
Hayır. lsHala gerekir listelemek dizin yürütülebilir olmasa bile, dizindeki dosyaları.
Stephen Kitt

Okuma iznini kapalı bırakabilirsiniz. Daha sonra dosyalara erişebileceksiniz, ancak dizinin içeriğini listelemeyeceksiniz.
Kusalananda

@Kusalananda - iyi bir nokta, gerçekten bunu zaman zaman kullanıyorum.
Soruk

@Stephen Kitt - Belki OLMALIDIR, ancak uygulama öyle değildir.
Soruk

1
@Soruk ve böylece soru kalıyor: neden olmasın?
Stephen Kitt
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.