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


24

Tôi đang phát triển một trình nền cần lưu trữ nhiều dữ liệu ứng dụng và tôi nhận thấy rằng trên hệ thống của mình (Fedora 15), có một /usr/local/etcthư mục.

Tôi đã quyết định cài đặt trình nền của mình /usr/local/binvà tôi cần một vị trí cho các tệp cấu hình của mình.

Tôi đã không thấy điều này trên Wikipedia . Đây có phải là không chuẩn hay trên thực tế đây là nơi tiêu chuẩn cho các chương trình được cài đặt /usr/local/binđể lưu trữ tệp cấu hình?

Lý do là, tôi muốn tiếp thị nó cho các quản trị viên và nhận được một cái gì đó sai như thế này không phải là một điểm bán hàng tuyệt vời ...


2
Bất kỳ lý do không để đặt nó trực tiếp dưới /etc/myapp? Nếu tôi đang tìm cách thay đổi một cấu hình, đó sẽ là nơi đầu tiên tôi sẽ tìm.
new123456

@ new123456- Cá nhân tôi thích ý tưởng giữ các tệp cấu hình gần với tệp nhị phân (ví dụ /usr/local/bin-> /usr/local/etc), nhưng các quy ước sẽ thắng trong trường hợp này.
beatgammit

Câu trả lời:


24

