Làm thế nào tôi có thể biết nếu linux của tôi bắt đầu với systemd
hoặc gói gì?
Làm thế nào tôi có thể biết nếu linux của tôi bắt đầu với systemd
hoặc gói gì?
Câu trả lời:
Kiểm tra quá trình nào đang chạy dưới dạng PID 1. Bạn có thể thực hiện việc này bằng cách chạy ps aux | less
và cuộn lên trên cùng. Nếu bạn có một số thứ systemd chạy như PID 1, thì bạn có systemd đang chạy.
Hoặc, chạy systemctl
để liệt kê các đơn vị systemd đang chạy.
Bạn cũng có thể muốn kiểm tra / sbin / init là gì; file /sbin/init
sẽ cho bạn biết nếu đó là một thực thi thực sự hoặc nếu đó là một liên kết tượng trưng đến một số gói thực thi khác. Trên hộp systemd, ví dụ:
root@boxy / # file /sbin/init
/sbin/init: symbolic link to ../lib/systemd/systemd
Để biết thêm thông tin, hãy kiểm tra điều này: https://en.wikipedia.org/wiki/Linux_startup_ process
EDIT: Như đã lưu ý bởi nhận xét của deltab, thay vì sử dụng ps aux | less
, ps 1
là một cách tốt hơn để làm điều này. Cám ơn giải thích rõ ràng!
EDIT2: Một cách khác để xem chính xác những gì bạn có trên hệ thống của mình là gõ man init
và xem trang người đàn ông của chương trình mà bạn kết thúc.
ps 1
(số 1).
ps 1
trình diễn /sbin/init
và của tôi file /sbin/init
hiển thị nhị phân, vì vậy tôi nghĩ rằng nó không phải là systemd. Sau đó, tôi đã cố gắng để chạy systemctl
lệnh và nhận được lỗi "lệnh không tìm thấy", vì vậy bây giờ tôi chắc chắn rằng tôi chưa có systemd trên linux của mình.
Tôi biết đây là một câu hỏi cũ, nhưng vì tôi chỉ tự hỏi chính mình câu hỏi tương tự - đây là 2ct của tôi.
ps --no-headers -o comm 1
Điều này trả về một trong hai systemd
hoặc là init
và xuất hiện đáng tin cậy trên các bản phân phối và phát hành Linux.
file /sbin/init
sẽ làm việc, với sự giúp đỡ của khớp mẫu. Đầu ra của ps 1
không có vẻ hữu ích vì trên một số bản phân phối Linux, nó sẽ in 'init' (symlink) mặc dù systemd đang được sử dụng.
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:02 /sbin/init
$ file /sbin/init
/sbin/init: symbolic link to /lib/systemd/systemd
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 7:46 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
$ file /sbin/init
/sbin/init: symbolic link to `../lib/systemd/systemd'
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:24 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
$ file /sbin/init
/sbin/init: symbolic link to `../usr/lib/systemd/systemd'
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:33 /sbin/init showopts
$ /sbin/init: symbolic link to `../usr/lib/systemd/systemd'
rpm --quiet --query systemd
. điều này tránh được sự khốn kiếp liên quan đến việc tìm kiếm một quá trình hoặc pid hoặc symlink.