我的Linux日记

我的Linux日记[五]: bash的小技巧

本文在署名-非商业性使用-相同方式共享 3.0版权协议下发布, 转载请注明出自aifreedom.com

  1. 我的Linux日记[一]: 让Ubuntu完全支持中文
  2. 我的Linux日记[二]: 重启后设备无法正常工作
  3. 我的Linux日记[三]: 系统为何无法启动
  4. 我的Linux日记[四]: 在Linux下播放多媒体文件
  5. 我的Linux日记[五]: bash的小技巧

bash是Ubuntu的默认终端, 也是大部分Linux发行版和Mac OS X的默认终端. 这篇日志记录了我在网上找到的和自己在使用中发现的一些使用技巧.

首先是一些快捷键
up & down 依次翻阅曾输入过的命令
ctrl + r 搜索曾输入过的命令, 但我不常用这个, 因为我有更方便的命令
ctrl + a 光标移动到行首
ctrl + e 光标移动到行尾, 这两个快捷键是Emacs风格的
ctrl + u 剪切光标之前的内容
ctrl + k 与上一个相反, 剪切光标之后的内容
ctrl + y 粘贴以上用以上两个快捷键剪切的内容
ctrl + w 删除光标左边的内容
ctrl + l 清屏, 和clear命令效果一样

我再来说说上面提到的更方便的搜索曾输入过的命令的方法. 在bash中输入过的命令都会保存在~/.bash_history里, 搜索这个文件就能搜索输入过的命令了. 在这里我们使用egrep这个支持正则表达式匹配的程序搜索.

cat ~/.bash_history | egrep REGEXP

这个命令可以显示匹配”REGEXP”的, 曾输入过的命令. 而如果使用ctrl + r搜索, 可能要按很多次ctrl + r才能找到需要的命令.

这个命令里包含了一个”|”符号, 这是在使用bash支持的”管道”功能. 管道, 就像是将程序输出的数据流装进了管子, 让它流向我们指定的地方(下一个程序). 比如这里, 我先将~/.bash_history的内容读取出来, 将它导入egrep, 让egrep用我输入的REGEXP来匹配这些数据. 再看一个用到管道功能的命令:

ls -l | more

“ls -l” 显示当前目录的文件和子文件夹的详细信息, “more” 可以让它分页显示. 是不是很方便?

bash里还有一个很有用的功能是”重定向”, 它可以重定向程序的标准输入输出和标准错误输出.

例如:

ls -l > ls.txt

和上一个命令差不多, 不过这次是把 “ls -l” 显示出的内容写入了 “ls.txt” 这个文件里. 如果把上面的 “>” 换成 “>>” , 就变成了把那些显示的内容添加到 “ls.txt” 的末尾, 而不是覆盖这个文件.

好了, 回到刚才说的那个搜索输入过的命令的命令(绕口令..). 我仍然嫌每次写这么长的命令太麻烦, 于是我编辑了一下”~/.bashrc”这个文件. 在它里面添加了

alias shis='cat ~/.bash_history | egrep'

这样一行. 之后我想使用上面的命令就只需要用”shis”这个命令加上我要搜索的正则表达式就好了.

上面提到的”~/.bashrc”文件帮了我很大的忙, 因为它是你打开bash时会被调用的一个文件. 在里面写上一些常用命令的缩写, 在调用的时候就方便很多. 我的”.bashrc”里有这些缩写, 一部分是系统自带了的, 一部分是我在网上看到的.

Bash语言: My .bashrc
# enable color support of ls and also add handy aliases
# 启用ls和grep等命令的自动高亮功能
if [ “$TERM” != “dumb” ] && [ -x /usr/bin/dircolors ]; then
eval “` dircolors -b`”
  alias ls=‘ ls –color=auto’
  alias dir=‘ ls –color=auto –format=vertical’
  alias vdir=‘ ls –color=auto –format=long’

  alias grep=‘ grep –color=auto’
  alias fgrep=‘ fgrep –color=auto’
  alias egrep=‘ egrep –color=auto’
fi

# some more ls aliases
# 很方便的, 而且很容易理解吧
alias ll=‘ls -l’
alias la=‘ls -A’
alias l=‘ls -CF’

# my aliases
alias rm=‘rm -i’ # 删除前需要确认, 防止误删
alias ..=‘cd ..’
alias server_name=‘ssh -v -l username server’ # 对常用ssh的人很有用, username和server请自己替换
alias shis=‘cat ~/.bash_history | egrep’ # 刚刚说过的

