/ Usr / local / bin là gì?


85

Trước ngày hôm nay, tôi đã sử dụng thiết bị đầu cuối trong một phạm vi hạn chế di chuyển vào và ra khỏi thư mục và thay đổi ngày của các tệp bằng touchlệnh. Tôi đã nhận ra toàn bộ phạm vi của thiết bị đầu cuối sau khi cài đặt một tập lệnh thú vị trên Mac và phải vào chmod 755tệp để thực hiện sau đó.

Tôi muốn biết những gì /usr/local/binlà mặc dù. /usr/, Tôi giả sử, là người sử dụng máy tính. Tôi không chắc tại sao /local/có. Nó rõ ràng là viết tắt của máy tính cục bộ, nhưng vì nó nằm trên máy tính (hoặc máy chủ), nên nó có thực sự cần thiết? Sẽ không /usr/binổn chứ?

Và là /bingì? Tại sao khu vực này thường được sử dụng để cài đặt các tập lệnh vào thiết bị đầu cuối?

Câu trả lời:


77

/usr/local/bin dành cho các chương trình mà người dùng bình thường có thể chạy.

  • Hệ /usr/localthống phân cấp được sử dụng bởi quản trị viên hệ thống khi cài đặt phần mềm cục bộ.
  • Nó cần được an toàn để không bị ghi đè khi phần mềm hệ thống được cập nhật.
  • Nó có thể được sử dụng cho các chương trình và dữ liệu có thể chia sẻ giữa một nhóm các máy chủ, nhưng không được tìm thấy trong /usr.
  • Phần mềm được cài đặt cục bộ phải được đặt bên trong /usr/localchứ không phải / usr trừ khi phần mềm đang được cài đặt để thay thế hoặc nâng cấp phần mềm /usr.

Nguồn này giúp giải thích tiêu chuẩn phân cấp hệ thống tập tin ở mức sâu hơn.

Bạn có thể tìm thấy bài viết này về việc sử dụng và lạm dụng/usr/local/bin thú vị là tốt.


"" "trừ khi nó được cài đặt để thay thế hoặc nâng cấp phần mềm theo nghĩa / usr" ""?
Pacerier

63

/ usr /, tôi giả sử là người dùng máy tính.

Đóng.

Unix khởi đầu là một hệ điều hành nhiều người dùng, vì vậy nó không phải là "người dùng", mà là " người dùng ", số nhiều.

Trước khi AT & T Unix System V Release 4 (SVR4) ra mắt vào năm 1988 với các công cụ quản lý người dùng mặc định tạo thư mục nhà của người dùng /home, vị trí thông thường là. /usrThư mục của bạn $HOMEcó thể /usr/jfwnằm trên hộp System III .

/usrcũng kín, sau đó cũng như bây giờ, /usr/bin, /usr/libvv Kinh nghiệm cho thấy, cách ly các thư mục nhà là phương thức quản lý hệ thống tốt, vì vậy với /homesự thay đổi chính sách trong SVR4, nó để lại đằng sau tất cả mọi thứ bây giờ chúng tôi nghĩ là thuộc trong /usr.

/usrvẫn có một lý do chính đáng để giữ tên: những gì bị bỏ lại phía sau là các tệp không cần có sẵn cho đến khi hệ thống được khởi động đủ xa để hỗ trợ sử dụng tương tác thông thường. Điều đó có nghĩa là, những gì bị bỏ lại phía sau là các phần tập trung vào người dùng của HĐH. Điều này có nghĩa là /usrcó thể ở một thể tích vật lý khác, đó là một điều tốt trong thời kỳ ổ cứng 92 MB có kích thước của máy giặt .

Các hệ thống Unix ban đầu đã cẩn thận để tránh các tệp hệ điều hành lõi /usrđể bạn vẫn có thể khởi động vào chế độ một người dùng² ngay cả khi /usrâm lượng không thể đếm được vì một số lý do. Khối lượng gốc chứa các công cụ đủ để đưa /usrâm lượng trở lại trực tuyến.

Một số hương vị Unix nay bỏ qua nguyên tắc thiết kế cũ này kể từ khi hệ thống nhúng thậm chí nhỏ có đủ chỗ cho tất cả các tập tin khối lượng gốc truyền thống tất cả /usrtrên một volume.³ đơn Red Hat Enterprise Linux, Solaris và Cygwin liên kết tượng trưng /binđến /usr/bin/libđể /usr/libsao cho không có còn bất kỳ sự khác biệt giữa các thư mục này.

... / local / ... rõ ràng là viết tắt của máy tính cục bộ ...

