Trường hợp thực thi địa phương nên được đặt ở đâu?


62

Tôi có một tệp thực thi cho máy khách kiểm soát phiên bản perforce ( p4). Tôi không thể đặt nó vào /opt/localvì tôi không có quyền root. Có một vị trí tiêu chuẩn mà nó cần phải được đặt dưới $HOME?

Hệ thống phân cấp tệp có một quy ước nói rằng các tệp thực thi / nhị phân cục bộ cần được đặt trong $HOME/binkhông?

Tôi không thể tìm thấy một quy ước như vậy được đề cập trên bài viết Wikipedia cho FHS .

Ngoài ra, nếu thực sự có một quy ước, tôi có phải bao gồm rõ ràng đường dẫn đến $HOME/binthư mục hoặc bất kỳ vị trí của binthư mục là gì không?

Câu trả lời:


64

Nói chung, nếu một nhị phân không được cài đặt và bảo trì hệ thống cần có thể truy cập được trên toàn hệ thống cho nhiều người dùng, thì nó phải được quản trị viên đặt vào /usr/local/bin. Có một hệ thống phân cấp hoàn chỉnh theo /usr/localđó thường được sử dụng cho các gói phần mềm được biên dịch và cài đặt cục bộ.

Nếu bạn là người dùng nhị phân duy nhất, cài đặt vào $HOME/binlà vị trí thích hợp vì bạn có thể tự cài đặt nó và bạn sẽ là người tiêu dùng duy nhất. Nếu bạn biên dịch gói phần mềm từ nguồn, thì cũng phù hợp để tạo phân cấp cục bộ một phần hoặc toàn bộ trong $HOMEthư mục của bạn . Hệ thống phân cấp địa phương đầy đủ sẽ trông như thế này.

  • $HOME/bin Nhị phân địa phương
  • $HOME/etc Cấu hình hệ thống dành riêng cho máy chủ cho các tệp nhị phân cục bộ
  • $HOME/games Nhị phân trò chơi địa phương
  • $HOME/include Tệp tiêu đề C cục bộ
  • $HOME/lib Thư viện địa phương
  • $HOME/lib64 Thư viện 64 bit cục bộ
  • $HOME/man Hướng dẫn sử dụng trực tuyến địa phương
  • $HOME/sbin Hệ thống nhị phân
  • $HOME/share Phân cấp độc lập kiến ​​trúc địa phương
  • $HOME/src Mã nguồn địa phương

Khi chạy configure, bạn nên xác định phân cấp cục bộ để cài đặt bằng cách chỉ định $HOMElàm tiền tố cho cài đặt mặc định.

./configure --prefix=$HOME

Bây giờ khi make && make installđược chạy, các tệp nhị phân, gói, trang man và thư viện đã biên dịch sẽ được cài đặt vào $HOMEhệ thống phân cấp cục bộ của bạn . Nếu bạn chưa tự tạo một $HOMEhệ thống phân cấp cục bộ, make installsẽ tạo các thư mục cần thiết cho gói phần mềm.

Sau khi cài đặt $HOME/bin, bạn có thể thêm $HOME/binvào $PATHhoặc gọi nhị phân bằng cách sử dụng tuyệt đối $PATH. Một số bản phân phối sẽ bao gồm $HOME/binvào của bạn $PATHtheo mặc định. Bạn có thể kiểm tra điều này bằng cách echo $PATHxem và xem $HOME/bincó ở đó không, hoặc đặt nhị phân vào $HOME/binvà thực thi which binaryname. Nếu nó trở lại với $HOME/bin/binaryname, thì nó nằm trong $ PATH của bạn theo mặc định.


5
miễn là $ HOME không nằm trong hệ thống tập tin gắn kết noexec. / tmp / thường được gắn noexec.
ewanm89

3
Điều này là chính xác, một phần của Tiêu chuẩn phân cấp hệ thống tập tin (FHS). pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Patrick

29
Tôi không khuyên bạn nên sử dụng $HOME. Điều này làm ngập thư mục nhà của bạn với nhiều thư mục mà bạn không quan tâm chút nào. Ai muốn có man, libvv trong dir nhà người thân? Tôi thà tạo ra thứ bậc dưới đây $HOME/binhoặc $HOME/local. Điều đó chỉ thêm một thư mục con vào thư mục nhà của bạn, thay vì mười. Có PATHthể dễ dàng được điều chỉnh để bao gồm $HOME/bin/binhoặc $HOME/local/bin.
Marco

