Linux文件系统介绍

文件系统

Window:C:\Users\xxx\xxx\xxx
Linux: /etc/sysconfig/network-scripts/

文件=Metadata+Data

Metadata:元数据,描述文件属性等信息

Data:数据,文件本身的信息

文件名称命名规则

  1. 严格区分大小写
  2. 可以使用除/以外的任意字符,避免使用一些特殊字符(* . ?)
  3. 不超过255字符
  4. 以.开头的文件为隐藏文件

文件路径

绝对路径:从/位置开始(从根位置开始)

相对路径:从.开始(从当前位置开始)

文件类型

  • 普通文件 [-]
  • 目录文件 [d]
  • 块设备文件 [b]
  • 字符设备文件 [c]
  • 套接字文件 [s]
  • 管道文件 [p]
  • 链接文件 [l]

如何去查看文件类型

  1. ls -l -a命令(ll)
  2. file命令
  3. stat命令

目录结构

注意:介绍/下的第1级目录

  • bin:Binary缩写,存放着经常使用的命令

  • boot:启动Linux需要的部分核心文件

  • dev:Device缩写,Linux外部设备(磁盘等)

  • etc:系统管理所需要的配置文件和子目录

  • home:用户的家目录

  • lib:程序运行时所依赖的库文件(包括内核模块)

  • lib64:专用于x86_64系统上的辅助共享库文件存放位置

  • media:自动识别的设备存放位置

  • mnt:用户临时挂载别的文件系统

  • opt:安装额外软件的存放位置

  • proc:虚拟目录,访问该目录可以获取系统相关信息

  • root:超级管理员家目录

  • run:存储系统运行依赖所有信息

  • sbin:超级管理员所使用的命令

  • srv:服务启动后需要的数据

  • sys:子文件系统,会映射一些内核信息(针对内核做调整的话)

  • tmp:临时文件目录

  • usr:用户的应用程序和相关文件

  • var:经常被修改的文件存储位置(日志等)

显示目录结构信息

  • tree /xxx — 显示指定目录中的所有数据和所有结构信息
  • tree -L 2 / — 查看目录结构层级信息
  • tree -d /xxx — 显示目录中所有结构信息

命令使用规则

<command> [options] [obj]

options:

  • 长选项 –
  • 短选项 - 短选项可以组合使用(-aild)
  • 一般来说,短选项的使用放在长选项之前

obj:肯定是文件

注意有空格

ls命令
[root@test ~]# ls --help
Usage: ls [OPTION]… [FILE]…
List information about the FILEs (the current directory by default).

OPTIONS:
-a : 显示所有文件(包括隐藏文件)
-l :显示列表中文件的详细信息
-i : 显示文件的inode号
-d :查看目录文件的信息

pwd命令: 显示当前路径
[root@test tmp]# pwd

cd命令 : 切换目录

cd命令默认是切换到各自的家目录下:/root/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@test tmp]# cd /etc/sysconfig/network-scripts/
[root@test network-scripts]# pwd
/etc/sysconfig/network-scripts

[rot@test ~]# cd test/
[root@test test]# cd
[root@test ~]# cd ./test/
[root@test test]# cd

[root@test test2]# pwd
/root/test/test2
[root@test test2]# cd .. # 返回上层目录
[root@test test]# ls
test2

[root@test test2]# cd - # 返回上次所在的目录