Đúng. Nó đề cập đến thực tế là các tệp theo /usr/localđược cho là đặc biệt cho hệ thống đơn lẻ đó. Các tập tin theo bất kỳ cách nào chung chung nên sống ở nơi khác.

Điều này cũng bắt nguồn từ cách các hệ thống Unix thường được sử dụng từ nhiều thập kỷ trước khi tất cả điều này được chuẩn hóa. Một lần nữa, các đĩa cứng thời đó rất cồng kềnh, thực sự đắt tiền và được lưu trữ rất ít theo tiêu chuẩn ngày nay. Để tiết kiệm tiền và dung lượng trên đĩa, một phòng thí nghiệm máy tính chứa đầy các hộp Unix thường chia sẻ hầu hết /usrtrên NFS hoặc một số giao thức chia sẻ tệp mạng khác, vì vậy mỗi hộp không phải có bản sao dự phòng của riêng mình. hộp sẽ đi theo /usr/local, đó sẽ là một khối lượng riêng biệt từ /usr.

Di sản lịch sử này là lý do tại sao nó vẫn là mặc định cho hầu hết các phần mềm Unix của bên thứ ba cài đặt /usr/localkhi cài đặt bằng tay. Hầu hết các phần mềm như vậy sẽ cho phép bạn cài đặt gói ở một nơi khác, nhưng bằng cách không lựa chọn, bạn sẽ có được mặc định an toàn, điều này không can thiệp vào các vị trí cài đặt phổ biến khác với mục đích cụ thể hơn.

Có những lý do tốt để làm cho phần mềm cài đặt ở một nơi khác thay thế. Nhóm macOS của Apple thực hiện điều này khi họ xây dựng, bashtừ mã nguồn GNU Bash . Chúng sử dụng /làm tiền tố cài đặt, ghi đè /usr/localmặc định, để Bash kết thúc /bin.

Một ví dụ khác là cách các hệ thống Linux cũ hơn tách biệt phần mềm GUI của họ /usr/X11R6, để tách biệt nó khỏi dòng lệnh và cursesphần mềm dựa trên truyền thống . Điều này được thực hiện đơn giản bằng cách ghi đè /usr/localtiền tố mặc định bằng /usr/X11R6.⁵

Và / bin là gì?

Nó là viết tắt của "binary", trong ngữ cảnh này có nghĩa là "một tệp không phải là văn bản thuần túy." Hầu hết các tệp như vậy là các tệp thực thi trên hộp Unix, vì vậy hai thuật ngữ này đã trở thành đồng nghĩa trong một số vòng tròn. ("Vui lòng tạo cho tôi một nhị phân cho RHEL 7, Fred.")

File văn bản trên một hộp Unix sống ở nơi khác: /etc, /usr/include, /usr/sharevv

Ngày xửa ngày xưa, ngay cả các tập lệnh shell - vốn là các tệp văn bản thuần túy - đã bị loại khỏi các binthư mục, nhưng dòng này cũng bị mờ. Ngày nay, các binthư mục thường chứa bất kỳ loại tệp thực thi nào, cho dù là "nhị phân" hay không.


