0%

如何阅读一本书? – 范多伦,艾德勒

法国学者巴斯卡(Pascal)在三百年前就说过:“读得太快或太慢,都一无所获。”注:读书不能太快或太慢!要有所把握

介绍四种不同层次的阅读—基础阅读(elementary reading)、检视阅读(inspectional reading)、分析阅读、主题阅读(syntopical reading)。

注:四种层次的阅读

阅读越主动,效果越好。这个读者比另一个读者更主动一些,他在阅读世界里面的探索能力就更强一些,收获更多一些,因而也更高明一些。读者对他自己,以及自己面前的书籍,要求的越多,获得的就越多。

注:主动阅读

阅读的目标:为获得资讯而读,以及为求得理解

注:阅读的目标

运用阅读以增加资讯与洞察力,与运用阅读增长理解力

注:阅读的目标

要避免这样的错误—以为读得多就是读得好的错误—我们必须要区分出各种不同的阅读形态。这种区分对阅读的本身,以及阅读与一般教育的关系都有很重大的影响。

注:读的多并不一定是读的好

敏锐的观察、灵敏可靠的记忆、想像的空间,再者当然就是训练有素的分析、省思能力。这么说的理由在于:阅读也就是一种发现—虽然那是经过帮助,而不是未经帮助的一个过

注:阅读的技巧

二个层次的阅读我们称之为检视阅读(inspectional reading)。特点在强调时间。在这个阅读层次,学生必须在规定的时间内完成一项阅读的功课

注:第二个层次

分析阅读就是全盘的阅读、完整的阅读,或是说优质的阅读—你能做到的最好的阅读方式。如果说检视阅读是在有限的时间内,最好也最完整的阅读,那么分析阅读就是在无限的时间里,最好也最完整的阅读

注:第三个层次,分析阅读

如比较阅读(comparative reading)。在做主题阅读时,阅读者会读很多书,而不是一本书,并列举出这些书之间相关之处,提出一个所有的书都谈到的主题。但只是书本字里行间的比较还不够。主题阅读涉及的远不止此。借助他所阅读的书籍,主题阅读者要能够架构出一个可能在哪一本书里都没提过的主题分析。因此,很显然的,主题阅读是最主动、也最花力气的一种阅读。

注:最复杂的主题阅读

层次所可能碰到的各种紧急状况与问题的程度就会明白了。然而,除非我们在所有的阅读层次都投下努力,否则我们社会里有关阅读的整体。特别就一本教人如何阅读的书来说,它的读者必须有某种程度的阅读能力才行。

?(1)先看书名页

注:略读的方法1

2)研究目录页,对这本书的基本架构做

注:略读的方法2

3)如果书中附有索引,也要检阅一下—大多数论说类的书籍都会有索引

注:略读的方法3索引

4)如果那是本包着书衣的新书,不妨读一下出版者的介绍

注:略读的方法4出版商说明

(5)从你对一本书的目录很概略,甚至有点模糊的印象当中,开始挑几个看来跟主题息息相关的篇章来看。如果这些篇章在开头或结尾有摘要说明(很多会有),就要仔细地阅读这些说明

注:略读的方法5随便挑几章看看

6)最后一步,把书打开来,东翻翻西翻翻,念个一两段.有时候连续读几页,但不要太多。就用这样的方法把全书翻过一遍,随时寻找主要论点的讯号,留意主题的基本脉动。最重要的是,不要忽略最后的两三页。就算最后有后记,一本书最后结尾的两三页也还是不可忽视的

注:略读的方法6主动寻找资讯

头一次面对一本难读的书的时候,从头到尾先读完一遍,碰到不懂的地方不要停下来查询或思索。

只注意你能理解的部分,不要为一些没法立即了解的东西而停顿。继续读下去,略过那些不懂的部分,很快你会读到你看得懂的地方。集中精神在这个部分。继续这样读下去。将全书读完,不要被一个看不懂的章节、注解、评论或参考资料阻挠或泄气。如果你让自己被困住了,如果你容许自己被某个顽固的段落绑住了,你就是被打败了。在大多数情况里,你一旦和它纠缠,就很难脱困而出。在读第二遍的时候,你对那个地方的了解可能会多一些,但是在那之前,你必须至少将这本书先从头到尾读一遍才行。

注:读书对的方向!不能因为某个章节不懂而停滞不前,至少完整读下来,多注意那些理解的章节

