Linux运维与DevOps实战-实验7
一、find
# find 命令在目录层次下搜寻查找一个文件
# 并且会打印所找到文件的有关信息
# 语法
find [path...] [expression]
# 查找 /etc 目录下,文件大小大于 100k 的文件
$ sudo find /etc/ -size +100k
1. 文件名
常用通配符:
*: 匹配 0 个 或多个字符
?: 匹配任意 1 个字符
[string]:匹配 string 字符串中的任意一个字符,如 [abc] 匹配 abc 三个字符中的任意一个,[a-z0-9] 匹配小写字母和数字。
\ :移除特殊字符的特殊含义,转义
基础名称模式:
-name :指定名称
-iname :指定名称忽略大小写
全名模式:
-path :指定路径
-ipath : 指定路径忽略大小写
-wholename :功能同 -path 类似
-iwholename:功能同 -path 类似,忽略大小写
-regex:正则表达式
-iregex:正则表达式忽略大小写
# 查找 /usr 目录下以字母 r 开头, .txt 结尾的文件
$ find /usr -name "r*.txt"
# 使用 -iname 参数,不区分大小写
$ find /usr -iname "r*.txt"
# 查找当前目录下以 ter 开头 zsh 结尾的文件
$ find -name "ter*zsh"
# 在 bin 目录下,查找路径为 bin/python 的文件
$ cd /usr
$ find /usr/bin -path bin/python
$ find bin -path bin/python
2. 链接
-lname :匹配文件是否为一个符号链接
-ilname :匹配文件是否为一个符号链接忽略大小写
# /usr/bin/python文件就是一个符号链接
$ ls -l /usr/bin/python
# 查找 /usr/bin 目录下文件名包含 python3 的文件
$ find /usr/bin -name "*python3*"
# 查找 /usr/bin 目录下文件名包含 python3 的链接
$ find /usr/bin -lname "*python3*"
-samefile :寻找指定文件的硬链接
-inum n :寻找指定inode号的硬链接
-links n : 查找硬链接数为n的文件
$ touch file1
$ echo "test_hard_link" > file1
# 创建文件 file1 的硬链接 file2
$ ln file1 file2
# 创建文件 file1 的硬链接 file3
$ ln file1 file3
# 寻找file1 文件 inode 相同的硬链接
$ find -samefile file1
# 寻找 inode 等于159160的硬链接
$ find -inum 159160
# 匹配当前目录下硬链接数为 3 的文件
$ find -links 3
3. Time
-atime n: 寻找当前时间到n天前之间访问的文件
-ctime n: 寻找当前时间到n天前之间状态发生改变的文件
-mtime n: 寻找当前时间到n天前之间内容发生修改的文件
-amin n: 访问,细化至分钟
-cmin n: 状态改变,细化至分钟
-mmin n: 内容修改,细化至分钟
# 查找当前目录修改文件时间在 5 分钟 到 24 小时之间的文件
$ find -mtime 0 -mmin +5
4. Size
-size n[bckwMG]: n 代表数据参数b 代表块 block,c 代表字节,k 代表 1024 字节,即 kb,w 代表字符数量(2-byte 的字符),M 代表兆字节,G 代表千兆字节
# 查找当前目录下的大于 100k 的文件
$ find -size +100k
5. Type
-type c: c 代表数据类型d 目录 f 普通文件 l 符号链接(部分)
# 查找 /etc 目录下文件大于 30k 的普通文件
sudo find /etc -type f -size +30k
6. Owner
-user uname : uname 代表所属用户名
-group gname : gname 代表所属用户组
-uid n :n 代表uid
-gid n :n 代表gid
# 查找当前目录下所属用户为 shiyanlou 的文件
$ find -user shiyanlou
# 查找当前目录下所属用户为 root 的文件
# root 用户的 id 为 0
$ find -uid 0
7. File Mode Bits
-readable : 可读
-writable : 可写
-executable :可执行
# 查看当前用户对 /etc 目录文件名以 a 结尾,有可执行的权限的文件
$ find /etc -executable -name "*a"
8. Exec
用法
-exec 选项后面紧跟要执行的命令或脚本,然后是 {}、空格和 ;。
# 显示当前文件夹下所有普通文件的详细信息
$ find . -type f -exec ls -l {} \;
# 删除当前目录下修改时间在 14 天前的文件
$ find . -type f -mtime +14 -exec rm {} \;
# 删除当前目录下后缀为 log 的文件,删除前需要确认
$ find . -name '*.log' -ok rm {} \;
# 查找 /etc 目录下以 passwd 打头,并且内容包含 root 的文件
$ find /etc -name 'passwd*' -exec grep 'root' {} \;
二、locate
locate 命令其实是在一个保存有系统中所有文件名和目录名的数据库中去查找。而数据库中的内容并不是实时更新的,该数据库的更新操作可以使用 updatedb 命令来执行。也可以使用 --basename 参数,查找基础名称。
# 查找文件名中含有 /usr/bin/python 的文件
$ locate /usr/bin/python
# 查找基础名称中带有 shiyanlou 的文件
$ locate --basename shiyanlou
三、whereis
也是在一个保存有系统中所有文件名和目录名的数据库中去查找。不同的在于whereis 命令查找的是二进制文件,源,或者 man 手册的文件。
-f 定义搜索范围
-b 仅搜索二进制文件
-m 仅搜索 man 手册
-s 仅搜索源
# 搜索 python 相关的帮助手册
$ whereis -m python
四、which
which 命令一般用于查找 shell 命令的完整路径。该命令在环境变量PATH中列出的目录中搜索可执行文件或脚本进行匹配查找。
-a 代表列出所有匹配的查找结果
# 查找 python 可执行文件的路径
$ which python
五、gzip
gzip 命令用于对文件进行压缩,生成的压缩文件会以 .gz 结尾。而对应的解压缩的命令则是 gunzip。
用法:
$ gzip -v file
$ gunzip -v file
# 创建一个 file4 文件
# 使用gzip压缩
$ touch file4
$ gzip file4
$ ls
# 解压文件 file4
$ gunzip file4.gz
六、tar
tar 是用于创建文件档案的命令行工具,多用于备份文件。顾名思义,tar 命令可以将一系列的文件打包到一个大文件中,也可以将大文件解包以恢复数据。
用法:
tar [OPTION...] [FILE]
-c 或 --create :创建一个存档
-r :将文件附加到档案文件末尾
-z 或 --gzip :指定 gzip 格式
-v 或 --verbose :显示文件处理的详细过程
-f :指定档案文件名称
-x :还原档案文件
# 使用 tar 命令将file1 file2 file3 file4 归档到 test.tar
$ tar -cvf test.tar file1 file2 file3 file4
$ ls
# 删除四个文件,从 test.tar 恢复文件
$ rm file1 file2 file3 file4
$ ls
$ tar -xvf test.tar