文件查找&壓縮

locate

  • 文件查找:locate, fifindhtml

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

    實時查找:fifind正則表達式

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

    索引的構建是在系統較爲空閒時自動進行(週期性任務),執行updatedb能夠更新數據庫centos

    索引構建過程須要遍歷整個根文件系統,很消耗資源bash

    工做特色:markdown

    查找速度快併發

    模糊查找ide

    非實時查找oop

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

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

    -i 不區分大小寫的搜索

    -n N 只列舉前N個匹配項目

    -r 使用基本正則表達式

    #搜索名稱或路徑中包含「conf」的文件
    locate conf
    #使用Regex來搜索以「.conf」結尾的文件
    locate -r '\.conf$
    
    [root@centos8 ~]#locate -n 10 -ir '\.CONF$'
    /boot/loader/entries/5b85fc7444b240a992c42ce2a9f65db5-0-rescue.conf
    /boot/loader/entries/5b85fc7444b240a992c42ce2a9f65db5-4.18.0-147.el8.x86_64.conf
    /etc/autofs.conf
    /etc/autofs_ldap_auth.conf
    /etc/dracut.conf
    /etc/fuse.conf
    /etc/host.conf
    /etc/idmapd.conf
    /etc/kdump.conf
    /etc/krb5.conf
[root@centos8 Test]#yum install mlocate -y
[root@centos8 Test]#locate  passwd
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
[root@centos8 Test]#updatedb  更新數據庫
[root@centos8 Test]#locate  passwd

-r 正則表達式,搜索以某某後綴的
[root@centos8 Test]#locate  -r '\.conf$'
[root@centos8 Test]#touch  abc.txt
[root@centos8 Test]#locate  'abc.txt'
[root@centos8 Test]#updatedb      更新數據庫才能夠搜索到
[root@centos8 Test]#locate  'abc.txt'
/data/Test/abc.txt
[root@centos8 Test]#rm -rf abc.txt     滯後性。刪除了也可找到
[root@centos8 Test]#locate  'abc.txt'
/data/Test/abc.txt

-i 匹配時忽略大小寫
-c 不顯示匹配內容。只顯示匹配到的行
--regex 支持擴展的正則表達式

find

-maxdepth   -mindepth
[root@centos8 Test]#find /boot -maxdepth 1        #最大深度1級
[root@centos8 Test]#find /boot -mindepth 1        #最小深度1級
[root@centos8 Test]#find /boot -mindepth 1 -maxdepth  1       #只找一級

-depth 或者 -d    對每一個目錄先處理目錄內的文件,再處理目錄自己
[root@centos8 data]#find /data/test
/data/test
/data/test/f1.txt
/data/test/f2.txt
/data/test/test2
/data/test/test2/test3
/data/test/test2/test3/f3.txt
/data/test/test2/test3/f4.txt
[root@centos8 data]#find /data/test -depth
/data/test/f1.txt
/data/test/f2.txt
/data/test/test2/test3/f3.txt
/data/test/test2/test3/f4.txt
/data/test/test2/test3
/data/test/test2
/data/test

-name "文件名稱":支持使用glob,如:*, ?, [], [^],通配符要加雙引號引發來
-iname "文件名稱":不區分字母大小寫
-inum n 按inode號查找
-samefile name 相同inode號的文件
-links n   連接數爲n的文件
-regex 「PATTERN」:以PATTERN匹配整個文件路徑,而非文件名稱
-name   通配符的加雙引號引發來
[root@centos8 Test]#find  不指定條件就所有搜索
[root@centos8 Test]#find /etc  -name "*.txt"     #加雙引號
/etc/pki/nssdb/pkcs11.txt
[root@centos8 Test]#find  /etc/   -name *.txt    #加雙引號
[root@centos8 Test]#find  /etc/   -name "*.txt"   #加雙引號
/etc/pki/nssdb/pkcs11.txt

