Linux常用命令之查找

介绍Linux常用的命令

Posted by qin4zhang on August 3, 2019

注意

想法及时记录,实现可以待做。

待定大纲:

  1. 介绍Linux的常用命令与相关的文档

命令介绍

在Linux系统中查找文件是很频繁的操作,比如我们要查找某个文件是不是近7提案被修改的,怎么办呢?定期删除过期的文件,怎么处理文件是不是过期的呢?find命令可以解决这个问题。通过man find可以熟悉文档。

我们想要知道某个可执行文件在哪里,该如何找呢?这种可以用whereis或者which

查找的结果要过滤条件,grep会非常有用。

find

find < path > < expression > < cmd >
  • name<范本样式> `指定字符串作为寻找文件或目录的范本样式。find /home -name "*.txt"、find /home -iname "*.txt"`
  • atime<24小时数> 查找在指定时间曾被存取过的文件或目录,单位以24小时计算。find . -type f -atime -7
  • amin<分钟> `查找在指定时间曾被存取过的文件或目录,单位以分钟计算`
  • ctime<24小时数> 查找在指定时间之时被更改的文件或目录,单位以24小时计算
  • cmin<分钟> `查找在指定时间之时被更改过的文件或目录`
  • mmin<分钟> `查找在指定时间曾被更改过的文件或目录,单位以分钟计算`
  • mtime<24小时数> 查找在指定时间曾被更改过的文件或目录,单位以24小时计算。find / -mtime -5 –print 在系统根目录下查找更改时间在5日以内的文件
  • exec<执行指令> `假设find指令的回传值为True,就执行该指令`
  • ls 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出
  • maxdepth<目录层级> `设置最大目录层级。find . -maxdepth 3 -type f`
  • mindepth<目录层级> `设置最小目录层级。find . -mindepth 2 -type f`
  • path<范本样式> `指定字符串作为寻找目录的范本样式。find /usr/ -path "*local*"`
  • regex<范本样式> `指定字符串作为寻找文件或目录的范本样式。find . -regex ".*\(\.txt\|\.pdf\)$"`
  • size<文件大小> `查找符合指定的文件大小的文件。find . -size +1000000c –print 在当前目录下查找文件长度大于1 M字节的文件`
  • type<文件类型> `只寻找符合指定的文件类型的文件。find . -type 类型参数。f 普通文件、l 符号连接、d 目录`

组合使用示例:

find . -type f -print | xargs file 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

find / -name "core" -print | xargs echo "" >/tmp/core.log 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:

find . -type f -print | xargs grep "hostname" 用grep命令在所有的普通文件中搜索hostname这个词

find ./ -mtime +3 -print|xargs rm -f –r 删除3天以前的所有东西 (find . -ctime +3 -exec rm -rf {} \;)

find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件

grep

grep [OPTIONS] pattern [FILE]

OPTIONS可以为:

  • -? 同时显示匹配行上下的?行,如:grep -2 pattern filename 同时显示匹配行的上下2行。
  • -b,—byte-offset 打印匹配行前面打印该行所在的块号码。
  • -c,—count 只打印匹配的行数,不显示匹配的内容。
  • -f File,—file=File 从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
  • -h,—no-filename 当搜索多个文件时,不显示匹配文件名前缀。
  • -i,—ignore-case 忽略大小写差别。
  • -q,—quiet 取消显示,只返回退出状态。0则表示找到了匹配的行。
  • -l,—files-with-matches 打印匹配模板的文件清单。
  • -L,—files-without-match 打印不匹配模板的文件清单。
  • -n,—line-number 在匹配的行前面打印行号。
  • -s,—silent 不显示关于不存在或者无法读取文件的错误信息。
  • -v,—revert-match 反检索,只显示不匹配的行。
  • -w,—word-regexp 如果被<和>引用,就把表达式做为一个单词搜索。
  • -V,—version 显示软件版本信息。

示例如下:

ls -l | grep '^a' 通过管道过滤ls -l输出的内容,只显示以a开头的行。
grep 'test' d* 显示所有以d开头的文件中包含test的行。
grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。
grep '[a-z]' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
grep 'w(es)t.*' aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成'w(es)t.*'就可以了。
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

pattern为正则匹配的字符串,模式如下:

. 匹配任意一个字符
* 匹配0 个或多个*前的字符
^ 匹配行开头
$ 匹配行结尾
[] 匹配[ ]中的任意一个字符,[]中可用 - 表示范围,
例如[a-z]表示字母a 至z 中的任意一个
\ 转意字符

whereis

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

$ whereis man
man: /usr/bin/man /usr/local/man /usr/share/man /usr/share/man/man1/man.1.gz /usr/share/man/man7/man.7.gz

which

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

$ which grep
/bin/grep