正文
ack
我记得我曾经在面试的时候被问到过“请写如何调用 grep 来列出当前目录下所有文件里,含有某个字符串的行”。这个问题我的回答是 “用 ack 就可以了”。ack 的官网域名就叫 betterthangrep.com。由于在当前目录下载所有文件里查找某个字串符是如此常见的一个操作,执行 ack foo 就可以在当前目录所有文件里查找 foo。ack 默认会跳过很多没用的目录和文件,让查找更快,输出结果更准确。另外像默认开启的彩色显示也让人用起来很舒畅。
ack 目前大部分发行版中没有,如果你使用的是 Ubuntu 的话其包裹名字是 ack-grep,执行文件的名字也一样。具体可以在这里查看文档。
rsync
比如说你本地有一台电脑,远程有一台服务器。你想把你的一个文件夹全部拷贝到另外一边的某个地方去。你这个文件夹经常也要更新,希望通过某种方式把更新的部分能迅速同步过去。这应该怎么做?不知道 rsync 的话你可能会想用 git,搭建一个 ftp,或者用 scp 或者别的。但事实上 rsync 才是真正的为精确的解决这个问题而生的软件。rsync 最棒的地方就是差量更新,也就是只把另外一边缺少的东西传过去,而且你不需要任何额外配置,速度快的飞起。一个例子:
rsync -arvuzp --chmod=g+rx ./built/ [email protected]:/var/www/site
aspell
作为一个程序员你总有一天会要写英文文档。我等母语不是英文的出现拼写错误实在是太正常了。如果你用 Word 的话会有下划线提示你,但如果你是在代码里写注释或者再 Linux 下写 markdown 的话好像就没什么办法。事实上这也是一个已经被解决的问题,aspell 正是来做这个的。aspell 可以对任何纯文本进行拼写检查,作为面向程序员的工具它可以侦测文件类型,比如对 C++ 程序它就只检查注释里的单词。
tee
有时候某些命令运行的结果会很长,你可能会用 less 来上下看。再或者你可能会用 > 来重定向到文件里。但某些时候程序有可能需要你输入 y 来确认,或者某些程序运行的时间很长,仅仅重定向的话又不太确定是不是它在正常运行。tee 就能做到又输出到屏幕上,又同时重定向到文件。一个简单的例子:
$ echo waht | tee out.txt
waht 会被输出到屏幕上,同时也会被写到 out.txt 文件里。另外 tee 的意思其实是 T,把输入输出中间拉了又多扯出了一条,可谓是相当形象。
值得一提的是 vim 也可以用在 pipe 里,例子如下:
$ echo waht | vim -
你肯定知道用键盘上下方向键可以来回找你的历史,那么比如有一个很久之前打过的命令你可能需要猛按上才能找到。其实这时候只要输入一部分然后按
bash 就会帮你往回搜索。连续按
可以按顺序往前搜。(或者直接按
再进行输入)。接着上面一个的例子,输入 echo 后按
效果如下:
(reverse-i-search)`echo': echo waht | vim -