文件系统管理和xfs文件系统备份恢复

文章目录

    • 写在开头的话
  • 文件系统管理和xfs文件系统备份恢复
    • 00. 目录结构和绝对路径、相对路径
    • 01. 根下的目录结构说明
      • 1.1 附加说明
        • `/usr`
    • 02. 文件、目录操作类命令
      • 2.1 `pwd`命令
        • 2.1.1 功能说明与语法格式
        • 2.1.2 选项说明
        • 2.1.3 Bash提示符(PS1变量)
      • 2.2 cd命令
        • 2.2.1 功能说明与语法格式
        • 2.2.2 选项说明
        • 2.2.3 命令演示
      • 2.3 `tree`:以树形结构显示目录下的内容
        • 2.3.1 功能说明与语法格式
        • 2.3.2 参数选项
        • 2.3.2 命令演示
      • 2.4 `mkdir`创建目录
        • 2.4.1 功能说明和语法格式
        • 2.4.2 参数选项
        • 2.4.3 命令演示
      • 2.5 touch 创建空文件或改变文件的时间属性
        • 2.5.1 命令说明与语法格式
        • 2.5.2 选项说明
        • 2.5.3 命令演示
      • 2.6 ls 显示目录下的内容及其相关属性信息
        • 2.6.1 功能说明与语法格式
        • 2.6.2 选项说明
        • 2.6.3 命令演示
      • 2.7 cp:复制文件或目录
        • 2.7.1 功能说明及语法格式
        • 2.7.2 参数选项
        • 2.7.3 使用演示
        • 2.7.4 取消别名
        • 2.7.5 快速备份文件
      • 2.8 移动或重命名文件
        • 2.8.1 功能说明及其语法格式
        • 2.8.2 选项说明
        • 2.8.3 命令演示
      • 2.9 rm 删除文件或目录
        • 2.9.1 功能说明
        • 2.9.2 选项说明
        • 2.9.3 命令演示
        • 2.9.4 补充
      • 2.10 rmdir 删除空目录
        • 2.10.1 功能说明
        • 2.10.2 选项说明
        • 2.10.3 使用演示
      • 2.11 ln:硬链接与软链接
        • 2.11.1 功能与语法
        • 2.11.2 硬链接与软链接
        • 2.11.3 命令演示
      • 2.12 readlink 查看符号链接文件的内容
        • 2.12.1 功能说明和语法
      • 2.13 stat 显示文件或文件系统状态
        • 2.13.1 功能说明及语法格式
        • 2.13.2 参数详解
        • 2.13.3 命令演示
        • 2.13.4 举例
      • 2.14 more 分页显示文件内容
        • 2.14.1功能说明
        • 2.14.2 语法格式
        • 2.14.3 选项说明
        • 2.14.4 命令演示
      • 2.15 less:分页显示文件内容
        • 2.15.1 功能说明
        • 2.15.2 语法格式
        • 2.15.3 选项说明
        • 2.15.4 命令演示
      • 2.16 显示文件内容尾部
        • 2.16.1 功能说明与语法格式
        • 2.16.2 选项说明
        • 2.16.3 命令演示
      • 2.17 tailf:跟踪日志文件
        • 2.17.1 功能说明与语法格式
        • 2.17.2 选项说明
        • 2.17.3 命令演示
    • 03. xfs 文件系统的备份与恢复
      • 3.1 xfs 文件系统介绍
      • 3.2 xfs 文件系统备份与恢复演示
        • 3.2.1 xfs文件系统备份
        • 3.2.2 xfs文件系统恢复
        • 3.2.3 xfsdump的注意事项
      • 3.3 xfs文件系统增量备份
        • 3.3.1 概念讲解
        • 3.3.2 增量备份演示
      • 3.4 xfs查看分区碎片化程度
    • 写在最后的话:


这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/110959223
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!


写在开头的话

  • 请记住:实践是掌握知识的最快方法
  • 如果你只是怀着看看的态度去快速浏览文章,而不去认认真真的把文章里面讲的任何一个知识点去实践一遍,那么你永远也掌握不了它
  • 生命不息,折腾不止!

文件系统管理和xfs文件系统备份恢复

00. 目录结构和绝对路径、相对路径

  • 查看cpu信息
[root@idys ~] cat /proc/cpuinfo 
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 142
model name      : Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
stepping        : 9
microcode       : 0x8e
cpu MHz         : 2712.000
cache size      : 3072 KB
physical id     : 0
siblings        : 2
  • 查看文件状态信息:stat
    • -t:使用指定的日期时间而非现在的时间
    • -a:只更改atime
    • -m:只更改mtime
    • -c:不建立任何文档
    • -r:实现时间戳同步,touch -r b.txt a.txt,让a.txt时间戳和b.txt同步
[dayuanshuai@idys ~] stat a.txt 
  File: ‘a.txt’
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 51286541    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/dayuanshuai)   Gid: ( 1000/dayuanshuai)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2020-05-25 08:29:46.174755606 +0800
Modify: 2020-05-25 08:29:42.597711199 +0800
Change: 2020-05-25 08:29:42.597711199 +0800
 Birth: -
 
 # 修改 atime
[dayuanshuai@idys ~] touch -a -t 201005120812.12 a.txt      
[dayuanshuai@idys ~] stat a.txt 
  File: ‘a.txt’
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 51286541    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/dayuanshuai)   Gid: ( 1000/dayuanshuai)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2010-05-12 08:12:12.000000000 +0800
Modify: 2020-05-25 08:29:42.597711199 +0800
Change: 2020-05-25 08:40:02.729588578 +0800
 Birth: -

# 修改mtime
[dayuanshuai@idys ~] touch -m -t 201206110812.12 a.txt 
[dayuanshuai@idys ~] stat a.txt 
  File: ‘a.txt’
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 51286541    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/dayuanshuai)   Gid: ( 1000/dayuanshuai)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2010-05-12 08:12:12.000000000 +0800
Modify: 2012-06-11 08:12:12.000000000 +0800
Change: 2020-05-25 08:40:35.362989206 +0800
 Birth: -
  • tail命令
    • -f:动态显示数据(不关闭),常用来查看日志
[dayuanshuai@idys ~] tail -f a.txt # dayuanshuai用户动态查看
abc
tail: a.txt: file truncated
root_modify

# echo 动态修改
[root@idys ~] echo root_modify>/home/dayuanshuai/a.txt 

  • Linux/dev/sr0就是/dev/cdrom
  • 一个块设备文件可以挂载在多个目录下
[root@idys ~]# mount | grep '/dev/sr0'  # 
/dev/sr0 on /media/cdrom1 type iso9660 (ro,relatime)
[root@idys ~]# mkdir /media/cdrom2
[root@idys ~]# mount /dev/sr0 /media/cdrom2/
mount: /dev/sr0 is write-protected, mounting read-only
  • 修改显示提示符
[root@idys ~]# vim /etc/profile
***********
PS1='[\u@\h \W] '  # 在末尾加入这一行
  • 让配置文件生效
[root@idys ~]# source /etc/profile
[root@idys ~] . /etc/profile  # 使用上面的或者下面的

让配置文件生效可以使用source /etc/profile或者. /etc/profile,注意

  • .号于/etc/profile之间有空格。
  • 当你使用过source /etc/profile之后就不要继续使用. /etc/profile
  • 设置定时任务,每隔2个小时便更新时间
[root@idys ~] crontab -e  # 对当前用户设置定时任务,每隔两个小时便同步时间
no crontab for root - using an empty one
0 */2 * * * ntpdate ntp1.aliyun.com &> /dev/null
  • 重启服务
[root@idys ~] systemctl restart crond
  • 查看是否有安装tree这个软件包
[root@idys ~] yum list installed | grep tree
  • 使用yum安装tree
[root@idys ~] yum -y install tree
  • 使用yum卸载tree
[root@idys ~] yum -y remove tree
  • 进入到对应的挂载目录下,使用rpm安装tree
[root@idys ~] cd /media/cdrom1/Packages/
[root@idys Packages] rpm -ivh tree-1.6.0-10.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:tree-1.6.0-10.el7                ################################# [100%]
  • 查找根目录/下深度为1的链接文件)
[root@idys Packages] find / -maxdepth 1 -type l -exec ls -dl {} \;
lrwxrwxrwx. 1 root root 7 Sep 13 16:08 /bin -> usr/bin
lrwxrwxrwx. 1 root root 8 Sep 13 16:08 /sbin -> usr/sbin
lrwxrwxrwx. 1 root root 7 Sep 13 16:08 /lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Sep 13 16:08 /lib64 -> usr/lib64

01. 根下的目录结构说明

  • 目录说明
