准确来说,是linux下的一些shell操作。写在这里也方便查找。
wc查看单个或多个文件的行数或总行数
wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。
查看cpp文件和h文件行数:
1 | find ./ -name "*.cpp" -o -name "*.h" |xargs cat|wc -l |
grep查找包含某个单词的所有文件
如果你想在当前目录下,查找某文件内是否有”hello,world!”字符串,可以像这样:
1 | grep -rn "hello,world!" * |
找文件
在linux下,主要用到的文件查找有find,whereis,locate。
通常find不是很常用的。因为速度慢之外, 也很操硬盘!通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来搜寻。 为什么呢?因为whereis和locate是利用数据库来搜寻数据,所以相当的快速,而且并没有实际的搜寻硬盘, 比较省时间!
whereis
whereis命令会在指定的目录中查找符合条件的文件,文件应的属性应属于原始代码,二进制文件,或是帮助文件。
locate
locate命令用于查找符合条件的文件,它会去保存文件与目录名称的数据库内,查找符合条件的文件或目录。locate的使用更简单,直接在后面输入文件名后,就能够得到结果。(locate命令可以在搜寻数据库时快速找到文件,数据库由updatedb程序来更新)。
find
find是一个非常有效的工具,它可以遍历当前目录甚至于整个文件系统来查找某些文件或目录。
查找文件名包含I的文件:
1 | find -name "I*.cpp" |
重定向
我用得最多的是make的重定向。
只需要把make输出中的错误(及警告)信息输出到文件中,可以用:
1 | make xxx 2> build_output.txt |
只需要把make输出中的正常(非错误,非警告)的信息输出到文件中,可以用:
1 | make xxx 1> build_output.txt |
所有的信息都输出到同一个文件中:
1 | make xxx > build_output_all.txt 2>&1 |
其中的2>&1表示错误信息输出到&1中,而&1,指的是前面的那个文件:build_output_all.txt。
上面所有的`1,2`等数字,后面紧跟着大于号'>' ,中间不能有空格。
根据进程名称Kill多个进程
经常需要Kill多个进程,这些进程包含共同的关键字,可以用一条命令Kill掉它们。
1 | ps aux | grep "common" |grep -v grep| cut -c 9-15 | xargs kill -9 |
管道符|用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的几个命令:ps aux查看所有进程的命令。这时检索出的进程将作为下一条命令grep "common的输入。grep "common选出所有含有关键字common的进程。cut -c 9-15截取输入行的第9个字符到第15个字符,而这正好是进程号PID。grep -v grep除去grep,xargs kill –9中的xargs命令是用来把前面命令的输出结果pid作为kill –9命令的参数,并执行该命令。kill –9会强行杀掉指定进程。kill完可以检查下:
1 | ps -ef | grep skynet |
在linux下对比文件
diff是用来比较两个文本文件的差异的工具程序。是代码版本管理的基石之一。
1 | diff <变动前的文件> <变动后的文件> |
使用split来分割大文件
1 | split -b 20m gkdb.db gkdb_pack_ |
split是命今-B 20M是指将每个分卷文件最大20Mgkdb.db需要分割的文件gkdb_pack_是指分割后的文件开头, 分割后后的文件名一般为gkdb_pack_aa、gkdb_pack_ab、gkdb_pack_ac依次类推