国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux系統(tǒng)中的bash 進程和init進程還有systemd進程分別有什么作用,他們之間有什么聯(lián)系?

這篇具有很好參考價值的文章主要介紹了Linux系統(tǒng)中的bash 進程和init進程還有systemd進程分別有什么作用,他們之間有什么聯(lián)系?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Linux系統(tǒng)中的bash進程、init進程和systemd進程都是一種守護進程(daemon),即在后臺運行的進程,為系統(tǒng)提供各種服務。

  • bash 進程是一種命令行解釋器,它可以執(zhí)行用戶輸入的命令或者腳本文件,提供用戶與系統(tǒng)的交互界面。bash進程通常是用戶登錄后啟動的,每個用戶可以有多個bash進程。
  • init 進程是Linux系統(tǒng)的第一個進程,它的進程號(PID)為1,它負責啟動和停止系統(tǒng)的其他進程。init進程是系統(tǒng)的根進程,所有的進程都是它的后代。init進程使用一系列的啟動腳本來控制系統(tǒng)的運行級別和服務
  • systemd 進程是一種新的初始化系統(tǒng),它取代了init進程,成為系統(tǒng)的第一個進程(PID為1),它的目的是提供更快速和更靈活的啟動方式。systemd進程使用一種叫做Unit的資源單位來管理系統(tǒng)的各種服務,它可以并行啟動多個服務,縮短系統(tǒng)的啟動時間。

bash進程、init進程和systemd進程之間的聯(lián)系是:

  • bash進程是systemd進程的子進程,systemd進程是init進程的替代品。
  • bash進程可以通過systemctl命令來控制systemd進程管理的服務,也可以通過service命令來控制init進程管理的服務。
  • systemd進程可以兼容init進程的啟動腳本,也可以使用自己的配置文件來定義服務。

如果您想了解更多關于Linux系統(tǒng)中的進程的信息,您可以參考以下的網(wǎng)頁:

?

(1) linux的systemd與init的區(qū)別_systemd和init的區(qū)別-CSDN博客. https://blog.csdn.net/zhizhengguan/article/details/111653573.
(2) 【003】一文全面掌握Linux初始化進程(超詳細) - 知乎專欄. https://zhuanlan.zhihu.com/p/298087838.
(3) linux---systemd進程 - 盜哥泡茶去了 - 博客園. https://www.cnblogs.com/1016391912pm/p/12953781.html.
(4) init和systemd:Linux守護進程 - 知乎 - 知乎專欄. https://zhuanlan.zhihu.com/p/561776400.


以下為轉(zhuǎn)載

【003】一文全面掌握Linux初始化進程(超詳細) - 知乎

本文將詳細梳理Linux系統(tǒng)的初始化進程systemd 。通過對此進程的理解,你將對系統(tǒng)的初始化有一個深入的理解,從而更好地理解其它的操作。

Linux系統(tǒng)的開機過程是這樣的:從BIOS開始,進入Boot Loader,再加載內(nèi)核系統(tǒng),進行內(nèi)核初始化,最后啟動初始化進程。以前Linux的啟動一直是采用init進程的,啟動服務的方式如下:

$sudo /etc/init.d/apache2 start
或者
$service apache2 start 

init啟動方式有兩個缺點

一是啟動時間長,init進程是串行啟動,只有前一個進程啟動完成,才會啟動下一個進程;

二是啟動腳本復雜,init進程只執(zhí)行啟動腳本,不管其它事情,腳本需要處理各種情況,從而使得腳本變得很長。

1.systemd概述

根據(jù)Linux慣例,字母d是守護進程(daemon)的縮寫, systemd的含義是它要守護整個系統(tǒng)。 systemd是為了解決initd的缺點問題而誕生的, 它為系統(tǒng)的啟動和管理提供了一套完整的解決方案。

使用systemd就不再需要initd了,它成了系統(tǒng)的第一個進程(PID= 1),其它進程都是它的子進程。

systemd初始化進程服務采用并發(fā)啟動機制,開機速度得到了很大的提升。

可以用命令$ systemctl --version命令 查看systemd的版本。

systemd的優(yōu)點是功能強大,使用方便,其缺點是體系龐大,非常復雜,與操作系統(tǒng)的其它部分強耦合,下圖是systemd的體系架構(gòu)圖。