[root@test ~]# file test/
test/: directory
[root@test ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text

[root@test ~]# stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1260 Blocks: 8 IO Block: 4096 regular file
[root@test ~]# stat test/
File: ‘test/’
Size: 19 Blocks: 0 IO Block: 4096 directory

Linux基础文件操作

目录管理命令

  • mkdir 命令:创建目录
    • 常用参数:
      • -p:递归创建
      • -v:显示创建过程
      • -m:指定权限 如mkdir -m 700 /usr/xxx
1
2
3
[root@test tmp]# mkdir -pv book/linux
mkdir: created directory ‘book’
mkdir: created directory ‘book/linux
  • rmdir 命令:删除目录

    • -p:递归删除
    • -v:显示删除过程
  • mktemp命令:用来建立暂存文件,其创建的临时文件是唯一的 ,供shell 使用 。

    TEMPLATE 最后部分必须含有至少 3 个连续的”X“。如果 TEMPLATE 没有指定,将会使用tmp.XXXXXXXXXX。

    • -q:不显示任何有关文件或目录创建错误信息
    • -d:创建一个目录而非文件
    • -u:不创建任何东西,仅打印出名字
    • –tmpdir[=DIR]:在指定目录下

文件时间戳

文件 = 元数据 + 用户数据
metadata + data

stat命令:查看文件的元数据信息

file 显示文件信息类型命令

三种类型的文件时间戳:
Access: 2020-02-06 02:34:47.219532839 -0500 访问时间(读取文件内容) atime
Modify: 2020-02-06 02:34:47.219532839 -0500 修改时间(改变文件内容) mtime
Change: 2020-02-06 02:34:47.219532839 -0500 改变时间(元数据的改变) ctime

  • touch命令:可以创建文件
    • -a :只更改atime
    • -m : 只更改mtime
    • -t :指定更改时间的格式

文件管理类命令

  • cp命令

    原理:新建文件

    Usage: cp [OPTION]… [-T] SOURCE DEST
    or: cp [OPTION]… SOURCE… DIRECTORY
    or: cp [OPTION]… -t DIRECTORY SOURCE…

    • -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpr参数组合。
    • -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
    • -f:覆盖已经存在的目标文件而不给出提示。
    • -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答”y”时目标文件将被覆盖。
    • -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
    • -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
    • -l:不复制文件,只是生成链接文件。
    • -t:指定复制到的目标目录
  • 注意

    • SRC是单个文件
      • DEST不存在: 将SRC文件内容写入到DEST文件中
      • DEST存在: 将SRC文件覆盖至DEST文件中
    • SRC是多个文件
      • DEST必须是个目录
    • SRC是目录文件:
      • 需要使用-r参数
      • DEST为目录:
        • DEST不存在: 创建同名目录和一致性文件
        • DEST存在: 一致性文件
      • DEST为文件:报错
  • mv命令: 移动文件

    原理:在同一文件系统,改变的仅是其路径;不在同一文件系统,复制数据至目标文件,并删除原文件。

    Usage: mv [OPTION]… [-T] SOURCE DEST
    or: mv [OPTION]… SOURCE… DIRECTORY
    or: mv [OPTION]… -t DIRECTORY SOURCE…

    • -i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
    • -f: 在 mv 操作要覆盖某已有的目标文件时不给任何指示;
    • -b:当文件存在时,覆盖前为其创建一个备份
命令格式 运行结果
mv 文件名 文件名 将源文件名改为目标文件名
mv 文件名 目录名 将文件移动到目标目录
mv 目录名 目录名 目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名
mv 目录名 文件名 出错
  • rm命令:删除文件

    原理:将此文件指向的所有data block和inode标记为未使用

    • -i 删除前逐一询问确认。
    • -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
    • -r 将目录及以下之档案亦逐一删除。
    • -v 显示过程

更多命令及用法请参看:

文件链接

stat 查看文件类型

链接方式

  • 硬链接:为inode分配多个文件名,通过文件名找到inode,从而读取文件信息
  • 软链接:类似Window上的快捷方式

1cm5yd.jpg

文件 = metadata + data

inode: 一个指向数据存储位置的指针

block: 索引节点指向的位置,文件或数据的具体内容

metdata: inode 文件名 等信息

读取数据的原理

  1. 找到指定数据

  2. 读取数据内容,先获取文件数据inode信息

  3. 根据inode信息在磁盘上找到对应block

  4. 根据block信息获取文件真正内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
元数据信息
[root@test ~]# stat hello
File: ‘hello’
Size: 1 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33575029 Links: 1

权限 用户ID 组ID
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
selinux权限
Context: unconfined_u:object_r:admin_home_t:s0

时间戳
Access: 2020-05-04 02:51:04.011007753 -0500
Modify: 2020-05-04 02:50:51.949787952 -0500
Change: 2020-05-04 02:50:51.950787970 -0500
Birth: -

ln命令

作用:创建链接文件

Usage: ln [OPTION]… [-T] TARGET LINK_NAME (1st form)

常见选项:

  • -s: 建立符号链接文件,默认情况下是硬链接文件
  • -f: 强制创建
  • -i: 交互模式
  • -v:显示每个链接文件的名字
  • -b:为每个已存在的目标文件创建备份文件
1
2
3
4
5
6
7
8
9
10
11
[root@test tmp]# ll -i 1.txt 
16777289 -rw-r--r--. 1 root root 0 Feb 6 06:53 1.txt
[root@test tmp]# echo "hello" > 1.txt

[root@test tmp]# ln 1.txt 1_hard.txt
[root@test tmp]# ln -s 1.txt 1_soft.txt
[root@test tmp]# ll -i
total 8
16777289 -rw-r--r--. 2 root root 6 Feb 6 06:53 1_hard.txt
17256888 lrwxrwxrwx. 1 root root 5 Feb 6 06:55 1_soft.txt -> 1.txt
16777289 -rw-r--r--. 2 root root 6 Feb 6 06:53 1.txt

注意

  1. 当我们创建硬链接文件的时候,inode不会发生改变,链接数会加1,同时文件内容相同
  2. 当我们创建软链接文件的时候,inode会重新分配,链接数保持为1,同时文件内容相同
  3. 链接目的:在节省存储空间的情况下,共享文件
  4. 当源文件内容改变时,软硬链接文件内容都会改变
1
2
3
4
5
6
[root@test tmp]# echo "eagles" >> 1.txt
[root@test tmp]# cat 1_soft.txt && cat 1_hard.txt
hello
eagles
hello
eagles
  1. 当删除源文件时,软链接失效,硬链接正常;硬链接其实和源文件可以说表现上是独立的
1
2
3
4
5
6
[root@test tmp]# rm 1.txt
[root@test tmp]# cat 1_soft.txt
cat: 1_soft.txt: No such file or directory
[root@test tmp]# cat 1_hard.txt
hello
eagles
  • 硬链接特点

    1. 无论修改源文件还是硬链接文件,另一个文件都会改变
    2. 无论删除源文件还是硬链接文件,只要存在一个文件(link),这个文件依然可用
    3. 硬链接不会新建inode,也不会更改inode的总数
    4. 硬链接不能跨文件系统,因为在不同的文件系统中inode号是可以重新进行分配的
    5. 硬链接不能够链接目录
  • 软链接特点

    1. 无论修改源文件还是软链接文件,另一个文件都会改变

    2. 删除软链接文件,源文件不受影响;反之,软链接文件不正常

    3. 软链接会新建inode号和block,block中不存储实际文件数据,只存源文件的inode和绝对路径

    4. 软链接是可以链接目录的

    5. 软连接是可以跨分区的

问题:导致文件创建失败的原因

  • 命令有误
  • 空间不足
  • inode无法分配
  • 无相应权限
  • 文件重名

文件查找

  • 在文件系统上查找符合条件的文件
  • 文件查找:locate, find
    • 非实时查找(数据库查找):locate
    • 实时查找:find

locate

  • 查询系统上预建的文件索引数据库
    /var/lib/mlocate/mlocate.db

  • 依赖于事先构建的索引

    索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库
    updatedb

  • 索引构建过程需要遍历整个根文件系统,极消耗资源

  • 工作特点:

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

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

    • 搜索名称或路径中带有“conf”的文件
      locate conf
    • 使用Regex来搜索以“.conf”结尾的文件
      locate -r ‘\.conf$’

find

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

  • 工作特点:

    • 查找速度略慢
    • 精确查找
    • 实时查找
    • 可能只搜索用户具备读取和执行权限的目录
  • 语法:find [OPTION]… [查找路径] [查找条件] [处理动作]

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

查找条件

  • 指搜索层级

    • -maxdepth level 最大搜索目录深度,指定目录下的文件为第1级
    • -mindepth level 最小搜索目录深度
  • 先处理目录内的文件,再处理指定目录

    • -depth
  • 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了- depth选项,那么-prune选项将被find命令忽略。

    • -prune
  • 根据文件名和inode查找:

    • -name “文件名称”:支持使用glob
      • *, ?, [], [^]
    • -iname “文件名称”:不区分字母大小写
    • -inum n 按inode号查找
    • -samefile name 相同inode号的文件
    • -links n 链接数为n的文件
    • -regex “PATTERN”:以PATTERN匹配整个文件路径,而非文件名称
  • 根据属主、属组查找:

    • -user USERNAME:查找属主为指定用户的文件
    • -group GRPNAME: 查找属组为指定组的文件
    • -uid UserID:查找属主为指定的UID号的文件
    • -gid GroupID:查找属组为指定的GID号的文件
    • -nouser:查找没有属主的文件
    • -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)
  • 根据文件大小来查找:

    • -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

    image-20200503192632140

  • 根据权限查找:

    -perm [/|-]MODE

    • MODE: 精确权限匹配
    • /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰
    • -MODE:每一类对象都必须同时拥有指定权限,与关系
    • 0 表示不关注
    • find -perm 755 会匹配权限模式恰好是755的文件
    • 只有当每个人都有写权限时,find -perm -222才会匹配
    • 只有当其它人(other)有写权限时,find -perm -002才会匹配

