/ usr / bin vs / usr / local / bin trên Linux


445

Tại sao có nhiều nơi để đặt nhị phân trong Linux? Có ít nhất năm điều này:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/local/bin/
  5. /usr/local/sbin/

Và trên hộp văn phòng của tôi, tôi không có quyền ghi vào một số trong số này.

Loại nhị phân nào đi vào cái nào trong số này bin?


28
Bạn quên mất /usr/sbin/.
Hello71

15
~/bin/cho các công cụ cá nhân.
Calmarius

1
Ngày nay có ít địa điểm hơn, kể từ khi /binđược hợp nhất /usr/bin/sbinđược sáp nhập với /usr/sbin- xem Trường hợp cho / usr Hợp nhất .
Piotr Dobrogost


@Calmarius, cái gì? bạn không nên sử dụng /usr/local/bin?
Pacerier

Câu trả lời:


558
  1. /bin(và /sbin) được dành cho các chương trình cần có trên một /phân vùng nhỏ trước khi các phân vùng lớn hơn /usr, v.v. được gắn kết. Ngày nay, nó chủ yếu phục vụ như một vị trí tiêu chuẩn cho các chương trình chính như /bin/sh, mặc dù mục đích ban đầu vẫn có thể phù hợp với việc cài đặt trên các thiết bị nhúng nhỏ.

  2. /sbin, như khác biệt /bin, là dành cho các chương trình quản lý hệ thống (thường không được sử dụng bởi người dùng thông thường) cần thiết trước khi /usrđược gắn kết.

  3. /usr/bin dành cho các chương trình người dùng thông thường được quản lý phân phối.

  4. Có một /usr/sbinmối quan hệ tương tự /usr/binnhư /sbinphải /bin.

  5. /usr/local/bindành cho các chương trình người dùng thông thường không được quản lý bởi gói quản lý phân phối, ví dụ các gói được biên dịch cục bộ. Bạn không nên cài đặt chúng vào /usr/binvì các bản nâng cấp phân phối trong tương lai có thể sửa đổi hoặc xóa chúng mà không cần cảnh báo.

  6. /usr/local/sbin, Như bạn có thể đoán vào thời điểm này, là để /usr/local/binkhi /usr/sbinđến /usr/bin.

Ngoài ra, cũng /optcó những gói dành cho các gói không phân phối nguyên khối, mặc dù trước khi chúng được tích hợp chính xác, các bản phân phối khác nhau đặt Gnome và KDE ở đó. Nói chung, bạn nên dành nó cho các gói bên thứ ba lớn, hoạt động kém như Oracle.


37
Tôi nghĩ rằng câu trả lời này thực hiện rất tốt việc làm rõ một tập hợp các quy ước chung, nhưng bài đăng này từ Rob Landley là một bài đọc thực sự tuyệt vời nếu bạn muốn tìm hiểu sâu về những điều vô nghĩa ... list.busybox.net/pipermail/busybox/2010-December /074114.html
Subfuzion

3
refspecs.linuxfoundation.org/fhs.shtml để tham khảo hiện tại chính tắc. Liên kết của @kojiro đã lỗi thời và không có thông số mới.
Didier A.

2
Tôi để một thùng tôi tải về từ đâu? Từ mô tả của bạn, có vẻ như nó nên đi vào / usr / local / bin hoặc / usr / bin. Là / usr / bin một cái gì đó tôi không bao giờ nên chạm vào bằng tay và chỉ để người quản lý gói chơi với?
Didier A.

3
@DidierA. đặt nó vào ~/binvà thêm thư mục đó vào PATH của bạn với tư cách là người dùng ... Cảm ơn bạn đã lưu ý, tôi đã xóa nhận xét lỗi thời nghiêm trọng của mình.
kojiro

3
Tôi tìm thấy câu trả lời cho phần đầu tiên của câu hỏi của tôi ở đây: superuser.com/a/238993/425838 . Ưu tiên dựa trên thứ tự trong PATHbiến hệ thống , và echo $PATHtheo tôi cho thấy /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games, điều đó có nghĩa là các thực thi /usr/local/binđược ưu tiên hơn các /usr/binưu tiên trong các ưu tiên so với các biến trong đó /bin.
Gabriel Staples

65

Tôi khuyên bạn nên xem trang người đàn ông phân cấp hệ thống tệp:

man hier

Cái nào cũng có sẵn trực tuyến, ví dụ: http://linux.die.net/man/7/hier


1
Điều này không trả lời câu hỏi của người dùng.
Billy ONeal

14
Trang man có chứa một mục nhập cho mỗi thư mục bin, giải thích những gì đi vào chúng, đó là một trong những câu hỏi.
davitenio

34

Mục tiêu chuẩn phân cấp hệ thống tập tin trong Wikipedia đã giúp tôi trả lời câu hỏi tương tự khi tôi có nó, cộng với nó có một bảng rất lý giải.

Trích từ trang 1 :

/bin        Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.
/usr/bin    Non-essential command binaries (not needed in single user mode); for all users.
/usr/local  Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin, lib, share
/usr/sbin   Non-essential system binaries, e.g., daemons for various network-services.
/sbin       Essential system binaries, e.g., fsck, init, route.

1 Truy cập ngày 19 tháng 6 năm 2019; permalink .