-iname 根據文件名查找,可是不區分大小寫
[root@wang ~]# find ./ -name "anaconda-ks.cfg"
./anaconda-ks.cfg
支持glob通配符
?任意單個字符
* 任意長度任意字符
[root@wang ~]# find ./ -name "*.cfg"
./anaconda-ks.cfg
./initial-setup-ks.cfg
[]匹配指定範圍內的的任意單個字符
[root@wang ~]# find ./ -name " (0-9)*.cfg"
./anaconda-ks.cfg
./initial-setup-ks.cfg
[^]匹配指定範圍內的單個字符取反
遍歷查找
find+option+查找路徑+查找條件+處理動做
根據文件的屬組和屬主來查找

 -inum 根據節點編號來搜索
[root@localhost ~]# find /etc  -inum 16802309
/etc/yum.repos.d
[root@localhost ~]# find /etc/ -regex .*\.conf$
[root@localhost ~]# find /etc/ -regex \.conf$
第二種方法錯誤,由於regex匹配的要是全路徑,而不是文件名

-type TYPE
TYPE能夠是如下形式:
f: 普通文件
d: 目錄文件
l: 符號連接文件
s:套接字文件
b: 塊設備文件
c: 字符設備文件
p: 管道文件
#查看/home的目錄
[root08:22 AMcentos8 /scripts]#find /home -type d -ls

-user USERNAME:查找屬主爲指定用戶(UID)的文件
-group GRPNAME: 查找屬組爲指定組(GID)的文件
-uid UserID:查找屬主爲指定的UID號的文件
-gid GroupID:查找屬組爲指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
 -user
[root@localhost ~]# find  / -user  wanghua  -ls
-ls  是find命令自帶的處理動做

 -regex  #加 .* 由於匹配的是路徑,而不是文件名
[root@localhost ~]# find  /etc/ -regex ".*\.conf$"

[root@localhost ~]# useradd xiaowang
[root@localhost ~]# userdel xiaowang
[root@localhost ~]# find / -nouser  -ls  查找沒有屬主的文件
[root@localhost ~]# find / -nogroup  -ls  查找沒有屬組的文件

-empty
[root@localhost ~]# find  /etc -empty  -type  f -ls   #ls 至關於  ll

#條件組合:
-o  或者
-a  與
! 或者 not  否認

#優先級問題:    -a 的優先級比-o高
[root@localhost ~]# find  /etc/ -empty -o -not  -type d -ls |wc -l
917
[root@localhost ~]# find  /etc/ -empty -o -not  -type d  |wc -l
988
由於:-not  -type  d  -ls  被當作了一塊來執行
[root@localhost ~]# find  /etc/ \( -empty -o -not -type d \) -ls  |wc -l
988

#找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件
find /tmp ( -not -user root -a -not -name 'f*' ) -ls
find /tmp -not ( -user root -o -name 'f*' ) –ls                 -ls 的前面必定要跟一個括號

#摩根定律:
(非A)或(非B)==非(A且B)
(非A)且(非B)==非(A或B)
!A  -a  !B = !(A -o B)
!A  -o  !B = !(A -a B)
[root@localhost ~]# find  /tmp \( -not -user root -a -not  -name 'f*' \) -ls
101371615    0 -rw-rw-r--   1 wanghua  wanghua         0 Apr 11 06:57 /tmp/wanghua

[root08:32 AMcentos8 /scripts]#find ! \( -type d -a -empty \)| wc -l
2
[root08:33 AMcentos8 /scripts]#find ! -type d -o ! -empty |wc -l
2

#文件夾的排除

#查找/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"
#排除/proc和/sys目錄
find /         \( -path "/sys" -o -path "/proc" \) -a -prune                          -o -type f -a -mmin -1

-size
[root@centos8 Test]#find  -size 6k -ls   
201727784      8 -rw-r--r--   1  root     root         6144 Apr 11 19:29 ./f1
201727806      8 -rw-r--r--   1  root     root         6000 Apr 11 19:30 ./f3
201727817      8 -rw-r--r--   1  root     root         5121 Apr 11 19:35 ./f4

[root@centos8 Test]#find  -size 6144c 
./f1
[root@centos8 Test]#find  -size  -6k    表示0到6k的文件

[root@centos8 Test]#find  -size  +6k   表示6K以上的文件
.
./f6

#時間戳
根據文件的時間戳來查找
以天爲單位: -atime 訪問時間  -mtime 修改時間  -ctime 改變時間
以分鐘爲單位  -amin  -mmin  -cmin
+3 訪問時間距離如今已經超過了三天
-3 訪問時間距離如今不足三天
3 距離今天正好達到三天的那一天
atime 以天爲單位

[root09:14 AMcentos8 /scripts]#find / -mtime +10    # 11天之前的文件
[root09:17 AMcentos8 /scripts]#find /var -mtime -1 -ls  #一天內的
[root09:19 AMcentos8 /scripts]#find /var -mmin -1 -ls   #一分鐘以內文件發生的變化

#權限來修改
-perm [/|-]MODE
MODE: 精確權限匹配
/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配便可,或關係,+ 從CentOS 7開始淘汰
-MODE:每一類對象都必須同時擁有指定權限,與關係
0 表示不關注    因此說-002 與 /002 等價,這類權限是要關注的,由於其餘人有寫權限    
說明:
find -perm 755 會匹配權限模式剛好是755的文件
只要當任意人有寫權限時,find -perm /222就會匹配
只有當每一個人都有寫權限時,find -perm -222纔會匹配
只有當其它人(other)有寫權限時,find -perm -002纔會匹配

#處理動做
-print:默認的處理動做,顯示至屏幕
-ls:相似於對查找到的文件執行「ls -l」命令
-fls file:查找到的全部文件的長格式信息保存至指定文件中,至關於 -ls > file
-delete:刪除查找到的文件,慎用!
-ok COMMAND {} \; 對查找到的每一個文件執行由COMMAND指定的命令,對於每一個文件執行命令以前,都會
交互式要求用戶確認
-exec COMMAND {} \;   批量,不回答就操做, 對查找到的每一個文件執行由COMMAND指定的命令
{}: 用於引用查找到的文件名稱自身

 -fls  至關於重定向
[root@centos8 Test]#find   -fls   /root/find.log
-delete 
[root@centos8 Test]#find -name "*.txt" -delete 
-ok
[root@centos8 Test]#for i in `find -name "f*"`;do mv $i /opt;done
[root@centos8 Test]#find -name "f*" -ok mv {} /opt \;
< mv ... ./f1 > ? y
< mv ... ./f2 > ? y
< mv ... ./f3 > ? 
< mv ... ./f4 > ? 
< mv ... ./f6 > ? 
< mv ... ./f7 > ? 

-exec
[root@centos8 Test]#find -name "f*" -exec mv {} /opt \;   無須要交互式,一次到位

#備份文件:
[root10:15 AMcentos8 /data]#find /data -name "*.txt" -exec cp {} {}.bak \;

#刪除 此時的rm是動做,因此無須 rm  -rf 
[root10:16 AMcentos8 /data]#find /data -name "*.txt" -exec rm {}  \;

#修改權限
[root@centos8 Test]#find -perm  644 -a  -name "f*" -exec chmod 000  {} \;

#備份配置文件,添加.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 {} \;

xargs 解決命令不支持標準輸入,將標準輸出的內容做爲命令的參數
-n#   #行顯示
[root@centos8 Test]#seq 3 |xargs 
1 2 3
[root@centos8 Test]#seq 3 |xargs -n2
1 2
3
#刪除和建立帳戶
[root@centos8 Test]#for i in {1..10};do useradd user$i;done  建立十個帳戶
[root@centos8 Test]#echo user{1..10} |xargs -n1 userdel -r  刪除十個帳戶
  刪除帳號只能一個一個的刪除
  或者:
  [root@centos8 Test]#for i in {1..10};do userdel user$i;done

#刪除文件名帶空格的文件
[root@localhost ~]# find -type f  -print0 | xargs -0 rm {} \;

1.查找/usr目錄下不屬於 root bin 或hadoop的全部文件或目錄
find /usr -not -user root -a -not -user bin -a -not -user 
hadoop
或者
find  /usr -not \(-user root -o -user bin -o -user hadoop\)
2.查找/etc目錄下,一週內內容被修改過,屬主不爲root 也不爲Hadoop的文件或目錄
find -mtime -7 -a -not\(-user root -o -user hadoop\)
find -mtime -7 -a -not -user root -a -not -user hadoop
3.查找當前系統上沒有屬主或屬組且最近一週內被訪問過的文件或目錄
find / -nouser -a -nogroup -a -atime -7
沒有屬組且沒有屬主==沒有屬組或屬主
4.查找/etc目錄下全部用戶沒有寫權限
find /etc -not -perm +222
或者/ 加號被替換了
find /etc -not -perm /222
摩根定律 +222 表示或邏輯  取反就是且
5.查找/etc目錄下至少有一類用戶沒有寫權限
find /etc -not -perm -222
6.查找/etc目錄下全部用戶都有執行權限,且其餘用戶有寫權限的文件或目錄
find /etc  -perm -113

文件查找&壓縮

文件查找&壓縮
12.jpg11.jpg

-002 與 /002 等價 可是/7000與-7000不等價

0 表示不關注 因此說-002 與 /002 等價

文件查找&壓縮

文件查找&壓縮
03.jpg04.jpg

xargs

文件查找&壓縮

文件查找&壓縮

01.jpg02.jpg

[root10:36 AMcentos8 /data]#find -name "*.bak" |xargs ls -Sl
-rw-r--r--. 1 root root 29 Jun  5 10:16 ./t.txt.bak
-rw-r--r--. 1 root root 25 Jun  5 10:16 ./f1.txt.bak
-rw-r--r--. 1 root root 22 Jun  5 10:16 ./echo.txt.bak
-rw-r--r--. 1 root root 21 Jun  5 10:16 ./seq.txt.bak
-rw-r--r--. 1 root root  8 Jun  5 10:16 ./b.txt.bak
#顯示10個數字
[root@centos8 ~]#seq 10 | xargs
1 2 3 4 5 6 7 8 9 10
[root10:57 AMcentos8 /data]#echo {1..10} 
1 2 3 4 5 6 7 8 9 10
[root10:58 AMcentos8 /data]#echo {1..10} |xargs 
1 2 3 4 5 6 7 8 9 10
[root10:58 AMcentos8 /data]#echo {1..10} |xargs -n1
1
2
3
4
5
6
7
8
9
10
[root10:58 AMcentos8 /data]#echo {1..10} |xargs -n2
1 2
3 4
5 6
7 8
9 10

#批量建立和刪除用戶
echo user{1..10} |xargs -n1 useradd 
echo user{1..10} | xargs -n1 userdel -r

#查找有特殊權限的文件,並排序
find /bin/ -perm /7000 | xargs ls -Sl

#併發執行多個進程
seq 100 |xargs -i -P10 wget -P /data   http://10.0.0.8/{}.html

#並行下載視頻
seq 199 | xargs -i -P3 you-get https://www.bilibili.com/video/BV1Et411E7dx?p={}

find -print0 處理特殊文件

[root11:23 AMcentos8 /data]#ls
 a  'a b'   b.log  'c  d'
[root11:23 AMcentos8 /data]#find |xargs ls   -Sl
ls: cannot access 'b': No such file or directory
ls: cannot access './c': No such file or directory
ls: cannot access 'd': No such file or directory
-rw-r--r--. 1 root root 21 Jun  3 01:41 ./b.log
-rw-r--r--. 1 root root 11 Jun  4 15:23 ./a
-rw-r--r--. 1 root root 11 Jun  4 15:23 ./a
-rw-r--r--. 1 root root  0 Aug  7  2019 ./.a
-rw-r--r--. 1 root root  0 Aug  7  2019 ./.b
-rw-r--r--. 1 root root  0 Aug  7  2019 ./.c
-rw-r--r--. 1 root root  0 Aug  7  2019 ./.d

