文件管理
文件介绍
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
-
[root@zqs ~]# getfacl /root/file_a
-
-
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
ds
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
-
用法
- sort [选项]… [文件]…
-
对文件内容进行排序,默认按单个字符ASCII码升序(从小到大)
-
选项
- -n:按数值排序
- -r:逆序(从大到小)
- -t:定义列的分隔符(默认空格或制表符)
- -k:指定排序的列号
-
示例
- 按uid值从大到小打印/etc/passwd:sort -nr -t : -k 3 /etc/passwd
-
-
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
- 命令中的%表示将%后面所有的内容作为标准输入交给命令处理
-
-
-
-
-
-