日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 修改时区_【003】一文全面掌握Linux初始化进程(超详细)

發布時間:2025/3/21 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 修改时区_【003】一文全面掌握Linux初始化进程(超详细) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總第79篇

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

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

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

這種啟動方式有兩個缺點:一是啟動時間長,init進程是串行啟動,只有前一個進程啟動完成,才會啟動下一個進程;二是啟動腳本復雜,init進程只執行啟動腳本,不管其它事情,腳本需要處理各種情況,從而使得腳本變得很長。

1.systemd概述

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

使用systemd就不再需要initd了,它成了系統的第一個進程(PID= 1),其它進程都是它的子進程。systemd初始化進程服務采用并發啟動機制,開機速度得到了很大的提升。可以用命令$ systemctl --version命令 查看systemd的版本。

systemd的優點是功能強大,使用方便,其缺點是體系龐大,非常復雜,與操作系統的其它部分強耦合,下圖是systemd的體系架構圖。

2. systemd對系統的管理

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

  • systemctl是systemd的主命令,用于管理系統。其常用的操作如下:
# 重啟系統 $ sudo systemctl reboot# 關閉系統,切斷電源 $ sudo systemctl poweroff# CPU停止工作 $ sudo systemctl halt# 暫停系統 $ sudo systemctl suspend# 讓系統進入冬眠狀態 $ sudo systemctl hibernate# 讓系統進入交互式休眠狀態 $ sudo systemctl hybrid-sleep# 啟動進入救援狀態(單用戶狀態) $ 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# 設置本地化參數。 $ sudo localectl set-locale LANG=en_GB.utf8 $ sudo localectl set-keymap en_GB
  • timedatectl命令用于查看當前時區設置。其常用的操作如下:
# 查看當前時區設置 $ timedatectl# 顯示所有可用的時區 $ timedatectl list-timezones # 設置當前時區 $ 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可以管理所有的系統資源,不同的資源統稱為Unit。 Linux系統中Unit可以分為12種,列表如下:

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

用systemctl list-units命令可以查看當前系統的所有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命令查看系統狀態和單個Unit的狀態。其常用操作如下:

# 顯示系統狀態 $ systemctl status# 顯示單個 Unit 的狀態 $ sysystemctl status bluetooth.service# 顯示遠程主機的某個 Unit 的狀態 $ systemctl -H root@rhel8.redhat.com status httpd.service# 顯示某個 Unit 是否正在運行 $ systemctl is-active application.service# 顯示某個 Unit 是否處于啟動失敗狀態 $ 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 的所有底層參數 $ 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??梢杂? systemctl list-dependencies命令列出一個Unit的所有依賴,如下所示:

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

4. Unit的配置文件

每個Unit都有一個配置文件,告訴systemd如何啟動這個Unit。 systemd默認從目錄/etc/systemd/system中讀取配置文件,但這個目錄中大部分是軟鏈接文件,真正的配置文件存放在目錄/usr/lib/systemd/system/中。

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

可以用systemctl enable或systemctl 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命令列出所有的配置文件,如下圖所示:

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

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

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

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

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

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

5. Target

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

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

# 查看當前系統的所有 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與傳統RunLevel的對應關系如下圖所示:

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

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

6. 日志管理

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

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

# 查看所有日志(默認情況下 ,只保存本次啟動的日志) $ sudo journalctl# 查看內核日志(不顯示應用日志) $ sudo journalctl -k# 查看系統本次啟動的日志 $ 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# 顯示尾部指定行數的日志 $ 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# 查看指定優先級(及其以上級別)的日志,共有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# 顯示日志占據的硬盤空間 $ sudo journalctl --disk-usage# 指定日志文件占據的最大空間 $ sudo journalctl --vacuum-size=1G# 指定日志文件保存多久 $ sudo journalctl --vacuum-time=1years

7.systemd應用操作實戰

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

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

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

$ sudo systemctl start httpd

執行此命令后,服務也有可能啟動失敗,可用如下命令查看一下服務的狀態:

$ sudo systemctl status httpd

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

$ sudo systemctl stop httpd.service

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

$ sudo systemctl kill httpd.service

也可以重啟服務:

$sudo systemctl restart httpd.service

本文到此結束!下篇繼續!

如果對你有幫助,請隨手 點贊 或 贊賞!關注本專欄,更多干貨與你分享。

=======================================================

歡迎【關注、私信 @武三郎】。我們一起交流一起進步。

總結

以上是生活随笔為你收集整理的linux 修改时区_【003】一文全面掌握Linux初始化进程(超详细)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。