查找與壓縮

文件查找

在文件系統上查找符合條件的文件; ?

文件查找:locate, find

locate :非實時查找(數據庫查找)

find :實時查找

locate

1.查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db ?

2.依賴于事先構建的索引,索引的構建是在系統較為空閑時自動進行(周期性任務);管理需要員手動更新數據庫(updatedb); 索引構建過程需要遍歷整個根文件系統,極消耗資源;應該只搜索穩定的配置文件,不搜索更新頻繁的數據。 

3.工作特點查找速度快;

模糊查找;

非實時查找

搜索的是文件的全路徑,不僅僅是文件名

可能只搜索用戶具備讀取和執行權限的目錄

4.locate命令 ?

locate KEYWORD ?

有用的選項  -i      執行區分大小寫的搜索

-n  X  只列舉前X個匹配項目 ?

 

locate  foo

搜索名稱或路徑中帶有“foo”的文件 ?

locate  -r  ‘.foo$’

使用Regex來搜索以“.foo”結尾的文件

find

1概述:

實時查找工具,通過遍歷指定路徑完成文件查找; ?

2工作特點:

查找速度略慢

精確查找

實時查找

可能只搜索用戶具備讀取和執行權限的目錄

3find

語法:

find [OPTION]… [查找路徑] [查找條件] [處理動作]

查找路徑:指定具體目標路徑;默認為當前目錄

查找條件:指定的查找標準,可以文件名、大小、類型、 權限等標準進行;默認為找出指定路徑下的所有文件

處理動作:對符合條件的文件做操作,默認輸出至屏幕

查找條件

a.根據文件名和inode查找:

-name "文件名稱":支持使用glob: *, ?, [], [^]

-iname "文件名稱":不區分字母大小寫

-inum n  :按inode號查找

-samefile 文件名:  相同inode號的文件

-links n  鏈接數為n的文件

-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱

b.根據屬主、屬組查找:

-user USERNAME:查找屬主為指定用戶(UID)的文件

-group GRPNAME: 查找屬組為指定組(GID)的文件

-uid UserID:查找屬主為指定的UID號的文件

-gid GroupID:查找屬組為指定的GID號的文件

-nouser:查找沒有屬主的文件

-nogroup:查找沒有屬組的文件

c.根據文件類型查找:

-type TYPE:

  f: 普通文件

d: 目錄文件

l: 符號鏈接文件

s:套接字文件

b: 塊設備文件

c: 字符設備文件

p: 管道文件

d.組合條件:

與:-a  

或:-o

非:-not, !

德·摩根定律:非(P Q) = ( P) ( Q)

(P Q) = ( P) ( Q)

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)

e.根據文件大小來查找:

-size [+|-]#UNIT 常用單位:k, M, G  

#UNIT: (#-1, #],如:6k

-#UNIT[0,#-1], 如:-6k

+#UNIT(#,),   如:+6k

f.根據時間戳:

以“天”為單位:-atime [+|-]#, 

#: [#,#+1)

+#: [#+1,]

-#: [0,#)

-mtime

-ctime

以“分鐘”為單位:-amin

-mmin

-cmin

g.根據權限查找:

 -perm [/|-]MODE

MODE: 精確權限匹配

/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,centos6上為+,+centos7開始淘汰。

-MODE:每一類對象都必須同時擁有指定權限,且關系

0 表示不關注,什么權限都可以

find –perm 755 ,會匹配權限模式恰好是755的文件

只要當任意人有寫權限時,find -perm +222就會匹配

只有當每個人都有寫權限時,find -perm -222才會匹配

只有當其它人(other)有寫權限時,find -perm -002才會匹配

h.find實例

find -name snow.png    搜索名為snow.png的文件 ?

find -iname snow.png    不分大小寫地搜索名為snow.png、Snow.png、 SNOW.PNG等等的文件 ?

find / -name *.txt ?

find /var –name *log* ?

find -user joe -group joe 搜索被用戶joe 以及組群joe所擁有的文件

find -user joe -not -group joe

find -user joe -o -user jane

find -not \( -user joe -o -user jane \) 

find / -user joe -o -uid 500

示例:找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件

find /tmp \( -not -user root -a -not -name 'fstab' \) ls