这里的代码高亮用到了代码发芽网的功能, 比WP的<code>强大, 但代码长度也要长些.

好了, 再额外提一个我知道的命令.

find . -perm /u+x -type f -exec rm {} \;

删除当前目录里所有的可执行文件. 在我清理存放我做题的文件夹时很有用, 因为我会编译一堆没有扩展名的可执行文件, 但删除时却也可以用一条命令全删除, 很好吧?

我的Linux日记[四]: 在Linux下播放多媒体文件

本文在署名-非商业性使用-相同方式共享 3.0版权协议下发布, 转载请注明出自aifreedom.com

  1. 我的Linux日记[一]: 让Ubuntu完全支持中文
  2. 我的Linux日记[二]: 重启后设备无法正常工作
  3. 我的Linux日记[三]: 系统为何无法启动
  4. 我的Linux日记[四]: 在Linux下播放多媒体文件
  5. 我的Linux日记[五]: bash的小技巧

在Linux里工作累了, 你可能会想听听歌, 看看电影. Linux对多媒体文件的支持怎么样呢?

我觉得已经不错了, 至少能满足我的需求了.

我没有钱去购买好的显卡, 大容量的硬盘, 租用高速的网线, 或者购置 BD 光驱. 因此我不看高清视频. 如果你需要在 Linux 下欣赏高清视频, 我无法给你提供任何帮助. 我只需要听听歌, 看看 DVD, 偶尔从互联网上下载一些 DVD-RIP.

媒体播放器, 我推荐使用 SMPlayer. 这是MPlayer的一个外壳, SMPlayer 可以设置界面的语言(中文语言包里有部分菜单未汉化), 界面风格. 当然, 作为一个前端程序, 这是它该有的功能. MPlayer 之所以强大, 是因为它拥有 w32codecs 这样一个强大的解码器. 它可以 WMV, RM, RMVB, DivX 等等很多编码格式. 至于播放mp3等格式的解码器, 因为我之前用 Totem 播放 mp3 的时候, 系统自动从源中更新了解码器, 但我不清楚MPlayer是不是也调用了这个解码器. 希望清楚的同学告诉我一下.

你可以从 apt 源中获取 SMPlayer, 可以在这里找到最新的 w32codecs 的下载地址, 如果你和我一样在使用 ubuntu, 请下载 deb 包后安装.

但此时, 你可能还无法播放网页里嵌入的音频和视频文件. 没关系, 只需要在 apt 的源里找到一个叫”mozilla-mplayer”的程序安装上.

sudo apt-get install smplayer mozilla-mplayer

如果你使用 Firefox, 你可能会需要一个叫做 “MediaWrap” 的扩展来让你的 Firefox 支持更多的嵌入式多媒体文件. 它能够将 ActiveX 控件方式的网页内嵌媒体转换成 Firefox 能够支持的 Plugin 方式, 从而使 Firefox 也能够象 IE 一样正常播放它们. 你可以在这里下载到这个 Firefox 扩展.

但我发现SMPlayer虽然能支持 ape 解码, 但不支持使用cue分轨. 于是我安装了 wine 1.0, wine 了 foobar 2000 来播放 ape 文件. 我发现听歌还是foobar用着比较顺手! 我会在这个系列的下一篇日志中介绍 wine 的安装与使用(剧透: 在我配置 wine 的过程中发生了让我莫名其妙的事..). 这个下一篇不会让你等太久的!

下面是一些截图.

1. SMPlayer 的界面

Snapshot of SMPlyer

2. wine 出来的 foobar

foobar in wine

我的Linux日记[三]: 系统为何无法启动

本文在CC版权协议下发布, 转载请注明出自aifreedom.com

  1. 我的Linux日记[一]: 让Ubuntu完全支持中文
  2. 我的Linux日记[二]: 重启后设备无法正常工作
  3. 我的Linux日记[三]: 系统为何无法启动
  4. 我的Linux日记[四]: 在Linux下播放多媒体文件
  5. 我的Linux日记[五]: bash的小技巧

这个系列的文章很久都没有更新了, 不是因为我对学习Linux和继续记录我的心得失去了信心. 相反, 我将继续坚持下去, 因为当你开始使用Linux后, 你会发现你无法拒绝Freedom的诱惑.

