文件管理简介

  • Post author:
  • Post category:其他




文件管理



文件介绍



FHS

  • Filesystem Hierarchy Standard 文件系统目录标准



文件特点

  • 一切皆文件
  • 文件名严格区分大小写



Linux文件类型

    • 普通文件(文本文件,二进制文件,压缩文件,视频,图片…)

  • d

    • 目录文件(蓝色)
  • b

    • 块设备文件(存储设备硬盘,U盘 /dev/sda, /dev/sda1)
  • c

    • 字符设备文件(打印机,终端 /dev/tty1, /dev/zero)
  • l

    • 链接文件(淡蓝色)
  • s

    • 套接字文件
  • p

    • 管道文件



目录结构

  • 特点

    • linux

      • 以单根的方式组织文件 /
      • 倒立的树状结构
    • Windows

      • 以多根的方式组织文件 C:\ D:\ E:\
  • 常见目录

    • /

      • 根目录,linux最顶级的目录
    • /bin

      • 存放的是系统的命令,用户命令
    • /sbin

      • 存放的是管理命令
    • /boot

      • 存放的是系统的启动文件及内核
    • /dev

      • 设备文件目录
    • /etc

      • 配置文件目录
    • /root

      • 超级管理员的家目录
    • /home

      • 普通用户的家目录
    • /lib

      • 系统库文件主目录
    • /media

      • 挂载点目录,移动设备
    • /mnt

      • 挂载点目录
    • /opt

      • 可选目录,第三方程序的安装目录
    • /proc

      • 虚拟的文件系统,反映出来的是内核,进程信息或实时状态
    • /sys

      • 跟硬件设备相关的属性映射文件
    • /run

      • 与程序运行相关的信息,如进程号,套接字文件等
    • /tmp

      • 临时文件目录, /var/tmp
    • /var

      • 变化的数据文件目录;/var/log 日志文件
    • /usr

      • 用户程序目录,包含二进制文件、库文件、文档和源码安装的程序等
    • /usr/local

      • 软件安装的目录,相当于C:\Program
  • 路径切换:cd

    • 绝对路径:从根(/)开始的
    • 相对路径:从当前路径开始的
    • cd / :切换到根目录
    • cd – :切换到上一次去过的目录
    • cd … :切换到上一级目录,等同于cd …/
    • cd :切换到当前用户的家目录等同于cd ~



文件基本操作



查询文件信息:ls

  • 用法:ls [选项]… [文件]…

  • 选项

    • -a 列出所有文件,包含隐藏文件(以”.”开头)

    • -l 列出文件的详细信息,ls -l 等同于 ll

      详细信息内容:-rw——-. 1 root root 1241 2月 22 16:22 anaconda-ks.cfg

      -: 文件类型

      rw——-:文件权限

      root:文件的所有者

      root:文件的所属组

      1241:文件大小

      2月 22 16:22:时间

      anaconda-ks.cfg:文件名

    • -lh 人性化显示,文件大小单位的换算。等同于 ll -h

    • -R 递归显示文件

    • -S 按文件大小排序

    • -s 查看大小

    • -t 按修改时间排序

    • -i 查看inode索引号

    • -d 查看目录文件



查看文件内容

  • cat 文件名:查看文件全部内容,比较适合小文件

    • -n

      • 增加行号
    • -A

      • 显示隐藏转义字符
      • \n显示$,\t显示

        |,\r显示

        M(回车)
  • tac 文件名:倒序显示文件全部内容

  • head [-N] 文件名:查看文件的前N行,默认为前10行

  • tail

    • tail [-N] 文件名:查看文件的后N行,默认为后10行
    • tailf 文件名:实时显示;tailf == tail -f(文件删除后中断显示)
    • tailf -F 文件名:实时显示(文件删除再创建后继续显示)
  • grep [选项] 关键字 文件名:过滤查看文件

    • -n 显示行号
    • -v 显示不匹配的行
  • less 文件名:按页显示。空格翻页、enter翻行、方向键滚动、/查找

  • more -5 文件名#每页显示5行

    more +5 文件名#从第5行起显示more +/xx 文件#从第一个xx的前2行开始显示



创建文件:touch

  • 用法:touch [选项]… 文件…

  • 示例

    • touch file1.txt#无则创建,有则更新文件时间
    • touch /home/{zhuzhu,gougou} 相同路径部分可使用集合简化
    • touch file{1…20} 集合,批量创建



创建目录:mkdir

  • 用法:mkdir [选项]… 目录…

  • 选项

    • -v:显示创建过程
    • -p:递归创建(父目录不存在则逐级创建,已存在不报错)
  • 示例

    • mkdir /home/dir2 /home/dir3#在/home下创建目录dir2、dir3
    • mkdir /home/{dir4,dir5}#在/home下创建目录dir4、dir5
    • mkdir /home/dir{1…100}#在/home下创建目录dir1到dir100



