文件查找和壓縮

文件查找和壓縮

文件查找的兩個命令 locate find
————————————————————-
locate locate file
非實時查找,查找文件的路徑, 數據庫不會實時更新,查找速度快
路徑中只要包含file名就全部列出

-i 不區分大小寫的搜索
例 搜索以”.conf”結尾的文件 locate -r “\.conf$”
-n N 只列舉前N個匹配項目
-r 使用正則表達式
例 locate -r “^/ect/.\.conf$”
updatedb 數據庫更新命令
—————————————————————-
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/ -maxdepth2 -mindepth2 -name passwd 顯示/etc/下包含passwd的兩級目錄
find /data -name “*f1″查找data目錄下包含f1的文件,此處的*表示通配符,引號必須加
find /home -user wang -ls 長格式顯示所有者為wang的文件
useradd xixi -u 1004 將無主文件重新賦予新的所有者
根據屬主、屬組查找:
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group GRPNAME: 查找屬組為指定組(GID)的文件
-uid UserID:查找屬主為指定的UID號的文件
-gid GroupID:查找屬組為指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
例 find /home -nouser -o -nogroup 查找無主或無組的文件

根據文件類型查找:
-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)
例 找出/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”
查找data 目錄下非空非普通的文件
find /data/ ! \( -empty -o -type f \)

根據文件大小來查找:(表示不包括 ]包括
-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
atimee [+|-]#以天為單位。

-atime 1 大于等于一天小于兩天

-atime -1 小于一天到零天

-atime +1 大于等于一天的全部
以“分鐘”為單位:
-amin
-mmin
-cmin
示例
find /etc/ -mmin -1 查找一分鐘以內被修改的文件

根據權限查找:
-perm [/|-]MODE
MODE: 精確權限匹配
/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+ 從centos7開始淘汰
-MODE:每一類對象都必須同時擁有指定權限,與關系
0 表示不關注
find -perm 755 會匹配權限模式恰好是755的文件
只要當任意人有寫權限時,find -perm +222就會匹配
只有當每個人都有寫權限時,find -perm -222才會匹配
只有當其它人(other)有寫權限時,find -perm -002才會匹配
find -perm 666 查找當前文件夾下權限位666的文件
find -perm /666 -ls 只要有一個權限符合就行
find -perm -666 -ls -和/的時候才用) 先666轉化為110 對應匹配各位,檢查1的位,
0的位不檢查所以可有可無 -表示交集(都有) /表示并集
-222表示都要有寫權限

處理動作
簡單理解為當我們把要查找的內容搜索出來以后要做的事情

-print:默認的處理動作,顯示至屏幕
-ls:類似于對查找到的文件執行“ls -l”命令
-delete:刪除查找到的文件
-fls file:查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令,對于每個文件執行命令之前,都會交互式要求用戶確認
-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令
帶ok exec結束必須要以\;結束
{}: 用于引用查找到的文件名稱自身
find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
示例 find -perm -002 -delete 對符合條件的文件刪除(沒有任何提示建議慎用)
將查找的內容全部移動到另一個地方(改名,常用作備份)
find /mnt -name “f*” -exec mv {} {}. bak \;
——————————————————————————————-
參數替換xargs

由于很多命令不支持管道|來傳遞參數,而日常工作中有這個必要,所以就有了xargs命令
xargs用于產生某個命令的參數,xargs 可以讀入 stdin 的數據,并且以空格符或回車符將 stdin 的數據分隔成為arguments
注意:文件名或者是其他意義的名詞內含有空格符的情況
有些命令不能接受過多參數,命令執行可能會失敗,xargs可以解決
示例:
xargs將前面的輸入用空格分開然后傳給后面的命令
echo f{1..100} | xargs -n1 touch n1 n1表示每次只創建一個文件 數字可以修改
ls f* |xargs rm
find /sbin -perm +700 |ls -l 這個命令是錯誤的
find /sbin -perm +700 | xargs ls –l
find和xargs格式:find | xargs COMMAND
———————————————————————————–
find 示例
備份配置文件,添加.orig這個擴展名
find -name “*.conf” -exec cp {} {}.orig \;
提示刪除存在時間超過3天以上的joe的臨時文件
find /tmp -ctime +3 -user joe -ok rm {} \;
在主目錄中尋找可被其它用戶寫入的文件
find ~ -perm -002 -exec chmod o-w {} \;
查找/data下的權限為644,后綴為sh的普通文件,增加執行權限
find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;
查看/home的目錄
find /home –type d -ls
—————————————————————————
壓縮、解壓縮及歸檔工具