Linux系統(tǒng)中的bash 進程和init進程還有systemd進程分別有什么作用,他們之間有什么聯(lián)系?,嵌入式基礎,Linux學習筆記,linux

2. systemd對系統(tǒng)的管理

systemd并不是一個命令,而是一組命令,涉及到對系統(tǒng)各方面的管理。

  • systemctlsystemd的主命令,用于管理系統(tǒng)。其常用的操作如下:
# 重啟系統(tǒng)
$ sudo systemctl reboot

# 關閉系統(tǒng),切斷電源
$ sudo systemctl poweroff

# CPU停止工作
$ sudo systemctl halt

# 暫停系統(tǒng)
$ sudo systemctl suspend

# 讓系統(tǒng)進入冬眠狀態(tài)
$ sudo systemctl hibernate

# 讓系統(tǒng)進入交互式休眠狀態(tài)
$ sudo systemctl hybrid-sleep

# 啟動進入救援狀態(tài)(單用戶狀態(tài))
$ sudo systemctl rescue
  • systemd-analyze命令用于查看啟動時的耗時。其常用的操作如下:
# 查看啟動耗時
$ systemd-analyze                                                                                       

# 查看每個服務的啟動耗時
$ systemd-analyze blame

# 顯示瀑布狀的啟動過程流
$ systemd-analyze critical-chain

# 顯示指定服務的啟動流
$ systemd-analyze critical-chain atd.service
  • hostnamectl命令用于查看當前主機的信息。其常用的操作如下:
# 顯示當前主機的信息
$ hostnamectl

# 設置主機名。
$ sudo hostnamectl set-hostname rhel8
  • localectl命令用于查看本地化設置。其常用的操作如下:
# 查看本地化設置
$ localectl

# 設置本地化參數(shù)。
$ sudo localectl set-locale LANG=en_GB.utf8
$ sudo localectl set-keymap en_GB
  • timedatectl命令用于查看當前時區(qū)設置。其常用的操作如下:
 # 查看當前時區(qū)設置
$ timedatectl

# 顯示所有可用的時區(qū)
$ timedatectl list-timezones                                                                                   

# 設置當前時區(qū)
$ sudo timedatectl set-timezone America/New_York
$ sudo timedatectl set-time YYYY-MM-DD
$ sudo timedatectl set-time HH:MM:SS
  • loginctl命令用于查看當前登錄用戶的相關信息。其常用的操作如下:
# 列出當前session
$ loginctl list-sessions

# 列出當前登錄用戶
$ loginctl list-users

# 列出顯示指定用戶的信息
$ loginctl show-user wujitao

3. 資源單位Unit

systemd可以管理所有的系統(tǒng)資源,不同的資源統(tǒng)稱為UnitLinux系統(tǒng)中Unit可以分為12種,列表如下:

uUnit 說明
Service Unit 系統(tǒng)服務
Target Unit 多個Unit構(gòu)成一個組
Device Unit 硬件設備
Mount Unit 文件系統(tǒng)的掛載點
Automount Unit 自動掛載點
Path Unit 文件或路徑
Scope Unit 不是由systemd啟動的外部進程
Slice Unit 進程組
Snapshot Unit systemd快照,可以切回某個快照
Socket Unit 進程間通信的socket
Swap Unit swap文件
Timer Unit 定時器

systemctl list-units命令可以查看當前系統(tǒng)的所有Unit。其常用的操作如下:

# 列出正在運行的 Unit
$ systemctl list-units

# 列出所有Unit,包括沒有找到配置文件的或者啟動失敗的
$ systemctl list-units --all

# 列出所有沒有運行的 Unit
$ systemctl list-units --all --state=inactive

# 列出所有加載失敗的 Unit
$ systemctl list-units --failed

# 列出所有正在運行的、類型為 service 的 Unit
$ systemctl list-units --type=service

可以用systemctl status命令查看系統(tǒng)狀態(tài)和單個Unit的狀態(tài)。其常用操作如下:

# 顯示系統(tǒng)狀態(tài)
$ systemctl status

# 顯示單個 Unit 的狀態(tài)
$ sysystemctl status bluetooth.service

# 顯示遠程主機的某個 Unit 的狀態(tài)
$ systemctl -H root@rhel8.redhat.com status httpd.service

# 顯示某個 Unit 是否正在運行
$ systemctl is-active application.service

# 顯示某個 Unit 是否處于啟動失敗狀態(tài)
$ systemctl is-failed application.service

