Có gì liên quan giữa các thư mục /etc/init.dvà và các tập tin /etc/rcX.d trên Linux?


25

Tôi đang học dòng lệnh từ một cuốn sách có tên " Dòng lệnh Linux và Kinh thánh Shell Scripting, Ấn bản thứ hai ". Cuốn sách nói rằng:

Một số triển khai Linux chứa một bảng các quy trình để tự động khởi động khi khởi động. Trên các hệ thống Linux, bảng này thường nằm trong tệp / etc / inittabs đặc biệt.

Các hệ thống khác (như bản phân phối Ubuntu Linux phổ biến) sử dụng thư mục /etc/init.d, chứa các tập lệnh để khởi động và dừng các ứng dụng riêng lẻ khi khởi động. Các tập lệnh được bắt đầu thông qua các mục trong thư mục /etc/rcX.d, trong đó X là mức chạy.

Có lẽ bởi vì tôi chưa quen với linux, tôi không hiểu đoạn thứ hai được trích dẫn nghĩa là gì. Ai đó có thể giải thích tương tự trong một ngôn ngữ đơn giản hơn nhiều?


điều này đã được hỏi nhiều lần trước đây
bsd

@bdowning Cái này khác. Tôi có một bối cảnh. Các câu hỏi tôi thấy trong trang bạn liên kết khác với điều này, IMO.
it_me

@bdowning off, nhưng cờ là trùng lặp sẽ có nhiều thông tin hơn nếu bạn cảm thấy như vậy
n611x007 21/07/2015

Câu trả lời:


30

Hãy quên init.dhoặc rcx.dgiữ mọi thứ rất đơn giản. Hãy tưởng tượng bạn đang lập trình một chương trình với trách nhiệm duy nhất là chạy hoặc giết từng tập lệnh khác.

Tuy nhiên, vấn đề tiếp theo của bạn là đảm bảo chúng chạy theo thứ tự. Làm thế nào bạn sẽ thực hiện điều đó?

Và hãy tưởng tượng chương trình này nhìn vào bên trong một scriptsthư mục để chạy các tập lệnh. Để sắp xếp thứ tự ưu tiên của tập lệnh, bạn sẽ đặt tên cho chúng theo thứ tự số. Thứ tự này là những gì chỉ ra mối quan hệ giữa init.drc

Nói cách khác, init.dchứa các kịch bản lệnh để chạy và lệnh rcX.dchứa lệnh của chúng sẽ chạy.

Các Xgiá trị trong rcX.d là mức chạy. Điều này có thể được dịch lỏng sang trạng thái hiện tại của hệ điều hành.

Nếu bạn đào bên trong các rcX.dtập lệnh, bạn sẽ tìm thấy định dạng này:

Xxxabcd
  • Xđược thay thế bằng Khoặc S, viết tắt cho việc tập lệnh nên killedhay startedở mức chạy hiện tại
  • xx là số thứ tự
  • abcd là tên tập lệnh (tên không liên quan, tuy nhiên điểm của nó là tập lệnh này sẽ chạy)

2
giải thích tuyệt vời, rất rõ ràng. Cảm ơn @whoami
its_me

9

Có một số hệ thống init khác nhau cho Linux. Những cái chính là SysVinit (loại truyền thống), Upstart (thay thế Ubuntu) và SystemD (được đẩy bởi Fedora và Gnome). Các thư mục /etc/init.d/etc/rc?.dđược sử dụng bởi SysVinit. Cuốn sách có thể đề cập đến chúng liên quan đến Ubuntu vì thông tin có một chút ngày (Ubuntu đã từng sử dụng SysVinit như mọi người khác) hoặc vì các thư mục đó vẫn tồn tại để tương thích.

/etc/init.dchứa một loạt các tập lệnh, mỗi tập lệnh chứa các hướng dẫn để bắt đầu và dừng một dịch vụ. Một số dịch vụ này cần được bắt đầu khi khởi động; những người khác cần được bắt đầu ở chế độ nhiều người dùng nhưng không phải ở chế độ bảo trì một người dùng; và có thể xác định các chế độ khác nhau với các bộ dịch vụ mong muốn khác nhau. SysVinit quản lý điều này thông qua runlevels . Thư mục /etc/rc$N.dchứa các tập lệnh sẽ chạy khi nhập runlevel N ( /etc/rc$N.d/S*) và các tập lệnh sẽ chạy khi rời runlevel N ( /etc/rc$N.d/K*). Bởi vì nhiều runlevels có các tập lệnh chung, thay vì lưu trữ một bản sao của các tập lệnh cho mỗi runlevel, các tập lệnh đều được lưu trữ trong một vị trí /etc/init.dvà các thư mục dành riêng cho runlevel/etc/rc?.dchứa các liên kết tượng trưng. Hơn nữa, tên của các liên kết tượng trưng cho biết liệu dịch vụ sẽ được bắt đầu ( S*) hoặc dừng (bị giết K*) trong runlevel đó và tiền tố số được sử dụng để kiểm soát thứ tự thực thi các tập lệnh.

