文件查找和打包压缩


title: 文件查找和打包压缩
tags: Linux基础
categories: Linux基础
description: 关于Linux中对文件的查找以及对文件的打包与解压缩命令
abbrlink: c871820f
date: 2022-10-11 09:22:00

文件查找

在文件系统上查找符合条件的文件

文件查找:

  • 非实时查找(数据库查找):locate
  • 实时查找:find

一、locate

  • locate 查询系统上预先建立的文件索引数据库 /var/lib/mlocate/mlocate.db
  • 索引的构建是在系统较为空闲时自动进行(周期性任务),执行updatedb可以更新数据库
  • 索引构建过程需要遍历整个根文件系统,很消耗资源
  • locate 和 updatedb 命令来自于 mlocate 包

工作特点:

  • 查找速度快
  • 模糊查找
  • 非实时查找
  • 搜索的是文件的全路径,不仅仅是文件名
  • 可能只搜索用户具备读取和执行权限的目录

格式:

locate [OPTION]... PATTERN...

常用选项:

-i 不区分大小写
-n N 只列举前N个匹配项
-r 使用基本的正则表达式

示例:locatedb 创建数据库

[root@centos7 ~]#yum -y install mlocate
[root@centos7 ~]#locate conf
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
[root@centos7 ~]#updatedb
[root@centos7 ~]#ll /var/lib/mlocate/mlocate.db 
-rw-r----- 1 root slocate 978791 Oct 11 22:57 /var/lib/mlocate/mlocate.db
[root@centos7 ~]#locate -n 3 conf
/backup/etc_2022-10-05/GeoIP.conf
/backup/etc_2022-10-05/asound.conf
/backup/etc_2022-10-05/chkconfig.d

示例:文件的创建与删除无法立即更新数据库

[root@centos7 ~]#touch test1.log
[root@centos7 ~]#locate test1.log 
[root@centos7 ~]#updatedb
[root@centos7 ~]#locate test1.log 
/root/test1.log

[root@centos7 ~]#rm -f test1.log 
[root@centos7 ~]#locate test1.log 
/root/test1.log

二、find

find 是实时查找工具,通过遍历指定路径完成文件查找

工作特点:

  • 查找速度略慢
  • 精确查找
  • 实时查找
  • 查找条件丰富
  • 可能只搜索用户具备读取和执行权限的目录

格式

find [option] ... [查找路径] [查找条件] [处理动作]

查找路径:具体查找的目标路径,默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕

2.1 指定搜索目录层级

-maxdepth level 最大搜索目录深度,指定目录下的文件为第1级
-minddepth level 最小搜索目录深度

范例:

find /etc -maxdepth 2 -mindepth 2

2.2 先处理该目录中文件再处理目录本身

-depth

示例:

[root@Rocky8-mini ~]# find /data/test/
/data/test/
/data/test/f2.txt
/data/test/f1.txt

[root@Rocky8-mini ~]# find  /data/test/ -depth
/data/test/f2.txt
/data/test/f1.txt
/data/test/

2.3 根据文件名和inode查找

-name "文件名称"        # 支持使用glob,通配符需要加双引号引起来
-iname "文件名称"       # 不区分字母大小写
-inum n                # 按inode号查找
-samefile name         # 相同inode号的文件
-links n               # 链接数为n的文件
-regex "PATTERN"       # 以PATTERN匹配整个文件路径,而非文件名称

示例:

[root@Rocky8-mini ~]# find /data/ -name "*.txt"
/data/test/f2.txt
/data/test/f1.txt

2.4 根据属主、属组查找

-user USERNAME          # 查找属主为指定用户的文件
-group GROUPNAME        # 查找属组为指定组的文件
-uid USERID             # 查找属主为指定的UID的文件
-gid GROUPID            # 查找属组为指定的GID文件
-nouser                 # 查找没有属主的文件
-nogroup                # 查找没有属组的文件

2.5 根据文件类型查找

-type TYPE