compress/uncompress
compress [-dfvcVr] [-b maxbits] [file …]
-d: 解壓縮,相當于uncompress
-c: 結果輸出至標準輸出,不刪除原文件
-v: 顯示詳情
uncompress 解壓縮
zcat file.Z >file
compress file 壓縮時會刪除原文件
gzip/gunzip
gzip [OPTION]… FILE …
-d: 解壓縮,相當于gunzip
-c: 將壓縮或解壓縮的結果輸出至標準輸出
-#:1-9,指定壓縮比,值越大壓縮比越大
zcat:不顯式解壓縮的前提下查看文本文件內容
實例:
gzip -9 mm
gzip -c messages >messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
gunzip mm.gz 解壓縮
zcat mm.gz 查看壓縮文件

bzip2/bunzip2/bzcat

bzip2 [OPTION]… FILE …
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認為9
bzcat:不顯式解壓縮的前提下查看文本文件內容

xz/unxz/xzcat
xz [OPTION]… FILE …
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認為6
xzcat: 不顯式解壓縮的前提下查看文本文件內容
gz bz2 常用的兩種壓縮文件

zip/unzip
打包壓縮
zip –r /testdir/sysconfig /etc/sysconfig/
解包解壓縮
unzip sysconfig.zip
cat /var/log/messages | zip messages –
unzip -p message > message
示例 zip -r /etc/sysconfig 把后面的文件壓縮為z.zip
cat /var/log/messages|zip messages – 此處的-表示把前面的作為
標磚輸入傳給zip
————————————————————–
tar工具

tar(Tape ARchive,磁帶歸檔的縮寫)
tar [OPTION]…
(1) 創建歸檔
tar -cpvf /PATH/TO/SOMEFILE.tar FILE…
c 表示創建 f表示需要打包的文件名
(2) 追加文件至歸檔: 注:不支持對壓縮文件追加
tar -r -f /PATH/TO/SOMEFILE.tar FILE…
(3) 查看歸檔文件中的文件列表
tar -t -f /PATH/TO/SOMEFILE.tar
(4) 展開歸檔
tar -x -f /PATH/TO/SOMEFILE.tar
tar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/
(5) 結合壓縮工具實現:歸檔并壓縮
-j: bzip2, -z: gzip, -J: xz
-T選項指定輸入文件,-X選項指定包含要排除的文件列表
tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist
tar -cpvf data.tar /data p表示保留屬性 f表示文件 /data表示要打包的目錄
tar tvf *.tar 預覽打包文件
tar x.*tar -C/mnt 解壓縮 -C/mnt 解壓縮之后的路徑
無論什么樣的后綴都可以解開
tar xvf data.tar.bz2 -C /mnt

分割大的 tar 文件為多份小文件:
split –b Size –d tar-file-name prefix-name prefix前綴
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 將文件拷貝打包成文件或者將文件輸出到設備上
-i 解包,將打包文件解壓或將設備上的備份還原到系統
-t 預覽,查看文件內容或者輸出到設備上的文件內容
-v 顯示打包過程中的文件名稱。
-d 解包生成目錄,在cpio還原時,自動的建立目錄
-c 一種較新的存儲方式
示例
將etc目錄備份:
find ./etc -print |cpio -ov >etc.cpio
內容預覽
cpio –tv < etc.cpio
解包文件
cpio –idv < etc.cpio

***********************************************************************
處理文本的工具sed

Stream EDitor, 行編輯器
sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),
接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。然后讀入下行,執行下一個循環。如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空模式空間,但不會清空保留空間。這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。
功能:主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等

