Początkowo myślałem, że to zbieg okoliczności, ale teraz widzę, że jest nawet znacznik : wszystkie ukryte nazwy plików zaczynają się od kropki. Czy to konwencja? Dlaczego został wybrany? Czy można to zmienić? Lub innymi słowy (jako powiązane pytanie sugerowane przez @evilsoup, które sugeruje odpowiedź na kilka innych): czy mogę ukryć pliki bez zmiany ich nazwy (używając .
jako pierwszego znaku ich nazwy)?
filesystems
filenames
dot-files
JMCF125
źródło
źródło
Odpowiedzi:
Według Wikipedii ,
... więc zaczęło się od błędu, a następnie zostało uwzględnione jako funkcja (dla przypomnienia
.
jest to link do bieżącego katalogu i..
link do katalogu nad nim, ale jestem pewien, że już to wiesz ). Ponieważ ta metoda ukrywania plików jest wystarczająco dobra przez większość czasu, przypuszczam, że nikt nigdy nie zadał sobie trudu, aby zaimplementować ukrywanie plików w stylu Windows.Istnieje również fakt, że wdrożenie różnych zachowań spowodowałoby jeszcze większą fragmentację świata * nix, co jest ostatnią rzeczą, jakiej ktokolwiek chce.
Istnieje inna metoda ukrywania plików, która nie wymaga zmiany nazwy, ale działa tylko w przypadku menedżerów plików GUI (i nie jest uniwersalna wśród nich - używają go główne Linux-y, ale nie sądzę, że Finder w OSX to robi, i im bardziej niszowe menedżery plików Linuksa rzadziej obsługują to zachowanie): możesz utworzyć plik o nazwie
.hidden
i umieścić w nim nazwy plików, które chcesz ukryć, po jednym w wierszu.ls
i globusy powłoki nie będą tego szanować, ale może ci się to przydać.źródło
Pliki zaczynające się od kropki są domyślnie ignorowane przez polecenie „ls”, które ma mniej więcej taki sam efekt jak „ukryte” pliki, ale nie jest takie samo (inne polecenia mogą zrobić to samo lub nie). Pliki zaczynające się od kropki nie są „ukryte”, ponieważ „ukryty” nie jest jednym z ich atrybutów. W przeciwieństwie do DOS / Windows „ukryty” nie jest atrybutem w Uniksie. W Uniksie istnieje wiele atrybutów („man chattr” powie ci wszystkie), ale ukryty nie jest jednym z nich.
Powód, dla którego pliki kropek są ignorowane przez „ls”, jest w rzeczywistości dość zabawny / krępujący. Nie była to decyzja projektowa, ale wynik błędu oprogramowania we wczesnych latach Uniksa . Kiedy specjalne. i .. wpisy systemu zostały dodane do systemu plików, zdecydowano, że komenda ls nie powinna ich wyświetlać, ponieważ przeszkadzają. Jednak program został napisany w pośpiechu, aby wykluczyć każdy plik, którego nazwa zaczyna się od. znak, a nie dokładne nazwy „.” lub „..”. I stworzył precedens, który jest przestrzegany od tego czasu w Uniksie. Co zabawne, kiedy chłopaki z Unixem zaczęli tworzyć Plan 9 , nie umieszczali w nim celowo plików kropek .
źródło
man chattr
, choć pomyślałem, że może potrzebuję jakiegoś pakietu lub konkretnego programu, aby możliwe były inne ukryte pliki.To, czy możesz ukryć pliki, i nie, i na jakich warunkach, zależy od używanego systemu plików i jego sterownika. Tradycyjne systemy plików Unix nie mają atrybutu „ukryj” dla plików.
Sterownik systemu plików może ukryć dowolne pliki, po prostu pomijając ich nazwy, gdy zapewnia wyniki wywołań systemowych używanych do uzyskania listy katalogów. Jak opisał sergut w swojej odpowiedzi, pliki zaczynające się od kropki nie są naprawdę ukryte.
(W ten sposób również rootkity mogą ukrywać swoje pliki: zaczepiają się w wywołaniach systemowych, które tworzą listę katalogów, i filtrują pliki, które chcą ukryć.)
Na przykład w systemach plików klastra Oracle ACFS katalog
<filesystem mountpoint>/.ACFS/
jest naprawdę ukryty: po prostu w ogóle go nie będzie na liście, nawet zls -a
. Ale jeśli wiesz, że tam jest, możesz uzyskać do niego dostęp w porządku.Jeśli używasz funkcji migawki systemu plików ACFS, możesz uzyskać dostęp do wszystkich istniejących migawek systemu plików tego systemu plików za pośrednictwem tego
.ACFS
katalogu. Jeśli nie byłby ukryty, program do tworzenia kopii zapasowych mógłby zakończyć tworzenie zarówno bieżącej zawartości systemu plików, jak i zawartości istniejących migawek, co prawdopodobnie byłoby niepożądane; zwykle chcesz wykonać kopię zapasową bieżącego stanu lub stanu jednej konkretnej migawki.źródło