处理动作

  • -print:默认的处理动作,显示至屏幕
  • -ls:类似于对查找到的文件执行“ls -l”命令
  • -delete:删除查找到的文件
  • -fls file:查找到的所有文件的长格式信息保存至指定文件中
  • -ok COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
  • -exec COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令
    • {}: 用于引用查找到的文件名称自身
  • find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令

参数替换xargs

  • 由于很多命令不支持管道|来传递参数,xargs用于产生某个命令的参数,xargs
    可以读入 stdin 的数据,并且以空格符或回车符将 stdin 的数据分隔成为参数
  • 许多命令不能接受过多参数,命令执行可能会失败,xargs可以解决
  • 注意:文件名或者是其他意义的名词内含有空格符的情况
  • find和xargs的组合:find | xargs COMMAND
  • -i 用{}来指定传递的数据
  • 示例:
    • ls | xargs rm 删除当前目录下的大量文件
    • find /sbin/ -perm +700 | ls -l 这个命令是错误的
    • find /bin/ -perm /7000 | xargs ls -sl 查找有特殊权限的文件,并排序
    • find -type f -name “*.txt” -print0 | xargs -0 rm 以字符nul分隔

示例

  • 找出/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"

  • 备份配置文件,添加.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

  • 查找/var目录下属主为root,且属组为mail的所有文件或目录
    find /var ‐user root ‐group mail

  • 查找/usr目录下不属于root,bin或Hadoop的所有文件或目录
    find /usr ‐not ‐user root ‐a ‐not ‐user bin ‐a ‐not ‐user centos
    find /usr ‐not \(‐user root ‐o ‐user bin ‐o ‐user hadoop\)

  • 查找/etc目录下最近一周内容曾被访问过的文件或目录
    find /etc/ ‐atime ‐7

  • 查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
    find / ‐nouser ‐a ‐nogroup ‐a ‐atime ‐7

  • 查找/etc目录下大于1M且类型为普通文件的所有文件或目录
    find /etc ‐size +1M ‐type f

  • 查找/etc目录下所有用户都没有写权限的文件
    find /etc ‐not ‐perm /222

  • 查找/etc目录下至少一类用户没有执行权限的文件
    find /etc ‐not ‐perm ‐111

  • 查找/etc/init.d目录下,所有用户都执行权限,且其它用户写权限的文件
    find /etc/init.d ‐perm ‐113

  • 查找指定数据信息进行复制 查找出*.txt文件,批量复制到/tmp目录*

  • 将找到的信息放到cp 和 最终目录中间
    find /oldboy -type f -name "*.txt"|xargs -i cp {} /tmp

    xargs -i:用{}代替传递的数据

  • 利用cp指明谁是数据最终保存的目录信息
    find /oldboy -type f -name "*.txt"|xargs cp -t /tmp

  • 查找指定数据信息进行移动 查找出*.txt文件,批量移动到/tmp目录

    • 将找到的信息放到cp 和 最终目录中间
      find /oldboy -type f -name "*.txt"|xargs -i mv {} /tmp
    • 利用cp指明谁是数据最终保存的目录信息
      find /oldboy -type f -name "\*.txt"|xargs mv -t /tmp