.:
total 12
-rw-r--r--. 1 root root 21 Jun  3 01:41  b.log
-rw-r--r--. 1 root root 11 Jun  4 15:23  a
-rw-r--r--. 1 root root  3 Jun  5 11:07 'a b'
-rw-r--r--. 1 root root  0 Jun  5 11:05 'c  d'
[root11:23 AMcentos8 /data]#find -print0  |xargs -0  ls   -Sl
-rw-r--r--. 1 root root 21 Jun  3 01:41  ./b.log
-rw-r--r--. 1 root root 11 Jun  4 15:23  ./a
-rw-r--r--. 1 root root  3 Jun  5 11:07 './a b'
-rw-r--r--. 1 root root  0 Aug  7  2019  ./.a
-rw-r--r--. 1 root root  0 Aug  7  2019  ./.b
-rw-r--r--. 1 root root  0 Aug  7  2019  ./.c
-rw-r--r--. 1 root root  0 Jun  5 11:05 './c  d'
-rw-r--r--. 1 root root  0 Aug  7  2019  ./.d

.:
total 12
-rw-r--r--. 1 root root 21 Jun  3 01:41  b.log
-rw-r--r--. 1 root root 11 Jun  4 15:23  a
-rw-r--r--. 1 root root  3 Jun  5 11:07 'a b'
-rw-r--r--. 1 root root  0 Jun  5 11:05 'c  d'

#刪除特殊文件
[root11:23 AMcentos8 /data]#
[root11:23 AMcentos8 /data]#find |xargs rm
rm: cannot remove '.': Is a directory
rm: cannot remove './a': No such file or directory
rm: cannot remove 'b': No such file or directory
rm: cannot remove './c': No such file or directory
rm: cannot remove 'd': No such file or directory
[root11:26 AMcentos8 /data]#find -print0  |xargs -0  rm
rm: cannot remove '.': Is a directory

練習

一、查找/var目錄下屬主爲root,且屬組爲mail的全部文件

[root09:53 AMcentos8 /scripts]#find /var -user root -group mail -ls

二、查找/var目錄下不屬於root、lp、gdm的全部文件

方法一:
[root11:42 AMcentos8 /data]#find /var/    -not \( -user root -o -user lp -o -user gdm \)

方法二:
[root11:42 AMcentos8 /data]#find /var/  ! -user root ! -user lp ! -user gdm

三、查找/var目錄下最近一週內其內容修改過,同時屬主不爲root,也不是postfifix的文件

方法一
[root11:46 AMcentos8 /data]#find /var/ -mtime -7 ! -user root ! -user postfifix 

方法二
[root11:46 AMcentos8 /data]#find /var/ -mtime -7 -not \( -user root -o -user postfifix \)

方法三
[root11:47 AMcentos8 /data]#find /var/ -mtime -7 !  \( -user root -o -user postfifix \)

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

[root11:55 AMcentos8 /data]#find / \( -nouser -o -nogroup \)  -mtime  -7

五、查找/etc目錄下大於1M且類型爲普通文件的全部文件

[root11:57 AMcentos8 /data]#find /etc -size +1M  -type d  -ls

六、查找/etc目錄下全部用戶都沒有寫權限的文件

[root12:00 PMcentos8 /data]#find /etc !  -perm /222 -ls

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

[root12:02 PMcentos8 /data]#find /etc !  -perm -111 -ls

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

[root07:21 AMcentos7 ~]#find /etc/init.d/ -perm -111 -a -perm -002

壓縮和解壓縮及打包

#compress
[root@centos8 data]#dd if=/dev/zero of=f  bs=1M count=10
[root@centos8 data]#yum  install  ncompress -y
[root@centos8 data]#compress f   壓縮文件
[root@centos8 data]#uncompress f.Z  解壓縮
參數
-c  壓縮保留文件
[root@centos8 data]#compress -c f >f.z
[root@centos8 data]#ll
total 10252
-rw-r--r-- 1 root root 10485760 Apr 11 22:19 f
-rw-r--r-- 1 root root     6612 Apr 11 22:26 f.z
drwxr-xr-x 2 root root       95 Apr 11 21:40 Test
drwxr-xr-x 2 root root       45 Apr 11 11:57 testdir
-rw-r--r-- 1 root root     1281 Apr 11 10:50 user.log

-dc  解壓縮
compress -dc f.z  >f    #解壓縮保留原來的文件
# zcat  
不解壓直接看文件
[root@centos8 data]#zcat  f.z

gzip 和ungzip
~]# gzip m  直接壓縮刪除原文件
-d 解壓縮文件,丟失源文件
[root@centos8 data]#gzip -d httpd-2.4.46.tar.gz 

