筆記整理開始時間:2018年4月13日20:39:04node
本章內容:正則表達式
使用locate命令數據庫
使用find命令bash
壓縮和解壓縮工具ide
文件查找:工具
在文件系統上查找符合條件的文件ui
文件查找:locate,find.net
非實時查找(數據庫查找):locate對象
實時查找:find索引
locate:
查詢系統上預建的文件索引數據庫
/var/lib/mlocate/mlocate.db
依賴於事先構建的索引
索引的構建是在系統較爲空閒是自動進行(週期性任務),管理員手動更新數據庫
updatedb
索引構建過程須要便利整個根文件系統,極消耗資源
工做特色:
查找速度快
模糊查找
非實時查找
搜索的是文件的全路徑,不只僅是文件名
可能只搜索用戶具有讀取和執行權限的目錄
(好比普通用戶不能搜索/root下的文件)
locate命令:
locate KEY1 KEY2...
搜索文件,默認全路徑匹配,且key1 key2之間是或關係
-i 忽略大小寫
-n N 只列舉前N個匹配項目
-r 使用正則表達式
-b 只匹配文件名
-c 只打印匹配條數,不顯示搜索到的文件
-A key1 key2 搜索同時知足全部關鍵詞的文件且關係
-e 只顯示目前存在的文件
-S 不搜索文件,顯示數據庫信息
實例:
locate -c net conf
搜索路徑或文件名中帶有net或conf 的文件,僅顯示匹配的數量
[root@sentos7 ~]$locate -c net conf
9616
locate -A -c net conf
搜索路徑或文件名中帶有net和conf 的文件,僅顯示匹配的數量
[root@sentos7 ~]$locate -A -c net conf
238
搜索.conf或者.net結尾的文件
[root@sentos7 ~]$locate -c -r '\(\.conf$\)\|\(\.net$\)'
2439
[root@sentos7 ~]$locate -c -r '\(\.net$\)'
6
[root@sentos7 ~]$locate -c -r '\(\.conf$\)'
2433
PS:使用正則表達式(regex)的時候,key只能有一個,不能多個
find:
實時查找工具,經過遍歷指定路徑完成文件查找
工做特色:
查找速度略慢
精確查找
實時查找
可能只搜索用戶具有讀取和執行權限的目錄
語法:
find [option]..[查找路徑][查找條件][處理動做]
查找路徑:指定具體目標路徑;默認爲當前目錄
查找條件:指定的查找標準,能夠文件名,大小,類型,權限等標準進行
默認爲找出指定路徑下的全部文件
處理動做:對符合條件的文件作操做,默認輸出至屏幕
查找條件:
指定搜索層級:
-maxdepth level 最大搜索目錄深度,指定目錄爲第1級
-mindepth level 最小搜索目錄深度
根據文件名和inode查找:
-name "文件名稱": 支持使用glob
*,?,[],[^]
-iname "文件名稱": 不區分字母大小寫
-inum n 按照inode號查找
-samefile name 相同inode號的文件
-links n 連接數爲n的文件
-regex "pattern": 以pattern匹配整個文件路徑字符串,而不只僅是文件名稱
例:
find /etc/ -maxdepth 2 -name passwd
find / -name f12*
find / -regex .*f123.*
find / -maxdepth 5 -mindepth 5 -links 4
find / -inum 68645312
根據屬主、屬組查找:
-user username 查找屬主爲指定用戶(UID)的文件
-group groupname 查找屬組爲指定(GID)的文件
-uid UserID 查找屬主爲指定的UID號的文件
-gid GroupID 查找屬主爲指定的GID號的文佳
-nouser 查找沒有屬主的文件
-nogroup 查找沒有屬組的文件
根據文件類型查找:
-type TYPE:
f 普通文件
d 目錄文件
l 符號連接文件
s 套接字文件
b 塊設備文件
c 字符設備文件
p 管道文件
空文件或目錄
-empty
find / -type d -empty
組合條件:
與: -a
或: -o
非: -not,!
德·摩根定律
(非a)或(非b)=非(a且b)
(非a)且(非b)=非(a或b)
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
示例:
find / -name snow
find / -inmae Snow
find / -name *.txt
find /var -name *.log* -a -regex ".*log$"
find -user joe -group joe
fing / -user joe -o -group joe
find -not \( -user joe -o -user jane \)
find -not -user joe -not -user jane
find / -user joe -o -uid 500
找出/目錄下,屬主不是root,且文件名不以f開頭的文件
find / -not -user root -name "[^f]*" |wc -l
563
find / \( -not -user root -a -not -name "f*" \)|wc -l
563
find / -not \( -user root -o -name "f*" \)|wc -l
563
排除目錄
示例:
查找/etc下,除/etc/sane.d目錄的其餘全部.conf後綴的文件
find /etc -path "/etc/same" -a -prune -o -name *.conf
查找/etc/下,除/etc/sane.d和/etc/fonts兩個目錄的全部.conf後綴的文件
find /etc \( -path "/etc/sane.d" -o -path "/etc/fonts" \) -a -prune -o -name *.conf
根據文件大小來查找:
-size [+|-]#unit
經常使用單位:k M G c(byte)
#UNIT:(#-1,#]
如:6k表示(5k,6k]
-#UNIT:(0,#-1]
如:-6k 表示[0,5k]
+#UNIT: (#,以上]
如:+6k 表示(6k,以上)
根據時間戳:
以「天」爲單位;
-atime[+|-]#,
#:[#,#+1) find / -atime 5 表示5-6天
+#:[#+1,以上] +5 6天之內
-#:[0,#) -5 5天以上
-mtime
-ctime
以」分鐘「爲單位
-amin find / -amin 5 5-6分鐘
-mmin -5 5分鐘之內
-cmin +5 6分鐘以上
根據權限查找:
-perm[/|-]mode
mode 精確權限匹配
/mode 任何一類(u,g,o)對象的權限中只要能有一位匹配便可,或關係
-mode 每一類對象都必須同時擁有指定權限,與關係
find -perm -222
要轉換成010 010 010 ugo必需要都寫權限才符合
find -perm /421
100 010 001 u+r g+w o+x 只須要有一位知足就好了
0表示不關注
find -perm 002 只要o 有 w 權限就匹配 不關注ug位
處理動做:
-print 默認的處理動做,顯示至屏幕
-ls 相似於對查找到的文件執行ls -l 命令
-delete 刪除查找到的文件
-fls file 查找到的全部文件的長格式信息保存至指定文件中
-ok command {} \; 找到的每一個文件執行由command指定的命令,對於
每一個文件執行命令以前,都會交互式要求用戶確認
find /root -name "f*" -ok cp {} /data {}.org \;
-exec command {} \;
對查找到的每一個文件執行由COMMAND指定的命令,不須要確認
{}:用於引用查找到的文件名稱自己
find 傳遞查找到的文件至後面指定的命令是,查找到全部符合條件的文件一次
性傳遞給後面的命令
xargs:參數替換
因爲不少命令不支持管道|來傳遞參數,而平常工做中有這個必要,全部就有了
xargs命令
xargs用於產生某個命令的參數,xargs能夠讀入stdin的數據,而且以空格符
或回車符將stdin的數據分隔成爲 arguments
注意:文件名或者是其餘意義的名詞內含有空格符的狀況
有些命令不能接受過多參數,命令執行可能會失敗,xargs能夠解決
示例:
ls f* |xargs rm
ls -R /data |xargs rm -rf
find / -perm +666|ls -l 這個是個錯誤的,ls不支持stdin
fing / -perm 666| xargs ls -l 用xargs 傳遞參數
echo f{1..1000000} |xargs -n1 touch
ls | xargs rm -f
find 示例:
備份配置文件,添加.orig這個擴展名
find /etc -name "*.conf" -exec cp -v {} {},orig \;
注意,若是更換目錄備份,好比備份到/data下
find -name "*.conf" -exec cp {} /data/{},orig \;
這是個錯誤命令,會提示目錄不存在
/data//etc/mcelog/mcelog.conf,orig’: No such file or directory
提示刪除存在時間超過3天以上的joe的臨時文件
find /tmp -ctime +2 -user joe -ok rm {} \;
在主目錄中尋找可被其餘用戶寫入的文件
find ~ -perm -002
查找/data下的權限爲644 後綴爲sh的普通文件,增長執行權限
find /data -type f -perm 644 -name "*.sh" exec chmod +x {} \;
查看/home的目錄
find /home -type d -ls
Gnome 搜索工具
位置-->搜索文件。。
圖形化搜索工具,可搜索
命令、內容、用戶、組羣、大小、修改時間
壓縮、解壓縮及歸檔工具
file-roller
compress/uncompress: .Z
gzip/gunzip: .gz
bzip2/bunzip2 .bz
xz/unxz .xz
zip/unzip
tar
cpoi
compress/uncompress
compress [-dfvcVr] [-b maxbits] [file..]
-d 解壓縮,至關於uncompress
-c > file.Z 壓縮和解壓縮結果輸出至標準輸出,不刪除源文件
-v 顯示詳情
-r 若是對目錄使用compress -r dir 會將目錄內的文件分別進行壓縮
uncompress: 解壓縮
zcat file.Z >file 相似compress -c 利用重定向解壓 不刪除壓縮文件
PS:
壓縮比不高,且過小的文件不支持壓縮
gzip/gunzip
gzip []option]... file...
-d 解壓縮,至關於gunzip
-c 將壓縮或解壓縮的結果輸出至標準輸出
-# 指定壓縮比,1-9
zcat:m.gz > m 不解壓的狀況下查看內容,能夠重定向解壓
bzip2/bunzip2/bzcat
bzip2 [option].. file..
-k 保留原文件
-d 解壓縮
-# 壓縮比,1-9,默認爲9
bzcat:不解壓的狀況下查看文本文件內容
xz/unxz/xzcat
xz [option]..file..
-k 保留原文件
-d 解壓縮
-# 壓縮比1-9 默認6
xzcat:不顯示解壓縮的前提查看文本文件內容
zip/unzip
zip -r file dir1
將dir1 打包壓縮到file.zip
解包解壓縮:
unzipfile file.zip
man bash | zip man -
接受輸入且打包爲man.zip(若是直接解壓出來,文件名爲 - )
unzip -p man.zip > man 將文本解壓寫入文件
tar:
tar -cpvf /pash/file.tar /dir|file...
將/dir或者file... 打包放到/pash/file.tar
-c 指定文件file.tar
-p 保留文件屬性
-v 可視
-f 後面(必須)跟文件 不可寫成-cfpv之類的
tar -tvf file.tar
預覽打包中的文件列表
tar -xvf fiel.tar
解包到當前文件
tar -xvf file.tar -C /dir
解包到目錄/dir
打包的同時能夠壓縮:
tar -zcvpf file.tar.gz /dir 打包同時壓縮成gz文件 .tgz
tar -jcvpf file.tar.bz /dir 打包同時壓縮成bz文件 .tbz
tar -Jcvpf file.tar.xz /dir 打包同時壓縮成xz文件 .txz
解包不須要特殊處理,-xvf 能夠所有解包解壓縮
-T 選項指定輸入文件(目錄)
-X 選項指定包含要排除的文件列表
tar zcvf file.tgz -T list.txt -X exlist.txt
split :分割大的tar文件爲多份小文件
split -b 10M -d file.tar a.tar
-b size
-d 指定後綴名爲數字
將file.tar 按照10M大小分割,且文件名爲數字後綴 a.tar(00,01,..)
如不加-d 默認爲字母后綴(a,b,c...)
合併
cat a.tar* > file.tar
cpio:
功能:複製文件或歸檔
cpio命令是經過重定向的方式將文件進行打包備份,還原恢復的工具,他能夠
解壓以".cpio"或者".tar"結尾的文件
cpio >|< 文件或者設備名
選項:
-o 將文件拷貝打包成文件或者將文件輸出到設備上
-i 解包,將打包文件解壓或將設備上的備份還原到系統
-t 預覽,查看文件內容或者輸出到設備上的文件內容
-v 顯示打包過程當中的文件名稱。
-d 解包生成目錄,在cpio還原時,自動的創建目錄
-c 一種較新的存儲方式
示例:
find /etc -print | cpio -ov > etc.cpio ;rm -rf /etc
將/etc目錄備份;而後刪除/etc目錄
cpio -tv < etc.cpio
預覽文件
cpio -idv < etc.cpio
恢復/etc目錄
筆記整理完成時間:2018年4月15日17:52:26