find /tmp -not \( -user root -o -name 'fstab' \) –ls ?

排除目錄:

排除的目錄不加斜線,但是加-print

示例:查找/etc/下,除/etc/sane.d目錄的其它所有.conf后綴 的文件。

find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf  –print -a可以不寫)

 

處理動作

1)命令用法:

-print:默認的處理動作,顯示至屏幕; ?

-ls:類似于對查找到的文件執行“ls -l”命令 ?

-delete:刪除查找到的文件; ?

-fls file:查找到的所有文件的長格式信息保存至指定文件中 ?

-ok COMMAND {} \;  對查找到的每個文件執行由 COMMAND指定的命令; 對于每個文件執行命令之前,都會交互式要求用戶確認

-exec COMMAND {} \;  對查找到的每個文件執行由 COMMAND指定的命令 ?

{}: 用于引用查找到的文件名稱自身 ?

2xargs命令簡介

  find傳遞查找到的文件至后面指定的命令時,查找到所有符合 條件的文件一次性傳遞給后面的命令,有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題 find | xargs COMMAND.

之所以能用到這個命令,關鍵是由于很多命令不支持|管道來傳遞參數,而日常工作中有有這個必要,所以就有了xargs命令,例如:

find /sbin -perm +700 |ls -l  這個命令是錯誤的

find /sbin -perm +700 |xargs ls -l  這樣才是正確的

xargs 可以讀入stdin 的資料,并且以空白字元或斷行字元作為分辨,將 stdin 的資料分隔成為 arguments 。 因為是以空白字元作為分隔,所以,如果有一些檔名或者是其他意義的名詞內含有空白字元的時候, xargs 可能就會誤判了~他的用法其實也還滿簡單的!就來看一看先!

選項解釋

-0 sdtin含有特殊字元時候,將其當成一般字符,想/'空格等

例如:root@localhost:~/test#echo "//"|xargs  echo 

   root@localhost:~/test#echo "//"|xargs -0 echo /

-a file 從文件中讀入作為sdtin,(看例一)

-e flag ,注意有的時候可能會是-E,flag必須是一個以空格分隔的標志,當xargs分析到含有flag這個標志的時候就停止。(例二)

-p 當每次執行一個argument的時候詢問一次用戶。(例三)

-n num 后面加次數,表示命令在執行的時候一次用的argument的個數,默認是用所有的。(例四)

-t 表示先打印命令,然后再執行。(例五)

-i 或者是-I,這得看linux支持了,將xargs的每項名稱,一般是一行一行賦值給{},可以用{}代替。(例六)

-r no-run-if-empty xargs的輸入為空的時候則停止xargs,不用再去執行了。(例七)

-s num 命令行的最好字符數,指的是xargs后面那個命令的最大命令行字符數。(例八)

L  num Use at most max-lines nonblank input lines per command line.-s是含有空格的。

-l  -L

-d delim 分隔符,默認的xargs分隔符是回車,argument的分隔符是空格,這里修改的是xargs的分隔符(例九)

-x exit的意思,主要是配合-s使用。

修改最大的進程數,默認是1,為0時候為as many as it can ,這個例子我沒有想到,應該平時都用不到的吧。

應用舉例

例一:

root@localhost:~/test#cat test 

#!/bin/sh

echo "hello world/n"

root@localhost:~/test#xargs -a test echo

#!/bin/sh echo hello world/n

root@localhost:~/test#

例二:

root@localhost:~/test#cat txt

/bin tao shou kun

root@localhost:~/test#cat txt|xargs -E 'shou' echo

/bin tao

root@localhost:~/test#

例三:

root@localhost:~/test#cat txt|xargs -p echo

echo /bin tao shou kun ff ?…y

/bin tao shou kun ff

例四:

root@localhost:~/test#cat txt|xargs -n1 echo

/bin

tao

shou

kun

root@localhost:~/test3#cat txt|xargs  echo

/bin tao shou kun

例五:

root@localhost:~/test#cat txt|xargs -t echo

echo /bin tao shou kun 

/bin tao shou kun

例六:

$ ls | xargs -t -i mv {} {}.bak

例七:

root@localhost:~/test#echo ""|xargs -t mv