18
Một lựa chọn là sử dụng $ HOME / .local / {bin, lib, vv.}, Như được sử dụng bởi các ví dụ XDG basedir spec ( standards.freedesktop.org/basedir-spec/basedir-spec-latest.html ) và trăn ( python.org/dev/peps/pep-0370 )
janneb

4
@janneb Đặc tả thư mục cơ sở XDG mà bạn chỉ đề cập đến $HOME/.local/share(Phiên bản 0.7, ngày 24 tháng 11 năm 2010).
Piotr Dobrogost

27

Như đã đề cập , /usr/localđược dùng như một tiền tố cho, về cơ bản, phần mềm được cài đặt bởi quản trị viên hệ thống, trong khi /usrnên được sử dụng cho phần mềm được cài đặt từ các gói của bản phân phối.

Ý tưởng đằng sau điều này là để tránh xung đột với phần mềm phân tán (như gói rpmdebgói) và cung cấp cho quản trị viên toàn quyền cai trị tiền tố "cục bộ".

Điều này có nghĩa là quản trị viên có thể cài đặt phần mềm biên dịch tùy chỉnh trong khi vẫn sử dụng bản phân phối như debian.

Từ FHS

Phần mềm được đặt trong / hoặc / usr có thể được ghi đè bằng nâng cấp hệ thống (mặc dù chúng tôi khuyên rằng các bản phân phối không ghi đè lên dữ liệu trong / etc trong những trường hợp này). Vì lý do này, phần mềm cục bộ không được đặt bên ngoài / usr / local mà không có lý do chính đáng.

Khi cài đặt phần mềm dành riêng cho người dùng, uther gợi ý sử dụng $HOMElàm tiền tố vì điều này đảm bảo bạn có quyền ghi. Cá nhân, tôi cảm thấy sử dụng $HOME/.localđể trở thành một giải pháp thanh lịch hơn, vì nó tránh làm lộn xộn thư mục nhà đẹp (hy vọng) của bạn!

$HOME/.local/shaređã được sử dụng trong đặc tả thư mục cơ sở XDG của freedesktop.org , do đó, sẽ không mất nhiều thời gian để hình dung thêm một $HOME/.local/binvào $PATHvà tạo một $HOME/.local/lib, v.v., trong khi bạn đang ở đó.

Nếu bạn không thực sự muốn tiền tố của mình là một thư mục ẩn, bạn cũng có thể dễ dàng tạo một liên kết tượng trưng cho nó, ví dụ:

ln -s .local ~/local

Sidenote

Điều đáng chú ý là .config(không .local/etc) là giá trị mặc định $XDG_CONFIG_HOMEđược sử dụng cho các tệp cấu hình cụ thể của người dùng. Tôi cũng nên chỉ ra rằng, thật không may, một phần lớn phần mềm bỏ qua XDG và tạo các tệp cấu hình bất cứ nơi nào họ muốn (thường là trong thư mục gốc của $HOME). Cũng lưu ý rằng $XDG_CONFIG_HOMEcó thể không được đặt nếu mặc định $HOME/.configlà mong muốn.

Điều kỳ lạ là không có thư mục dành riêng cho các tệp cấu hình mặc định của bản phân phối, vì vậy không có cách nào để biết liệu một tệp /etcđược cung cấp bởi bản phân phối hay được quản trị viên hệ thống chỉnh sửa.


1
Tôi không thể tìm thấy bất kỳ đề cập nào .localtrong FHS
Daniel Serodio

@DanielSerodio Đó là trong đặc tả thư mục XDG, một tiêu chuẩn mới hơn mà nó đạt được sự nổi bật. Xem unix.stackexchange.com/questions/316765/...superuser.com/questions/1170793/...
ivan_pozdeev

Điều lưu ý phụ đó /etcthực sự rất khó chịu khi quản lý một máy chủ có nhiều quản trị viên - thật khó để theo dõi các chỉnh sửa tùy chỉnh đối với các tệp conf.
hư vô
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.