IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 17-文件查找 -> 正文阅读

[系统运维]17-文件查找

1. locate

locate命令是查找数据库,输出和给定字符串匹配的各个路径名

# 查找以zip开头,所在目录以bin结尾的文件
locate bin/zip
# 可以和grep搭配使用
locate zip | grep bin # 包含zip的路径名中,查找bin所在的位置

slocate 和 mlocate是locate常见的两种变体,不过两者往往都是locate命令的软链接

ps:locate查找是根据数据库工作的,所以如果数据库没有及时更新,那么较新的文件是查找不到的,可以使用sudo updatedb更新数据库,通常守护进程cron也会定期执行这个命令(周期往往是一天执行一次)

2. find

locate是根据文件名来查找文件的,find可以根据 选项|测试条件|操作 来找出符合条件的文件

2.1 测试条件

-type c:查找指定类型c的文件

b块设备文件
c字符设备文件
d目录
f普通文件
l链接文件

-name pattern:根据文件名查找,往往和通配符一起使用,查找符合模式的文件

-size n:匹配大小为n的文件

ps:如果指定的是数值类型的参数,+和-表示法适用

+n,代表比指定数值大的文件;-n,代表比指定数值小的文件

另外:常用的计量单位字符如下

b512B块,默认单位
cB字节
w字(2B)
kKB(1024B)
MMB(1024KB)
GGB
# 在家目录下,查找普通文件,以.jpg结尾,大小>1M的文件
find ~ -type f -name "*.jpg" -size +1M

ps:-name后面的模式字符串往往和通配符搭配适用,但是shell有展开的规则,为了避免被展开,往往用单引号或者双引号标记,即用单引号或者双引号括起来

-iname patterm:和-name差不多,忽略大小写

-user name:匹配用户name的文件或目录

2.2 操作符

-and(缩写-a)操作符两侧的测试结果都为真,则匹配
-or(缩写-o)操作符两侧任意一侧为真,则匹配
-not(缩写!)操作符后的测试结果为假,则匹配
()控制逻辑求值的优先级以及组成更长的表达式,和平常运算里使用的括号意义一样
# 找出权限不是0600的文件 和 权限不是0700的目录
find ~ \(-type f -not -perm 0600\) -or \(-type d -perm 0700\)

为什么这里有转义字符?

对于shell来说括号具有特殊的意义,为了避免shell解释括号,所以在命令行中需要加入转义字符

2.3 预定义操作

-delete删除当前匹配的文件
-ls对匹配的文件执行ls -dils命令,结果输出至标准输出
-print默认操作,将查找结果的完整路径名输出到标准输出
-quit一旦匹配就退出
# 在家目录中的普通文件中找到以.bak结尾的文件,并删除
find ~ -type f -name "*.bak" -delete

注意:操作放到最后,因为find是从左到右执行的,如果我们把-delete放到命令的较左边,结果和我们本意可能会有差别

2.3.1 用户自定义操作

-exec commandname {} ; # 无提示的执行自定义操作
-ok commandname {} ; # 有提示的执行自定义操作,即需要用户输入y/n确定执行

其中{}所代表的是路径名,分号代表分隔符

find ~ -type f -name "foo*" -ok rm "{} ";"
# 假定我们家目录下有foo1、foo2、foo3三个以foo开头的文件,上述自定义操作执行的情况:
rm foo1;rm foo2;rm foo3;
# 也就是找到一个符合的文件,就会执行一次自定义操作

如上,为了提高效率,我们不想找到一个就执行一次操作,而是希望等所有符合的文件都找到了,然后执行一次命令,全部搞定,两种实现方式:

# 方式一:利用find本身的特性,将分号替换成加号+
find ~ -type f -name "foo*" -ok rm "{}" "+"
# 方式二:利用xargs命令实现
find ~ -type f -name "foo*" -print | xargs rm 

find命令的输出结果通过管道传递给xargs,后者构造出rm所需的参数列表

ps:处理特殊的文件名(包含空格的文件名)

类UNIX系统在命名文件名的时候允许空格,但是这给xargs这类程序识别文件名带来麻烦,因为xargs默认以空格作为分隔符,想要避免这类麻烦,就是让xargs以空字符作为分隔符(代替空格),可以通过 --null 选项 设置xargs通过空字符作为分隔符

同样,find命令也需要更改默认的分隔符(空格),指定空字符代替空格作为分隔符,可以使用-print0

find ~ -type f -name "foo*" -pirnt0 | xargs --null rm 

3. touch

touch 通常用于设置或更新文件的访问(access)、变更(change)、修改(modify)时间,如果文件名参数指定的文件不存在,则创建同名的文件

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 11:23:53  更:2022-02-04 11:25:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 7:01:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码