第10章 查找壓縮

一、文件查找

1.簡介

(1)grep:對文件內容進行過濾

(2)find:文件查找,針對文件名

(3)locate:文件查找,依賴數據庫

(4)which:針對命令查找

2.對於命令文件查找

(1)例題:查找ls或vim命令的位置

方法一:#which  ls     從PATH環境變量

(PATH就是一個字符串變量,當輸入命令的時候LINUX會去查找PATH裏面記錄的路徑。)

方法二:#whereis  vim

3.對任意文件的查找

A.  locate    

(查詢的數據庫: /var/lib/mlocate/mlocate.db)

計劃任務:每天自動更新數據庫 /etc/cron.daily/mlocate.cron
手動更新數據庫:updatedb

#touch abc.txt

#locate abc.txt

無,爲什麼----因爲沒有更新數據庫(默認一 天一 更新)

#updatedb

#locate abc.txt

有,新建的文件已經在數據庫中得到信息更新


擴展:

1.如果你的機器沒有locate命令,你該怎麼辦呢?

yum provides  locate

yum install -y mlocate

2.在mnt目錄中的文件無法用locate搜索。

在/tmp目錄中的文件也無法用locate搜索


B. find

(1)按文件名

[root@bjz ~]# find     /etc      -name     "ifcfg-ens32"
[root@bjz ~]# find    /etc      -iname     "ifcfg-ens32"       //-i忽略大小寫
[root@bjz ~]# find    /etc      -iname      "ifcfg-ens*"


(2)按文件大小

[root@bjz ~]#find   /etc  -size  +5M   //大於5M

[root@bjz ~]#find   /etc  -size   -5M    //小於5M

[root@bjz ~]#find   /etc  -size   5M    //等於5M

[root@bjz ~]#find   /etc  -size   5M    -ls      //-ls找到後的處理動作(ls長格式顯示)

(3)按查找的目錄的深度

[root@bjz ~]# find  /  -maxdepth 3  -a  -name  "ifcfg-en*"      -------(-a  是 and 的意思)

[root@bjz ~]# find  /  -maxdepth 4  -a  -name  "ifcfg-en*"

(4)按時間查找(atime,mtime,ctime):

 

時間的概念

 atime:(access time)顯示的是文件中的數據最後被訪問的時間,比如系統的進程直接使用或通過一些命令和腳本間接使用。(執行一些可執行文件或腳本)
 mtime: (modify time)顯示的是文件內容被修改的最後時間,比如用vi編輯時就會被改變。(也就是Block的內容)
 ctime: (change time)顯示的是文件的權限、擁有者、所屬的組、鏈接數發生改變時的時間。當然當內容改變時也會隨之改變(即inode內容發生改變和Block內容發生改變時)

       

按時間找(atime,mtime,ctime):

[root@bjz ~]# find   /etc    -mtime  +5           //修改時間超過5天
[root@bjz ~]# find   /etc    -mtime  5            //修改時間等於5天
[root@bjz ~]# find   /etc    -mtime  -5          //修改時間5天以內


(5)按文件屬主、屬組查找

[root@bjz ~]# find   /home   -user  jack  -a  -group  hr     //-a和
[root@bjz ~]# find   /home   -user  jack  -o  -group  hr    //-o或


(6)按文件類型查找

[root@bjz ~]#find   /dev  -type  f    //f普通文件

d---目錄    l---鏈接文件   b--塊文件   c---字符文件    s---套接字文件   p---管道文件

(7)按文件權限查找

普通權限----        [root@bjz ~]#find   .  -perm  644   -ls     (尋找  .  <點> 當前目錄下權限爲644的文件  -ls長格式顯示)

高級權限----        [root@bjz ~]#find   /usr/bin  /usr/sbin  -perm  -4000  -ls   //包含set uid

                            [root@bjz ~]#find   /usr/bin  /usr/sbin  -perm  -2000  -ls   //包含set gid

                            [root@bjz ~]#find   /usr/bin  /usr/sbin  -perm  -1000  -ls   //包含sticky

(8)按正則表達式

[root@bjz ~]#find  /etc/  -regex   '*ifcfg-ens3[0-9]'    (-regex 正則表達式   [0-9]任意一個數字)

(9)找到後處理的動作 ACTIONS

# find /etc -name "ifcfg*"
# find   /etc   -name   "ifcfg*"   -print                                    //打印,默認選項
# find   /etc   -name   "ifcfg*"   -ls                                       //長格式輸出
# find   /etc   -name   "775*"   -delete                                //775.txt是自定義文件
# find   /etc   -name   "ifcfg*"   -exec cp -rvf {} /tmp \;        //不提示,不詢問
# find   /etc   -name   "ifcfg*"   -ok cp -rvf {} /tmp \;           //提示,詢問
# find   /etc   -name   "775*"   -exec rm -rf {} \;