TYPE 可以是以下形式:
f: 普通文件
d: 目录文件
l: 符号链接文件
s: 套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件

2.6 空文件或目录

-empty
[root@Rocky8-mini data]# find /data/test/  -empty

2.7 组合条件

与 -a
或 -o
非 -not

示例

[root@Rocky8-mini ~]# find /etc/ -type d -o -type l | wc -l
299
[root@Rocky8-mini ~]# find /etc/ -type d -o -type l -ls | wc -l
84
[root@Rocky8-mini ~]# find /etc/ \( -type d -o -type l \) -ls | wc -l
299

德摩根定律

!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

2.8 排除目录

查找条件

-path  PATH
-prune 剪切

示例

-- 查找/etc/下,除了/etc/security/目录的其它所有.conf后缀的文件 --
[root@Rocky8-mini ~]# find /etc/ -path '/etc/security' -a -prune -o -name "*.conf" | wc -l
80
-- 查找/etc/下,除/etc/security和/etc/systemd,/etc/dbus-1三个目录的所有.conf后缀的文件 --
[root@Rocky8-mini ~]# find /etc/ \( -path "/etc/security" -o -path "/etc/systemd" -o -path "/etc/dbus-1" \) -a -prune -o -name "*.conf" | wc -l
71

2.9 根据文件大小和时间戳查找

文件大小 常用单位:k,M,G
  -size [+|-]#UNIT
    #UNIT: (#-1,#]
    -#UNIT: [0,#-1]
    +#UNIT: (#,oo)
    
时间戳 
以天为单位
  -atime [+|-]#
    #:[#,#+1)
    +#:[#+1,oo]
    -#:[0,#)
  -mtime
  -ctime
以分钟为单位
  -amin
  -mmin
  -cmin

2.10 根据权限查找

-perm [/|-]MODe
  MODE: 精确权限匹配
    /MODE: 任何一类(u,g,o)对象的权限中只要能一位匹配即可
    -MODE: 每一类对象都必须同时拥有为其指定的权限标准

示例

find /etc -perm /060 -ls 只有当文件的属组有读或写权限时就可匹配到
find /etc -perm -644 -ls 文件的属主有读写权限,属组和其它有读权限

2.11 正则表达式

-regextype type
-regex pattern

2.12 处理动作

-print    默认动作,将结果输出至屏幕
-ls       类似对查找到的文件做"ls -dils"
-fls FILE    对查找到文件的长格式信息保存到指定文件中
-delete      删除查找到的文件
-ok COMMAND {} \;      对查找到的每个文件执行由COMMAND指定的命令,对每个文件执行命令前需交互式确认
-exec COMMAND {} \;    对查找到的每个文件执行由COMMAND指定的命令
  {}: 用于引用查找到的文件名称自身

note:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令

示例

# 备份配置文件,并添加.bak后缀
find -name "*.conf" -exec cp {} {}.bak \;

# 删除存在时间查过三天以上的Tom的临时文件
find /tmp -ctime +3 -user Tom -ok rm {} \;

# 在主目录中查找可被其他用户写入的文件并删除其权限
find ~ -perm -002 -exec chmod o-w {} \;

# 查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
find /data -perm -644 -type f -name "*.sh" -exec chmod 755 {} \;

三、参数替换 xargs

​ 有些命令不支持管道来传递参数,如 ls 命令。利用 xargs 命令可以将管道符传递过来的标准输入进行处理,然后传递到指定命令的参数位置上。

​ find 经常和 xargs 命令进行组合使用,如find | xargs COMMAND

示例:

# xargs 的默认行为:对多行标准输入进行处理,用空格代替换行符,成为一行,传递给 echo 命令作为参数,进行输出
[root@Rocky8-mini ~]# seq 5 | xargs 
1 2 3 4 5

[root@Rocky8-mini ~]# find -name "*.txt" | xargs rm

[root@Rocky8-mini ~]# find -name "*.conf" | xargs ls -Sl

