Linux下的文件查找类命令(转载)
如何快速有效的定位文件系统内所需要查找的文件呢?Linux为我们提供了一些文件查找类的命令,我们需要掌握以下几个命令:
http://blog.csdn.net/sailor201211/article/details/53290470
which
命令which会依照用户的PATH环境变量查找一个外部命令对应的可执行文件的路径。如:
$ which gcc
/usr/bin/gcc
whereis
和which命令相比,whereis命令则可以定位一个外部命令的二进制文件、源代码文件及用户手册文档。如:
$ whereis gcc
gcc: /usr/bin/gcc /usr/lib/gcc /usr/bin/X11/gcc /usr/share/man/man1/gcc.1.gz
locate
上述两条命令(which和whereis)仅用于查找安装到系统内的外部命令所对应的文件,而对于一般的用户文件如个人的文档、照片等则无能为力。此时可以用locate命令帮助我们快速定位任意类型的文件。如:
$ locate CentOS-6.5-x86_64-bin-DVD1.iso
/home/sailor-m/CentOS-6.5-x86_64-bin-DVD1.iso
/home/sailor-m/VirtualBox VMs/CentOS-6.5-x86_64-bin-DVD1.iso
命令locate查找文件并非遍历整个文件系统,而是从系统内已存在的一个文件信息数据库/var/lib/mlocate/mlocate.db中查找的,所以查询速度极快。如RHEL6之类的发行版一般在计划任务中安排每日定时更新该数据库。不过,如果是用户刚刚建立的文件,用locate命令是查找不到的。如:
$ touch ~/mystuff
$ locate mystuff
此时如果用updatedb命令手动更新该数据库,就可以查询到了:
$ sudo updatedb
$ locate mystuff
/home/sailor-m/mystuff
find
文件查找类命令中使用最频繁并且功能最强大的当属find了,它可以在目录树中查找任意类型文件,并可以设置多种搜索条件。命令find对文件的查找是实时搜索,因为要遍历文件系统的目录树,所以速度较慢。该命令的语法格式为:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]
其中-H、-L和-P三个选项是用于处理符号链接的;-D debugoptions用于诊断和调试;[-Olevel]用于查询的优化。这几个选项其实并不常用,具体用法可以参阅man手册。所以find的常用形式可以简化为:
find [path…] [expression]
- path:find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录
- expression:expression可以分为——“-options [-print -exec -ok …]”
- -options,find命令的常用选项,一般为指定查找条件,下面举例介绍
- -print,将匹配的文件输出到标准输出
- -exec,对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } \;,注意{ }和\;之间的空格
- -ok,和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
也有人将find命令的结构总结为:
find [目录] [条件] [动作]
下面举几个find查找的例子:
(1)-name 按文件名查找
如查找/etc目录下文件名以.conf结尾的文件:
$ find /etc/ -name "*.conf"
- 1
- 1
(2)-user & -group 按文件的属主或属组查找
如查找当前目录下用户属主为sailor的文件:
$ find ./ -user sailor
- 1
- 1
当查找目录为当前目录时,./也可以省略。
(3)-type 查找某一类型的文件,诸如:
- b 块设备文件。
- d 目录。
- c 字符设备文件。
- p 管道文件。
- l 符号链接文件。
- f 普通文件。
如查找/etc目录下的所有子目录:
# find /etc/ -type d
- 1
- 1
(4)-size 按照文件的大小来查找
-size后面可以跟一个表示大小的单位,如k、M或者G;还可以跟一个-或者+号,表示小于或者大于。下面这条命令查找/tmp目录下零字节大小的文件,并列出其详细信息:
# find /tmp -size 0 -exec ls -l {} \;
- 1
- 1
查找/tmp目录下大于1G的文件并把它们删除:
# find /tmp -size +1G -exec rm {} \;
- 1
- 1
上述两条命令的效果等价于:
# ls -l `find /tmp -size 0`
# rm `find /tmp -size +1G`
- 1
- 2
- 1
- 2
(5)-mtime & -ctime & -atime 按时间来查找
其中mtime是文件的修改时间,即文件内容被修改的时间;ctime是文件属性被改变的时间;atime是文件访问时间。该选项后面可以跟数字”N”或+N”或”-N”,分别表示条件为距离今天恰好N天,或者超过N天,或者不到N天。
如查找7日内没有被访问过的文件,并将其删除:
$ find ./ -atime +7 -exec rm {} \;
- 1
- 1
(6)-perm 按照文件的权限来查找
查找当前目录下权限为0777的文件:
$ find ./ -perm 0777
- 1
- 1
权限数字前面还可以有一个-号,表示至少满足某权限。如查找当前目录下至少同组用户可写的普通文件:
$ find ./ -type f -perm -020
- 1
- 1
(7)-maxdepth 指定查找深度
后面可以跟一个数字N表示最多进入N-1级子目录进行查找。如仅在/etc目录(不包含其子目录)下查找文件名以“.conf”结尾的文件:
# find /etc/ -name "*.conf" -maxdepth 1
- 1
- 1
文件查找命令find还有许多其他有用的选项,如-nouser和-nogroup分别可以查找无有效属主和属组的文件。查看find的man page可以看到几十屏的文档,可见其功能强大,我们只有熟练掌握其常用的用法,其余的在使用中慢慢体会摸索即可。
Linux下的文件查找类命令(转载)的更多相关文章
- Linux下的文件夹创建命令使用实践
[文章摘要] 本文以实际的C源程序为样例,介绍了Linux下的文件夹创建命令(mkdir)的用法.为相关开发工作的开展提供了故意的參考. [关键词] C语言 Linux 文件夹创建 makefi ...
- Linux下的文件查找命令——find
Linux下几个常见的文件查找命令: which 查看可执行文件的位置 whereis 寻找特定文件,查看文件的位置 locate 配合数据库查看文件位置 find ...
- Linux下查看文件内容的命令
查看文件内容的命令: cat 由第一行开始显示内容,并将所有内容输出 tac 从最后一行倒序显示内容,并将所有内容输出 more 根据窗口大小,一页一页的现实文件内容 less ...
- linux下core文件调试方法(转载)
转自于:http://blog.csdn.net/fcryuuhou/article/details/8507775 在程序遇到段错误不寻常退出时,一般是访问内存出错.但是不会给出程序哪里出现的问题, ...
- linux下删除文件夹的命令
使用rm -rf 目录名字 命令即可 -r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 eg 删除文件夹实例:rm -rf /var/log/httpd/acc ...
- Linux下查看文件内容的命令和工具
1.catcat命令主要用来查看文件内容,创建文件,合并文件,追加文件等. 1.1.查看文件 格式:cat 文件名称 说明:这条命令会把文件内容全部输出到显示屏上. cat -n 文件名称:查看文件内 ...
- linux下的文件解压命令
说一下tar命令的参数含义:z,使用gzip解压,x:extract解压,v:显示详细信息,f:使用归档在当前文件夹. 在解压时出现了解压失败,原因是没有sudo,无法创建文件夹.
- linux下常用文件传输命令 (转)
因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...
- linux文件查找find命令
linux文件查找find命令 1.文件查找 基本介绍 在文件系统上查找符合条件的文件 linux上常见的文件查找工具:find命令 查找分类 实时查找 精确查找 基本语法 find [option ...
随机推荐
- libsvm java 调用说明
libsvm是著名的SVM开源组件,目前有JAVA.C/C++,.NET 等多个版本,本人使用的是2.9libsvm命名空间下主要使用类:svm_model 为模型类,通过训练或加载训练好的模型文件获 ...
- java反射--注解的定义与运用以及权限拦截
自定义注解类编写的一些规则: 1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是 ...
- @SuppressWarnings(unchecked)作用解释
解释一: 屏蔽某些编译时的警告信息 在强制类型转换的时候编译器会给出警告 加上 程序代码 @SuppressWarnings("unchecked") 就不会警告了 解释二: 注释 ...
- 基于live555的视频直播 DM368IPNC RTSP分析
因需要,从个人的理解顺序和需求角度对live555的分析与开发整理,包含RTSP Server与RTSP Client.如何直播H.264流与JPEG流等,均进行了探讨,对live555的初学者有一定 ...
- Windows下Hadoop的环境安装[转]
1.下载并安装Cygwin,记得cygwin安装中要把SSH选择上,因为后面Hadoop会用到,不详述cygwin的安装过程.我是安装在D:\cygwin下 2.配置系统环境变量 在windows命令 ...
- TortoiseGit和msysGit安装及使用笔记(windows下使用上传数据到GitHub)[转]
TortoiseGit和msysGit安装及使用笔记(windows下使用上传数据到GitHub) Git-1.7.11-preview+GitExtensions244SetupComplete+T ...
- 使用spring @Scheduled注解运行定时任务、
曾经框架使用quartz框架运行定时调度问题. 老大说这配置太麻烦.每一个调度都须要多加在spring的配置中. 能不能降低配置的量从而提高开发效率. 近期看了看spring的 scheduled的使 ...
- Linux命令之必杀绝技Vi文本编辑的使用
vi 文本编辑器 语法:vi [参数] 文件 进入vi全屏幕编辑画面 按字母i进入[输入模式],按[ESC]转到命令行, 输入 :q可不保存退出vi :wq存盘退出vi :q!不存盘强制退出 :w ...
- (转) C# Activator.CreateInstance()方法使用
C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.CreateInstance (Type) 2. Activator.CreateInstance (Type, Objec ...
- 强大的微软Microsoft Translator翻译接口
一.前言 当我们需要对日文.韩文等语言转换中文字符的时候,就用到了微软提供的翻译接口. 二.实现流程 1.首先注册一个账号 https://datamarket.azure.com/account 2 ...