OS X'te neden sudo ls gizli (nokta) dosyaları gösteriyor?


162

OS X Yosemite ile aşağıdaki komutları kullanarak aşağıdakileri alıyorum:

$ touch .a
$ touch b
$ /bin/ls
b
$ /bin/ls -A
.a  b
$ sudo /bin/ls
.a  b

Kök tarafından çağrıldığında gizli dosyaları (nokta ile başlayan isimleri olan) gösterir ve normal bir kullanıcı olarak çalışırken bunları (beklendiği gibi) göstermez. Bu ls, Linux'takilerden birinin gelmesinden farklı coreutils.

Neden lsbu şekilde davranıyor?


141
Bu etiketleri "OSX kötü" olarak yanlış okudum ve kafam çok karıştı.
Raystafarian

5
Etiketlerin büyük harflerle yazılmasına izin verilirse BSDve OSXburada daha uygunsa, daha az kafa karıştırıcı olur .
ryenus

@ Raystafarian oldukça komik, çünkü normalde tam tersi bir yol var, insanlar etiketlerle cümleler yazmaya çalışıyor.
Braiam

Yanıtlar:


404

Görünüşe göre bu özellik Apple'a özgü değil. Bu genel olarak BSD sistemlerinin bir özelliğidir.

/* Root is -A automatically. */
if (!getuid())
    f_listdot = 1;

Başlangıçta, onu 4.4BSD-Lite kaynaklarına kadar izleyebildim . Bu kaynakları ithal eden 1994'ten bu FreeBSD taahhüdünde zaten mevcuttu .

Bu özellik OpenBSD'de de bulunmaktadır ve 1995'ten itibaren NetBSD'den kod aldığını iddia eden bu taahhütte bulunabilir, bu yüzden bu zaten NetBSD'de mevcuttu .

Daha sonra, NetBSD’nin 386BSD’den kod aldığını iddia eden 1993’teki taahhüdü keşfedildi ve bu özellik zaten orada . Dahası, bu taahhüt 1991 yılında 386BSD versiyon 0.0'ın gelişiminde orada olduğunu ve BSD'den 4.3'e kadar, söyleyebildiğim kadarıyla geldiğini gösteriyor.

Yorum gelişimi sırasında ilk kez ortaya çıktı 4.3BSD-Reno içinde bu taahhüt “önce yeni ls sürümünü çalışma” başlıklı (27 Haziran 1989). Orijinal yorum şöyle dedi:

/* root sees all files automatically */

hangi edildi , daha sonra o gün değişti (Ben zaman damgaları da, bu depoda tamamen doğru olduğundan emin değilim) için:

/* root is -A automatically */

Ve sadece 1992'de büyük harf ve döneme eklenmiş ve şu anda sahip olduğumuz şeye dönüştüler:

/* Root is -A automatically. */

Ancak bu 2BSD'de 9 Mayıs 1979 tarihinden itibaren bu anlık görüntüde görüldüğü gibi mevcuttu :

Aflg = getuid() == 0;

Bu zamanlardan gerçek bir tarih bulamıyorum, ancak 1977'den bu satırlar olmadan 1BSD'nin bu anlık görüntüsü de var . Ve aslında bayraksız.-A

Bu yüzden, bu özellik 1977 Kasım'ında (o anda geliştirilmekte olan 1BSD) ile Mayıs 1979'da 2BSD'nin piyasaya sürülmesi arasında bir yerde ortaya çıktı.


Bu soruşturma sırasında da bulduğum şey, 2005'te FreeBSD'ye eklenmiş ve bu davranışı geçersiz kılmak ve biraz sonra elden geçirilmiş-I bayrak .


52
Ayrıca, dosyaları başlayarak gizlemenin "özelliğinin" .basit bir hata olduğunu belirtmek faydalı olabilir - lssadece .dizini gizlemek gerekiyordu , her şeyden başlamak için değil .. Birkaç on yıl boyunca hızlı ileri sarın ve genellikle tehlikeli dosyaları vb. Gizlemek için kullanılırken, aynı zamanda sistem yapılandırmasını vb. Gizlemek için de kullanılır - bu nedenle yöneticilerin bu dosyaları görmesine izin vermek (yapılandırmayı korumak veya gizli kötü amaçlı yazılımları bulmak için vb.) .
Luaan

23
Luaan'ın yorumu için referans: plus.google.com/+RobPikeTheHuman/posts/R58WgWwN9jp (Rob Pike'ın "nokta dosyalarını" gizlemenin bir hata olarak başladığını açıkladığı).
nibot

2
POSIX Mantığından, "ls yardımcı programının bazı tarihsel uygulamaları, bir süper kullanıcı -a seçeneğini belirtmeden ls çağırdığında nokta ve nokta-nokta dışındaki bir dizindeki tüm girişleri gösterir." Normal "kullanıcılar -a belirtmeden ls çağırdığında, dosya operandları olarak isimlendirilmedikçe, <period> ile başlayan isimleri olan hiçbir dosya hakkında bilgi görmemelisiniz. " pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html
R. ..

Çok daha yaşlı. SysV-BSD bölünmesini, SysV sistemlerine en son eriştiğim zamanki gibi aynı davranışta bulunduğunu önceden tahmin ettiğimi düşünüyorum.
Joshua,

3
epik cevap tarih öğrenildi!
Corey Goldberg,

15

İşte kaynak koduna bir link . Not /* Root is -A automatically. */. Bu, Apple'ın BSD sürümündeki bir özelliktir ls.


İlginç bul Bir ls yaparken gizli dosyaları bastırmanın bir yolu var mı?
Bay Lister,

5
Hm, bu Apple'a özgü bir özellik değil gibi görünüyor , ancak BSD dünyasından geliyor?
kirelagin

2
Doğru, Apple'a özgü değil. Cevabınız için teşekkürler, beni doğru yola koydu. Root is -A automaticallyİpleri aramak için dizgiyi kullandım .
kirelagin

Bay Lister: nokta dosyalarının birçok işletim sisteminde (FreeBSD, yani muhtemelen OS X de) -I (büyük harf i) ile root olarak gösterilmesini önleyebilirsiniz
Allan Jude

1

IIRC, Usenet'in ilk günlerinde (80'li yılların başında) bu konuda bir ipucu vardı. Bu özellik bir güvenlik önlemi olarak eklendi, böylece kötü amaçlı kullanıcılar dosyaları / dizinleri / çalıştırılabilir dosyaları kolayca sysadmin / root'tan gizleyemediler. Teori temel olarak "kök her şeye erişebiliyor, bu yüzden her şeyi görebilmeliydi".


Kulağa mantıklı geliyor (bir dosyayı nokta-dosyaya dönüştürmek, onu “gizlemenin” şüpheli bir yolu olsa da). Bu arşivleri bulmak harika olurdu.
kirelagin
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.