# 顯示某個 Unit 服務是否建立了啟動鏈接
$ systemctl is-enabled application.service

對一用戶來說,最常用的操作就是啟動或停止Unit(主要是service)。下面列出一常用的操作:

# 立即啟動一個服務
$ sudo systemctl start apache.service

# 立即停止一個服務
$ sudo systemctl stop apache.service

# 重啟一個服務
$ sudo systemctl restart apache.service

# 殺死一個服務的所有子進程
$ sudo systemctl kill apache.service

# 重新加載一個服務的配置文件
$ sudo systemctl reload apache.service

# 重載所有修改過的配置文件
$ sudo systemctl daemon-reload

# 顯示某個 Unit 的所有底層參數(shù)
$ systemctl show httpd.service

# 顯示某個 Unit 的指定屬性的值
$ systemctl show -p CPUShares httpd.service

# 設置某個 Unit 的指定屬性
$ sudo systemctl set-property httpd.service CPUShares=500

Unit之間存在依賴關系,比如A依賴于B,這意味著在systemd啟動A時,會同時去啟動B??梢杂?code>$ systemctl list-dependencies命令列出一個Unit的所有依賴,如下所示:

#列出藍牙服務的所有依賴資源
$ systemctl list-dependencies --all bluetooth.service
#-all參數(shù)用來展開target,若不想展開,則可去掉

4. Unit的配置文件

每個Unit都有一個配置文件,告訴systemd如何啟動這個Unit。

systemd默認從目錄/etc/systemd/system中讀取配置文件,但這個目錄中大部分是軟鏈接文件,真正的配置文件存放在目錄/usr/lib/systemd/system/中。

配置文件的后綴名,表明就是該Unit的種類,若無后綴名,則用默認后綴名.service

可以用systemctl enablesystemctl disable命令在兩個目錄間建立或取消符號鏈接,如下示例:

#建立符號鏈接
$ sudo systemctl enable atd.service
# 等同于
$ sudo ln -s '/usr/lib/systemd/system/atd.service' '/etc/systemd/system/atd.service'

#取消符號鏈接
$ sudo systemctl disable atd.service

可以用systemctl list-unit-files命令列出所有的配置文件,如下圖所示:

Linux系統(tǒng)中的bash 進程和init進程還有systemd進程分別有什么作用,他們之間有什么聯(lián)系?,嵌入式基礎,Linux學習筆記,linux

可以看到每個配置文件的狀態(tài),其狀態(tài)含義如下:

  • enabled:已建立啟動鏈接;
  • disabled:未建立啟動鏈接;
  • static:該配置文件沒有install部分,只能作為其它配置文件的依賴;

注意,僅從配置文件狀態(tài)還無法看出此Unit是否正在運行,必須執(zhí)行systemctl status命令才可以。

對于目錄下的配置文件,一旦修改,就必須讓systemd重新加載配置文件,并重新啟動,否則修改不會生效,其操作步驟如下:

#如修改了httpd的配置文件,要先重載,再重啟
$ sudo systemctl daemon-reload
$ sudo systemctl restart httpd.service

配置文件就是普通的文本文件,可用systemctl cat命令查看配置文件的內(nèi)容。 配置文件的完整字段清單可以參考官方文檔

5. Target

systemdtarget代替了傳統(tǒng)init啟動模式里面的運行級別的概念。每個target中包含多個Unit,這樣啟動某個target就會啟動里面所有的Unit,從這個意義上說,target相當于一個“狀態(tài)點”,啟動某個target就啟動至某種狀態(tài)。

注意,傳統(tǒng)的運行級別是互斥的,不可能多個RunLevel同時啟動,但是多個target可以同時啟動。其常用的幾個操作如下:

# 查看當前系統(tǒng)的所有 Target
$ systemctl list-unit-files --type=target

# 查看一個 Target 包含的所有 Unit
$ systemctl list-dependencies multi-user.target

# 查看啟動時的默認 Target
$ systemctl get-default

# 設置啟動時的默認 Target
$ sudo systemctl set-default multi-user.target

# 切換 Target 時,默認不關閉前一個 Target 啟動的進程,
# systemctl isolate 命令改變這種行為,
# 關閉前一個 Target 里面所有不屬于后一個 Target 的進程
$ sudo systemctl isolate multi-user.target

target與傳統(tǒng)RunLevel的對應關系如下圖所示:

