it-swarm-vi.com

/ Usr / local / bin là gì?

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 lệnh touch. 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 chmod 755 tập tin để thực hiện nó sau đó.

Tôi muốn biết những gì /usr/local/bin là, mặc dù. /usr/, Tôi giả sử, là người dùng máy tính. Tôi cung không chăc tại sao /local/ vẫn còn đó. 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 tốt?

Và cái gì /bin? 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?

93
JFW

/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.

  • Các /usr/local 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 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 trong /usr/local thay vì/usr trừ khi nó được cài đặt để thay thế hoặc nâng cấp phần mềm trong /usr.

Nguồn này giúp giải thích tiêu chuẩn phân cấp hệ thống tệp ở cấp độ 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 cũng thú vị.

82
iamsid

/ 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à "the users," số nhiều.

Trước khi AT & T Unix Bản phát hành hệ thống V 4 (SVR4) xuất hiện 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 trong /home, Vị trí thông thường là /usr .¹ Thư mục $HOME Của bạn có thể đã là /usr/jfw Trên hộp System III .

/usr Cũng có, sau đó, /usr/bin, /usr/lib, V.v ... Kinh nghiệm cho thấy việc tách biệt các thư mục nhà là cách thực hành quản lý hệ thống tốt, vì vậy với /home thay đổi chính sách trong SVR4, nó đã bỏ lại mọi thứ mà chúng ta nghĩ bây giờ là thuộc về /usr.

/usr Vẫ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 thiết 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à user - các phần tập trung của HĐH. Điều này có nghĩa là /usr Có 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 bằng máy giặt .

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

Một số hương vị Unix hiện đã bỏ qua nguyên tắc thiết kế cũ này vì ngay cả các hệ thống nhúng nhỏ cũng có đủ chỗ cho cả tệp âm lượng gốc truyền thống tất cả /usr Trên một ổ đĩa. Red Hat Enterprise Linux, Solaris và Cygwin symlink /bin Đến /usr/bin/lib Đến /usr/lib Để không còn bất kỳ sự khác biệt nào 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 trong /usr/local Được cho là dành riêng 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 /usr Qua 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 riêng. Các tệp cụ thể cho một hộp sẽ nằm trong /usr/local, Đó sẽ là một khối 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 vào /usr/local Khi được 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, giả sử, bash từ mã nguồn GNU Bash . Họ sử dụng / Làm tiền tố cài đặt, ghi đè mặc định /usr/local, Để Bash kết thúc bằng /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ọ thành /usr/X11R6, Để tách biệt nó khỏi dòng lệnh truyền thống và curses - phần mềm dựa trên. Điều này được thực hiện đơn giản bằng cách ghi đè tiền tố /usr/local Mặc định bằng /usr/X11R6.

Và/thùng 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à 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.")

Các tệp văn bản trên hộp Unix sống ở nơi khác: /etc, /usr/include, /usr/share, V.v.

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 thư mục bin, nhưng dòng này cũng bị mờ. Ngày nay, các thư mục bin thường chứa bất kỳ loại tệp thực thi nào, cho dù có đúng 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à lược đồ HOME=/usr/$NAME 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 " AT & T Unix System V Release 3.2 Hướng dẫn của quản trị viên hệ thống : ở đây bạn thấy AT & T đề xuất lược đồ /usr/$NAME Cũ trong phiên bản chính cuối cùng của Unix trước khi SVR4 ra đời.

    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 lược đồ tôi đã tìm thấy trước khi /home/$NAME Trở thành tiêu chuẩn là /u/$NAME.

    Một hệ thống khác 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/$NAME, V.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ó không gian 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 và giữ Cmd-S Trong khi nó 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 dưới 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 dưới dạng root.

    Nhập "thoát" tại thư mục gốc người dùng một lần Nhắc để thoát khỏi chế độ người dùng đơn và tiếp tục khởi động vào chế độ GUI đa người dùng.

  3. Các hệ điều hành Unix vẫn còn xuất hiện để giữ các tệp chế độ một người dùng quan trọng ra khỏi /usr Trên thự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 di chuyển /usr Sang âm lượng 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 trong /usr Để gắn /usr!

    Điều đó là đủ tồi tệ, nhưng nếu FreeBSD 9 vẫn còn giữ công cụ khởi động một người dùng của nó ngoài /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 với /usr Khô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, các tệp văn bản: trang man, từ điển, v.v.

  5. "X11R6" đã đề cập đến phiên bản của Hệ thống cửa sổ X củng cố 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 trong /etc Để tránh làm hỏng chúng với các nhị phân thực trong /bin.

66
Warren Young

/usr/local/bin hiển thị nguồn 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. Hiện nay, /usr/bin sẽ dành cho các chương trình và thư viện "chính" hoặc cốt lõi trong đó /usr/local/bin sẽ dành cho các chương trình và thư viện bổ trợ và không quan trọng.

10
nzwulfin

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ừ Shell địa phương của bạn để xem cách nó hoạt động.

9
Tok

/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, nên /usr hệ thống tập tin có thể được gắn 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/local không được chọn thay thế ...

4
jlliagre

Tôi khuyên bạn nên sử dụng /usr/local cho các chương trình thương mại mà bạn có thể cài đặt, chẳng hạn như Mathematica. Đặ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, đảm bảo bạn cung cấp /home phân vùng riêng của nó vì lý do này quá.

1
ncmathsadist

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/local là để có một thư mục ('cục bộ') '/ usr' riêng biệt trên mỗi máy bên cạnh /usr, có thể chỉ được gắn chỉ đọc từ một nơi khác. Nó sao chép cấu trúc của /usr.

Những ngày này, /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. Các /usr/local 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 máy chủ lưu trữ, 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 trong /usr/local chứ không phải /usr trừ khi nó đang được cài đặt để thay thế hoặc nâng cấp phần mềm trong /usr.

1
Vishwanath gowda k