# xargs 可以将一行中空格作为分隔符,用 -n# 选项,指定将 # 个空格替换成换行符,输出多行
[root@Rocky8-mini ~]# echo {1..6} | xargs -n3
1 2 3
4 5 6

# -d 选项为输入指定一个定制的定界符
# echo -n 不输出尾随的换行符
[root@Rocky8-mini ~]# echo -n "IXloveXyou!" | xargs -d X
I love you!

# find配合xargs实现从大到小的文件排序显示
[root@Rocky8-mini ~]# find /root -type f | xargs ls -lSh
-rw-------  1 root root  29K Oct 15 10:59 /root/.bash_history
-rw-------  1 root root  11K Oct 16 06:48 /root/.viminfo
-rw-------. 1 root root 1.5K Mar 13  2022 /root/anaconda-ks.cfg

# 批量创建和删除用户
[root@Rocky8-mini ~]# echo user{1..5} | xargs -n1 useradd
[root@Rocky8-mini ~]# echo user{1..5} | xargs -n1 userdel -r

#使用 null 字符代替空格作为分界符
[root@Rocky8-mini ~]# touch "a b.txt" a.txt b.txt
[root@Rocky8-mini ~]# find -type f | xargs ls
[root@Rocky8-mini test]# find -type f | xargs ls
ls: cannot access './a': No such file or directory
./a.txt  ./b.txt  b.txt
## 对查找出的文件使用null字符作为分界符
[root@Rocky8-mini test]# find -type f -print0
./b.txt./a.txt./a b.txt[root@Rocky8-mini test]#
## 使用null字符代替空格做分界符
[root@Rocky8-mini test]# find -type f -print0 | xargs -0 ls -l
-rw-r--r-- 1 root root 0 Oct 16 07:03 './a b.txt'
-rw-r--r-- 1 root root 0 Oct 16 07:03  ./a.txt
-rw-r--r-- 1 root root 0 Oct 16 07:03  ./b.txt

ASCII码中真正的0字符,即null字符

image-20220323153112986

练习

1、查找/var目录下属主为root,且属组为mail的所有文件

find /var \( -user root -a -group mail \) -ls

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

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

3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件

find /var -mtime -7 -a -user root -a -user postfix

4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

find / -atime -7 -a \( -nouser -o -nogroup \)

5、查找/etc目录下大于1M且类型为普通文件的所有文件

find /etc -type f -a -size +1M

6、查找/etc目录下所有用户都没有写权限的文件

find /etc  -not -perm /222 

7、查找/etc目录下至少有一类用户没有执行权限的文件

find /etc -not -perm -111

8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

find /etc/init.d -perm -113

压缩和解压缩

主要针对单个文件压缩,而非目录。

一、compress 和 uncompress

格式

compress Options [file...]
uncompress file.Z

常用选项

-d 解压缩,相当于 uncompress
-c 结果输出至标准输出,不删除源文件
-v 显示详情

zcat file.Z 不解压缩的前提下查看文本的文件内容

zcat file.Z > file

二、gzip 和 gunzip

格式

gzip [OPTIONs] FILE...

常用选项

-k keep,保留源文件,centos8新特性
-d 解压缩,相当于gunzip
-c 结果输出至标准输出,保留源文件
-# 指定压缩比(1-9)

zcat file.gz

三、bzip2 和 bunzip2

常用选项

-k keep,保留源文件,centos8新特性
-d 解压缩,相当于gunzip
-c 结果输出至标准输出,保留源文件
-# 指定压缩比(1-9)

# 不解压缩的前提下查看文本的文件内容
bzcat file.bz2

四、xz 和 unxz

常用选项

-k	keep,保留源文件
-d	解压缩
-c	结果输出至标准输出,保留源文件不改变
-#	指定压缩比,# 取值 1-9,默认为6

# 不解压缩的前提下查看文本的文件内容
xzcat file.xz

zip 和 unzip