文件压缩

  • 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 解压缩,相当于uncompress
    • -c 结果输出至标准输出,不删除原文件
    • -v 显示详情
  • uncompress file.Z 解压缩
  • zcat file.Z 不显式解压缩的前提下查看文本文件内容
    示例:zcat file.Z >file

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.gz > message -p 表示管道

tar工具

  • tar(Tape ARchive,磁带归档的缩写)

  • tar [OPTION]…

    • -A 追加 tar 文件至归档

    • -c 创建一个新归档

    • -r 追加文件至归档结尾

    • -t 列出归档内容

    • -x 从归档中解压文件

    • -f 使用归档文件或 ARCHIVE 设备

    • -p 解压文件权限信息(默认只为超级用户服务)

    • -z 通过 gzip 过滤归档

  1. 创建归档,保留权限

    tar -cpvf /PATH/FILE.tar FILE...

  2. 追加文件至归档: 注:不支持对压缩文件追加

    tar -rf /PATH/FILE.tar FILE...

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

    tar -tf /PATH/FILE.tar

  4. 展开归档

    tar -xf /PATH/FILE.tar

    tar -xf /PATH/FILE.tar -C /PATH/ -C 指定目录

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

    -j: bzip2, -z: gzip, -J: xz

  • –exclude 排除文件
    tar zcvf /root/a3.tgz --exclude=/app/host1 --exclude=/app/host2 /app

  • –exclude-from=FILE 批量排除FILE中指定的文件

    tar zcvf /root/a3.tgz --exclude-from=a.txt

  • –remove-files 归档/压缩之后删除源文件
  • -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-
  • 其他常用:

    • -d 记录文件差异
    • -v 显示指令执行过程
  • -z 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz

  • -h 跟踪符号链接;将它们所指向的文件归档并输出

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