/usr/localthường dành cho các ứng dụng được xây dựng từ nguồn. tức là tôi cài đặt hầu hết các gói của mình bằng cách sử dụng một cái gì đó như apt, nhưng nếu tôi tải xuống phiên bản mới hơn của một thứ gì đó hoặc một phần mềm không phải là một phần của bản phân phối của mình, tôi sẽ xây dựng nó từ nguồn và đưa mọi thứ vào hệ thống phân cấp `/ usr / local '.

Điều này cho phép tách khỏi phần còn lại của phân phối.

Nếu bạn đang phát triển một phần mềm cho người khác, bạn nên thiết kế nó để nó có thể được cài đặt bất cứ nơi nào người ta muốn, nhưng nó phải mặc định là thường xuyên đảm bảo VSATTP theo quy định thư mục hệ thống khi chúng xác định rõ tiền tố là /usr( /etc, /usr/bin, vv)

tức /usr/locallà để sử dụng cá nhân của bạn, nó không phải là nơi duy nhất để cài đặt phần mềm của bạn.

Đọc kỹ FHS và sử dụng các công cụ Linux tiêu chuẩn để cho phép nguồn của bạn được xây dựng và cài đặt ở bất cứ đâu để các nhà xây dựng gói cho các bản phân phối khác nhau có thể định cấu hình chúng theo yêu cầu cho bản phân phối của họ và người dùng có thể đặt nó vào /usr/local nếu họ muốn hoặc các thư mục hệ thống thông thường nếu họ muốn.


Vâng, tôi cho phép tùy chỉnh là tốt, nhưng tôi đã tự hỏi nếu /usr/local/etclà tiêu chuẩn cho các tập tin cấu hình cho các loại chương trình.
beatgammit

/ usr / local / etc là thứ tôi có thể chọn nếu tôi xây dựng trình nền của bạn từ nguồn, nhưng / etc là nơi ai đó sẽ chọn nếu họ đóng gói trình nền của bạn bằng debian hoặc Ubuntu.
EightBitTony

4
Trên thực tế, các tiêu chuẩn GNU gọi gói để mặc định cho đường dẫn cục bộ do mọi người xây dựng nó từ nguồn thường không xác định vị trí. Phân phối sẽ thay đổi nó thành đường dẫn không cục bộ khi họ đóng gói / xây dựng nó.
psusi

@ psusi- Điểm tốt, tôi sẽ đảm bảo đặt mặc định đó. Có lẽ tôi sẽ phát hiện khi cài đặt của tôi chạy dưới dạng root hoặc người dùng thông thường. Nếu root, tôi sẽ mặc định là / usr / local, nếu là người dùng, vào thư mục chính của người dùng. Tôi cũng sẽ thêm cài đặt cấu hình.
beatgammit

@ EightBitTony- Có nền tảng nào khác có các quy ước khác nhau không? Tôi đã tạo các tập lệnh khởi động khác nhau cho các nền tảng khác nhau (mới bắt đầu, systemd, init).
beatgammit

7

Một câu trả lời rất ngắn

/ etc được HĐH của bạn sử dụng cho các tệp cấu hình của nó

/ usr / local / etc có thể được sử dụng cho các tệp cấu hình của bạn và phần mềm cài đặt bổ sung của bạn


4

/usr/local/etchiếm khi được sử dụng trong thế giới Linux. Nhưng quyết định xem có nên lưu trữ các file cấu hình trong /etc, /usr/local/etchoặc một số vị trí khác thường thực hiện tại thời gian biên dịch (và thường có thể ghi đè thông qua một tùy chọn dòng lệnh hoặc biến môi trường). Nó không thực sự quan trọng mặc định là gì khi biên dịch, chỉ cần đảm bảo rằng nó dễ cài đặt (thường là một tùy chọn --sysconfdir, theo autoconf). Nếu trình nền của bạn được đóng gói để phân phối, thì tệp thực thi sẽ đi vào /usr/sbin(mặc định khi xây dựng từ nguồn nên /usr/local/sbin) và cấu hình bên dưới /etc.

Lưu ý rằng đó /etckhông phải là nơi dành cho rất nhiều dữ liệu ứng dụng. Điều đó đi vào /var. Mặc định khi xây dựng từ nguồn có thể /var/local/mydaemonhoặc /var/lib/mydaemon; một lần nữa, không có quy ước mạnh nào cho mặc định khi xây dựng từ nguồn. Cần có một cách để thay đổi cả mặc định thời gian biên dịch (thường là với configure --localstatedir) và mặc định thời gian chạy (với một cài đặt trong tệp cấu hình, có thể bằng tùy chọn dòng lệnh hoặc biến môi trường).


Có một lý do tại sao /usr/local/etckhông được sử dụng rất thường xuyên? Tôi thích ý tưởng giữ các tệp cấu hình ở cùng cấp của hệ thống tệp như nhị phân.
beatgammit

1
@tjameson Tôi không biết có lý do phổ biến không. BSD làm theo cách đó. Là một admin, tôi như thế tất cả các file cấu hình (mà phải được sao lưu và thay đổi kiểm soát, không giống như các công cụ trong binlibvv mà có thể được cài đặt lại) sống trong cùng một vị trí.
Gilles 'SO- ngừng trở nên xấu xa'

1

Là người dùng Arch, tôi sẽ tránh / usr / local allether và chỉ sử dụng / etc để cấu hình. Khi cài đặt từ nguồn, tôi muốn viết một tệp PKGBUILD nhỏ trong khi tôi đang ở đó và có thể tải nó lên Kho lưu trữ người dùng Arch (AUR), cho cả người khác và bản thân tôi trên một máy tính khác trong tương lai. Đánh giá theo số lượng gói trong AUR và tốc độ chúng được tạo ra, tôi không đơn độc khi nghĩ theo cách này. Điều này làm tăng cơ hội cho mọi người rằng một gói sẽ có sẵn thay vì phải cài đặt nó từ nguồn và có thể tránh các vị trí lỗi thời như / usr / local.

Debian dường như cũng thích ý tưởng xây dựng một gói nguồn thay vì cài đặt bất cứ thứ gì vào / usr / local, do đó các tiện ích như checkinstall .

Tạo một gói nguồn bạn muốn cài đặt sẽ là một cách tốt để theo dõi vị trí của các tệp và đảm bảo không một số trong số chúng bị ghi đè một cách không nhất quán bởi gói khác hoặc "cài đặt" khác. Gỡ cài đặt bằng "thực hiện gỡ cài đặt" không phải là một giải pháp tốt. Thông tin về phiên bản nào được cài đặt là một điều khác mà các nhà quản lý gói hiện đại rất giỏi trong việc theo dõi.

Tôi sẽ chỉ forego / usr / địa phương hoàn toàn. Đây không phải là nơi tốt để đặt bất cứ thứ gì, không phải để cài đặt các gói (các thư mục toàn hệ thống phù hợp hơn) và không dành cho người dùng.

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.