这件事情要从一个月之前说起, 觉得我啰嗦的可以跳过这三段, 直接切入正题. 当时, 我的电脑在我玩游戏时就会死机. 由于在这之前我并没有更改过任何配置, 也未重刷过显卡BIOS或尝试最新的显卡驱动, 我自然会认为是显卡散热不佳引起的自保护. 于是在通电开机的状态下, 我打开了电脑的机箱盖, 让机箱平躺在地上. 可不幸的事就这样发生了, 我放在桌上的机箱螺丝从桌边滚落, 而且正好落在了放在地上的机箱里, 短接了机箱里的某个部分. 主板毫不含糊, 立刻掉电, 留下我一个人面对黑洞洞的显示器..

然后电脑就再点不亮了, 我初步判断是主板烧了. 因为是过了包修期的板子了, 只有等周末的时候去电脑城二手市场修了, 而是否修得好, 我不作指望.. 不过万幸的是在仅仅更换了一个三极管后, 这块主板又活过来了, 而我最终为这颗螺丝付出了30RMB..

在这之后对显卡的检测中, 发现它确实是坏了. 但只是GPU的3D加速部分出现了问题, 也就是说除了不能玩游戏, 这家伙都挺能干的.. 所以我也就把它暂时留了下来, 等它彻底报废了再说吧..

但在这之后, 我的Ubuntu就进不去了. 在启动的时候会在进度条刚开始读的时候卡住, 而用Ubuntu 7.10的LiveCD启动就会出现一个”BusyBox”的shell(不知道我这说法对不对..), 屏幕上显示类似下面的内容.

BusyBox v1.1.3 (Debian 1:1.1.1_5 ubuntu 7) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs)[66.936475]ata 3.00 failed to set xfermode (err_mask=0x40)
[102.082200] ata3.00:failed to set xfermode (err_mask=0x40)
[137.227897] ata3.00:failed to set xfermode (err_mask=0x40)
[137.897565] 8139 cp 0000:02:0c.0:This (id loec:8139 rev 10) is not an 8139c+ compatible chip
[137.897614] 8139 cp 0000:02:0c.0:Try the "8139too" driver instead

然后就停下来了.. 我最初认为是显卡坏了, Ubuntu进不去了(如此不可能的想法怎么出来的..). 但我后来发现Ubuntu 6.06的LiveCD可以进去并且可以安装(我把原来装的7.10删了..). 直到昨天, 我想起来去Google搜一搜才真正明白问题所在.

事实上, 是因为在修主板时, CMOS被清空了, 而CMOS里对SATA的设置也归到了默认设置. 只要把SATA模式的选项从”Enhance mode”改成”Combine mode”或者”Auto”就可以了. 就这么简单的一个设置, 确实让我郁闷了很久.

我的Linux日记[二]: 重启后设备无法正常工作

本文在CC版权协议下发布, 转载请注明出自aifreedom.com

  1. 我的Linux日记[一]: 让Ubuntu完全支持中文
  2. 我的Linux日记[二]: 重启后设备无法正常工作
  3. 我的Linux日记[三]: 系统为何无法启动
  4. 我的Linux日记[四]: 在Linux下播放多媒体文件
  5. 我的Linux日记[五]: bash的小技巧

其实这篇早就该写了的.. 因为懒.. 一直拖到现在才写.. 不过我真的很久没进Ubuntu了, 因为在用户体验上, Windows远胜过了Linux. 我仍只能和大多数人一样, 用Windows, 而只是学Linux.

上次说到了我解决了安装, 中文语言支持, apt源的问题, 我在那篇日志里说的灵异的网络问题是我的网卡(一块板载的, 一块是8139的)总是一会能用, 一会又不能用. 开始的时候没有发现网卡罢工的规律, 检查网卡的连线, 把机箱开着弄了半天. 后来发现, 总是在把电源关掉, 把网卡拔掉或者插上去之后就又能用了, 在从Windows重启之后网卡就罢工了.

不知道你注意过没有, 从Windows里选择重启的时候, 开机自检的某些环节是被跳过了的: 屏幕上不会显示CPU的频率和内存的大小, 我的两台台式机都是这样. 曾在我的电脑上装过破解的Mac OS X, 但重启功能不能用, 直到我按照某篇帖子的指导更改了重启时发送给BIOS的指令后, Mac OS X才能正常重启. 这让我想到了会不会是Windows和Linux在重启时向BIOS发送的指令不一样? 但我没在网上找到这方面的资料, 有清楚的朋友能告诉我一下么?

