## 18.1 什么是登錄文件
“詳細而確實的分析以及備份系統的登錄文件”是一個系統管理員應該要進行的任務之一。 那么什么是登錄文件呢?簡單的說,就是記錄系統活動信息的幾個文件, 例如:何時、何地 (來源 IP)、何人 (什么服務名稱)、做了什么動作 (訊息登錄啰)。 換句話說就是:記錄系統在什么時候由哪個程序做了什么樣的行為時,發生了何種的事件等等。
### 18.1.1 CentOS 7 登錄文件簡易說明
要知道的是,我們的 Linux 主機在背景之下有相當多的 daemons 同時在工作著,這些工作中的程序總是會顯示一些訊息, 這些顯示的訊息最終會被記載到登錄文件當中啦。也就是說,記錄這些系統的重要訊息就是登錄文件的工作啦!
* 登錄文件的重要性
為什么說登錄文件很重要,重要到系統管理員需要隨時注意他呢?我們可以這么說:
* 解決系統方面的錯誤:
用 Linux 這么久了,你應該偶而會發現系統可能會出現一些錯誤,包括硬件捉不到或者是某些系統服務無法順利運行的情況。 此時你該如何是好?由于系統會將硬件偵測過程記錄在登錄文件內,你只要通過查詢登錄文件就能夠了解系統作了啥事! 并且由[第十六章我們也知道 SELinux](../Text/index.html) 與登錄文件的關系更加的強烈!所以啰,查詢登錄文件可以克服一些系統問題啦!
* 解決網絡服務的問題:
你可能在做完了某些網絡服務的設置后,卻一直無法順利啟動該服務,此時該怎辦?去廟里面拜拜抽簽嗎? 三太子大大可能無法告訴你要怎么處理呢!由于網絡服務的各種問題通常都會被寫入特別的登錄文件, 其實你只要查詢登錄文件就會知道出了什么差錯,還不需要請示三太子大大啦!舉例來說,如果你無法啟動郵件服務器 (postfix), 那么查詢一下 /var/log/maillog 通常可以得到不錯的解答!
* 過往事件記錄簿:
這個東西相當的重要!例如:你發現 WWW 服務 (httpd 軟件) 在某個時刻流量特別大,你想要了解為什么時, 可以通過登錄文件去找出該時段是哪些 IP 在連線與查詢的網頁數據為何,就能夠知道原因。 此外,萬一哪天你的系統被入侵,并且被利用來攻擊他人的主機,由于被攻擊主機會記錄攻擊者,因此你的 IP 就會被對方記錄。這個時候你要如何告知對方你的主機是由于被入侵所導致的問題, 并且協助對方繼續往惡意來源追查呢?呵呵!此時登錄文件可是相當重要的呢!