Chú thích và lạc đề :

  1. Bản chất nguyên thủy của các công cụ quản lý người dùng trước SVR4 có nghĩa là HOME=/usr/$NAMElược đồ chỉ được ghi lại như một quy ước, thay vì được thi hành bởi các công cụ phần mềm như một mặc định.

    Bạn có thể thấy điều này trên trang 4-8 của " Hướng dẫn dành cho quản trị viên hệ thống AT & T Unix phiên bản 3.2 : tại đây bạn thấy AT & T đề xuất /usr/$NAMElược đồ cũ trong phiên bản chính cuối cùng của Unix trước khi SVR4 xuất hiện.

    Nó khá phổ biến trong các hệ thống Unix cũ hơn cho các quản trị viên hệ thống để chọn một sơ đồ khác có ý nghĩa hơn đối với họ. Con người là con người, điều đó có nghĩa là rất nhiều phương án khác nhau đã được phát minh ra.

    Một kế hoạch tôi đã đi qua trước khi /home/$NAMEtrở thành tiêu chuẩn là /u/$NAME.

    Một hệ thống khác mà tôi đã sử dụng vào đầu những năm 1990 có rất nhiều người dùng đến mức họ không thể vừa tất cả các thư mục nhà vào một khối vật lý duy nhất, vì vậy họ đã sử dụng một sơ đồ như /u1/$NAME, /u2/$NAMEv.v., như tôi nhớ. Đĩa nào thư mục nhà của bạn kết thúc chỉ đơn giản là vấn đề cái nào có dung lượng trên đó tại thời điểm tài khoản của bạn được tạo.

  2. Bạn có thể khởi động hộp macOS vào chế độ một người dùng bằng cách nhấn giữ Cmd-Strong khi khởi động. Hãy đi một khi màn hình chuyển sang màu đen và bạn thấy văn bản màu xám nhạt xuất hiện. Nó giống như chạy trong Terminal, nhưng nó chiếm toàn bộ màn hình vì GUI chưa bắt đầu.

    Hãy cẩn thận, bạn đang chạy như root.

    Nhập "exit" tại dấu nhắc gốc của một người dùng để thoát khỏi chế độ một người dùng và tiếp tục khởi động vào chế độ GUI của nhiều người dùng.

  3. Các hệ điều hành Unixy vẫn xuất hiện để giữ các tệp chế độ một người dùng quan trọng ngoài /usrthực tế có thể không làm như vậy trong những ngày này. Tôi đã từng kết xuất hộp FreeBSD 9 không thể khởi động bằng cách chuyển /usrsang ổ ZFS. Tôi quên rằng các tính năng ZFS-root đã không cập nhật FreeBSD 10, tạo ra Catch 22 : hệ điều hành cần các tệp /usrđể gắn kết /usr!

    Điều đó là đủ tồi tệ, nhưng nếu FreeBSD 9 vẫn không giữ công cụ khởi động một người dùng của nó /usr, tôi có thể sửa nó tại chỗ. Vì nó sẽ không khởi động ngay cả ở chế độ một người dùng mà /usrkhông thể đếm được, rõ ràng truyền thống đó đã bị vi phạm bằng cách nào đó. Tôi đã phải khởi động từ đĩa CD cứu hộ để đưa hệ thống đó hoạt động trở lại.

  4. Đây cũng là nơi chúng tôi nhận được /usr/share: nó phân tách các tệp có thể được chia sẻ ngay cả giữa các hộp Unix với các loại bộ xử lý khác nhau. Thông thường, tệp văn bản: trang người đàn ông, từ điển, vv

  5. "X11R6" đã đề cập đến phiên bản của Hệ thống X Window làm nền tảng cho GUI của Linux tại thời điểm quy ước này là phổ biến. Các hệ thống Linux thường dừng cách ly phần mềm GUI về thời gian X11R6 được thay thế bằng X.Org .

  6. Các hệ thống Unix ban đầu giữ các tập lệnh shell lõi của chúng /etcđể tránh làm hỏng chúng với các nhị phân thực /bin.


3
Yêu hình ảnh của máy giặt!
vào

@Warren, các hệ điều hành đáng chú ý trước Hệ thống III là gì?
Pacerier

@Pacerier: UNIX Phiên bản 1 đến 7, UNIX / 32V, 1BSD đến 4BSD không bao gồm các bản phát hành chấm của 4BSD (4.1BSD gần như cùng thời với AT & T Unix System III) và PWB Unix. Nguồn . Tại sao bạn hỏi, và nó phải làm gì với câu hỏi này?
Warren Young

@Warren, Chà, họ có thể đã ảnh hưởng đến "hệ thống đặt tên thư mục" của defacto bằng cách nào đó
Pacerier

@Pacerier: Tôi sẽ đứng trước yêu sách của tôi: không có "tiêu chuẩn" nào trước Hệ thống V, chỉ có các quy ước và thông lệ địa phương.
Warren Young

9

Tôi khuyên bạn nên tham khảo Wikipedia cho các câu hỏi liên quan đến cấu trúc nói chung, nó sẽ bao gồm những điều cơ bản.

Để trả lời câu hỏi của bạn trực tiếp, tuy nhiên:

  • / usr là, lỏng lẻo, thư viện hệ thống không quan trọng và thực thi
  • / usr / local là, một lần nữa lỏng lẻo, đối với các thư viện và hệ thống thực thi phi hệ thống

Đây là lý do tại sao bạn có xu hướng tìm thấy cấu trúc tương tự giữa hai; / usr / {, cục bộ /} {bin, sbin, lib}. Là người mới đối với shell, bit đó với {} là một bản mở rộng shell. Hãy thử thực hiện

ls -ld /usr/{,local/}{bin,sbin,lib}

từ vỏ địa phương của bạn để xem làm thế nào nó hoạt động.


9