最后, 我每次从Windows重启进入Ubuntu后都会再从Ubuntu里重启一次. 麻烦..

我的Linux日记[一]: 让Ubuntu完全支持中文

本文在署名-非商业性使用-相同方式共享 3.0版权协议下发布, 转载请注明出自aifreedom.com

  1. 我的Linux日记[一]: 让Ubuntu完全支持中文
  2. 我的Linux日记[二]: 重启后设备无法正常工作
  3. 我的Linux日记[三]: 系统为何无法启动
  4. 我的Linux日记[四]: 在Linux下播放多媒体文件
  5. 我的Linux日记[五]: bash的小技巧

现在终于有时间来好好研究Linux了. 看到从当当买回的那一盒FC 5, 想起前不久FC 8都发布了, 才发现时间过的好快, 而我对Linux却依然陌生. 我会在这个系列日志中记录我学习Linux的过程, 是以时间为线索贯穿的. 而对某些问题的深入研究, 我会在之后以专题的形式记下, 当然, 前提是我已经研究清楚了. 从ubuntu的网站上下载了最新的镜像, 刻录, 安装, 结果卡住了… 因为家里老的那台电脑内存太小(224M), 而ubuntu-7.10-desktop-i386.iso的是在LiveCD下安装的, 至少需要256M内存. 要用字符安装只能重新去下载ubuntu-7.10-alternate-i386.iso的镜像,我懒.. 最终还是在另一台配置好的电脑上装了.. (后来发现alternate的安装界面其实也很友好的, 内存小了的话用这个很好的.) 重新分区, 安装的过程很顺利, 只是进度到100%后便再也无变化, 其实已经安装好了, 直接重启就可以. 可是进入ubuntu之后无法用pppoe拨号, 在我设置网络的过程中发生了一些灵异事件, 后面会再次说到. 恩.. 现在有网上了, 但我发发现scim里没有中文输入法, 而系统菜单里的Language Support里也没有Chinese可选, apt-get的源里也没有language-support-zh下载. 还好有网络, 还好有在线输入法, 让我能用google找到我要的答案. 在终端里输入

sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup
sudo gedit /etc/apt/sources.list

把现有的源列表备份了, 然后把新的源复制进去. 这是cn99的源, 是电信的网络, 推荐电信的用户使用.

deb http://ubuntu.cn99.com/ubuntu gutsy main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu gutsy main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu gutsy-backports main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu gutsy-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu gutsy-proposed main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu gutsy-proposed main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu gutsy-security main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu gutsy-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu gutsy-updates main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu gutsy-updates main restricted universe multiverse

这是ubuntu中国官方源, 服务器位于上海, 也是中国电信的网络.

deb http://cn.archive.ubuntu.com/ubuntu gutsy main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu gutsy main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu gutsy-backports main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu gutsy-backports main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu gutsy-proposed main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu gutsy-proposed main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu gutsy-security main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu gutsy-security main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu gutsy-updates main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu gutsy-updates main restricted universe multiverse

网通的用户可以使用台湾的源, 速度如何我无法测试. 台湾大学的源

deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy main restricted universe multiverse deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy main restricted universe multiverse deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-updates main restricted universe multiverse deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-updates main restricted universe multiverse deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-backports main restricted universe multiverse deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-backports main restricted universe multiverse deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-security main restricted universe multiverse deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-security main restricted universe multiverse deb http://ubuntu.csie.ntu.edu.tw/ubuntu gutsy-proposed main restricted universe multiverse deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu gutsy-proposed main restricted universe multiverse

ubuntu 台湾官方源(服务器实际上也是位于台湾大学的)

deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-updates main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-updates main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-backports main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-security main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-security main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu gutsy-proposed main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu gutsy-proposed main restricted universe multiverse

还有一个ubuntu-cn的源, 不知有什么用, 据说很重要, 可以用cn99的.

deb http://ubuntu.cn99.com/ubuntu-cn/ feisty main restricted universe multiverse

设置完之后再在终端更新源内容.

sudo apt-get update

这时再输入

sudo apt-get install language-support-zh

就可以更新中文支持了. 重启之后(这个我记不请了), scim就有中文输入法了, 各种菜单也都变成中文的了.