一、文件查找
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