用法: 建議使用單引號
sed [option]… ‘script’ inputfile…
常用選項:
-n:不輸出模式空間內容到屏幕,即不自動打印
-e: 多點編輯
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式
-i.bak: 備份文件并原處編輯
script:
‘地址命令’
地址定界:
(1) 不給地址:對全文進行處理
(2) 單地址:
#: 指定的行,$:最后一行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步進
1~2 奇數行 從1開始每隔2行
2~2 偶數行
示例 sed -n’2p’ f1 打印文件f1的第二行,系統默認是自動打印末尾
p就等于打印了兩次,加-n只打印第二行(p不能取消)
sed -n ‘2~2p’ f1打印文件f1的第二行每隔兩行打印一次即打印2,4,。。
sed -n -e ‘2p’ -e ‘6p’ f1 多點編輯 實現結果是打印第二行和第六行

cat sedscript.txt sed -f sedscript.txt f1 sedscript.txt內容為
2~2p(即打印偶數行) 實現結果為1 2 2 3 44 5 66 7 88 9 1010
cat sedscript.txt sed -f sedscript.txt 在f1文件中找出符合sedcript內容的行246810
編輯命令:
d: 刪除模式空間匹配的行,并立即啟用下一輪循環
p:打印當前模式空間內容,追加到默認輸出之后
a [\]text:在指定行后面追加文本
支持使用\n實現多行追加
i [\]text:在行前面插入文本
c [\]text:替換行為單行或多行文本
w /path/somefile: 保存模式匹配的行至指定文件
r /path/somefile:讀取指定文件的文本至模式空間中
匹配到的行后
=: 為模式空間中的行打印行號
!:模式空間中匹配行取反處理
s///:查找替換,支持使用其它分隔符,s@@@,s###
替換標記:
g: 行內全局替換
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
sed ‘2d’ f1刪除f1文件中的第2行
sed ‘2!d’ f1 除第二行以外都刪除
sed ‘2’= f1把第2行的內容換為2并打印(實際上刪除了原來的內容)
sed ‘2,5a\ ====’ f1 在f1文件的第2行第5行后面加====
sed ‘2,5i\ ====’ f1 在f1文件的第2行第5行前面加====
sed ‘2,5w f2’f1
sed ‘2,5r /etc/issue’ f1 即把/etc/issue/的內容放在f1文件第2到第5行的下面
sed ‘s/root/administrator/’ /etc/passwd 在/etc/passwd文件中的root替換為adminstrator(只替換了一個)
sed ‘s/root/administrator/g’ /etc/passwd 全部替換
sed -r ‘s/(root)/\1er/g’ /etc/passwd把/etc/passwd中的root全部替換為rooter
sed -r ‘s@/bin/bash$@/sbin/bash@’ /etc/passwd 或者
sed -r ‘s@/(bin/bash)$@/s\1@’ /etc/passwd把/etc/passwd中以bash/bash結尾的替換為sbin/bash
sed -r ‘s/(.*)/\1mage/’ /etc/passwd 把/etc/passwd中所有的行尾加mage
sed -r ‘s/(.*)/mage\1/’ /etc/passwd 在/etc/passwd中所有的行首加mage

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95945

(0)
路在腳下路在腳下
上一篇 2018-04-14
下一篇 2018-04-14

相關推薦

  • MySQL數據庫服務

    MySQL數據庫的安裝

    2018-06-12
  • linux練習題以及用戶和組管理

    Linux練習題 列出當前系統上的所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可 取出最后登錄到當前系統的用戶的相關信息 取出當前系統上被用戶當作默認shell的最多的那個shell 將/etc/passwd/中的第三個字段數值最大的后10個用戶信息全部改為大寫后保存至/tmp/maxusers中。 取出當前主機的IP地址,提示:對i…

    2018-05-26
  • 掛載點 文件通配符 目錄的一些理解

    掛載點 掛載點實際上就是linux中的磁盤文件系統的入口目錄,類似于windows中的用來訪問不同分區的C:、D:、E:等盤符。其實Windows也支持將一個磁盤分區掛在一個文件夾下面,只是我們用C:、D:這樣的盤符操作用慣了,一般沒有將分區掛到文件夾。文件一般掛載在misc文件夾下 在我們打開Centos 6(并未登錄)時在遠程控制臺是不能看到掛載點的如圖…

    2018-04-01
  • LAMP的實現

    php的兩種工作模式一種以模塊方式;一種以fcgi方式

    2018-06-23
  • Linux系統目錄簡介

    幫助理解linux系統目錄結構和作用

    2018-04-15
欧美性久久久久