十月 7th, 2009
《Linux命令详解手册》勘误
Fedora® Linux® TOOLBOX: 1000+ Commands for Fedora, CentOS and Red Hat Power Users
说明:本勘误仅对以下版本有效。欢迎各位批评指正,协助维护本勘误,勘误建议或编辑权限申请可邮至fedora.linux.toolbox@gmail.com。
勘误地址:http://docs.google.com/View?id=ajghxkgt669z_121cvfczsfc
【作 者】 Christopher Negus; Franois Caen
【译 者】 李琳骁
【丛 书 名】 图灵系统与网络管理技术丛书
【出 版 社】 人民邮电出版社 【书 号】 9787115211330
【上架时间】 2009-9-11
【出版日期】 2009 年9月 【开 本】 16开 【页 码】 246 【版 次】1-1
错误来源:
- 译者翻译不当
- 英文版的错误大部分已在翻译时做了修正(主要通过上下文推断),但仍有部分遗漏
- 排版过程中引入的字体不一致问题
- 排版所用译文与译者提供的版本不一致
Topics: | 评论(0)
七月 8th, 2009
小家伙快九个月了,白粥、玉米糊等辅食仍一概无视。拿着小块面包,大人张嘴“索要”,小家伙倒往大人嘴里放,小可人儿,爸爸妈妈可是宁愿你自己大口大口的吃。
小家伙的主食仍是母乳,以前半个一个小时的吃,现在十几二十分钟就能搞定,妈妈也稍稍轻松了些,但晚上还是很累,隔一段时间就得观察一下小家伙,是不是抱着外婆做的被子舔的津津有味。在吃喝上,开心的第二爱好是开水,咕咚咕咚能喝下五六十毫升,当然,喝得多,漏的也多。:)
周日傍晚,全家游西湖,自西泠桥,一路风景,满塘荷花,行至放鹤亭,小家伙饿了,找了面朝白堤的长椅,大人们围坐一起,小家伙就吃起奶来,双眼紧闭,冷落着跟前的绿叶荷花。小家伙饱了,基本上就睡熟了,这是开心的习惯。
爸爸抱着,石板踏着,知了声声,柳条飘飘,小家伙睡的香吧。出了孤山后山路,把小家伙放到推车里躺着,大人推着车,过锦带桥,未及断桥,车里的小家伙仰着头想起来了,这么热闹,怎能错过。
Topics: life | 评论(1)
五月 23rd, 2009
最近在2.6.10内核下调试硬盘分区(FAT32文件系统)保护功能,为保护FAT表、根目录和目录项等重要区域,应用程序不得操作这些区域,其中一项就是禁止更新文件访问时间(会更新目录项),使用mount()系统调用时却出现诡异现象。
[ 测试代码 ]
1: int main()
2: { 3: ...
4:
5: mount("/dev/sda1", "/mnt/sda1", "vfat", 0, NULL); 6:
7: ...
8:
9: /* 读/写sda1分区里的文件 */
10:
11: sync();
12:
13: return 0;
14: }
[ 内核修改 ]
1: /** -> fs/inode.c
2: * update_atime - update the access time
3: * @inode: inode accessed
4: *
5: * Update the accessed time on an inode and mark it for writeback.
6: * This function automatically handles read only file systems and media,
7: * as well as the "noatime" flag and inode specific "noatime" markers.
8: */
9: void update_atime(struct inode *inode)
10: { 11: struct timespec now;
12:
13: if (IS_NOATIME(inode))
14: return;
15: if (IS_NODIRATIME(inode) && S_ISDIR(inode->i_mode))
16: return;
17: if (IS_RDONLY(inode))
18: return;
19:
20: + if (inode->i_sb) { 21: + if (!strcmp(inode->i_sb->s_type->name, "vfat"))
22: + __backtrace();
23: + }
24: now = current_kernel_time();
25: if (inode_times_differ(inode, &inode->i_atime, &now)) { 26: inode->i_atime = now;
27: mark_inode_dirty_sync(inode);
28: } else { 29: if (!timespec_equal(&inode->i_atime, &now))
30: inode->i_atime = now;
31: }
32: }
测试程序第一次执行时,内核会打印如下调试信息:
1: <4>Function entered at [<c009443c>] from [<c005bc18>] /* c009443c T update_atime */
2: <4> r6 = 00000000 r5 = 00000000 r4 = 00000200
3: <4>Function entered at [<c005b6c4>] from [<c005e2b8>] /* c005b6c4 T do_generic_mapping_read */
4: <4>Function entered at [<c005e0c0>] from [<c005e41c>] /* c005e0c0 T __generic_file_aio_read */
5: <4>Function entered at [<c005e388>] from [<c0078114>] /* c005e388 T generic_file_read */
6: <4> r9 = C3026000 r8 = C3027F78</span> r7 = C005E388 r6 = BEFFF560
7: <4> r5 = C3CE0A80 r4 = 00000200
8: <4>Function entered at [<c0078050>] from [<c0078360>] /* c0078050 T vfs_read */
9: <4> r8 = C0025154 r7 = 00000003 r6 = C3CE0A80 r5 = 00000000
10: <4> r4 = 00000000
11: <4>Function entered at [<c0078318>] from [<c00249c0>] /* c0078318 T sys_read */
12: <4> r6 = 00000200 r5 = BEFFF560 r4 = 00000003 /* 注释部分结合System.map文件得到 */
接着修改测试代码的mount()调用:
1: - mount("/dev/sda1", "/mnt/sda1", "vfat", 0, NULL); 2: + mount("/dev/sda1", "/mnt/sda1", "vfat", MS_NOATIME, NULL);
编译并再次执行测试程序,内核仍打印上面的调试信息,着实让人摸不着头脑。重启Linux系统,执行修改后的测试程序,内核便不再打印上述调试信息!
……
复查测试代码,查看mount()手册页,看到下面几段说明(man-pages 2.77):
MS_REMOUNT
Remount an existing mount. This allows you to change the mountflags and data of an existing
mount without having to unmount and remount the file system. source and target should be the
same values specified in the initial mount() call; filesystemtype is ignored.
The following mountflags can be changed: MS_RDONLY, MS_SYNCHRONOUS, MS_MANDLOCK;
before kernel 2.6.16, the following could also be changed: MS_NOATIME and MS_NODIRATIME;
and, additionally, before kernel 2.4, the following could also be changed: MS_NOSUID,
MS_NODEV, MS_NOEXEC.
聪明的你,想到问题在哪儿了吧。:P
Topics: code | 评论(1)
三月 11th, 2009
前阵子处理FAT32文件系统和硬盘相关的任务,主要参考下面这两份资料:
- The FAT File System: FAT
- 透彻分析FAT文件系统!(一)
第二份资料尤其有用,详细分析了FAT文件系统在硬盘上的扇区布局。
Topics: tech | 评论(0)
三月 9th, 2009
前日,手机游下水道去了,还是挂我名下唯一一个CDMA号,于是准备补卡。
一进电信营业厅,好家伙,和省妇保医院有的一拼,临门口齐刷刷坐了几排人等着办理业务,立马打消继续等的念头,随手取了个号:时间12:03,116号,前面还有33人。整个营业厅有两名营业员负责办理业务。顺道回家吃午饭,半个多小时后,回到营业厅,提示正在处理92号。…………浏览了十几段新闻,十几分钟,两名营业员分别处理着两个业务。……13点13分,“漫长”的等待,终于叫到116号。补卡要50¥,或者充100¥免费换一张,当即决定注销号码,登记单上印着受理时间:13时20分。
1. 80分钟x2=160分钟,刨去期间因各种原因不等继续等的号5~10个,取8,处理25个号,6.4分钟/号;
2. 已叫过的号无应答,之后又允许插队,电信自己制订规则又破坏规则;
3. 补SIM卡要50¥,或者充值100¥(免费补卡吧?)。nnd,我要没带那么多钱,为了送钱改天又得扔上个把小时?(记得移动前两年只需充值50¥即可免费补卡,现在一年免费补一次卡)
4. 两名业务员兼卖充值卡,买充值卡不需要叫号……电信很重视“现金流”,值得称赞。
5. 销号仍扣除当月月租(预缴),管它什么月初月末,60天后凭身份证原件领取余额。
算了,没心情继续陪电信玩。
Topics: life | 评论(0)
一月 9th, 2009
Topics: tech | 评论(0)
一月 7th, 2009
新年伊始,阴雨连绵;感冒袭人,便便不止。
还没来得及总结2008,2009已经砸到头上,也让人切切实实的感受到了。新年第三天,不小心感冒,抽取纸用去近一包,鼻涕终于转咳嗽,这几天只能远远的看着开心。
现如今,谁不喊自己在"过冬"、"冬泳",谁就落伍,似乎就会先让金融风暴给卷走。咱开心也不甘人后,虽然暂时还没法喊"过冬",却着实在经历着自己的第一个冬天。最近几天,开心的消化好像出了点问题,一天便便2-4次,呈绿色状,形状也没之前的黄金屎"可人"。前天,开心状态不佳,一整天没怎么吃奶/睡觉,心疼得紧,偏偏我又感冒了,常常责怪是自己惹的祸。
Topics: life | 评论(0)
十二月 14th, 2008
礼拜二,心血来潮,在卓越亚马逊上订购了一批书, 昨天送到公司。把一箱书搁在自行车后座上,用手扶着,一路骑回家。到家兴冲冲找了健康称,12公斤!好家伙,难怪没有绳子系着,也老老实实待在后座。算下来40¥/kg不到,约莫五斤猪肉的价钱,看来控制“体重”无望了。
不算赠书,共计十五种,详见豆列。

Topics: reading | 评论(1)