Kịch bản chịu trách nhiệm truyền tải /etc/rc$N.d/etc/init.d/rc(trên Ubuntu trước khi khởi động và trên Debian; các vị trí có thể khác nhau trên các bản phân phối Linux khác).


Vì vậy, Ubuntu không được sử dụng /etc/init.d/etc/rc?.dnữa, và có Upstart để thay thế?
it_me

1
@ KrishD'Souza Không hoàn toàn. Ubuntu sử dụng Upstart thay vì SysVinit, nhưng nhiều gói vẫn gửi tập lệnh trong /etc/init.d(thay vì .conftập tin Upstart trong /etc/init), vì vậy Upstart vẫn hỗ trợ /etc/init.d/etc/rc?.dđể tương thích.
Gilles 'SO- ngừng trở nên xấu xa'

Ubuntu chuyển từ Upstart sang systemd kể từ 15.04. Vì vậy, tại thời điểm này (16.04) Ubuntu có ba hệ thống init: SysVinit, Upstart và systemd. Đầu tiên và thứ hai là trái để tương thích ngược.
PetroCliff

4

/etc/init.d là thư mục chứa các tập lệnh init.

Đây etc/rcX.dlà nơi liên kết kiểm soát dịch vụ nào bị giết hoặc bắt đầu khi vào runlevel X. Các tệp khi rcX.dbắt đầu với K được thực thi với tham số stopvà các tệp bắt đầu bằng Sđược thực hiện với tham số start. Nó là điển hình để khởi động trình tự và dừng thứ tự bằng cách sử dụng một số có hai chữ số sau Khoặc S. Để đảm bảo bắt đầu và dừng đặt hàng đúng cách, thông thường, hai chuỗi phải thêm tới 100.

Các chương trình có thể bị vô hiệu hóa ở cấp độ chạy bằng cách xóa các liên kết hoặc thay đổi trường hợp của Khoặc Sthành khoặc s.

EDIT: Quản trị viên thường chạy các tập lệnh từ /etc/init.dđó có thể là một liên kết tượng trưng đến thư mục khác tùy thuộc vào phân phối. (Các bản phân phối khác nhau có các tiêu chuẩn khác nhau.)

Chúng rcX.dđược sử dụng bởi mã khởi tạo để thay đổi mức độ chạy.


Trên hầu hết các hệ thống, /etc/init.dlà một liên kết tượng trưng đến thư mục bên dưới/etc/rc.d/init.d
Nikhil Mulley

1
Vì vậy, về cơ bản /etc/init.dlà vô dụng mà không có /etc/rcX.d? Và vì /etc/rcX.dbộ điều khiển của các chương trình được khởi chạy khi khởi động, nên chức năng của nó có giống với chức năng của nó /etc/init.dkhông?
it_me

Điều này phụ thuộc vào hệ thống. Gentoo, ví dụ, chỉ sử dụng /etc/init.d cho các tệp init của nó; nó không có thư mục /etc/rc*.d. Arch Linux, tương tự, chỉ có /etc/rc.d, thay vì /etc/init.d.
laebshade

1

Mặc dù @BillThor đã đánh giá nó rất tốt, nhưng đây là sự hiểu biết của tôi về /etc/rcX.d/etc/init.d:

  • /etc/init.d chứa các tập lệnh để bắt đầu và dừng các ứng dụng riêng lẻ khi khởi động.
  • /etc/rc?.dthư mục đại diện cho các cấp độ chạy khác nhau và các tập lệnh chứa trong không có gì ngoài các liên kết tượng trưng đến các tập lệnh thực tế trong /etc/init.dthư mục. Thay đổi cấp độ chạy sẽ thay đổi chế độ của hệ thống, như chế độ Người dùng đơn rất cơ bản sang chế độ chỉ dành cho bảng điều khiển sang giao diện đồ họa nâng cao.

Vì vậy, không có việc sử dụng các /etc/rc?.dthư mục mà không có /etc/init.dchính nó (và tất nhiên, ngược lại).

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.