沈阳企业网站排名优化,互联网o2o是什么意思,做室内设计的网站有哪些方面,男性专科正规医院linux下文件查找命令用法总结。前言我们经常需要在linux系统中查找一个文件#xff0c;或需要知道哪些文件包含已知的特有信息#xff0c;便于快速对比排查、分析问题#xff0c;那么如何准确高效查找呢#xff1f;其实在linux下可查找文件的命令不止一个#xff0c;命令附… linux下文件查找命令用法总结。前言我们经常需要在linux系统中查找一个文件或需要知道哪些文件包含已知的特有信息便于快速对比排查、分析问题那么如何准确高效查找呢其实在linux下可查找文件的命令不止一个命令附带的用法也不止一个有些组合功能真的很强大尤其是find命令。如果你目前查找文件使用最多的命令仅是 find ./ -name test那这篇最全最详也许没有之一的文章绝对值得一读必有收获。建议关注 并 星标 公众号 嵌入式er笔记 后续干货可以及时看到。阅前Tipslinux下一切皆文件* 表示通配任意字符及组合? 表示通配任意的单个字符[] 表示通配括号[]里面的任意一个字符 注意是英文字符的引号一定不要搞错命令行、表格文本屏幕宽度所限可能看不全右滑即可1. find命令find命令尝个鲜如: find ./ -name *.doc -a -user kobe意为查找用户kobe在当前目录下的所有.doc文件再如 find ./ -name *.doc -type f -a -user kobe -exec grep -ri mvp {} \; -print相信认真读完这篇文章理解这条查找语句就不在话下了。find命令格式find命令一般格式 find path -option -printfind命令结合-exec/-ok使用格式 find path -option [-exec/-ok command {} \; ] [-print]find命令结合xargs使用格式 find path -option [-print] [|xargs command]find命令详细格式参数 说明/实例path 要查找的目录/路径多个路径可以空格隔开“~”在$HOME目录查找如 find ~ -name “test”有时为了排查不同的$HOME目录配置差异会用到“/”在系统根目录查找如 find / -name “test”系统根目录为基准文件和目录众多肯定是非常慢的不常用“.”或“’./’”在当前目录查找如 find ./ -name “test”平常使用应该最多当前目录寻找文件或者目录是常有之事同时多个路径/目录一起查找如 find /usr /home /etc -name kobe在/usr /home /etc查找所有以kobe命名的文件-option -option 可以是以下(1)(2)(3)……(1)指定文件名指定文件名称查找可以结合通配符更好的使用-iname如 find ./ -iname “*linux.doc”在当前目录查找以“linux.doc”结尾的文件文件名不区分大小写-name如 find ./ -name “*linux.doc”在当前目录查找以“linux.doc”结尾的文件文件名区分大小写如 find ./ -name “[A-Z]*”在当前目录及子目录中查找文件名以一个大写字母开头的文件如 find ./ -name “[a-z]*[0-9].doc”在当前目录查找文件名以一个小写字母开头最后是0到9命名的.doc的文件如 find ./ -name “A?a.doc”在当前目录查找文件名以一个大写字母A开头中间是任意一个字符最后以一个小写字母a结尾的.doc文件也就是.doc文件名称只有三个字符前后两个限定为A和a中间一个随意(2)指定用户及组结合用户及组查找-user根据属主来查找文件如 find ./ -user kobe查找文件所属用户为 kobe 的所有文件-group根据属组来查找文件如 find ./ -group kobe查找文件所属组为 kobe 的所有文件-nouser如 find ./ -type f -nouser查询没有所属用户的文件查找文件的拥有者不在/etc/passwd中-nogroup如 find ./ -type f -nogroup查询没有所属组的文件查找文件的用户组不在/etc/group中(3)指定文件类型结合/指定文件类型查找-type f查找普通类型文件如 find ./ -type f -name ‘*test’查找名字包含test的文件-type d查找目录directory类型文件(一切皆文件目录本身也是一种文件)如 find ./ -type d -name ‘*test’查找名字包含test的目录-type c查找字符设备文件如 find ./ -type c -name ‘*test’查找名字包含test的字符设备文件-type b查找块设备文件如 find ./ -type b -name ‘*test’查找当前名字包含test的块设备文件-type l查找链接文件如 find ./ -type l -name ‘*test’查找名字包含test的链接文件-type p查找管道文件如 find ./ -type p -name ‘*test’查找名字包含test的管道文件(4)指定大小根据文件大小查询数字n后面如果跟 c 表示以bytes为单位还可以跟MG等-size -n查找小于 大小为 n 的文件如 find ./ -size -1024M查找小于1024M的文件-size n查找大于 大小为 n的文件如 find ./ -size 1024M查找大于1024M的文件(5)指定时间根据时间查询按天查询可以是-ctime或-atime或-mtime这里以-mtime为例mtime文件内容被修改的最后时间atime文件中的数据库最后被访问的时间ctime文件的元数据发生变化比如权限所有者等-mtime -n查询在n天以内被修改过的文件如 find ./ -name “test” -mtime -20 find ./ -mtime -2 -a -name ‘test*’-mtime n查询在n天以外被修改过的文件如 find ./ -name “test” -mtime 2-mtime n查询正好在n天(一天之内)被修改过的文件如 find ./ -name “test” -mtime 2按分钟查询可以是-cmin或-amin或-mmin含义可类比按天查询这里以-mmin为例-mmin -n查询在n分钟以内修改过的文件如 find ./ -mmin -20 -type d查找在20分钟以内修改过的目录-mmin n查询在n分钟之前修改过的文件如find ./ -mmin 20 -type d查找在20分钟以前修改过的目录(6)指定权限-perm根据权限查找文件-perm mode查找文件权限刚好符合mode的文件如 find ./ -perm 666查找文件属主和组及其他用户权限都为可读可写的文件还可以搭配-mode 或mode用但我觉得太绕了学习和记忆成本太大对于开发人员平时使用来说采用-perm mode方式查找直接正常也就足够了(7)指定路径注意这里的路径是-option是固定的关键字搭配方便更精确的查找对应路径文件-path 查找路径名称符合 p 的文件注意p需引号引起来如 find ./ -path “*git*/config”查找所有git路径下的config文件-ipath 用法同上区别就是-ipath 路径不区分大小写即大写路径、小写路径都查找-prune通常和 -path 一起使用用于将特定目录排除在搜索条件之外过滤条件写在其他条件前面如 find ./mywork -path “./mywork/kobe” -prune -o -type f意为在mywork目录下查找不在kobe子目录内的所有普通文件所以-prune可以帮助我们避开某个目录然后进行查找如 find ./mywork \( -path ./mywork/kobe -o -path ./mywork/james \) -prune -o -type f意为在mywork目录下查找不在(kobe或james)子目录内的所有普通文件所以通过-prune也可以帮助我们避开多个目录然后进行查找说明命令中( )作用是表达式的结合; \作用是告诉 shell 不要对其后挨着的括号字符作特殊解释留着本意给 find 命令去使用必须要记得用”\”来转义如 find ./mywork \( -path ./mywork/kobe -o -path ./mywork/james \) -prune -o -iname “*mvp” -print避开以上多个目录查找名称以mvp结尾的文件不区分大小写(8)指定查找逻辑支持 与 、或、非 查找默认啥都不带的情况下查询条件之间都是 与 的关系-a与查找连接的两个条件必须同时满足的文件如 find ./ -name “*.doc” -a -user kobe查找用户kobe在当前目录下的所有.doc文件-o或查找连接的两个条件满足其一即可的文件如 find ./ -nogroup -o -nouser查找没有属主或者没有属组的文件系统安全考虑可能需要在特定路径下经常这样查找review看下没有归属的可疑文件及时排查风险再如上面搭配-prune使用的例子find ./mywork -path “./mywork/kobe” -prune -o -type f在mywork目录下查找不在kobe子目录内的所有普通文件再如上面搭配-prune使用的例子find ./mywork -path “./mywork/kobe” -prune -o -type f是按从左到右顺序查找求值-o的作用就是保证在排除kobe子目录后能继续查找列出其他满足-type f的文件-not 或 !非查找排除了紧跟连接条件的文件如 find ./ -type f ! -path “*/.git/*”查找当前目录(除了git文件夹)下所有的普通类型文件其他参数-print 将结果输出到标准输出-exec {} \; 对匹配的文件执行该参数所给出的shell命令cmd形式为 cmd{} \;注意 {} 与 \; 之间有空格 因为”;” 在部分shell环境下是有特殊意义所以必须要记得用”\”来转义-ok {} \; 与-exec作用相同区别在于-ok在执行命令之前都会给出提示让用户确认是否执行| xargs 通过管道命令 | 将左侧命令的标准输出转换为标准输入提供给右侧 xargs而xargs的作用就是将传递过来的标准输入转为cmd参数使用cmd可以是grep、ls、rm等等shell可以解析的命令结合参数| xargs、-exec、-ok、-print 使用举栗find 和 |xargs组合使用比如我拉下来一套干净代码不干别的仅为了看代码而已空闲时间就可以采用如下命令将碍眼IDE的.git相关全部删除 rootubuntu:~$ find ./ -name .git* |xargs rm -rf以上等同于如下find 和 -exec 组合使用rootubuntu:~$ find ./ -name .git* -exec rm -rf {} \;还可以在删除的时候和命令-ok组合使用增加提示让用户确认(y执行n不执行) rootubuntu:~$ find ./ -name .git* -ok rm -rf {} \; rm ... ./.git ? y rm ... ./.git1 ? y rm ... ./.git2 ? y rm ... ./.git3 ? y最后看下 -print 使用效果比如我想快速查找和查看一下在当前目录下归属于kobe这个用户的所有.doc文件包含“mvp”关键字的信息情况就可以用到前面尝鲜的例子带 -print 的效果 rootubuntu:~$ find ./ -name *.doc -type f -a -user kobe -exec grep -ri mvp {} \; -print Kobe Bryant will be regular season and Finals MVP at that point. ./RIP.doc I am also the MVP of our village. ./BLACK8.doc不带 -print 的效果 rootubuntu:~$ find ./ -name *.doc -type f -a -user kobe -exec grep -ri mvp {} \; Kobe Bryant will be regular season and Finals MVP at that point. I am also the MVP of our village.可以看到带 -print 会打印出更多有用信息不仅有grep到的mvp信息还有对应的文件信息。2. locate命令安装和配置locate命令一般非linux系统自带比如在ubuntu下就需要手动安装才能使用需要执行sudo apt-get install mlocate;和find比较find 命令查找相当于直接在文件系统里面找硬盘上的东西而locate是有属于自己的一个数据库mlocate.db比我在ubuntu里面安装后默认在/var/lib/mlocate/mlocate.db mlocate.db是不断更新和维护存储的文件索引每次locate查找时都是在mlocate.db里面查找索引并不会真的在文件系统里找硬盘上的东西所以locate查找速度要比find快也正因为这样只有数据库mlocate.db里存在索引的文件才能被找到虽然系统每天会自动更新数据库但是当下实时的一些文件变动必须要我们手动更新数据库后才行万一忘了更新就会查找不到查找结果就会不准确可以通过命令sudo updatedb手动更新数据库mlocate.dblocate命令格式 locate [OPTION]... [PATTERN]...locate常用命令OPTION 说明/实例如 locate .git/*config* 查找.git目录下所有名称含有config的文件或目录(星号为通配符)如 locate mvp查找所有名称包含mvp的文件或目录-i不区分大小写进行查找如 locate –i mvp查找所有名称包含mvp的文件或目录不区分大小写-c统计查找到的条目个数如 locate –c mvp查找看有多少个文件或目录名称包含mvp更多使用方法可以 locate --help获取如 rootubuntu:~$ locate --help -A, --all only print entries that match all patterns -b, --basename match only the base name of path names -c, --count only print number of found entries -d, --database DBPATH use DBPATH instead of default database (which is /var/lib/mlocate/mlocate.db) //可以自行指定数据库 -e, --existing only print entries for currently existing files -L, --follow follow trailing symbolic links when checking file existence (default) -h, --help print this help -i, --ignore-case ignore case distinctions when matching patterns //忽略大小写 -p, --ignore-spaces ignore punctuation and spaces when matching patterns -t, --transliterate ignore accents using iconv transliteration when matching patterns -l, --limit, -n LIMIT limit output (or counting) to LIMIT entries -m, --mmap ignored, for backward compatibility -P, --nofollow, -H dont follow trailing symbolic links when checking file existence -0, --null separate entries with NUL on output -S, --statistics dont search for entries, print statistics about each used database -q, --quiet report no error messages about reading databases //不会显示任何错误错误讯息 -r, --regexp REGEXP search for basic regexp REGEXP instead of patterns //使用基本正则表达式 --regex patterns are extended regexps //使用扩展正则表达式 -s, --stdio ignored, for backward compatibility -V, --version print version information -w, --wholename match whole path name (default)3. which命令如果你要查找的是系统中的可执行文件就可以考虑用which 命令which是通过$PATH 环境变量查找该变量指定路径内的可执行文件需要注意假如被查找的可执行文件没有被添加到$PATH 是无法被 which 到的基本上ubuntu通过apt-get install安装过的可执行命令(即一种可执行文件)都默认会被添加到 $PATH 了假如真的有些没有被添加到安装完成后需要我们手动添加一下可套用如下命令格式(路径/mytools/bin可根据实际情况进行替换)export PATH$PATH:/mytools/bin另外也可以结合需要将这条命令直接修改进 系统 profile文件 或 当前用户 .bashrc文件注意如果是修改进文件需要重新注销/登录一次才能生效可以通过 echo $PATH 查看确认which常用命令参数 说明/实例如 which lswhich默认返回在$PATH中搜索到的第一个结果如 which which查找which命令自己的位置如 which ls file一次查找多个(ls 和 file)命令的位置-a如 which –a ls查找在$PATH中所有ls的位置which默认返回在$PATH中搜索到的第一个结果如果想查看所有搜索结果可以使用参数-a更多使用方法可以 which --help获取。4. whereis命令whereis命令可以用来查找系统中的二进制文件(如系统命令文件)、源代码文件、帮助手册(man)文件查询目录说明一般包含二进制文件的目录有/sbin/bin/usr/bin/usr/lib一般包含源代码文件的目录有/usr/src一般包含手册文件的目录有/usr/local/man/usr/share/man和which比较whereis不仅可查找系统中的可执行文件(二进制文件)还可以查找源代码文件、帮助手册(man)文件覆盖面比which要广一些whereis命令是通过文件索引数据库查找的(这点类似locate)而 which依靠 $PATH查找注意疑问因为采用数据库的方式并不是实时更新所以我们在用whereis和locate 查找文件时有时可能会看到已经被清理的文件被查找到或者 实时变动的文件无法被查找到。对于locate可以手动更新数据库前面已经介绍但是一直没有找到如何手动更新whereis数据库的方法可能主要依赖系统吧如果你知道其更新原理或者如何更新还请帮忙告知我补充在后续文章中感谢。whereis常用命令参数 说明/实例-b查找二进制文件如 whereis -b ls指定要查找的是二进制可执行命令ls文件位置-m查找说明手册manual路径下的文件如whereis -m svn如果安装的svn带有对应的manual指导手册就会被快速查找出来-s查找source源文件如 whereis -m svn如果安装的svn带有源码就会包快速查找到更多使用方法可以 whereis --help获取。5. Ps.End这么多命令和参数记不住、使用不熟怎么办没关系千万不要心急命令想熟练使用一定需要刻意训练和长期使用积累才行一口吃不成大胖子 说点个人建议吧可以先将文章当做一个随时可查询的手册对待可 关注 并 星标 公众号 嵌入式er笔记后续随时在对话框发送 find 即可获取这篇文章进行学习 隔一段时间强化练习一次自己认为有用但不熟的命令可以结合“艾宾浩斯记忆曲线”进行平时碰到需要查找文件时刻意进行“精确”查找时刻提醒自己不仅是要找到文件还要记得结合文件修改时间、名称、路径、大小、权限、类型、用户及组选择合理的搭配进行“精确”查找。如果觉得文章有用帮忙动动手指点赞、在看给作者点鼓励持续写作和分享往期文章专辑 | C/C细碎专辑 | 磨刀不误砍柴工文章 | 程序员不应该就是专职敲代码的吗文章 | 手机屏幕封装技术及其分类相关知识文章 | 大端小端详解(含代码及详细注释)文章 | 你真的了解开源吗文章 | 浅谈ARM ABIAndroid ABI文章 | CPU、ARM、架构(及指令集)关系文章 | 我毕业了(来自小学妹的毕业随笔)如果觉得文章有用帮忙动动手指点赞、在看给作者点鼓励持续写作和分享