一、文件與存儲系統的inode與block
1.1、硬盤存儲
- 最小存儲單位:扇區(sector)
-
- 每個扇區大小:512字節
1.2、文件存取
- 最小存取單位:塊(block)
- 連續八個扇區組成:塊(block)
-
- 每個塊大小:4K
- 文件數據:實際數據與元信息
- 操作系統讀取硬盤的時候,是一次性連續讀取多個扇區,即一個塊一個塊的讀取的。
- 文件數據包括實際數據與元信息(類似文件屬性),文件數據存儲在“塊"中
1.3、inode
- 定義:存儲文件元信息的區域
- 包含:創建者、創建日期、文件大小、文件權限等的區域
- 特點:
-
- 一個文件必須占用一個inode
- 格式化文件系統時確定inode的總數
- 至少占用一個block
- 不包含文件名,文件名是存放在目錄當中的。
元信息包括
- 文件的字節數
- 文件擁有者的userid
- 文件的groupid
- 文件的讀,寫,執行權限
- 文件的時間戳
1.4、文件名與inode
- 文件名存放位置:目錄
- 譯名為"索引節點",也叫i節點
- inode號碼:操作系統識別文件的唯一標識,一個文件必須占用一個inode,并且至少占用一個block。
- 每個inode都有一個號碼,操作系統用inode號碼來識別不同的文件。Linux系統內部不使用文件名,而使用inode號碼來識別文件。
- 訪問文件流程:
- 根據文件名查找inode號碼
- 通過inode號碼獲取inode信息
- 檢查用戶權限
- 指向數據block并讀取數據
1.4.1、硬盤分區后的結構
文件夾的indoe號中包括當前文件夾中文件名字和文件的indoe號
先確定文件夾后再通過indoe找到block,如果一個block放不下數據,則可以占用多個block.
例如,有一個10kb的文件需要存儲,
則會占用3個block(默認一個是4k),雖然最后一個block不能占滿,
但也不能再放入其他文件的數據。
這3個block 有可能是連續的,也有可能是分散的,所以會有磁盤碎片。
1.4.2、訪問文件的簡單流程
1.5、Linux系統特點
- 一切皆文件
- 目錄也是一種文件
1.6、查看文件名對應的inode 號碼有兩種方式
- ls -i? 文件名
- stat? 文件名
很顯然stat看的更詳細一些
1.7、linux系統文件三個主要的時間屬性
- ctime(change time)
最后一次改變文件或目錄 (屬性)的時間
- atime(access time)
最后一次訪問文件或目錄的時間
- mtime(modify time)
最后一次修改文件或目錄(內容)的時間
1.8、inode 占用
inode也會消耗硬盤空間,所以格式化的時候,操作系統自動將硬盤分成兩個區域。
一個是數據區,存放文件數據,
另一個是inode區,存放inode所包含的信息。
每個inode的大小,一般是128字節或256字節。通常情況下不需要關注單個inode的大小,而是需要重點關注inode總數。inode的總數在格式化時就給定了,執行"df? ?-i"命令即可查看每個硬盤分區對應的的inode總數和已經使用的inode數量。
inode節點的總數,在格式化時就給定了,一般是每1KB或每2KB就設置一個inode。假定在一塊1GB的硬盤中,每個inode節點大小為128字節,每1KB就設置一個inode,那么inode table的大小就會達到128MB,占整塊硬盤12.8%。
由于inode號碼與文件名分離,導致Linux系統具備以下幾種特有的現象:
1.文件名包含特殊字符,可能無法正常刪除。可直接刪除inode,能夠起到刪除文件的作用;
2.移動文件或重命名文件,只是改變文件名,不影響inode 號碼;
3.打開一個文件以后,系統就以inode 號碼來識別這個文件,不再考慮文件名。
4.文件數據被修改保存后,會生成一個新的inode 號碼。
?1.8.1、實驗1
先創建大量空文件
for ((i=1; i<=8680; i++)); do touch /test/file$i
done
?或者
touch {1..8680}.txt?
i占用滿
?但是磁盤空間還有
當再創建其他的的時候
二、硬鏈接與軟鏈接
為文件或目錄建立鏈接文件
鏈接文件分類
硬鏈接
ln? 源文件目標位置
?軟鏈接
ln - s? 源文件或目錄? ?鏈接文件或目標位置
?詳細內容看精講第八段內容
云計算【第一階段(12)】Linux常用命令精講【二】_云計算怎么把目錄改名-CSDN博客
三、恢復誤刪除的文件
3.1、恢復誤刪除的文件ext3
EXT類型文件恢復
extundelete 是一一個開源的Linux 數據恢復工具,支持ext3、 ext4文件系統。 ( ext4只能在centos6版本恢復,但是目前企業用centos6版本極少,略過)
3.1.1、實驗1
安裝位置:切勿將extundelete安裝到你誤刪的文件所在硬盤上,以避免數據被覆蓋的風險
需要掛載一個ext3的盤
1.安裝依賴包
yum -y install e2fsprogs-devel e2fsprogs-libs gcc gcc-c++?
2.編譯安裝extundelete
cd /test
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
3.解壓
tar jxvf extundelete-0.2.4.tar.bz2
4.切換目錄
cd extundelete-0.2.4/
5.指定configure的配置路徑 --prefix
./configure --prefix=/usr/local/extundelete && make && make install 或
./configure && make && make install
6.如果配置了指定的上面路徑需要軟鏈接
ln -s /usr/local/extundelete/bin/* /usr/bin/
模擬刪除并執行恢復操作
cd /opt/yczj
切換到掛載點磁盤
添加數據
echo a>a
echo a>b
echo a>c
extundelete /dev/sdb2 --inode ?2? #查看文件系統/dev/sdb2下存在哪些文件,i節點是從2開始的,2代表該文件系統最開始的目錄。
rm -rf a b
extundelete /dev/sdb2??--inode 2
可以發現被刪除了
cd ~
umount /test
extundelete /dev/sdc1 --restore-all #恢復/dev/sdc1 文件系統下的所有內容
#在當前目錄下會出現一個RECOVERED_FILES/目錄,里面保存了已經恢復的文件
ls RECOVERED FILES/
3.2、恢復誤刪除的文件XFS
xfsdump用于創建xfs文件系統的備份,而xfsrestore則用于將這些備份數據恢復到原始狀態或指定位置,搭配使用。
xfsdump命令格式
xfsdump? ? -f? ? 備份存放位置? ? ? ? ? ?要備份的路徑或設備文件
xfsdump備份級別 (默認為0)
- 0:完全備份
- 1-9:增量備份
xfsdump常用選項:-f,-L,-M,-s
-f: 指定備份文件目錄
-L: 指定標簽session label
-M: 指定設備標簽media labe
-s:備份單個文件,-s后面不能直接跟路徑
xfsrestore命令格式
xfsrestore? ?恢復文件的位置? ? ? 存放恢復后文件的位置
xfsdump使用限制
- 只能備份已掛載的文件系統
- 必須使用root的權限才能操作
- 只能備份xfs文件系統
- 備份后的數據只能讓xfsrestore解析
- 不能備份兩個具有相同uuid的文件系統
實驗
首先創建分區,格式化xfs,掛載
在掛載的地方創建一個文件
先查看rpm -qa | grep xfsdump如果未安裝yum install -y xfsdump
備份
xfsdump -f? ? ? /opt/dump_sdb? ? /dev/sdb1? ? ? ?
可以加? ?-L dump_sdb -M sdb1
模擬刪除,在掛載目錄刪除
恢復
xfsrestore? -f? ?/opt/dump_sdb1? /opt/ycnh
四、分析日志文件
4.1、日志的功能
用于記錄系統,程序運行中發生的各種事件
通過閱讀日志,有助于診斷和解決系統故障
4.2、日志文件的分類
- 內核及系統日志
由系統服務rsyslog統一進行管理,日志格式基本相似
- 用戶日志
記錄系統用戶登錄及退出系統的相關信息
- 程序日志
由各種應用程序獨立管理的日志文件,記錄格式不統一。
4.3、日志保存位置
默認位于: /var/log/目錄下
主要日志文件介紹
- 內核及公共消息日志 /var/log/messages
- 計劃任務日志 /var/log/cron
- 系統引導日志 /var/log/dmesg
- 郵件系統日志 /var/log/maillog
-
用戶登錄日志 /var/log/lastlog? /var/log/secure? /var/log/wtmp? /var/run/btmp
4.3.1、常見的一些日志文件介紹:
/var/log/messages: 記錄Linux內核消息及各種應用程序的公共日志信息,包括啟動、IO錯誤、網絡錯誤、程序故障等。對于未使用獨立日志文件的應用程序或服務,一般都可以從該日志文件中獲得相關的事件記錄信息。
/var/log/cron: 記錄crond計劃任務產生的事件信息。
/var/log/dmesg: 記錄Linux系統在引導過程中的各種事件信息。
/var/log/maillog: 記錄進入或發出系統的電子郵件活動。
/var/log/secure: 記錄用戶認證相關的安全事件信息。
/var/log/lastlog: 記錄每個用戶最近的登錄事件。二進制格式
/var/1og/wtmp: 記錄每個用戶登錄、注銷及系統啟動和停機事件。二進制格式
/var/run/btmp: 記錄失敗的、錯誤的登錄嘗試及驗證事件。二進制格式
4.4、rsyslog
內核及系統日志由系統服務rsyslog 統一管理,主配置文件為/etc/rsyslog.conf
Linux操作系統本身和大部分服務器程序的日志文件都默認放在目錄/var/1og/下。
軟件包:rsyslog-7.4.7-16.el7.x86_64
主要程序:/sbin/rsyslogd
配置文件:/etc/rsyslog.conf
4.5、日志消息的級別
日志級別 | 級號 | 消息級別 | 說明 |
---|---|---|---|
EMERG | 0 | 緊急 | 會導致主機系統不可用的情況 |
ALERT | 1 | 警告 | 必須馬上采取措施解決的問題 |
CRIT | 2 | 嚴重 | 比較嚴重的情況 |
ERR | 3 | 錯誤 | 運行出現錯誤 |
WARNING | 4 | 提醒 | 可能會影響系統功能的事件 |
NOTICE | 5 | 注意 | 不會影響系統但值得注意的信息 |
INFO | 6 | 信息 | 一般信息,程序或系統調試信息等 |
DEBUG | 7 | 調試 | 詳細的調試信息,用于開發或故障排除 |
4.6、日志記錄的一般格式
4.7、用戶日志分析
保存了用戶登錄,退出系統等相關信息
- /var/log/lastlog: 最近的用戶登錄事件
- /var/log/wtmp: 用戶登錄,注銷及系統開,關機事件
- /var/run/utmp: 當前登錄的每個用戶的詳細信息
- /var/log/secure 與用戶驗證相關的安全性事件
分析工具
users,who,w, last, lastb
4.7.1、分析工具詳細分析命令
users:命令只是簡單地輸出當前登錄的用戶名稱,每個顯示的用戶名對應一個登錄會話。如果一個用戶有不止一個登錄會話,那他的用戶名將顯示與其相同的次數。
who:命令用于報告當前登錄到系統中的每個用戶的信息。使用該命令,系統管理員可以查看當前系統存在哪些不合法用戶,從而對其進行審計和處理。who 的默認輸出包括用戶名、終端類型、登錄日期及遠程主機
w:命令用于顯示當前系統中的每個用戶及其所運行的進程信息,比 users、who 命令的輸出內容要豐富一些
last:命令用于查詢成功登錄到系統的用戶記錄,最近的登錄情況將顯示在最前面。通過last 命令可以及時掌握 Linux 主機的登錄情況,若發現未經授權的用戶登錄過,則表示當前主機可能已被入侵
lastb:命令用于查詢登錄失敗的用戶記錄,如登錄的用戶名錯誤、密碼不正確等情況都將記錄在案。登錄失敗的情況屬于安全事件,因為這表示可能有人在嘗試猜解你的密碼。除了使用 lastb 命令查看以外,也可以直接從安全日志文件/var/log/secure 中獲得相關信息
4.8、程序日志分析
由相應的應用程序獨立進行管理
web服務:/var/log/httpd/
access_log,error_log
代理服務:/var/log/squid/
access.log,cache.log
FTP服務:/var/log/xferlog
分析工具
文本查看,grep過濾檢索, webmin管理套件中查看
awk, sed等文本過濾,格式化編輯工具
webalizer? Awstats等專用日志分析工具
4.9、日志管理策略
- 及時作好備份和歸檔
- 延長日志保存期限
- 控制日志訪問權限
日志中可能會包含各類敏感信息,如賬戶,口令等
- 集中管理日志
將服務器的日志文件發到統一的日志文件服務器,便于日志信息的統一收集, 整理和分析
杜絕日志信息的意外丟失, 惡意篡改或刪除。
4.10、日志管理工具
4.10.1、Logrotate
(輪轉,日志切割)? ? ? ?centos7 ?自帶的一個
概念
Logrotate是一個在Linux系統中廣泛使用的日志文件管理工具,主要用于日志文件的切割、壓縮、刪除和創建新日志文件等操作,以節省磁盤空間并方便日志管理
作用
1.如果沒有日志輪轉,日文件會越來越大
2.將丟棄系統中最舊的日志文件,以節省空間
3.logrotate本身不是系統守護進程,它是通過計劃任務crond每天執行計劃任務
Logrotate的常用參數
- -v, --verbose:顯示詳細的轉儲過程信息。
- -f, --force:強制進行日志轉儲,忽略配置文件中設置的時間間隔或大小限制。
- -d, --debug:測試配置文件是否有錯誤,但不實際執行轉儲操作。
- -m, --mail=command:壓縮日志后,通過指定的命令發送日志到指定郵箱。
- -s, --state=statefile:使用指定的狀態文件記錄轉儲的日志信息。
Logrotate的定時執行
- Logrotate通常通過cron服務定時執行。在Linux系統中,
/etc/cron.daily/logrotate?
腳本負責每天執行一次Logrotate。 - 用戶也可以根據需要手動執行Logrotate,例如使用
logrotate -vf /etc/logrotate.conf
?命令強制立即執行一次轉儲操作。
配置
- 計劃任務:/etc/cron.daily/logrotate
- 程序文件:/usr/sbin/logrotate
- 配置文件: /etc/logrotate.conf
- 日志文件:/var/lib/logrotate/logrotate.status
也可以在這里配置系統特定日志
以下是一個簡單的Logrotate配置示例,用于切割和壓縮/var/log/myapp.log
日志文件:
/var/log/myapp.log {
daily # 每天切割一次
rotate 7 # 保留7個備份
compress # 壓縮備份文件
missingok # 如果日志文件丟失,不報錯繼續滾動下一個日志
notifempty # 如果日志文件為空,不進行輪轉
create 640 myuser mygroup # 切割后創建新文件,并設置權限和所有者
}
?更多獨立配置文件詳解
配置參數 | 說明 |
---|---|
compress | 使用gzip壓縮轉儲后的日志文件 |
nocompress | 不對轉儲后的日志文件進行壓縮 |
copytruncate | 對于還在被打開中的日志文件,先備份當前日志并截斷原文件 |
nocopytruncate | 備份日志文件但不截斷原文件 |
create mode owner group | 使用指定的權限、所有者和所屬組創建新的日志文件 |
nocreate | 不創建新的日志文件(僅保留備份) |
delaycompress | 與compress一起使用時,延遲到下一次轉儲時才壓縮當前轉儲的日志文件 |
nodelaycompress | 覆蓋delaycompress選項,轉儲時立即壓縮日志文件 |
errors address | 將轉儲時的錯誤信息發送到指定的Email地址 |
ifempty | 即使是空文件也進行轉儲(默認行為) |
notifempty | 如果文件為空,則不進行轉儲 |
mail address | 將轉儲的日志文件發送到指定的E-mail地址 |
nomail | 轉儲時不發送日志文件到任何E-mail地址 |
olddir directory | 將轉儲后的日志文件放入指定的目錄(需與當前日志文件在同一文件系統) |
noolddir | 轉儲后的日志文件和當前日志文件放在同一個目錄下 |
prerotate/endscript | 在轉儲之前需要執行的命令(prerotate與endscript需單獨成行) |
postrotate/endscript | 在轉儲之后需要執行的命令(postrotate與endscript需單獨成行) |
daily | 指定轉儲周期為每天 |
weekly | 指定轉儲周期為每周 |
monthly | 指定轉儲周期為每月 |
rotate count | 指定日志文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5個備份 |
tabooext [+] list | 讓logrotate 不轉儲指定擴展名的文件,缺省的擴展名是:.rpm-orig ,?.rpmsave ,?v , 和~ |
size size | 當日志文件到達指定的大小時才轉儲(單位可以是bytes、KB或MB) |
sharedscripts | 對每個匹配的日志文件條目,prerotate 和postrotate 腳本只運行一次,無論匹配了多少個日志文件 |
nosharedscripts | 對每個轉儲的日志文件,都執行一次prerotate 和postrotate 腳本(默認行為) |
missingok | 如果日志不存在,不提示錯誤,繼續處理下一個日志文件 |
nomissingok | 如果日志不存在,提示錯誤(默認行為) |
4.10.2、webalizer日志分析工具
webalizer是一個高效的、免費的web服務器日志分析程序。其分析結果以HTML文件格式保存,從而可以很方便的通過web服務器進行瀏覽。Internet上的很多站點都使用webalizer進行web???????服務器日志分析。
Webalizer是用C寫的程序,所以其具有很高的運行效率。在主頻為200Mhz的機器上,webalizer每秒鐘可以分析10000條記錄,所以分析一個40M大小的日志文件只需要15秒。
webalizer支持標準的一般日志文件格式(Common Logfile Format);除此之外,也支持幾種組合日志格式(Combined Logfile Format)的變種,從而可以統計客戶情況以及客戶操作系統類型。并且現在webalizer已經可以支持wu-ftpd xferlog日志格式以及squid日志文件格式了。webalizer支持命令行配置以及配置文件。可以支持多種語言,也可以自己進行本地化工作。webalizer支持多種平臺,比如UNIX、linux、NT, OS/2 和 MacOS等。
軟件:httpd 作為webalizer的頁面服務器
?
4.10.3、journalctl命令
journalctl工具是CentOS-7才有的工具
Systemd 統一管理所有 Unit 的啟動日志。帶來的好處就是 ,可以只用journalctl一個命令,查看所有日志(內核日志和 應用日志)。日志的配置文件/etc/systemd/journald.conf?
ps -ef | grep journald
journalctl -b ? ?//查看本次啟動的日志
journalctl -k ? ? //查看內核日志
journalctl -xe ?經常用來查看最近報錯的日志
-e:從結尾開始看
-x:提供問題相關的網址
其他
日志工具可研究:Webmin、 Webalizer、Awstats等專用日志分析工具