Linux系統(tǒng)中的bash 進程和init進程還有systemd進程分別有什么作用,他們之間有什么聯(lián)系?,嵌入式基礎,Linux學習筆記,linux

若想要將系統(tǒng)默認的運行目標修改為“多用戶無圖形”模式,可直接用符號即可,命令如下:

$ sudo ln -sf /usr/lib/systemd/system/multi-user.target  /etc/systemd/system/default.target

6. 日志管理

systemd統(tǒng)一管理所有Unit的啟動日志,帶來的好處是,可以只用journalctl一個命令查看所有日志(包括內(nèi)核日志和應用日志)。日志的配置文件是/etc/systemd/journald.conf。

journalctl的功能非常強大,其常用的操作如下示例:

# 查看所有日志(默認情況下 ,只保存本次啟動的日志)
$ sudo journalctl

# 查看內(nèi)核日志(不顯示應用日志)
$ sudo journalctl -k

# 查看系統(tǒng)本次啟動的日志
$ sudo journalctl -b
$ sudo journalctl -b -0

# 查看上一次啟動的日志(需更改設置)
$ sudo journalctl -b -1

# 查看指定時間的日志
$ sudo journalctl --since="2020-10-01 18:18:18"
$ sudo journalctl --since "20 min ago"
$ sudo journalctl --since yesterday
$ sudo journalctl --since "2019-01-10" --until "2020-01-11 00:00"
$ sudo journalctl --since 09:00 --until "1 hour ago"

# 顯示尾部的最新10行日志
$ sudo journalctl -n

# 顯示尾部指定行數(shù)的日志
$ sudo journalctl -n 20

# 實時滾動顯示最新日志
$ sudo journalctl -f

# 查看指定服務的日志
$ sudo journalctl /usr/lib/systemd/systemd

# 查看指定進程的日志
$ sudo journalctl _PID=1

# 查看某個路徑的腳本的日志
$ sudo journalctl /usr/bin/bash

# 查看指定用戶的日志
$ sudo journalctl _UID=33 --since today

# 查看某個 Unit 的日志
$ sudo journalctl -u nginx.service
$ sudo journalctl -u nginx.service --since today

# 實時滾動顯示某個 Unit 的最新日志
$ sudo journalctl -u nginx.service -f

# 合并顯示多個 Unit 的日志
$ journalctl -u nginx.service -u php-fpm.service --since today

# 查看指定優(yōu)先級(及其以上級別)的日志,共有8級
# 0: emerg
# 1: alert
# 2: crit
# 3: err
# 4: warning
# 5: notice
# 6: info
# 7: debug
$ sudo journalctl -p err -b

# 日志默認分頁輸出,--no-pager 改為正常的標準輸出
$ sudo journalctl --no-pager

# 以 JSON 格式(單行)輸出
$ sudo journalctl -b -u nginx.service -o json

# 以 JSON 格式(多行)輸出,可讀性更好
$ sudo journalctl -b -u nginx.serviceqq
 -o json-pretty

# 顯示日志占據(jù)的硬盤空間
$ sudo journalctl --disk-usage

# 指定日志文件占據(jù)的最大空間
$ sudo journalctl --vacuum-size=1G

# 指定日志文件保存多久
$ sudo journalctl --vacuum-time=1years

7.systemd應用操作實戰(zhàn)

若想設置某個服務在開機時啟動,可以輸入如下命令:

#設置開機啟動httpd.service
$ sudo systemctl enable httpd

設置開機啟動以后,服務并不會立即啟動,必須等下一次開機,如果現(xiàn)在就想運行此服務,可用:

$ sudo systemctl start httpd

執(zhí)行此命令后,服務也有可能啟動失敗,可用如下命令查看一下服務的狀態(tài):

$ sudo systemctl status httpd

若你想終止正在運行的服務,可以執(zhí)行如下命令:

$ sudo systemctl stop httpd.service

當然有時可能此命令沒有響應,服務也沒有停下來,這時候不得不殺進程了,可用如下命令:

$ sudo systemctl kill httpd.service

也可以重啟服務:

$sudo systemctl restart httpd.service

本文到此結(jié)束!下篇繼續(xù)!文章來源地址http://www.zghlxwxcb.cn/news/detail-823128.html

到了這里,關于Linux系統(tǒng)中的bash 進程和init進程還有systemd進程分別有什么作用,他們之間有什么聯(lián)系?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包