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


230

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

Tổng quát hơn, .dhậu tố có ý nghĩa gì đối với một thư mục?

Câu trả lời:


229

/etc/init.dchứa các tập lệnh được sử dụng bởi các công cụ khởi động System V (SysVinit). Đây là gói quản lý dịch vụ truyền thống dành cho Linux, chứa initchương trình (quy trình đầu tiên được chạy khi kernel đã khởi tạo xong) cũng như một số cơ sở hạ tầng để khởi động và dừng dịch vụ và định cấu hình chúng. Cụ thể, tập tin trong /etc/init.dnhững kịch bản shell mà đáp ứng start, stop, restart, và (khi được hỗ trợ) reloadlệnh để quản lý một dịch vụ cụ thể. Các tập lệnh này có thể được gọi trực tiếp hoặc (phổ biến nhất) thông qua một số trình kích hoạt 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/initchứa các tệp cấu hình được sử dụng bởi Upstart. Upstart là gói quản lý dịch vụ trẻ do Ubuntu vô địch. Các file trong đề /etc/initlà các tập tin cấu hình nói Upstart như thế nào và khi nào thì start, stop, reloadcấu hình, hoặc truy vấn statuscủa một dịch vụ. Về phần sáng suốt, Ubuntu đang chuyển đổi 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 tập lệnh SysVinit mặc dù các tệp cấu hình Upstart được ưa thích. Trong thực tế, các tập lệnh SysVinit được xử lý bởi một lớp tương thích trong Upstart.

.dtrong 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.dchứa các tệp được nối để tạo ảo sources.list; /etc/network/if-up.dchứa các tập lệnh được thực thi khi mạng i nter f ace đượ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, để mỗi gói có thể ký gửi trình cắm riêng mà không phải phân tích một tệp cấu hình duy nhất để tham chiếu chính nó. Trong trường hợp này, điều đó xảy ra rằng, init init, là một tên logic cho thư mục, SysVinit xuất hiện đầu tiên và được sử dụng init.dvà Upstart đã sử dụng đơn giảninitcho một thư mục có mục đích tương tự (nó sẽ có nhiều dòng chính hơn, và có lẽ ít kiêu ngạo hơn, nếu chúng được sử dụng /etc/upstart.dthay thế).

¹ không đếm initrd


28
Ghi chú lịch sử bí truyền: các .dthư mục được nhập với Hệ thống V. Đó là một ký hiệu khó hiểu và cuối cùng có lẽ là ý tưởng của một người đã xâm nhập vào cơ sở mã hóa và không thể rời đi. Ví dụ: nếu bạn nghĩ rằng đó catlà một tên xấu cho nhiệm vụ mà nó thực hiện, hãy tưởng tượng có bao nhiêu tệp trên toàn hệ thống bạn phải chạm để thay đổi nó.
msw

Trên các hệ thống, có cả hai thư mục, Upstart và SysVinit được sử dụng? Có cách nào để kiểm tra không?
asheeshr

3
@AsheeshR Kiểm tra xem có một gói được gọi là upstarthay không sysvinit. Và trong các phiên bản gần đây, nó cũng có thể systemdnhư vậy (vốn không tồn tại cho Ubuntu khi tôi viết câu trả lời của mình). Đó là gói nào cung cấp /sbin/init( dpkg -S /sbin/init).
Gilles

Trên phiên bản AWS Ubuntu tôi đang sử dụng (từ Bitnami), đó là upstartgói cung cấp / sbin / init (đã chạy dpkg -S /sbin/init). Nhưng Bitnami đã đặt tập lệnh của nó trong thư mục /etc/init.d. Đây không phải là mâu thuẫn với câu trả lời của bạn cho @AsheeshR ở trên sao? Cảm ơn bạn.
Sabuncu

@Sabuncu Đây là một ví dụ về các tập lệnh SysVinit được xử lý bởi một lớp tương thích trong Upstart.
Gilles

29

".D" thường được gắn vào tên thư mục để chỉ ra rằng những gì đã từng (hoặc những gì có thể đã được xử lý) bởi một tập lệnh 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 hiện, cùng nhau.

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

Trong trường hợp điều quan trọng là chúng nên được bao gồm / thực hiện theo thứ tự nào, 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 thực hiện theo đúng thứ tự.

Trong trường hợp của /etc/init.d/nó, nó chỉ ra rằng các tập lệnh trong "init.d" nên được thực thi. Tuy nhiên, ngày nay, hệ thống init của các 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 đó.


Có lẽ .dphương tiện liên quan đến quá trình 'deamon' thường được bắt đầu vào lúc khởi động.

21
.d chắc chắn là cho thư mục, không phải daemon.
Martin

13

Như bạn chỉ ra, danh pháp ".d" rất khó hiểu và lạ, và thực sự không có chỗ 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ó xu hướng bỏ nó.

Lý do thư mục là /etc/initvà không phải /etc/upstartvì Upstart là tên dự án, nhị phân được cài đặt thực tế vẫn còn /sbin/initdo đó cấu hình của nó có tên không khớp với nhị phân.


7
Điều này là sai, xem vd udev's rules.d, Xorg's gần đây xorg.conf.d, không quá cũ, /etc/profile.dv.v.
Ruslan
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.