相关知识
more
命令格式: more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file … ]
命令功能: 按页来查看文件的内容,还支持直接跳转行等功能命令参数
- +n 从笫n行开始显示
- -n 定义屏幕大小为n行
- +/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
- -c 从顶部清屏,然后显示
- -d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
- -l 忽略Ctrl+l(换页)字符
- -p 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
- -s 把连续的多个空行显示为一行
- -u 把文件内容中的下画线去掉
find | xargs
find格式
命令格式:find filename 【选项】【-print -exec -ok …】
选项参数:
1、-name :按照文件名称查找,可以提前cd定位,也可以在find命令最前面加上待查找路径注意需要写上文件类型
2、-type:按类型查找文件d: 目录文件 b:块设备文件 c:字符设备文件 f:普通文件
3、-mtime -n +m: 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前
4、 -perm 777:按照文件的权限查找
xargs
什么是xargs:x 是加减乘除的乘号,args 则是 arguments (参数) 的意思,所以说,就是在产生某个指令的参数的意思;
会使用 xargs 的原因是, 很多指令其实并不支持管线命令,因此我们可以透过 xargs 来提供该指令引用 standard input 之用。
find 与 xargs 的组合
- 和grep组合使用,搜索文件内容
find ./ -type f | xargs grep words
注意:如果不使用xargs,命令依旧可以执行,但是grep的是文件的名字,而不是文件的内容。 - rm组合使用
find ./ -type f | xargs rm -rf words.txt - 消除文件名空格的影响 find -print0 | xargs -0
cat > <<EOF
linux shell下常用输入输出操作符是:
- 标准输入 (stdin) :代码为 0 ,使用 < 或 << ; /dev/stdin -> /proc/self/fd/0 0代表:/dev/stdin
- 标准输出 (stdout):代码为 1 ,使用 > 或 >> ; /dev/stdout -> /proc/self/fd/1 1代表:/dev/stdout
- 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr
文件access time,modify time ,change time
linux系统为每个文件保存了3个时间,分别是Access time(访问时间),Modify time(修改时间),Change time(状态改变时间)。
-
修改时间:文件内容最后一次修改的时间,我们经常用的ls -l命令显示出来的文件时间就是这个时间。
-
访问时间:对文件进行一次读操作,它的访问时间就会改变。例如cat,more等操作,但是之前的stat还有ls命令对atime是不会有影响的。
-
状态时间:当文件的状态被改变的时候,状态时间就会随之改变。例如当使用chmod、chown等改变文件属性的操作是会改变文件的ctime。
查看文件时间
stat命令
文件夹权限
r(read contents in directory)r权限顾名思义,读取文件夹内容的权限,即读取文件夹中文件名列表的权限
w(modify contents of directory)w权限则是修改文件夹的内容了,即修改文件夹中的文件名列表,我们可以增加文件夹中新文件,删除文件,修改文件名,移动文件。
x(access directory)x权限在文件夹上就不是可执行权限了,而是代表用户能否进入该目录。
grep
正则表达式种类
-
Basic Regular Expressions(默认)
只支持“*”。
? , + , { , | , ( , ) 默认都是不支持的。通过“\”转义才能支持。 -
Extended Regular Expressions
“.”:匹配任何一个字符
“^”:行的开始
“$”:行的结束
“?”:最多一次。
“*”: 零或多次
“+”: 一次或多次
{n}:n次
{n,}:n次或多于n次
{n,m}:最少n次,最多m次
字符 | 描述 |
---|---|
\cx | 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。 |
\f | 匹配一个换页符。等价于 \x0c 和 \cL。 |
\n | 匹配一个换行符。等价于 \x0a 和 \cJ。 |
\r | 匹配一个回车符。等价于 \x0d 和 \cM。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\t | 匹配一个制表符。等价于 \x09 和 \cI。 |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。 |
- Perl regular expression
grep命令
常见选项:
- -i:忽略搜索字符串的大小写
- -v:取反,即输出不匹配的那些文本行
- -n:输出行号
- -l:输出能够匹配模式的文件名,相反的选项为-L
- -q:静默输出
- -r: 递归查询文件夹
- -c:计算匹配成功的行数
- -e:该选项加上正则表达式就是一个需要匹配的模式
- -o:只输出匹配到的文本部分
- –include:指定需要搜索的文件
- –exclude:排除需要搜索的文件
- –exclude-dir:排除需要搜索的目录
- -Z:设定输出的文本之间以’\0’作为分隔符,而不是新行
经典场景
管道内容过滤
通过管道过滤内容:
cat temp.file | grep 'hello*'
通过find过滤文件名称、类型,grep过滤文件内容:
find ./ -type f | xargs grep words
过滤进程:
ps aux | grep java | grep -v grep
文件夹查找
递归查找文件夹下所有文件:
grep -r 'rs' ./
grep -d recurse 'rs' ./
递归查找文件夹下所有文件,输出文件名:
grep -lr 'rsd' ./
递归查找文件夹下所有的文件,输出匹配行号:
grep -nr 'rsd' ./
输出匹配的上下文
-A n 后n行,A记忆为(After)
-B n 前n行,B记忆为(Before)
-C n 前n行,后n行,C记忆为(Center)
grep 'rs' words.txt -A 2
grep 'rs' words.txt -C 2
统计匹配的次数
统计的是rs出现的次数,而不是行的数目。
grep 'rs' words.txt -c
排除查询文件
排除文件夹:
grep -r --exclude-dir={myproject,dps,oneFlink} 'rsd' ./
排除文件:
grep -r --exclude=*.png 'rsd' ./
支持正则表达式
egrep或者grep -E
匹配多个条件中一个
匹配rsd或者rsrs都可以:
grep -rE --exclude-dir={myproject,dps} --exclude=*.png -e 'rsd' -e 'rsrs' ./