注意
想法及时记录,实现可以待做。
待定大纲:
- 介绍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