Sự khác biệt giữa / bin và / usr / bin


83

Tôi đọc nó trên trang web này và nó không có ý nghĩa.

http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/document/basic/node32.html

Khi UNIX lần đầu tiên được viết /bin/usr/binnằm trên hai đĩa khác nhau: /binnằm trên một đĩa nhỏ hơn nhanh hơn (đắt hơn) và /usr/bintrên một đĩa chậm lớn hơn. Bây giờ, /binlà một liên kết tượng trưng đến /usr/bin: về cơ bản chúng là cùng một thư mục.

Nhưng khi bạn lscác /binthư mục, nó có nội dung ít hơn so với /usr/binthư mục (ít nhất là trên hệ thống chạy của tôi).

Vì vậy, ai đó có thể vui lòng giải thích sự khác biệt?


Không phải những kẻ đó đang nói về một chiếc máy cụ thể sao?
tshepang

1
@tshepang tốt nếu bạn tiếp tục nhấp lên, trong bài viết bạn sẽ tiếp cận Giới thiệu cơ bản về UNIX / linux . Vì vậy, tôi nói không, họ không nói về một máy cụ thể
xenoterracide

3
@xeno Vâng, tôi đã làm, nhưng không gắn bó đủ lâu. Trong trường hợp đó, trang đó phải được gỡ xuống. Vì vậy, gây hiểu lầm.
tshepang

3
Tài liệu đó có thể được coi là "tài liệu tham khảo lịch sử". Nếu bạn nhìn vào trang "về tài liệu này", bạn sẽ thấy rằng nó có bản quyền ban đầu vào năm 1993. Nếu bạn xem thư mục, nguồn gần đây nhất là năm 1997. Hầu hết các hệ điều hành giống như unix phổ biến đã thay đổi đáng kể từ khi sau đó.
gabe.

1
Bất cứ ai quan tâm đến tính lịch sử của cấu hình này nên đọc điều này: list.busybox.net/pipermail/busybox/2010-December/074114.html
JDS

Câu trả lời:


73

Gì? không /bin/không phải là một liên kết tượng trưng cho /usr/binbất kỳ hệ thống tuân thủ FHS nào. Lưu ý rằng vẫn còn các Unice và Linux phổ biến bỏ qua điều này - ví dụ: /bin/sbinđược liên kết với sym /usr/binLinux (lý do là bạn không cần /bincứu hộ / chế độ một người dùng, vì bạn chỉ cần khởi động trực tiếp CD).

/bin

chứa các lệnh có thể được sử dụng bởi cả quản trị viên hệ thống và người dùng, nhưng được yêu cầu khi không có hệ thống tập tin nào khác được gắn kết (ví dụ: trong chế độ người dùng đơn). Nó cũng có thể chứa các lệnh được sử dụng gián tiếp bởi các tập lệnh

/usr/bin/

Đây là thư mục chính của các lệnh thực thi trên hệ thống.

về cơ bản, /binchứa các tệp thực thi được yêu cầu bởi hệ thống để sửa chữa khẩn cấp, khởi động và chế độ người dùng. /usr/binchứa bất kỳ nhị phân nào không cần thiết.

Tôi sẽ lưu ý rằng chúng có thể nằm trên các đĩa / phân vùng riêng biệt, /binphải nằm trên cùng một đĩa với /. /usr/bincó thể nằm trên một đĩa khác - mặc dù lưu ý rằng cấu hình này đã bị hỏng trong một thời gian (đây là lý do tại sao systemd cảnh báo về cấu hình này khi khởi động).

Để hoàn toàn chính xác, một số thông báo có thể bỏ qua FHS, vì tôi tin rằng đó chỉ là một Tiêu chuẩn Linux, tôi không biết rằng nó đã được đưa vào SUS, Posix hoặc bất kỳ tiêu chuẩn UNIX nào khác, mặc dù nó phải là IMHO. Nó là một phần của tiêu chuẩn LSB .


Vì vậy, nó có nghĩa là tôi có thể chia sẻ / usr / bin giữa hai distro? như Ubuntu 10.04 và 10.10?
balki

4
@balki không, chúng vẫn phải được liên kết chính xác, điều đó có nghĩa là chúng phải được sử dụng đúng phiên bản lib mà chúng được tạo ra để chống lại.
xenoterracide

6
/binlà một liên kết đến /usr/bintrên một số thông báo, chẳng hạn như (một số bản phát hành của?) Solaris.
Gilles

1
@balki bạn thể chia sẻ /usrgiữa hai bản phân phối rất giống nhau, mặc dù tôi sẽ không thử trừ khi bạn biết bạn đang làm gì và bạn đã chuẩn bị cho thử nghiệm thất bại theo cách khiến máy tính không khởi động hoặc ăn dữ liệu của bạn. Cũng cần lưu ý rằng nhiều sự khác biệt lớn giữa 10.04 và 10.10 sẽ có trong/usr
xenoterracide

