Posts tagged with cli

(这篇文章是给想学习 Linux/UNIX 但是不知道前方有什么东西要学以及用了Linux 一段时间后想要快速提高生产率的人看的)

Linux 本身只是一个内核, 所谓的内核, 就是你看不见摸不着的东西. 平时打交道的, 都是应用软件和一些常用的命令. 很多人说学习Linux, 实际上学习的是这些常用命令和软件的用法. 这些知识, 其实不光是Linux 上通用, 在苹果, Solaris, BSD 等系统上都是通用的.

同时, 只有学会了这些应用软件, 才能随心所欲的驾驭计算机. 否则, Linux 系统的魔力就体现不出来. 有一种观点说: 反正是完成工作, Windows 高效就用 Windows. 而实际上, 如果对 Linux 上常用应用软件稍做一些探索, 就可以发现, 大部分日常工作都是用 Linux 系统上的软件高效, 因为他们从一开始就比 Windows 设计优良. (当然, 我依旧承认在多媒体方面 Windows 上的软件如 Photoshop 等专业软件的确比 Linux 上的对应软件要强大. 但是这个强大是 Adobe 的软件, 不是微软的操作系统 ).

下文就是介绍 Linux 上高效工作的一些常用软件.

GNU coreutils: 很多人学 Linux, 其实就是学这里面的命令. 比如 cat, ls, head, kill,  这些都是一个基本系统必备的工具集合. 学会了这个里面的命令, 基本上任何 *nix 系统能搞掂. 比如你以后用苹果Mac 也好, unix 服务器也罢, SUN 的Solaris 也行, 都是一样的用法. 而且这里面的工具的确很强大, 比如以前我说的求集合的交集和差集, 就是这里面的小工具拼一下就出来了.

GNU findutils: 这个工具包能够帮助你在 Linux 系统上找文件, 或者对满足一定条件的文件做一定的操作. 其中的 find 和 xargs, 可以变化出无数组合, 让对文件的批量处理变得异常简单. 比如说, 把当前目录及其子目录下面所有的早于2002年的照片文件都删除这样一个操作, 在 Linux 下面就是一行命令, 而在 Windows 底下就要求助于专门的照片管理软件了.

cron: 假如你想每天定时让你的计算机做一件事情(比如, 控制电饭锅做饭), 或者每个周日的晚上帮你把文件清理清理, 或者每天早晨给你抓取各大网站的新闻存成摘要投递到你的桌面上, 你肯定需要 cron 这样一个强大的东西. 他的使用出乎想象的简单, 就在一个指定的文件里面写上什么时间做什么就行了, 比设置 Made In China 的闹钟还简单. 这个定时做事情带来的效率提醒是意想不到的.

screen: 如果你登录到一个机器工作, 退出的时候还想保持命令行继续存在, 下次登录还能继续工作, 或者你想和另一个人同时在一个命令行界面里操作, 或者你想只登录一次, 却拥有多个可用的终端窗口用来工作, 那么恭喜你, screen 是你想要的. screen 可以帮助你模拟出多个输入, 并且方面的切换, 还能把终端挂起来, 下次连上去继续工作, 这个对于在远程服务器上工作的人是杀手工具.

expect: 如果你非常讨厌每次登录telnet 的时候都要输入一次用户名密码, 如果你每次用某些软件的时候都要千篇一律的输入很多东西; 如果你想挂机刷机赚经验, 如果你想测试你的程序是不是正常工作, 那么, expect 是一定要使用的. expect 本来是用来做程序测试的, 看程序是不是有预想的输出. 有创意的玩家把他用去自动上论坛挂机或者自动登录FTP了. 如果想要自动化一些在命令行下交互性质的事情, expect 是很好的选择. 而且, 学习一下, 估计也就10分钟.

wget/curl: 支持多线程通配符递归, 断点续传等一切迅雷有的功能的下载器, 而且没有烦人的小广告. 如果要常常下载东西, 这个比迅雷好玩多了.

make: 以上说的都是单个工具. 而这个make 就是把工具组合起来的. 比如说, 写一个报告可能涉及画插图, 写文字, 生成报表, 做排版. 这些任务之间有依赖关系, 比如报表依赖于数据, 插图依赖于一个脚本, 排版依赖于一个格式规定. 数据更新了, 报表就要更新. 所有的这些任务和任务的依赖关系, 都可以写一个简单的makefile, 这样 make 就可以托管了. 假如数据更新了, 生成报表的时候只要重做报表, 插图就不需要重做. make 能自动分析这些依赖关系, 使得只执行必要的任务, 极大的减少了人工管理的负担. 事实上, 我的论文和家庭作业报告基本都是用 make 管理的.

convert/display: 这是使用 Linux 做日常工作的人必然要碰到的两个程序. 简单的说, 这是两个无所不能的程序. 其中 convert 能把一切能显示的图像格式转化成另一个格式. 比如png 和 pdf 之间的转化, 就是一句话. 而display 则是显示一切能现实的. 这两个, 还有其他的一些程序,  都属于ImageMagik 这个包. 用多了, 就会感叹, 其实把图片加加对比改改大小或者旋转旋转这些事情, 就是一行命令, 完全不需要开一个窗口点鼠标. ImageMagik 的设计也充分体现了 Facet 的设计模式, 接口非常简单, 自然, 常常和图片打交道的人熟悉使用以后, 效率能成倍提高.

