Linux面试_2
如何查找特定的文件
通过find指令
语法: find path [options] params
作用: 在指定目录下查找文件,任何位于参数前的字符串都将会被当做预查找的目录名
.
如果不设置任何参数,则find指令将会当前目录下查找子目录及其文件,并且将查找到的子目录和文件全部进行显示.
案例:
本文件夹/或其子文件夹中包含一个文件taeget.java,查找到它:
find -name "target.java"
,然后就会返回target.java的路径
如果其他文件夹中有给文件target.java,那么我该如何进行全局查找:
find / -name "target.java"
, 然后它就会从根目录开始,一致递归去找该文件,找到了就返回target.java的文件路径了(其中/
表示linux的根路径).
如果要查找全部以tar开头的所有文件路径怎么办?
find ~ -name "tar*"
,其中~
表示去当前用户的home目录,*
表示可以后面可以跟0个或者多个字符.
如果要查找全部以tar开头(不区分大小写)的所有文件路径怎么办?
find ~ -iname "tar*"
,*其中iname
表示忽略大小写.
总结:
如何根据文件名检索文件内容
文本检索就要用到grep指令
grep全称: Global Reqular Expression Print
通过全称我们就可以知道–它是支持正则表达式(regular expression)的.
语法: grep [options] pattern file
作用: 查找文件里符合条件的字符串
如果不指定任何文件名称,则grep指令会等待用户输入包含haha的字符串, 例如输入grep "haha"
,它就会等待你输入字符串,而且要输入包含haha的字符串之后才会结束,然后返回haha所在行的内容
.
案例:
如何实现查找全部文件名以tar开头的且包含mooc内容的
所有文件
grep "mooc" tar*
就可以找到所有包含mooc的且以tar开头的文件,返回文件名同时会输出目标字符串所在的行
的所有内容.
管道操作符 | 的作用
作用:
- 可将指令连接起来,前一个指令的输出作为后一个指令的输入.
前提是前面的输入是正确的标准输入
,不然后面的就执行不了,最后输出的时command3里面的数据
例子
执行find ~ -name "tar*"
,可以找到当前home目录下tar开头的文件.
上述功能也可以通过find ~ | grep "tar*"
其中,|
左边的命令表示列出当前home目录下的所有目录及其文件.
我们通过上面的只是可以知道,grep "tar*"
表示会从标准输入流
里面去查找包含tar开头的字符串
,而我们又知道,|
就是连接标准输入/出流,所以^^,你懂了吧.
|
右边就会把左边的标准输出作为标准输入传递到右边,然后你就懂了吧!
使用管道操作符注意的要点:
- 管道命令只能处理前一个命令正确输出,不处理错误输出,
|
左边的输入错误的话会直接报错. - 管道命令右边必须是能够接收
标准输入流
的指令,否则传递过程中数据会被抛弃. - 常用来接收数据管道的命令有:
sed
,awk
,head
,grep
,cut
,top
,less
,more
,wc
,join
,sort
,split
等.
如何在指定文件中查找包含指定字符串partial[true]
的行
grep 'partial\[true\]' data.info.log.
表示从data.info.log
这个文件里去找包含partial[true]
字符串的行,其中由于[]
是特殊字符,所以需要转义一下.
如何在指定文件中查找包含指定字符串partial[true]
的行,而且只显示符合engin
字符串数据
grep 'partial\[true\]' data.info.log | grep -o 'engine'
,-o
表示只输出符合后面字符串内容
的数据.
同时,我们还可以通过grep -v
,去查询不含
指定字符串内容 的字符串.
总结:
表示在指定文件中查询包含指定字符串的文本内容.
表示查找包含指定字符串的内容
查询不包含指定字符串的内容.