Các thư mục chuẩn và / hoặc phổ biến trên các hệ điều hành Unix / Linux


25

Đến từ thế giới Windows, tôi đã tìm thấy phần lớn các tên thư mục thư mục khá trực quan:

  • \Program Files chứa các tệp được sử dụng bởi các chương trình (bất ngờ!)

  • \Program Files (x86) chứa các tệp được sử dụng bởi các chương trình 32 bit trên HĐH 64 bit

  • \Users(trước đây Documents and Settings) chứa tệp của người dùng, tức là tài liệu và cài đặt

    • \Users\USER\Application Data chứa dữ liệu dành riêng cho ứng dụng

    • \Users\USER\Documents chứa tài liệu thuộc về người dùng

  • \Windows chứa các tệp thuộc về hoạt động của chính Windows

    • \Windows\Fonts lưu trữ các tập tin phông chữ (bất ngờ!)

    • \Windows\Temp là một thư mục tạm thời toàn cầu

vân vân. Ngay cả khi tôi không biết những thư mục này đã làm gì, tôi có thể đoán với độ chính xác tốt từ tên của chúng.

Bây giờ tôi đang xem xét kỹ về Linux và khá bối rối về cách tìm đường xung quanh hệ thống tệp.

Ví dụ:

  • /binchứa nhị phân. Nhưng cũng vậy /sbin, /usr/bin, /usr/sbin, và có lẽ nhiều hơn mà tôi không biết. Cái nào là cái nào?? sự khác biệt giữa chúng là gì? Nếu tôi muốn tạo một nhị phân và đặt nó ở đâu đó trên toàn hệ thống, tôi phải đặt nó ở đâu?

  • /mediachứa các hệ thống tập tin phương tiện bên ngoài. Nhưng cũng vậy /mnt. Và không ai trong số họ chứa bất cứ thứ gì trên hệ thống của tôi vào lúc này; tất cả mọi thứ có vẻ là trong /dev. Có gì khác biệt? Các phân vùng khác trên đĩa cứng của tôi ở đâu, như C:D:trong Windows là ở đâu?

  • /homechứa các tập tin người dùng và cài đặt. Đó là nhiều trực quan, nhưng sau đó, những gì được cho là đi vào /usr? Và tại sao /rootvẫn tách biệt, mặc dù đó là người dùng có tệp và cài đặt?

  • /libchứa các thư viện chia sẻ, như DLL. Nhưng cũng vậy /usr/lib. Có gì khác biệt?

  • Có gì /etc ? Liệu nó thực sự đại diện cho "et cetera", hay cái gì khác? Những loại tập tin nên có trong đó - toàn cầu hoặc địa phương? Đây có phải là tất cả cho những thứ không ai biết đặt ở đâu, hoặc có một trường hợp sử dụng cụ thể cho nó không?

  • Là gì /opt, /proc/var? Họ đại diện cho cái gì và họ dùng để làm gì? Tôi chưa thấy bất cứ thứ gì giống như chúng trong Windows *, và tôi không thể hiểu chúng có thể dùng để làm gì.

Nếu bất cứ ai có thể nghĩ về những nơi tiêu chuẩn khác có thể tốt để biết về, hãy thoải mái thêm nó vào câu hỏi; hy vọng đây có thể là một tài liệu tham khảo tốt cho những người như tôi, những người bắt đầu làm quen với các hệ thống * nix.

* OK, đó là một lời nói dối. Tôi đã thấy những điều tương tự trong WinObj, nhưng rõ ràng là không thường xuyên. Mặc dù vậy, tôi vẫn không biết những gì chúng làm trên Linux.


1
Cảm ơn vì đã giữ một tinh thần học tập tốt. Chủ đề này thường gây tranh cãi. Xem câu trả lời của tôi cho câu hỏi này để biết thêm một số giải thích về sự khác biệt cơ bản giữa các cấu trúc hệ thống tệp trong Windows so với Linux.
Caleb

Đừng nghĩ "usr" là tên viết tắt của "người dùng" mà là "Tài nguyên hệ thống Unix" (ngay cả khi nó có thể là từ viết tắt vì nó có chứa thư mục của người dùng nhiều năm trước) ( linux-training.be/files/books/html /fun/ch09s08.html ).
lgeorget

Không có cách nào để cố gắng chứng minh thư mục mật mã của Unix / Linux / etc đặt tên cho Windows (Hoặc Mac OS X). Nó chỉ là như vậy.
Andrew Wolfe

