第08天 [find,壓縮打包,sed]

locate
查找
	-i 不區分大小寫
	-n 只列舉前n個匹配項目
	-r 使用基本正則表達式
	根據數據庫實時更新查找,在文件/var/lib/mlocate/mlocatedb
	如果說在終端新建立了一個文件夾如果要想生效,必須要運行updatedb,之後運行
	locate file就可以生效了。速度快,模糊查找
	建議在系統使用不高的時候使用,消耗系統性能大
	各種選項用法 -r調用表達式常用   locate -r "\.\(jpp|npg\)$"

find 
指搜索層級
	-maxdepth level 最大搜索目錄深度,指定目錄下的文件爲第1級
	-mindepth level 最小搜索目錄深度
	 find /etc -maxdepth 1 -mindepth 1  -name passwd 
先處理目錄內的文件,再處理指定目錄 使用此參數,文件會排列在終端前面後是目錄
-depth
根據文件名和inode查找:
-name "文件名稱":支持使用glob
*, ?, [], [^]
-iname "文件名稱":不區分字母大小寫
-inum n 按inode號查找
-samefile name 相同inode號的文件
-links n 鏈接數爲n的文件
-regex “PATTERN”:以PATTERN匹配整個文件路徑,而非文件名稱
根據屬主、屬組查找:
-user USERNAME:查找屬主爲指定用戶(UID)的文件
-group GRPNAME: 查找屬組爲指定組(GID)的文件
-uid UserID:查找屬主爲指定的UID號的文件
-gid GroupID:查找屬組爲指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
根據文件類型查找
-type TYPE
 f: 普通文件
 d: 目錄文件
 l: 符號鏈接文件
 s:套接字文件
 b: 塊設備文件
 c: 字符設備文件
 p: 管道文件
-empty 空文件或目錄

示例:find /app -type d -empty
-depth:在查找文件時,首先查找當前目錄中的文件,然後再在其子目錄中查找。
查找/etc/下,除/etc/sane.d目錄的其它所有.conf後綴的文件
find /etc -path ‘/etc/sane.d’ -a –prune -o -name “*.conf”
-path 指的是這個目錄,-prune指的是我取出的目錄剪切掉不參與查詢,或者我去搜索conf文件。
組合條件:
與:-a
或:-o
非:-not !

    atime:Access time,  最後一次訪問文件(讀取或執行)的時間。
    citme:Change time, 最後一次改變文件(屬性)或者目錄(屬性)的時間。
    mtime:Modify time,    最後一次改變文件(內容)或目錄(內容)的時間。

根據文件大小來查找:
-size [+|-]#UNIT
常用單位:k, M, G,c(byte)
#UNIT: (#-1, #]
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k 表示[0,5k]
+#UNIT:(#,∞)
如:+6k 表示(6k,∞)

根據時間戳:
以“天”爲單位
訪問時間-atime [+|-]#,
#: [#,#+1)
+#: [#+1, ∞ ]
-#: [0,#)
修改時間-mtime
最近一次屬性改變時間-ctime
以“分鐘”爲單位
-amin
-mmin
-cmin
find perm 222 嚴格匹配
find perm  +222 -ls   (centos 6中這樣表示)
find perm  /222 -ls 表示或者 3個權限 ,只要其中有一個符合條件的就會顯示出來
find perm  -222 -ls 表示並且 ,必須滿足主組其他都有w權限

dd if=/dev/zero of=sun.txt bs=1M count=1
if 代表輸入文件。如果不指定if,默認就會從stdin中讀取輸入。
of 代表輸出文件。如果不指定of,默認就會將stdout作爲默認輸出。
bs 代表字節爲單位的塊大小。
count 代表被複制的塊數。
/dev/zero 是一個字符設備,會不斷返回0值字節(\0)。

-print:默認的處理動作,顯示至屏幕
-ls:類似於對查找到的文件執行“ls -l”命令 find -perm /044 -ls
-delete:刪除查找到的文件
-fls file:查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令,對
於每個文件執行命令之前,都會交互式要求用戶確認
-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令
{}: 用於引用查找到的文件名稱自身
find傳遞查找到的文件至後面指定的命令時,查找到所有符合條件的文件一次性
傳遞給後面的命令

find 舉例
查找/var/log目錄中更改時間在7日以前的普通文件,並在刪除之前詢問它們:
# find /var/log -type f -mtime +7 -ok rm {} \;

 查找 aa.txt 並備份爲aa.txt.bak 
 $ find . -name 'aa.txt' -exec cp {} {}.bak \;
 
查詢當天修改過的文件
find   ./   -mtime   -1   -type f   -exec   ls -l   {} \;


xargs
	cat list |xargs rm -f  b把前面的標準輸出給後面作爲參數
	seq 10 |xargs -n 2 
	echo user{1..10}|xargs -n 1 useradd