-k 壓縮之後不丟失原文件  (centos8的功能)
[root@centos8 data]#gzip -k httpd-2.4.46.tar 
[root@centos8 data]#gzip -k -5  httpd-2.4.46.tar   #加上數字表示壓縮比

[root@centos8 data]#ll
total 66504
drwxr-xr-x 86 root root     8192 Apr 11 22:34 etc
-rw-r--r--  1 root root     6612 Apr 11 22:26 f.z
-rw-r--r--  1 root root 42301440 Feb  2 18:16 httpd-2.4.46.tar
-rw-r--r--  1 root root  9424017 Feb  2 18:16 httpd-2.4.46.tar.gz

#標準輸出之後重定向
[root@centos8 data]#cat user.log |gzip > user.log.gz

#bzip2 bunzip2  #壓縮的比例比gz格式更高
[root@centos8 data]#yum install bzip2  -y
bzip2 -k xx     #壓縮保留原文件
bzcat 不解壓查看裏面的內容
cat  xx |bzip -9  >x.bz2

#xz 和 unxz  壓縮更多,可是花的時間也多
xzcat 不解壓就能夠查看

#zip unzip  支持壓縮文件夾
zip 能夠實現打包目錄和多個文件成一個文件並壓縮,但可能會丟失文件屬性信息,如:全部者和組信
息,通常建議使用 tar 代替

#打包並壓縮
zip –r /backup/sysconfig.zip /etc/sysconfig/
#不包括目錄自己,只打包目錄內的文件和子目錄
cd /etc/sysconfig; zip -r /root/sysconfig.zip * 
#默認解壓縮至當前目錄
unzip /backup/sysconfig.zip  
#解壓縮至指定目錄,若是指定目錄不存在,會在其父目錄(必須事先存在)下自動生成
unzip /backup/sysconfig.zip  -d /tmp/config  
cat /var/log/messages | zip messages  -
#-p 表示管道
unzip -p message.zip   > message
-r 壓縮文件夾
[root@centos8 data]#zip  -r  etc.zip etc
-rw-r--r--  1 root root 7.6M Apr 11 23:24 etc.zip
[root@centos8 data]#du -sh /etc
22M /etc
加密:
[root@centos8 data]#zip -h2 |grep pass
  -e        use standard (weak) PKZip 2.0 encryption, prompt for password  #輸密碼
  -P pswd   use standard encryption, password is pswd

[root@centos8 data]#zip -e -r etc2.zip /etc/
Enter password: 
Verify password: 
    壓縮加密  

[root@centos8 opt]#unzip  /data/etc2.zip    #解壓到當前的目錄下

[root@centos8 opt]#unzip -P 123456  etc3.zip  #非交互式解壓縮  非交互式輸入密碼

tar(壓縮文件夾)

不帶橫線:bsb分格
--      GUN分格
-       UNIX分格

#拷貝:
[root@centos8 data]#tar c /etc |tar x -C /opt

z    gzp
c    建立tar包
v    顯示詳細過程
f    指定壓縮文件名字
t    不解壓就看裏面的內容
p     保持文件的原有屬性,可是acl權限沒法保存
x    解開包
C     指定解壓的目標路徑
--exclude=PATTEND 打包時候排除不須要處理的文件和目錄
-h 打包軟連接文件指向真實源文件

                                     組合解壓縮  xf  
                                     組合打包壓縮
                                     zcf    gz
                                     bz2    j
                                     xz     J   安裝了xz命令才能調用J
