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.