复制:cp

  • 用法:cp [选项]… 源… 目的(路径下加名字则重命名,无路径默认当前目录)

  • 选项

    • -r

      • 递归复制文件和目录
    • -v

      • 显示复制过程
    • -f

      • 强制复制
    • -i

      • 覆盖
    • -p

      • 保留源文件或目录的所有属性
    • -d

      • 当复制符号连接时,把目标文件或目录也建立为符号连接
    • -a

      • 等价于“pdr”选项
  • 示例

    • cp a.txt /home/b.txt#将当前目录下a.txt复制到/home下重命名为b.txt
    • cp -r a/b/c/a.1{,-123} #将路径/a/b/c下的a.1复制重命名a.1-123
    • cp -i /root/a.txt /a.txt#用/root/a.txt内容覆盖/a.txt内容



移动:mv

  • 用法

    • mv [选项]… 源… 目的
    • 路径下加名字则重命名,无路径默认当前目录
  • 选项

    • -v 详细过程
  • 示例

    • mv file2 /home/file3#将当前目录下file2移动到/home下重命名为file3
    • mv file4 file5#将当前目录下file4重命名为file5
    • mv /home/{a,b}#将/home下a重命名为b



删除:rm

  • 用法:rm [选项]… 文件…

  • 选项

    • -r 递归
    • -f force强制
    • -v 详细过程
  • 示例:rm -rfv /home/* #删除/home下所有文件(不包含隐藏文件)



vi/vim编辑器

vim 文件 默认先查看,不存在会自动创建(只能编辑文件,遇到目录要强制退出)



命令模式

打开文件后进入的默认模式

  • 跳转

    ^ 光标定位到第一个非空字符

    $ 光标定位到行尾

    Home/0 光标定位到行首

    End/$ 光标定位到行尾

    ​gg 光标定位到首行

    Ngg 光标定位到第N行

    G 光标定位到最后一行

  • 复制-y

    ​ yy 复制光标所在的行

    Nyy 从光标所在的行开始,共复制N行

    yG 复制从光标所在的行及下面所有的行

    ygg 复制从第一行到光标所在的行

    Nygg 复制从第N行到光标所在的行

    ​ yHome 行内复制光标前(不包含光标)所有的内容

    yEnd 行内复制光标后(包含光标)所有的内容

    y^ 复制行首到光标

    y$ 复制光标到行尾

    yw 复制光标所在单词

  • 删除(剪切):d

    • 用法同复制
  • 粘贴:p

    • 整行复制(剪切)

      • 粘贴到光标所在行的下方
    • 行内复制

      • 粘贴到光标的后方
  • 字符操作

    • x 删除光标所在的字符
    • Nx 删除光标所在的字符及后面一共N个字符
    • r 替换光标所在字符
    • R 连续替换(替换模式,按Esc退出替换)
  • 其他操作

    • u 撤销-undo
    • ctrl+r 反撤销-redo
    • ZZ 保存退出



插入模式

  • 进入(编辑内容)

    i:当前位置插入

    I:当前行首插入

    a:当前位置下一个字符插入

    A:当前行尾插入

    o:当前位置下一行插入

    O:当前位置上一行插入

  • Esc:退出插入模式(到命令模式)



尾行模式

  • :进入,Esc/Enter退出(到命令模式)

  • :N 光标跳转到第N行,最后一行可用$表示

  • 复制:y

    • :y 复制光标所在行
    • :Ny 复制第N行
    • :N,My 复制从第N行到第M行
  • 删除(剪切):d

    • 用法同复制
  • 关键词替换:s

    连接符号: #/或###或@@@​ 😒/old/new/ 将光标所在行的第一个”old”替换成”new” ​ 😒/old/new/g 将光标所在行的所有的”old”替换成”new”,g-global全局​ :Ns/old/new/g 将第N行的所有的”old”替换成”new”​ :N,Ms/old/new/g 将从第N行到第M行的所有的”old”替换成”new”​ :%s/old/new/g 将整个文件中所有的”old”替换成”new” :5,10 s /./#&/ 5-10前加入#字符 (.整行 &引用查找的内容)

  • 退出

    • :q! 强制退出 ,!强制
    • :wq 保存退出
    • 😡 保存退出
  • 读写文件

    :w 保存 write写入当前文件

    :w /tmp/aaa.txt 将全文另存为/tmp/aaa.txt

    :1,3 w /tmp/2.txt 将1到3行另存为/tmp/2.txt

    :r /etc/hosts 读入文件/etc/hosts内容到当前行后

    :5 r /etc/hosts 读入文件/etc/hosts内容到第5行后

  • 搜索

    • /关键字 n下一个 N上一个
    • ^old:以old开头;old$:以old结尾
  • 设置

    临时设置:

    ​ :set nu 显示行号

    ​ :set nonu 不显示行号

    ​ :set ts=4 设置tab的宽度为4

    ​ :nohl 关闭高亮显示

    ​ :set paste 粘贴模式

    :set ic 不区分大小写

    :set noic 区分大小写

    永久设置:

    修改vim环境配置文件(在环境配置文件中加入规则)vim /etc/vimrc 编辑加入set nu (影响所有系统用户)



可视模式

  • ctrl+v可视块、V可视行
  • 块替换: 选择块,r 输入替换的字符
  • 块删除: 选择块,d
  • 块复制: 选择块,y



用户和组



基础介绍

  • 用户和组的作用

    • 系统登录
    • 文件归属 – 每个文件都属于一个特定的用户和组
    • 进程权限 – 每个进程都由一个特定的用户来运行
  • 用户和组的关系

    • 每个用户有且仅有一个基本组, 一个组可以作为多个用户的基本组
    • 每个用户都可以有任意多个附加组
  • 配置文件

    • 默认配置文件

      • /etc/login.defs

        指定系统默认参数:

        UID/GID_MIN 1000

        UID/GID_MAX 60000

        SYS_UID/GID_MIN 201

        SYS_UID/GID_MAX 999

        CREATE_HOME yes

      • /etc/default/useradd

        指定系统默认参数:

        HOME=/home

        SHELL=/bin/bash

        CREATE_MAIL_SPOOL=yes

    • 记录用户和组信息的文件

      • /etc/passwd # 记录用户的信息,每行记录一个用户信息,
      • /etc/shadow # 存放用户的密码信息
      • /etc/group # 记录组信息
      • /etc/gshadow # 记录组密码信息
    • 子主题 3



用户的管理

  • 查看用户

    • 查看用户基本信息: /etc/passwd 文件

      使用”:”分隔为7列

      用户名:密码占位符:uid:gid:账户的描述信息:家目录:登录shell

      密码占位符:指定是否需要密码登录。x表示需要密码登录(可登录用户),为空表示不需要

      登录shell:分配的命令解释器

    • 查看用户及其组的信息: id 命令

      • 用法: id [选项] 用户名

      • 选项

        • -u 仅打印用户的uid
        • -g 仅打印用户的基本组的gid
        • -G 打印用户所有组的gid
        • -n 和-u,-g,-G结合使用,使用名称代替id
  • 添加用户

    讨论:默认情况下,创建一个用户做了哪些事情呢?

    1.创建同名组/etc/group

    2.添加同名组密码信息/etc/gshadow

    3.创建用户/etc/passwd

    4.添加用户密码信息/etc/shadow

    5.创建家目录/home

    6.创建邮箱/var/spool/mail

    用户只能单个创建

    • 用法: useradd [选项] 用户名

    • 选项

      • -c 指定用户的描述信息

      • -d 指定用户的家目录,不要事先创建(默认家目录为/home/用户名)

      • -g 指定用户的基本组,接组名或gid

        • 默认情况下,系统会创建一个和用户名相同的组名作为用户的基本组,gid值与uid值一致
        • 指定的组名或uid需已存在
      • -u 指定用户的uid

        • 默认按上一个用户的id往下顺延
      • -s 指定用户的登录shell

        查看系统支持的shell:cat /etc/shells

        支持登录的shell:sh结尾

        不支持登录的shell:/sbin/nologin

        不可登录的系统用户:运行进程

      • -M 不创建家目录

      • -G 指定用户的附加组

      • -r 创建系统帐户:uid为1-999

  • 删除用户

    • 用法: userdel [选项] 用户名
    • 选项:-r 清除用户数据(家目录,邮箱)
  • 修改用户

    • 修改用户基本信息

      • 用法: usermod [选项] 用户名

      • 选项

        • -l 修改用户名:usermod -l new old
        • -u -g -d -s -c :用法与useradd一致
        • -aG 增加附属组
    • 修改用户密码

      root可修改所有人的密码,普通用户只能修改自己的密码

      • 交互式

        • passwd#设置自己的密码
        • passwd 用户名#设置指定用户的密码(只有root用户可执行)
      • 非交互式

        • echo “123” |passwd –stdin wutao
        • –stdin 从标准输入读取令牌
  • 切换用户

    • 用法: su – 用户名
    • 退出:exit
    • root切换到其他用户不用密码,其他情况都要输入密码
  • 锁定用户

    • usermod -L tom
    • passwd -l jerry
    • 在shadow文件中对应用户的密码前加上!



组的管理

  • 创建组

    • 用法:groupadd [选项] 组名
    • 选项:-g 指定gid(该id未被使用)
  • 查看组

    • 组信息:cat /etc/group

      组名:密码占位符:gid:组员

    • 组密码信息:cat /etc/shadow

    • 查看用户所属组:groups 用户名

  • 修改组

    • 用法:groupmod [选项] 组名

    • 选项

      • -g ID 修改组ID
      • -n NEW_NAME 修改组名
  • 修改组成员

    • 用法:gpasswd [选项] 组名

    • 选项

      • -a USER 向组中添加成员
      • -d USER 从组中删除成员
      • -M USER1,USER2,… 设定组成员,会覆盖原来的组成员
  • 删除组

    • groupdel 组名

      这个组不能是某一个用户的主组,否则删除会失败



文件权限管理



文件的归属

每个文件都属于一个特定的用户和一个特定的组

仅root用户可修改文件的归属

  • ls -l查看详细信息:-rw-r–r–. 1 user group

  • 属主权限 属组权限 其他人权限 属主 属组

  • 修改文件归属-chown

    • chown [选项]… [属主][:[属组]] 文件…
    • chown [选项]… [属主][.[属组]] 文件…
    • -R 作用于目录,递归修改目录下的子文件
  • 默认归属

    • 属主:创建者用户
    • 属组:创建者用户的基本组



基本权限

  • 基本权限对象-ugo

    UGO描述的是用户对文件的身份,匹配顺序:

    1.先看用户是否文件的属主:如果是,则应用属主的权限

    2.看用户是否文件属组的成员:如果是,则应用属组的权限

    3.如果以上2个都不是,是应用其他人的权限

    • u -user,属主
    • g -group,属组
    • o -other,其他人
  • 基本权限类型-rwx

    基本权限只针对普通用户,root不受影响

    bash不受x权限影响

    • r:read,读,4
    • w:write,写,2
    • x:execute,执行,1
    • -:无权限,0
  • rwx对应的操作

    • 普通文件

      • 前提:能够进入文件所在的目录
      • r -查看文件的内容,cat/more/less/tail/vim…
      • w -修改文件内容,vim/vi/>/>>…
      • x -执行文件,命令/脚本文件(系统默认无x权限)
    • 目录文件

      • r -查看目录的内容
      • w -修改目录的内容,mkdir/mv/cp/rm
      • x -进入目录(基础权限,所有操作的前提),cd



更改文件权限-chmod

  • chmod [ugoa][±=][rwx] 文件…

    chmod u-x /test

    chmod g+w /test

    chmod o=rx /test

    chmod a=rwx /share

    chmod u+w,g-x /share

    • a:all,可以省略
    • +:在原来的基础上增加
    • -:在原来的基础上减少
    • =:覆盖原来的权限
  • chmod 644 文件…

    数字形式表示权限:r=4,w=2,x=1,-=0

    rwxrwxrwx -> 777。3个为1组,每组用1位数字表示

    — -> 0

    –x -> 1

    -w- -> 2

    -wx -> 3

    r– -> 4

    r-x -> 5

    rw- -> 6

    rwx -> 7

    • 直接用4位数字表示权限:高级权限+u+g+o,不可用±=
    • 对应数字位省略表示无权限,如777,77,7,0
  • 授权的原则

    • 1.满足使用的需求
    • 2.影响范围尽量小



权限掩码-umask

  • 默认掩码:0022

  • umask:查询当前掩码;umask+掩码 :设置掩码

  • 创建文件默认最大权限:目录777,普通文件666

  • 文件初始权限

    • 创建文件的权限=最大权限去掉umask掩掉的权限
    • 普通文件本身没有x权限,故不能直接用数字相减
    • 默认掩码0022时,普通文件权限644,目录权限755
    • 家目录权限默认700



其他权限

  • acl权限

    • 作用

      • 精细化的权限控制:FACL-file access control list
    • 查询

      • getfacl

        • [root@zqs ~]# getfacl /root/file_a

          getfacl: Removing leading ‘/’ from absolute path names



file: root/file_a #文件名



owner: hr #文件的属主



group: hr #文件的属组

user::rw- #默认用户(属主)的权限,跟ls -l看到的权限一致

user:tom:rw- #为用户tom授权的acl权限

group::— #默认的组(属组)权限

group:IT:r– #为IT组授权的acl权限

mask::rw- #掩码,真正的权限是与mask相与的结果,属主权限不受影响

other::— #其他人的权限

- 设置

	- setfacl

		- -m:添加facl权限

			- setfacl -m u:tom:rw /file #给tom用户设置acl权限
			- setfacl -m g:IT:r-- /file #给IT组设置acl权限
			- setfacl -m m::r-- /file #设置mask,撤销wx权限。用作大范围撤销某项权限

		- -x:移除facl权限

			- setfacl -x u:tom /file #移除对tom用户的授权
			- setfacl -x g:IT /file #移除对IT组的授权

		- -b:清空acl权限

			- setfacl -b /file #移除文件所有的acl权限

		- -d:设置默认acl权限

			- 作用在目录上,在目录下新建文件时采用设置的默认权限
			- setfacl -d -m u:bob:r-x /dir #给目录/dir设置默认acl权限

		- -k:移除默认acl权限

			- setfacl -k /dir #清除目录/dir的默认acl权限

		- -R:递归设置
  • 高级权限

    • suid – 4

      实验:SUID 实验目的:让tom用户可以看到jerry家目录下的文件内容 过程: # cp /usr/bin/cat /tmp # chown jerry /tmp/cat # chmod u+s /tmp/cat#给文件加suid权限 # su – tom $ /tmp/cat /home/jerry/jerry.txt#使用加了suid的cat可以看到jerry家目录下的文件了

      • 作用于可执行文件,用户在执行此文件时,以该文件属主的身份执行

        (非可执行权限不生效)

      • 权限对象为u:u+s

        • chomd u+s /usr/bin/cat
        • chmod 4755 /usr/bin/cat
    • sgid – 2

      实验:SGID 实验目的:要求所有用户在/IT目录下创建的文件属组都为IT 过程: # groupadd IT # mkdir /IT # chown .IT /IT # chmod g+s /IT#给目录加上sgid权限 # echo test > /IT/test # ll /IT/test -rw-r–r– 1 root IT 5 11月 28 14:22 /IT/test#可以看到root用户创建的文件属组也为IT

      • 1.作用与可执行文件,用户执行此文件时,以该文件属组的身份执行

      • 2.作用于目录,在目录下创建文件会继承目录的属组

        (设置前已有的文件不受影响)

      • 权限对象为g:g+s

        • chmod g+s /test
        • chmod 2755 /test
    • sticky – 1

      实验:STICKY 实验目标:普通用户在/share目录中只能删除自己的文件 过程: [root@desk ~]# mkdir /share [root@desk ~]# chmod 1777 /share#给目录加上sticky权限,或用 o+t 添加 [root@desk ~]# ll -d /share/ drwxrwxrwt 2 root root 21 11月 28 14:42 /share [root@desk ~]# su – tom[tom@desk ~]$ touch /share/tom.txt [tom@desk ~]$ su – jerry [jerry@desk ~]$ ll /share/ -rw-rw-rw- 1 tom tom 6 11月 28 14:45 tom.txt [jerry@desk ~]$ rm -rf /share/tom.txt rm: 无法删除”/share/tom.txt”: 不允许的操作#虽然目录权限为777,但不能删除别人的文件

      • 一般作用于共享目录,在此目录中,用户只能删除自己的文件

      • 权限对象为o:o+t

        • chmod o+t /share
        • chmod 1755 /share
  • 隐藏权限

    • 针对所有人,包括root

    • lsattr 文件名

      • 查看文件隐藏权限
    • chattr [±=][ia] 文件名

      • 修改文件隐藏权限

      • i:只读,不可删除修改

        • chattr +i /file
        • chattr -i /file
      • a:只能追加,不能删除修改

        • chattr +a /fie
        • chattr -a /file
        • 作用于目录:可以创建复制,不可移动删除
      • 清空隐藏权限

        • chattr = /file



普通账户提权

  • 方法一

    • 将用户加入轮子组wheel(权限过大,相当于root)

    • 加入方式

      • 新增用户时加入

        • useradd -G wheel user
      • 将用户加到组

        • usermod -aG wheel user
      • 从组添加用户

        • gpasswd -a user wheel
  • 方法二

    • visudo添加授权(通过visudo命令编辑/etc/sudoers文件)

    • 授权格式

      • user MACHINE=(user) COMMANDS

      • user

        • 所授权的帐户
      • MACHINE

        • 在哪台主机上
      • (user)

        • 以谁的身份,可以省略,ALL表示所有
      • COMMANDS

        • 执行的命令列表,多个命令使用,隔开,必须要用绝对路径
        • 允许权限列表可以用自定义的命令组,禁止的权限不能用
    • 示例

      • tom ALL=(ALL) /usr/sbin/useradd,/usr/sbin/usermod

      • %wheel ALL=(ALL) ALL

        • wheel组的所有成员可以执行所有的命令
      • jim ALL=(ALL) ALL,! /usr/sbin/userdel

        • jim除userdel外,其他所有命令都可以执行
      • tom ALL=(ALL) ACCOUNT,!/usr/bin/passwd root

        • tom可以执行ACCOUNT命令组中所有命令,禁止修改root密码
    • 定义命令组

      • Cmnd_Alias NAME = /usr/sbin/useradd,/usr/sbin/userdel
  • 方法三

    • 编辑单独的授权文件
    • echo “tom ALL=(ALL) /usr/sbin/useradd” > /etc/sudoers.d/tom
  • 注意

    • 执行管理命令时默认需要验证用户密码,故需提前设置密码

      • echo “123” |passwd –stdin tom
    • 若想取消密码验证,授权时添加NOPASSWD

      • jim ALL=(ALL) NOPASSWD: ALL
    • 执行管理命令前需加上sudo

      • sudo useradd lili command



Rsync



rsync

  • 介绍

    • 可以用于实现数据增量同步

      • 如备份NAS或其它存储服务器上的文件
      • 如从发布服务器推数据到其它服务器
    • 基于sshd服务器,可以结合ssh公钥认证

    • 也可以用于本地服务器复制,同cp

  • 安装

    • yum -y install rsync
  • 语法

    • rsync [OPTION]… SRC… DEST

      • 拷贝本地文件
      • rsync a b
    • rsync [OPTION]… SRC… [USER@]HOST:DEST

      • 从本地拷贝到远程
      • rsync -avz a/ 1.1.1.13:/opt/a
    • rsync [OPTION]… [USER@]HOST:SRC DEST

      • 从远程拷贝到本地
      • rsync -avz 1.1.1.13:/opt/a/ a/
  • 选项

    • -v

      • 详细模式输出
    • -z

      • 对备份的文件在传输时进行压缩处理
    • -a

      • 等同于-rlptgoD

      • -r

        • 对子目录以递归模式处理
      • -l

        • 保持软链接
      • -p

        • 保持文件权限
      • -t

        • 保持文件修改时间
      • -g

        • 保持文件属组
      • -o

        • 保持属主(仅限root)
      • -D

        • 保持设备文件信息
    • -H

      • 保持硬链接
    • -A

      • 保持acl权限
    • -X

      • 保持attr扩展属性
    • –delete

      • 删除DST中SRC没有的文件
      • rsync -avz –deleting a/ 1.1.1.13:/opt/a
    • –exclude=pattern

      • 指定排除不需要传输的文件
      • rsync -azv –delete –exclude=b.txt a/ 1.1.1.13:/opt/a
  • 注意

      • 目录以”/”结尾

        • 仅传输目录下的内容
        • 同步时扫描目录下的文件个体是否变化
      • 目录不以”/”结尾

        • 传输目录及目录下的内容
        • 同步时以目录为整体扫描文件是否变化
    • 目标

      • 目标目录的父目录需已存在
    • 同步过程

      • 首次同步为全量备份,源目录是否以“/”结尾均可
      • 后续增量同步时,源目录必须以“/”结尾,否则仍以全量(对于源目录而言)形式同步



inotify

  • 介绍

    • 一种强大的、细粒度的、异步的文件系统事件监控机制
    • 在内核中通过Inotify监控文件系统中添 加、删除,修改、移动等各种细微事件
    • 利用这个内核接口,第三方软件(如inotify-tools)就可以监控文件系统下文件的各种变化情况
    • 与rsync结合使用可解决同步数据的实时性我呢提
  • 安装

    • yum -y install inotify-tools
  • inotifywait指令

    • 用于等待文件或文件集上的一个特定事件,它可以监控任何文件和目录

    • 选项

      • -m

        • 始终保持事件监听状态
      • -r

        • 递归查询目录
      • -q

        • 不打印监控事件(最开始的提示信息)
      • -e

        • 指定要监控的事件

          • inotifywait -mrq -e modify,attrib,move,create,delete /root/a
        • 写操作事件

          • modify

            • 文件或目录发生写操作
          • delete

            • 文件或目录被删除
          • create

            • 文件或目录被创建
          • attrib

            • 文件或目录属性发生变化
    • 输出格式

      • –format

        • 指定输出格式

        • 常用

          • %T

            • 使用由-timefmt定义的时间格式
          • %e

            • 表示发生的事件
          • %w

            • 表示发生事件的目录
          • %f

            • 表示发生事件的文件
      • -timefmt

        • 指定时间格式,用于-format选项中的%T格式

        • 格式与date一致

          • [%y/%m/%d %H:%M:%S]
          • [%F %T]
    • 同步保存为日志

      • inotifywait -mrq -e modify,attrib,move,create,delete –format ‘%T %e %w%f’ –timefmt ‘[%F %T]’ /root/a |tee -a /var/log/root_a_write.log



rsync+inotify实时同步

  • 传递公钥

    • ssh-keygen
    • ssh-copy-id 1.1.1.13
  • 编写同步脚本

    • vim rsync.sh

    • #!/bin/bash

      src_dir=/root/a/

      dst_ip=1.1.1.13

      dst_dir=/opt/a/

      log_dir=/var/log/root_a_w.log

      inotifywait -mrq -e modify,attrib,move,create,delete –format ‘%T %e %w%f’ –timefmt ‘[%F %T]’ $src_dir |

      while read line;do

      echo $line >> $log_dir

      rsync -avz –delete $src_dir



      d

      s

      t

      i

      p

      :

      dst_ip:






      d


      s



      t










      i


















      p




      :





      dst_dir

      done

    • nohup sh raync.sh &

      • 脚本放置后台运行,否则占用终端
      • 将进程脱离终端,否则终端关闭进程就停止
  • 同步测试



文件管理命令



文件信息

  • stat

    • 用法

      • stat [选项]… 文件…
      • 查看文件时间
    • 时间类型

      • Access

        • 访问时间(atime):文件当天第一次访问的时间
      • Modify

        • 修改时间(mtime):最后一次修改文件内容的时间
      • Change

        • 更改时间(ctime):最后一次修改文件元数据的时间(大小、权限、属主、属组…)
    • 注意

      • vim修改后3个时间都变化,ll显示的是modify time
  • df

    • 用法

      • df [选项]… [文件]…
      • 显示文件所在的文件系统相关信息
    • 选项

      • -T:显示文件系统类型
      • h:人性化显示(带单位)
    • 示例

      • 查看根分区磁盘使用情况:df -Th /
  • du

    • du -sh /tmp

      • 查看/tmp目录中文件总大小
  • file

    • file 文件

      • 查看文件的数据类型(文本,图片,压缩包…)



过滤内容

  • grep

    • 用法

      • grep [选项]… 关键词 [文件]…

        • 过滤文件中包含查找内容的行
    • 选项

      • -v:反选,过滤不包含该内容的行
      • -i:不区分大小写
      • -n:带行号显示
      • -c:统计过滤结果行数
      • -q:不显示过滤内容
      • -w:匹配整词
    • 关键词

      • root:包含root的行
      • ^root:以root开头的行
      • root$:以root结尾的行
      • ^$:空行(空格属于特殊字符)
    • 示例

      • 统计/tmp目录下普通文件的数量:ll /tmp |grep -c “^-”
  • awk

    • 用法

      • awk [选项] ‘{动作}’ file…
      • 打印指定列内容,默认分隔符为空格或制表符
    • 选项

      • -F:指定列分隔符
    • 列号




      • N

        N

        列,

        N 第N列,






        N





        N


        列,





        NF 最后一列,$(NF-1) 倒数第二列

    • 示例

      • awak -F: NR==2’{print $6}’#打印第2行第6列的字段
      • grep “^root:” /etc/passwd |awk -F: ‘{print $1,$3,$4}’ #打印root用户的用户名、uid、gid
  • tr

    • 用法

      • tr [选项]… SET1 [SET2]
      • 处理字符,删除、缩减、替换
    • 选项

      • -d:删除指定字符(可多个)

        • df -Th |grep “/$” |awk ‘{print $6}’ |tr -d %
      • -s:将连续出现的字符缩减为一个

        • echo goggoooole |tr -s og
        • 删除空行:tr -s “\n” < /etc/rc.local
    • 替换

      • tr set1 set2

        • echo $PATH |tr ‘:’ ’ ’ |xargs -n1 echo
      • cat /etc/passwd |tr a-z A-Z



内容处理

  • wc

    • 用法

      • wc [选项]… [文件]…

        • 统计行数、字符数、字数
    • 选项

      • -l:行数
      • -c:字符数
      • -w:字数
    • 示例

      • 统计系统中可登录用户数:grep sh$ /etc/passwd |wc -l
  • sort

  • uniq

    • 用法

      • uniq [选项]… [输入[输出]]

        • 对连续的重复行去重,去重前需先排序
    • 选项

      • -c:统计重复次数
    • 示例

      • awk -F: ‘{print $NF}’ /etc/passwd |sort |uniq -c |sort -nr
  • tee

    • 用法

      • tee []… [file]…

        • 双通道输出
    • 选项

      • -a:将输入内容追加到文件中
    • 输入来源

      • 标准输入,通过交互式键盘输入的内容
      • 通过管道流下来的内容
      • 通过输入重定向,将文件内容作为输入源
    • 示例

      • echo hello |tee /dev/tty1

      • echo hello |tee /tmp/a.txt

        • 将标准输入输出到终端的同时也保存到文件中,默认覆盖模式



打包压缩

  • zip

    • 压缩zip

      • 用法

        • zip [选项]… 压缩包名 需要压缩的文件列表
        • 压缩包名带路径指定目录,不带当前目录,后缀”.zip”
      • 选项

        • -r:压缩列表中有目录
    • 解压unzip

      • 用法

        • unzip zip压缩包 [选项]
      • 选项

        • -d:解压到指定目录。默认解压到当前目录
  • tar

    • 用法

      • tar [选项]… [文件]…
      • 打包:仅归档,文件的大小不会变化
      • 压缩: 压缩后文件的大小会变化
    • 选项

      • -c:创建文档
      • -f:后接包名,必接选项
      • -x:解包/压
      • -v:显示过程
      • -t:查询包中有哪些文件
      • -r:往打好的包中追加文件,不适用于压缩包
      • -z:通过gzip压缩     xxx.tar.gz
      • -j:通过bzip2压缩 xxx.tar.bz2
      • -J:通过xz压缩 xxx.tar.xz
      • -a:程序通过规范的后缀名自动选择压缩程序进行压缩
      • -C:指定解压路径,不指定则默认当前路径
    • 示例

      • 打包

        • tar cf /tmp/bao.tar
      • 查看包内容

        • tar tf /tmp/bao.tar
      • 包追加内容

        • tar rf /tmp/bao.tar /file
      • 压缩

        • tar acf /tmp/yasuo.tar.gz ./
      • 解压/包

        • tar xf yasuo.tar.gz
      • 与xargs联用

        • find / -name *.conf |xargs tar caf /backup/conf/config.tar.gz
        • 不能使用-i {} ,否则会覆盖



计划任务

  • 计划任务

    • 计划任务: 在开机的情况下, 按照计划完成的任务.
    • 一次性: 只执行一次
    • 周期性: 有规律的执行
    • 计划任务中的输出不会输出到终端, 而是通过邮件通知
  • 一次性

    计划任务

    • at

      • atd服务

        • yum -y install at #安装at
        • systemctl start atd #启动服务
        • systemctl status atd #查看服务状态
      • 用法

        • at 时间 -> 输入动作 -> ctrl+d结束
      • 时间格式

        • HH:MM #最近的一次时间点
        • HH:MM YY-MM-DD。日期还可写成:MMDDYY、MM/DD/YY、DD.MM.YY
        • now + 2minutes。支持minutes,hours,days,weeks
      • 查看

        • atq #等价于at -l
        • at -l #查看一次性计划任务
        • at -c 工作号 #查看计划任务详情
      • 删除任务

        • at -r/-d 工作号
        • atrm 工作号
        • 删除任务文件rm -rfv /var/spool/at/a***
    • batch

      • batch ->输入动作->ctrl+d结束
      • 不指定具体时间, 在系统负载较低(平均负载低于0.8)的时候执行

        查看平均负载:uptime/w/top/htop
    • 访问控制

      • 仅对普通用户有效

      • 系统文件

        • /etc/at.allow

          • touch /etc/at.allow
          • echo user >> /etc/at.allow
        • /etc/at.deny

          • echo user >> /etc/at.deny
      • 控制模式

        • 只有deny文件(默认):黑名单
        • 只有allow文件:白名单
        • 两者都存在:仅白名单生效
        • 两者都不存在:都不能使用
  • 周期性

    计划任务

    • crontab

      • 服务

        • 服务名称

          • crond
        • 配置文件

          • /etc/sysconfig/crond
      • 用法

        • crontab [选项]
        • 服务:crond
      • 选项

        • -e:编辑用户的计划任务
        • -l:列出用户的计划任务
        • -u:指定用户,默认root
        • -r:清空用户的计划任务(禁用)
      • 创建任务

        • crontab -e -u zhang

        • 任务格式

          • 分 时 日 月 周 命令

          • 特殊时间格式

            • @reboot #每次启动执行一次
            • @yearly:“0 0 1 1 *” #每年年头执行一次
            • @annually:“0 0 1 1 *” #同上
            • @monthly:“0 0 1 * *” #每月月头执行一次
            • @weekly:“0 0 * * 0” #每周开头执行一次
            • @daily:“0 0 * * *” #每天开头执行一次
            • @hourly:“0 * * * *” #每小时整点执行一次
          • 命令

            • 最好使用绝对路径:/usr/bin/touch
            • 命令中的%表示将%后面所有的内容作为标准输入交给命令处理



版权声明:本文为weixin_41973331原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。