Boots Linux

Khi nó quay ra, Không có nhiều đến quá trình khởi động:

1. Một bộ nạp khởi động Finds kernel image trên đĩa, tải nó vào bộ nhớ, và bắt đầu nó.
2. Kernel khởi tạo các thiết bị và trình điều khiển của nó.
3. Hạt nhân gắn kết hệ thống tập tin gốc.
4. Kernel khởi động init gọi là Chương trình.
5. Reset bộ phần còn lại của quá trình chuyển động.
6. Các quy trình cuối cùng Đó init bắt đầu như một phần của tiến trình khởi động cho phép bạn đăng nhập.

Xác định từng giai đoạn của quá trình khởi động là vô giá trong việc sửa chữa các vấn đề khởi động và hiểu toàn bộ hệ thống. Nó bắt đầu, bằng không trong bộ nạp khởi động, đó là màn hình ban đầu hoặc dấu nhắc bạn nhận được sau khi máy tính thực hiện tự kiểm tra nguồn của nó, yêu cầu hệ điều hành nào chạy. Sau khi bạn thực hiện lựa chọn, bộ tải khởi động chạy nhân Linux, trao quyền điều khiển hệ thống cho nhân.

Có một cuộc thảo luận chi tiết về kernel Ở những nơi khác trong cuốn sách này từ nào bài viết này được trích. Bài viết này bao gồm các giai đoạn kernel khởi, Giai đoạn Khi kernel in một loạt các thông điệp về sự hiện diện phần cứng trên hệ thống. Hạt nhân bắt đầu init ngay sau nó sẽ hiển thị một thông điệp tuyên bố đó hạt nhân đã gắn các hệ thống tập tin gốc:

VFS: gắn kết root (ext2 hệ thống tập tin) chỉ đọc.

Ngay sau đó, bạn sẽ thấy một thông báo về init khởi đầu, tiếp theo là thông điệp khởi động dịch vụ hệ thống, và cuối cùng bạn sẽ có được một đăng nhập nhắc Một số loại.

CHÚ THÍCH : Trên Red Hat Linux, lưu ý init là đặc biệt rõ ràng, bởi vì nó "chào đón" bạn để "Red Hat Linux." Tất cả các tin nhắn sẽ hiển thị thành công hay thất bại trong dấu ngoặc ở phía bên phải của màn hình.

Hầu hết các chương này giao dịch với init, Bởi vì nó là một phần của tiến trình khởi động ở đâu có sự kiểm soát nhất.
trong đó

Không có gì đặc biệt về init là. Đây là phần mềm giống như bất kỳ khác trên hệ thống Linux, và bạn sẽ tìm thấy nó trong / sbin cùng với những chương trình hệ thống khác. Mục đích chính của init là bắt đầu và ngừng các chương trình khác trong một chuỗi cụ thể. Tất cả bạn phải biết là cách trình tự này hoạt động.

Có một vài biến thể khác nhau, nhưng hầu hết các bản phân phối Linux sử dụng System V phong cách thảo luận ở đây. Một số các bản phân phối sử dụng phiên bản đơn giản của init BSD Đó giống, nhưng dường như không gặp phải này bạn.

runlevel

Tại bất kỳ thời gian nhất định trên một hệ thống Linux, một bộ cơ sở nhất định của quá trình đang chạy. Trạng thái này của máy được gọi là runlevel ITS, và nó được thể hiện bằng số 0 từ 6 qua. Hệ thống này dành phần lớn thời gian STI trong một runlevel duy nhất. Tuy nhiên, khi bạn tắt máy, init chuyển sang một hệ thống runlevel khác nhau để hoàn thành dịch vụ năm cách có trật tự và nói với hạt nhân để ngăn chặn. Tuy nhiên, runlevel khác là cho chế độ đơn người dùng, thảo luận sau.

Cách đơn giản nhất để có được một ngày xử lý runlevel là để kiểm tra các tập tin cấu hình init, / etc / inittab. Hãy tìm một dòng như các giờ:

ID: 5: initdefault:

Điều này có nghĩa dòng runlevel mặc định trên hệ thống là 5. Tất cả các dòng trong file inittab lấy mẫu đơn này, với bốn lĩnh vực được phân cách bởi dấu hai chấm xảy ra trong trật tự giờ:
# Một định danh duy nhất (một chuỗi ngắn, Chẳng hạn như trong ví dụ id trước)
# Số đối runlevel (s)
# Các init Đó should not hành động (trong ví dụ trước, hành động là để thiết lập các runlevel mặc định để 5)
# Một lệnh để thực hiện (không bắt buộc)