Kể từ năm 2017, cấu trúc thư mục Windows là một mớ hỗn độn. C:\Program Files, C:\ProgramData, %HOME%\AppData\Local, %HOME%\AppData\LocalLow, C:\Windows\SystemApps... Tất cả các ví dụ mà người ta có thể tìm thấy tập tin thực thi trong Windows. Và tôi thậm chí sẽ không nói về các tập tin cấu hình và sổ đăng ký, tôi không muốn bị trầm cảm hơn nữa. PS: Tôi làm việc chủ yếu trong Windows.
rsenna

Câu trả lời:


29

Các bản phân phối Linux sử dụng FHS: http://www.pathname.com/fhs/pub/fhs-2.3.html

Bạn cũng có thể thử man hier.

Tôi sẽ cố gắng tổng hợp các câu trả lời của bạn ra khỏi đầu, nhưng tôi thực sự khuyên bạn nên đọc qua FHS:

  • / bin dành cho nhị phân hệ thống không siêu người dùng
  • / sbin là dành cho nhị phân hệ thống superuser (root)
  • / usr / bin & / usr / sbin lần lượt dành cho các nhị phân không siêu người dùng hoặc siêu người dùng được chia sẻ không quan trọng
  • / mnt là để tạm thời gắn một phân vùng
  • / media là để gắn nhiều phương tiện di động cùng một lúc
  • / dev chứa các tệp thiết bị hệ thống của bạn; đó là một câu chuyện dài :)
  • Thư mục / usr và các thư mục con của nó có thể được chia sẻ với các hệ thống khác để chúng có quyền truy cập vào cùng các chương trình / tệp được cài đặt ở một nơi. Vì / usr thường nằm trên một hệ thống tệp riêng biệt, nên nó không chứa các tệp nhị phân cần thiết để đưa hệ thống trực tuyến.
  • / root là riêng biệt vì có thể cần phải đưa hệ thống trực tuyến mà không cần gắn các thư mục khác có thể nằm trên các phân vùng / ổ cứng / máy chủ riêng biệt
  • Có, / etc là viết tắt của "et cetera". Các tập tin cấu hình cho hệ thống cục bộ được lưu trữ ở đó.
  • / opt là nơi bạn có thể cài đặt các chương trình mà bạn tải xuống / biên dịch. Bằng cách đó, bạn có thể tách chúng khỏi phần còn lại của hệ thống, với tất cả các tệp ở một nơi.
  • / Proc chứa thông tin về kernel và các tiến trình đang chạy
  • / var chứa các tệp kích thước thay đổi như nhật ký, thư, trang web, v.v.

Để truy cập hệ thống, bạn thường không cần / var, / opt, / usr, / home; một số thư mục có khả năng lớn nhất trên một hệ thống.

Một trong những mục yêu thích của tôi, mà một số người không sử dụng, là / srv. Đó là dữ liệu đang được lưu trữ thông qua các dịch vụ như http / ftp / samba. Tôi đã thấy / var được sử dụng cho điều này rất nhiều, đó không thực sự là mục đích của nó.


Tổng quan tốt giải quyết các câu hỏi cụ thể. Lưu ý rằng một số distro sử dụng /home/users/usernamecho người dùng và /home/services/servicenamecho những gì bạn đề cập đến /src. Tôi nghĩ rằng điều này làm việc tốt hơn ở chỗ nó linh hoạt hơn để phân vùng. Bạn có thể có nó trên phân vùng riêng hoặc sử dụng cùng phân vùng và dữ liệu người dùng của bạn, đây thường là điều tôi muốn làm.
Caleb

+1 cảm ơn về liên kết và các mô tả, đó là những tuyệt vời! :)
Mehrdad

/ usr phải chứa các tệp cụ thể cho các ứng dụng trên hệ điều hành và / hoặc các tệp của bên thứ ba. Nó không thể chia sẻ nội tâm! Mặc dù LSB lập luận cho những điều này được giữ trong / opt. / usr / share, mặt khác có thể chứa các tệp có thể chia sẻ trên các máy có kiến ​​trúc / phiên bản HĐH khác nhau. Đây là tất cả chỉ là ước mặc dù! Hoàn toàn có thể (mặc dù rất nhiều công việc khó khăn) để sử dụng một cấu trúc hoàn toàn khác. Mặc dù vậy, có những quy ước khác - như Kiến trúc linh hoạt tối ưu của Oracle
symcbean