壓縮
compress -c m.log > m.log.z
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
bzip2/bunzip2/bzcat
bzip2 [OPTION]... FILE ...
-k  keep, 保留原文件
-d  解壓縮
-#  1-9,壓縮比,默認爲9
bunzip2 file.bz2 解壓縮
bzcat file.bz2 不顯式解壓縮的前提下查看文本文件內容
xz/unxz/xzcat
xz [OPTION]... FILE ...
-k  keep, 保留原文件
-d  解壓縮
-#  壓縮比,取值1-9,默認爲6
unxz file.xz 解壓縮
xzcat file.xz 不顯式解壓縮的前提下查看文本文件內容
zip/unzip
打包壓縮
zip –r /backup/sysconfig /etc/sysconfig/
解包解壓縮
unzip sysconfig.zip
cat /var/log/messages | zip messages -
unzip -p message > message
tar工具
tar 選項 目標 源
tar(Tape ARchive,磁帶歸檔的縮寫)
tar [OPTION]...
選項
z 通過gzip 壓縮或者解壓
c 創建新的tar包
v 顯示詳細的tar包執行過程
f 指定壓縮文件的名字
t 不解壓查看tar包的內容
p 保持原文件原有屬性
j 通過bzip2命令壓縮或解壓
x 解開tar包
C 指定解壓的目錄路徑
--exclude=PATTERN 打包時排除不需要處理的文件或者是目錄
X+文件名 從指定文件讀取不需要處理的文件或者是目錄列表 
N+日期  僅打包比指定日期新的文件,可用於增量打包備份。
(1) 創建歸檔,保留權限
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
tar -x -f /PATH/FILE.tar -C /PATH/
(5) 結合壓縮工具實現:歸檔並壓縮
-j: bzip2, -z: gzip, -J: xz
tar工具
-exclude 排除文件
tar zcvf /root/a3.tgz --exclude=/app/host1 --exclude=/app/host2 /app
-T 選項指定輸入文件 -X 選項指定包含要排除的文件列表
tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist
split:分割一個文件爲多個文件
分割大的 tar 文件爲多份小文件
split -b Size –d tar-file-name prefix-name
split -b 1M –d mybackup.tgz mybackup-parts
split -b 1M mybackup.tgz mybackup-parts
合併:
cat mybackup-parts* > mybackup.tar.gz
cpio
功能:複製文件從或到歸檔
cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以
“.cpio”或者“.tar”結尾的文件
cpio [選項] > 文件名或者設備名
cpio [選項] < 文件名或者設備名
選項
-o 將文件拷貝打包成文件或者將文件輸出到設備上
-O filename 輸出到指定的歸檔文件名
-A  向已存在的歸檔文件中追加文件
-i 解包,將打包文件解壓或將設備上的備份還原到系統
-I filename  對指定的歸檔文件名解壓
-t  預覽,查看文件內容或者輸出到設備上的文件內容
-F filename  使用指定的文件名替代標準輸入或輸出
-d 解包生成目錄,在cpio還原時,自動的建立目錄
-v 顯示打包過程中的文件名稱
示例
將etc目錄備份:
find ./etc -print |cpio -ov >bak.cpio
將/data內容追加bak.cpio
find /data | cpio -oA -F bak.cpio
內容預覽
cpio –tv < etc.cpio
解包文件
cpio –idv < etc.cpio


compress 壓縮
uncpmpress 解壓縮
擴展名 *.z

gzip 壓縮
gunzip 解壓縮
擴展名 *.gz

bzip2 壓縮
bunzip2 解壓縮
bzcat 查看
擴展名 *.bz2

xz 壓縮
unxz 解壓縮
xzcat 查看
擴展名 *.xz
解壓tar.xz文件:先 xz -d xxx.tar.xz 將 xxx.tar.xz解壓成 xxx.tar 然後,再用 tar xvf xxx.tar來解包。
zip 打包壓縮
unzip 解包解壓縮
擴展名 *.z

tar 打包 
擴展名 *.tar 沒有被壓縮過
*.tar.gz 打包後經過gzip 壓縮後的擴展名
*.tar.bz2 打包後及格過bzip2壓縮後的擴展名

cpio 複製文件從或歸檔
擴展名 *.z


對於tar指令,只需記住以下六個就夠用了: 

bzip2支持的壓縮/解壓縮方式 

壓縮:tar -jcv -f filename.tar.bz2 要被壓縮的文件或者文件夾 jcvf

查詢:tar -jtv -f filename.tar.bz2 

解壓縮:tar -jxv -f filename.tar.bz2 -C 要將壓縮文件解壓縮到的目錄jxvf

gzip支持的壓縮/解壓縮方式 

壓縮:tar -zcv -f filename.tar.gz 要被壓縮的文件或者文件夾 zcvf

查詢:tar -ztv -f filename.tar.gz 

解壓縮:tar -zxv -f filename.tar.gz -C 要將壓縮文件解壓縮到的目錄zxvf


      -zcf:歸檔並調用gzip壓縮
      -zxf:調用gzip解壓縮並展開歸檔


      -jcf:歸檔並調用bzip2壓縮
      -jxf:調用bzip解壓縮並展開歸檔

      -Jcf:歸檔並調用xz壓縮
      -Jxf:調用xz解壓縮並展開歸檔
