作者: 陈斌(redguardtoo)
注意: 我会长期维护本文,请参考下面的更新时间
更新时间:
原创时间:
这是为有志于成为顶尖Linux Geek的中级Linux用户而写的入门指导.
本文的重点是如何高效地使用Linux桌面软件.
Linux下的免费软件很多,许多人就要把所有有趣的软件都玩遍.这就和高富帅收集跑车,白富美收集包包一个概念.但是问题的关键是时间都被浪费了,学习Linux的初衷被丢之脑后.
例如,拒绝使用更好的软件,因为"我习惯了老的软件"或者"我写了脚本可以实现类似功能"或者"我的人生哲学等等"
典型的就是如果有个新的最酷的文本编辑器出来了.你立即丢弃了你正在用的Emacs,因为你轻信了新软件的广告.一旦那个软件停止升级,发觉你在其上时间精力投资也就白费了.也许在转投阵营前调查软件后面的人(用户和开发者)可能更好一点.
又比如有个开源界的知名人士宣称Unix的原则就是很多小的独立的程序通过纯文本协议相互作用.在你把这当成黄金法则到处乱应用之前,也许你应该了解一下该大牛讲话的风格就是比较偏激的.
年青的我就是最好的反面典型.当时我自认为自己智商高,记忆力好,所以学到有用的知识后没有记下来,后来全忘了.
现在我醒悟了,我会写下心得,公开发表,同时增量备份到全世界至少三个服务器上.在若干年内不断的维护改进.
比如我写的一年成为Emacs高手就是一个活生生的例子.
软件对我而言是长期投资.所以我会花很多时间学习软件的快捷键(快捷键长期来说操作比鼠标高效),那种只能用鼠标操作的软件对我来说就是"坏"软件.
以文件管理器来说,在Windows平台下我长期使用并热爱Total Commander,在Linux下平台下也有几款文件管理器在界面和功能上和Total Commander上非常接近,自然从感情上讲我会爱屋及乌.但是我最后还是选择了以Emacs作为主要的文件管理器,以丑陋的Midnight Commander为辅助,因我已确定选择软件的总的原则是尽可能用少的的软件做尽可能多的事.具体说来就是以Emacs做任何事,如果一定要用其他软件辅助Emacs,快捷键也应是Emacs的.Midnight Commander符合该条件
细节见后文,我要强调的是我的工具和方法都是有高手验证过,有官方文档支持.对我而言,科学的含义,就是前人反复验证过的,过去100%成功也许能保证现在将来可能成功(因工具环境不断在变化,所以只是有可能).除此以外都不叫科学.
在后文我会列出一些筛选软件的方法.也会推荐一些软件.但你决不要认为只要用了这些软件或者记住了我的方法就能成为高手了.这只是敲门砖而已.
实际上我推荐的不是软件,而是人.这些软件和用户和开发者是一个精英荟萃的圈子.重要的是你要理解这个圈子的风格.
软件数量少,品质高,功能强,依赖小,界面通用.
这点很重要,只有需要使用的软件少(但是完成的工作一分都不能少),才可能精通.
软件少的另外一个好处是维护省心,例如你发觉某个软件的快捷键和另一未知软件有冲突,找出另一个未知软件的工作量和你在系统上安装的软件数量有重大关系.
我对于品质的要求很简单:
何为久经考验,何为聪明人,我相信是可以找出很多客观的指标的.指标越严格,筛选结果就越少.
原谅我又用Emacs举例,用Emacs可以看网页,收邮件,写程序,做笔记,写博客,读rss.
附带说明一下,在我罗列的这些功能中,Emacs都是极为优秀,很少有同类软件可以媲美.
事实上,功能强的终极境界就是提供了一个无所不能的可编程平台.
例如,命令行软件不依赖于QT,GTK之类图形界面库,安装包小很多,运行时消耗内存也小,启动快.
例如,我写程序用emacs,一般操作用bash shell,文件管理用Midnight Commander(mc),上网用Firefox,但是通过适当的设置(Firefox需要安装插件keysnail,其他软件只要用最新版即可),他们的快捷键都是Emacs的.
我用Emacs,考虑到它可以做任何事,可以认为它是轻量级的.
Vim也用,万不得已用nano,结束了.
Firefox.它是自由软件,所以有很多顶尖Geek为其写插件.例如keysnail可以把Firefox的快捷键设置为Emacs的快捷键.所以我可以不用鼠标浏览网页.
我用bash,在我的.bashrc中有如下一行,
export HISTSIZE=200000
确保我输入的所有命令都不会丢失,我偏爱命令行软件,但是记命令会消耗我很多脑细胞,所以我让shell替我记住.我只要记住按Ctrl+R可搜索历史就好了.
其他有用的选项还很多.这只是个例子,说明Bash是可编程的.
Gnome,KDE是绝对不会考虑的.我使用更轻量级的i3.
i3的优点是平铺桌面(例如左边开一个窗口写代码,右边开个窗口看PDF文档)极为方便,学习曲线很低(同类软件我大概试用过10多个了,包括主流的Gnome,KDE,XFCE4).
安装软件在包管理系统的帮助下很简单.麻烦的是最新软件有时候不稳定,这通常是因为软件的配置文件更新引起的.
Linux的软件默认配置文件在/etc/目录下.我使用分布式版本控制软件git管理/etc目录,分布式版本控制系统好处很多,最大好处就是数据到处有完整备份,非常安全.具体细节请参考wikipedia.
在Linux上更新完系统或者安装最新软件包后,可以考虑手动将/etc目录下的文件用git备份.
sudo git add /etc/
sudo git commit -am "backup"
一旦某软件工作不正常了,可以检查其/etc下默认配置文件的修改纪录,将配置文件恢复到上一个正常工作的版本.
sudo git log /etc/mysql/my.cnf #check history sudo git checkout commit_ref(version) /etc/mysql/my.cnf #restoren file
我也用git将个人用户的配置文件(在/home/username/下的配置文件)备份到github的服务器上.这里必须用第三方服务器同步配置,因为我使用多台电脑.
具体操作可写成长篇大论,这里不展开了.
最新版本的软件可能不稳定,这时降级是必要的.
对于Arch Linux来说很简单,请参考Archwiki,实际上很简单,安装名为downgrade的软件,然后让它干所有的体力活就行了.
packer downgrade
对于其他主流的Linux发行版如Centos或者Ubuntu来说,由于包的测试周期比较长,所以不会有不稳定的问题.
对于小众版本来说(例如我现在实用Gentoo Linux),更好的策略是不要随意使用最新版本的软件.
电子图书,多媒体文件用专业的云备份服务更好,我推荐Dropbox.
Dropbox实在是妙用无穷(例如,国外有人把Dropbox和git结合使用),我只是用了其最简单的功能.
顺便说一下,国内的服务不要用,安全原因,不言自明.
不用经常作,又有云备份,又有分布式版本控制系统,怕什么.
备份整个硬盘是用Clonezilla,只是备份操作系统的话用以下命令,
tar zcvpf mylinux.tgz --exclude=/proc/* --exclude=/lost+found --exclude='mylinux.tgz' --exclude=/mnt/* --exclude=/home/username/* --exclude=/sys/* /
我建议用前者,因为省事.
假设你采用clonezilla备份操作系统,我建议将/目录(操作系统目录)和/home目录放在两个分区内.
如果能够按照我前面的少而精的原则选择软件的话,操作系统目录的分区并不需要很大(8G足够了),目前我的常用软件和操作系统的所占空间控制在3G左右(我的例子比较极端,因为我的netbook只有4G硬盘),这样clonezilla的操作就很快.
阅读官方和社区文档.
Ubuntu社区的特点用户多,少见的bug一般都会在该社区报告.缺点是其文档深度不够.
Arch Linux和Gentoo Linux的特点是用户一般水准较高,所以文档技术含量很高.
我虚拟机软件使用VirtualBox,虚拟机为Windows XP,该操作系统我会定期更新安全补丁.软件只安装了IE和firefox.该操作系统我只用来操作网络银行.每次操作完毕,我会重置虚拟机状态到操作前的snapshot.
即使采用了上述做法,一年中也会有一次倒霉.就是我要用的某个版本的某个软件出问题了.没人能帮忙,不能降级,改软件配置也没用,也没有可用的错误信息.
问题看起来很难,事实上5分钟就能搞定.这往往是因为某软件需要的第三方库的版本出问题了.
比如说firefox不能启动,运行如下命令调试,
strace -o err.txt firefox
读一下err.txt就可以知道是哪个库出问题了.相信我,这是不需要任何编程知识的,猜加google就可以了.
你知道哪个库文件出问题了(保险起见,ldd firefox确认一下).比如/usr/lib/libpng.so.14找不到,简单的解决办法是用另一个版本的库文件代替.
如果/usr/lib/libpng.so.15是存在的,我们可以用该库顶替libpng.so.14,
sudo ln -s /usr/lib/libpng.so.15 /usr/lib/libpng.so.14
通常这样就行了.
万一冒名顶替不行,我们就必须根据丢失的库文件查找需要安装的软件包.
以Arch Linux为例(其他发行版也有类似功能):
pkgfile libpng
pkgfile属于软件包pkgtools,所以你必须安装pkgtools,
packer -S pkgtools-git
解决方法很简单,用常见的Linux启动光盘启动,然后chroot,其作用是以指定目录作为操作系统根目录(root directory),然后以此根目录为基准建立一个新的环境.
细节请参考https://wiki.archlinux.org/index.php/Change_Root.
比如说我升级kernel后系统启动失败,而老的kernel没有备份,我可以光盘启动电脑,然后chroot,再使用上文所提的工具升级或者降级kernel.
书籍 | 评论 |
---|---|
Advanced Bash-Scripting Guide by Mendel Cooper | 经典,不断更新中.其提供的.bashrc模板很有价值,手册完全读完没必要 |
The Art of Unix Programming by Eric Steven Raymond | 开拓思路,当八卦看,和编程实际上关系不大 |
The Debian Administrator's Handbook | 很好.捡对你有用的章节看. |
等你的问题了.
这是我的twitter和google plus,也可以通过我的email
我的主力博客为http://blog.binchen.org.