2012/1

bash 反斜线的一个疑问

ABS 里在讲解 echo 的转义时,给出过下面这几个例子:

bash-4.2$ echo \z
z
bash-4.2$ echo \z
z
bash-4.2$ echo echo \z
z
bash-4.2$ echo echo \z
z

我们知道反引号会把里面命令的输出直接传递给外面的命令,那么,既然前两个echo的输出一样,为什么后面就不一样呢?这里一定发生了什么我们没有注意到。我来根据我的理解来解释一下。

从第一个开始看,”\z”中的第一个反斜线表示转义后面的那个反斜线,所以输出””,”z”直接输出,最后得到“z”。

第二个也不难,”\z”中前两个反斜线同样输出””,后面剩下”z”,因为 echo 默认不解释转义,所以就算是”z”有特殊含义也不会被解释,因此”z”中的””会把”z”的特殊含义(本身就没有)去掉,然后输出”z”,最后得到”z”。

从第三个开始就复杂了。因为有了 subshell,所以里面的反斜线一定被处理过两次:一次是 subshell 中,另一次是外面的 shell。外面的shell开始处理,”\”同样被处理成””,处理完成后得到:echo echo z;然后 subshell 开始执行里面的”echo z”,处理””然后输出z,最后外面的shell 看到的是 echo z,输出”z”,结束。