目录 说明
/ 处于linux系统树形结构的最顶端,它是linux文件系统的入口,所有的目录文件、普通文件、块设备文件、字符设备文件、管道文件、链接文件都在 / 之下
/bin binBinary的缩写。/bin目录下存放着常用的二进制命令。比如 lscpmkdircut等;和/usr/bin类似,里面存放一些用户级gnu工具
/boot 存放的系统启动相关的文件,例如:kernel.grub(引导装载程序)和内核文件
/dev 设备文件存放目录
/etc 配置文件存放目录
/etc/passwd用户信息文件
/etc/shadow用户密码文件
/etc/group存储用户组信息
/etc/fstab系统开机自动挂载分区列表
/etc/hosts设定用户自己的IP与主机名对应的信息
/home 普通用户家目录
/lib 库文件存放目录
/lost+found
ext文件系统会有这个目录
默认为空,被fsckfile system check用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查)用来放置零散文件(没有名称的文件) 当系统非法关机后,这里就会存放一些文件。在ext文件系统中,每个分区的挂载点下会有这个目录
/media 挂载便捷式移动设备的目录
/mnt 临时文件系统的挂载点
/opt option可选择的意思,第三方应用程序的安装位置
/proc 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录是伪装的文件系统proc的挂载目录,proc并不是真正的文件系统。因此,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。也就是说,这个目录的内容不在硬盘上而是在内存里
/sys 存放系统上硬件设备相关信息的虚拟文件系统
/run 运行目录,存放的是系统运行时的数据,比如进程的PID文件
/srv 服务目录,存放的是系统服务相关的文件
/sbin 大多数涉及系统管理的命令都存放在该目录中,它是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,凡是目录sbin中包含的命令都是root权限才能执行的。不能关联至独立分区,OS启动即会用到的程序
/tmp 该目录用于存放临时文件,有时用户运行程序的时候,会产生一些临时文件。/tmp就是用来存放临时文件的。/var/tmp目录和该目录的作用是相似的,不能存放重要数据,它的权限比较特殊 。设置了粘贴位,只能被拥有者或者root才能删除
/var 存放可变数据文件(variable data files),此目录下的子目录有
/var/cache:应用程序缓存数据目录
local:专用于为/usr/local 下的应用程序存储可变数据
lock:锁文件
log:日志目录及文件
opt:专用于为/opt下的应用程序存储可变数据
run:运行中的进程相关的数据,通常用于存储进程PID文件
spool:应用程序数据池
tmp:保存系统两次重启之间产生的临时数据
mail:用户邮箱文件
/usr usr并不是代表user的意思,它的全名是Unix System ResourceUnix系统资源,它是系统帮助文档以及源码包安装的位置。universal sharedread-only data 全局共享只读数据:(一般来说安装完系统后占用磁盘空间最大目录)
/lib 基本共享库文件,以及内核模块文件lib/modules
/lib64 专用于x86_64系统上的辅助共享库文件存放位置

/lib/lib64实际上分别是/usr/lib/usr/lib64的链接文件

  • 这个目录里存放着系统最基本的动态链接共享库,包含许多被/bin//sbin/中的程序使用的库文件,目录/usr/lib/中含有更多用于用户程序的库文件。作用类似于windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库

  • 注:lib***.a是静态库

  • lib***.so是动态库

  • 静态库在编译时被加载到二进制文件中

  • 动态库在运行时加载到进程的内存空间中

  • 简单的说:这些库是为了让你的程序能够正常编译运行的

  • 其实类似于WIN.dll文件,几乎所有的应用程序都需要用到这些共享库

1.1 附加说明

/usr

  • /usr/bin

  • /usr/sbin

  • /usr/lib

  • /usr/include

    • C程序的头文件(header files)
  • /usr/share:结构化的独立的数据

  • /usr/local:第三方应用程序的安装位置,在此目录下又有以下这些目录

    • binsbinliblib64etcshare

  • 查看proc目录的挂载情况
[root@idys ~] mount -l | grep proc
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

可以看到挂载在/proc这个目录下的并不是一个设备文件,而是一个叫做proc的文件系统挂载在/proc目录下

  • 查看内存信息
[root@idys ~] cat /proc/meminfo  | head -10
MemTotal:        1863104 kB
MemFree:         1485620 kB
MemAvailable:    1550016 kB
Buffers:            4140 kB
Cached:           189236 kB
SwapCached:            0 kB
Active:           161568 kB
Inactive:          94424 kB
Active(anon):      63060 kB
Inactive(anon):     9236 kB
  • 查看cpu信息
[root@idys ~] cat /proc/cpuinfo | head -10
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 8
model name      : AMD Ryzen 5 2600X Six-Core Processor
stepping        : 2
microcode       : 0x800820b
cpu MHz         : 3600.035
cache size      : 512 KB
physical id     : 0
  • 因为/proc是通过proc文件系统挂载的,而proc文件系统是一个伪文件系统,它指示内存的映射,所以用du -sh是无法查看/proc的容量的
[root@idys ~]   du -sh /proc/
du: cannot access ‘/proc/1867/task/1867/fd/4’: No such file or directory
du: cannot access ‘/proc/1867/task/1867/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/1867/fd/3’: No such file or directory
du: cannot access ‘/proc/1867/fdinfo/3’: No such file or directory
0       /proc/

  • /sys也是虚拟文件系统sys的挂载目录,所以/sys也是没有占用磁盘容量的
[root@idys ~]  du -sh /sys
0       /sys
  • run目录下查看以.pid结尾的文件
[root@idys ~] find /run/ -name '*.pid'
/run/syslogd.pid
/run/sshd.pid
/run/crond.pid
/run/chrony/chronyd.pid
/run/auditd.pid
/run/tuned/tuned.pid
  • 查看/tmp目录的权限
[root@idys ~] ls -ld /tmp/
drwxrwxrwt. 10 root root 240 Nov  1 10:54 /tmp/

可以看到该目录权限位为 777,同时设置了sticky(粘滞位),里面的文件只能被root或者owner删除


02. 文件、目录操作类命令

2.1 pwd命令

2.1.1 功能说明与语法格式

  • pwd命令是print working directory中每个单词首字母的缩写,其功能是显示当前工作目录的绝对路径

  • 语法格式

pwd [option]

2.1.2 选项说明

参数 含义
-L logical首字母缩写,表示显示逻辑路径(忽略软链接文件),取PWD环境变量的值。
-P Physical首字母缩写,表示显示物理路径时如果当前目录是软链接文件,则会显示软链接文件对应的源文件
  • 使用ls -l查看/lib目录,可以发现其是/usr/lib的软链接文件
[root@idys lib]  ls -l /lib
lrwxrwxrwx. 1 root root 7 Sep 13 16:08 /lib -> usr/lib
  • 进入/lib目录下,分别使用pwd命令和对应的几个参数查看该目录下对应的路径显示
[root@idys lib] pwd
/lib
[root@idys lib] pwd -L
/lib
[root@idys lib] pwd -P
/usr/lib

可以看到pwdpwd -L显示的是逻辑路径,而pwd -P显示的是/lib对应的真实物理路径

  • 查看$pwd对应的值
[root@idys lib] echo $PWD
/lib

可以看到$pwd里面存放的也是逻辑路径

2.1.3 Bash提示符(PS1变量)

  • PS1常用参数