**Tips** 所以我們常說“天助自助者”是真的啦!你可以通過 (1)察看屏幕上面的錯誤訊息與 (2)登錄文件的錯誤信息,幾乎可以解決大部分的 Linux 問題!
* Linux 常見的登錄文件文件名
登錄文件可以幫助我們了解很多系統重要的事件,包括登陸者的部分信息,因此登錄文件的權限通常是設置為僅有 root 能夠讀取而已。 而由于登錄文件可以記載系統這么多的詳細信息,所以啦,一個有經驗的主機管理員會隨時隨地查閱一下自己的登錄文件, 以隨時掌握系統的最新脈動!那么常見的幾個登錄文件有哪些呢?一般而言,有下面幾個:
* /var/log/boot.log:
開機的時候系統核心會去偵測與啟動硬件,接下來開始各種核心支持的功能啟動等。這些流程都會記錄在 /var/log/boot.log 里面哩! 不過這個文件只會存在這次開機啟動的信息,前次開機的信息并不會被保留下來!
* /var/log/cron:
還記得[第十五章例行性工作調度](../Text/index.html)吧?你的 crontab 調度有沒有實際被進行? 進行過程有沒有發生錯誤?你的 /etc/crontab 是否撰寫正確?在這個登錄文件內查詢看看。
* /var/log/dmesg:
記錄系統在開機的時候核心偵測過程所產生的各項信息。由于 CentOS 默認將開機時核心的硬件偵測過程取消顯示, 因此額外將數據記錄一份在這個文件中;
* /var/log/lastlog:
可以記錄系統上面所有的帳號最近一次登陸系統時的相關信息。[第十三章講到的 lastlog](../Text/index.html#uselinux_find) 指令就是利用這個文件的記錄信息來顯示的。
* /var/log/maillog 或 /var/log/mail/*:
記錄郵件的往來信息,其實主要是記錄 postfix (SMTP 協定提供者) 與 dovecot (POP3 協定提供者) 所產生的訊息啦。 SMTP 是發信所使用的通訊協定, POP3 則是收信使用的通訊協定。 postfix 與 dovecot 則分別是兩套達成通訊協定的軟件。
* /var/log/messages:
這個文件相當的重要,幾乎系統發生的錯誤訊息 (或者是重要的信息) 都會記錄在這個文件中; 如果系統發生莫名的錯誤時,這個文件是一定要查閱的登錄文件之一。
* /var/log/secure:
基本上,只要牽涉到“需要輸入帳號密碼”的軟件,那么當登陸時 (不管登陸正確或錯誤) 都會被記錄在此文件中。 包括系統的 login 程序、圖形接口登陸所使用的 gdm 程序、 su, sudo 等程序、還有網絡連線的 ssh, telnet 等程序, 登陸信息都會被記載在這里;
* /var/log/wtmp, /var/log/faillog:
這兩個文件可以記錄正確登陸系統者的帳號信息 (wtmp) 與錯誤登陸時所使用的帳號信息 (faillog) ! 我們在[第十章談到的 last](../Text/index.html#last) 就是讀取 wtmp 來顯示的, 這對于追蹤一般帳號者的使用行為很有幫助!
* /var/log/httpd/*, /var/log/samba/*:
不同的網絡服務會使用它們自己的登錄文件來記載它們自己產生的各項訊息!上述的目錄內則是個別服務所制訂的登錄文件。
常見的登錄文件就是這幾個,但是不同的 Linux distributions ,通常登錄文件的文件名不會相同 (除了 /var/log/messages 之外 )。所以說,你還是得要查閱你 Linux 主機上面的登錄文件設置數據, 才能知道你的登錄文件主要文件名喔!
* 登錄文件所需相關服務 (daemon) 與程序
那么這些登錄文件是怎么產生的呢?基本上有兩種方式,一種是由軟件開發商自行定義寫入的登錄文件與相關格式, 例如 WWW 軟件 apache 就是這樣處理的。另一種則是由 Linux distribution 提供的登錄文件管理服務來統一管理。 你只要將訊息丟給這個服務后,他就會自己分門別類的將各種訊息放置到相關的登錄文件去!CentOS 提供 rsyslog.service 這個服務來統一管理登錄文件喔!
不過要注意的是,如果你任憑登錄文件持續記錄的話,由于系統產生的信息天天都有,那么你的登錄文件的容量將會長大到無法無天~ 如果你的登錄文件容量太大時,可能會導致大文件讀寫效率不佳的問題 (因為要從磁盤讀入內存,越大的文件消耗內存量越多)。 所以啰,你需要對登錄文件備份與更新。那...需要手動處理喔?當然不需要,我們可以通過 logrotate (登錄文件輪替) 這玩意兒來自動化處理登錄文件容量與更新的問題喔!
所謂的 logrotate 基本上,就是將舊的登錄文件更改名稱,然后創建一個空的登錄文件,如此一來, 新的登錄文件將重新開始記錄,然后只要將舊的登錄文件留下一陣子,嗯!那就可以達到將登錄文件“輪轉”的目的啦! 此外,如果舊的記錄 (大概要保存幾個月吧!) 保存了一段時間沒有問題,那么就可以讓系統自動的將他砍掉, 免得占掉很多寶貴的硬盤空間說!
總結一下,針對登錄文件所需的功能,我們需要的服務與程序有:
* systemd-journald.service:最主要的訊息收受者,由 systemd 提供的;
* rsyslog.service:主要登錄系統與網絡等服務的訊息;
* logrotate:主要在進行登錄文件的輪替功能。
由于我們著眼點在于想要了解系統上面軟件所產生的各項信息,因此本章主要針對 rsyslog.service 與 logrotate 來介紹。 接著下來我們來談一談怎么樣規劃這兩個玩意兒。就由 rsyslog.service 這支程序先談起吧!畢竟得先有登錄文件,才可以進行 logrotate 呀!您說是吧!
* CentOS 7.x 使用 systemd 提供的 journalctl 日志管理
CentOS 7 除了保有既有的 rsyslog.service 之外,其實最上游還使用了 systemd 自己的登錄文件日志管理功能喔!他使用的是 systemd-journald.service 這個服務來支持的。基本上,系統由 systemd 所管理,那所有經由 systemd 啟動的服務,如果再啟動或結束的過程中發生一些問題或者是正常的訊息, 就會將該訊息由 systemd-journald.service 以二進制的方式記錄下來,之后再將這個訊息發送給 rsyslog.service 作進一步的記載。
systemd-journald.service 的記錄主要都放置于內存中,因此在存取方面性能比較好~我們也能夠通過 journalctl 以及 systemctl status unit.service 來查看各個不同服務的登錄文件! 這有個好處,就是登錄文件可以隨著個別服務讓你查閱,在單一服務的處理上面,要比跑到 /var/log/messages 去大海撈針來的簡易很多! 不過,因為 system-journald.service 里面的很多觀念還是沿用 rsyslog.service 相關的信息,所以,本章還是先從 rsyslog.service 先談起, 談完之后再以 journalctl 進一步了解 systemd 是怎么去記錄登錄文件日志功能的呦!
### 18.1.2 登錄文件內容的一般格式
一般來說,系統產生的訊息經過記錄下來的數據中,每條訊息均會記錄下面的幾個重要數據:
* 事件發生的日期與時間;
* 發生此事件的主機名稱;
* 啟動此事件的服務名稱 (如 systemd, CROND 等) 或指令與函數名稱 (如 su, login..);
* 該訊息的實際數據內容。
當然,這些信息的“詳細度”是可以修改的,而且,這些信息可以作為系統除錯之用呢! 我們拿登錄時一定會記載帳號信息的 /var/log/secure 為例好了:
```
[root@study ~]# cat /var/log/secure
Aug 17 18:38:06 study login: pam_unix(login:session): session opened for user root by LOGIN(uid=0)
Aug 17 18:38:06 study login: ROOT LOGIN ON tty1
Aug 17 18:38:19 study login: pam_unix(login:session): session closed for user root
Aug 18 23:45:17 study sshd[18913]: Accepted password for dmtsai from 192.168.1.200 port 41524 ssh2
Aug 18 23:45:17 study sshd[18913]: pam_unix(sshd:session): session opened for user dmtsai by (uid=0)
Aug 18 23:50:25 study sudo: dmtsai : TTY=pts/0 ; PWD=/home/dmtsai ; USER=root ; COMMAND=/bin/su -
Aug 18 23:50:25 study su: pam_unix(su-l:session): session opened for user root by dmtsai(uid=0)
|--日期/時間---|--H--|-服務與相關函數-|-----------訊息說明------>
```
我們拿第一筆數據 (共兩行) 來說明好了,該數據是說:“在 08/17 的 18:38 左右,在名為 study 的這部主機系統上,由 login 這個程序產生的訊息,內容顯示 root 在 tty1 登陸了,而相關的權限給予是通過 pam_unix 模塊處理的 (共兩行數據)。”有夠清楚吧!那請您自行翻譯一下后面的幾條訊息內容是什么喔!
其實還有很多的信息值得查閱的呢!尤其是 /var/log/messages 的內容。記得一個好的系統管理員, 要常常去“巡視”登錄文件的內容喔!尤其是發生下面幾種情況時:
* 當你覺得系統似乎不太正常時;
* 某個 daemon 老是無法正常啟動時;
* 某個使用者老是無法登陸時;
* 某個 daemon 執行過程老是不順暢時;
還有很多啦!反正覺得系統不太正常,就得要查詢查詢登錄文件就是了。

**Tips** 提供一個鳥哥常做的檢查方式。當我老是無法成功的啟動某個服務時,我會在最后一次啟動該服務后,立即檢查登錄文件, 先 (1)找到現在時間所登錄的信息“第一字段”; (2)找到我想要查詢的那個服務“第三字段”, (3)最后再仔細的查閱第四字段的信息,來借以找到錯誤點。
另外,不知道你會不會覺得很奇怪?為什么登錄文件就是登錄本機的數據啊~那怎么登錄文件格式中,第二個字段項目是“主機名稱”啊? 這是因為登錄文件可以做成登錄文件服務器,可以收集來自其他服務器的登錄文件數據喔!所以啰,為了了解到該訊息主要是來自于哪一部主機, 當然得要有第二個字段項目說明該信息來自哪一部主機名稱啰!
- 鳥哥的Linux私房菜:基礎學習篇 第四版
- 目錄及概述
- 第零章、計算機概論
- 0.1 電腦:輔助人腦的好工具
- 0.2 個人電腦架構與相關設備元件
- 0.3 數據表示方式
- 0.4 軟件程序運行
- 0.5 重點回顧
- 0.6 本章習題
- 0.7 參考資料與延伸閱讀
- 第一章、Linux是什么與如何學習
- 1.1 Linux是什么
- 1.2 Torvalds的Linux發展
- 1.3 Linux當前應用的角色
- 1.4 Linux 該如何學習
- 1.5 重點回顧
- 1.6 本章習題
- 1.7 參考資料與延伸閱讀
- 第二章、主機規劃與磁盤分區
- 2.1 Linux與硬件的搭配
- 2.2 磁盤分區
- 2.3 安裝Linux前的規劃
- 2.4 重點回顧
- 2.5 本章習題
- 2.6 參考資料與延伸閱讀
- 第三章、安裝 CentOS7.x
- 3.1 本練習機的規劃--尤其是分區參數
- 3.2 開始安裝CentOS 7
- 3.3 多重開機安裝流程與管理(Option)
- 3.4 重點回顧
- 3.5 本章習題
- 3.6 參考資料與延伸閱讀
- 第四章、首次登陸與線上求助
- 4.1 首次登陸系統
- 4.2 文字模式下指令的下達
- 4.3 Linux系統的線上求助man page與info page
- 4.4 超簡單文書編輯器: nano
- 4.5 正確的關機方法
- 4.6 重點回顧
- 4.7 本章習題
- 4.8 參考資料與延伸閱讀
- 第五章、Linux 的文件權限與目錄配置
- 5.1 使用者與群組
- 5.2 Linux 文件權限概念
- 5.3 Linux目錄配置
- 5.4 重點回顧
- 5.5 本章練習
- 5.6 參考資料與延伸閱讀
- 第六章、Linux 文件與目錄管理
- 6.1 目錄與路徑
- 6.2 文件與目錄管理
- 6.3 文件內容查閱
- 6.4 文件與目錄的默認權限與隱藏權限
- 6.5 指令與文件的搜尋
- 6.6 極重要的復習!權限與指令間的關系
- 6.7 重點回顧
- 6.8 本章習題:
- 6.9 參考資料與延伸閱讀
- 第七章、Linux 磁盤與文件系統管理
- 7.1 認識 Linux 文件系統
- 7.2 文件系統的簡單操作
- 7.3 磁盤的分區、格式化、檢驗與掛載
- 7.4 設置開機掛載
- 7.5 內存交換空間(swap)之創建
- 7.6 文件系統的特殊觀察與操作
- 7.7 重點回顧
- 7.8 本章習題 - 第一題一定要做
- 7.9 參考資料與延伸閱讀
- 第八章、文件與文件系統的壓縮,打包與備份
- 8.1 壓縮文件的用途與技術
- 8.2 Linux 系統常見的壓縮指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系統的備份與還原
- 8.5 光盤寫入工具
- 8.6 其他常見的壓縮與備份工具
- 8.7 重點回顧
- 8.8 本章習題
- 8.9 參考資料與延伸閱讀
- 第九章、vim 程序編輯器
- 9.1 vi 與 vim
- 9.2 vi 的使用
- 9.3 vim 的額外功能
- 9.4 其他 vim 使用注意事項
- 9.5 重點回顧
- 9.6 本章練習
- 9.7 參考資料與延伸閱讀
- 第十章、認識與學習BASH
- 10.1 認識 BASH 這個 Shell
- 10.2 Shell 的變量功能
- 10.3 命令別名與歷史命令
- 10.4 Bash Shell 的操作環境:
- 10.5 數據流重導向
- 10.6 管線命令 (pipe)
- 10.7 重點回顧
- 10.8 本章習題
- 10.9 參考資料與延伸閱讀
- 第十一章、正則表達式與文件格式化處理
- 11.1 開始之前:什么是正則表達式
- 11.2 基礎正則表達式
- 11.3 延伸正則表達式
- 11.4 文件的格式化與相關處理
- 11.5 重點回顧
- 11.6 本章習題
- 11.7 參考資料與延伸閱讀
- 第十二章、學習 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 簡單的 shell script 練習
- 12.3 善用判斷式
- 12.4 條件判斷式
- 12.5 循環 (loop)
- 12.6 shell script 的追蹤與 debug
- 12.7 重點回顧
- 12.8 本章習題
- 第十三章、Linux 帳號管理與 ACL 權限設置
- 13.1 Linux 的帳號與群組
- 13.2 帳號管理
- 13.3 主機的細部權限規劃:ACL 的使用
- 13.4 使用者身份切換
- 13.5 使用者的特殊 shell 與 PAM 模塊
- 13.6 Linux 主機上的使用者訊息傳遞
- 13.7 CentOS 7 環境下大量創建帳號的方法
- 13.8 重點回顧
- 13.9 本章習題
- 13.10 參考資料與延伸閱讀
- 第十四章、磁盤配額(Quota)與進階文件系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟件磁盤陣列 (Software RAID)
- 14.3 邏輯卷軸管理員 (Logical Volume Manager)
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十五章、例行性工作調度(crontab)
- 15.1 什么是例行性工作調度
- 15.2 僅執行一次的工作調度
- 15.3 循環執行的例行性工作調度
- 15.4 可喚醒停機期間的工作任務
- 15.5 重點回顧
- 15.6 本章習題
- 第十六章、程序管理與 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件與程序
- 16.5 SELinux 初探
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考資料與延伸閱讀
- 第十七章、認識系統服務 (daemons)
- 17.1 什么是 daemon 與服務 (service)
- 17.2 通過 systemctl 管理服務
- 17.3 systemctl 針對 service 類型的配置文件
- 17.4 systemctl 針對 timer 的配置文件
- 17.5 CentOS 7.x 默認啟動的服務簡易說明
- 17.6 重點回顧
- 17.7 本章習題
- 17.8 參考資料與延伸閱讀
- 第十八章、認識與分析登錄文件
- 18.1 什么是登錄文件
- 18.2 rsyslog.service :記錄登錄文件的服務
- 18.3 登錄文件的輪替(logrotate)
- 18.4 systemd-journald.service 簡介
- 18.5 分析登錄文件
- 18.6 重點回顧
- 18.7 本章習題
- 18.8 參考資料與延伸閱讀
- 第十九章、開機流程、模塊管理與 Loader
- 19.1 Linux 的開機流程分析
- 19.2 核心與核心模塊
- 19.3 Boot Loader: Grub2
- 19.4 開機過程的問題解決
- 19.5 重點回顧
- 19.6 本章習題
- 19.7 參考資料與延伸閱讀
- 第二十章、基礎系統設置與備份策略
- 20.1 系統基本設置
- 20.2 服務器硬件數據的收集
- 20.3 備份要點
- 20.4 備份的種類、頻率與工具的選擇
- 20.5 鳥哥的備份策略
- 20.6 災難復原的考慮
- 20.7 重點回顧
- 20.8 本章習題
- 20.9 參考資料與延伸閱讀
- 第二十一章、軟件安裝:源代碼與 Tarball
- 20.1 開放源碼的軟件安裝與升級簡介
- 21.2 使用傳統程序語言進行編譯的簡單范例
- 21.3 用 make 進行宏編譯
- 21.4 Tarball 的管理與建議
- 21.5 函數庫管理
- 21.6 檢驗軟件正確性
- 21.7 重點回顧
- 21.8 本章習題
- 21.9 參考資料與延伸閱讀
- 第二十二章、軟件安裝 RPM, SRPM 與 YUM
- 22.1 軟件管理員簡介
- 22.2 RPM 軟件管理程序: rpm
- 22.3 YUM 線上升級機制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
- 第二十三章、X Window 設置介紹
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析與設置
- 23.3 顯卡驅動程序安裝范例
- 23.4 重點回顧
- 23.5 本章習題
- 23.6 參考資料與延伸閱讀
- 第二十四章、Linux 核心編譯與管理
- 24.1 編譯前的任務:認識核心與取得核心源代碼
- 24.2 核心編譯的前處理與核心功能選擇
- 24.3 核心的編譯與安裝
- 24.4 額外(單一)核心模塊編譯
- 24.5 以最新核心版本編譯 CentOS 7.x 的核心
- 24.6 重點回顧
- 24.7 本章習題
- 24.8 參考資料與延伸閱讀