Standardowe i / lub wspólne katalogi w systemach operacyjnych Unix / Linux


25

Pochodząc ze świata Windows, większość nazw katalogów folderów jest dość intuicyjna:

  • \Program Files zawiera pliki używane przez programy (niespodzianka!)

  • \Program Files (x86) zawiera pliki używane przez programy 32-bitowe w 64-bitowych systemach operacyjnych

  • \Users(poprzednio Documents and Settings) zawiera pliki użytkowników, tj. dokumenty i ustawienia

    • \Users\USER\Application Data zawiera dane specyficzne dla aplikacji

    • \Users\USER\Documents zawiera dokumenty należące do użytkownika

  • \Windows zawiera pliki należące do samego systemu Windows

    • \Windows\Fonts przechowuje pliki czcionek (niespodzianka!)

    • \Windows\Temp to globalny katalog tymczasowy

i tak dalej. Nawet gdybym nie miał pojęcia, co zrobiły te foldery, potrafiłem z dużą dokładnością odgadnąć ich nazwy.

Teraz przyglądam się Linuxowi i jestem dość zdezorientowany, jak znaleźć sposób na obejście systemu plików.

Na przykład:

  • /binzawiera pliki binarne. Ale tak zrobić /sbin, /usr/bin, /usr/sbin, i prawdopodobnie bardziej, że nie wiem o. Który jest który?? Jaka jest różnica między nimi? Jeśli chcę zrobić plik binarny i umieścić go w systemie, gdzie go umieścić?

  • /mediazawiera zewnętrzne systemy plików multimedialnych. Ale tak też jest /mnt. I żadne z nich obecnie nie zawiera niczego w moim systemie; wszystko wydaje się być w środku /dev. Co za różnica? Gdzie są inne partycje na moim dysku twardym, takie jak C:i D:te, które były w systemie Windows?

  • /homezawiera pliki użytkownika i ustawienia. To wszystko jest intuicyjne, ale w co zatem ma iść /usr? Jak /rootto możliwe, że wciąż jest osobny, mimo że jest to użytkownik z plikami i ustawieniami?

  • /libzawiera współdzielone biblioteki, takie jak biblioteki DLL. Ale tak też jest /usr/lib. Co za różnica?

  • Co jest /etc ? Czy to naprawdę oznacza „et cetera”, czy coś innego? Jakie pliki powinny tam być - globalne czy lokalne? Czy jest to wszystko dla rzeczy, o których nikt nie wiedział, gdzie je umieścić, czy też istnieje konkretny przypadek użycia tego?

  • Jakie są /opt, /proci /var? Co oznaczają i do czego służą? Nie widziałem czegoś takiego w Windows * i po prostu nie mogę pojąć, do czego mogą być.

Jeśli ktoś może wymyślić inne standardowe miejsca, o których warto wiedzieć, dodaj je do pytania; mam nadzieję, że może to być dobre odniesienie dla osób takich jak ja, które zaczynają się zapoznawać z systemami * nix.

* OK, to kłamstwo. Widziałem podobne rzeczy w WinObj, ale oczywiście nie regularnie. Nadal jednak nie wiem, co one robią w systemie Linux.


1
Dzięki za utrzymanie dobrego ducha nauki. Ten temat jest często sporny. Zobacz moją odpowiedź na to pytanie, aby uzyskać dodatkowe wyjaśnienia na temat podstawowych różnic między strukturami systemu plików w systemie Windows a Linux.
— Caleb

Nie myśl o „usr” jako skrócie „użytkownik”, ale „Unix System Resources” (nawet jeśli jest to prawdopodobnie skrót, ponieważ zawierał katalogi użytkowników wiele lat temu) ( linux-training.be/files/books/html /fun/ch09s08.html ).
— lgeorget

Nie ma sensu usprawiedliwiać nazewnictwa ukrytych katalogów Unix / Linux / etc przeciwko Windows (lub Mac OS X). Tak po prostu jest.
— Andrew Wolfe

