Dlaczego nazwy plików zaczynające się od kropki są ukryte? Czy mogę ukryć pliki bez używania kropki jako ich pierwszego znaku?

15

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)?

JMCF125
źródło
Lub „dlaczego wszystkie ukryte nazwy plików zaczynają się od kropki?”, Jeśli wolisz.
JMCF125,
2
Tak, to konwencja, dlaczego wybrano, kto wie, zapytaj pionierów UNIX, to stara konwencja.
terdon
4
Przeczytaj powiązany artykuł w Wikipedii o ukrytych plikach oraz plus.google.com/101960720994009339267/posts/R58WgWwN9jp w odniesieniu do aspektów historycznych. Nie można tego zmienić.
jofel
Myślałem, że Linux można w pełni dostosować ...
JMCF125,
1
@ JMCF125 faktycznie ten komentarz okazał się bardziej sarkastyczny niż zamierzałem, przepraszam za to. Czy faktycznie pytasz: „Czy mogę ukryć pliki bez zmiany ich nazwy?” - jeśli tak jest, powinieneś to zmienić w swoim pytaniu.
evilsoup

Odpowiedzi:

26

Według Wikipedii ,

Pojęcie nazw plików poprzedzone przez. powinien być ukryty jest wynikiem błędu oprogramowania w pierwszych dniach Uniksa. Kiedy do systemu plików dodano pozycje specjalne .i ..pozycje katalogu, zdecydowano, że polecenie ls nie powinno ich wyświetlać. Jednak program został błędnie napisany, aby wykluczyć dowolny plik, którego nazwa zaczynała się od .znaku, a nie dokładną nazwę .lub ...

... 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 .hiddeni umieścić w nim nazwy plików, które chcesz ukryć, po jednym w wierszu. lsi globusy powłoki nie będą tego szanować, ale może ci się to przydać.

zła
źródło
To ukrywanie nie działa jednak na Unity. Ale ponieważ bezpośrednio odniosłeś się do wszystkich pytań, oznaczę to jako zaakceptowaną odpowiedź (chociaż głosowałem za obiema odpowiedziami).
JMCF125,
3
Strona Wikipedii nie zawiera już informacji na ten temat. Jednak Rob Pike pracował nad UNIX w Bell Labs i napisał krótki post na ten temat: plus.google.com/u/0/+RobPikeTheHuman/posts/R58WgWwN9jp
Alexander
OS X ”, a nie „OSX”.
Peter Mortensen
14

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 .

sergut
źródło
Próbowałem man chattr, choć pomyślałem, że może potrzebuję jakiegoś pakietu lub konkretnego programu, aby możliwe były inne ukryte pliki.
JMCF125,
0

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 z ls -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 .ACFSkatalogu. 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.

telcoM
źródło