一低零、文件查找工具
locate 非實時查找(數(shù)據(jù)庫查找)副硅,模糊匹配
依賴建立數(shù)據(jù)庫索引:updatedb命令
/var/lib/mlocate/mlocate.db 數(shù)據(jù)庫文件
索引構建過程需要遍歷整個根文件系統(tǒng)丙曙,極消耗資源
特點:
- 查找速度快
- 模糊查找
- 非實時查找
- 搜索的是文件的全路徑,不僅僅是文件名
- 可能只搜索用戶具備讀取和執(zhí)行權限的目錄
選項
-i 不區(qū)分大小寫的搜索
-n N 只列舉前N個匹配項目
-r 使用基本正則表達式
find 實時查找工具其骄,通過遍歷指定路徑完成文件查找
特點:
- 查找速度略慢
- 精確查找
- 實時查找
- 可能只搜索用戶具備讀取和執(zhí)行權限的目錄
語法:find [OPTION]... [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標路徑亏镰;默認為當前目錄且遞歸
查找條件:指定的查找標準,可以文件名拯爽、大小索抓、類型、權限等標準進行毯炮;默認為找出指定路徑下的所有文件
處理動作:對符合條件的文件做操作逼肯,默認輸出至屏幕
查找條件
指定搜索層級
-maxdepth level 最大搜索目錄深度,指定目錄下的文件為第1級
-mindepth level 最小搜索目錄深度
先處理目錄內的文件,再處理指定目錄
-depth
根據(jù)文件名和inode查找
-name "文件名稱":支持使用glob
*, ?, [], [^]
-iname "文件名稱":不區(qū)分字母大小寫
-inum n 按inode號查找
-samefile name 相同inode號的文件
-links n 鏈接數(shù)為n的文件
-regex “PATTERN”:以PATTERN匹配整個文件路徑否副,而非文件名稱
根據(jù)屬主汉矿、屬組查找
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group GRPNAME: 查找屬組為指定組(GID)的文件
-uid UserID:查找屬主為指定的UID號的文件
-gid GroupID:查找屬組為指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
根據(jù)文件類型查找:
-type TYPE
f: 普通文件
d: 目錄文件
l: 符號鏈接文件
s:套接字文件
b: 塊設備文件
c: 字符設備文件
p: 管道文件
空文件或目錄:
-empty
示例:
find /app -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示例
找出/tmp目錄下,屬主不是root备禀,且文件名不以f開頭的文件
find /tmp \( -not -user root -a -not -name 'f*' \) -ls
或
find /tmp -not \( -user root -o -name 'f*' \) -ls
排除目錄示例:
查找/etc/下洲拇,除/etc/sane.d目錄的其它所有.conf后綴的文件
find /etc -path '/etc/sane.d' -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"
根據(jù)文件大小來查找:
-size [+|-]#UNIT
常用單位:k, M, G曲尸,c(byte)
#UNIT: (#-1, #]
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k 表示[0,5k]
+#UNIT:(#,∞)
如:+6k 表示(6k,∞)
示例:
查找/etc目錄下大于1M且類型為普通文件的所有文件
find /etc -size +1M -a -type f
根據(jù)時間戳:
以“天”為單位
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
以“分鐘”為單位
-amin
-mmin
-cmin
根據(jù)權限查找:
-perm [/|-]MODE
MODE: 精確權限匹配
/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可赋续,或關系,+ 從centos7開始淘汰
-MODE:每一類對象都必須同時擁有指定權限另患,與關系
0 表示不關注
- find -perm 755 會匹配權限模式恰好是755的文件
只要當任意人有寫權限時纽乱,find -perm +222就會匹配
只有當每個人都有寫權限時,find -perm -222才會匹配
只有當其它人(other)有寫權限時昆箕,find -perm -002才會匹配
處理動作
-print:默認的處理動作鸦列,顯示至屏幕
-ls:類似于對查找到的文件執(zhí)行“l(fā)s -l”命令
-delete:刪除查找到的文件
-fls file:查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} ; 對查找到的每個文件執(zhí)行由COMMAND指定的命令,對于每個文件執(zhí)行命令之前鹏倘,都會交互式要求用戶確認
-exec COMMAND {} ; 對查找到的每個文件執(zhí)行由COMMAND指定的命令
{}: 用于引用查找到的文件名稱自身薯嗤,完整路徑
find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
參數(shù)替換xargs
由于很多命令不支持管道|來傳遞參數(shù)纤泵,xargs用于產生某個命令的參數(shù)骆姐,xargs 可以讀入 stdin 的數(shù)據(jù),并且以空格符或回車符將 stdin 的數(shù)據(jù)分隔成為參數(shù)捏题。
許多命令不能接受過多參數(shù)玻褪,命令執(zhí)行可能會失敗,xargs可以解決
注意:文件名或者是其他意義的名詞內含有空格符的情況
find和xargs的組合:find | xargs COMMAND
示例:
1.刪除當前目錄下的大量文件
ls | xargs rm
2.創(chuàng)建10個用戶公荧,指定每次傳遞的參數(shù)為1個
echo user{1..10} | xargs -n1 useradd
3.find命令執(zhí)行結果以0作為分隔符傳遞標準輸入參數(shù)带射,默認為空格
find -type f -name "*.txt" -print0 | xargs -0 rm
二、壓縮循狰、解壓縮及歸檔工具
- file-roller(圖形工具)
- compress/uncompress: .Z
- gzip/gunzip: .gz
- bzip2/bunzip2: .bz2
- xz/unxz: .xz
- zip/unzip
- tar
- cpio
命令:gzip/gunzip
語法:gzip [OPTION]... FILE ...
選項:
-d 解壓縮窟社,相當于gunzip
-c 結果輸出至標準輸出捻浦,保留原文件不改變
-# 指定壓縮比,#取值為1-9桥爽,值越大壓縮比越大
命令:gunzip file.gz 解壓縮
???????????zcat file.gz 不顯式解壓縮的前提下查看文本文件內容
示例:
gzip -c messages > messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
cat messages | gzip > m.gz
tar工具
tar(Tape ARchive,磁帶歸檔的縮寫)
語法:tar [OPTION]…
選項:
-exclude 排除文件
-T 選項指定輸入文件 -X 選項指定包含要排除的文件列表
常用示例:
- 創(chuàng)建歸檔昧识,保留權限
tar -cpvf /PATH/FILE.tar FILE...
2.追加文件至歸檔: 注:不支持對壓縮文件追加
tar -r -f /PATH/FILE.tar FILE...
3.查看歸檔文件中的文件列表
tar -t -f /PATH/FILE.tar
4.展開歸檔
tar -x -f /PATH/FILE.tar
-C選項钠四,指定解包的目錄
tar -x -f /PATH/FILE.tar -C /PATH/
5.結合壓縮工具實現(xiàn):歸檔并壓縮
使用-j: bzip2, -z: gzip, -J: xz選項
打包/etc/目錄下面所有conf結尾的文件,壓縮包名稱為當天的時間跪楞,并拷貝到/usr/local/src目錄備份缀去。
find /etc -name *.conf |xargs tar zcvf $(date +%Y%m%d%H%M).tar;cp $(date +%Y%m%d%H%M).tar /usr/local/src/
6.將/app目錄下的文件進行歸檔壓縮,排除/app/host1甸祭、/app/host2文件夾
tar zcvf /root/a3.tgz --exclude=/app/host1 --exclude=/app/host2 /app
7.將/app目錄下的文件進行歸檔壓縮缕碎,指定包含和排除文件
tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist
三、文本處理三劍客之SED
???????sed(Stream EDitor, 行編輯器)是一種流編輯器池户,它一次處理一行內容咏雌。處理時,把當前處理的行存儲在臨時緩沖區(qū)中校焦,稱為“模式空間”(pattern space)赊抖,接著用sed命令處理緩沖區(qū)中的內容,處理完成后寨典,把緩沖區(qū)的內容送往屏幕氛雪。然后讀入下行,執(zhí)行下一個循環(huán)耸成。如果沒有使諸如'D'的特殊命令报亩,那會在兩個循環(huán)之間清空模式空間,但不會清空保留空間井氢。這樣不斷重復弦追,直到文件末尾。文件內容并沒有改變毙沾,除非你使用重定向存儲輸出骗卜。
功能:主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等
用法:
sed [option]... 'script' inputfile...
常用選項:
-n 不輸出模式空間內容到屏幕,即不自動打印
-e 多點編輯
-f /PATH/SCRIPT_FILE 從指定文件中讀取編輯腳本
-r 支持使用擴展正則表達式
-i.bak 備份文件并原處編輯
script:
'地址命令'
地址定界:
(1) 不給地址:對全文進行處理
(2) 單地址:
#:指定的行左胞,$:最后一行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步進
1~2 奇數(shù)行
2~2 偶數(shù)行
編輯命令:
d 刪除模式空間匹配的行寇仓,并立即啟用下一輪循環(huán)
p 打印當前模式空間內容,追加到默認輸出之后
a []text 在指定行后面追加文本烤宙,支持使用\n實現(xiàn)多行追加
i []text 在行前面插入文本
c []text 替換行為單行或多行文本
w /path/file 保存模式匹配的行至指定文件
r /path/file 讀取指定文件的文本至模式空間中匹配到的行后
= 為模式空間中的行打印行號
! 模式空間中匹配行取反處理
s /// 查找替換
支持使用其它分隔符遍烦,s@@@,s###
替換標記:
g 行內全局替換
p 顯示替換成功的行
w /PATH/FILE 將替換成功的行保存至文件中
示例:
- 取出ifconfig命令中本機的IPv4地址
ifconfig eth0 |sed -nr '2s/^[^0-9]+([0-9.]+).*$/\1/p'
- 刪除/etc/fstab文件中所有以#開頭躺枕,后面至少跟一個空白字符的行的行首的#和空白字符
sed -nr 's/^#[[:space:]]+(.*)/\1/p' /etc/fstab
- 處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
echo /etc/fstab |sed -r 's@(^/.*/)([^/]+)/?$@\1\n\2@'