第四个更复杂一些,外面的shell处理反斜线后得到:echo echo \z,前两个”\”依旧被解释成””,剩下的”z”会原封不动,因为”z”对于外面的shell来说没兴趣,它只对”`”或”$”这样的转义感兴趣!subshell 执行“echo \z”,同第一个例子,输出z,这时外面的shell看到的是echo z,输出”z”,结束。

例子虽简单,却能反映出我们确实对 bash 还有一些角落的地方没有理解清楚。理解 ABS 后面的例子就留给你作为课后作业了。:-)

2012 年祝你幸运

2011 年马上就要过去了,回顾过去的一年,我发现最正确的决定就是离开北京。北京的空气污染已经到了非常严重的程度,奉劝各位能不去北京就别去,别拿自己的身体健康开玩笑。在这个神奇的国度,能让自己健康地活着本身就是一种很大的成功!

在 2011 年中,中华民族已经到了最坑爹的时候,所以在 2012 年里,祝愿大家都能有新鲜的空气呼吸,能有正常的牛奶喝,能有健康的食用油吃,能有一所房子不被强拆,能有个孩子是亲生的,能扶起老太不被讹,最关键的是,能让自己不被活埋!

虽然你仍然不可能像对岸一样能投上一票,但是你能选择离开。所以,有钱有本事的还是尽早移民吧!没本事的就好好练习游泳,游到对岸去!要自由从来都不丢人,“我们这儿”才丢人!

说了那么多,我觉得,在所有的新年祝福辞里,“祝你幸运”是最好的,也是最现实的祝福了。所以,祝你 2012 年幸运!

最后祝愿所有的五毛,全家都搬到朝鲜去,早日体会到社会主义的优越性!

2012 年,要幸福,更要自由。

扩展文件属性

我们知道,在 Linux 上最基本的文件属性是,

# ls -l foo
-rw-r--r--. 1 root root 0 Jan 19 00:03 foo

可以通过chmod 命令来更改,ls -l 来查看。

除此之外,一些文件系统上还提供额外的属性,比如 ext4 提供了额外的属性,比如 append only (a), compressed (c), immutable (i) 等属性,这些属性可以通过 e2fsprogs 软件包提供的 chattr(1) 来改变,lsattr(1) 来查看。更多属性也可参考 chattr(1)。比如:

# chattr +i foo
# lsattr foo
----i--------e- foo

这个是和文件系统密切相关的,一是因为 chattr 来自 e2fsprogs,二是因为它调用的系统调用也是和文件系统相关的一个 ioctl,可以看下面 strace 的输出:

open("foo", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 3
ioctl(3, EXT2_IOC_SETFLAGS or EXT3_IOC_SETFLAGS or FIONCLEX, 0xfffc347335c) = 0
close(3)                                = 0

还有一种文件属性叫扩展文件属性,eXtended ATTRibutes,也就是通常所说的 xattr。和前一种相比,这个就不那么和文件系统密切相关了,但是仍然需要文件系统的支持。这个是通过系统调用 getxattr(2) 和 setxattr(2) 来实现的,对应的命令是 getfattr(1) 和 setfattr(1),来自 attr 软件包。看例子:

# mount -o remount,acl,user_xattr /home
# touch bar
# setfattr -n user.comment -v "this is a comment" bar
# getfattr bar
# file: bar
user.comment

# getfattr bar -n user.comment
# file: bar
user.comment="this is a comment"

需要注意两点:一,挂载时需要加 "user_xattr" 选项;二,name 是有命名空间的,并不是任何命名空间都可以,比如,
# setfattr -n my.comment -v "this is my comment" bar
setfattr: bar: Operation not supported
用户只能用 user.* 名字,而后面的 ACL 则会用 system.posix_acl_access。当然了,SELinux 也会用到 xattr,security.*。 基于此,ACL 实现了访问控制列表,也就是说,设置某些用户的文件权限不再依赖于用户所在的组了,省去了不少麻烦。对应的命令是 setfacl(1) 和 getfacl(1) ,来自 [acl 软件包](http://acl.bestbits.at/)。从下面 strace 的输出,也可以看出它们确实是基于 xattr 的:
getxattr("foo", "system.posix_acl_access", 0xfffe455cca0, 132) = -1 ENODATA (No data available)
stat("foo", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
setxattr("foo", "system.posix_acl_access", "x02x00x00x00x01x00x06x00xffxffxffxffx02x00x06x00x00x00x00x00x04x00x04x00xffxffxffxffx10x00x06x00xffxffxffxff x00x04x00xffxffxffxff", 44, 0) = -1 EPERM (Operation not permitted)

之所以出现 ENODATA 是因为挂载文件系统时我没有指定”acl”,需要重新挂载:mount -o remount,acl /home 然后重新创建文件,因为旧的文件依旧是没有 ACL的。

抵制 SOPA

世界上最遥远的距离不是生与死,而是人家那儿都开始抵制 SOPA 了,组建盗版党了,我们这儿(张绍刚同志对此有贡献)还在热火朝天地搞 GFW 呢!

下面是几大网站今天的首页,最后一张截图最能说明问题!

gnu.org (标题变成了01000100010010010100011101001001010101000100000101001100)

wikipedia.org

fedoraproject.org

reddit.com

wordpress.org

kindle 相关

上周末在淘宝上拍了一个 Kindle DXG,今天终于拿到手了。买之前做了大量的功课,经过了N次纠结之后最终敲定买 DXG。一是因为,我个人认为看书嘛,屏幕好一点儿很重要,DX 系列是大屏幕;二是,我感觉 WIFI 可有可无,我又没打算拿它当 fire 用,而且自带的 3G 是免费的。所以最后选择了 Kindle DXG。

网上有很多写 kindle 的文章,我就不再啰嗦了,把我看的一些文章整理一下和大家分享。

1. 出手前对比:

Compare Kindles:www.amazon.com/gp/product/B002Y27P3M/ref=sv_kinh_0
Kindle 3 vs. Kindle DXG:http://www.conanblog.me/life/kindle-3-vs-kindle-dxg/
入手了个Kindle:http://www.xuwenhao.com/2011/06/08/bought-a-kindle-and-ideas-on-ebook/
入手Kindle Fire,简单评测:http://jayshao.com/kindle-fire/
关于入手kindle一记:http://blog.yousri.org/2011/12/07/something-about-buying-kindle.html
玩物不能丧志——Kindle Fire手记:http://www.baizhiheizi.com/archives/497
入手 Kindle:http://blog.solrex.org/articles/bought-a-kindle.html
没有3G的Kindle是残缺的,不推荐国人买纯WIFI版:http://www.v2ex.com/t/10062

2. 购买:

我是在老大推荐的一个淘宝店买的:http://5friends.taobao.com/

其它店铺请自行搜索。

3. 越狱和汉化:

Kindle DXG 完美中文支持:http://www.conanblog.me/it/kindle-dxg-perfect-font-hack/
Kindle DXG 汉化:http://hardywang.wordpress.com/2011/12/25/kindle-dxg-%E6%B1%89%E5%8C%96/
Kindle 全型号、全版本,汉化升级包 完全防呆 完美功能 终结版: http://is.gd/cFAy5A
Kindle Touch 5.0系统越狱:http://irising.me/2011/12/12591/

4. 各种折腾:

Kindle 3注册全过程:http://www.hiadmin.org/shares/kindle3/
Kindle-DXG升级到3.2.1的好处:http://laoyang.info/why-you-should-update-kindle-dxg-to-3-2-1/
如何用Kindle看RSS:http://laoyang.info/kindle-rss/
推荐多看系统 for Kindle DXG:http://zhiqiang.org/blog/it/duokan-for-kindle-dxg.html

5. Kindle 电子书:

Kindle电子书搜索:http://forfrigg.com/
kindle专用搜索工具:http://kindle.youliao.org/
Free Kindle Books:http://blog.booksontheknob.org/p/kindle-free-reads-list.html
iKindle:http://ikindle.mobi/
Kindle4RSS:http://kindle4rss.com/
读览天下:http://www.dooland.com/

6. Kindle 论坛:

豆瓣小组:http://www.douban.com/group/Kindle/
电子书论坛:http://bbs.mydoo.cn/forum.php?mod=forumdisplay&fid=28&page=1
多看论坛:http://bbs.duokan.com/forum/
Hi! PDA:http://www.hi-pda.com/forum/