find . -exec touch {} \;
作用:对当前目录及子目录下的所以文件进行touch操作,达到把文件的修改时间改为系统当前时间的功能。
解析:最后一个字符是个分号,在它之前使用反斜杠(\)进行转义,这样shell就不对分号进行特殊处理,
而是传给find命令。当然,不用反斜杠,用单引号把分号括起来也是可以的。
find找到的文件,传给touch命令,使用字符“{}”。
应用:当把系统的时间改到过去,make编译软件时也许会碰到诡异问题。这时候上面命令就能派上用场了。
grep -r "jun" .
作用:在当前目录及子目录下的文件中,寻找字符串“jun”。
解析:-r表示递归(recursive),这样就能查找子目录了。-R和-r的效果一样。
应用:想知道一个字符串在什么文件出现,这个命令就很有价值。
find . -name "jun*"
作用:在当前目录及子目录下,寻找文件名以jun开头的文件。
解析:略。
应用:略。
nm libxxx.a | grep jun
nm libxxx.so | grep jun
nm a.out | grep jun
作用:nm的作用是list symbols from object files。上面的命令就是libxxx.a(libxxx.so或a.out)中找符号jun。
如果在输出结果前有“U",表示没有定义,但有声明。更加详细的可参考man nm
解析:略。注:如果strip调试信息,那么nm对一个object文件进行操作,会出现no symbols结果。
应用:某程序链接某个库,但提示找不到符号,nm也许会帮上忙。
du -sh
作用:显示当前目录及其子目录所占的磁盘空间。
解析:s参数表示summary,h参数表示以方便人(human)阅读的单位显示空间大小。
备注:在Linux的图形界面下,右键单击某个目录获得的大小是指Contents的大小,也就是目录中各文件
的内容的总和。这个大小肯定不会比du显示的空间大。例如:工作用服务器上的一个目录,du -sh显示13G,而右键
单击获得的Contents大小是9.8G,差距还是比较大的。
ls a* (1行)
ls "a*" (2行)
ls 'a*' (3行)
解析:在当前目录下,显示以a开头的所有文件名,2行和3行的命令是不行的,而用1行的命令可行。
补:1行命令带参数-d,不显示子目录下面的文件名(目录名还是显示)。如果没有-d参数,当前目录
下有个以a开头的子目录话,就会显示这个子目录下的所有文件名(这一般不是你想要的)。
因为,shell会对特殊字符*进行扩展。而放到强引用(单引号)或弱引用(双引号)中,不会对*进行
扩展。所以,2行和3行的的意思是ls文件名为a*的文件。
注:如果当前目录下,有个以a开头的目录(这个目录下有以a开头的文件),当前目录下没有以a开头的文件。
在执行1行语句时,会显示a开头目录下的文件,看不到a开头的目录名字。给ls -d参数就能解决(-d表示
list directory entries instead of contents)。
find . -name "a*" (4行)
find . -name a* (5行)
解析:在当前目录及其子目录下,寻找以a开头的所有文件,使用4行的命令可行,5行的命令不行。这是因为
find命令中-name参数是接一个shell patten。对于5行的命令,shell会把a*扩展得到多个文件,这不
合find的语法。