W systemie OS X Yosemite za pomocą następujących poleceń otrzymuję:
$ touch .a
$ touch b
$ /bin/ls
b
$ /bin/ls -A
.a b
$ sudo /bin/ls
.a b
Pokazuje ukryte pliki (których nazwy zaczynają się od kropki), gdy są wywoływane przez root i nie pokazuje ich (zgodnie z oczekiwaniami), gdy działa jako zwykły użytkownik. Różni się to od tego, co robi ls
Linux (ten pochodzący coreutils
).
Dlaczego tak się ls
zachowuje?
BSD
iOSX
są bardziej odpowiednie tutaj.Odpowiedzi:
Okazuje się, że ta funkcja nie jest specyficzna dla Apple. Jest to ogólna cecha systemów BSD.
Początkowo byłem w stanie prześledzić go z powrotem do źródeł 4.4BSD-Lite . Był już obecny w tym zatwierdzeniu FreeBSD z 1994 roku, który importuje te źródła.
Ta funkcja jest również obecna w OpenBSD i można ją znaleźć w tym zatwierdzeniu z 1995 roku, które twierdzi, że importuje kod z NetBSD, więc było to już obecne w NetBSD .
Następnie odkrywa się zatwierdzenie NetBSD z 1993 roku, które twierdzi, że importuje kod z 386BSD , a funkcja jest już dostępna . Co więcej, to zatwierdzenie pokazuje, że istniało ono podczas rozwoju wersji 386BSD 0.0 w 1991 roku, która rozwinęła się z BSD około 4.3, o ile wiem.
Komentarz pojawił się po raz pierwszy podczas opracowywania wersji 4.3BSD-Reno w tym zatwierdzeniu (27 czerwca 1989 r.) Zatytułowanym „pierwsza działająca wersja nowego ls”. Oryginalny komentarz brzmiał:
który został zmieniony później tego samego dnia (nie jestem jednak pewien, czy znaczniki czasu są w tym repozytorium całkowicie poprawne), aby:
Dopiero w 1992 r. Dodano wielką literę i kropkę , zmieniając komentarz w to, co mamy teraz:
Ale zachowanie było obecne w 2BSD od 9 maja 1979 r., Jak widać na tej migawce :
Nie mogę znaleźć żadnej faktycznej historii z tamtych czasów, ale jest też migawka 1BSD z 1977 roku bez tych linii. I
-A
właściwie bez flagi.Wygląda więc na to, że funkcja została wprowadzona gdzieś między listopadem 1977 r. (1BSD jest w tym momencie opracowywana) a wydaniem 2BSD w maju 1979 r.
Podczas tego dochodzenia odkryłem także
-I
flagę, która została dodana do FreeBSD w 2005 roku w celu zastąpienia tego zachowania i została przerobiona nieco później.źródło
.
była prostym błędem -ls
miała jedynie ukryć.
katalog, a nie wszystko, począwszy od.
. Przewiń do przodu o kilka dekad i jest powszechnie używany do ukrywania niebezpiecznych plików itp., A jednocześnie służy do ukrywania konfiguracji systemu itp. - więc sensownie jest pozwolić administratorom zobaczyć te pliki (w celu utrzymania konfiguracji lub znalezienia ukrytego złośliwego oprogramowania itp.) .Oto link do kodu źródłowego. Uwaga
/* Root is -A automatically. */
. Jest to funkcja w wersji BSD firmy Applels
.źródło
Root is -A automatically
ciągu, aby wyszukać wskazówki.IIRC, był wątek na ten temat we wczesnych dniach Usenetu (wczesne lata 80-te). Ta funkcja została dodana jako środek bezpieczeństwa, aby złośliwi użytkownicy nie mogli łatwo ukryć plików / katalogów / plików wykonywalnych przed sysadmin / root. Teoria była w zasadzie „root ma dostęp do wszystkiego, więc powinien móc wszystko widzieć”.
źródło