那里找微信小视频

Linux 是很多人走进计算机行业的敲门砖,同时也是面试官最喜欢问的知识点。但 Linux 中的命令较多,且单个命令的参数和格式又眼花缭乱,真正掌握还是有很大难度的。

 

本场 Chat,就是帮你梳理面试官最常考察的命令,配合操作示例,让你手把手体验,理解更到位。

 

1. find 命令

1.1 find -regex 与 find -name 的区别

若一个目录中,有如下目录:

 

susu@ubuntu:~/find_test$ ls

aaa aaa 22 1

susu@ubuntu:~/find_test$

可以使用 -name 进行名字匹配查询:

 

susu@ubuntu:~/find_test$ find . -name "a*"

./aaa

./aa

susu@ubuntu:~/find_test$

若同样的方式,使用 -regex 查询,则不能得到想要的结果:

 

susu@ubuntu:~/find_test$ find . -regex "a*"

susu@ubuntu:~/find_test$

出现以上结果的原因在于 -name 只要求匹配当前目录中的文件(夹)名称,而 -regex 则是把 find 输出的完整结果作为匹配对象,所以上面的命令中,默认是以 a 作为开头的字符串匹配,是不符合 -regex 规则,所以没能匹配到想要的结果。

 

正确用法如下:

 

susu@ubuntu:~/find_test$ find . -regex ".*a+"

./aaa

./aa

susu@ubuntu:~/find_test$

注意:

 

根据正则表达式的语法,应该加上 .* 而不是 *,具体正则表达式语法,参见链接http://www.runoob.com/regexp/regexp-syntax.html。

命令选项之后的参数,可用双引号包裹起来,也可以不用。

在 -name 语法中,可以使用星号 *,在知道部分文件名的情况下使用。但是正则表达式语法中的其他特殊字符是没有效果的,而且两种方式下的星号含义也不同。比如如下的操作,是找不到文件夹“cccccc”的。

susu@ubuntu:~/find_test$ ls

1 aa cccccc mycprogram.c Program.c

2 aaa mybashprogram.sh MyCProgram.c

susu@ubuntu:~/find_test$ find . -name "c*"

./cccccc

susu@ubuntu:~/find_test$ find . -name "c.*"

susu@ubuntu:~/find_test$

例子:eclipse 工程文件夹下有 4 个 project

 

susu@ubuntu:~/workspace$ ls

RemoteSystemsTempFiles test_new_web_maven

testJust test_quickstart_maven

susu@ubuntu:~/workspace$ cd ..

susu@ubuntu:~$

退回到上一层之后,用 -regex 查找 workspace 文件夹下的内容,使用如下语句:

 

susu@ubuntu:~$ find ./workspace/ -regex ".*test_new.*"

./workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/test_new_web_maven

./workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/test_new_web_maven/org.eclipse.jdt.core

./workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/test_new_web_maven/org.eclipse.jdt.core/state.dat

./workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/test_new_web_maven/.markers

./workspace/test_new_web_maven

./workspace/test_new_web_maven/src

./workspace/test_new_web_maven/src/main

./workspace/test_new_web_maven/src/main/webapp

./workspace/test_new_web_maven/src/main/webapp/index.jsp

./workspace/test_new_web_maven/src/main/webapp/WEB-INF

./workspace/test_new_web_maven/src/main/webapp/WEB-INF/web.xml

./workspace/test_new_web_maven/src/main/resources

./workspace/test_new_web_maven/.classpath

./workspace/test_new_web_maven/.project

./workspace/test_new_web_maven/target

./workspace/test_new_web_maven/target/classes

./workspace/test_new_web_maven/pom.xml

susu@ubuntu:~$

1.2 Linux 命令中的“permission denied问题

普通用户在根目录中使用 find 命令时,通常会碰到类似以下的问题:

 

susu@ubuntu:/$ find / -name *.txt

...

find: `./.gvfs': Permission denied

find: `./.dbus': Permission denied

find: `./.cache/dconf': Permission denied

因为管理员用户 root 设置了某些文件夹“禁止”普通用户访问,所以普通用户在使用以上命令时会出现如下错误。

 

解决方案:先给出链接,一个百度文库,搜索关键字就可以看到解决方法。

 

/dev/null 称为 Linux 黑洞,等价于一个只写文件,所有写入它的内容都会消失,既然会消失,那么该文件也是打不开的,也无法从该文件当中读取任何内容。而解决的途径就是把含有 permission denied 的报错信息都输入该文件即可。

 

对于可能存在该报错信息的命令(在根目录 / 下执行 find 命令,通常都会有此报错),那么可以该 find 命令后,添加一句话,比如上面的 find 命令:

 

susu@ubuntu:/$ find / -name *.txt 2>/dev/null

在后面加上命令 2>/dev/null 就避免了报错问题。

 

1.3 find 命令忽略大小写

只需要在命令选项前加一个 i,就可忽略大小写。-name 换为 -iname,-regex 换为 -iregex。

 

1.4 和文件访问、修改以及对应时间相关的 find 命令

主要是 -mtime 和 -ctime 命令选项:

 

-amin n 查找系统中最后N分钟访问的文件

    -atime n 查找系统中最后n*24小时访问的文件

    -cmin n 查找系统中最后N分钟被改变文件状态的文件

    -ctime n 查找系统中最后n*24小时被改变文件状态的文件

    -mmin n 查找系统中最后N分钟被改变文件数据的文件

    -mtime n 查找系统中最后n*24小时被改变文件数据的文件

从上面的解释看出,文件被改变,分为两类,一类是文件状态的改变,比如权限、归属关系,这个时候的前缀是 -c...(比如:-cmin n、-ctime n);一类是文件数据的改变,就是修改的文件内容,前缀是 -m...(-mmin n、-mtime n)。

 

后面的 n,有两种,一种是 +n,一种是

 

  隐藏内容

上一篇:[DB] CDH集群规划


下一篇:ArcGIS Pro Python根据要素名查找要素