​ zip 可以实现打包目录和多个文件成一个文件并压缩,但可能会丢失文件属性信息,如:所有者和组信息,一般建议使用 tar 代替。

[root@Rocky8-mini test]# zip
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
  The default action is to add or replace zipfile entries from list, which
  can include the special name - to compress standard input.
  If zipfile and list are omitted, zip compresses stdin to stdout.
  -f   freshen: only changed files  -u   update: only changed or new files
  -d   delete entries in zipfile    -m   move into zipfile (delete OS files)
  -r   recurse into directories     -j   junk (don't record) directory names
  -0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)
  -1   compress faster              -9   compress better
  -q   quiet operation              -v   verbose operation/print version info
  -c   add one-line comments        -z   add zipfile comment
  -@   read names from stdin        -o   make zipfile as old as latest entry
  -x   exclude the following names  -i   include only the following names
  -F   fix zipfile (-FF try harder) -D   do not add directory entries
  -A   adjust self-extracting exe   -J   junk zipfile prefix (unzipsfx)
  -T   test zipfile integrity       -X   eXclude eXtra file attributes
  -y   store symbolic links as the link instead of the referenced file
  -e   encrypt                      -n   don't compress these suffixes
  -h2  show more help

示例

# 打包并压缩
[root@Rocky8-mini test]# zip -r /backup/test.zip /data/test/

# 不包括目录本身,只打包目录内的文件和子目录
[root@Rocky8-mini test]# cd /data/test/; zip -r /root/test.zip *

# 默认解压缩至当前目录
[root@Rocky8-mini ~]# unzip test.zip

# 指定解压缩目录
[root@Rocky8-mini ~]# unzip test.zip -d /backup/

实例1:交互式加密和解密

[root@Rocky8-mini test]# zip -e test.zip *
Enter password: 
Verify password: 
  adding: a b.txt (stored 0%)
  adding: a.txt.bz2 (stored 0%)
  adding: b.txt (stored 0%)
[root@Rocky8-mini test]# unzip test.zip -d /backup/
Archive:  test.zip
[test.zip] a b.txt password: 
 extracting: /backup/a b.txt         
 extracting: /backup/a.txt.bz2       
 extracting: /backup/b.txt

实例2:非交互式加密和解密

[root@Rocky8-mini test]# zip -P 123456 test.zip *
[root@Rocky8-mini test]# unzip -P 123456 test.zip -d /backup/

打包和解包

一、tar

​ tar 即磁带归档,可以对目录和多个文件打包成一个文件,并且可以压缩,保留文件属性不丢失,常用于备份功能。

选项:

-A 新增文件到已经存在的备份文件
-b<区块数目> 设置每个记录的区块数目,每个区块大小为12Bytes
-B 读取数据时重设区块的大小
-c 建立新的备份文件
-C<目的目录> 切换到指定的目录
-d 对比备份文件内和文件系统上的文件的差异
-f<备份文件> 指定备份文件
-F<Script文件> 每次更换磁带时,就执行指定的Script文件
-g或--listed-incremental 处理GNU格式的大量备份
-G或--incremental 处理旧的GNU格式的大量备份。
-h或--dereference 不建立符号连接,直接复制该连接所指向的原始文件。
-i或--ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
-k或--keep-old-files 解开备份文件时,不覆盖已有的文件。
-K<文件>或--starting-file=<文件> 从指定的文件开始还原。
-l或--one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相
同,否则不予复制。
-L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
-m或--modification-time 还原文件时,不变更文件的更改时间。
-M或--multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
-N<日期格式>或--newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
-o或--old-archive或--portability 将资料写入备份文件时使用V7格式。
-O或--stdout 把从备份文件里还原的文件输出到标准输出设备。
-p或--same-permissions 用原来的文件权限还原文件。
-P或--absolute-names 文件名使用绝对名称,不移除文件名称前的"/"号。
-r或--append 新增文件到已存在的备份文件的结尾部分。
-R或--block-number 列出每个信息在备份文件中的区块编号。
-s或--same-order 还原文件的顺序和备份文件内的存放顺序相同。
-S或--sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
-t或--list 列出备份文件的内容。
-T<范本文件>或--files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或
建立符合设置条件的文件。
-u或--update 仅置换较备份文件内的文件更新的文件。
-U或--unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
-v或--verbose 显示指令执行过程。
-V<卷册名称>或--label=<卷册名称> 建立使用指定的卷册名称的备份文件。
-w或--interactive 遭遇问题时先询问用户。
-W或--verify 写入备份文件后,确认文件正确无误。
-x或--extract或--get 从备份文件中还原文件。
-X<范本文件>或--exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除
符合设置条件的文件。
-z或--gzip或--ungzip 通过gzip指令处理备份文件。
-Z或--compress或--uncompress 通过compress指令处理备份文件。
-<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
--after-date=<日期时间> 此参数的效果和指定"-N"参数相同。
--atime-preserve 不变更文件的存取时间。
--backup=<备份方式>或--backup 移除文件前先进行备份。
--checkpoint 读取备份文件时列出目录名称。
--concatenate 此参数的效果和指定"-A"参数相同。
--confirmation 此参数的效果和指定"-w"参数相同。
--delete 从备份文件中删除指定的文件。
--exclude=<范本样式> 排除符合范本样式的文件。
--group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
--help 在线帮助。
--ignore-failed-read 忽略数据读取错误,不中断程序的执行。
--new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同。
--newer-mtime 只保存更改过的文件。
--no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
--null 从null设备读取文件名称。
--numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
--owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
--posix 将数据写入备份文件时使用POSIX格式。
--preserve 此参数的效果和指定"-ps"参数相同。
--preserve-order 此参数的效果和指定"-A"参数相同。
--preserve-permissions 此参数的效果和指定"-p"参数相同。
--record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
--recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
--remove-files 文件加入备份文件后,就将其删除。
--rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令。
--same-owner 尝试以相同的文件拥有者还原文件。
--suffix=<备份字尾字符串> 移除文件前先行备份。
--totals 备份文件建立后,列出文件大小。
--use-compress-program=<执行指令> 通过指定的指令处理备份文件。
--version 显示版本信息。
--volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。

1、创建归档,保留权限

tar -c -f -p /PATH/TO/SOMEFILE.tar FILE...
tar -cpf /PATH/TO/SOMEFILE.tar FILE...

2、追加文件至归档,不支持对压缩文件追加

tar -rf /PATH/TO/SOMEFILE.tar

3、查看归档文件中的文件列表

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

4、展开归档

tar xf /PATH/TO/SOMEFILE.tar
tar xf /PATH/TO/SOMEFILE.tar -C /PATH/TO/DIR

5、结合压缩工具实现归档并压缩

-z 相当于gzip压缩工具
-j 相当于bzip2
-J 相当于xz

示例

[root@Rocky8-mini ~]# tar zcvf test.tar.gz /data/test/
[root@Rocky8-mini ~]# tar jcvf test.tar.bz2 /data/test/
[root@Rocky8-mini ~]# tar Jcvf test.tar.xz /data/test/
[root@Rocky8-mini ~]# ls
test.tar.bz2  test.tar.gz  test.tar.xz

# 只打包目录内的文件,不包括目录本身
[root@Rocky8-mini ~]# cd /data/test/
[root@Rocky8-mini test]# tar zcvf /root/test.tar.gz *

6、对文件进行归档压缩式,排除指定的文件

--exclude 排除文件

tar zcvf /root/test.tgz --exclude=/data/test/a.txt --exclude=/data/test/b.txt /data/test

7、选择指定的输入和选择要排除的文件列表

-T 选择指定的输入文件
-X 选择只当包含要排除的文件列表

tar zcvf backup.tgz -T /root/includefilelist -X /root/excludefilelist

二、split

split 命令可以将一个文件分割成多个文件

示例

