linux文件管理之查找
1 文件查找
1.1 which
查找可执行文件的路径
which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件
[root@www ~]# which [-a] command
选项或参数:
-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
例一:搜寻 ifconfig 这个指令的完整文件名
[root@MySQL-master tmp]# which -a ifconfig
/sbin/ifconfig
例二:用which查找which
[root@MySQL-master tmp]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
/usr/bin/which
# 竟然会有两个 which ,其中一个是 alias 这玩意儿呢!那是啥?别名
例三:请找出 cd 这个指令的完整文件名
[root@MySQL-master tmp]# which cd
/usr/bin/which: no cd in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/root/bin)
#cd是内部命令
1.2 locate
whereis
语法:
[root@redhat ~]# whereis [-bmsu] 文件或者目录名称
参数说明:
-b : 只找二进制文件
-m: 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 没有说明文档的文件
例一:请用不同的身份找出 ifconfig 这个档名
[root@MySQL-master tmp]# whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
[root@MySQL-master tmp]# su - john
[john@MySQL-master ~]$ whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
[john@MySQL-master ~]$ logout
# 注意看,明明 which 一般使用者找不到的 ifconfig 即可以用 whereis 找到!
# 这是因为系统真癿有 ifconfig 这个文件,但是使用者的 PATH 幵没有加入/sbin
例二:只找出跟 passwd 有关的『说明文件』档名(man page)
[root@MySQL-master tmp]# whereis -m passwd
passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
例三:只找出二进制文件
[root@MySQL-master tmp]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd
和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下时每天更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
locate
语法:
[root@redhat ~]# locate 文件或者目录名称
选项或参数:
-i :忽略大小写的差异;
-r :后面可接正则表示法的显示方式
例一:找出系统中所有passwd 相关的
[root@MySQL-master tmp]# locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/lib64/security/pam_passwdqc.so
/lib64/security/pam_unix_passwd.so
/usr/bin/gpasswd
/usr/bin/htpasswd
/usr/bin/kpasswd
/usr/bin/lppasswd
…
locate 寻找的数据是由『已建立的数据库 /var/lib/mlocate/』 里面的数据所搜寻到的,所以不用直接在去硬盘中存取数据,因此很快。
那能否手动更新数据库哪?当然可以啊!更新 locate 数据库地方法非常简单,直接输入 updatedb 就可以了! updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设定,然后再去硬盘里面迚行搜寻文件名的动作, 最后就更新整个数据库文件啰!因为 updatedb 会去搜寻硬盘,所以当你执行 updatedb 时,可能会等待数分钟癿时间喔!
1.3 find
语法:
[root@redhat ~]# find 路径 参数
参数说明:
时间查找参数:
-atime n :将n*24小时内存取过的的文件列出来
-ctime n :将n*24小时内改变、新增的文件或者目录列出来
-mtime n :将n*24小时内修改过的文件或者目录列出来
-newer file :把比file还要新的文件列出来
图中最右边为目前的时间,越往左边则代表越早之前的时间轴啦。
• +4代表大于等于5天前的档名: find /var -mtime +4
• -4代表小于等于4天内的文件档名:find /var -mtime -4
• 4则是代表4-5那一天的文件档名: find /var -mtime 4
例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
[root@MySQL-master tmp]# find ./ -mtime 0
# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前
例二:查找4天内改动过的内容
[root@MySQL-master tmp]# find ./ -mtime -4
#-mtime -n # 文件内容改变时间在N天以内
#-mtime +n # 文件内容改变时间在N+1天以前
#-mtime n # 文件内容改变时间在N到N+!那天
与使用者或组名有关参数:
-gid n :寻找群组ID为n的文件
-group name :寻找群组名称为name的文件
-uid n :寻找拥有者ID为n的文件
-user name :寻找用户者名称为name的文件
-nouser :寻找文件的拥有者不存在 /etc/passwd 的人!
-nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件!
当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这是可能的!在这个时候,就可以使用 -nouser 不 -nogroup 搜寻。
例三:搜寻 /home 底下属于john 的文件
[root@MySQL-master tmp]# find /home -user john
例四:搜寻系统中不属于任何人的文件
[root@MySQL-master tmp]# find / -nouser
-uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在
/etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。
-gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在
/etc/group,相关的介绍我们会第四篇说明~
-user name :name 为使用者帐号名称喔,也就是按照文件属主来查找文件。
-group name:name 为群组名称喔,按照文件所属的组来查找文件。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。
范例五:找出档名为 passwd 这个档案
[root@MySQL-master tmp]# find / -name passwd
/tmp/passwd
/usr/bin/passwd
/etc/passwd
/etc/pam.d/passwd
范例六:找出/Server/Scripts/所有脚本文件,即后缀为sh
[root@MySQL-master tmp]# find /Server/Scripts/ -type f -name "*.sh"
额外操作:
-exec command :command 为其他挃令,-exec 后面可再接额外的指令来处理搜寻到癿结果。
-print :将结果打印到屏幕上,这个动作是预设!
范例七:将上个范例(范例六)找到的档案使用 ls -l 列出来~
[root@MySQL-master tmp]# find /Server/Scripts/ -type f -name "*.sh" -exec ls -l {} \;
#{} 代表癿是『由 find 找到癿内容』,如上图所示,find 癿结果会被放置到 {} 位置中;
#-exec 一直到 \; 是关键词,代表 find 额外动作癿开始 (-exec) 到结束 (\;) ,在这中间的就是find 挃令内的额外劢作。 在本例中就是『 ls -l {} 』啰!
· 因为『 ; 』在 bash 环境下是有特殊意义的,因此利用反斜杠来脱义。
范例八:找出系统中,大于 1MB 癿档案
[root@MySQL-master tmp]# find / -size +1000k
上面exec可以使用xargs来替代
[root@MySQL-master tmp]# find /Server/Scripts/ -type f -name "*.sh" | xargs ls -l
那么他们有什么区别呢?
find . -name "*.txt" -exec rm {} \;
find . -name "*.txt" | xargs rm {}
-exec
1.参数是一个一个传递的,传递一个参数执行一次rm
2.文件名有空格等特殊字符也能处理
-xargs
1.一次将参数传给命令,可以使用-n控制参数个数
2.处理特殊文件名需要采用如下方式:
find . -name "*.txt" print0 |xargs -0 rm {}
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。
[root@MySQL-master tmp]# xargs --help
用法: xargs [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]
[-E eof-str] [-e[eof-str]] [--eof[=eof-str]]
[-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]
[-I replace-str] [-i[replace-str]] [--replace[=replace-str]]
[-n max-args] [--max-args=max-args]
[-s max-chars] [--max-chars=max-chars]
[-P max-procs] [--max-procs=max-procs] [--show-limits]
[--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]
[--version] [--help] [command [initial-arguments]]
xargs常用场景:
1、假如你有一个文件包含了很多你希望下载的URL, 你能够使用xargs 下载所有链接
# cat list.txt | xargs wget –c
2、查找所有的jpg文件并压缩
# find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
3、一个文件夹下文件太多,使用rm删除就会出现/bin/rm: Argument list too long错误,当然使用别的命令也是一样的错误,像ls,chmod等。
解决方法:
方法1:
ls | xargs -n 10 rm -fr ls
方法2:
find . -maxdepth 1 -name "*.sh" -type f -exec rm -f {} \;
linux文件管理之查找的更多相关文章
- Linux文件管理和编辑常用命令
Linux文件管理和编辑常用命令 mkdir 命令 功能说明 mkdir 命令用于创建一个目录,mkdir是make directory的缩写 格式: mkdir [选项] 目录名 mkdir 命令的 ...
- day58:Linux:BashShell&linux文件管理&linux文件下载上传
目录 1.BashShell 2.Linux文件管理 3.Linux文件下载和上传 BashShell 1.什么是BeshShell? 命令的解释,用来翻译用户输入的指令 2.BashShell能做什 ...
- Linux文件管理相关命令
Linux文件管理相关命令 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在了解了Linux文件管理背景知识之后, 我们可以 ...
- Linux下如何查找可执行文件
Linux下的可执行文件 Linux下如何查找可执行文件,作为一个Linux小菜刚刚有了这个问题, 在windows中,可以通过后缀名判断是否是可执行文件,比如.exe,.bat等是可执行文件,但是在 ...
- 在linux/unix中查找大文件
在linux/unix中查找大文件,如查找大于100M文件的位置路径,查找等于10M文件的位置路径等等,下面就介绍几个实现快速查找的命令: 1. 查找指定目录下所有大于100M的文件,命令为 find ...
- Linux按照时间查找文件
linux按照时间查找文件 需要用到一个根据最后修改时间来处理的脚本. 前面有个有关find的基本用法,根据文件大小,类型什么的,这个是关于时间的. linux 文件的三种时间(以 find 为例) ...
- Linux文件管理上
Linux文件管理 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 对于计算机来说,所谓的数据就是0和1的序列.这样的一个序列 ...
- linux 两个查找工具 locate,find详解
linux 中有很多查找工具,今天主要讲解locate,find两个工具. 1.locate (1)查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 注意:如果这 ...
- 3种方法来在Linux电脑上查找文件
如果你不太了解Linux命令,那么在Linux系统里查找文件是比较困难的.只要使用多种不同的终端命令,可以很快地找到文件.Linux命令比其它操作系统的搜索功能更加强大,掌握这些命令就能你完全控制这些 ...
随机推荐
- aop的使用
最近考虑需要记录客户对项目的操作日志. 如果在每一个客户都有可能操作的类增加日志对象,改动量太大,同时如果有新的功能增加,又要在新的功能上增加日志操作. 因此考虑后决定采用spring的aop功能. ...
- Oracle使用——oracle表锁住,杀掉锁表进程
背景 在操作Oracle时,多人同时操作oracle数据库的同一张表的时候,经常会造成锁表现象,这时需要手动进行解锁. 步骤 以dba身份登录Oracle数据库(否则用户缺少杀掉进程权限,需要给用户分 ...
- Python3 tkinter基础 Listbox Scrollbar 创建垂直滚动条
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3基础 dict clear 清空一个字典
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- shell编程(三)之条件判断(if语句)
练习:写一个脚本判断当前系统上是否有用户的默认shell为bash: 如果有,就显示有多少个这类用户:否则,就显示没有这类用户: #!/bin/bash # grep '\<bash$' /et ...
- 【原理、注意点】Quartz的原理和需要注意的地方
基本介绍和核心接口 1.quartz是完全基于java的可用于进行定时任务调度的开源框架,使用的时候需要引入: <dependency> <groupId>org.quartz ...
- 【Spring Security】三、自定义数据库实现对用户信息和权限信息的管理
一 自定义表结构 这里还是用的mysql数据库,所以pom.xml文件都不用修改.这里只要新建三张表即可,user表.role表.user_role表.其中user用户表,role角色表为保存用户权限 ...
- LuoguP2161 [SHOI2009]会场预约
题目地址 题目链接 题解 用fhqtreap对区间进行维护. 可以注意到的是,对于当前存在的预约,他们一定是升序排列的(有重叠的都被删了). 那么就可以用按照位置分裂的fhqtreap搞了(预约无论按 ...
- (转) 机器学习很有趣Part6:怎样使用深度学习进行语音识别
本文转自:http://www.jiqizhixin.com/article/2321 机器学习很有趣Part6:怎样使用深度学习进行语音识别 2017-02-19 13:20:47 机器学习 ...
- Hadoop之mapreduce
doc Hadoop初探之Stream Hadoop Stream 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 用python + ...