==========================================================================
[root01:40 PMlocalhost /opt]#ll /etc/rc.local 
lrwxrwxrwx. 1 root root 13 Apr 15 08:42 /etc/rc.local -> rc.d/rc.local
[root01:41 PMlocalhost /opt]#tar zcf ./rc.local.tar.gz  /etc/rc.local #要用相對路徑
tar: Removing leading `/' from member names
[root01:42 PMlocalhost /opt]#ll
total 4
-rw-r--r--. 1 root root 116 Apr 19 13:42 rc.local.tar.gz
[root01:42 PMlocalhost /opt]#tar xf rc.local.tar.gz 
[root01:43 PMlocalhost /opt]#ll
total 4
drwxr-xr-x. 2 root root  21 Apr 19 13:43 etc
-rw-r--r--. 1 root root 116 Apr 19 13:42 rc.local.tar.gz
[root01:43 PMlocalhost /opt]#ll  etc
total 0
lrwxrwxrwx. 1 root root 13 Apr 15 08:42 rc.local -> rc.d/rc.local  #是個連接文件
[root01:45 PMlocalhost /opt]#

#加 h
[root01:50 PMlocalhost /opt]#ll /etc/rc.local 
lrwxrwxrwx. 1 root root 13 Apr 15 08:42 /etc/rc.local -> rc.d/rc.local
[root01:50 PMlocalhost /opt]#cd /etc
[root01:52 PMlocalhost /etc]#tar hzcf /opt/rc.local.tar.gz  rc.local#這樣打包的纔不是連接文件
[root01:53 PMlocalhost /etc]#cd /opt/
[root01:53 PMlocalhost /opt]#ll
total 4
-rw-r--r--. 1 root root 429 Apr 19 13:53 rc.local.tar.gz
[root01:53 PMlocalhost /opt]#tar xf  rc.local.tar.gz 
[root01:54 PMlocalhost /opt]#ll
total 8
-rw-r--r--. 1 root root 473 Nov 19  2015 rc.local
-rw-r--r--. 1 root root 429 Apr 19 13:53 rc.local.tar.gz
[root01:54 PMlocalhost /opt]#

#當前目標的全部文件打包
[root01:09 PMlocalhost /data]#tar zcvf data.tar.gz ./*   進入不到這個目錄裏面,只打包目錄裏面的文件,不打包目錄
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
[root01:09 PMlocalhost /data]#ls
1.txt  2.txt  3.txt  4.txt  5.txt  data.tar.gz
#查看裏面的內容
[root01:11 PMlocalhost /data]#tar -tf data.tar.gz 
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
#解壓  
文件解壓出來是文件
[root01:20 PMlocalhost /data]#ls
data.tar.gz
[root01:20 PMlocalhost /data]#tar  xf  data.tar.gz 
[root01:21 PMlocalhost /data]#ls
1.txt  2.txt  3.txt  4.txt  5.txt  data.tar.gz
目錄解壓出來就是目錄:
[root01:23 PMlocalhost /data]#ls
data1.tar.gz  data.tar.gz
[root01:23 PMlocalhost /data]#tar  xf  data1.tar.gz 
[root01:23 PMlocalhost /data]#ls
data1.tar.gz  data.tar.gz  txt

 --exclude
 [root01:58 PMlocalhost /opt]#ls
1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  rc.local  rc.local.tar.gz
[root01:58 PMlocalhost /opt]#tar zcf wanghua.tar.gz ./* --exclude=4.txt --exclude=5.txt
[root01:59 PMlocalhost /opt]#tar tf wanghua.tar.gz 
./1.txt
./2.txt
./3.txt
./6.txt
./rc.local
./rc.local.tar.gz

#利用 tar 進行文件複製
[root02:09 PMcentos8 /data]# tar c /var/ |tar x  -C /data

split

split 命令能夠分割一個文件爲多個文件

範例

#分割大的 tar 文件爲多份小文件
split -b Size –d tar-file-name prefix-name
split -b 1M mybackup.tgz mybackup-parts
#切換成的多個小分文件使用數字後綴
split -b 1M –d mybackup.tgz mybackup-parts

將多個切割的小文件合併成一個大文件

cat mybackup-parts* > mybackup.tar.gz

範例:

#切割文件

[root02:15 PMcentos8 /data]#split -b 1M var.tar.gz /data/var_zip  將 var.tar.gz 切割爲大小1M的文件,文件的後綴是字母

[root02:19 PMcentos8 /data]#split -b  1M -d  var.tar.gz /data/dig_zip 將 var.tar.gz 切割爲大小1M的文件,文件的後綴是數字

#合併文件
[root02:28 PMcentos8 /data]#cat /data/var_zip* > /data/var_zip
相關文章
相關標籤/搜索