Linux 查找文件的正确方式
Linux 系统中查找文件的命令有 which
、whereis
、locate
和 find
等,本文对这四条命令进行简单的介绍、列举了一些简单的使用方式。
which
在 PATH 变量中定义的全部路径中查找可执行文件或脚本。
which
命令有两个重要参数:
-all, -a
默认情况下,which
命令会在匹配到第一个结果后结束运行,添加该参数可以让其搜索所有路径。-read-alias, -i
将输入视为别名搜索。Linux 系统中通常会使用 alias 设置诸多别名来简写命令,例如 Centos 中的ll
实际是ls -l
,而which
是alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde
。# Centos
# 以绝对路径调用 which,这样就不会受到 Centos 默认的几个参数影响
# 返回结果说明找不到 ll 命令
$ /usr/bin/which ll
/usr/bin/which: no ll in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) # 直接输入 which 时实际效果为带有“默认参数”的
# 返回结果说明 ll 是 ls -l 的别名,
$ which ll
alias ll='ls -l --color=auto'
/usr/bin/ls
which ll
相当于alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde ll
,返回结果第一行是 alias 输出的ll
别名设置情况,第二行则是ls
的实际位置。
which
的其他几个参数如下:
--tty-only
:尽在终端调用的情况下附带右侧添加的参数,其他情况下不接收右侧其他参数(此处的参数值--show-dot
、--show-tilde
此类,输入的待查询命令仍然会接收),通过这个命令可以保证 Shell 脚本中的which
命令正确执行。--show-dot
:输出以 "." 符号开头的目录。Linux 中 "." 符号开头的目录是约定的隐藏文件夹,没有该参数时会忽略这些目录。--show-tilde
:将用户家目录替换成 "~" 符号输出。Linux 中 "~" 符号是登录用户家目录的缩写,如果登录用户名为 cncsl,则 "~" 指 "/home/cncsl" 目录。当使用 root 账号登录时该参数无效。
whereis
查找指定命令的可执行文件、源代码和手册的位置。
$ whereis vim
vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
可以看出,vim
的可执行程序位于 /usr/bin/vim
,手册位于 /usr/share/vim
和 /share/man/man1/vim.1.gz
目录。
-b
、-m
和-s
分别用于指定仅查询可执行文件、手册和源代码。-B
、-M
和-S
命令用于指定查询路径。-u
参数的描述直译为 仅查询有异常情况的命令。所谓的异常情况是指,某个命令的相关类型文件不止恰好一份(一份都没有或多于一份)。例如:ls
命令具有两份手册:$ whereis -m -u ls
ls: /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
Linux 系统中有很多个与 python 相关的可执行文件:
$ whereis -b -u python
python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7
locate
在文档和目录名称的数据库中查找指定文件。Linux 系统会定期自动扫描磁盘来维护一个记录磁盘数据的数据库,而 locate
命令使用的数据库是 /var/lib/mlocate/mlocate.db。
$ ls -hl /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 2.7M Feb 4 03:42 /var/lib/mlocate/mlocate.db
可以看出当前 mlocate.db 文件共记录了 2.7M 的数据。
--count, -c
:不输出具体的文件路径信息,仅输出查询到的数量。--ignore-case, -i
:查询时忽略大小写--limit, -l, -n LIMIT
:限定输出的文件数量为 LIMIT--regexp,-r REGEXP
:使用 REGEXP 指定的正则表达式匹配。
# 统计有多少PNG格式的图像文件
$ locate -c png
# 统计有多少 readme 文件(根据编写者的习惯,readme 文件可能名为 README、ReadMe等)
$ locate -c -i readme
# 输出十个 .gz 归档文件的路径
$ locate -l 10 *.gz
# 查看 tomcat 2021年1月的日志
$ locate -r tomcat.2021-01-[0-3][0-9].log
由于 locate
命令是从数据库查找文件,新创建的文件可能由于未被记录到数据库中而无法查询到,这种时候需要使用 updatedb
命令手动更新数据库。
find
在一个目录层级中查找文件。
find
命令功能强大,可根据多种条件查询文件,随后进行自定义的操作,格式如下:
find [path...] [expression]
查询当前目录下所有的 markdown 文档:
$ find . -name "*.log"
查询用户视频文件夹中大于 100M 的文件:
$ find ~/Videos/ -size +100M
查询用户音乐文件夹中过去七天访问过的文件:
$ find ~/Music/ -atime -7
查询系统中、三个月之前创建的、一个月之内没有访问过、大于 30M 的日志文件,并删除:
find / -ctime +90 -atime +30 -size +1M -name "*.log" -delete
find
会实际的扫描磁盘,所以速度会明显小于前三个。
Linux 查找文件的正确方式的更多相关文章
- Linux - 删除文件的正确方式
mv <file> /tmp/ cp <file> /opt/file.bak rm
- [转帖]Linux查找文件6个高效工具
Linux查找文件6个高效工具 https://www.linuxrumen.com/rmxx/176.html 需要实操 -inname -type 等等. 1. 前言 我们使用Linux过程中,经 ...
- [转] Linux 查找文件内容
Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件g ...
- Linux 查找文件
find 查找目录 -name "文件名"find / -name "php.ini"locate 文件名locate php.ini 一:locate命令 l ...
- Linux 查找文件内容、替换
有的时候我们经常性的需要在 linux 某一个目录下查找那些文件里包含我们需要查找的字符,那么这个时候就可以使用一些命令来查找,比如说 grep 1.grep 查询 1.1. 主要参数 [option ...
- windows与linux之间文件的传输方式总结(转)
当然,windows与linux之间文件的传输的两种方式有很多,这里就仅仅列出工作中遇到的,作为笔记: 方法一:安装SSH Secure Shell Client客户端 安装即可登录直接拖拉到linu ...
- Linux 查找文件命令 find whereis locate
Linux 有三个查找文件的命令:find, whereis, locate 其中find 不常用,whereis与locate经常使用,因为find命令速度较慢,因为whereis与locate是利 ...
- linux查找文件夹下的全部文件里是否含有某个字符串
查找文件夹下的全部文件里是否含有某个字符串 find .|xargs grep -ri "IBM" 查找文件夹下的全部文件里是否含有某个字符串,而且仅仅打印出文件名称 fin ...
- Linux查找文件夹下包含某字符的所有文件
Linux grep 命令用于查找文件里符合条件的字符串.grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示 ...
随机推荐
- kubectl常用命令(个人记录)
一.获取pod信息 1.获取当前集群运行的所有的pods的信息 kubectl get pod 2.获取当前集群运行的所有的pod运行在哪个节点 kubectl get pods -owide ...
- day116:MoFang:显示背包解锁/未解锁格子数&显示背包的道具物品&背包解锁
目录 1.显示背包的已解锁/未解锁格子数 2.显示背包中的道具物品 3.用户购买道具的时候,判断背包存储是否达到上限 4.道具也可以使用积分购买 5.在商城界面根据金额/积分显示不同商品 6.背包解锁 ...
- redhat_快捷键和shell命令操作.md
tab键 命令自动补全 history !n 执行历史记录第n条 !! 执行上一条命令 !l 最后一条以l开头的命令 alias 创建命令的别名 alias 命令别名 = "命令行" ...
- js 必须为字母或下划线, 一旦创建不能修改
<div class="form-group"> <label class="col-lg-2 control-label" for=&quo ...
- (十五)xml模块
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要 ...
- 【Web】实现动态文章列表
简单记录 -慕课网- 步骤二:动态文章列表效果 实现这个 一个网页中常见的文章列表效果. 怎么实现文章列表案例 分解一波,CSS来改变样式 标题标签 HTML的无序列表 去掉项目符号 符号所占空间 列 ...
- 【Linux】将ens33修改为eth0 网卡方法
1.编辑 grub 配置文件 vim /etc/sysconfig/grub # 其实是/etc/default/grub的软连接 # 为GRUB_CMDLINE_LINUX变量增加2个参数,添加的内 ...
- 【Linux】zabbix4.0服务器搭建,agent搭建,及邮件使用方法
zabbix默认的 服务端监听端口为10051,而被监控端即Zabbix--agents代理程序监控10050端口. 更新yum源: yum clean all yum makecache 需要配置网 ...
- kubernets之Deployment资源
一 声明式的升级应用 1.1 回顾一下kubernets集群里面部署一个应用的形态应该是什么样子的,通过一副简单的图来描述一下 通过RC或者RS里面的模板创建了三个pod,之后通过一个servci ...
- 安装newman error:package exports for 'c:\nmp\node_modules\newman\node_module 解决办法
一.场景描述: 通过npm安装newman时,一直失败. 尝试了很多安装命令: npm install -g newman npm install -g newman --registry=http: ...