1
Một điều khác cần ghi nhớ về Unix là khái niệm " mọi thứ đều là tệp " (hoặc ít nhất trông giống như một tệp ). Ví dụ, nội dung trong / Proc trông giống như các tệp và thư mục, nhưng nội dung thực sự được tạo ra một cách linh hoạt bởi kernel khi bạn truy cập chúng. Điều này có nghĩa là bạn có thể sử dụng cùng các công cụ (ls, cat, v.v.) để truy cập thông tin này.
KeithB

1
@symcbean Từ FHS: "... / usr có thể chia sẻ, dữ liệu chỉ đọc. Điều đó có nghĩa là / usr nên có thể chia sẻ giữa các máy chủ tuân thủ FHS khác nhau ...". Rõ ràng một số tệp phụ thuộc vào kiến ​​trúc và một số bản phân phối mong đợi hệ thống phân cấp thư mục khác nhau. Giải pháp là làm bài tập về nhà của bạn, như một Quản trị viên giỏi :)
bhinesley

18

Tôi sẽ không trả lời về tất cả những gì họ muốn nói (những người khác có), nhưng đưa ra một bối cảnh lịch sử nhỏ.

Đầu tiên, hãy nhớ rằng UNIX đã gần 40 tuổi, trở lại thời kỳ băng giấy và 300 thiết bị đầu cuối được mã hóa cứng cho các máy tính lớn (hệ thống Windows XP đã gần 10 năm tuổi). Gõ rất chậm và nhu cầu về hiệu quả trong việc gõ lớn hơn rất nhiều những cân nhắc khác. Đó là lý do cho các lệnh cơ bản rất ngắn (ví dụ: 'ls', 'cat', 'cc', 'dd', v.v.). Tương tự với các cấu trúc thư mục. Ý nghĩ là nếu lệnh có nhiều hơn ba hoặc bốn ký tự thì tên đó quá dài.

Thư mục / usr ban đầu chứa các thư mục chính của người dùng vì hầu hết các lệnh nằm trong / bin và tất cả các tệp thiết bị đều nằm trong / dev. Sau đó, nó được cho là làm cho ổ đĩa chính (hệ thống tập tin gốc, '/') nhỏ để có thời gian khởi động nhanh hơn. Vì vậy, các cấu trúc khác như / usr / bin, / usr / bao gồm và / usr / lib đã xuất hiện, trong đó / usr là một "ổ đĩa" riêng biệt. Rất lâu sau, nó được cho là có thư mục nhà của người dùng trong / home, nhưng một ổ đĩa khác. Và muộn hơn thế, để có một / var (viết tắt của biến / có thể thay đổi). Thư mục / etc có nghĩa là 'et cetera' vì đó là vị trí bắt tất cả các tệp cấu hình hệ thống. / Mnt được sử dụng làm nơi tạm thời để truy cập ổ đĩa (thường là ổ đĩa dự phòng). Các thư mục như / opt, / Proc và / media xuất hiện nhiều sau đó.

Có rất nhiều thứ bị bỏ qua (như / usr / local và / net), nhưng điều này đưa ra một mô tả ngắn gọn về lý do tại sao các tên 'ít trực quan hơn'.


2
+1 Tôi yêu bối cảnh lịch sử, nó tổ chức bộ não của tôi. :) Cảm ơn đã dành thời gian để viết những dòng này!
Mehrdad

5

Như đã đề cập ở đây, các bản phân phối Linux chủ yếu sử dụng FHS, xem ở đây để biết tổng quan giống như hướng dẫn, đặc biệt phù hợp với người đến từ các cửa sổ.

Lưu ý, các thư mục Windows có vẻ trực quan, bề ngoài. Nhưng hãy để tôi hỏi bạn, nơi cài đặt cho một chương trình thuộc về, như một *.initệp trong thư mục chương trình, trong Documents and Settings\User( \Application Datahoặc \Local Settings\Application Data) hoặc trong sổ đăng ký khét tiếng? không ai biết, kể cả Microsoft. Và vì vậy chúng ta có thể đi và về.


1
Tôi nghĩ rằng tên Windows 7 của các thư mục là tốt hơn. tức là AppData \ Roaming so với AppData \ Local - họ mô tả loại dữ liệu trong đó. Về thông tin cấu hình: Tôi nghĩ rằng tôi biết nơi để đặt nó khi tôi nhìn thấy nó, nhưng tôi không thể mô tả nó tốt, tôi đồng ý. :)
Mehrdad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.