另外, 学会正则表达式和一种脚本语言是必须的步骤. 其实这些都不是想象的那么难, 只不过是换一种眼光看问题罢了.

总的来说, 就一点: 在使用计算机做一件事情前, 先想想, 我是不是聪明到是世界上第一个遇到这个问题的人. 如果不是, 就动脑筋想想这个事情是不是可以分成几件小的步骤, 这些小的步骤是不是有现成的工具了. 一般情况下 99% 的都有前人的软件. 如果实在没有, 自己就开始写一个. 通常来说, Linux 比 Windows 效率高的所在, 在于工具的高效配合, 而不是直接找到一个包打四方的巨无霸的工具.

(本文覆盖肯定不全, 欢迎留言补充)

上次拔掉你的鼠标发表之后, 好多人来邮件, 询问我用了哪些命令行软件, 我列举一下.

即时通信:

Freetalk: 我用这个上Gtalk. 开源的, 所以可以自己开发插件. 我控制空调的东西, 就是一个插件.
Fama-im: 我偶然用来上MSN. 但是其实我会用窗口下的Pidgin, 只有在我的土电脑上的时候, 我才会偶尔用用这个. 这两个操作都很简单. 然后, 我不用QQ.

邮件:

有人喜欢用 Pine 处理邮件, 我一般用 Mutt. 因为所有的邮件客户端都suck, Mutt sucks less. 发邮件其实底层是sendmail, 不过没人关心这个. mutt 非常好学, 半天上手后, 就会觉得其他的邮件客户端以及 Gmail 真是和蜗牛一样慢. 邮件的搜索也支持的很好. (中文搜索我没尝试过, 因为中文没所谓的正则表达式的概念).

上网:

eLinks: 支持标签, 支持底色和排版. 用来上Google 和 Wikipedia 再好不过了. 看到的纯文字一点干扰都没有. 最好的就是看到网址也不会随便点. 同样也是支持LISP编程的. 所以如果想看到单词查个字典什么的, 自己写个小插件就行了. 如果网页有图, 设置一下 elinks 的设置, 就可以在点击图的时候自动用X的图片查看器打开了. 其他的以贴图为目的的网站如lolcat 我一般都有脚本定时去下下来, 有空批量看. RSS 因为喜欢 share 这个功能, 所以使用了 Google Reader, 好在他完全可以键盘操作, 也算半个 CLI 吧.

日程等:

我使用 remember the milk 的机器人. 然后在Freetalk 里面写一个钩子, 让这个机器人发来的消息触发一个脚本(那个脚本是一堆 beep 语句, 就是让小喇叭发声. 所以可以称得上我的彩铃. 其实你也可以让他调用某个放mp3的放一个mp3, 这个就看你爱好了).

TODO等:

我的TODO 是一个纯文本文件. 写了几个简单的叫做POP 和PUSH 的 Python 脚本用来加入和删除内容, 同时提交到 remember the milk (基于 pyxmpp 协议就两行语句). 我还使用svn把这个文件同步到远程的计算机上. 这样, 不同机器之间版本始终一致, 不存在版本冲突的问题. 我不喜欢用 Google Calendar, 因为他对自然语言的处理还不够好, 而且我还不是日程忙到要专门的日程管理的人, 就在纸质的日历上贴彩条就行了.

自动化任务:

跑程序, 编译论文, 备份文件, 同步文件等批量任务, 我一般都弄一个 makefile, 搞些好玩的 target. 我的查看TODO的脚本就很变态的叫做 make love. 还有一个随机抓一个笑话的脚本, 叫做 make me a sandwich. 总之, 自动化的任务交给make 管理, 手到病除. 当然, make 不能接受参数, 所以有时候得写点辅助脚本.

小事情:

单位转换和计算器我分别用 units 和 bc. 日历用 cal, 字典用 dict. 转换图像格式和大小这些都是用著名的convert. 看图用display 抓屏用import 都是标准的方法. 刻光盘用cdrecord. 唯一玩的游戏是 nethack (http://www.nethack.org/ ) 这样一个最耗脑力的龙与地下城游戏. 这个游戏黑客做了20多年了, 一直都是命令行操作最好玩.  有人关心怎么控制我家的空调和电灯, 其实他们都是使用 X10 协议控制的. 只要有一个和计算机通信的X10 控制设备, 加上 HEYU 这样的开源软件, 就可以完全控制家里面所有的电器了.

对了. 我的编辑器是vim. 很羡慕用Emacs的. 其实编程就是打字和GCC来回倒, 没啥特别的.

以前清华大学的王垠有句名言: 不能用Linux做的事情, 是不需要做的事情. 现在看来, 不能用命令行做的事情, 重要性也不见得多高. 比如校内等SNS, 就不支持 elinks, 所以我也很少上.