Od 2017 r. Struktura folderów systemu Windows jest kompletnym bałaganem. C:\Program Files, C:\ProgramData, %HOME%\AppData\Local, %HOME%\AppData\LocalLow, C:\Windows\SystemApps... Wszystkie przykłady, gdzie można znaleźć pliki wykonywalne w systemie Windows. I nawet nie będę mówił o plikach konfiguracyjnych i rejestrze, nie chcę być jeszcze bardziej przygnębiony. PS: Pracuję głównie w systemie Windows.
— rsenna

Odpowiedzi:


29

Dystrybucje Linuksa używają FHS: http://www.pathname.com/fhs/pub/fhs-2.3.html

Możesz także spróbować man hier.

Spróbuję podsumować odpowiedzi na twoje pytania z góry mojej głowy, ale zdecydowanie sugeruję przeczytanie FHS:

  • / bin jest przeznaczony dla plików binarnych systemu innego niż administrator
  • / sbin jest przeznaczony dla binariów systemowych superużytkownika (root)
  • / usr / bin i / usr / sbin są odpowiednio dla niekrytycznych współużytkowanych plików binarnych nieużytkowników lub superużytkowników
  • / mnt służy do tymczasowego montowania partycji
  • / media służy do montowania wielu nośników wymiennych jednocześnie
  • / dev zawiera pliki urządzeń systemowych; to długa historia :)
  • Folder / usr i jego podfoldery można udostępniać innym systemom, aby miały dostęp do tych samych programów / plików zainstalowanych w jednym miejscu. Ponieważ / usr znajduje się zwykle w osobnym systemie plików, nie zawiera plików binarnych niezbędnych do przełączenia systemu w tryb online.
  • / root jest oddzielny, ponieważ może być konieczne przełączenie systemu do trybu online bez montowania innych katalogów, które mogą znajdować się na osobnych partycjach / dyskach twardych / serwerach
  • Tak, / etc oznacza „et cetera”. Pliki konfiguracyjne dla systemu lokalnego są tam przechowywane.
  • / opt to miejsce, w którym można instalować pobierane / kompilowane programy. W ten sposób możesz oddzielić je od reszty systemu, wszystkie pliki w jednym miejscu.
  • / proc zawiera informacje o jądrze i uruchomionych procesach
  • / var zawiera pliki o zmiennej wielkości, takie jak dzienniki, poczta, strony internetowe itp.

Aby uzyskać dostęp do systemu, na ogół nie potrzebujesz / var, / opt, / usr, / home; niektóre potencjalnie największe katalogi w systemie.

Jednym z moich ulubionych, z którego niektórzy nie korzystają, jest / srv. Dotyczy danych hostowanych za pośrednictwem usług takich jak http / ftp / samba. Często widziałem / var używane do tego, co nie jest tak naprawdę jego celem.


Dobry przegląd odpowiadający na konkretne pytania. Pamiętaj, że niektóre dystrybucje używają /home/users/usernameużytkowników i /home/services/servicenamedo tego, o /srcczym wspominałeś . Myślę, że to działa lepiej, ponieważ jest bardziej uniwersalne w dzieleniu na partycje. Możesz mieć go na swojej własnej partycji lub użyć tej samej partycji i danych użytkownika, co często jest tym, co chcę robić.
— Caleb

+1 dzięki za link i opisy, są niesamowite! :)
— Mehrdad,

/ usr powinien zawierać pliki specyficzne dla aplikacji znajdujących się w systemie operacyjnym i / lub pliki innych firm. To nie jest samoistnie możliwe do udostępnienia! Chociaż LSB twierdzi, że są one przechowywane w / opt. Z drugiej strony / usr / share może zawierać pliki, które można udostępniać na komputerach o różnych architekturach / wersjach systemu operacyjnego. Są to wszystko zaledwie konwencje chociaż! Całkiem możliwe (choć dużo ciężkiej pracy) jest użycie zupełnie innej struktury. Istnieją jednak inne konwencje - jak na przykład optymalna architektura elastyczna Oracle
— symcbean