mv 

mv: missing file operand

Try `mv –help' for more information.

root@localhost:~/test#echo ""|xargs -t -r  mv

root@localhost:~/test#

(直接退出)

例八:

root@localhost:~/test#cat test |xargs -i -x  -s 14 echo "{}"

exp1

exp5

file

xargs: argument line too long

linux-2

root@localhost:~/test#

例九:

root@localhost:~/test#cat txt |xargs -i -p echo {}

echo /bin tao shou kun ?…y

root@localhost:~/test#cat txt |xargs -i -p -d " " echo {}

echo /bin ?…y

echo tao ?…/bin

y

echo shou ?…tao

再如:

root@localhost:~/test#cat test |xargs -i -p -d " " echo {}

echo exp1

exp5

file

linux-2

ngis_post

tao

test

txt

xen-3

 ?…y

root@localhost:~/test#cat test |xargs -i -p echo {}

echo exp1 ?…y

echo exp5 ?…exp1

y

echo file ?…exp5

y

3find實例 ?

find  -name  “*.conf”  -exec  cp {}  {}.org  \; ? 備份配置文件,添加.orig這個擴展名 ?

find /tmp -ctime +3 -user joe -ok rm {} \; ? 提示刪除存在時間超過3天以上的joe的臨時文件 ?

find ~ -perm -002 -exec chmod o-w {} \; ? 你的主目錄中尋找可被其它用戶寫入的文件 ?

find /data –type  f -perm 644  -name *.sh  – exec chmod 755 {} \;

find  /home –type d -ls

練習:

1、  查找/var目錄下屬主為root,且屬組為mail的所有文件

# find /var/ -user root -a -group mail

blob.png

2、查找/var目錄下不屬于root、lp、gdm的所有文件

# find /var/ -not \( -user root -o -user lp -o -user gdm \) –ls

blob.png 

3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件

# find /var/ -mtime -7  -not \( -user root -o -user postfix \) -ls

blob.png

4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件

# find /  \( -nouser -o -nogroup -atime -7 \) -ls

blob.png

5、查找/etc目錄下大于1M且類型為普通文件的所有文件

# find /etc/ -size +1M -type f -ls

blob.png

6、查找/etc目錄下所有用戶都沒有寫權限的文件

# find /etc/ -not -perm /222 –ls

blob.png

7、查找/etc目錄下至少有一類用戶沒有執行權限的文件

# find /etc/ -not -perm -111 -ls

blob.png

8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

# find /etc/init.d/ -perm /113 -ls

blob.png

Gnome 搜索工具 ?

位置->搜索文件…… ?

圖形化搜索工具,可搜索

命令

內容

用戶/組群

大小

修改時間

壓縮、解壓縮及歸檔工具

file-roller ?

compress/uncompress: .Z ?

gzip/gunzip: .gz ?

bzip2/bunzip2: .bz2 ?

xz/unxz: .xz ?

zip/unzip ?

tar ?

cpio

compress/uncompress

compress [-dfvcVr] [-b maxbits] [file …]

-d: 解壓縮,相當于

-c: 結果輸出至標準輸出,不刪除原文件

-v: 顯示詳情 ?

uncompress 解壓縮 ?

zcat file.Z >file

gzip/gunzip

gzip [OPTION]… FILE …

-d: 解壓縮,相當于gunzip

-c: 將壓縮或解壓縮的結果輸出至標準輸出

-#1-9,指定壓縮比,值越大壓縮比越大 ?

zcat:不顯式解壓縮的前提下查看文本文件內容 ?

實例:  gzip -c messages  >messages.gz

gzip -c -d messages.gz > messages

zcat messages.gz > messages

bzip2/bunzip2/bzcat

bzip2 [OPTION]… FILE …

-k: keep, 保留原文件

-d:解壓縮

-#1-9,壓縮比,默認為6 ?

bzcat:不顯式解壓縮的前提下查看文本文件內容

xz/unxz/xzcat

xz [OPTION]… FILE …

-k: keep, 保留原文件

-d:解壓縮

-#1-9,壓縮比,默認為6 ?

xzcat: 不顯式解壓縮的前提下查看文本文件內容

zip/unzip

zip可以多個文件壓縮歸檔成單個文件。

打包壓縮 zip –r sysconfig sysconfig/ ?

解包解壓縮  unzip sysconfig.zip

cat /var/log/messages | zip message 

unzip -p message > message

歸檔tar ?

歸檔就是將多個文件打包為單個文件以便管理,默認的歸檔不會執行壓縮。注意:歸檔不會刪除原文件。

tar [OPTION]…

(1)創建歸檔,壓縮 -v可以查看過程)

tar -c -f /PATH/TO/SOMEFILE.tar FILE…

tar cf /PATH/TO/SOMEFILE.tar FILE…

2)查看歸檔文件中的文件列表 -v可以查看過程)

tar -t -f /PATH/TO/SOMEFILE.tar

3)展開歸檔,解壓縮 -v可以查看過程)

tar -x -f /PATH/TO/SOMEFILE.tar

tar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/ ?

注意:(1)多個選項可以合并,但-f由于要帶參數,因此,應該放到最右側;如:-tf, –xf, -cf

(2)選項的引號符可以省略;如 tar xf  ,tar zf

結合壓縮工具實現:(1)gzip

                    后綴名:.tar.gaz

                    歸檔并壓縮:tar -zcf

展開歸檔:tar -zxf

(2)后綴名:.tar.bz2

                      歸檔并壓縮:tar -jcf

展開歸檔:tar -jxf

(3)后綴名:.tar.xz

                      歸檔并壓縮:tar –Jcf

展開歸檔:tar -Jxf

注意:展開歸檔可以直接使用tar –xf ,而無需為其指定對應的壓縮工具選項。

歸檔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 –iv  <etc.cpio cpio –idv < etc.cpio

 

原創文章,作者:Jagger,如若轉載,請注明出處:http://www.www58058.com/37492

(0)
JaggerJagger
上一篇 2016-08-22 09:29
下一篇 2016-08-22 09:29

相關推薦

  • 第七周作業

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;        (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [ro…

    2017-04-05
  • 面向對象魔術方法

    ##**特殊屬性**– __name__ 類、函數、方法等的名字– __module__ 類定義所在的模塊名– __class__ 對象或類所屬的類– __bases__ 類的基類的元組,順序為它們在基類列表中出現的順序– __doc__ 類、函數的文檔字符串,如果沒有定義則為None–…

    Linux干貨 2017-11-21
  • Bash腳本寫法及變量如何使用

    Bash是什么? bash腳本是作為linux執行與內核交互的一個方便快捷的腳本語言工具。它可以幫助我們快速的解決問題。 Bash寫法: 需要創建一個文件,以.sh結尾。這樣就生成一個腳本文件 我們文件內容開頭要以#!/bin/bash 開頭,這是腳本規定的格式,目的是告訴編譯器我們這個腳本是bash類型的腳本。 當上述工作都做好以后,我們就可以正式開始腳本…

    Linux干貨 2017-04-10
  • 通過webGUI顯示日志信息

         日志信息通常對于我們維護人員有著極為重要的意義,能夠為我們提供故障排查、運維監控、歷史操作記錄等等很多必要的信息。為了方便此類信息的獲取,我們可以搭建日志服務器,并實現webGUI顯示以便更直觀形象的觀察收集它們。     一、拓撲圖         &nbs…

    Linux干貨 2015-07-15
  • 實驗驗證Linux系統環境下路由的最長掩碼匹配原則

    實驗驗證Linux系統環境下路由的最長掩碼匹配原則 實驗環境拓撲如下 環境配置 HostA網卡配置 DEVICE=eth1 IPADDR=172.16.0.100 PREFIX=16 R1網卡配置 DEVICE=eth1 IPADDR=172.16.0.1 PREFIX=16 DEVICE=eth2 IPADDR=192.168.2.1 PREFIX=24 …

    2017-05-02
  • Btrfs文件系統

    一:概述     1.1簡介         Btrfs被稱為是下一代Linux文件系統。通常念成 Butter FS,Better FS 或B-tree FS。它采用了很多先進的文件系統設計,不僅解決了 ext2/3的擴展性問題,支持寫時…

    Linux干貨 2016-04-19
欧美性久久久久