Linux 基礎學習訓練教材 - CentOS 8.x

第 12 堂課:軟體管理與安裝及登錄檔初探

軟體管理則是很重要的一環!CentOS 依循 RPM 的方式來處理軟體,並透過 yum 進行線上安裝/升級喔!

最近更新時間: 2020/06/01

許多時刻,我們都需要軟體的安裝與升級,尤其在資安方面,將軟體保持在越新的狀態,就越能解決零時攻擊的問題。 Linux 提供了快速的軟體線上安裝/升級機制,管理員在有網路的情況下,很容易進行軟體的管理。另外,查閱登錄檔也是管理員很重要的工作項目之一。

12.1:Linux 本機軟體管理 rpm

目前主流 Linux distribution 使用的軟體管理機制,大概是底下兩種:

distribution 代表軟體管理機制使用指令線上升級機制(指令)
Red Hat/FedoraRPMrpm, rpmbuildYUM (yum, dnf)
Debian/UbuntuDPKGdpkgAPT (apt-get)

CentOS 為 Red Hat 的一支,因此也是使用 RPM 的軟體管理機制。

12.1.1:RPM 管理員簡介

RPM 全名是『 RedHat Package Manager 』簡稱則為 RPM 。顧名思義,當初這個軟體管理的機制是由 Red Hat 這家公司發展出來的。 RPM 是以一種資料庫記錄的方式來將你所需要的軟體安裝到你的 Linux 系統的一套管理機制。

他最大的特點就是將你要安裝的軟體先編譯過, 並且打包成為 RPM 機制的包裝檔案,透過包裝好的軟體裡頭預設的資料庫記錄, 記錄這個軟體要安裝的時候必須具備的相依屬性軟體,當安裝在你的 Linux 主機時, RPM 會先依照軟體裡頭的資料查詢 Linux 主機的相依屬性軟體是否滿足, 若滿足則予以安裝,若不滿足則不予安裝。那麼安裝的時候就將該軟體的資訊整個寫入 RPM 的資料庫中,以便未來的查詢、驗證與反安裝!這樣一來的優點是:

  • 由於已經編譯完成並且打包完畢,所以軟體傳輸與安裝上很方便 (不需要再重新編譯);
  • 由於軟體的資訊都已經記錄在 Linux 主機的資料庫上,很方便查詢、升級與反安裝

如果使用者想要自行修改 RPM 內的軟體參數時,就需要通過含有原始碼在內的 SRPM 來處理。

  • RPM 的軟體命名方式

一般來說,RPM 軟體的命名有其一定的規則,以 chrony-3.5-1.el8.x86_64.rpm 來說明:

chrony   -        3.5    -     1        .el8.x86_64  .rpm
軟體名稱   軟體的版本資訊 釋出的次數 適合的硬體平台 副檔名

除了後面適合的硬體平台與副檔名外,主要是以『-』來隔開各個部分,這樣子可以很清楚的發現該軟體的名稱、 版本資訊、打包次數與操作的硬體平台!較為特殊的是『適合的硬體平台』項目。

由於 RPM 可以適用在不同的操作平台上,但是不同的平台設定的參數還是有所差異性!並且,我們可以針對比較高階的 CPU 來進行最佳化參數的設定, 這樣才能夠使用高階 CPU 所帶來的硬體加速功能。 所以就有所謂的 i386, i586, i686, x86_64 與 noarch 等的檔案名稱出現。

  • RPM 的優點

由於 RPM 是透過預先編譯並打包成為 RPM 檔案格式後,再加以安裝的一種方式,並且還能夠進行資料庫的記載。 所以 RPM 有以下的優點:

  • RPM 內含已經編譯過的程式與設定檔等資料,可以讓使用者免除重新編譯的困擾;
  • RPM 在被安裝之前,會先檢查系統的硬碟容量、作業系統版本等,可避免檔案被錯誤安裝;
  • RPM 檔案本身提供軟體版本資訊、相依屬性軟體名稱、軟體用途說明、軟體所含檔案等資訊,便於瞭解軟體;
  • RPM 管理的方式使用資料庫記錄 RPM 檔案的相關參數,便於升級、移除、查詢與驗證。

不過,由於軟體彼此之間可能會有相關性的問題,因此 RPM 有所謂的『軟體相依』的情況,亦即某些底層軟體沒有安裝時, 上層軟體安裝會失敗的問題。

  • RPM 屬性相依的克服方式: YUM 線上升級

既然 RPM 已經內建了軟體相依的狀態, yum 則主動的分析 RPM 軟體的屬性相依問題,並做成列表清單,當管理員想要安裝某個軟體時, yum 機制即可立即根據清單來了解底層軟體是否已經安裝,若未安裝則開始相依屬性克服,將所有需要的軟體一口氣進行安裝的動作。

以 CentOS 為例,CentOS 透過 (1)先將釋出的軟體放置到 YUM 伺服器內,然後(2)分析這些軟體的相依屬性問題,將軟體內的記錄資訊寫下來 (header)。 然後再將這些資訊分析後記錄成軟體相關性的清單列表。這些列表資料與軟體所在的本機或網路位置可以稱呼為容器或軟體倉庫或軟體庫 (repository)。 當用戶端有軟體安裝的需求時,用戶端主機會主動的向網路上面的 yum 伺服器的軟體庫網址下載清單列表, 然後透過清單列表的資料與本機 RPM 資料庫已存在的軟體資料相比較,就能夠一口氣安裝所有需要的具有相依屬性的軟體了。

例題 12.1.1-1: 了解 Linux 主流系統的軟體安裝機制
  1. 目前主流 Linux distribution 大概使用那兩類的軟體安裝機制?
  2. Red Hat 系統使用的線上升級機制為何?
  3. 何謂軟體的相依性問題?

12.1.2:RPM 軟體管理程式: rpm

由於有了 yum 這個線上升級機制,因此目前很少會用到 rpm 來進行安裝、升級的任務,使用者可以略過這方面的學習。 但是 rpm 有本機軟體查詢以及檔案驗證的功能,對於快速檢查相當有幫助。

  • RPM 查詢 (query)

RPM 在查詢的時候,其實查詢的地方是在 /var/lib/rpm/ 這個目錄下的資料庫檔案。常見的查詢選項如下:

[root@localhost ~]# rpm -qa                              <==已安裝軟體
[root@localhost ~]# rpm -q[licdR] 已安裝的軟體名稱       <==已安裝軟體
[root@localhost ~]# rpm -qf 存在於系統上面的某個檔名     <==已安裝軟體
[root@localhost ~]# rpm -qp[licdR] 未安裝的某個檔案名稱  <==查閱RPM檔案
例題 12.1.2-1: 使用 rpm 進行軟體相關資料的查詢
  1. 找出你的 Linux 是否有安裝 logrotate 這個軟體?
  2. 列出上題當中,屬於該軟體所提供的所有目錄與檔案
  3. 列出 logrotate 這個軟體的相關說明資料
  4. 找出 /bin/sh 是那個軟體提供的?
  5. 如果我誤砍了某個重要檔案,例如 /etc/crontab,偏偏不曉得他屬於哪一個軟體,該怎麼辦?
  6. 怎麼知道 chrony 這個軟體的相依軟體與檔案有哪些?
  • RPM 驗證 (Verify)

驗證 (Verify) 的功能主要在於提供系統管理員一個有用的管理機制,作用的方式是『使用 /var/lib/rpm 底下的資料庫內容來比對目前 Linux 系統的環境下的所有軟體檔案 』 也就是說,當你有資料不小心遺失, 或者是因為你誤殺了某個軟體的檔案,或者是不小心不知道修改到某一個軟體的檔案內容, 就用這個簡單的方法來驗證一下原本的檔案系統即可。

[root@localhost ~]# rpm -Va
[root@localhost ~]# rpm -V  已安裝的軟體名稱
[root@localhost ~]# rpm -Vp 某個 RPM 檔案的檔名
[root@localhost ~]# rpm -Vf 在系統上面的某個檔案

若有檔案的某些資料被修改,則會出現下列的字樣:

  • S :(file Size differs) 檔案的容量大小是否被改變
  • M :(Mode differs) 檔案的類型或檔案的屬性 (rwx) 是否被改變?如是否可執行等參數已被改變
  • 5 :(MD5 sum differs) MD5 這一種指紋碼的內容已經不同
  • D :(Device major/minor number mis-match) 裝置的主/次代碼已經改變
  • L :(readLink(2) path mis-match) Link 路徑已被改變
  • U :(User ownership differs) 檔案的所屬人已被改變
  • G :(Group ownership differs) 檔案的所屬群組已被改變
  • T :(mTime differs) 檔案的建立時間已被改變
  • P :(caPabilities differ) 功能已經被改變
例題 12.1.2-2: 透過 rpm 指令進行軟體的驗證行為
  1. 列出你的 Linux 內的 logrotate 這個軟體是否被更動過
  2. 查詢一下,你的 /etc/crontab 是否有被更動過
  3. 定期在星期天 2:00 進行一次全系統的軟體驗證,並將驗證結果更新到 /root/rpmv.txt 檔案中
  • RPM 數位簽章 (Signature)

就像自己的簽名一樣,軟體開發商原廠所推出的軟體也會有一個廠商自己的簽章系統,只是這個簽章被數位化了而已。 廠商可以用數位簽章系統產生一個專屬於該軟體的簽章,並將該簽章的公鑰 (public key) 釋出。因此,當你要安裝一個 RPM 檔案時:

  • 首先你必須要先安裝原廠釋出的公鑰檔案;
  • 實際安裝原廠的 RPM 軟體時, rpm 指令會去讀取 RPM 檔案的簽章資訊,與本機系統內的簽章資訊比對,
  • 若簽章相同則予以安裝,若找不到相關的簽章資訊時,則給予警告並且停止安裝。

CentOS 使用的數位簽章系統為 GNU 計畫的 GnuPG (GNU Privacy Guard, GPG)。 GPG 可以透過雜湊運算,算出獨一無二的專屬金鑰系統或者是數位簽章系統。 而根據上面的說明,我們也會知道首先必須要安裝原廠釋出的 GPG 數位簽章的公鑰檔案!CentOS 的數位簽章位於 /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial, 至於安裝與找到金鑰的方式如下:

[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[root@localhost ~]# rpm -qa | grep pubkey
gpg-pubkey-8483c65d-5ccc5b19

[root@localhost ~]# rpm -qi gpg-pubkey-8483c65d-5ccc5b19
  • RPM 資料庫重建

有時候正在安裝軟體時,卻發生停電的狀況,或者是某些突發狀況,導致的系統問題等等,接可能會直接/間接的造成 /var/lib/rpm 內的 RPM 資料庫錯亂。 此時可以透過底下的方式來重建資料庫:

[root@localhost ~]# rpm --rebuilddb   <==重建資料庫

12.2:Linux 線上安裝/升級機制: yum

如果讀者的 CentOS 可以連上 Internet 的話,那麼就可以透過 CentOS 官網與相關映射站來取得原版官網的軟體,可以進行各項線上安裝/升級的任務, 再也無須使用原版光碟了。

12.2.1:利用 yum 進行查詢、安裝、升級與移除功能

yum 是前台使用的軟體,其實後端 Linux 還是使用 rpm 來進行軟體管理的任務就是了。yum 常見的用法如下:

  • 查詢功能:yum [list|info|search|provides|whatprovides|history] 參數

如果想要查詢利用 yum 來查詢原版 distribution 所提供的軟體,或已知某軟體的名稱,想知道該軟體的功能,直接使用 yum 搭配參數即可。 例如要找出原版的 raid 作為關鍵字的軟體名稱時:

[root@localhost ~]# yum search raid
[root@station200 ~]# yum search raid
CentOS-8 - AppStream                                    5.4 MB/s | 7.0 MB     00:01  <==進行清單下載動作
CentOS-8 - Base                                         2.3 MB/s | 2.2 MB     00:00
CentOS-8 - Extras                                       6.7 kB/s | 5.9 kB     00:00
============================== Name & Summary 符合: raid ==============================
libblockdev-mdraid.x86_64 : The MD RAID plugin for the libblockdev library
libblockdev-mdraid.i686 : The MD RAID plugin for the libblockdev library
libblockdev-mdraid.x86_64 : The MD RAID plugin for the libblockdev library
libstoragemgmt-megaraid-plugin.noarch : Files for LSI MegaRAID support for
                                      : libstoragemgmt
================================= Summary 符合: raid ==================================
iprutils.x86_64 : Utilities for the IBM Power Linux RAID adapters
iprutils.x86_64 : Utilities for the IBM Power Linux RAID adapters
mdadm.x86_64 : The mdadm program controls Linux md devices (software RAID arrays)
mdadm.x86_64 : The mdadm program controls Linux md devices (software RAID arrays)

yum 進行軟體安裝與升級的動作相當簡單,透過下載伺服器的清單列表後,與本機的 rpm 資料庫比對,若發現伺服器存在但本機不存在者, 則可以進行安裝,若發現伺服器的軟體版本較新而本機軟體較舊,則可以進行升級。另外,yum 也會自動透過速度比對,找到最近的官網映射站來進行網路下載的任務。 如果想要了解上述 mdadm 這個軟體的說明,可以這樣處理:

[root@localhost ~]# yum info mdadm
Name         : mdadm
Version      : 4.1
發行版       : 9.el8
Architecture : x86_64
Size         : 1.2 M
來源         : mdadm-4.1-9.el8.src.rpm
Repository   : @System
來源軟體庫   : anaconda
Summary      : The mdadm program controls Linux md devices (software RAID arrays)
URL          : http://www.kernel.org/pub/linux/utils/raid/mdadm/
授權         : GPLv2+
Description  : The mdadm program is used to create, manage, and monitor Linux MD
             : (software RAID) devices.  As such, it provides similar functionality to
             : the raidtools package.  However, mdadm is a single program, and it can
             : perform almost all functions without a configuration file, though a
             : configuration file can be used to help with some common tasks.

其實就是 rpm -qi mdadm 的內容展現!而如果想要知道伺服器上面的所有軟體列表清單,則可以使用『 yum list 』來查閱! 這與 rpm -qa 有點類似,只是 rpm -qa 僅列出本機上面的軟體,而 yum list 可以列出伺服器上面的所有軟體名稱!

從前一小節讀者可以了解『 rpm -qf /local/file/name 』可以透過檔案來找出原本的軟體名稱,那 yum 的相關功能如何達成? 例如,哪個軟體提供了 /etc/passwd 呢?可以這樣處理:

[root@localhost ~]# yum provides "*/passwd"
bash-completion-1:2.7-5.el8.noarch : Programmable completion for Bash
軟體庫  :@System
符合來源:
檔案名稱:/usr/share/bash-completion/completions/passwd
......
例題 12.2.1-1:請使用 yum 進行如下任務,不要使用 rpm 喔!
  1. 那一個軟體提供了 ifconfig 這個指令
  2. 顯示並查閱該軟體的描述 (Description) 嘗試了解該軟體的任務
  3. 列出所有以 qemu 為開頭的軟體名稱
  4. 有個名為 qemu-kvm 的軟體功能為何?
  5. 查出到目前為止, yum 進行過什麼行為
  • 安裝/升級功能:yum [install|update] 軟體

安裝與升級直接字面上的處理為 install/update 即可!

例題 12.2.1-2: 利用 yum 進行安裝、升級、移除的動作
  1. 基本的查詢與安裝任務
    1. 用 rpm 本機查詢有沒有安裝 pam-devel 這個軟體?
    2. 用 yum 查詢是否有這個 pam-devel 的軟體名稱?
    3. 用 yum 線上安裝這個 pam-devel 的軟體。
    4. 安裝完畢後,透過 rpm 查詢 pam-devel 的所屬檔名有哪些
  2. 基本的升級任務
    1. 先使用 yum check-update 嘗試分析目前伺服器上有比本機 Linux 還要新的軟體群
    2. 隨意選擇一個軟體 (例如 sudo) 來進行單一軟體的升級
    3. 進行一次全系統升級
    4. 如果需要每天凌晨 3 點自動背景進行全系統升級,該如何處理?同時須注意到 yum 是否需要加上特別的參數?
  3. 基本的移除任務
    1. 將剛剛安裝的 pam-devel 移除掉 (請自行 man yum 找出移除的選項)
    2. 剛剛已經全系統安裝完畢,請問是否需要重新開機?為什麼?

12.2.2:yum 的設定檔

yum 是透過設定檔的規範去找到安裝/升級伺服器的,因為經常有第三方的協力廠商推出 yum 相容的安裝伺服器, 因此了解與設定 yum 設定檔,是有其必要的。

預設的 CentOS 8 的設定檔的檔名為: /etc/yum.repos.d/*.repo,重點在副檔名必須為 .repo 才行。在預設的情況下, CentOS 8 提供了 3 個主要的軟體倉儲,分別是: AppStream, Base, Extras,這 3 個設定檔如下:

[root@localhost ~]# cat /etc/yum.repos.d/CentOS-{AppStream,Base,Extras}.repo | grep -v '#'
[AppStream]
name=CentOS-$releasever - AppStream
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial


[BaseOS]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial


[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

相關的設定資料說明如下:

  • [base]:代表軟體庫的名字!中括號一定要存在,裡面的名稱盡量取與軟體有關的關鍵字。此外,不能有兩個相同的軟體庫名稱,否則 yum 指令會誤判
  • name:與 [] 類似,僅作為完整名稱顯示,通常可設定與 [] 內的文字相同即可。
  • mirrorlist=:使用 CentOS 官網記載的映射站分析,透過 yum 主動分析最靠近本機的伺服器來源
  • baseurl=:與 mirrorlist 不同,baseurl 為自行指定固定的 yum 伺服器,第三方協力軟體需要這個設定,管理員自己設定的 yum 伺服器也通常使用 baseurl 來規範來源。
  • enabled=1:是否啟動這個軟體庫,預設為啟動,若只想要設定好這個軟體庫,但平時不想使用時,可將這個項目設定為 enabled=0
  • gpgcheck=1:指定是否需要查閱 RPM 檔案內的數位簽章!
  • gpgkey=:若指定需要數位簽章 (gpgcheck=1),則需要在此填寫數位簽章的檔案檔名。
例題 12.2.2-1: 修改 yum 的設定檔
  1. 由於 mirrorlist 需要一段時間去測試最快的伺服器,並且偶而會測試錯誤。因此請自行手動找到最近的伺服器, 將 mirrorlist 修改成 baseurl 的方式來設定好 [base], [updates], [extras] 三個軟體庫的內容。 你可以由崑山的 http://ftp.ksu.edu.tw 找起!
  2. 修改完成後,由於修改過 yum 設定檔,為了擔心清單快取會有重複或者是其他問題,請 yum clean all 清除所有系統快取的資訊。
  3. 再次的 yum update 測試一下是否正確的下載了清單資訊。

若要列出所有的軟體庫,可使用『 yum repolist all 』的選項來處理:

例題 12.2.2-2: 管理軟體庫的設定
  • CentOS 其實還有提供很多的軟體庫 (軟體倉儲),可以讓使用者自行設定是否啟用。不過,預設僅提供 AppStream 及 BaseOS 即可!
  • 關於 EPEL:Red Hat 提供了 EPEL 的計畫,由許多志工提供了很多針對 RHEL/CentOS 打包好的軟體,提供給用戶使用。但這些軟體並非官網提供, 因此其軟體庫並沒有在預設的設定檔內,請依據底下的方式來處理 EPEL 的軟體支援。
  1. 先列出本機上面所有的軟體倉儲,不管有沒有啟用。
  2. 將 Extras 這個軟體倉儲設定成為預設關閉 (yum config-manager --disable...)
  3. 使用 yum --enablerepo=extras search 的方式,找到 epel 這個關鍵字,然後安裝該軟體。安裝完畢之後請查閱所有的軟體倉儲結果是否有改變?
  4. 讓 epel 軟體倉儲變成預設是不啟用的。
  5. 系統是否含有 netcdf 這個軟體?
  6. 使用 yum --enablerepo=epel,PowerTools 之後,再次查詢有沒有 netcdf?若有,請安裝!
  7. 使用 rpm 查詢 netcdf 軟體內含的檔名,並查出所有含有 bin 在內的指令名稱。

12.2.3:yum 的軟體群組功能

除了個別的軟體之外,許多大型專案的軟體群會集合成為一個『軟體群組』。舉例來說,開發者工具經常需要編譯器、環境檢查確認模組等等, 這些工具則可以整合成為一個軟體群組。yum 提供許多軟體群組讓管理員快速的安裝好所需要的環境。下面以開發工具為例說明:

[root@localhost ~]# LANG=C yum grouplist
Available Environment Groups:  <==還可以安裝的操作界面
   Server
   Minimal Install
   Workstation
   Virtualization Host
   Custom Operating System
Installed Environment Groups:
   Server with GUI
Installed Groups:
   Container Management
   Headless Management
Available Groups:               <==其他的軟體群組!
   .NET Core Development
   RPM Development Tools
   Development Tools            <==開發工具!
   Graphical Administration Tools
   Legacy UNIX Compatibility
   Network Servers
   Scientific Support
   Security Tools
   Smart Card Support
   System Tools

[root@localhost ~]# yum groupinfo "Development Tools"
群組:開發工具
 描述:基本開發環境。
 必備軟體包:
   autoconf
   automake
   binutils
.....
 預設軟體包:
   asciidoc
   byacc
.....
 選用軟體包:
   cmake
   expect
.....

[root@localhost ~]# yum groupinstall "Development Tools"

上面的最後一個指令,就可以將全部需要的軟體安裝起來。不過,就像上面 yum groupinfo 顯示的一樣,那個 cmake 與 expect 等軟體是選配, 也就是如果你使用預設的方式安裝 Development Tools 軟體群組,並不會主動安裝 cmake 與 expect 喔!那幾個軟體就得要自己安裝才行! 如果連選用軟體包也要安裝,那可以這樣做:

[root@localhost ~]# yum groupinstall --with-optional "Development Tools"

這樣比較輕鬆愉快!

12.3:Linux 登錄檔初探

系統的登錄檔管理相當重要,因為各種系統活動的記錄均會記載於登錄檔中。尤其系統有資安等問題時,登錄檔更是查閱相關資訊的重要依據。

12.3.1:CentOS 8 登錄檔簡易說明

各 Linux distribution 所使用的登錄檔記錄位置大多位於 /var/log,但檔名則不見得相同。至於還有許多指令可以呼叫出需要的登錄資訊, CentOS 8 常見的登錄檔檔名資訊,以及慣用的指令功能如下:

  • /var/log/cron:記錄由 crond 這個服務所產生的各項資訊,包括使用者 crontab 的結果。
  • /var/log/lastlog:記錄系統上面所有的帳號最近一次登入系統時的相關資訊。
  • /var/log/maillog:記錄郵件往來的資訊,包括由 postfix, devecot 服務所產生的系統資訊
  • /var/log/messages:幾乎系統發生的錯誤訊息 (或者是重要的資訊) 都會記錄在這個檔案中; 如果系統發生莫名的錯誤時,這個檔案是一定要查閱的登錄檔之一。
  • /var/log/secure:只要牽涉到『需要輸入帳號密碼』的軟體,那麼當登入時 (不管登入正確或錯誤) 都會被記錄在此檔案中。
  • dmesg:這個指令會列出系統在開機的時候核心偵測過程所產生的各項資訊。
  • lastlog:根據 /var/log/lastlog 的資料,列出每個用戶最近一次登入系統的時間與狀態。
  • last:根據 /var/log/wtmp 的資料,列出登入系統的用戶資訊。
  • utmpdump /var/log/wtmp:可以將 wtmp 的內容以純文字檔的方式印出來查閱。
  • 登錄檔所需相關服務 (daemon) 與程式

由於 CentOS8 已經改為 systemd 管理系統,systemd 提供了 systemd-journald 這個服務來管理登錄檔日誌記載,不過還是保留舊有的 rsyslog 服務。 然而記載的資料如果過於龐大,那麼記載的檔案本身負荷會比較高,因此還需要一個輪替登錄檔的功能,那就是 logroate 了!

  • systemd-journald.service:最主要的訊息收受者,由 systemd 提供的;
  • rsyslog.service:主要登錄系統與網路等服務的訊息;
  • logrotate:主要在進行登錄檔的輪替功能。
例題 12.3.1-1: 檢查與登錄檔有關的服務與指令
  1. 檢查一下上述的三個資料中,哪幾個是服務?哪幾個是執行檔?
  2. 並檢查服務項目有沒有啟動?而執行檔又是如何執行的?
  • 登錄檔內容的一般格式

一般來說,系統產生的訊息經過記錄下來的資料中,每條訊息均會記錄底下的幾個重要資料:

  • 事件發生的日期與時間;
  • 發生此事件的主機名稱;
  • 啟動此事件的服務名稱 (如 systemd, CROND 等) 或指令與函式名稱 (如 su, login..);
  • 該訊息的實際資料內容。

舉例來說,假設讀者剛剛使用 student 的身份切換成為 root 的話,那麼記載登錄資訊的 /var/log/secure 內容可能就會出現如下資料:

[root@localhost ~]# cat /var/log/secure
.......
May 26 11:44:26 station200 sudo[2753]: student : TTY=pts/0 ; PWD=/home/student ; USER=root ; COMMAND=/bin/su -
May 26 11:44:26 station200 su[2757]: pam_unix(su-l:session): session opened for user root by root(uid=0)
|---日期時間---|---主機---|-指令--|--詳細訊息

因為使用者使用了 sudo su - 這串指令,因此上述表格內即有 sudo 與 su 兩者的記錄狀態。由這個輸出,管理員可以很輕鬆的查詢到正確的日期與時間, 還有哪個使用者操作了什麼指令等等。也由於 /var/log 內的資料大多含有系統資安的記載,因此大多僅有 root 具有查詢的權限。

實際練習:嘗試說明底下的資訊當中,系統出了什麼問題?
May 18 09:57:58 www sudo: pam_unix(sudo:auth): conversation failed
May 18 09:57:58 www sudo: pam_unix(sudo:auth): auth could not identify password for [student]
May 18 09:58:02 www sudo: student : TTY=pts/0 ; PWD=/home/student ; USER=root ; COMMAND=/bin/su -
May 18 09:58:02 www su: pam_unix(su-l:session): session opened for user root by student(uid=0)
第 1, 2 行的內容,顯示 5 月 18 日,在早上 10 點前後,www 主機上面的 student 操作 sudo 失敗了,原因很可能是密碼輸入錯誤。 至於第 3, 4 行的內容顯示,又經過 4 秒鐘,student 似乎輸入了正確的密碼,因此轉換身份成為 root 了。

12.3.2:rsyslog 的設定與運作

CentOS 5 以前使用 syslogd 這個服務,在 CentOS 6 以後則使用 rsyslogd 這個服務了。這個服務的設定檔在 /etc/rsyslog.conf , 設定內容主要是針對『(1)什麼服務 (2)的什麼等級訊息 (3)需要被記錄在哪裡(裝置或檔案)』,例如下表的範例:

服務名稱[.=!]訊息等級		訊息記錄的檔名或裝置或主機
mail.info			/var/log/maillog_info
  • 服務名稱

rsyslogd 主要還是透過 Linux 核心提供的 syslog 相關規範來設定資料的分類的,Linux 的 syslog 本身有規範一些服務訊息, 你可以透過這些服務來儲存系統的訊息。Linux 核心的 syslog 認識的服務類型主要有底下這些: (可使用 man 3 syslog 查詢到相關的資訊,或查詢 syslog.h 這個檔案來了解的!)

相對序號服務類別說明
0 kern(kernel) 就是核心 (kernel) 產生的訊息,大多是硬體偵測以及核心功能的啟用
1 user 在使用者層級所產生的資訊
2 mail 只要與郵件收發有關的訊息記錄都屬於這個;
3 daemon 主要是系統的服務所產生的資訊,例如 systemd 就是這個有關的訊息!
4 auth 主要與認證/授權有關的機制,例如 login, ssh, su 等需要帳號/密碼的服務
5 syslog 由 syslog 相關協定產生的資訊,就是 rsyslogd 本身產生的資訊!
6 lpr 亦即是列印相關的訊息啊!
7 news 與新聞群組伺服器有關的東西;
8 uucp 全名為 Unix to Unix Copy Protocol,用於 unix 系統間的程序資料交換
9 cron 就是例行性工作排程 cron/at 等產生訊息記錄的地方;
10 authpriv 與 auth 類似,但記錄較多帳號私人的資訊,包括 pam 模組的運作等!
11 ftp 與 FTP 通訊協定有關的訊息輸出!
16~23 local0 ~ local7 保留給本機用戶使用的一些登錄檔訊息,較常與終端機互動。

開發服務軟體的程式開發者,呼叫了 Linux 系統內的 syslog 函式,就可以將訊息加以定義了!以下圖為例:

圖12.3.2-1、syslog 所制訂的服務名稱與軟體呼叫的方式
圖12.3.2-1、syslog 所制訂的服務名稱與軟體呼叫的方式
  • 訊息等級

同一個服務所產生的訊息也是有差別的,有啟動時僅通知系統而已的一般訊息 (information), 有出現還不至於影響到正常運作的警告訊息 (warn) , 還有系統硬體發生嚴重錯誤時,所產生的重大問題訊息 (error 等等); 訊息到底有多少種嚴重的等級呢?基本上,Linux 核心的 syslog 將訊息分為七個主要的等級,根據 syslog.h 的定義,訊息名稱與數值的對應如下:

等級數值等級名稱說明
7debug 用來 debug (除錯) 時產生的訊息資料;
6info 僅是一些基本的訊息說明而已;
5notice 雖然是正常資訊,但比 info 還需要被注意到的一些資訊內容;
4warning
(warn)
警示的訊息,可能有問題,但是還不至於影響到某個 daemon 運作的資訊;基本上, info, notice, warn 這三個訊息都是在告知一些基本資訊而已,應該還不至於造成一些系統運作困擾;
3err
(error)
一些重大的錯誤訊息,例如設定檔的某些設定值造成該服務服法啟動的資訊說明, 通常藉由 err 的錯誤告知,應該可以瞭解到該服務無法啟動的問題呢!
2crit 比 error 還要嚴重的錯誤資訊,這個 crit 是臨界點 (critical) 的縮寫,這個錯誤已經很嚴重了喔!
1alert 警告警告,已經很有問題的等級,比 crit 還要嚴重!
0emerg
(panic)
疼痛等級,意指系統已經幾乎要當機的狀態! 很嚴重的錯誤資訊了。通常大概只有硬體出問題,導致整個核心無法順利運作,就會出現這樣的等級的訊息吧!

特別留意一下在訊息等級之前還有 [.=!] 的連結符號喔!他代表的意思是這樣的:

  • . :代表『比後面還要嚴重的等級 (含該等級) 都被記錄下來』的意思,例如: mail.info 代表只要是 mail 的資訊,而且該資訊等級嚴重於 info (含 info 本身)時,就會被記錄下來的意思。
  • .=:代表所需要的等級就是後面接的等級而已, 其他的不要!
  • .!:代表不等於, 亦即是除了該等級外的其他等級都記錄。
  • CentOS 8 預設的 rsyslog.conf 內容

預設的 rsyslog.conf 內容如下:

[root@localhost ~]# grep -v '^#' /etc/rsyslog.conf | grep -v '^$'|sed 's/#.*$//g'
module(load="imuxsock"
       SysSock.Use="off")

module(load="imjournal"
       StateFile="imjournal.state")
global(workDirectory="/var/lib/rsyslog")
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
include(file="/etc/rsyslog.d/*.conf" mode="optional")
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

上表前 8 行主要是用在 rsyslog 環境運作的設定,後面 7 行才是訊息等級記錄設定。該 7 行的設定項目為:

  1. *.info;mail.none;authpriv.none;cron.none:由於 mail, authpriv, cron 等類別產生的訊息較多, 且已經寫入底下的數個檔案中,因此在 /var/log/messages 裡面就不記錄這些項目。除此之外的其他訊息都寫入 /var/log/messages 中。
  2. authpriv.*:認證方面的訊息均寫入 /var/log/secure 檔案;
  3. mail.*:郵件方面的訊息則均寫入 /var/log/maillog 檔案;
  4. cron.*:例行性工作排程均寫入 /var/log/cron 檔案;
  5. *.emerg:當產生最嚴重的錯誤等級時,將該等級的訊息以 wall 的方式廣播給所有在系統登入的帳號得知。
  6. uucp,news.crit:當新聞群組方面的資訊有嚴重錯誤時就寫入 /var/log/spooler 檔案中;
  7. local7.*:將本機開機時應該顯示到螢幕的訊息寫入到 /var/log/boot.log 檔案中;

至於 mail.* 後面的 -/var/log/maillog 為何多了減號?由於郵件所產生的訊息比較多,因此我們希望郵件產生的訊息先儲存在速度較快的記憶體中 (buffer) ,等到資料量夠大了才一次性的將所有資料都填入磁碟內,這樣將有助於登錄檔的存取性能。 只不過由於訊息是暫存在記憶體內,因此若不正常關機導致登錄資訊未回填到登錄檔中,可能會造成部分資料的遺失。

例題 12.3.2-1: 自訂登錄檔資訊
  1. 設計一個名為 /var/log/admin.log 的登錄檔,將系統的所有登錄資訊通通塞入這個檔案內。
  • 登錄檔伺服器的設定

如果單位內有 10 部伺服器,若每部伺服器的登錄資訊都需要管理員個別登入每部系統來存取,將會導致大量的人力支援耗費。 此時可以指定單位內某部 Linux 成為登錄伺服器,假設為 A 伺服器,再將其他伺服器的登錄資訊轉向到 A 伺服器, 則管理員僅須分析 A 伺服器,即可了解單位內所有伺服器的登錄資訊了。

圖12.3.2-2、登錄檔伺服器的架構
圖12.3.2-2、登錄檔伺服器的架構

Server 端的設定只需要讓 rsyslogd 啟動 port 514 即可。不過有兩種啟動的方式,分別是啟動 TCP 與 UDP 兩種封包格式。 假設 Server/Client 都在內部網路,因此我們使用速度較快的 UDP 封包來處理:

實際練習:請將你的 Linux 規範成為登錄伺服器:
  1. 先設定 rsyslog.conf ,啟動 port 514 在 UDP 封包上:
    [root@localhost ~]# vim /etc/rsyslog.conf
    module(load="imudp") # needs to be done just once  <==大概在 19, 20 行,將這兩個設定註解取消
    input(type="imudp" port="514")
    
  2. 重新啟動服務,並且觀察 port 是否正確啟動了?
    [root@localhost ~]# systemctl restart rsyslog
    [root@localhost ~]# netstat -tlunp | grep rsyslog
    udp        0      0 0.0.0.0:514       0.0.0.0:*          3837/rsyslogd
    udp6       0      0 :::514            :::*               3837/rsyslogd
    
  3. 將防火牆設定中,port 514 解開
    [root@localhost ~]# firewall-cmd --info-service=syslog
    syslog
      ports: 514/udp
      protocols:
      source-ports:
    .....
    
    [root@localhost ~]# firewall-cmd --permanent --add-service=syslog
    [root@localhost ~]# systemctl restart firewalld.service
    [root@localhost ~]# firewall-cmd --list-services
    ftp http https ssh syslog
    
實際練習:兩兩同學成對,查詢對方的 IP 後,將自己的訊息複製一份到對方的 rsyslog 當中。
  1. 先設定 rsyslog.conf 的內容,加入底下這行:
    [root@localhost ~]# vim /etc/rsyslog.d/admin.conf
    *.*   /var/log/admin.log
    *.*   @172.16.60.100:514
    
  2. 重新啟動 rsyslog.conf ,再請對方查閱一下自己的 /var/log/messages 是否有收集到對方的登錄資訊。
    [root@localhost ~]# systemctl restart rsyslog
    

12.3.3:systemd-journald.service 簡介

rsyslog 僅是一隻服務,因此許多開機過程中產生的資訊都發生在啟動 rsyslog 之前,因此核心得要額外切出一些服務來記載資訊,這稍微困擾些。 現在系統使用 systemd 來管理,systemd 提供了systemd-journald 來協助記載登錄檔~因此在開機過程中的所有資訊, 包括啟動服務與服務若啟動失敗的情況等等,都可以直接被記錄到 systemd-journald 當中。

不過 systemd-journald 由於是使用於記憶體的登錄檔記錄方式,因此重新開機過後,開機前的登錄檔資訊當然就不會被記載了。 為此,CentOS 8 還是建議啟動 rsyslogd 來協助分類記錄!也就是說,systemd-journald 用來管理與查詢這次開機後的登錄資訊,而 rsyslogd 可以用來記錄以前及現在的所以資料到磁碟檔案中,方便未來進行查詢!

  • 使用 journalctl 列出登錄檔

systemd-journald 服務所產生的任何資訊,都可以透過 journalctl 這個指令來呼叫出來:

[root@localhost ~]# journalctl [-nrpf] [--since TIME] [--until TIME] [-u unit] _optional
# A. 顯示出最近 20 行的登錄檔內容訊息
[root@localhost ~]# journalctl -n 20

# B. 只找出與 chronyd 有關的登錄資訊
[root@localhost ~]# journalctl -u chronyd

# C. 持續偵測登錄資訊,直到按下 [ctrl]+c 為止
[root@localhost ~]# journalctl -f

# D. 只列出訊息等級 4, 亦即 warning 等級以上的訊息
[root@localhost ~]# journalctl -p warning

要注意 TIME 可以是英文代表 (yesterday,today..) 或者是詳細的年月日 (2020-05-26 00:00:00) 等等。至於常見的 _optional 則有:

  • _SYSTEMD_UNIT=unit.service :只輸出 unit.service 的資訊而已
  • _COMM=bash :只輸出與 bash 有關的資訊
  • _PID=pid :只輸出 PID 號碼的資訊
  • _UID=uid :只輸出 UID 為 uid 的資訊
例題 12.3.3-1: 熟悉使用 journalctl 查閱登錄資訊
  1. 不加任何參數與選項,列出所有的日誌資料
  2. (1)先用 date 找出日期格式 YYYY-MM-DD 的日期,並以該日期的資訊顯示 log,以及(2)僅今天及(3)僅昨天的日誌資料內容
  3. 只找出 crond.service 的資料,同時只列出最新的 10 筆即可
  4. 找出 su, login 執行的登錄檔,同時只列出最新的 10 筆即可

12.3.4:透過 logwatch 分析

如果系統能夠自動的分析登錄檔,之後做成類似報表的資料提供給管理員進行分析,則管理員會更加輕鬆。 CentOS 提供了 logwatch 這個分析軟體來提供管理員進一步分析登錄檔,管理員僅須安裝此軟體,系統即刻將 logwatch 排進行程, 未來管理員直接觀察 mail 即可。

例題 12.3.4-1: 安裝 logwatch 相關軟體,分析登錄資訊
  1. 使用 rpm 檢查是否已經安裝了 logwatch,若尚未安裝,請使用 yum 線上安裝
  2. 使用 rpm -ql 的方式,查詢 logwatch 的所有檔案,並找出與 cron 有關的設定檔名
  3. 承上,找到上述檔案後觀察內容,並將執行的方法『立刻』執行一遍
  4. 使用 root 的身份輸入 mail 查詢輸出的資訊

12.4:從原始碼安裝軟體

有的時候,我們需要的軟體可能官方網站並沒有提供,這個時候就得要自行安裝了。目前自由軟體很喜歡使用 github 的方式進行原始碼的釋出! 底下,我們將嘗試在 CentOS 8 上面安裝一套遊戲,並測試看看能不能安裝成功。這套遊戲請參考:

先依據上述的軟體安裝步驟,安裝需要的軟體們:

[root@station200 ~]# yum --enablerepo=PowerTools,epel install SDL2-devel libogg-devel libvorbis-devel \
> openal-soft-devel glibc32 freeglut-devel.x86_64 freetype-devel 

但是有一個音效軟體,目前 CentOS 8 並不支援!所以,我們拿 CentOS 7 的 SRPM (僅有原始碼與編譯流程, 不是編譯過的軟體) 來在我們的系統上重新編譯!若編譯成功,我們就可以直接安裝該軟體了!

[root@station200 ~]# wget https://dl.fedoraproject.org/pub/epel/7/SRPMS/Packages/f/freealut-1.1.0-21.el7.src.rpm
[root@station200 ~]# rpmbuild --rebuild freealut-1.1.0-21.el7.src.rpm
[root@station200 ~]# ll rpmbuild/RPMS/x86_64/
-rw-r--r--. 1 root root 48044  5月 26 16:33 freealut-1.1.0-21.el8.x86_64.rpm
-rw-r--r--. 1 root root 36052  5月 26 16:33 freealut-debuginfo-1.1.0-21.el8.x86_64.rpm
-rw-r--r--. 1 root root 31812  5月 26 16:33 freealut-debugsource-1.1.0-21.el8.x86_64.rpm
-rw-r--r--. 1 root root 24248  5月 26 16:33 freealut-devel-1.1.0-21.el8.x86_64.rpm
[root@station200 ~]# cd rpmbuild/RPMS/x86_64/
[root@station200 x86_64]# yum install ./freealut-1.1.0-21.el8.x86_64.rpm ./freealut-devel-1.1.0-21.el8.x86_64.rpm

開始使用原始碼下載的方式,用 git 自動從遠端主機下載程式碼,並且開始依據對方的說明,開始進行安裝流程:

[root@station200 ~]# cd /usr/local/src
[root@station200 src]# git clone https://github.com/viewizard/astromenace.git astromenace
[root@station200 src]# cd astromenace/
[root@station200 astromenace]# cmake -DCMAKE_BUILD_TYPE=Release ./
# 要顯示沒問題才行!
[root@station200 astromenace]# make
.....
VFS file was created /usr/local/src/astromenace/gamedata.vfs
[100%] Built target astromenace

出現上面的字樣,就是成功編譯完畢!然後,在圖形界面上面打開終端機,直接輸入『/usr/local/src/astromenace/astromenace』這個指令, 就可以開始玩遊戲了。不過,因為我們是虛擬機器,圖形界面的效能不好,因此無法很順暢的遊戲!

更多 Linux 遊戲,可以參考底下的網站來自行安裝遊玩!

12.5:課後練習操作

  • 上課的課後練習,非作業:
  1. 由原始碼的方式在本機系統上面編譯的行為:
    1. https://www.unidata.ucar.edu/downloads/netcdf/ 下載最新的 netcdf-c 程式,然後進行設定與安裝,最終將該軟體安裝到 /usr/local 目錄內。
    2. 嘗試使用 type -a ncdump,看看能不能找到該軟體所提供的指令,並使用 ncdump -h 確認軟體是否可用即可。
    3. 理解安裝後,將該軟體移除。
  2. 嘗試由 ELrepo 軟體倉儲,亦即是: http://elrepo.org/tiki/tiki-index.php 這個網站上面,處理一下相關的核心安裝:
    1. 依據 ELrepo 網站的介紹,安裝軟體數位簽章,同時安裝 repository 的設定檔,並將軟體倉儲設定為不啟用。
    2. 依據軟體倉儲的分類,選擇 kernel 相關倉儲,搜尋 kernel-ml 軟體,並且安裝他。
    3. 查詢 /lib/modules 的內容,看看有沒有最新的核心?同時,重新開機進入新的核心,測試核心版本是否正確?
    4. 重新開機使用預設的 4.18.xxx 的最新版本,然後移除 kernel-ml 相關軟體。
  • 作業 (不提供學生答案,僅提供教師參考答案)

作業硬碟一般操作說明:

  • 開啟雲端虛擬機器前,請務必確認你開啟的硬碟是『unit12』,否則就會做錯題目
  • 若要使用圖形界面,請務必使用 student 身份登入,若需要切換身份,再啟用終端機處理。
  • 若有簡答題需要使用中文,請自行以第一堂課的動作自行處理輸入法安裝。
  • 每部虛擬機器均有獨特的網卡位址,請勿使用他人硬碟上傳,否則計分為 0 分。
  • 每位同學均有自己的 IP 尾數,請先向老師詢問您的 IP 尾數,才可以進行作業上傳。
  • 最終上傳作業結果,請務必使用 root 身份上傳。
  • 進入作業硬碟後,先用 root 身份執行 vbird_book_setup_ip , 執行流程請參考:vbird_book_setup_ip

作業當中,某些部份可能為簡答題~若為簡答題時,請將答案寫入 /home/student/ans.txt 當中,並寫好正確題號,方便老師訂正答案。 請注意,檔名寫錯將無法上傳!

請使用 root 的身份進行如下實做的任務。直接在系統上面操作,操作成功即可,上傳結果的程式會主動找到你的實做結果。 另外,由於底下的題目有部分需要實作後提供答案,故開始實作前,請先回答 ans12.txt 內的問題再繼續往下處理

  1. (15%)請回答下列問題,並將答案寫在 /root/ans12.txt 檔案內:
    1. 請查出 /etc/sudoers 這個檔案屬於哪一個軟體 (1)寫下查詢的指令與 (2)寫下查詢的結果
    2. 承上,上面查到的這個軟體中,該軟體內有那些檔案被修改過?(1)寫下查詢的指令與 (2)寫下查詢的結果
    3. (從本題以後,請完成網路設定後再繼續實作與回答下列問題) 承上,上面查到的軟體中,如果因為有問題,所以需要重新安裝,可以使用怎麼樣的指令直接線上重新安裝? 請寫下安裝的指令
    4. 有個檔名為 misc_conv.3.gz ,這個檔案屬於哪個軟體?(1)寫下查詢的指令與 (2)寫下查詢的結果
    5. root 曾經在某個時段利用 sudo 做過【 cat /etc/shadow 】這個指令,請依據登錄檔的查詢結果, (1)將查詢到的登錄資訊轉存到這個檔案的這個段落來 (2)root執行的時間點是甚麼時候 (日/月/時/分)
  2. (20%)系統的基礎設定-網路的設定部份:
    1. 由於我們的系統是經過 clone 出來的,因此所有的設備恐怕都怪怪的。所以,請先將系統中的 ens3 這個網路連線刪除。
    2. 請依據底下的說明,重新建立 ens3 這個網路連線:
      • 使用的介面卡為 ens3 這個介面卡,且建立的連線名稱也是 ens3
      • 需要開機就自動啟動這個連線
      • 網路參數的設定方式為手動設定,不要使用自動取得喔
      • IP address 為: 192.168.251.XXX/24 (XXX 為上課時,老師給予的號碼)
      • Gateway 為: 192.168.251.254
      • DNS server IP為:請依據老師課後說明來設定 (若無規定,請以 168.95.1.1 及 8.8.8.8 這兩個為準)
      • 主機名稱:請設定為 stdXXX.book.vbird (其中 XXX 為上課時,老師給予的號碼)
      務必記得設定完畢後,一定要啟用這個網路連線,否則成績無法上傳喔!
  3. (35%)使用網路安裝相關軟體
    1. 啟用 AppStream, BaseOS, PowerTools, extras 這四個軟體倉儲,另外,底下的題目完成後,還會有 epel 及 epel-modular 共 6 個軟體倉儲的啟用。
    2. 請以貴校的 FTP 或 http 為主,設定好你的 CentOS server 的 YUM 設定檔。以崑山來說,可使用 http://ftp.ksu.edu.tw/ 來查詢所需要的四個軟體倉儲的網址,這四個分別是 AppStream, BaseOS, extras, PowerTools。
    3. 請使用 yum 這個指令的相關功能,找到有關【 epel 】的關鍵字軟體,並且安裝該軟體
    4. 立刻執行一次全系統升級。
    5. 請設定每天凌晨 3 點自動背景進行全系統升級。
    6. 這部主機需要有個科技用的軟體 netcdf-fortran,請安裝這套軟體
    7. 這部主機需要作為未來開發軟體之用,因此需要安裝一個開發用的軟體群組,請安裝他。
  4. (15%)登錄檔處理
    1. 請透過相關動作,讓你的全部登錄資訊 (info 以上等級) 寫入 /var/log/full.log 檔案內
    2. 請讓所有的登錄資訊在進行 log rotate 時,必須要有壓縮
    3. 請安裝 logwatch ,以便未來登錄檔的查詢之用。
  5. (15%)安裝原始碼
    1. 依據 12.5 上課後練習的 A 點說明,請在你的系統上面安裝了 netcdf-c 軟體,最終可以在 /usr/local/bin 裡面發現 ncdump 這個執行檔即可。

作業結果傳輸:請以 root 的身分執行 vbird_book_check_unit 指令上傳作業結果。 正常執行完畢的結果應會出現【XXXXXX_aa:bb:cc:dd:ee:ff_unitNN】字樣。若需要查閱自己上傳資料的時間, 請在作業系統上面使用瀏覽器查詢: http://192.168.251.254 檢查相對應的課程檔案。 相關流程請參考: vbird_book_check_unit

修改歷史:
  • 2016/05/18:加油!
  • 2017/04/03:增加了習題囉!趕快加油處理處理!
  • 2020/05/26:加入 yum 的指令修改設定檔、elrepo 的使用、Linux 遊戲的安裝、SRPM 轉成 RPM 的方法等等,就怕講不完...
  • 2020/06/01:加入了習題的處理!
2020/05/26 以來統計人數
計數器
伺服器篇文件
各版本彙整說明
CentOS 6.x