Câu hỏi Sự khác nhau giữa / etc / init / và /etc/init.d/ là gì?


Sự khác biệt giữa /etc/init/ và /etc/init.d/?

Nói chung, ý nghĩa của .d hậu tố chuyển tải đến một thư mục?


217
2017-10-01 22:59


gốc




Các câu trả lời:


/etc/init.d chứa các tập lệnh được sử dụng bởi các công cụ init System V (SysVinit). Đây là gói quản lý dịch vụ truyền thống cho Linux, chứa init chương trình (quá trình đầu tiên được chạy khi hạt nhân đã khởi tạo xong) cũng như một số cơ sở hạ tầng để bắt đầu và dừng dịch vụ và định cấu hình chúng. Cụ thể, các tệp trong /etc/init.d là các tập lệnh shell trả lời start, stop, restartvà (khi được hỗ trợ) reload lệnh để quản lý một dịch vụ cụ thể. Các script này có thể được gọi trực tiếp hoặc (phổ biến nhất) thông qua một số trigger khác (thường là sự hiện diện của một liên kết tượng trưng trong /etc/rc?.d/).

/etc/init chứa các tệp cấu hình được Upstart sử dụng. Upstart là một gói quản lý dịch vụ trẻ được hỗ trợ bởi Ubuntu. Các tệp trong /etc/init là các tệp cấu hình cho Upstart cách thức và thời điểm start, stop, reload cấu hình hoặc truy vấn status của một dịch vụ. Tính rõ ràng, Ubuntu đang chuyển từ SysVinit sang Upstart, điều này giải thích tại sao nhiều dịch vụ đi kèm với các kịch bản SysVinit mặc dù các tập tin cấu hình Upstart được ưa thích hơn. Trong thực tế, các kịch bản SysVinit được xử lý bởi một lớp tương thích trong Upstart.

.d trong các tên thư mục thường chỉ ra một thư mục chứa nhiều tệp cấu hình hoặc tập lệnh cho một tình huống cụ thể (ví dụ: /etc/apt/sources.list.d chứa các tệp được ghép nối để tạo ảo sources.list; /etc/network/if-up.d chứa các tập lệnh được thực thi khi một mạng tôinterface được kích hoạt). Cấu trúc này thường được sử dụng khi mỗi mục trong thư mục được cung cấp bởi một nguồn khác nhau, sao cho mỗi gói có thể gửi trình cắm thêm của riêng mình mà không phải phân tích cú pháp một tệp cấu hình để tự tham chiếu. Trong trường hợp này, nó chỉ xảy ra rằng "init" là một tên hợp lý cho thư mục, SysVinit đến trước và được sử dụng init.d, và Upstart được sử dụng đồng bằng init cho một thư mục với một mục đích tương tự (nó sẽ có nhiều "chủ đạo" hơn, và có lẽ ít kiêu ngạo hơn, nếu họ đã sử dụng /etc/upstart.d thay thế).

¹ không tính initrd


217
2017-10-01 23:28



ghi chú lịch sử bí truyền: .d các thư mục được nhập với System V. Đó là một ký hiệu khó hiểu và cuối cùng có lẽ ý tưởng của một người đã xâm nhập vào codebase và không thể rời đi. Ví dụ, nếu bạn nghĩ rằng cat là một tên xấu cho tác vụ mà nó thực hiện, hãy tưởng tượng có bao nhiêu tệp trong toàn bộ hệ thống mà bạn phải chạm để thay đổi nó. - msw
Trên các hệ thống, có cả hai thư mục, trong đó Upstart và SysVinit được sử dụng? Có cách nào để kiểm tra không? - asheeshr
@AsheeshR Kiểm tra xem có một gói được gọi là upstart hoặc là sysvinit. Và trong các phiên bản gần đây, nó có thể systemd (cũng không tồn tại đối với Ubuntu khi tôi viết câu trả lời của mình). Đó là bất kỳ gói nào cung cấp /sbin/init (dpkg -S /sbin/init). - Gilles
Trên ví dụ AWS Ubuntu tôi đang sử dụng (từ Bitnami), đó là upstart gói cung cấp / sbin / init (chạy dpkg -S /sbin/init). Nhưng Bitnami đã đặt kịch bản của nó trong thư mục /etc/init.d. Không phải điều này mâu thuẫn với câu trả lời của bạn cho @AsheeshR ở trên? Cảm ơn bạn. - Sabuncu
@Sabuncu Đây là một ví dụ về "SysVinit script được xử lý bởi một lớp tương thích trong Upstart". - Gilles


Chữ ".d" thường được thêm vào tên thư mục để chỉ ra rằng những gì từng được sử dụng bởi một tập lệnh duy nhất hoặc một tệp cấu hình duy nhất đã được chia thành nhiều tệp để thuận tiện, nhưng nên được bao gồm, hoặc thực thi, cùng nhau.

Ví dụ, /etc/apache/conf.d/ hoặc là /etc/apt/sources.d/

Trong trường hợp cần phải bao gồm / thực hiện thứ tự quan trọng, các tệp trong các thư mục này đôi khi bắt đầu bằng một số, như "00-default" hoặc "80-user" để chúng hoạt động theo đúng thứ tự.

Trong trường hợp /etc/init.d/ nó chỉ ra rằng các script trong "init.d" nên được thực thi. Ngày nay, tuy nhiên, hệ thống init của hệ điều hành hiện đại có liên quan nhiều hơn thế, nhưng tên thư mục vẫn còn đó.


26
2018-05-10 02:51



Có thể là .d có nghĩa là nó liên quan đến quá trình 'deamon' thường được bắt đầu vào lúc khởi động.
.d là chắc chắn cho thư mục, không phải daemon. - Martin


Như bạn đã chỉ ra, danh mục ".d" là khó hiểu và kỳ lạ, và không thực sự có bất kỳ vị trí nào trong bất kỳ hệ thống hiện đại nào - bạn sẽ nhận thấy rằng hầu hết các dịch vụ hiện đại đều có khuynh hướng thả nó.

Lý do thư mục là /etc/init và không /etc/upstart là vì Upstart là tên dự án, nhị phân được cài đặt thực tế vẫn là /sbin/init do đó nó sẽ không có ý nghĩa đối với cấu hình của nó để có một cái tên không khớp với nhị phân.


12
2017-10-13 01:59



Điều này là sai, xem ví dụ udev's rules.d, Xorg tương đối gần đây xorg.conf.d, không quá già /etc/profile.d v.v. - Ruslan