17

Các sbinthư mục chứa các chương trình thường chỉ quản trị hệ thống. Các chương trình cho người dùng thường xuyên không bao giờ nên đi trong đó.

Một vài chương trình là cần thiết trong quá trình khởi động, và kết thúc bằng /bin/hoặc /sbin/. Chúng phải có sẵn trước khi hệ thống tập tin được gắn kết. Những thứ như mount, và fsckđược yêu cầu để kiểm tra và gắn kết các hệ thống tập tin phải ở đó.

Hầu hết các chương trình đóng gói kết thúc trong /usr/bin//usr/sbin/. Chúng có thể nằm trên một hệ thống tệp khác với hệ thống tệp gốc. Trong một số trường hợp, chúng có thể nằm trên một ổ đĩa gắn trên mạng.

Các chương trình và kịch bản địa phương thuộc /usr/local/bin//usr/local/sbin/. Điều này xác định chúng rõ ràng là không chuẩn và có thể chỉ có sẵn trên trang web.

Để giải thích thêm, hãy thử chạy lệnh man hiersẽ cung cấp mô tả về phân cấp hệ thống tệp được đề xuất cho phân phối của bạn. Bạn cũng có thể muốn đọc về Phân cấp hệ thống tệp trên Wikipedia


1
+1 Một lời giải thích thực sự súc tích nếu top quá nhiều.
CppLearner

"Các chương trình và tập lệnh cục bộ thuộc về / usr / local / bin / và / usr / local / sbin /" - Ý bạn là các chương trình cục bộ như trong "không phải ở tất cả các phần của HĐH, nhưng tôi đã quyết định cài đặt chúng và muốn sử dụng chúng "?
Jim Aho

11

Trong những năm 1970, UNIXcó tất cả các tệp thực thi chính thức /bin/usr/binlà một vị trí bên dưới các thư mục nhà của người dùng (ví dụ /usr/dmr) có sẵn cho bất kỳ người dùng nào để lưu trữ các tệp nhị phân của riêng người khác mà họ cũng có thể quan tâm.

Kết quả của việc mở này /usr/binlà một bãi rác của phần mềm không có giấy tờ và vì vậy Stephen Bourneđã viết một bản cron scriptkiểm tra các tệp nhị phân mới mỗi đêm và xóa tất cả các tệp nhị phân không có tài liệu hoặc đã được cập nhật mà không cập nhật tài liệu của chúng.

Vào cuối những năm 1970, /usr/binđược tích hợp vào phân phối cơ sở HĐH và mọi người bắt đầu sử dụng /usr/local/bincho mục đích mở trước đó /usr/bin.

Sau một thời gian, các sysadins được sử dụng /usr/local/binđể lưu trữ non-localphần mềm được nhập từ mạng (ví dụ USENET) và vì các công ty UNIX không muốn lặp lại lỗi tương tự như vậy /usr/bin, đã có một hội nghị phân cấp hệ thống tệp vào khoảng năm 1987, nơi tất cả các công ty UNIX đều đồng ý từ bỏ /usr/local/binvà sử dụng /opt/<vendor>/binthay thế.

Thật không may, các bản phân phối Linux đã không tuân theo quyết định này ....


Mặc dù rất thú vị, nhưng không ai trong số này thậm chí còn cố gắng trả lời câu hỏi không phải về /optvà không phải về UNIX mà là về Linux. Điều này giống như trả lời "Tại sao xe hơi có 4 bánh?" với "Xe đạp có 2! Đáng buồn thay, ô tô thì không." Điều này không giúp OP hiểu tại sao xe hơi có 4.
terdon

2
Nếu bạn không thể sử dụng lời giải thích đã cho như một lời giải thích cho nền tảng của Linux và thực tế là Linux thích bắt chước UNIX, bạn có thể đang thiếu nền tảng cần thiết.
schily

1
Thú vị, nhưng một cái gì đó tôi bị nhầm lẫn và có lẽ cũng chỉ là lịch sử. Ngày nay, việc tải xuống một thùng trực tuyến và một thùng công ty không khác lắm. Nếu Joe Blow tạo một chương trình và tôi tải xuống, tại sao không đặt nó vào / opt / JowBlow / bin thay vì / usr / local / bin. Đây có phải là vấn đề của nhà cung cấp đáng tin cậy so với không đáng tin cậy? Nó dường như không có ý nghĩa với tôi.
Didier A.

1
Tôi ước tôi đã biết lịch sử 'chính xác' này một vài năm trước. a) Tôi đã tự hỏi tại sao AIX tránh / usr / local, sử dụng / opt / IBM và / opt / ibm và bullfreeware sử dụng / opt / freeware - và tại sao tôi NÊN sử dụng một đường dẫn khác (không chỉ / opt / * sbin). Liên quan đến bán với Linux - các công cụ GNU tốt hơn - mặc định --prefix trong các công cụ tự động là / usr / local. Autotools quá xấu (automake, autoconf, vv không làm theo ... Nhưng tất cả chúng ta tồn tại và tìm hiểu nơi các distrub || nhà cung cấp đưa chương trình của họ...
Michael Felt

Chúng ta có thể có một trong những hội nghị này? Chỉ lần này thôi, MỌI NGƯỜI NGHE!
MemphiZ
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.