xzcat 查看

sed
參考網址https://blog.51cto.com/woyaoxuelinux/1868468
當用sed 時候先寫固定格式 以免出錯 sed -r 's###g' /etc/passwd
sed 常用選項:
有n 必有p
-n  不輸出模式空間內容到屏幕,即不自動打印
-e  多點編輯
-f /PATH/SCRIPT_FILE  從指定文件中讀取編輯腳本
-r  支持使用擴展正則表達式
-i.bak 備份文件並原處編輯
script:
'地址命令'
sed工具
地址定界:
(1) 不給地址:對全文進行處理
(2) 單地址:
#:指定的行,$:最後一行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址範圍:
#,#  適用數字
#,+#
/pat1/,/pat2/  適用字母   getent passwd| sed -rn  '/^xiaoh/,/$ /p'

#,/pat1/
(4) ~:步進
1~2 奇數行
2~2 偶數行
把基數行後面加一個換行,奇數行和偶數行合併爲一行
seq 10 | sed "1~2N;s/\n/ /"
sed工具
編輯命令:
d  刪除模式空間匹配的行,並立即啓用下一輪循環
舉例:sed -i  '2d' /passwd   刪除匹配到的第二行 i表示進行更改
p  打印當前模式空間內容,追加到默認輸出之後
a [\]text  在指定行後面追加文本,支持使用\n實現多行追加
舉例:sed '2a 666' 在第二行後頁面添加666
換行記得加\     sed '2a 666\n777‘
i [\]text  在行前面插入文本
c [\]text  替換行爲單行或多行文本
w /path/file 保存模式匹配的行至指定文件
舉例:nl passwd |head -10 |sed -n '/root/,/nologin/ w passwd.bak'
r /path/file 讀取指定文件的文本至模式空間中匹配到的行後
seq 1 5|sed '2r test.txt' 第二行後讀取這個文件
=  爲模式空間中的行打印行號
sed '=' /etc/passwd
sed  '=' /etc/passwd| sed 'N;s/\n/ /g'   把空格去掉
!  模式空間中匹配行取反處理
sed -n ’2!p‘   不顯示第二行
sed工具
s/// 查找替換,支持使用其它分隔符,s@@@,s###
替換標記:
g  行內全局替換
p  顯示替換成功的行
w /PATH/FILE  將替換成功的行保存至文件中
G 在每一行後面增加一行

分組替換[root@Centos7 ~]#echo i am oldboy teacher |sed 's#\(^.*am\) \([a-z].*\) \(tea\).*$#\1\3#g'
i amtea'

查找出單詞換行
sed -r "s/[^[:alpha:]]/\n/g" /etc/init.d/functions


每一行行首增加#號
sed -r 's/.*/#&/' fstab
sed -r 's/(.*)/#\1/g' fstab

無#的行添加#
sed -r -i '/^[^#]/s@(.*)@#\1@g' a.sh

取用戶
getent passwd|sed  -n -e '/^xiaoh/,/^sh/p' |sed -rn 's/^([^:]+):.*/\1/p'
`sed -nr '/^alice/,$s/^([^:]+):.*/\1/p /etc/passwd`
更改文件後綴名
ls *.txt |sed -nr 's/(.*)\..*/\1.aaa/gp
取ip方法:
ifconfig ens33|sed -n '2p'|sed -e 's/^.*inet//g' -e 's/netmask.*$//g'
ifconfig ens33|sed -n '2p'|sed -n -e 's/^.*inet//g' -e 's/netmask.*$//gp'
ifconfig ens33|sed -n '2p'|sed  's/^.*inet//g;s/netmask.*$//g'

ifconfig ens33|sed -n '2p'|sed 's/^.*inet//g;s/netmask.*$//g'
ifconfig ens33| sed -nr '2s/(^[^0-9]+)([0-9.]+)+( .*$)/\2/gp'
ifconfig ens33|sed -n '/broadcast/p'|sed -r 's@inet (.*) netmask.*@\1@'


df 取佔用率
df | sed -rn '/^\/dev\/sd/s#(^[^[:space:]]+).*([[:digit:]]+)%.*#\1 \2#p'
df |sed -nr '/^\/dev\/sd/p'|sed -nr 's#([^[:space:]]+).*([0-9]+)%.*#\1 \2#p'
df |grep  '/dev/sd'  |sed -rn "s#([^[:space:]]+).* ([0-9]+)%.*#\1 \2#p"
調出misc 目錄
  yum install autofs 
  systemctl start autofs
	systemctl enable autofs

參考文檔https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html


替換一個文件/etc/passwd裏的這root:x:0:0:root:/root:/bin/bash一行第二個root爲test?
cat /etc/passwd| sed '/^root/!d'|sed 's/root/test/2'
sed -r 's/(.*)(:root:)(.*)/\1:test:\3/g'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章