/usr/local/bin hiển thị các gốc UNIX-esque của Mac OS mới nhất (BSD của nó dựa trên đó).

  • "Usr" là viết tắt của Tài nguyên hệ thống UNIX. Đây là vị trí mà các chương trình hệ thống và thư viện được lưu trữ.
  • "cục bộ" đại diện cho các tài nguyên không được phân phối với phân phối tiêu chuẩn và, thông thường, được biên soạn và duy trì trên cơ sở từng trang web.
  • "Bin" đại diện cho các tệp thực thi được biên dịch nhị phân.

Điều này đã biến đổi kể từ khi triển khai sớm UNIX sang Linux và BSD, nhưng quy ước vẫn tồn tại. Bây giờ, /usr/binsẽ dành cho các chương trình và thư viện "chính" hoặc cốt lõi, nơi /usr/local/binsẽ dành cho các chương trình và thư viện bổ trợ và không quan trọng.


12
Tôi đã sử dụng Unix từ ngay sau khi Bức tường Berlin sụp đổ và tôi chưa bao giờ nghe thấy bản mở rộng "Tài nguyên hệ thống Unix" cho "usr" cho đến ngày hôm nay; nó là một từ viết tắt "Usr" có tên của nó bởi vì đó là nơi các thư mục nhà của người dùng được đặt ban đầu. Đó là, nếu bạn đã đăng nhập vào hộp System III cũ, thư mục làm việc ban đầu của bạn sẽ /usr/nzwulfintheo mặc định. Một kế hoạch phổ biến khác. trước khi /homekế hoạch SVR4 tiếp quản, là /u. Một hệ thống tôi sử dụng sớm có rất nhiều người dùng, họ cần nhiều đĩa vật lý để lưu trữ tệp người dùng, vì vậy họ có những thứ như thế /u/d5/tangent.
Warren Young

3
@Warren Tôi cũng chưa từng nghe và chọc quanh Google một lúc; có vẻ như có khá nhiều từ viết tắt
Michael Mrozek

4

/usr/local/bin là vị trí mặc định phổ biến nhất cho các tệp thực thi, đặc biệt là các tệp nguồn mở.

Tuy nhiên, đây có thể là một lựa chọn kém vì trên các hệ thống Unix, /usrđã được chuẩn hóa vào đầu những năm 1990 để chứa một hệ thống phân cấp các tệp thuộc hệ điều hành và do đó có thể được chia sẻ bởi nhiều hệ thống sử dụng HĐH đó.

Vì các tệp này là tĩnh, /usrhệ thống tệp có thể được gắn ở chế độ chỉ đọc. /usr/localđang đánh bại tiêu chuẩn này vì nó được thiết kế cục bộ do đó không được chia sẻ, do đó cần phải đọc-ghi để cho phép biên dịch cục bộ và không phải là một phần của hệ điều hành. Quá tệ một cái gì đó như /opt/localkhông được chọn thay thế ...


1

Tôi khuyên bạn nên sử dụng /usr/localcho các chương trình thương mại mà bạn có thể cài đặt, chẳng hạn như Mathicala. Đặt nó trong phân vùng riêng của nó khi bạn thiết lập. Khi bạn nâng cấp HĐH, phân vùng này sẽ không bị xáo trộn và bạn sẽ không phải cài đặt lại nội dung của nó. Vì vậy, sử dụng nó cho những thứ bạn muốn giữ giữa các nâng cấp hệ điều hành.

Một cách riêng biệt, hãy chắc chắn rằng bạn cung cấp /homephân vùng riêng của nó vì lý do này quá.


0

Câu trả lời này cũng có thể hữu ích.

/ usr / địa phương

Ý tưởng ban đầu đằng sau /usr/locallà có một thư mục riêng ('cục bộ') '/ usr' trên mỗi máy bên cạnh /usr, có thể chỉ được gắn ở chế độ chỉ đọc từ một nơi khác. Nó sao chép cấu trúc của /usr.

Ngày nay, /usr/localđược coi là một nơi tốt để giữ các chương trình tự biên dịch hoặc bên thứ ba. Hệ /usr/localthống phân cấp được sử dụng bởi quản trị viên hệ thống khi cài đặt phần mềm cục bộ. Nó cần được an toàn để không bị ghi đè khi phần mềm hệ thống được cập nhật.

Nó có thể được sử dụng cho các chương trình và dữ liệu được chia sẻ giữa một nhóm các máy chủ, nhưng không tìm thấy trong /usr. Phần mềm được cài đặt cục bộ phải được đặt bên trong /usr/localthay vì /usrtrừ khi nó được cài đặt để thay thế hoặc nâng cấp phần mềm /usr.

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.