(10)find 結合xargs

擴展知識:find結合xargs
[root@bjz ~]# find  .  -name  "123*.txt"  |xargs  rm -rf

[root@bjz ~]# find  /etc  -name  "ifcfg-eth0"  |xargs  -I {} cp -rf {}   /var/tmp    

因爲cp  -rf   命令後面需要跟多個參數,所以用   -I  (大寫)不是L 來標記一個參數,用{}來標記cat  file.txt輸出的內容作爲源文件

加-i 參數直接用 {}就能代替管道之前的標準輸出的內容;

加 -I 參數 需要事先指定替換字符

二、文件的打包、壓縮及解壓

1.對於較小的文件,直接進行互聯網上用戶之間的傳輸的命令

#du  -sh   /etc/test     ----查看文件夾的大小(-s或--summarize僅顯示統計,h人性化顯示)

#time  scp -r  /etc/test  [email protected]:/tmp   (time 是對後面命令的操作時間進行統計)

2.對於較大的文件,要先進行打包壓縮再進行傳輸

(1)打包、壓縮

語法:tar  選項  壓縮包名稱  源文件

#tar  -czf  etc-gizp.tar.gz  /etc/      -----c創建,z是gzip,f是文件。etc-gizp.tar.gz自定義的壓縮包名稱

===打包,壓縮===

# tar -czf   etc-gzip.tar.gz /etc/        //z是gzip
# tar -cjf    etc-bzip.tar.bz /etc/        //j是bzip
# tar -cJf    etc-xzip.tar.xz /etc/        //J是xzip
觀察三個包的體積。
# ll -h etc*
-rw-r--r--. 1 root root  11M 10月 14 10:07 etc-gzip.tar.gz
-rw-r--r--. 1 root root 8.9M 10月 14 10:08 etc-bzip.tar.bz
-rw-r--r--. 1 root root 7.6M 10月 14 10:08 etc-xzip.tar.xz

壓縮速度和壓縮體積成反比。

(2)解壓、解包

#tar -tf  sys.tar.xz     ----t查看f文件名,是不解壓查看壓縮文件中的內容

#tar  -xzf  etc1.tar.gz   ----x解壓z調用gzip

#tar  -xvf  etc1.tar.gz   ----v顯示執行過程,直接寫xf,系統會自動判斷

#tar   -xvf  etc1.tar.gz  -C  /tmp   -----(-C重定向到/tmp目錄)

終極大法:

# tar  xf  etc3.tar.xz     //簡單粗暴


擴展:解壓zip-----#unzip   xxx.zip


案例1:MySQL數據庫備份

案例1:mysql物理備份及恢復

yum -y install mariadb-server
systemctl start mariadb
mkdir /backup
tar -cJf /backup/mysql.tar.xz /var/lib/mysql

rm -rf /var/lib/mysql
tar -xf /backup/mysql.tar.xz  -C  /

案例2:mysql物理備份及恢復(無路徑)

[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# tar -cJf /backup/mysql.tar.xz *
[root@localhost mysql]# tar -xf /backup/mysql.tar.xz -C /var/lib/mysql

進入工作目錄,備份就不會包含絕對路徑。案例1和2注意路徑問題。

案例3(壓縮至內存)(瞭解)

    案例3:host A /etc (海量小文件) --------> host A /tmp

[root@localhost ~]# tar  -czf  -  /etc  |tar  -xzf  -   -C /tmp

czf 後的“-”代表先保存到內存中。

xzf後的"-"指的是前面的內存數據

案例4(海量小文件)(瞭解)

    案例4:host A的 /etc (海量小文件) --------> host B的 /tmp
常規方法:

[root@localhost ~]# scp  -r  /etc  172.16.20.21:/tmp


擴展方法nc方法:
==host B 監聽端口(192.168.100.20:8888)==
[root@hostB ~]# systemctl stop firewalld.service    //關閉防火牆
[root@hostB ~]# nc -l   8888 |tar -xzf -  -C /tmp     //啓動監聽程序8888,解壓到內存,然後-C重定向到/tmp

==host A 連接B 的端口==
[root@hostA ~]# tar  -czf  -  /etc | nc 192.168.100.20  8888
tar: Removing leading `/' from member names

發佈了34 篇原創文章 · 獲贊 2 · 訪問量 4453
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章