# 创建一个10M的文件
[root@Rocky8-mini test]# dd if=/dev/zero of=/data/test/bigfile bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.00859871 s, 1.2 GB/s
# -b 指定分割的大小
[root@Rocky8-mini test]# split -b 1M bigfile smallfile
[root@Rocky8-mini test]# ll -h
total 20M
-rw-r--r-- 1 root root  10M Mar 23 04:23  bigfile
-rw-r--r-- 1 root root 1.0M Mar 23 04:24  smallfileaa
-rw-r--r-- 1 root root 1.0M Mar 23 04:24  smallfileab
-rw-r--r-- 1 root root 1.0M Mar 23 04:24  smallfileac
-rw-r--r-- 1 root root 1.0M Mar 23 04:24  smallfilead
-rw-r--r-- 1 root root 1.0M Mar 23 04:24  smallfileae
-rw-r--r-- 1 root root 1.0M Mar 23 04:24  smallfileaf
-rw-r--r-- 1 root root 1.0M Mar 23 04:24  smallfileag
-rw-r--r-- 1 root root 1.0M Mar 23 04:24  smallfileah
-rw-r--r-- 1 root root 1.0M Mar 23 04:24  smallfileai
-rw-r--r-- 1 root root 1.0M Mar 23 04:24  smallfileaj
# -d 分割后的文件用数字后缀 
[root@Rocky8-mini test]# split -b 1M -d  bigfile smallfile | ll -h
total 20M
-rw-r--r-- 1 root root  10M Mar 23 04:23  bigfile
-rw-r--r-- 1 root root    0 Mar 23 04:28  smallfile00
-rw-r--r-- 1 root root 468K Mar 23 04:28  smallfile01
-rw-r--r-- 1 root root 1.0M Mar 23 04:28  smallfile02
-rw-r--r-- 1 root root 1.0M Mar 23 04:28  smallfile03
-rw-r--r-- 1 root root 1.0M Mar 23 04:28  smallfile04
-rw-r--r-- 1 root root 1.0M Mar 23 04:28  smallfile05
-rw-r--r-- 1 root root 1.0M Mar 23 04:28  smallfile06
-rw-r--r-- 1 root root 1.0M Mar 23 04:28  smallfile07
-rw-r--r-- 1 root root 1.0M Mar 23 04:28  smallfile08
-rw-r--r-- 1 root root 1.0M Mar 23 04:28  smallfile09
# 将切割后的小文件合并成一个大文件
[root@Rocky8-mini test]# cat smallfile* > bigfile1
[root@Rocky8-mini test]# ll -h bigfile1
-rw-r--r-- 1 root root 10M Mar 23 04:29 bigfile1

三、cpio

cpio 是通过重定向的方式将文件进行打包备份、还原恢复的工具,它可以解压缩以“.cpio”和“.tar”结尾的文件

格式

cpio [option] > 文件名或设备名
cpio [option] < 文件名或设备名

常用选项

-o output模式,打包,将标准输入传入的文件名打包后发送到标准输出
-i input模式,解包,对标准输入传入的打包文件名解包到当前目录
-t 预览,查看标准输入传入的打包文件中包含的文件列表
-O filename 输出到指定的归档文件名
-A 向已存在的归档文件中追加文件
-I filename 对指定的归档文件名解压
-F filename 使用指定的文件名替代标准输入或输出
-d 解包生成目录,在cpio还原时,自动的建立目录
-v 显示打包过程中的文件名称

示例

# 备份/etc目录
[root@Rocky8-mini ~]# find /etc -print | cpio -ov > bak.cpio

# 将/data内容追加到bak.cpio
[root@Rocky8-mini ~]# find /data | cpio -oA -F bak.cpio

# 内容预览
[root@Rocky8-mini ~]# cpio -tv < bak.cpio

# 解包文件
[root@Rocky8-mini ~]# cpio -idv < bak.cpio

你可能感兴趣的:(linux,服务器,centos)