2
Chúng tôi cũng bao gồm / usr / local / bin là nơi các chương trình không được bao gồm trong phân phối của bạn nhưng được dành cho sử dụng trên toàn hệ thống được cài đặt.
Donato

56

/sbin - Các nhị phân cần thiết để khởi động, sửa chữa hệ thống cấp thấp hoặc bảo trì (chạy cấp 1 hoặc S)

/bin - Binaries cần thiết cho hoạt động bình thường / hệ thống tiêu chuẩn ở bất kỳ cấp độ chạy.

/usr/bin - Các nhị phân ứng dụng / phân phối có nghĩa là được truy cập bởi người dùng đã đăng nhập cục bộ

/usr/sbin - Các nhị phân ứng dụng / phân phối hỗ trợ hoặc định cấu hình nội dung trong / sbin.

/usr/share/bin - Các nhị phân hoặc tập lệnh ứng dụng / phân phối có nghĩa là được tích lũy qua web, tức là các ứng dụng web Apache

*local*- Binaries không phải là một phần của phân phối; biên dịch cục bộ hoặc cài đặt thủ công. Thường không bao giờ có /local/binnhưng luôn luôn là một /usr/local/bin/usr/local/share/bin.


4
Ồ, và bạn có thể đặt tất cả những thứ này vào một đĩa hoặc phân vùng riêng nếu bạn muốn, để bảo mật hoặc bất cứ điều gì. Ý tưởng là bạn có thể umount / usr và hệ thống sẽ có tất cả những gì nó cần cho chức năng cơ bản, nhưng nó không thể chạy bất kỳ ứng dụng phi hệ thống nào.
LawrenceC

1
Tôi ước tôi đã biết từ nhiều năm trước. Giải thích tốt nhất tôi đã thấy cho đến nay. Tôi không thể nói rằng tôi trông rất chăm chỉ, nhưng rất vui khi cuối cùng cũng biết câu trả lời.
David

2
đây là một câu trả lời tuyệt vời Tôi sẽ tặng bạn 10 điểm của riêng tôi nếu tôi có thể
đổ bộ vào

@ultrasawblade /usr/bintự động được ngắt kết nối khi không có người dùng đăng nhập? Ví dụ, khi LINUX khởi động và trình bày xác thực đăng nhập, được /usr/bingắn kết hay không?

1
Không, nó được gắn khi khởi động và vẫn được gắn trừ khi bạn ngắt kết nối, trừ khi hệ thống của bạn được cấu hình bất thường.
LawrenceC

17

Một số loại "cập nhật" về vấn đề này:

Gần đây một số bản phân phối Linux được sáp nhập /binvào /usr/binvà relatedly /libvào /usr/lib. Đôi khi cũng (/usr)/sbinđể /usr/bin(Arch Linux). Vì vậy, /usrdự kiến ​​sẽ có sẵn cùng một lúc với /.

Sự khác biệt giữa hai hệ thống phân cấp được coi là phức tạp không cần thiết bây giờ. Ý tưởng đã từng chỉ /bincó sẵn khi khởi động, nhưng có một ramdisk ban đầu làm cho điều này trở nên lỗi thời.

Tôi biết Fedora Linux (2011) và Arch Linux (2012) đang đi theo hướng này và Solaris đang làm điều này trong một thời gian dài (> 15 năm).


8

Trên Linux /bin/usr/binvẫn riêng biệt bởi vì thông thường có /usrtrên một phân vùng riêng (mặc dù đôi khi cấu hình này bị phá vỡ theo cách tinh tế). Trong /binlà tất cả các lệnh mà bạn sẽ cần nếu bạn chỉ /gắn kết.

Trên Solaris và Arch Linux (và có thể là những người khác) /binlà một liên kết tượng trưng đến /usr/bin. Arch cũng có /sbinvà liên /usr/sbinkết với /usr/bin.

Đặc biệt lưu ý, câu lệnh /bindành cho lệnh "quản trị viên hệ thống" và /usr/bindành cho lệnh người dùng là không đúng (trừ khi bạn nghĩ vậy bashlschỉ dành cho quản trị viên, trong trường hợp bạn có nhiều thứ để tìm hiểu). Các lệnh quản trị viên nằm trong /sbin/usr/sbin.


1
Ai nói binchỉ dành cho quản trị viên hệ thống? đó là những gì sbindành cho.
xenoterracide

Đánh giá sai bạn. Xin lỗi, tôi đã đọc quá nhanh.
bahamat

5

Có nhiều hệ thống dựa trên UNIX. Linux, AIX, Solaris, BSD, v.v ... Trích dẫn ban đầu đưa ra bối cảnh lịch sử áp dụng cho tất cả các hương vị. Nếu bạn nhìn vào bất kỳ một hệ thống cụ thể nào, bạn sẽ thấy các kết quả khác nhau. Câu cuối cùng của trích dẫn ban đầu chỉ dành riêng cho một số phiên bản và bản phân phối.

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.