# 第二章:CentOS的文件系統
## 修改文件的特殊屬性
`chattr`,可修改文件的多種特殊屬性:
- `a`,增加該屬性后,只能追加不能刪除,非root用戶不能設定該屬性
- `c`,自動壓縮該文件,讀取時會自動解壓;
- `i`,增加后,使文件不能被刪除、重命名、設定鏈接接、寫入、新增數據
`lsattr`,該命令用來讀取文件或者目錄的特殊權限
## 在linux下搜一個文件
- `which`,找命令。
- `locate`,針對已生成的全局文件樹索引對文件名進行搜索,但使用前需要先安裝`mlocate`且執行`updatedb`來生成文件樹索引;該命令僅支持按文件名進行搜索。
- `find`,遍歷查找指定目錄(不指定就針對整個系統進行查找);該命令支持多種篩選條件(可按`與或否`的邏輯關系進行串聯)進行查找,如:
- 文件名,通過`-name`和`-iname`參數傳入,支持通配符。
- 所屬用戶,通過`-user`參數傳入。
- 所屬組,通過`-group`參數傳入。
- 文件時間戳的相關屬性,通過`-atime`(Access time)/`-ctime`(Change time)/`-mtime`(Modify time)參數傳入,其中`-mtime`參數比較常用。
- 文件類型,通過`-type`參數傳入。
- 文件大小,通過`-size`參數傳入。
## 如何動態顯示一個不停增加內容的文件
- 使用`tail -f`可實時追蹤一個或多個文檔的所有更新,這個功能在調試程序時非常好用:
```
tail -f /var/log/mail.log /var/log/apache/error_log
```
## 查看文件/目錄占用磁盤大小
`du -sh filename`,解釋:
- `-s`,表示只列出目錄本身的數據。
- `-h`,系統自動調節單位。
## 壓縮和解壓縮
### gzip 壓縮工具
- linux下壓縮工具有多種,但最常用的是gzip,其它的使用起來也差不多。
- gzip只支持文件的壓縮,若要壓縮目錄,則需要使用下述的`tar`打包工具。
- 壓縮直接用`gzip sourcefile`,解壓則用`gzip -d zipfile`。
- 使用 gzip 壓縮的文件后綴一般為`.gz`。
### tar 打包工具
- tar 本身是一個打包工具,并不具有壓縮功能,但可以配合壓縮工具,一次性完成打包和壓縮的任務;通常情況下我們也不會只打包不壓縮,所以我們直接記住“一次性打包壓縮”的參數即可:
- `tar -czvf distfile sourcedir`,壓縮打包sourcedir到disfile。
- `tar -zxvf sourcefile`,解壓解包fourcefile到當前目錄。
- 解釋一下上面命令用到的參數:
- `-z`表示使用 gzip 壓縮工具;其實還可使用其它壓縮工具(如 bzip2 和 xz),但畢竟最常用的還是 gzip。
- `-c`(`c` for compress)表示壓縮打包,`-x`表示解壓解包。
- `-v`表示可視化。
- `-f`后面跟文件名(即`-f filename`),表示壓縮后的文件名為 filename,或當期需要解壓文件 filename。
- tar 除了可以打包目錄,還可以指定多個文件打包到一起:`tar -czvf files.tar.gz file1 file2 file3`。
- tar 命令支持查看(但不解壓)壓縮文件的內容,其參數為`-t`,但需要注意的是必須與`-f`同用,其用法為:`tar -tf file.tar.gz`。
### zip 壓縮工具
- 對比起上述介紹的 gzip 和 tar,zip 的功能更為強大,它可以壓縮(解壓)文件和目錄。
- 由于 zip 在 windows 系統上比較常用,因此如需與 windows 系統交換文件,可通過 zip 進行壓縮,這樣兩邊都可以識別。
- CentOS 默認不帶 zip 命令,需要通過`yum install -y zip`進行安裝。
- 壓縮文件用`zip distfile sourcefile`,壓縮目錄則用`zip distfile sourcedir`。
- 需要注意的是,當壓縮目錄下還有二級目錄甚至更多級目錄時,zip 命令僅僅是把二級目錄本身壓縮而已,如果想要一并壓縮二級目錄下的文件及更多級目錄,則必須加上`-r`,如`zip -r distfile sourcedir`。
- 解壓文件并不用 zip 命令,而是用`unzip`命令,如`unzip file.zip`。
- 除了基本的壓縮/解壓功能外,zip 還提供更多進階功能,如:使用密碼進行加密;設置壓縮級別;添加注釋,等等。