亚当·斯密(Adam Smith)的经典作品《国富论》(The Wealth of Nations

注:国富论

每一本书,不论是多么难读的书,在无关紧要的间隙部分就可以读快一点。而一本好书,总会包含一些比较困难,应该慢慢阅读的内容

注:快慢的把握

要矫正眼睛逗留于一点的工具有很多种,有些很复杂又很昂贵。无论如何,任何复杂的工具其实都比不上你的一双手来得有用,你可以利用双手训练自己的眼睛,跟着章节段落移动得越来越快。你可以自己做这样的训练:将大拇指与食指、中指合并在一起,用这个“指针”顺着一行一行的字移动下去,速度要比你眼睛感觉的还要快一点。强迫自己的眼睛跟着手部的动作移动。一旦你的眼睛能跟着手移动时,你就能读到那些字句了。继续练习下去,继续增快手的动作,等到你发觉以前,你的速度已经可以比以前快两三倍了

注:矫正眼睛经常逗留,跟不上脑袋的速度,用手做工具

在阅读一本书的时候,慢不该慢到不值得,快不该快到有损于满足与理解。不论怎么说,阅读的速度,不论是快还是慢,只不过是阅读问题一个微小的部分而

注:阅读时的速度把握

最后,在第一次阅读一本难读的书时,不要企图了解每一个字句。这是最最重要的一个规则。这也是检视阅读的基本概念。不要害怕,或是担忧自己似乎读得很肤浅。就算是最难读的书也快快地读一遍。当你再读第二次时,你就已经准备好要读这本书了。

注:对难懂的书先速读一遍,然后? 再研究第二遍

在阅读的时候想要保持清醒,或昏昏入睡,主要看你的阅读目标是什么。如果你的阅读目标是获得利益—不论是心灵或精神上的成长—你就得保持清醒。这也意味着在阅读时要尽可能地保持主动,同时还要做一番努力—而这番努力是会有回馈的。

注:阅读的时候保持清醒

关于一本书,你一定要提出四个主要的问题。

(1)整体来说,这本书到底在谈些什么?你一定要想办法找出这本书的主题,作者如何依次发展这个主题,如何逐步从核心主题分解出从属的关键议题来。

(2)作者细部说了什么,怎么说的?你一定要想办法找出主要的想法、声明与论点。这些组合成作者想要传达的特殊讯息。

(3)这本书说得有道理吗?是全部有道理,还是部分有道理?除非你能回答前两个问题,否则你没法回答这个问题。在你判断这本书是否有道理之前,你必须先了解整本书在说些什么才行。然而,等你了解了一本书,如果你又读得很认真的话,你会觉得有责任为这本书做个自己的判断。光是知道作者的想法是不够的。

(4)这本书跟你有什么关系?如果这本书给了你一些资讯,你一定要问问这些资讯有什么意义。为什么这位作者会认为知道这件事很重要?你真的有必要去了解吗?如果这本书不只提供了资讯,还启发了你,就更有必要找出其他相关的、更深的含意或建议,以获得更多的启示。

注:读书时要提出的四个问题

如何让一本书真正属于你自己

如果你有读书时提出问题的习惯,那就要比没有这种习惯更能成为一个好的阅读者。但是,就像我们所强调的,仅仅提出问题还不够。你还要试着去回答问题。理论上来说,这样的过程可以在你脑海中完成,但如果你手中有一枝笔会更容易做到。在你阅读时,这枝笔会变成提醒你的一个讯号。

注:如何让一本书属于你

俗话说:“你必须读出言外之意,才会有更大的收获。”而所谓阅读的规则,就是用一种比较正式的说法来说明这件事而已。此外,我们也鼓励你“写出言外之意”。不这么做,就难以达到最有效的阅读的境界。

你买了一本书,就像是买了一项资产,和你付钱买衣服或家具是一样的。但是就一本书来说,付钱购买的动作却不过是真正拥有这本书的前奏而已。要真正完全拥有一本书,必须把这本书变成你自己的一部分才行,而要让你成为书的一部分最好的方法—书成为你的一部分和你成为书的一部分是同一件事—就是要去写下来。

为什么对阅读来说,在书上做笔记是不可或缺的事?第一,那会让你保持清醒—不只是不昏睡,还是非常清醒。其次,阅读,如果是主动的,就是一种思考,而思考倾向于用语言表达出来—不管是用讲的还是写的。一个人如果说他知道他在想些什么,却说不出来,通常是他其实

注:让书成为自己的

知道自己在想些什么。第三,将你的感想写下来,能帮助你记住作者的思想

做笔记有各式各样,多彩多姿的方法。以下是几个可以采用的方

注:做笔记的方法

※ 三种做笔记的方

注:三种做笔记的方法

※ 培养阅读的习惯

所谓艺术或技巧,只属于那个能养成习惯,而且能依照规则来运作的人。这也是艺术家或任何领域的工匠与众不同之处。要养成习惯,除了不断地运作练习之外,别无他法。这也就是我们通常所说的,从实际去做中学习到如何去做的道

注:培养阅读的习惯

第七章 透视一本书

每一本书的封面之下都有一套自己的骨架。作为一个分析阅读的读者,你的责任就是要找出这个骨

注:透视一本书的骨架

一本好书,就像一栋好房子,每个部分都要很有秩序地排列起来。每个重要部分都要有一定的独立

注:好书像一个好房子

分析阅读的第一阶段,或,找出一本书在谈些什么的四个规则:

注:找出一本书在说什么的方法

一般来说,阅读的过程与商业上的过程正好相反。商人通常是在找出提案是什么后,才会达成共识。但是读者却要先与作者达成共识,才能明白作者的主旨是什么,以及他所声明的是什么样的判断

注:判断作者的主旨

?(5)诠释作者使用的关键字,与作者达成共识。

(6)从最重要的句子中抓出作者的重要主旨。

(7)找出作者的论述,重新架构这些论述的前因后果,以明白作者的主张。

(8)确定作者已经解决了哪些问题,还有哪些是未解决的。在未解决的问题中,确定哪些是作者认为自己无法解决的问题。

注:分析阅读的第二个阶段

我们的建议尤其适用于所谓巨著。一般人总是抱着热忱想要阅读巨著,但是当他绝望地感觉到自己无法理解这本书时,热忱很快便消退了。其中一个原因,当然是因为一般人根本不知道要如何好好地阅读一本书。但还不只如此,还有另一个原因:他们认为自己应该能够读懂自己所挑选的第一本书,用不着再读其他相关的著作。

注:巨著读法

许多伟大的作品不只是互相有关联,而且在写作时还有特定的先后顺序,这都是不该忽略的事。后人的作品总是受到前人的影响。如果你先读前一位的作品,他可能会帮助你了解后人的作品。阅读彼此相关的书籍‘,依照写作的时间顺序来读,对你了解最后写的作品有很大帮助。这就是外在辅助阅读的基本常识与规则。

注:读巨著前先读一些基础著作

读一本好书,却会让你的努力有所回报。最好的书对你的回馈也最多。当然,这样的回馈分成两种:第一,当你成功地阅读了一本难读的好书之后,你的阅读技巧必然增进了。第二—长期来说这一点更重要—一本好书能教你了解这个世界以及你自己。你不只更懂得如何读得更好,还更懂得生命。你变得更有智慧,而不只是更有知识—像只提供讯息的书所形成的那样。你会成为一位智者,对人类生命中永恒的真理有更深刻的体认。

注:读一本好书的好处

好的阅读,也就是主动的阅读,不只是对阅读本身有用,也不只是对我们的工作或事业有帮助,更能帮助我们的心智保持活力与

使用git将本地文件上传至github

我的使用配置

首先在https://github.com/上注册,然后新建一个Repository,输入Repository的名称以及对这个Repository的描述。

红色斜体只需要操作一次即可。

首先clone下来工程gtk-programming:

1
git clone git://github.com/shaoguangleo/gtk-programming.git

这里如果要上传代码,有几个关键步骤:

1
git init

这个命令会在当前目录下创建一个.git文件夹。

1
git add filename

这个命令会把当前路径下的所有文件,添加到待上传的文件列表中。

1
git commit -m "xxxxx"  

提交至本地的git库
git read-only方式

1
git remote add origin  git://github.com/shaoguangleo/gtk-programming.git

ssh方式

1
git remote add origin git@github.com:shaoguangleo/gtk-programming.git

http方式

1
git remote add origin https://github.com/shaoguangleo/gtk-programming.git

通过三种方式为远程的服务器定义别名origin,我用的是第三种方式。

1
git push origin master

提交当地文件到远端服务器,其中master为默认的本地开发别名。

网络上关于github的使用

使用GitHub步骤:

1、申请GitHub帐户 xxx ,创建名为new-project的新Repository

2、安装Git客户端(Linux)

1
#yum install git git-gui

3、 生成密钥对,这样项目可以push到 GitHub上

1
#ssh-keygen -t rsa -C "xxx@gmail.com"

4、将.ssh/id_rsa.pub拷贝到GitHub网站

5、为了方便,设置ssh不输入口令

1
2
3
# eval `ssh-agent`
# ssh-add
(输入passphrase)

6、测试是否能联通GitHub

1
#ssh git@github.com

如果配置正确,显示

1
2
ERROR: Hi xxx! You've successfully authenticated, but GitHub does not provide shell access
Connection to github.com closed.

7、设置Git全局用户配置

1
2
# git config --global user.name "xxx"
# git config --global user.email xxx@gmail.com

8、创建本地新项目工作树

1
2
3
4
5
6
# mkdir new-project
# cd new-project
# git init
# touch README
# git add README
# git commit -m 'first commit'

定义远程服务器别名origin

1
#  git remote add origin git@github.com:xxx/new-project.git   

本地和远程合并,本地默认分支为master

1
# git push origin master  

GitHub网站上就可以看见了, http://github.com/xxx/new-project

  1. 更新文件
1
2
3
4
5
# vi README
自动commit更改文件
# git commit -a
更新至远程
# git push origin master
  1. 创建和合并分支
1
2
3
4
5
6
7
8
9
$git branch 显示当前分支是master
$git branch new-feature 创建分支
$ git checkout new-feature 切换到新分支
$ vi page_cache.inc.php
$ git add page_cache.inc.php
# Commit 到本地GIT
$ git commit -a -m "added initial version of page cache"
# 合并到远程服务器
$ git push origin new-feature

如果new-feature分支成熟了,觉得有必要合并进master

1
2
3
4
#git checkout master
#git merge new-feature
#git branch
#git push

则master中也合并了new-feature 的代码

再登录到GitHub可以看见”Switch Branches”下的分支选项:

GitHub还有一个很实用的功能,查看开发进程网络图(Network)

如何提取python中的一列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> arr
[[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
[12, 13, 14, 15, 16, 17, 18, 19, 20, 21],
[13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
[14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
[15, 16, 17, 18, 19, 20, 21, 22, 23, 24],
[16, 17, 18, 19, 20, 21, 22, 23, 24, 25],
[17, 18, 19, 20, 21, 22, 23, 24, 25, 26],
[18, 19, 20, 21, 22, 23, 24, 25, 26, 27],
[19, 20, 21, 22, 23, 24, 25, 26, 27, 28],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30]]
>>> l = [x[0] for x in arr]
>>> l
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
>>>

mount挂载

执行umount 的时候却提示:device is busy 的处理方法

1
2
3
4
5
6
# 查询占用挂载点的PID
$ fuser -m /mount/point/
/mount/point/: 1234c 5678c //占用进程pid

# 查询并杀死占用挂载点的PID
#fuser -m -k /mnt/cdrom/
1
2
# 查询具体的进程信息
# ps aux |grep 1234/5678

或者使用

1
$ lsof /mount/point

来查找具体的使用进程及用户信息

MacOS系统中MacPorts安装和使用

Mac系统中除了使用dmg、pkg的格式来安装软件,比较方便的还有MacPorts和brew软件,这两个软件类似Linux下面的yum和apt,可以帮助快速地解决依赖,按照软件。

这里说一下MacPorts的按照与使用,详细信息可以参考官网MacPorts

安装MacPorts

安装结束后还暂时不能使用,需要将/opt/local/bin/opt/local/sbin添加到$PATH搜索路径中,编辑/etc/profile文件中,加上

1
2
export PATH=/opt/local/bin:$PATH
export PATH=/opt/local/sbin:$PATH
  • Mac Port中第三方软件下载包存放的默认路径是:/opt/local/var/macports/distfiles/

  • 使用Mac Port前应该首先更新Port的index

MacPorts使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 更新ports tree和MacPorts版本,强烈推荐第一次运行的时候使用-v参数,显示详细的更新过程。
$ sudo port - v selfupdate

# 查看Mac Port中当前可用的软件包及其版本
$ port list

# 搜索索引中的软件
$ port search name

# 查看包详细信息
$ port info name

# 查看包详细信赖信息
$ port deps name

# 查看安装时允许客户定制的参数
$ port variants name

# 安装新软件
$ sudo port install name

# 安装完毕之后,清除安装时产生的临时文件
$ sudo port clean --all name

# 卸载软件
$ sudo port uninstall name

# 查看有更新的软件以及版本
$ port outdated

# 升级可以更新的软件
$ sudo port upgrade outdated

可追本溯源的 stat

Linux stat 命令用于显示 inode 内容。

话说这个inode是个什么东西呢?

对于存储在硬盘上的文件,特别是Linux的概念就是,一切皆文件 Everything is file。

其最小的存储单元为512字节即一个扇区sector;在读取文件的时候,为了提高效率,是按照4KB的块block来读取的,所以这样看来每次读取了8个sector

而对于每个文件为了索引的便捷,其元数据的各种信息就是stat获取的,用于描述创建者、文件的各种日期、大小等等等等信息,这个元数据的id就可以认为是inode了,以上。

官方的定义为:

stat - display file or file system status

用法为:

1
$ stat [options] filename/directory

其中的参数为:

  • -L, --dereference : 不显示链接的原始文件

  • -f, --file-system :显示文件系统状态

  • --printf=FORMAT : 与C语言的类似,不过看着转义符更多一些

  • -t, --terse:超级简介的模式

最简单的使用

最简单的其实也是最有用的,直接跟上文件或者目录,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ stat text.txt 
File: ‘text.txt’
Size: 51 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 1610934260 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2012-09-11 21:24:49.660510438 +0800
Modify: 2012-09-09 17:31:54.518005296 +0800
Change: 2012-09-09 17:33:09.670327180 +0800
Birth: -

$ stat dir
File: ‘dir
Size: 51 Blocks: 0 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1610934255 Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/ user) Gid: ( 1000/ user)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2012-09-13 16:44:56.802331727 +0800
Modify: 2012-09-13 16:44:55.624342864 +0800
Change: 2012-09-13 16:44:55.624342864 +0800
Birth: -

各个段的解释为:

  • File:文件或文件夹名
  • Size:文件大小
  • Blocks:文件使用的数据块总数
  • IO Block:IO块大小
  • regular file:文件类型(常规文件)或者directory文件夹
  • Device:设备的编号
  • Inode:Inode号
  • Links:链接数
  • Access:文件的权限
  • Gid, Uid:文件所有者的Gid和Uid
  • Access:文件的访问时间
  • Modify:文件的修改时间
  • Change:文件的状态时间

显示文件系统

参数-f将显示文件系统信息,可以看到Type:xfs这个信息。

1
2
3
4
5
6
7
$ stat -f text.txt 
File: "text.txt"
ID: fd0000000000 Namelen: 255 Type: xfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 244020823 Free: 182831648 Available: 182831648
Inodes: Total: 488280064 Free: 487587798

关于printf的那些格式化字符串

--printf=FORMAT选项可以跟的FORMAT有很多,较常用为:

格式化字符串 含义
%A 易读的访问状态
%B 每个块的大小(单位为字节)
%d 十进制的设备号
%F 文件类型
%G 所有者的组名
%i inode数字
%m 挂载点
%n 文件名
%s 总大小(单位:字节)
%U 所有者的用户名
%w 易读的文件生成时间(大写的为Epoch)
%x 易读的文件访问时间(大写的为Epoch)
%y 易读的文件修改时间(大写的为Epoch)
%z 易读的文件上一次修改状态时间(大写的为Epoch)

炫技 : 一个类似ls -l的用法

下面的这个命令可以实现类似ls -l的用法,可以扩展更多,也可以自定义使用,比如alias等等。

1
2
$ stat --print="%A. %U %G %s %x %n \n" text.txt 
-rw-rw-r--. user user 51 2012-09-11 21:24:49.660510438 +0800 text.txt

Linux 的 stat 命令

Linux stat 命令用于显示 inode 内容。

话说这个inode是个什么东西呢?对于存储在硬盘上的文件,特别是Linux的概念就是,一切皆文件。其最小的存储单元为512字节即一个扇区sector;在读取文件的时候,为了提高效率,是按照4KB的块block来读取的,所以这样看来每次读取了8个sector。而对于每个文件为了索引,其元数据的各种信息就是stat获取的,用于描述创建者、文件的各种日期、大小等等等等信息,这个元数据的id就可以认为是inode了,以上。

官方的定义为:

stat - display file or file system status

用法为:

1
$ stat [options] filename/directory

其中的参数为:

  • -L, --dereference : 不显示链接的原始文件

  • -f, --file-system :显示文件系统状态

  • --printf=FORMAT : 与C语言的类似,不过看着转义符更多一些

  • -t, --terse:超级简介的模式

最简单的使用

最简单的其实也是最有用的,直接跟上文件或者目录,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ stat text.txt 
File: ‘text.txt’
Size: 51 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 1610934260 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2012-09-11 21:24:49.660510438 +0800
Modify: 2012-09-09 17:31:54.518005296 +0800
Change: 2012-09-09 17:33:09.670327180 +0800
Birth: -

$ stat dir
File: ‘dir
Size: 51 Blocks: 0 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1610934255 Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/ user) Gid: ( 1000/ user)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2012-09-13 16:44:56.802331727 +0800
Modify: 2012-09-13 16:44:55.624342864 +0800
Change: 2012-09-13 16:44:55.624342864 +0800
Birth: -

各个段的解释为:

  • File:文件或文件夹名
  • Size:文件大小
  • Blocks:文件使用的数据块总数
  • IO Block:IO块大小
  • regular file:文件类型(常规文件)或者directory文件夹
  • Device:设备的编号
  • Inode:Inode号
  • Links:链接数
  • Access:文件的权限
  • Gid, Uid:文件所有者的Gid和Uid
  • Access:文件的访问时间
  • Modify:文件的修改时间
  • Change:文件的状态时间

显示文件系统

参数-f将显示文件系统信息,可以看到Type:xfs这个信息。

1
2
3
4
5
6
7
$ stat -f text.txt 
File: "text.txt"
ID: fd0000000000 Namelen: 255 Type: xfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 244020823 Free: 182831648 Available: 182831648
Inodes: Total: 488280064 Free: 487587798

关于printf的那些格式化字符串

--printf=FORMAT选项可以跟的FORMAT有很多,较常用为:

格式化字符串 含义
%A 易读的访问状态
%B 每个块的大小(单位为字节)
%d 十进制的设备号
%F 文件类型
%G 所有者的组名
%i inode数字
%m 挂载点
%n 文件名
%s 总大小(单位:字节)
%U 所有者的用户名
%w 易读的文件生成时间(大写的为Epoch)
%x 易读的文件访问时间(大写的为Epoch)
%y 易读的文件修改时间(大写的为Epoch)
%z 易读的文件上一次修改状态时间(大写的为Epoch)

炫技 : 一个类似ls -l的用法

下面的这个命令可以实现类似ls -l的用法,可以扩展更多,也可以自定义使用,比如alias等等。

1
2
$ stat --print="%A. %U %G %s %x %n \n" text.txt 
-rw-rw-r--. user user 51 2012-09-11 21:24:49.660510438 +0800 text.txt

Mac 平台上 13 款实用的代码编辑器推荐

如今网络上有很多针对 Mac 平台的代码编辑器,因此要找到正确的、最适合你的代码编辑器可能需要一段时间。这里主要整理了 13 款实用的代码编辑器,一些是免费、开源的,也有一些收费的,但你可以免费试用.

Espresso

Espresso是一款功能强大的代码编辑工具,拥有专业检查与分类、语法高亮、优雅的导航、即时预览、同步功能等,具有惊人的可扩展能力和速度,支持代码折叠,还能以dom方式呈现。Espresso还整合了CSSEdit 3的功能特性。

TextMate

TextMate把苹果OS X操作系统体验带进了编辑器的世界,整合了UNIX内核和苹果GUI两者的优点。TextMate的设计使有经验的开发者和新用户都很受益。

Aptana Studio 3

Aptana Studio 3是一个用于Web开发的开源工具。它能够让开发人员使用单一环境来测试Web应用程序。Aptana支持HTML5、CSS3、JavaScript、Ruby、Rails、PHP和Python。它提供了非常多的功能,包括代码辅助编辑器、调试器、部署向导和IDE自定义。

Taco HTML

Taco HTML是Mac里首屈一指的HTML和PHP编辑器。作为一个HTML编辑器,Taco HTML使得用户能够快速创建自己的网站。它是专为Mac OS X设计的,并拥有许多先进功能,包括拼写检查、浏览器即时预览、PHP预览、语法检查等。

Tumult HyperEdit

Tumult HyperEdit是一个轻盈的HTML编辑器,当你在输入时,便可即时查看网页的预览效果。HyperEdit 打破了HTML代码编写的繁琐周期——储存文件、然后在浏览器中载入、观看页面、在浏览器及编辑窗口中切换调试。它实现了撰写、修改与预览的同步进行,加快了整个页面设计的进程。W3C验证会将错误的语法用红色的下划线标记出来。它内嵌了与Safari相同的渲染引擎,因此不仅符合标准而且速度还非常快。

Dreamweaver CS6

Adobe Dreamweaver CS6提供了一套直观的可视界面,供你创建和编辑网站。新的流体网格布局专为自适应网格版面创建网页,这个网格版面是跨平台兼容性设计的。在发布前,可以使用“多屏幕预览“来审阅您的设计。

Coda 2

Coda 2是Mac版网页编辑器,它整合了终端、文字编辑器、CSS编辑器、内容发布等整个Web开发流程所需工具。新版本的Coda 2增加了诸多新的特性和功能,进行了新的用户界面设计。新增了可实现快速导航的滚动标签栏,整合了CSS、用户函数/变量补全、智能缩进、代码折叠等特性,支持Git版本管理,内置了MySQL编辑器。

SkEdit

SKEdit编辑器使你更容易创建和维护网站,它拥有所有必要的功能,如代码提示、代码折叠、FTP / SFTP的集成、Subversion的集成,它支持HTML、CSS、PHP、Cold Fusion、Ruby、SQL等编程语言。它包括一个代码库,你可以用最喜爱的脚本语言来编写脚本,并随时跟踪最常用的代码片段。

Firebug

  • Firebug是最流行和强大的Web开发工具:
  • 实时查看HTML并修改其风格和布局。
  • 最先进的JavaScript调试功能,适合任何浏览器。
  • 准确地监视网络的使用和性能。
  • 扩展Firebug并增加新的功能,使Firebug更强大。
  • 获得你所需要的信息。

BareBones

使用磁盘或FTP浏览器来查看和打开本地或远程卷的文件。

在磁盘浏览器、多文件搜索结果窗口、项目窗口上编辑文件。可以在多窗口中编辑单一文件!

创建BBEdit项目组,并在一个单一的窗口编辑相关文件,不用管它们在磁盘上的位置。

可以使用内置的Open from FTP/SFTP Server和Save to FTP/SFTP Server命令在FTP/SFTP服务器上直接创建文件;也可以使用Interarchy、Fetch、Transmit或任何其他支持“BBEdit编辑”的文件传输客户端。

Open File by Name操作可以让你快速访问BBEdit项目(或Xcode项目)中的内容。

Text Wrangler

TextWrangler是一款全能的文本编辑器。与BBEdit的区别是它有丰富的专业功能集,包括Web创作功能和软件开发工具。

EditRocket

EditRocket提供了必要的工具和功能,允许开发者编辑、创建、调试,并且快速、方便地浏览源代码。

Komodo Edit

Komodo Edit可以在 Windows、Mac 和 Linux 上运行,并支持PHP、Python、Ruby、JavaScript、Perl、TCL、XML、HTML5以及CSS3。另有后台语法检测、颜色匹配、错误捕捉、自动补齐、Fast Open、远程文件编辑、Vi快捷键、shell命令集、宏指令和代码片段等特性。值得一提的是,该IDE为用户提供了丰富的可扩展功能,支持类似firefox的.xpi扩展。

Linux文件系统

Name 简介
ext2 老牌 Linux 文件系统,不支援 journaling。
ext3 当今各大 Linux 预设使用的文件系统。支援 journaling。
ext3 (data) 加上 journal_data 功能的 ext3。
ext4 ext3 的下一版本。已正式进入 kernel 2.6.28 中。
reiserfs 号称最快的 FS。Linux 上第一个支援 journaling 的文件系统。
reiserfs (data) 加上 journal_data 功能的 reiserfs。
reiser4 reiserfs 的下一版。(尚未进入 kernel 中)
jfs 由 IBM 所开发的 journaling 型文件系统。已停止开发。
xfs 由 SGI 所开发的 journaling 型文件系统。
vfat 古老 DOS/Windows 文件系统,不支援 journaling。
ntfs 现今 Windows 的主流文件系统。在 Linux 上是经由 fuse 来支援 ntfs。
zfs 由 Sun 所开发的终极文件系统。在 Linux 上是经由 fuse 来支援 zfs。
btrfs 下一代 Linux 预设使用的文件系统。已进入 kernel 2.6.29 RC1 的测试分支中。

ext3,ext4,xfs和btrfs文件系统性能对比

详情参考 : http://www.cnblogs.com/tommyli/p/3201047.html

应为原文:

http://www.ilsistemista.net/index.php/linux-a-unix/6-linux-filesystems-benchmarked-ext3-vs-ext4-vs-xfs-vs-btrfs.html?start=1

还有一篇相关介绍:

http://www.phoronix.com/scan.php?page=article&item=ext4_benchmarks&num=2

另一篇:http://tetralet.luna.com.tw/index.php?op=ViewArticle&articleId=214&blogId=1

以下部分主要关于ext4:

Linux kernel 自 2.6.28开 始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:

  1. 与 Ext3 兼容。执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。
  2. 更大的文件系统和更大的文件。较之 Ext3 目前所支持的最大 16TB 文件系统和最大2TB 文件,Ext4 分别支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。
  3. 无限数量的子目录。Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。
  4. Extents。Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB大小的文件,在 Ext3 中要建立 25,600 个数据块(每个数据块大小 为 4KB)的映射表。而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent 为一组连续的数据块,上述文件则表示为“ 该文件数据保存在接下来的 25,600 个数据块中”,提高了不少效率。
  5. 多块分配。当写 入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用 25,600 次数据 块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。
  6. 延迟分配。Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。
  7. 快速 fsck。以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode 了。
  8. 日志校验。日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4 的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。
  9. “无日志”(No Journaling)模式。日志总归有一些开销,Ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。
  10. 在线碎片整理。尽管延迟分配、多块分配和 extents 能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4 支持在线碎片整理,并将提供 e4defrag 工具进行个别文件或整个文件系统的碎片整理。
  11. inode 相关特性。Ext4 支持更大的 inode,较之 Ext3 默认的 inode 大小 128 字节,Ext4 为了在 inode 中容纳更多的扩展属性(如纳秒时间戳 或 inode 版本),默认 inode 大小为 256 字节。Ext4 还支持快速扩展属性(fast extended attributes) 和 inode 保留(inodes reservation)。
  12. 持久预分配(Persistent preallocation)。P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失 败。Ext4 在文件系统层面实现了持久预分配并提供相应的API(libc 中的 posix_fallocate()),比应用软件自己实现更有效率。
  13. 默认启用 barrier。磁盘 上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit 记录, 若 commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用barrier,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。(可通过 “mount -o barrier=0” 命令禁用该特性。)

文章写在2012年,目前最新的很多操作系统发行版,比如CentOS,已经内置支持了xfs文件系统,大部分的操作均可省略了。

XFS 文件系统

XFS文件系统是SGI开发的高级日志文件系统,XFS极具伸缩性,非常健壮。

Linux环境下。目前版本可用的最新XFS文件系统的为1.2版本,可以很好地工作在2.4核心下。

XFS文件系统简介

主要特性包括以下几点:

  • 数据完全性

    采用XFS文件系统,当意想不到的宕机发生后,首先,由于文件系统开启了日志功能,所以你磁盘上的文件不再会意外宕机而遭到破坏了。不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容。

  • 传输特性

    XFS文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS查询与分配存储空间非常快。XFS文件系统能连续提供快速的反应时间。笔者曾经对XFSJFSExt3ReiserFS文件系统进行过测试,XFS文件文件系统的性能表现相当出众。

  • 可扩展性

    XFS 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为263 = 9 x 1018 = 9 exabytes,最大文件系统尺寸为18 exabytes

    XFS使用高的表结构(B+树),保证了文件系统可以快速搜索与快速空间分配。XFS能够持续提供高速操作,文件系统的性能不受目录中目录及文件数量的限制。

  • 传输带宽

    XFS 能以接近裸设备I/O的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达7GB每秒,对单个文件的读写操作,其吞吐量可达4GB每秒。

XFS文件系统的使用

1.下载与编译内核

下载相应版本的内核补丁,解压补丁软件包,对系统核心打补丁。

下载地址:ftp://oss.sgi.com/projects/xfs/d … .4.18-all.patch.bz2

对核心打补丁,下载解压后,得到一个文件:xfs-1.1-2.4.18-all.patch文件。

对核心进行修补如下:

1
2
# cd /usr/src/linux
# patch -p1 < /path/to/xfs-1.1-2.4.18-all.patch

修补工作完成后,下一步要进行的工作是编译核心,将XFS编译进Linux核心可中。

首先运行以下命令,选择核心支持XFS文件系统:

1
#make menuconfig

在“文件系统“菜单中选择:

<*> SGI XFS filesystem support ##说明:将xfs文件系统的支持编译进核心或 SGI XFS。 filesystem support ##说明:以动态加载模块的方式支持XFS文件系统。

另外还有两个选择:

  • Enable XFS DMAPI ##说明:对磁盘管理的API,存储管理应用程序使用。

  • Enable XFS Quota ##说明:支持配合Quota对用户使用磁盘空间大小管理。

完成上工作后,退出并保存核心选择配置。之后,然后编译内核,安装核心:

1
2
3
4
# make bzImage
# make module
# make module_install
# make install

如果你对以上复杂繁琐的工作没有耐心或没有把握,那么可以直接从SGI的站点上下载已经打好补丁的核心,其版本为2.4.18。它是一个rpm软件包,你只要简单地安装即可。SGI提交的核心有两种,分别供smp及单处理器的机器使用。

2.创建XFS文件系统

完成对核心的编译后,还应下载与之配套的xfsprogs工具软件包,也即mkfs.xfs工具。不然我们无法完成对分区的格式化:即无法将一个分区格式化成XFS文件系统的格式。要下载的软件包名称:xfsprogs-2.0.3。

将所下载的xfsProgs工具解压,安装,mkfs.xfs自动安装在/sbin目录下。

1
2
3
4
5
# tar –xvf xfsprogs-2.0.3.src.tar.gz
# cd xfsprogs-2.0.3src
# ./configure
# make
# make install

使用mkfs.xfs格式化磁盘为XFS文件系统,方法如下:

1
# /sbin/mkfs.xfs /dev/sda6 #说明:将分区格式化为`XFS`文件系统

格式化磁盘时,如果mkfs.xfs提示你分区原本已被格式化为其它文件系统,可以使用参数 –f 强行格式化:

1
#/sbin/mkfs.xfs –f /dev/sda6

3.加载XFS文件系统

1
#mount –t xfs /dev/sda6 /xfs ##其中/xfs是主分区/下的一个目录。

最后,为了让系统启动后就自动加载,应该更改/etc/fstab,这样系统启动后就会自动加载XFS分区而不必每次都手工加载。

要说明的一点是目前的XFS由于受Linux内存页限制,在x86版本中,只能实现文件系统的块尺寸为4K。另外,XFS文件系统可以不同的方式 mount,即允许文件系统以读方式加载,也允许以读写方式加载。这是因为XFS文件系统用作根文件系统时,为了安全要以只读方式加载。