参数 含义
\d 代表日期,格式为weekday month date,例如:`Mon Aug 1
\H 完整的主机名称。例如:我的机器名称为:idayuanshuai.com,则这个名称就是idayuanshuai.com
\h 仅取主机的第一个名字,如上例,则为idayuanshuai.com则被省略
\t 显示时间为24小时格式,如:HHMMSS
\T 显示时间为12小时格式
\A 显示时间为24小时格式:HHMM
\u 当前用户的账号名称
\v BASH的版本信息
\w 完整的工作目录名称。家目录会以 ~代替
\W 利用basename取得工作目录名称,所以只会列出最后一个目录
\# 执行的第几个命令
\$ 提示字符,如果是root时,提示符为:# ,普通用户则为:$
\[ 字符[
\] 字符]
\! 命令行动态统计历史命令次数
  • 临时修改PS1变量的值
[root@idys lib] PS1='[\u@\h \w] '
  • 随便进入一个目录
[root@idys /lib] cd /etc/sysconfig/
[root@idys /etc/sysconfig] 

永久修改变量PS1可以去/etc/bashrc上面修改或者/etc/profile上面修改


2.2 cd命令

2.2.1 功能说明与语法格式

  • cd命令是change directory中每个单词的首字母缩写

  • 语法格式

cd [option] [dir]

2.2.2 选项说明

参数 含义
-P 如果目录是链接文件,那么则切换到该目录对应的实际原目录
-L 进入的是目录的逻辑路径

2.2.3 命令演示

  • 切换到链接目录对应的源目录
[root@idys /etc/sysconfig] cd -P /lib
[root@idys /usr/lib] pwd
/usr/lib

/lib目录是/usr/lib的源目录

  • 进入到前一个目录
[root@idys /usr/lib] cd -
/etc/sysconfig
[root@idys /etc/sysconfig] pwd
/etc/sysconfig
  • 进入到家目录
[root@idys /etc/sysconfig] cd ~
[root@idys ~] 

2.3 tree:以树形结构显示目录下的内容

2.3.1 功能说明与语法格式

  • tree命令以树形结构列出指定目录下所有的内容,包括所有文件、子目录、及其子目录里面的目录和文件

  • 语法格式

tree [option] [directory]

2.3.2 参数选项

参数 含义
-a 显示所有文件和目录,包括隐藏文件
-d 只显示目录
-C 在文件和目录清单加上色彩,便于区分各种类型。
-f 显示每个文件的全路径
-i 不显示树枝,常与-f参数配合使用
-L level 遍历目录的最大层数,level为大于0的正整数
-F 在执行文件,目录,Socket,符号连接,管道名称等不同类型文件的结尾,各自加上*,/,=,@,|
-p 列出权限标示
-s 列出文件或者目录的大小

2.3.2 命令演示

  • 查看是否安装tree
[root@idys ~] yum list installed | grep tree
tree.x86_64                          1.6.0-10.el7                      installed
[root@idys ~]  rpm -qa | grep tree
tree-1.6.0-10.el7.x86_64
[root@idys ~]  rpm -qa tree           
tree-1.6.0-10.el7.x86_64

三种方法查看:

  1. yum list installed 包名
  2. rpm -qa 包名
  3. rpm -qa | grep 包名
  • 查看家目录的目录树
[root@idys ~] tree ~
/root
└── anaconda-ks.cfg

0 directories, 1 file
  • tree列出所有文件,包括隐藏文件
[root@idys ~] tree -a ~
/root
├── anaconda-ks.cfg
├── .bash_history
├── .bash_logout
├── .bash_profile
├── .bashrc
├── .cshrc
├── .tcshrc
└── .viminfo

0 directories, 8 files
  • 只列出第一层目录的结构,并且对不同文件加标识
[root@idys ~] tree -L 1 -F -a /   
/
├── .autorelabel
├── bin -> usr/bin/
├── boot/
├── dev/
├── etc/
├── home/
├── lib -> usr/lib/
├── lib64 -> usr/lib64/
├── media/
├── mnt/
├── opt/
├── proc/
├── root/
├── run/
├── sbin -> usr/sbin/
├── srv/
├── sys/
├── tmp/
├── usr/
└── var/
  • 只显示目录
[root@idys ~] tree -d -L 1 /etc
/etc
├── alternatives
├── audisp
├── audit
├── bash_completion.d
├── binfmt.d
├── chkconfig.d
├── cron.d
├── cron.daily
├── cron.hourly
├── cron.monthly
├── cron.weekly
├── dbus-1
├── default
├── depmod.d
├── dhcp
├── dracut.conf.d
├── firewalld
├── gcrypt
  • 只显示一层,对不同类型的文件加标识,显示文件的完整路径
[root@idys ~] tree -L 1 -fi -F /boot/
/boot
/boot/config-3.10.0-1062.el7.x86_64
/boot/efi/
/boot/grub/
/boot/grub2/
/boot/initramfs-0-rescue-e71706c620c745d08f3bc2e3aaab24d7.img
/boot/initramfs-3.10.0-1062.el7.x86_64.img
/boot/initramfs-3.10.0-1062.el7.x86_64kdump.img
/boot/symvers-3.10.0-1062.el7.x86_64.gz
/boot/System.map-3.10.0-1062.el7.x86_64
/boot/vmlinuz-0-rescue-e71706c620c745d08f3bc2e3aaab24d7*
/boot/vmlinuz-3.10.0-1062.el7.x86_64*

3 directories, 8 files
  • 显示/boot下第一层的所有目录
[root@idys ~]  tree -Fi -L 1 /boot/ | grep -E /$ 
/boot/
efi/
grub/
grub2/

2.4 mkdir创建目录

2.4.1 功能说明和语法格式

  • mkdir命令是make directory中每个单词的粗体字母组合而成,其功能是创建目录,默认情况下,如果创建的目录已存在,则会提示此文件已存在;而不会继续创建目录

  • 语法格式

mkdir [option] [directory]

2.4.2 参数选项

参数 含义
-p 递归创建目录,递归的意思是父目录及其子目录的子目录的….
使用此参数,即使要创建的目录已经事先存在也不会报错
-m 设置新创建的目录默认对应的权限
-v 显示详细创建过程

2.4.3 命令演示

  • 查看当前目录下的目录有那些
[root@idys ~] tree -d
.

0 directories
[root@idys ~] tree -d --noreport  # 不显示统计信息查看
.
  • 在当前目录下创建目录
[root@idys ~] mkdir data  # 在当前目录下创建 data 目录
[root@idys ~] tree -d --noreport  # 查看当前路径下的目录
.
└── data
[root@idys ~] mkdir data # 再次创建,因为已经存在,所以会报错
mkdir: cannot create directory ‘data’: File exists
[root@idys ~] mkdir -p data/
  • 创建多级目录
[root@idys ~] mkdir idys/dir1/dir2  # 因为 没有加 -p 所以不能递归创建目录
mkdir: cannot create directory ‘idys/dir1/dir2’: No such file or directory
[root@idys ~] mkdir -p idys/dir1/dir2  # 使用 -p 递归创建目录
[root@idys ~] tree -d ./ --noreport   # 使用 tree 查看目录情况
./
├── data
└── idys
    └── dir1
        └── dir2
  • 对已经存在的目录,并且已经存在文件的目录,创建一个和该目录同路径,同名的目录看是否会影响到原来的目录
[root@idys ~] tree ./ --noreport
./
├── anaconda-ks.cfg
├── data
├── data1
│   └── date2
│       └── a.txt
└── idys
    └── dir1
        └── dir2
[root@idys ~] mkdir -p /data1/data2  # 再次创建 /data1/data2
[root@idys ~] tree ./ --noreport    # 使用 tree 查看,是否目录有受到影响,可以看到目录没有受到影响
./
├── anaconda-ks.cfg
├── data
├── data1
│   └── date2
│       └── a.txt
└── idys
    └── dir1
        └── dir2
  • 递归创建目录,并且显示创建的过程信息
[root@idys ~] mkdir -pv hexo/idys/blog/
mkdir: created directory ‘hexo’
mkdir: created directory ‘hexo/idys’
mkdir: created directory ‘hexo/idys/blog/’
  • 创建目录的时候,同时设置目录权限位
[root@idys ~] mkdir -m 777 kk 
[root@idys ~] ls -lh --time-style=long-iso   # 查看 kk 的权限位,和使用 mkdir 设置的一样 就是 777
total 4.0K
-rw-------. 1 root root 1.4K 2020-09-13 16:11 anaconda-ks.cfg
drwxr-xr-x  3 root root   18 2020-11-02 18:17 hexo
drwxrwxrwx  2 root root    6 2020-11-02 18:19 kk
  • 同时创建多个目录及其多个目录的子目录
[root@idys ~] mkdir -p dir{1..3}/idys{1..3}
[root@idys ~] tree -d  # 可以发现创建成功
.
├── dir1
│   ├── idys1
│   ├── idys2
│   └── idys3
├── dir2
│   ├── idys1
│   ├── idys2
│   └── idys3
└── dir3
    ├── idys1
    ├── idys2
    └── idys3
  • 删除dir1dir2dir3
[root@idys ~] rm -rf dir{1..3}
  • 克隆目录结构
[root@idys ~] tree -F -i /tmp/  # 查看tmp的目录结构
/tmp/
systemd-private-cc4f7d2801fd4701a9ebdb013479779e-chronyd.service-QY2FLs/
tmp/
vmware-root_602-2731021059/
vmware-root_608-2722828967/
vmware-root_609-3988556153/

5 directories, 0 files
[root@idys ~] tree  -fid  --noreport /tmp/
/tmp
/tmp/systemd-private-cc4f7d2801fd4701a9ebdb013479779e-chronyd.service-QY2FLs
/tmp/systemd-private-cc4f7d2801fd4701a9ebdb013479779e-chronyd.service-QY2FLs/tmp
/tmp/vmware-root_602-2731021059
/tmp/vmware-root_608-2722828967
/tmp/vmware-root_609-3988556153
[root@idys ~] tree  -fid  --noreport /tmp/ | sed -r 's/^\///g'  # 使用 sed 去掉开头的
tmp
tmp/systemd-private-cc4f7d2801fd4701a9ebdb013479779e-chronyd.service-QY2FLs
tmp/systemd-private-cc4f7d2801fd4701a9ebdb013479779e-chronyd.service-QY2FLs/tmp
tmp/vmware-root_602-2731021059
tmp/vmware-root_608-2722828967
tmp/vmware-root_609-3988556153
[root@idys ~] mkdir -p `tree  -fid  --noreport /tmp/ | sed -r 's/^\///g'`  # 克隆目录结构
[root@idys ~] ls
anaconda-ks.cfg  tmp
[root@idys ~] tree -d tmp/  # 查看当前目录下 /tmp 目录结构
tmp/
├── systemd-private-cc4f7d2801fd4701a9ebdb013479779e-chronyd.service-QY2FLs
│   └── tmp
├── vmware-root_602-2731021059
├── vmware-root_608-2722828967
└── vmware-root_609-3988556153

2.5 touch 创建空文件或改变文件的时间属性

2.5.1 命令说明与语法格式

  • touch命令有两个功能:一个是创建文件,一个是改变已有文件的时间戳属性

  • 语法格式

touch [option] [Files]

2.5.2 选项说明

参数 含义
-a 只更改指定文件的最后访问时间
-d STRING 使用字符串STRING代表的时间作为模板设置指定文件的时间属性
-r file 将指定文件的时间属性设置为与模板文件file的时间属性相同
-t STAMP 使用[CC[YY]MMDDhhmm[.ss]]格式的时间设置文件的时间属性。格式的含义从左到右依次为:世纪、年、月、日、时、分、秒
-m 只更改指定文件的最后修改时间

2.5.3 命令演示

  • 创建目录和文件
[root@idys tmp] tree test/
test/
├── teachera
├── teacherb
├── teacherc
├── teacherd
└── teachere

0 directories, 5 files
  • 查看文件属性
[root@idys tmp] cd test/
[root@idys test] ls
teachera  teacherb  teacherc  teacherd  teachere
[root@idys test] stat teachera 
  File: ‘teachera’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 17361892    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-02 22:48:56.831154042 +0800
Modify: 2020-11-02 22:48:56.831154042 +0800
Change: 2020-11-02 22:48:56.831154042 +0800
 Birth: -
  • 更改文件最后访问时间
[root@idys test] touch -a teachera
[root@idys test] stat teachera 
  File: ‘teachera’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 17361892    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-02 22:51:55.146560627 +0800
Modify: 2020-11-02 22:48:56.831154042 +0800
Change: 2020-11-02 22:51:55.146560627 +0800
 Birth: -

只要atimemtime有一个变化,那么ctime便会变化

  • 更改文件的修改时间
[root@idys test] touch -m teachera 
[root@idys test] stat teachera     
  File: ‘teachera’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 17361892    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-02 22:51:55.146560627 +0800
Modify: 2020-11-02 22:54:23.552731304 +0800
Change: 2020-11-02 22:54:23.552731304 +0800
 Birth: -
  • 使用-d指定创建文件后的修改时间
[root@idys test] stat teacherd 
  File: ‘teacherd’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 17361913    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-02 22:48:56.831154042 +0800
Modify: 2020-11-02 22:48:56.831154042 +0800
Change: 2020-11-02 22:48:56.831154042 +0800
 Birth: -
[root@idys test] touch -d 20200101 teacherd     
[root@idys test] stat teacherd
  File: ‘teacherd’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 17361913    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-01-01 00:00:00.000000000 +0800
Modify: 2020-01-01 00:00:00.000000000 +0800
Change: 2020-11-03 20:28:35.072749399 +0800
 Birth: -
  • 使用-r同步时间属性
[root@idys test] stat teacherd teachere  # 查看 teacherd 和 teachere 的时间属性
  File: ‘teacherd’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 17361913    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-01-01 00:00:00.000000000 +0800
Modify: 2020-01-01 00:00:00.000000000 +0800
Change: 2020-11-03 20:28:35.072749399 +0800
 Birth: -
  File: ‘teachere’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 17361914    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-02 22:48:56.831154042 +0800
Modify: 2020-11-02 22:48:56.831154042 +0800
Change: 2020-11-02 22:48:56.831154042 +0800
 Birth: -
[root@idys test] stat teacherd teachere     # 将 teachere的修改时间属性 和 teacherd 的修改时间属性一样
  File: ‘teacherd’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 17361913    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-01-01 00:00:00.000000000 +0800
Modify: 2020-01-01 00:00:00.000000000 +0800
Change: 2020-11-03 20:28:35.072749399 +0800
 Birth: -
  File: ‘teachere’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 17361914    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-01-01 00:00:00.000000000 +0800
Modify: 2020-01-01 00:00:00.000000000 +0800
Change: 2020-11-03 20:31:36.614363410 +0800
 Birth: -
  • 使用-t指定文件的时间
[root@idys test] touch -t 200110121223.12 teachere     
[root@idys test] stat teachere
  File: ‘teachere’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 17361914    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2001-10-12 12:23:12.000000000 +0800
Modify: 2001-10-12 12:23:12.000000000 +0800
Change: 2020-11-03 20:34:16.699930420 +0800
 Birth: -
[root@id

2.6 ls 显示目录下的内容及其相关属性信息

2.6.1 功能说明与语法格式

  • ls就是list的缩写,其功能类似于dos下的dir命令

  • 语法格式

ls [option] [file]

2.6.2 选项说明

参数 含义
-l 使用长格式列出文件及目录信息
-a 显示目录下所有的文件,包括以.开头的隐藏文件
-t 根据最后的修改时间排序,默认是以文件名排序
-r reverse,依次相反次序排序
-F 在条目后加上文件类型的指示符号(*/=@|,其中的一个)
-p 只在目录后面加上/
-i 显示inode节点信息
-d 当遇到目录时,列出目录本身而非目录内的文件,并且不跟随符号链接
-h 以人类可读的信息显示文件或目录大小
-A 列出所有文件,包括隐藏文件,但不包括...这两个目录
-S 根据文件大小排序
-R 递归列出所有子目录
-x 逐行列出项目而不是逐栏列出
-X 根据扩展名排序
-c 根据状态改变时间(ctime)排序
-u 根据最后访问时间(atime)排序
color={never,always,auto} 不同的文件类型显示不同的颜色参数,never表示不显示,always表示总是显示,auto表示自动显示
--time-style={full-iso,long-iso,iso,locale} 以不同的时间格式输出,long-iso效果最好
--time={atime,ctime} 按不同的时间属性输出,atime表示按访问时间,ctime表示按改变权限属性时间,如果不加此参数则默认为最后修改时间

2.6.3 命令演示

  • 创建隐藏文件
[root@idys test] touch .a
  • 列出当前目录下所有文件,包括隐藏文件和.还有..
[root@idys test] ls -a
.  ..  .a  teachera  teacherb  teacherc  teacherd  teachere
  • 列出当前目录下所有文件,但是不列出...
[root@idys test] ls -A
.a  teachera  teacherb  teacherc  teacherd  teachere
  • 列出当前目录下的详细信息和完整时间属性,完整时间属性采用long-iso
[root@idys test]  ls -l --time-style=long-iso
total 0
-rw-r--r-- 1 root root 0 2020-11-02 22:54 teachera
-rw-r--r-- 1 root root 0 2020-11-02 22:48 teacherb
-rw-r--r-- 1 root root 0 2020-11-02 22:48 teacherc
-rw-r--r-- 1 root root 0 2020-01-01 00:00 teacherd
-rw-r--r-- 1 root root 0 2020-11-03 20:50 teachere

ls -l默认显示的是文件最后一次修改时间

  • ls列举文件的访问时间(atime)和修改时间(mtime)和改变时间(ctime
[root@idys test]  ls -l --time-style=long-iso --time=atime
total 0
-rw-r--r-- 1 root root 0 2020-11-02 22:51 teachera
-rw-r--r-- 1 root root 0 2020-11-02 22:48 teacherb
-rw-r--r-- 1 root root 0 2020-11-02 22:48 teacherc
-rw-r--r-- 1 root root 0 2020-01-01 00:00 teacherd
-rw-r--r-- 1 root root 0 2020-11-03 20:50 teachere
[root@idys test]  ls -l --time-style=long-iso --time=ctime
total 0
-rw-r--r-- 1 root root 0 2020-11-02 22:54 teachera
-rw-r--r-- 1 root root 0 2020-11-02 22:48 teacherb
-rw-r--r-- 1 root root 0 2020-11-02 22:48 teacherc
-rw-r--r-- 1 root root 0 2020-11-03 20:28 teacherd
-rw-r--r-- 1 root root 0 2020-11-03 20:50 teachere
[root@idys test]  ls -l --time-style=long-iso
total 0
-rw-r--r-- 1 root root 0 2020-11-02 22:54 teachera
-rw-r--r-- 1 root root 0 2020-11-02 22:48 teacherb
-rw-r--r-- 1 root root 0 2020-11-02 22:48 teacherc
-rw-r--r-- 1 root root 0 2020-01-01 00:00 teacherd
-rw-r--r-- 1 root root 0 2020-11-03 20:50 teachere
  • ls -F文件对于不同文件采取标记信息
[root@idys tmp] ls -F
systemd-private-ab003aec97a446c48981af4062c9e7ab-chronyd.service-DVdEky/  test/  vmware-root_603-3980363997/
  • 过滤出目录文件
[root@idys tmp] ls -F | grep /$
systemd-private-ab003aec97a446c48981af4062c9e7ab-chronyd.service-DVdEky/
test/
vmware-root_603-3980363997/
  • 显示目录的详细信息
[root@idys tmp]  ls -ld test/
drwxr-xr-x 2 root root 96 Nov  4 08:31 test/
  • 递归查看目录
[root@idys tmp] ls -Rl
.:
total 0
drwx------ 3 root root 17 Nov  4 08:21 systemd-private-ab003aec97a446c48981af4062c9e7ab-chronyd.service-DVdEky
drwxr-xr-x 2 root root 96 Nov  4 08:31 test
drwx------ 2 root root  6 Nov  3 20:24 vmware-root_603-3980363997

./systemd-private-ab003aec97a446c48981af4062c9e7ab-chronyd.service-DVdEky:
total 0
drwxrwxrwt 2 root root 6 Nov  4 08:21 tmp

./systemd-private-ab003aec97a446c48981af4062c9e7ab-chronyd.service-DVdEky/tmp:
total 0

./test:
total 0
-rw-r--r-- 1 root root 0 Nov  2 22:54 teachera
-rw-r--r-- 1 root root 0 Nov  2 22:48 teacherb
-rw-r--r-- 1 root root 0 Nov  2 22:48 teacherc
-rw-r--r-- 1 root root 0 Jan  1  2020 teacherd
-rw-r--r-- 1 root root 0 Nov  3 20:50 teachere

./vmware-root_603-3980363997:
total 0
  • 列出最新更新的文件
[root@idys tmp] ls -lt --time-style=long-iso /etc | head -10
total 1048
-rw-r--r--   1 root root       76 2020-11-04 08:21 resolv.conf
drwxr-xr-x.  2 root root       46 2020-11-01 09:55 bash_completion.d
drwxr-xr-x.  2 root root     4096 2020-11-01 09:55 profile.d
drwxr-xr-x.  6 root root     4096 2020-10-31 22:08 sysconfig
drwxr-xr-x   2 root root       38 2020-10-31 22:08 ntp
-rw-r--r--   1 root root      882 2020-10-31 22:08 passwd
----------   1 root root      604 2020-10-31 22:08 shadow
----------   1 root root      364 2020-10-31 22:08 gshadow
-rw-r--r--   1 root root      459 2020-10-31 22:08 group
  • 使用-r反向排序
[root@idys tmp] ls -rlt --time-style=long-iso /etc | head -10
total 1048
-rw-r--r--.  1 root root     1634 2012-12-25 11:02 rpc
-rw-r--r--.  1 root root       28 2013-02-28 04:29 ld.so.conf
-rw-r--r--.  1 root root   670293 2013-06-07 22:31 services
-rw-r--r--.  1 root root      233 2013-06-07 22:31 printcap
-rw-r--r--.  1 root root        0 2013-06-07 22:31 motd
-rw-r--r--.  1 root root      942 2013-06-07 22:31 inputrc
-rw-r--r--.  1 root root      460 2013-06-07 22:31 hosts.deny
-rw-r--r--.  1 root root      370 2013-06-07 22:31 hosts.allow
-rw-r--r--.  1 root root      158 2013-06-07 22:31 hosts
  • ls -F说明
    • 结尾加/代表目录
    • 结尾加*代表可执行文件
    • 结尾加=代表套接字
    • 结尾加|代表管道文件
    • 结尾加@代表符号链接
  • ls命令内容的属性解读
[root@idys test] ls -lhi
total 0
17361892 -rw-r--r-- 1 root root 0 Nov  2 22:54 teachera
17361902 -rw-r--r-- 1 root root 0 Nov  2 22:48 teacherb
17361912 -rw-r--r-- 1 root root 0 Nov  2 22:48 teacherc
17361913 -rw-r--r-- 1 root root 0 Jan  1  2020 teacherd
17361914 -rw-r--r-- 1 root root 0 Nov  3 20:50 teachere
  • 第一列:inode索引节点编号
  • 第二列:文件类型权限(第一个字符为类型,后9个字符为权限符号)
  • 第三列:硬链接个数(详细请参看ln命令的讲解)
  • 第四列:文件或目录所属的用户(属主)
  • 第五列:文件或目录所属的组
  • 第6列:文件或目录大小
  • 第七、八、九列:文件或目录的修改时间
  • 第十列:实际的文件名或目录名

2.7 cp:复制文件或目录

2.7.1 功能说明及语法格式

  • cp命令:copy缩写,功能为复制文件或目录
  • 语法格式
cp [option] [source] [dest]

2.7.2 参数选项

参数 含义
-p 复制文件时保持源文件的所有者、权限信息及时间属性
-d 如果复制的源文件是符号链接,那么仅复制符号链接本身,而且保留符号链接所指向的目标或目录
-r 递归复制目录,即复制目录下的所有层级的子目录及文件
-a 等同于上面的-p-d-r3个选项功能的总和
-i 覆盖已有文件前提示用户确认
-t 默认情况下命令格式是cp 源文件 目录文件,使用-t参数可以颠倒顺序,格式变为cp -t 目标文件 源文件

2.7.3 使用演示

  • 无参数和-a比较
[root@idys test] ls -l --time-style=full-iso  # 不使用 -a 复制,会更新属性信息
total 0
-rw-r--r--. 1 root root 0 2001-01-21 00:00:00.000000000 +0800 file1.txt
-rw-r--r--. 1 root root 0 2020-11-05 19:48:26.854147078 +0800 file2.txt
[root@idys test] cp -a  file1.txt file3.txt   # 使用 -a 复制保留了属性信息
[root@idys test] ls -l --time-style=full-iso  
total 0
-rw-r--r--. 1 root root 0 2001-01-21 00:00:00.000000000 +0800 file1.txt
-rw-r--r--. 1 root root 0 2020-11-05 19:48:26.854147078 +0800 file2.txt
-rw-r--r--. 1 root root 0 2001-01-21 00:00:00.000000000 +0800 file3.txt
  • 使用-i参数
[root@idys test] cat file1.txt  # 使用 -i 后,如果有同名文件,会询问是否覆盖
111
[root@idys test] cat file4.txt
[root@idys test] cp file1.txt file4.txt 
cp: overwrite ‘file4.txt’? n
[root@idys test] cp -i file1.txt file4.txt 
cp: overwrite ‘file4.txt’? n
[root@idys test] alias cp  # 可以看到 cp 命令默认就是 加了 -i 选项
alias cp='cp -i'
  • 使用-r复制目录
[root@idys test] mkdir  dir{1,2};touch dir1/file{1..4}.txt  # 创建测试目录
[root@idys test] tree dir1 dir2
-bash: tree: command not found
[root@idys test] yum -y install tree > /dev/null
[root@idys test] tree dir1 dir2                 
dir1
├── file1.txt
├── file2.txt
├── file3.txt
└── file4.txt
dir2
[root@idys test] cp dir1 dir2/  # 可以看到没有复制成功
cp: omitting directory ‘dir1’
[root@idys test] tree dir2/
dir2/

0 directories, 0 files
[root@idys test] cp -r dir1 dir2/  # 使用 -r 后,复制成功
[root@idys test] tree dir2/
dir2/
└── dir1
    ├── file1.txt
    ├── file2.txt
    ├── file3.txt
    └── file4.txt

1 directory, 4 files

2.7.4 取消别名

  • 取消别名后,没有提示直接覆盖,使用全路径名取消别名
[root@idys test] /usr/bin/cp file1.txt file4.txt 
[root@idys test] cat file4.txt 
111
[root@idys test] alias cp
alias cp='cp -i'
  • 使用反斜线\取消别名
[root@idys test] cat file1.txt  # 可以看到 使用 反斜线 也 取消了 别名
111
[root@idys test] cat file3.txt 
[root@idys test] cp file1.txt file3.txt 
cp: overwrite ‘file3.txt’? n
[root@idys test] cat file3.txt 
[root@idys test] \cp file1.txt file3.txt 
[root@idys test] cat file3.txt 
111
  • 使用unalias cp取消别名
unalias cp

2.7.5 快速备份文件

  • 使用通配符方式
[root@idys test] cp file1.txt{,.BAK} 
[root@idys test] ls
dir1  dir2  file1.txt  file1.txt.BAK  file2.txt  file3.txt  file4.txt

2.8 移动或重命名文件

2.8.1 功能说明及其语法格式

  • mv命令可以理解英文move的缩写

  • 语法格式

mv [option] [source] [dest]

2.8.2 选项说明

参数 含义
-f 若目标文件已经存在,则不会询问而是直接覆盖
-i 若目标文件已经存在,则会询问是否覆盖
-n 不覆盖已经存在的文件
-t cp -t一样,目标文件在前,原文件在后
-u 源文件比目标文件新,或者目标文件不存在时才进行移动

2.8.3 命令演示

  • 文件改名
[root@idys test] alias mv
alias mv='mv -i'
[root@idys test] ls
dir1  dir2  file1.txt  file1.txt.BAK  file2.txt  file3.txt  file4.txt
[root@idys test] mv file1.txt file5.txt  # 目标文件不存在,直接复制
[root@idys test] mv file2.txt file3.txt  # 目标文件存在,则询问是否覆盖
mv: overwrite ‘file3.txt’? n
[root@idys test] \mv file2.txt file3.txt  # 取消别名, 目标文件存在,直接覆盖
[root@idys test] ls
dir1  dir2  file1.txt.BAK  file3.txt  file4.txt  file5.txt
  • 移动多个文件到对应的目录
[root@idys test] tree  dir3/
dir3/

0 directories, 0 files
[root@idys test] mv file1.txt.BAK file3.txt file5.txt dir3/
[root@idys test] tree dir3
dir3
├── file1.txt.BAK
├── file3.txt
└── file5.txt

0 directories, 3 files
  • 将源和目标调换移动到文件目录
[root@idys test] touch file{1..3}.txt 
[root@idys test] ls
dir1  dir2  dir3  dir4  file1.txt  file2.txt  file3.txt  file4.txt
[root@idys test] mv -t dir
dir1/ dir2/ dir3/ dir4/ 
[root@idys test] mv -t dir4/ file1.txt file2.txt file3.txt file4.txt
[root@idys test] ls
dir1  dir2  dir3  dir4
[root@idys test] tree dir4/
dir4/
├── file1.txt
├── file2.txt
├── file3.txt
└── file4.txt

0 directories, 4 files

2.9 rm 删除文件或目录

2.9.1 功能说明

  • rm命令可以理解为remove,这是Linux最危险的命令

  • 语法格式

rm [option] [file]

2.9.2 选项说明

选项 含义
-f 强制删除。忽略不存在的文件,不提示确认
-i 在删除前需要确认
-I 在删除超过三个文件或者递归删除前要求确认
-r 递归删除目录及其内容

2.9.3 命令演示

  • 创建演示目录
[root@idys test] mkdir -p dir{1..4}  # 创建目录
[root@idys test] ls
dir1  dir2  dir3  dir4  teachera  teacherb  teacherc  teacherd  teachere
[root@idys test] touch dir{1..4}/file{1..4}.txt  # 在目录下创建文件
[root@idys test] tree . --noreport  # 查看目录结构
.
├── dir1
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── dir2
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── dir3
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── dir4
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── teachera
├── teacherb
├── teacherc
├── teacherd
└── teachere
  • 查看别名
[root@idys test] alias rm
alias rm='rm -i'
  • 删除文件
[root@idys test] rm teachera 
rm: remove regular empty file ‘teachera’? n # 取消删除
  • 取消rm别名,执行删除
[root@idys test] \rm teachera
[root@idys test] ls
dir1  dir2  dir3  dir4  teacherb  teacherc  teacherd  teachere
[root@idys test] ls teachera
ls: cannot access teachera: No such file or directory
  • 递归删除
[root@idys test] tree .
.
├── dir1
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── dir2
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── dir3
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── dir4
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── teacherc
├── teacherd
└── teachere

4 directories, 19 files
[root@idys test] rm -rf dir1/
[root@idys test] tree .
.
├── dir2
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── dir3
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── dir4
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   └── file4.txt
├── teacherc
├── teacherd
└── teachere

3 directories, 15 files

2.9.4 补充

  • 慎用rsync --delete

  • 文件删除后,可以使用ext3grep命令恢复,不过恢复之前,先卸载对应的挂载目录


2.10 rmdir 删除空目录

2.10.1 功能说明

  • rmdir命令用于删除空目录(rmove empty directory

  • 语法格式

rmdir [option] [directory]

2.10.2 选项说明

参数 含义
-p 当子目录删除后,父目录也为空时,那么将它们一并删除
-v 显示命令执行过程

2.10.3 使用演示

  • 批量创建目录
[root@idys test] mkdir -p dir2/dir{2,2/dir3{,/dir4}}
[root@idys test] tree dir2
dir2
└── dir2
    └── dir3
        └── dir4

3 directories, 0 files
  • 只删除一个空目录
[root@idys test] rmdir  dir2/dir2/dir3/dir4/
[root@idys test] tree  dir2/
dir2/
└── dir2
    └── dir3

2 directories, 0 files
  • 删除空目录,递归删除时需要将完整的目录路径列出来
[root@idys test] rmdir -p dir2/dir2/dir3/
[root@idys test] ls  # 可以发现整个目录结构都被删除
dir3  dir4

2.11 ln:硬链接与软链接

2.11.1 功能与语法

  • ln命令意为 linklink分为hard linksoft link
  • 语法格式
ln [option] [source] [target]
  • 选项说明
参数 含义
无参 创建硬链接
-s 创建软链接

2.11.2 硬链接与软链接

  • 硬链接(hard link

    • 创建硬链接使用ln source_file target_file
    • 互为硬链接它们的inode一样
    • 当文件的inode链接数为0时,那么文件会被删除
    • 目录文件创建硬链接
    • 不能跨分区创建硬链接
  • 软链接(soft link

    • 使用ln -s source_file target_link
    • 类似于Windows快捷方式
    • 软链接文件类型为l
    • 软链接类似于一个文本文件,里面存放着源文件的路径,指向源文件实体
    • 源文件被删除了,软链接文件会存在,但是无法访问软链接指向的源文件中的内容
    • 可以为软链接创建软链接,嵌套创建软链接。最终查看的还是软链接的最终对应的源文件
    • 软链接和源文件的inode号不一样
    • 软链接因为内容存放的是源文件的路径,所以可以跨分区,跨文件系统进行链接
    • 可以对目录创建软链接

2.11.3 命令演示

  • 硬链接演示
[root@idys test] cat /etc/hosts  
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@idys test] ln /etc/hosts /etc/kkkk   # 创建硬链接
[root@idys test] cat /etc/kkkk 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@idys test] rm /etc/hosts  # 删除源文件
hosts        hosts.allow  hosts.deny   
[root@idys test] rm /etc/hosts
rm: remove regular file ‘/etc/hosts’? y
[root@idys test] ls /etc/kkkk 
/etc/kkkk
[root@idys test] cat /etc/kkkk   
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@idys test] ln /etc/kkkk /etc/hosts
[root@idys test] ls
a_link  b_link  dir3  dir4  test.txt
[root@idys test] ls /etc/hosts
/etc/hosts
/etc/hosts  /etc/kkkk
[root@idys test] ls -li /etc/{hosts,kkkk}
16777794 -rw-r--r--. 2 root root 158 Jun  7  2013 /etc/hosts
16777794 -rw-r--r--. 2 root root 158 Jun  7  2013 /etc/kkkk
[root@idys test] rm /etc/kkkk 
rm: remove regular file ‘/etc/kkkk’? y
  • 软链接演示
[root@idys test] echo 'idys' > test.txt
[root@idys test] ls
dir3  dir4  test.txt
[root@idys test] ln -s test.txt a_link
[root@idys test] ln -s a_link b_link
[root@idys test] cat b_link 
idys
[root@idys test] ln -s dir3 enen  # 为目录创建软链接
[root@idys test] ls
a_link  b_link  dir3  dir4  enen  test.txt

2.12 readlink 查看符号链接文件的内容

2.12.1 功能说明和语法

  • 使用readlink可以查看符号链接对应的真实内容

  • 语法格式

readlink [option] [file]
  • 选项说明
参数 含义
-r 一直跟随符号链接,直到链接文件位置,但要保证一个非符号链接的文件
  • 查看符号链接文件的内容
[root@idys test] ls -l b_link a_link test.txt  # 可以看到 b_link指向 a_link, a_link指向 源文件
lrwxrwxrwx 1 root root 8 Nov 22 17:38 a_link -> test.txt
lrwxrwxrwx 1 root root 6 Nov 22 17:38 b_link -> a_link
-rw-r--r-- 1 root root 5 Nov 22 17:35 test.txt
[root@idys test]    readlink b_link 
a_link
[root@idys test]    readlink -f b_link
/tmp/test/test.txt

2.13 stat 显示文件或文件系统状态

2.13.1 功能说明及语法格式

  • stat用于显示文件或文件系统的状态信息

  • 语法格式

stat [option] [file]

2.13.2 参数详解

参数 含义
-f 显示文件所在分区的文件系统状态而非文件状态
-c 使用指定输出格式代替默认值
-t 使用简洁格式输出

2.13.3 命令演示

  • 查看文件属性信息
[root@idys test]        stat test.txt 
  File: ‘test.txt’
  Size: 5               Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 16786202    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-22 17:38:33.305946718 +0800
Modify: 2020-11-22 17:35:50.827469809 +0800
Change: 2020-11-22 17:35:50.827469809 +0800
 Birth: -
  • size:文件大小
  • Blocks:占用block数量
  • IO BlockBlock总大小为40968*512
  • regular file:文件类型为普通文件
  • Device:设备编号的十六进制(h)和十进制(d)
  • Inode:文件的inode
  • Links:文件的硬链接数
  • Access:文件权限
  • UidGid:用户和用户组
  • Access: 2020-11-22 17:38:33.305946718 +0800:访问时间
  • Modify: 2020-11-22 17:35:50.827469809 +0800:修改时间
  • Change: 2020-11-22 17:35:50.827469809 +0800:改变时间

2.13.4 举例

  • 提取出文件对应的权限位
[root@idys test] stat -c %a test.txt 
644

2.14 more 分页显示文件内容

2.14.1功能说明

  • more命令的功能类似于cat,但cat命令是将整个文件的内容一次性显示在屏幕上,而more则会一页一页地显示内容

2.14.2 语法格式

more [option] [file]

2.14.3 选项说明

参数选项 解释说明
-num 指定屏幕显示大小为num
+num 从行号num开始显示
-s 把连续的多个空行显示为一行
-p 不滚屏,而是清除整个屏幕,然后显示文本
-c 不滚屏,而是从每一屏的顶部开始显示文本,每显示完一行,就清除这一行的剩余部分
  • 子命令:在交互模式下,适应more命令打开文本之后,会进入一个基于vi的交互界面
子命令 含义
h或者? 查看帮助
空格键 向下滚动一屏
z 向下滚动一屏
Enter 向下显示1
f 向下滚动一屏
b 返回上一屏
= 输出当前行的行号
/ 查找的文本 查找指定的文本
:f 输出文件名和当前行号
v 调用vi编辑器
!命令 调用Shell,并且执行命令
q 退出more

2.14.4 命令演示

  • 从两百行开始显示,屏幕显示5
more -5 +200 /var/log/messages

2.15 less:分页显示文件内容

2.15.1 功能说明

  • less命令在读取文件内容时,并不是像morevi命令一样,要一次性将整个文件加载之后再显示,而是会根据需要来加载文件的内容,这样打开文件的速度会更快。而且less命令支持[page up][page down]等按键的功能,可以通过该功能向前或者向后翻看文件,这样更容易查看一个文件的内容。

2.15.2 语法格式

less [option] [file]

2.15.3 选项说明

参数 含义
-i 搜索时忽略大小写
-m 显示类似于more命令的进度百分比
-N 显示每行的行号
-s 将连续的空行压缩为一行显示
-e 当文件显示到结尾时自动退出文件,若不使用此选项则需要按下q退出less

子命令 含义
b 向前翻一页
空格键 向后翻一页
u 向前翻半页
d 向后翻半页
y 向上滚动一行
回车键 向下滚动一行
向上箭头 向上滚动一行
向下箭头 向下滚动一行
【page up】 向前翻一页
【page down】 向后翻一页
/ 字符串 向下搜索“字符串”
? 字符串 向上搜索“字符串”
n 向后查找下一个匹配的文本
N 向前查找前一个匹配的文本
v 进入vi编辑页面
!命令 调用shell,并执行命令
G 移动到最后一行
g 移动到第一行
h 显示帮助界面
q 推荐less显示的界面

2.15.4 命令演示

  • 查看并且显示行号
[root@iZwz93rgmegkukw2f9vl89Z ~] less -N /etc/services 
      1 # /etc/services:
      2 # $Id: services,v 1.55 2013/04/14 ovasik Exp $
      3 #
      4 # Network services, Internet style
      5 # IANA services version: last updated 2013-04-10
      6 #
      7 # Note that it is presently the policy of IANA to assign a single well-known
      8 # port number for both TCP and UDP; hence, most entries here have two entries
      9 # even if the protocol doesn't support UDP operations.
     10 # Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports
     11 # are included, only the more common ones.
     12 #
     13 # The latest IANA port assignments can be gotten from
     14 #       http://www.iana.org/assignments/port-numbers
     15 # The Well Known Ports are those from 0 through 1023.
     16 # The Registered Ports are those from 1024 through 49151
     17 # The Dynamic and/or Private Ports are those from 49152 through 65535

2.16 显示文件内容尾部

2.16.1 功能说明与语法格式

  • tail命令用于显示文件内容的尾部,它默认输出文件的最后10

2.16.2 选项说明

参数 含义
-c <数目> 指定显示的字节数
-n <行数> 指定显示的行数
-f 实时输出文件变化后追加的数据
-F 功能等同于-f --retry
–-retry 不停地尝试打开文件直到打开为止,和-f参数合用
--pid = 进程号 -f参数连用,在进程结束后自动退出tail命令
-s 秒数 N 监视文件变化的间隔秒数
-q 不显示包含给定文件名的文件头
-v 总是显示包含给定文件名的文件头

2.16.3 命令演示

  • 显示最后五行
[root@iZwz93rgmegkukw2f9vl89Z ~] tail -5 /etc/services 
com-bardac-dw   48556/tcp               # com-bardac-dw
com-bardac-dw   48556/udp               # com-bardac-dw
iqobject        48619/tcp               # iqobject
iqobject        48619/udp               # iqobject
matahari        49000/tcp               # Matahari Broker
  • 从第11100行开始显示文件内容直到文件末尾
[root@iZwz93rgmegkukw2f9vl89Z ~]  tail -n +11100 /etc/services 
  • 实时监控文件的内容变化
[root@iZwz93rgmegkukw2f9vl89Z ~]  tail -f  /var/log/messages
Dec 10 14:10:01 iZwz93rgmegkukw2f9vl89Z systemd: Started Session 2383 of user root.
Dec 10 14:20:01 iZwz93rgmegkukw2f9vl89Z systemd: Started Session 2384 of user root.
Dec 10 14:30:01 iZwz93rgmegkukw2f9vl89Z systemd: Started Session 2385 of user root.
Dec 10 14:35:02 iZwz93rgmegkukw2f9vl89Z systemd-logind: Removed session 2372.
Dec 10 14:35:02 iZwz93rgmegkukw2f9vl89Z systemd: Removed slice User Slice of root.
Dec 10 14:35:03 iZwz93rgmegkukw2f9vl89Z systemd: Created slice User Slice of root.
Dec 10 14:35:03 iZwz93rgmegkukw2f9vl89Z systemd: Started Session 2386 of user root.
Dec 10 14:35:03 iZwz93rgmegkukw2f9vl89Z systemd-logind: New session 2386 of user root.
Dec 10 14:40:01 iZwz93rgmegkukw2f9vl89Z systemd: Started Session 2387 of user root.
Dec 10 14:50:01 iZwz93rgmegkukw2f9vl89Z systemd: Started Session 2388 of user root.

2.17 tailf:跟踪日志文件

2.17.1 功能说明与语法格式

  • tailf命令几乎等同于tail -f,不同的是,如果文件不增长,那么它不会去访问磁盘文件,也不会更改文件的访问时间。tailf命令几乎等同于tail -f,严格说来应该与tail --follow=name更相似些。当文件改名之后它也能继续跟踪,特别适合于日志文件的跟踪(follow the growth of a log file)。与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件。tailf特别适合那些便携机上跟踪日志文件,因为它能省电,因为减少了磁盘访问。

  • 语法格式

tailf [option] [file]

2.17.2 选项说明

参数 含义
-n 输出最后数行
-NUMBER 与NUMBER相同
-V 输出版本信息并退出
-h 显示帮助并退出

2.17.3 命令演示

[root@iZwz93rgmegkukw2f9vl89Z ~] tailf /var/log/secure
Dec 10 13:56:44 iZwz93rgmegkukw2f9vl89Z sshd[877]: Connection closed by 191.5.100.183 port 54793 [preauth]
Dec 10 13:56:50 iZwz93rgmegkukw2f9vl89Z sshd[886]: Invalid user admin from 191.5.100.183 port 54797
Dec 10 13:56:50 iZwz93rgmegkukw2f9vl89Z sshd[886]: input_userauth_request: invalid user admin [preauth]
Dec 10 13:56:50 iZwz93rgmegkukw2f9vl89Z sshd[886]: pam_unix(sshd:auth): check pass; user unknown
Dec 10 13:56:50 iZwz93rgmegkukw2f9vl89Z sshd[886]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=191.5.100.183
Dec 10 13:56:52 iZwz93rgmegkukw2f9vl89Z sshd[886]: Failed password for invalid user admin from 191.5.100.183 port 54797 ssh2
Dec 10 13:56:56 iZwz93rgmegkukw2f9vl89Z sshd[886]: Connection closed by 191.5.100.183 port 54797 [preauth]
Dec 10 14:35:02 iZwz93rgmegkukw2f9vl89Z sshd[29927]: pam_unix(sshd:session): session closed for user root
Dec 10 14:35:03 iZwz93rgmegkukw2f9vl89Z sshd[2847]: Accepted password for root from 171.43.236.47 port 16299 ssh2
Dec 10 14:35:03 iZwz93rgmegkukw2f9vl89Z sshd[2847]: pam_unix(sshd:session): session opened for user root by (uid=0)

03. xfs 文件系统的备份与恢复

3.1 xfs 文件系统介绍

  • XFS提供了xfsdumpxfsrestore工具协助备份XFS文件系统中的数据。xfsdumpinode顺序备份一个XFS文件系统
  • centos7选择xfs格式作为默认文件系统,而且不再使用以前的ext系列文件系统,仍然支持ext4xfs专为大数据产生,每个单个文件系统最大可以支持8eb,单个文件可以支持16tb,不仅数据量大,而且扩展性高。还可以通过xfsdumpxfsrestore来备份和恢复。
  • 与传统的UNIX文件系统不同,XFS不需要在备份前被卸载;对使用中的XFS文件系统做备份就可以保证镜像的一致性。XFS的备份和恢复的过程是可以被中断然后继续的,无须冻结文件系统。xfsdump 甚至提供了高性能的多线程备份操作——它把一次dump拆分成多个数据流,每个数据流可以被发往不同的目的地
  • 首先了解一下xfsdump的备份级别有以下两种,默认为0(即完全备份)
级别 级别含义
0 完全备份
19 增量备份
  • 扩展:
    • 完全备份:每次都把指定的备份目录完整的复制一遍,不管目录下的文件有没有变化;
    • 增量备份:每次将之前(第一次、第二次、直到前一次)做过备份之后有变化的文件进行备份;
    • 差异备份:每次都将第一次完整备份以来有变化的文件进行备份。

3.2 xfs 文件系统备份与恢复演示

3.2.1 xfs文件系统备份

  1. 首先在vmware workstation上给虚拟机加一块磁盘,这个操作我就不列举了

  2. 查看当前磁盘个数

[root@idys3 ~] lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk 
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0   20G  0 part /
└─sda3   8:3    0    1G  0 part [SWAP]
sr0     11:0    1 10.3G  0 rom  /media/cdrom1

可以发现磁盘插进入的硬盘,系统还没有识别出来。

  1. 让系统扫描总线识别出硬盘
[root@idys3 ~] ls /sys/class/scsi_host/host  # 先查看有几个host
host0/ host1/ host2/ 
[root@idys3 ~] for i in {0..2};do echo '- - -' > /sys/class/scsi_host/host$i/scan;done 
  1. 再次查看硬盘,发现新加入的硬盘已经识别出来了
[root@idys3 ~] lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk 
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0   20G  0 part /
└─sda3   8:3    0    1G  0 part [SWAP]
sdb      8:16   0   20G  0 disk 
sr0     11:0    1 10.3G  0 rom  /media/cdrom1
  1. 对系统进行分区,分区分配大小2G
[root@idys3 ~] fdisk /dev/sdb 
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xe64ff604.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Partition 1 of type Linux and of size 2 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xe64ff604

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
  1. 查看一些情况,发现出来了2G大小的/dev/sdb1主分区
[root@idys3 ~] lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk 
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0   20G  0 part /
└─sda3   8:3    0    1G  0 part [SWAP]
sdb      8:16   0   20G  0 disk 
└─sdb1   8:17   0    2G  0 part 
sr0     11:0    1 10.3G  0 rom  /media/cdrom1
  1. 对分区格式化
[root@idys3 ~]  mkfs.xfs /dev/sdb1 
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
  1. 将分区挂载在目录上
[root@idys3 ~] mkdir /media/xfs_dir1
[root@idys3 ~] mount /dev/sdb1 /media/xfs_dir1/
  1. 在分区挂载的目录下创建出几个文件
[root@idys3 xfs_dir1] touch {a,b}.txt;cp /etc/passwd ./
[root@idys3 xfs_dir1] ls
a.txt  b.txt  passwd
  1. 备份分区
  • 备份整个分区。 (这个功能就像是虚拟机的快照,服务器被黑后,进行快速恢复)
  • xfsdump -f 备份存放位置 要备份路径或设备文件
[root@idys3 media] yum -y install xfsdump  # 先安装备份工具
[root@idys3 media] xfsdump -f /mnt/sdb1_backup /dev/sdb1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control

 ============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
 -> sdb1_backup
session label entered: "sdb1_backup"

 --------------------------------- end dialog ---------------------------------

xfsdump: level 0 dump of idys3.cn.com:/media/xfs_dir1
xfsdump: dump date: Thu Dec 10 17:26:09 2020
xfsdump: session id: f119ea6d-6174-420d-84a7-e338622e0924
xfsdump: session label: "sdb1_backup"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 25856 bytes
xfsdump: /var/lib/xfsdump/inventory created

 ============================= media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
 -> sdb1
media label entered: "sdb1"

 --------------------------------- end dialog ---------------------------------

xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 23016 bytes
xfsdump: dump size (non-dir files) : 1056 bytes
xfsdump: dump complete: 118 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /mnt/sdb1_backup OK (success)
xfsdump: Dump Status: SUCCESS

注意:备份的路径这里不能写成/sdb1/。 可以是/dev/sdb1/sdb1xfsdump只能对整个分区备份,或者后接整个分区的根目录

  1. 指定备份时免交互操作,方便后期做定时备份
[root@idys3 media] xfsdump -f /mnt/sdb1_file_backup -s a.txt /dev/sdb1 -L file_normal -M test 
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsdump: level 0 dump of idys3.cn.com:/media/xfs_dir1
xfsdump: dump date: Thu Dec 10 17:33:02 2020
xfsdump: session id: cf50621a-9a06-4482-aa8d-46749ee615c2
xfsdump: session label: "file_normal"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 21120 bytes
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 21384 bytes
xfsdump: dump size (non-dir files) : 0 bytes
xfsdump: dump complete: 0 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /mnt/sdb1_file_backup OK (success)
xfsdump: Dump Status: SUCCESS

-Lxfsdump 记录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明

-Mxfsdump 可以记录储存媒体的标头,这里可以填写此媒体的简易说明

-s: 文件路径 只对指定的文件进行备份,-s指定时,路径写的是相对路径(-s可以是文件或目录)

  1. 查看备份信息与内容
[root@idys3 media]   xfsdump -I
file system 0:
        fs id:          0ba19bcf-dcb2-4001-a94c-d3046704f0ef
        session 0:
                mount point:    idys3.cn.com:/media/xfs_dir1
                device:         idys3.cn.com:/dev/sdb1
                time:           Thu Dec 10 17:26:09 2020
                session label:  "sdb1_backup"
                session id:     f119ea6d-6174-420d-84a7-e338622e0924
                level:          0
                resumed:        NO
                subtree:        NO
                streams:        1
                stream 0:
                        pathname:       /mnt/sdb1_backup
                        start:          ino 67 offset 0
                        end:            ino 70 offset 0
                        interrupted:    NO
                        media files:    1
                        media file 0:
                                mfile index:    0
                                mfile type:     data
                                mfile size:     23016
                                mfile start:    ino 67 offset 0
                                mfile end:      ino 70 offset 0
                                media label:    "sdb1"
                                media id:       01b7c0ba-9ecc-4b5e-82d6-49f5b1fc8dd2
        session 1:
                mount point:    idys3.cn.com:/media/xfs_dir1
                device:         idys3.cn.com:/dev/sdb1
                time:           Thu Dec 10 17:33:02 2020
                session label:  "file_normal"
                session id:     cf50621a-9a06-4482-aa8d-46749ee615c2
                level:          0
                resumed:        NO
                subtree:        YES
                streams:        1
                stream 0:
                        pathname:       /mnt/sdb1_file_backup
                        start:          ino 67 offset 0
                        end:            ino 68 offset 0
                        interrupted:    NO
                        media files:    1
                        media file 0:
                                mfile index:    0
                                mfile type:     data
                                mfile size:     21384
                                mfile start:    ino 67 offset 0
                                mfile end:      ino 68 offset 0
                                media label:    "test"
                                media id:       53821e61-efda-4931-83f8-2d79150f7c0c
xfsdump: Dump Status: SUCCESS
  • 备份成功后,我们就可以在/var/lib/xfsdump/inventory目录下看到生成的档案信息

  • 当然也可以通过xfsdump -I查看自己使用xfsdump生成的档案信息


3.2.2 xfs文件系统恢复

  1. 恢复备份的所有文件
[root@idys3 media] ls  # 首先把文件全部删除
cdrom1  cdrom2  xfs_dir1
[root@idys3 media] cd xfs_dir1/
[root@idys3 xfs_dir1] ls
a.txt  b.txt  passwd
[root@idys3 xfs_dir1] mkdir a
[root@idys3 xfs_dir1] mv a.txt b.txt passwd a
[root@idys3 xfs_dir1] ls
a
[root@idys3 xfs_dir1] rm -rf a
[root@idys3 xfs_dir1] ls

[root@idys3 xfs_dir1] xfsrestore -f /mnt/sdb1_backup /media/  #将备份归档的文件全部恢复
cdrom1/   cdrom2/   xfs_dir1/ 
[root@idys3 xfs_dir1] xfsrestore -f /mnt/sdb1_backup /media/xfs_dir1/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: idys3.cn.com
xfsrestore: mount point: /media/xfs_dir1
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Thu Dec 10 17:26:09 2020
xfsrestore: level: 0
xfsrestore: session label: "sdb1_backup"
xfsrestore: media label: "sdb1"
xfsrestore: file system id: 0ba19bcf-dcb2-4001-a94c-d3046704f0ef
xfsrestore: session id: f119ea6d-6174-420d-84a7-e338622e0924
xfsrestore: media id: 01b7c0ba-9ecc-4b5e-82d6-49f5b1fc8dd2
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 3 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /mnt/sdb1_backup OK (success)
xfsrestore: Restore Status: SUCCESS
  1. 恢复具体的某个文件
[root@idys3 xfs_dir1] xfsrestore -f /mnt/sdb1_backup -s passwd /media/xfs_dir1/  # 只恢复 passwd 这个文件
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: idys3.cn.com
xfsrestore: mount point: /media/xfs_dir1
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Thu Dec 10 17:26:09 2020
xfsrestore: level: 0
xfsrestore: session label: "sdb1_backup"
xfsrestore: media label: "sdb1"
xfsrestore: file system id: 0ba19bcf-dcb2-4001-a94c-d3046704f0ef
xfsrestore: session id: f119ea6d-6174-420d-84a7-e338622e0924
xfsrestore: media id: 01b7c0ba-9ecc-4b5e-82d6-49f5b1fc8dd2
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 3 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /mnt/sdb1_backup OK (success)
xfsrestore: Restore Status: SUCCESS
[root@idys3 xfs_dir1] ls  # 可以看到现在只恢复了 passwd 这个文件
passwd

-s后面带的是相对与整个文件系统的相对路径

  1. 恢复之前只备份某个文件时的备份文件
[root@idys3 xfs_dir1] xfsrestore -f /mnt/sdb1_file_backup /media/xfs_dir1/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: idys3.cn.com
xfsrestore: mount point: /media/xfs_dir1
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Thu Dec 10 17:33:02 2020
xfsrestore: level: 0
xfsrestore: session label: "file_normal"
xfsrestore: media label: "test"
xfsrestore: file system id: 0ba19bcf-dcb2-4001-a94c-d3046704f0ef
xfsrestore: session id: cf50621a-9a06-4482-aa8d-46749ee615c2
xfsrestore: media id: 53821e61-efda-4931-83f8-2d79150f7c0c
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 3 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /mnt/sdb1_file_backup OK (success)
xfsrestore: Restore Status: SUCCESS
[root@idys3 xfs_dir1] ls
a.txt

3.2.3 xfsdump的注意事项

  1. xfsdump 不支持没有挂载的文件系统备份!所以只能备份已挂载的!
  2. xfsdump 必须使用 root 的权限才能操作 (涉及文件系统的关系)
  3. xfsdump 只能备份 XFS 文件系统
  4. xfsdump 备份下来的数据 (档案或储存媒体) 只能让 xfsrestore 解析
  5. xfsdump 是透过文件系统的 UUID 来分辨各个备份档的,因此不能备份两个具有相同 UUID 的文件系统

3.3 xfs文件系统增量备份

3.3.1 概念讲解

  • 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,以此类推。

  • 优缺点

优点:没有重复的备份数据,因此备份的数据量不大,备份所需的时间很短。

缺点:数据恢复相对比较麻烦,它需要上一次全备份和所有增量备份的内容才能够完全恢复成功,并且它们必须沿着从全备份到依次增量备份的时间顺序逐个反推恢复,因此可能会延长的恢复时间


3.3.2 增量备份演示

  1. 做一次等级为1的增量备份
[root@idys3 xfs_dir1] xfsdump -l 1 -f /mnt/sdb_full_backup /dev/sdb1 -L full-backup -M first
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsdump: level 1 incremental dump of idys3.cn.com:/media/xfs_dir1 based on level 0 dump begun Thu Dec 10 17:26:09 2020
xfsdump: dump date: Thu Dec 10 18:06:52 2020
xfsdump: session id: 1b5aa4a0-6470-44b2-b9bf-8cf7a5ee86ff
xfsdump: session label: "full-backup"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 29952 bytes
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 23552 bytes
xfsdump: dump size (non-dir files) : 1600 bytes
xfsdump: dump complete: 0 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /mnt/sdb_full_backup OK (success)
xfsdump: Dump Status: SUCCESS

-l 做一个等级为1的备份:等级为1是为增量备份

  1. 对这个挂载分区的目录中的文件做一些修改,并且创建新的文件,然后,做一次增量备份
[root@idys3 xfs_dir1] xfsdump -l 2 -f /mnt/sdb_rise1_backup /dev/sdb1 -L full-backup -M first      
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsdump: level 2 incremental dump of idys3.cn.com:/media/xfs_dir1 based on level 1 dump begun Thu Dec 10 18:06:52 2020
xfsdump: dump date: Thu Dec 10 18:11:14 2020
xfsdump: session id: c1f88ce7-97b6-48ca-aada-36679c4cce37
xfsdump: session label: "full-backup"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 25856 bytes
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 22544 bytes
xfsdump: dump size (non-dir files) : 544 bytes
xfsdump: dump complete: 0 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /mnt/sdb_rise1_backup OK (success)
xfsdump: Dump Status: SUCCESS

级别19为增量备份

  1. 删除所有文件
[root@idys3 xfs_dir1] ls
a.txt  b.txt  c.txt  d.txt  fstab
[root@idys3 xfs_dir1] rm -r ./*
rm: remove regular empty file ‘./a.txt’? y
rm: remove regular file ‘./b.txt’? y
rm: remove regular empty file ‘./c.txt’? y
rm: remove regular empty file ‘./d.txt’? y
rm: remove regular file ‘./fstab’? y
  1. 恢复所有文件
  • 恢复文件时,要想恢复全部数据,包括新添加的文件,我们该如何恢复呢?

(1)先恢复全量备份

(2)情况1: 恢复最后一次增量备份(如果两次增量备份都是1级的,所以只需要恢复最后一个增量就可以了)。

(3)情况2:如果你做的是第一次是1级备,第二次是2级备,那么你在恢复的时候就需要先恢复完全备份,然后是1级备,最后是2级备

xfsrestore -f /mnt/sdb1_backup /media/xfs_dir1/  # 恢复全量备份
xfsrestore -f /mnt/sdb_full_backup /media/xfs_dir1/  # 恢复等级1增量数据
xfsrestore -f /mnt/sdb_rise1_backup /media/xfs_dir1/ # 恢复等级2增量数据

3.4 xfs查看分区碎片化程度

  • 查看两个分区的碎片化程度
[root@master ~] xfs_db -c frag -r /dev/sda1
actual 385, ideal 383, fragmentation factor 0.52%
Note, this number is largely meaningless.
Files on this filesystem average 1.01 extents per file
[root@master ~] xfs_db -c frag -r /dev/sda2
actual 135351, ideal 134275, fragmentation factor 0.79%
Note, this number is largely meaningless.
Files on this filesystem average 1.01 extents per file

fragmentation factor后面接的百分比代表碎片化百分比

  • 整理碎片化问题
xfs_fsr /dev/sda2


写在最后的话:

  • 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
  • 欢迎关注我的CSDN博客,IDYS’BLOG
  • 持续更新内容
    linux基础 | 数据通信(路由交换,WLAN) | Python基础 | 云计算
  • 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
  • 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!

你可能感兴趣的:(运维笔记,uefi,linux,xfs,shell)