实用命令笔记

时常出现一些特定需求,然后就一边看man page,一边尝试,最终写出一些复杂的命令,短时间内往往只使用一次,隔N久后又使用时,就忘记怎么写了,然后又查man page,让人郁闷。 多数时候只是不确定是否要加转义斜线。专门罗列出来,做个笔记,方便速查很有必要。

查找特定时间范围内修改文件

find res/ scripts/ -newer package.zip | xargs -i zip new_package.zip '{}' -x \*.swp \*.bak \*.tmp

解释:
将res和scripts目录中更新过的文件打包为zip文件,剔除扩展名为swp、bak、tmp。find还支持其他一些控制查询时间区间的参数, 这对于在大量的配置文件中查找哪些是近两天修改过的,非常有用:

find . -cmin +30
find . -cmin -10
find . -ctime +30
find . -ctime -10
find . -cnewer abc.txt

解释:
第一个表示查找修改(change)时间大于最近30分钟的文件;第二个表示查找修改时间在近10分钟内的文件; 第三个表示查找修改时间大于30天的文件;第四个表示修改时间在近10天内的文件; 第五个表示查找修改时间比abc.txt的修改时间新的文件。

Linux上,使用stat abc.txt命令可以查看文件的详细信息,其中就包括了access time,modify time,change time, 有读取文件,access time就会更新,只是修改文件属性(例如:添加可执行属性),那么change time会更新, 如果修改了文件内容,那么modify time和change time都会更新。可见英文里,change比modify含义更广。

最近学习quick cocos2dx手机游戏开始,发现使用上面的命令,外加python -m SimpleHTTPSever可迅速构建一个提供游戏版本更新的server服务端。

查找一定文件大小的文件

find . -size +365000k -a \( -name '*.bin' -o -name '*.ind2' \)

解释:
查找文件大小大于365M的文件,且名字符合*.bin或者*.indz2,这里-a等于-and-o等于-or\(后的空格和\)前的空格不能省略。

查找代码行数大于5000行文件

ls *.cpp | xargs wc -l | awk '{if ($1 > 5000) print $1, " ", $2 fi}'

解释:
找出代码行数大于5000行的cpp文件,更复杂的awk使用参见Awk常用命令笔记

输出指定行数的内容

sed -n '50000,50100p' output.log
sed -n '50000,+100p' output.log

解释:
输出50000行开始的100行,两条命令等价,对于日志中追查问题非常有用。

权限不够时不退出vim保存文件

:w !sudo tee %

解释:
ubuntu下vim里编辑文件,保存时权限不够,可以选择先保存到/tmp/目录下,再切换root从/tmp/把文件mv回来,更简单的方便是使用如上命令, 在不退出vim的条件下,切换root保存文件。%在vim里代表文件名,tee命令作用就是创建一个文件,并将终端输入内容保存到文件里, tee test2.cpp < test.cpp可以等同于mv test.cpp test2.cpp

关闭终端让程序继续执行

ctrl+z
bg 1 && disown -h %1

解释:
前台程序换到后台运行,退出终端时,程序继续运行。bg用于让后台任务继续运行,disown是指定某任务忽略SIGHUP信号,相当于nohup。

cppgrep实现在c++文件中查找

alias cppgrep="find . -name '*.cpp' -or -name '*.h' | awk '{ gsub(" ", "\ "); print }' | xargs grep --color"

解释:
经常需要在一堆c++源码中grep查找,alias出一个cppgrep会加快工作。特别注意,这里使用awk将空格替换成斜杠空格,是解决文件名中有空格的情况。

发表于 2014年04月29日 21:00   评论:0   阅读:1902  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo