1 文件查找
# find命令: 在linux系统中,按照我们的要求去查找文件
# 1.格式:
find [查询的路径] [匹配模式] [匹配规则] [匹配后的处理动作]
# 2.匹配模式:
-name:按文件名去匹配
-iname 忽略大小写
-type:按文件类型匹配
常见文件类型:
f:普通文件
d:普通文件夹
b:块设备文件
c: 字符设备文件
s:socket文件
l:链接文件
-perm :按文件权限匹配
-maxdepth :指定查找的目录深度
-user :按文件属主匹配
-nouser:查询没有属主的文件 # 即属主用户被删除了的文件
-group :按文件属组匹配
-nogroup:查询没有属组的文件
-size:按文件大小匹配
+ 查询超过n的文件
- 查询小于n的文件
# 貌似:还不能小数点 eg: +1.5K 报错
# 注: 大小单位 如果单位为b或不写单位,默认按照 512Byte(硬盘的一个扇区块)来搜索
eg: 2 或 2b,会查找出两个块扇区,意味着 512-1024之间的都会被查找
字节(b) : c
双字节(中文) : w
KB : k
MB : 大写的M
GB : 大写的G
-mtime:按文件的修改时间匹配 modify
-ctime:按文件的创建时间匹配 create
-atime:按文件的访问时间匹配 access
+ n 查询n天前的文件
- n 查询n天内的文件
-a:并且 # and 默认
-o:或者 # or
# 3.匹配规则 (结合正则匹配)
* : 匹配任意数量的任意字符(匹配零个或多个任意字符)
? : 匹配任意一个字符
# 4.处理动作
-exec: 非交互式的 处理 匹配到的内容 # <===> " | xargs -I "
-ok : 交互式的 处理 匹配到的内容
-print
-ls
-delete # <===> -exec rm -rf {} \;
# 补充:
# 常见的文件权限:
755:文件夹的默认权限
644:文件的默认权限
# 删除用户及用户组
删除用户 :userdel # -r 彻底删除
删除用户组 :groupdel
# 查看文件的各种时间
stat
查找案例
# 1.查询出/etc目录下的hosts文件
find /etc -name "hosts"
# 2.查询出/etc目录下的以ifcfg开头的文件
find /etc/ -name "ifcfg*"
# 3.查询出/etc目录下以.conf结尾的文件
find /etc/ -name "*.conf"
# 4.查询出/etc目录下,文件名中包含host的文件有哪些
find /etc/ -name "*host*"
# 5.查询出/etc目录下,所有的普通文件
find /etc/ -type f
# 6.查询出/etc目录下,所有的文件夹
find /etc/ -type d
# 7.查询出/dev/目录中的所有的块设备文件
find /dev/ -type b
# 8.查询出/dev目录中所有的字符设备文件
find /dev/ -type c
# 9.查询出/etc目录中文件名包含nginx的普通文件
find /etc/ -name "*nginx*" -type f
# 10.查询出/root目录下,权限为755的文件
find /root/ -perm 755
# 11.查询出属主为test01的文件
find /root/ -user test01
# 12.查询属主被删除了的文件
find /root/ -nouser
# 13.查询属组为test的文件
find /root/ -group test
# 14.查询属组被删除了的文件
find /root/ -nogroup
# 15.查询2天以前修改过的文件
find /root/ -mtime +2
# 16.查询2天以内创建的文件
find /root/ -ctime -2
# 17.查询2天以内访问过的文件
find /root/ -atime -2
# 18.查询大于1M的文件
find /root/ -size +1M
# 19.查询小于1M的文件
find /root/ -size -1M
# 20.查询在3天以内创建的文件,并删除 ***
find /tmp/ -ctime -3 -type f -exec rm -rf {} \;
-exec :处理查询之后的内容
{} :代表的是查询到的内容、
\; : 固定搭配
find /tmp/ -ctime -3 -type f | xargs -I {} rm -rf {}
# 21.将所有3天前创建的普通文件加上.bak后缀
find /tmp -ctime -3 -type f -exec mv {} {}.bak \;
find /tmp -ctime -3 -type f | xargs -I {} mv {} {}.bak
# 补充:
xargs :将所有内容格式化成一行
xargs -I {} :将所有内容格式化成一行,且放进{}中,其他命令就可以从{}中取出内容,进行命令执行
因为前一个命令执行的结果可能包含换行,
且将执行结果作为第二个命令参数传递时,命令就不能执行(有些命令执行时,参数不能有换行)
所以可以通过xargs将参数过滤,将换行换成空格
2 打包压缩
# 1 什么是打包压缩
打包指的是将多个文件和目录合并为一个特殊文件 然后将该特殊文件进行压缩 最终得到一个压缩包
# 2 为什么使用压缩包
1.减少占用的体积 2.加快网络的传输
# 3 Windows的压缩和Linux的有什么不同
windows: zip、rar(linux不支持)
linux : zip、tar、bzip2、gzip
# PS:
1.两个系统互通使用,选择 zip
2.压缩包的后缀不重要,但一定要携带 '.'
3.打包压缩通常用于备份文件,文件的名字必须见名知意 且应该带上时间、主机名之类
eg:
1.获取当前时间
date "+%Y_%m_%d_%H_%M_%S"
2.打包压缩
tar -zcvf 2023_06_28_etc_bak.tar.gz /etc/
3.两者合并
tar -zcvf ` date "+%Y_%m_%d_%H_%M_%S"`_etc_bak.tar.gz /etc/
压缩软件
1.gzip
# gzip
压缩软件,将文件做成一个压缩包,会删除原来的文件,生成一个新的压缩包文件
# 格式:
压缩:gzip [文件路径]
解压:gzip -d [压缩包路径]
# 缺点:
gzip不能压缩目录
2.bzip2
# bzip2
压缩软件,将文件做成一个压缩包,会删除原来的文件,生成一个新的压缩包文件
# 格式:
压缩:bzip2 [文件路径]
解压:bzip2 -d [压缩包路径]
# 缺点:
bzip2不能压缩目录
# 比较
gzip 比 bzip2压缩率更大
3.tar 常用
# tar
打包文件或目录,不会删除原文件,也不会压缩文件;
但可以跟 gzip 或 bzip2 共同使用,进行打包和压缩
# 格式:
tar [必要参数] [选择参数] [压缩包名称] [原文件或目录]
# 必要参数:
-f: 指定压缩包的名称 # filename
-c: 打包文件 # 小写 create
-z: 指定使用gzip压缩,一般使用gzip压缩的文件都以.tar.gz作为扩展名
-j: 指定使用bzip2压缩,一般使用bzip2压缩的文件都以.tar.bz2作为扩展名
-x: 解压,不需要指定压缩包的压缩类型,会自动匹配压缩包的类型自行解压
-v: 显示压缩包压缩或解压的过程 # view
-P: 文件名保留绝对路径,不移除文件名称前的"/"号 # 大写
# 若解压使用-P,表示解压到文件的原始路径中,若有系统文件,容易覆盖;不使用,表示解压到当前或指定目录
-t: 查看压缩包中的内容
# 注:参数共同使用时,f放在最后,紧跟压缩包名称
# 选择参数:
-C: 解压到指定目录 # 大写
# eg:
# 打包并压缩一个文件(使用gzip压缩) 记住常用 zcvf 或 jcvf、 xvf
tar -zcvf rumenz.tar.gz rumenz.txt
# tar.gz解压缩到/tmp目录
tar -xvf rumenz.tar.gz -C /tmp
# 列出压缩包里面的内容
tar -tf rumenz.tar.bz2
# 将/etc目录中的所有普通文件压缩成/tmp/etc.tar.gz文件
tar -czvPf /tmp/etc.tar.gz $(find /etc/ -type f | xargs)
# 补充: ***
$():相当于数学中的括号,优先看括号中的内容,再执行tar
4.zip 常用
压缩文件或文件夹
# 安装压缩与解压命令
yum -y install zip unzip
# 压缩
zip [选项] 压缩包名 源文件或源目录列表
-r 递归压缩
-m 将文件压缩之后,删除原始文件 # 相当于把文件移到压缩文件中
-v 显示详细的压缩过程信息
-q 静默输出,不显示过程
eg: zip -r etc.zip /etc
# 解压
unzip [参数] 压缩包名
-d 目录名 将压缩文件解压到指定目录下
-n 解压时,不覆盖已经存在的文件
-o 解压时,覆盖已经存在的文件,并且无需用户确认
-l 显示压缩包的列表信息
-v 查看压缩文件的详细信息,包括压缩包中的文件大小、文件名以及压缩比等,但是不解压
-t 检查压缩文件是否正确、完整,但并不解压
# eg:
zip -r tmp.zip /tmp
unzip tmp.zip
3 管道
用于传输数据,将管道前的命令执行结果,交给管道之后的命令进行处理
# 格式:
|
# xargs:把一些不支持从管道获取的命令,变得支持管道 ***
| xargs :将所有内容格式化成一行
| xargs -I {} :将所有内容格式化成一行,且放进{}中,其他命令就可以从{}中取出内容,进行命令执行
因为前一个命令执行的结果可能包含换行,
且将执行结果作为第二个命令参数传递时,命令就不能执行(有些命令执行时,参数不能有换行)
所以可以通过xargs将参数过滤,将换行换成空格
# 案例
# 1.删除/tmp目录下,一天以内创建的文件
find /tmp/ -ctime -1 -type f | xargs -I {} rm -rf {}
# 2.将etc中所有的普通文件,复制到/tmp目录中
find /etc/ -type f | xargs -I {} cp -r {} /tmp/