Không có lệnh để thực hiện trong ví dụ trước initdefault Bởi vì lệnh không có ý nghĩa trong bối cảnh thiết lập các runlevel mặc định. Nhìn một chút thời gian tiếp tục xuống trong inittab, cho đến khi bạn nhìn thấy một dòng như thế này:

l5: 5: chờ: /etc/rc.d/rc 5

Dòng này gây nên hầu hết các cấu hình và hệ thống dịch vụ thông qua các rc * .d và thư mục init.d. Bạn có thể thấy rằng init được thiết lập để thực hiện các runlevel lệnh Khi gọi /etc/rc.d/rc 5 5. Hành động chờ đợi cho khi nào và như thế nào init chạy lệnh: chạy rc Khi Bước vào runlevel lần 5 5, và sau đó chờ cho lệnh này để kết thúc Trước khi làm việc gì khác.

Có vài hành động khác nhau, thêm vào initdefault và chờ đợi, đặc biệt là liên quan đến quản lý điện năng, và inittab (5) của nhãn hiệu trang cho bạn biết tất cả về họ. Những người mà bạn đang có khả năng nhất để gặp được giải thích trong phần giờ GMT.

respawn

Hành động respawn gây init để chạy các lệnh sau đó, và nếu Finishes thực hiện lệnh, để chạy nó một lần nữa. Bạn có khả năng để xem cái gì đó tương tự như dòng này trong file inittab của bạn:

1: 2345: respawn: / sbin / mingetty tty1

Chương trình getty Cung cấp nhắc nhở đăng nhập. Điểm mấu trước là dành cho giao diện điều khiển ảo đầu tiên (/ dev / tty1), là bạn nhìn thấy khi bạn nhấn ALT-Control-Alt-F1 hoặc F1. Hành động respawn mang lại dấu nhắc đăng nhập sau khi bạn đăng xuất.

ctrlaltdel

Hành động ctrlaltdel kiểm soát những gì hệ thống không Khi bạn nhấn Control-Alt-DELETE trên bàn giao tiếp ảo. Trên hầu hết các hệ thống, đây là một số loại lệnh reboot Sử dụng lệnh shutdown.

sysinit

Hành động sysinit là điều đầu tiên mà should not chạy init Khi nó khởi động, trước khi bước vào bất kỳ runlevel.

Làm thế nào Processes trong runlevel bắt đầu

Bây giờ bạn đã sẵn sàng để học cách các dịch vụ hệ thống init bắt đầu, chỉ cần Trước khi nó cho phép bạn đăng nhập. Nhớ lại dòng inittab này từ trước:

l5: 5: chờ: /etc/rc.d/rc 5

dòng nhỏ này gây nên nhiều chương trình khác. RC là viết tắt của lệnh chạy, và bạn sẽ nghe thấy mọi người đề cập đến các lệnh như kịch bản, chương trình, hoặc dịch vụ. Vì vậy, ở đâu NÀY lệnh, dù sao?

Cho runlevel 5, trong ví dụ này, các lệnh có lẽ một trong hai trong /etc/rc.d/rc5.d hoặc /etc/rc5.d. Runlevel sử dụng rc1.d 1, 2 runlevel rc2.d sử dụng, và vân vân. Bạn có thể tìm các mục rc5.d giờ trong thư mục:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

Bộ chỉ huy 5 rc runlevel bắt đầu chương trình trong thư mục này bằng cách chạy lệnh giờ:

S10sysklogd nhà
S12kerneld nhà
S15netstd_init nhà
S18netbase nhà

S99sshd nhà

Chú ý đối số bắt đầu trong mỗi lệnh. Chỉ số S trong tên lệnh có nghĩa là should not chạy lệnh trong chế độ khởi động, và số lượng (00 99 qua) xác định nơi đang trong rc chuỗi bắt đầu lệnh.

Các rc * .d lệnh thường là shell script Đó Chương Start trong / sbin hoặc / usr / sbin. Thông thường, bạn-có thể tìm ra những gì một trong các lệnh thực hiện bằng cách nhìn vào kịch bản với ít hoặc Một chương trình máy nhắn tin.

Bạn có thể bắt đầu một trong những dịch vụ bằng tay. Ví dụ, nếu bạn muốn bắt đầu các phần mềm máy chủ Web httpd bằng tay, chạy S99httpd nhà. Tương tự như vậy, nếu bạn cần để giết một trong những dịch vụ Khi máy được bật, bạn có thể chạy lệnh trong rc * thư mục .d với lập luận stop (S99httpd dừng lại, ví dụ).

Một số thư mục .d rc * CHỨA Đó lệnh bắt đầu với K (đối với "giết" hoặc chế độ ngừng). Trong trường hợp này, rc chạy lệnh với tham số stop thay vì về nhà. Bạn có nhiều khả năng gặp phải lệnh K trong runlevel Đó shut-down.