1
Inną rzeczą, o której należy pamiętać w Uniksie, jest koncepcja, że ​​„ wszystko jest plikiem ” (a przynajmniej tak wygląda). Na przykład, zawartość w / proc wygląda jak pliki i katalogi, ale zawartość jest naprawdę tworzona dynamicznie przez jądro, kiedy się do nich uzyskujesz. Oznacza to, że możesz użyć tych samych narzędzi (ls, cat itp.), Aby uzyskać dostęp do tych informacji.
— KeithB

1
@symcbean From FHS: „... / usr można udostępniać, tylko do odczytu. Oznacza to, że / usr powinien być udostępniany między różnymi hostami zgodnymi z FHS ...”. Oczywiście niektóre pliki są zależne od architektury, a niektóre dystrybucje oczekują bardzo różnych hierarchii katalogów. Rozwiązaniem jest odrabianie lekcji, jak dobry administrator :)
— bhinesley

18

Nie odpowiem na pytanie, co oni wszyscy znaczą (inni mają), ale przedstawię trochę kontekstu historycznego.

Po pierwsze, pamiętaj, że UNIX zbliża się do 40 lat, w czasach taśmy papierowej i 300 bodów zakodowanych na stałe terminali do komputerów mainframe (system Windows XP ma prawie 10 lat). Pisanie było powolne, a potrzeba wydajności pisania przeważała nad wieloma innymi względami. To jest powód bardzo krótkich podstawowych poleceń (tj. „Ls”, „cat”, „cc”, „dd” itp.). To samo dotyczy struktur katalogów. Chodziło o to, że jeśli polecenie ma więcej niż trzy lub cztery znaki, nazwa jest za długa.

Katalog / usr pierwotnie zawierał katalogi domowe użytkownika, ponieważ większość poleceń znajdowała się w / bin, a wszystkie pliki urządzeń w / dev. Później sądzono, że główny dysk (główny system plików, „/”) jest mały, aby skrócić czas uruchamiania. Tak więc powstały inne struktury, takie jak / usr / bin, / usr / include i / usr / lib, gdzie / usr był oddzielnym „napędem”. Znacznie później sądzono, że w katalogu / home znajduje się katalog domowy użytkownika, co stanowi kolejny dysk. I znacznie później, aby mieć / var (skrót od zmienna / zmienna). Katalog / etc miał na myśli „et cetera”, ponieważ była to lokalizacja dla wszystkich plików konfiguracyjnych systemu. / Mnt był używany jako tymczasowe miejsce dostępu do dysku (często dysk zapasowy). Katalogi takie jak / opt, / proc i / media pojawiły się znacznie później.

Jest wiele rzeczy, które zostały pominięte (jak / usr / local i / net), ale daje to krótki opis powodów, dla których nazwy są „mniej intuicyjne”.


2
+1 Kocham kontekst historyczny, organizuje mój mózg. :) Dziękujemy za poświęcenie czasu na napisanie tego!
— Mehrdad

5

Jak już wspomniano tutaj, dystrybucje Linuksa najczęściej korzystają z FHS, zobacz tutaj samouczek, szczególnie odpowiedni dla kogoś pochodzącego z systemu Windows.

Uwaga: katalogi Windows wydają się powierzchownie intuicyjne. Ale pozwól, że zapytam, gdzie należą ustawienia programu, jako *.iniplik w folderze programów, w Documents and Settings\User( \Application Datalub \Local Settings\Application Data) lub w niesławnym rejestrze? nikt nie wie, nawet Microsoft. I tak możemy kontynuować.


1
Myślę, że nazwy folderów w systemie Windows 7 są lepsze. tj. AppData \ Roaming vs. AppData \ Local - opisują rodzaj tam danych. Jeśli chodzi o informacje o konfiguracji: myślę, że wiem, gdzie je umieścić, kiedy je widzę, ale nie mogę tego dobrze opisać, zgadzam się. :)
— Mehrdad,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.