“Ls” komutu neden FAT32 bölümündeki dosyaların izinlerini gösteriyor?


40

FAT32 dosya sisteminin dosya izinlerini desteklemediğine inanıyorum, ancak ls -lbir FAT32 bölümünde yaptığımda ls -l, dosyaların izinleri olduğunu gösteriyor:

-rw-r--r-- 1 john john 11 Mar 20 15:43 file1.txt
-rw-r--r-- 1 john john 5 Mar 20 15:49 file2.txt

Neden ls -ldosyaların izinlerini görüntülüyor?


İyi soru! Hoş Geldiniz
0xSheepdog

Yanıtlar:


71

Diskte depolanan dosya sistemi dosya izinlerini saklamamaktadır, ancak dosya sistemi sürücüsü Unix dosya sistemi kavramının ayrılmaz bir parçası olduklarından ve sistem çağrısı arabirimlerinin izinlerin sunulduğunu gösterme imkanı bulunmadığından işletim sistemine sağlamalıdır. eksik.

Ayrıca bir dosyanın hiç izninin olmaması durumunda ne olacağını düşünün? Aynı şey 0777, yani herkese erişim; veya aynı 0000, yani kimseye erişim yok? Ancak bunların ikisi de dosya iznidir, peki neden onlara göstermiyorsunuz? Veya daha faydalı bir şeyler yapın ve bazı mantıklı izinler belirlemenin bir yolu var.

Bu nedenle, sürücü bazı dosyalar için izin verir, tüm dosyalar için aynıdır. Dosyaların sahibi ve grubu ile birlikte izinler bağlama zamanında yapılandırılabilir. Bunlar mount (8) man sayfasındaki "Oil for mount seçenekleri" altında açıklanmıştır :

Yağ için takma seçenekleri
(Not: yağ, ayrı bir dosya sistemi değil, msdos, umsdos ve vfat dosya sistemlerinin ortak bir parçasıdır.)

uid=valueve gid=value
Tüm dosyaların sahibini ve grubunu ayarlayın. (Varsayılan: geçerli işlemin UID'si ve GID'si.)

umask=value
Umask'ı (mevcut olmayan izinlerin bit maskesi) ayarlayın. Varsayılan, geçerli işlemin umask'ıdır. Değer, sekizlik olarak verilmiştir.

dmask=value
Yalnızca dizinlere uygulanan umask değerini ayarlayın. Varsayılan, geçerli işlemin umask'ıdır. Değer, sekizlik olarak verilmiştir.

fmask=value
Yalnızca normal dosyalara uygulanan umask değerini ayarlayın. Varsayılan, geçerli işlemin umask'ıdır. Değer, sekizlik olarak verilmiştir.

İzinlerin maske olarak sunulduğunu unutmayın; bu nedenle nihai izinler maskenin ihmalidir. veya fmask=0133izin verilen tüm dosyalara neden olur .0644rw-r--r--

Ayrıca, varsayılanlar işlem çağrısından miras alınır mount(), bu nedenle mountkomut satırından çağırırsanız , kabuk umaskuygulanacaktır.


7
Ve izinleri taklit etmesinin nedeni, aksi halde ls'nin ve dosya izinlerine (sadece bir dosyayı okumayı deneyen kodunuz bile) bakacak diğer tüm programların yerleşik tüm farklı dosya sistemi organizasyonlarını ele alma mantığına sahip olmasıdır.
jamesqf

4
@jamesqf, evet ve hatta sistem çağrısı arayüzleri, izinler her zaman orada bulunduğundan, "izinlere sahip olmama" seçeneğine sahip değildir. (Bunların bir "ayrılmaz parçası" olduğunu yazarken düşündüğüm şeydi.) Bu nedenle, izinler her zaman da orada olacak ve ACL'ler gibi şeyler onları anlamlı kılmak için yapılmıştır.
ilkkachu

2
Genellikle FAT dosya sistemindeki tüm dosyalar için 777 modunu gördüm (en azından eski bir sürücüye sahip FAT16).
Orman,

2
@ forest umaskvarsayılan değerin işlem umask olduğu mount seçeneğine bağlıdır mount(bu cevabın bağlantılı olduğu man sayfasına bakınız).
Ruslan

Ancak FAT , tam olarak Unix'lerle eşleşmeseler bile bazı izinleri / özellikleri (salt okunur, gizli, sistem vb.) Saklar. chmod ugo-wbir dosyada salt okunur özniteliği açacaktır. Bu fmask=0133seçeneği örneğinizde olduğu gibi kullanmak, 0644 iznine sahip olan tüm dosyaların ortaya çıkmasına neden olmaz . FAT'in kesinlikle saklamadığı şey, her dosya için bir kullanıcı adı ve gidektir. Lütfen açıkla; Olduğu gibi cevap oldukça yanıltıcıdır.
mosvy

22

Ancak dosyaların izinleri var. Kullanıcı john'u RW erişimine sahipken, bazı rasgele kullanıcılar sadece okuma erişimine sahiptir. Bu izinler dosya sisteminin kendisinden gelmedi, aksine onları daha az gerçek yapmayan mount seçeneklerinden (-o uid / gid / umask) geldi.

Farklı seçeneklerle monte edilmiş çok sayıda bölüm var ve bu seçeneklerin ne olduğunu belirlemek için ls kullanabilirsiniz . Mount --bind komutunu tek bir dizinin farklı vfat bölümlerinden dosyaları içermesini sağlamak için bile kullanabilirsiniz ve ls , her dosya için hangi izinlerin belirtildiğini doğru bir şekilde gösterir.


15

lsFAT32 hakkında bir şey bilmiyor, sadece çekirdeğin POSIX open/ readdir/ statsistem çağrılarıyla gösterdiği Sanal Dosya Sistemi (VFS) arayüzü hakkında bir şey biliyor .

Linux dosyaları kavramını desteklemez yok kullanıcı / grup / diğer izni bitleri struct statsadece içeren mode_t st_mode;çekirdek olduğunu elemanı (ve uid, gid üyeleri) gerekmektedir zaman doldurmak ls -lkılan stat(2)sistem çağrıları.

Bu alanların hiçbiri için "kullanılamaz" veya "uygulanamaz" anlamına gelen özel bir kod yoktur, bu nedenle çekirdeğin sürücü sürücüsünün bir şey yapması gerekir . FAT16 / FAT32 salt okunur bir bayrağa sahiptir, ancak sahip / grup takma seçeneklerinden gelir ve bir umask da olur.

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.