Thêm và xóa các dịch vụ

Nếu bạn muốn thêm, xóa, hoặc sửa đổi các dịch vụ trong các thư mục .d rc *, bạn cần có một cái nhìn sâu hơn về các tập tin bên trong. Một danh sách dài cho thấy một cấu trúc như thế này:

lrwxrwxrwx. . . S10sysklogd -> ../init.d/sysklogd
lrwxrwxrwx. . . S12kerneld -> ../init.d/kerneld
lrwxrwxrwx. . . S15netstd_init -> ../init.d/netstd_init
lrwxrwxrwx. . . S18netbase -> ../init.d/netbase

Các lệnh trong năm rc thư mục * .d thực sự là liên kết tượng trưng đến tập tin trong thư mục init.d năm, thường là trong / etc hoặc /etc/rc.d. bản phân phối Linux chứa những liên kết CAN để họ sử dụng các script khởi động tương tự cho tất cả các runlevel. Công ước này là do không có phương tiện Yêu cầu, nhưng thường Làm cho nó tổ chức một chút dễ dàng hơn.

Để ngăn chặn một trong các lệnh trong thư mục init.d từ chạy trong một runlevel Đặc biệt, Bạn có thể nghĩ loại bỏ các liên kết tượng trưng trong rc * THÍCH HỢP thư mục .d. Điều này không làm việc, nhưng nếu bạn thực hiện một sai lầm và không ngừng Cần phải đưa vào liên kết trở lại trong như thế nào, Bạn có thể gặp khó khăn khi Nhớ lại tên chính xác của liên kết. Vì vậy, bạn không nên loại bỏ các liên kết trong thư mục rc * .d, nhưng đúng hơn, thêm một dấu gạch dưới (_) để khởi đầu của tên liên kết như thế này:

mv S99httpd _S99httpd

Lúc khởi động thời gian rc bỏ qua _S99httpd Bởi vì nó không bắt đầu bằng S hoặc K. Bên cạnh đó, tên gốc vẫn còn hiển nhiên, và bạn có thể truy cập nhanh vào lệnh nếu bạn đang ở trong một pinch và Cần để bắt đầu nó bằng tay.

Để thêm một dịch vụ, bạn phải tạo một kịch bản giống như những người khác trong thư mục init.d và Sau đó tạo một liên kết tượng trưng đến rc * thư mục .d đúng. Cách dễ nhất để viết một kịch bản là xem xét các kịch bản đã có trong init.d, tạo một bản sao của một trong đó bạn hiểu, và sửa đổi các bản sao.

Khi thêm một dịch vụ, đảm bảo bạn chọn Đó THÍCH HỢP năm như thế nào trong tiến trình khởi động để bắt đầu dịch vụ. Nếu dịch vụ bắt đầu quá sớm, nó có thể không hoạt động, do sự phụ thuộc vào một số dịch vụ khác. Đối với dịch vụ không cần thiết, hầu hết các quản trị viên hệ thống thích con số trong 90s, sau khi hầu hết các dịch vụ đó cam với hệ thống.

bản phân phối Linux thường đi kèm với một lệnh để kích hoạt và vô hiệu hóa dịch vụ trong danh bạ .d rc *. Ví dụ, trong Debian, lệnh là update-rc.d, và Red Hat Linux, lệnh là chkconfig. giao diện người dùng đồ họa Cũng có sẵn là. Sử dụng chương trình giúp các giữ các thư mục khởi động phù hợp và giúp với nâng cấp.

GỢI Ý: Một trong những vấn đề phổ biến nhất cài đặt Linux được cấu hình không đúng năm XFree86 Đó máy chủ bộ phim và tắt, làm cho hệ thống không sử dụng được trên console. Để ngăn chặn hành vi này, khởi động vào chế độ single-user và thay đổi runlevel hoặc runlevel dịch vụ của bạn. Tìm kiếm cái gì đó Chứa xdm, gdm hoặc kdm trong thư mục .d rc * của bạn, hoặc tập tin / etc / inittab.

kiểm soát init

Đôi khi init Bạn cần phải cung cấp một cú đá ít để nói với nó để chuyển đổi runlevel, để đọc lại file inittab, hoặc chỉ để tắt hệ thống. Bởi vì init luôn là quá trình đầu tiên trên hệ thống, STI quá trình ID luôn là 1.

Bạn có thể kiểm soát init với telinit. Ví dụ, nếu bạn muốn chuyển sang runlevel 3, sử dụng lệnh này:

telinite 3

Khi chuyển đổi runlevel, init cố gắng giết chết bất kỳ Processes Đó không phải là trong file inittab cho runlevel mới. Do đó, bạn không nên cẩn thận về việc thay đổi runlevel.

Khi bạn cần thêm hoặc xóa các công việc respawning hoặc thực hiện bất kỳ thay đổi khác vào file inittab, bạn phải nói với init về sự thay đổi và gây ra nó để đọc lại các tập tin. Một số người sử dụng để nói 1 giết HUP init để làm điều này. phương pháp truyền thống này hoạt động trên hầu hết các phiên bản của Unix, miễn là bạn gõ một cách chính xác. Tuy nhiên, bạn có thể chạy lệnh telinit này:

telinit q

Bạn cũng có thể sử dụng telinit s để chuyển sang chế độ đơn người dùng.

Tắt

Cũng init kiểm soát cách hệ thống tắt và khởi động lại. Cách thích hợp để đóng cửa một máy Linux là sử dụng lệnh tắt máy.

Có có hai cách cơ bản để sử dụng tắt máy. Nếu bạn ngăn chặn hệ thống, nó tắt máy xuống và Giữ nó xuống. Để làm cho máy tính ngay lập tức ngăn chặn, sử dụng lệnh này:

shutdown -h tại

Trên hầu hết các máy móc hiện đại với các phiên bản gần đây một cách hợp lý của Linux để ngăn chặn cắt điện cho máy. Bạn cũng có thể khởi động lại máy. Đối với một khởi động lại, sử dụng thay vì r -h.

Quá trình shutdown mất vài giây. Bạn không nên bao giờ đặt lại hoặc tắt nguồn máy Trong giai đoạn này.

Trong ví dụ trước, bây giờ là thời gian để tắt. Lập luận này là bắt buộc, nhưng có nhiều cách để Xác định nó. Nếu bạn muốn đi xuống máy lúc nào trong tương lai, một cách là sử dụng + n, trong đó n là số phút tắt máy chờ shouldn STI Trước khi thực hiện công việc. Đối với tùy chọn khác, hãy nhìn vào shutdown (8) trang hướng dẫn.

Để lập biên hệ thống khởi động lại 10, chạy lệnh này:

shutdown -r + 10

Trên Linux, tắt thông báo cho bất cứ ai đăng nhập vào đó máy được đi xuống, nhưng nó ít công việc thực tế. Nếu bạn chỉ định một thời gian khác hơn bây giờ, tắt máy gọi Tạo một tập tin / etc / nologin. Khi tập tin này là hiện nay, hệ thống thông tin đăng nhập cấm bởi bất cứ ai ngoại trừ superuser.

Khi thời gian cuối cùng cũng đến hệ thống tắt máy, tắt máy kể init để chuyển sang runlevel 0 6 cho dừng và runlevel cho khởi động lại. Khi init runlevel vào 0 hoặc 6, tất cả các giờ GMT Đưa như thế nào, mà bạn có thể kiểm tra bằng cách nhìn vào kịch bản bên trong rc0.d và rc6.d:

1. Rằng nó giết chết quá trình init Mỗi CAN (vì nó sẽ Khi chuyển sang bất kỳ runlevel khác).

# Các lệnh rc0.d / rc6.d ban đầu chạy, khóa tập tin hệ thống vào tình yêu và làm cho chế phẩm khác để tắt máy.
# Các lệnh rc0.d / rc6.d tiếp theo unmount toàn bộ các hệ thống tập tin khác so với gốc.
# Hơn nữa rc0.d / rc6.d remount các lệnh hệ thống tập tin gốc read-only.
# Vẫn còn nhiều rc0.d / rc6.d lệnh viết tất cả dữ liệu đệm ra hệ thống tập tin với chương trình đồng bộ hóa.
# Các lệnh rc0.d / rc6.d thức nói với hạt nhân để khởi động lại hoặc ngừng với khi khởi động lại, dừng lại, hoặc chương trình poweroff.

Khi khởi động lại và dừng chương trình hành xử khác nhau đối với từng runlevel, có khả năng gây nhầm lẫn. Theo mặc định, các chương trình này gọi tắt với các tùy chọn -h -r hay, nhưng nếu hệ thống đã ở ngưng hoạt động hoặc khởi động lại runlevel, các chương trình nói kernel để tắt ngay lập tức chính nó. Nếu bạn thực sự muốn Shut down máy tính của bạn trong một vội vàng (không tuân thủ bất kỳ thiệt hại có thể xảy ra từ shutdown mất trật tự), sử dụng tùy chọn -f.

Để lại một bình luận

Trang web này sử dụng Akismet để giảm spam. Tìm hiểu cách xử lý dữ liệu nhận xét của bạn.