<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>纸口杯</title>
	<atom:link href="http://www.y513.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.y513.com</link>
	<description>关注web前端，创新web前端！</description>
	<lastBuildDate>Tue, 27 Mar 2012 14:46:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>.bash_profile和.bashrc</title>
		<link>http://www.y513.com/201203979.html</link>
		<comments>http://www.y513.com/201203979.html#comments</comments>
		<pubDate>Tue, 27 Mar 2012 14:46:27 +0000</pubDate>
		<dc:creator>纸口杯</dc:creator>
				<category><![CDATA[liunx]]></category>

		<guid isPermaLink="false">http://www.y513.com/?p=979</guid>
		<description><![CDATA[/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.
~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
 
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同，所以通常前者会调用后者。
 
bash提示符的配置：
 
如果您很容易使 shell 提示行变得色彩绚烂斓且带有更多信息，为什么还要坚持用单调的标准 shell 提示行呢？在这篇技巧中，Daniel Robbins 将说明如何获得符合您的意愿的 shell 提示行，并会说明如何动态更新 X 终端的标题栏。

作为 Linux/UNIX 人，我们有很长的时间是在 shell 中工作，并且在许多情况下，下面这一行就是始终盯着我们的那个提示行：

bash-2.04$

如果您恰巧是超级用户 (root)，您就有权使用下面这个美丽的标示“身份”的提示行版本：

bash-2.04#

这些提示行并不是十分漂亮。这也就难怪几种 Linux 版本对默认提示行进行了升级，在其中增加了颜色和更多的信息。但是，即便您恰好有一个本身带有很好的彩色提示行的新式版本，它也不可能是完美无缺的。您或许希望在提示行中增加或更改几种颜色，或者增加（或删除）一些信息。从头开始设计属于您自己的彩色的、经过装饰的提示行并不难。
提示行基础
在 bash 下，可以通过更改 PS1 环境变量的值来设置提示行，如下所示：
$ export PS1="> "
>

更改会立即生效，通过将 "export" 定义放在您的 ~/.bashrc 文件中可将这种更改固定下来。只要您愿意，PS1 可以包含任意数量的纯文本：
$ export PS1="This is my super prompt > "
This is my super prompt >

尽管这很有趣，但在提示行中包含大量静态文本并不是特别有用。大多数定制的提示行包含诸如用户名、工作目录或主机名之类的信息。这些花絮信息可以帮助您在 shell 世界中遨游。例如，下面的提示行将显示您的用户名和主机名：

$ export PS1="\u@\H > "
drobbins@freebox >

这个提示行对于那些以多个不同名称的帐户登录多台机器的人尤为有用，因为它可以提醒您：您目前在哪台机器上操作，拥有什么权限。
在上面的示例中，我们使用了专用的用反斜杠转义的字符序列，藉此通知 bash 将用户名和主机名插入提示行中，当这些转义字符序列出现在 PS1 变量中时，bash 就会用特定的值替换它们。我们使用了序列 "\u"（表示用户名）和 "\H"（表示主机名的第一部分）。下面是 bash 可识别的全部专用序列的完整列表（您可以在 bash man page 的 "PROMPTING" 部分找到这个列表）：
序列 说明
\a ASCII 响铃字符（也可以键入 \007）
\d "Wed Sep 06" 格式的日期
\e ASCII 转义字符（也可以键入 \033）
\h 主机名的第一部分（如 "mybox"）
\H 主机的全称（如 "mybox.mydomain.com"）
\j 在此 shell 中通过按 ^Z 挂起的进程数
\l 此 shell 的终端设备名（如 "ttyp4"）
\n 换行符
\r 回车符
\s shell 的名称（如 "bash"）
\t 24 小时制时间（如 "23:01:01"）
\T 12 小时制时间（如 "11:01:01"）
\@ 带有 am/pm 的 12 小时制时间
\u 用户名
\v bash 的版本（如 2.04）
\V Bash 版本（包括补丁级别） ?/td>
\w 当前工作目录（如 "/home/drobbins"）
\W 当前工作目录的“基名 (basename)”（如 "drobbins"）
\! 当前命令在历史缓冲区中的位置
\# 命令编号（只要您键入内容，它就会在每次提示时累加）
\$ 如果您不是超级用户 (root)，则插入一个 "$"；如果您是超级用户，则显示一个 "#"
\xxx 插入一个用三位数 xxx（用零代替未使用的数字，如 "\007"）表示的 ASCII 字符
\\ 反斜杠
\[ 这个序列应该出现在不移动光标的字符序列（如颜色转义序列）之前。它使 bash 能够正确计算自动换行。
\] 这个序列应该出现在非打印字符序列之后。
这样，您已经知道了 bash 中用反斜杠转义的全部专用序列。请稍微演练一下这些序列，以对它们的工作方式获得一些感性认识。在您做了一些测试之后，下面开始添加颜色。
彩色化
添加颜色相当容易；第一步是设计不带颜色的提示行。然后，我们所要做的只是添加终端（而不是 bash）可识别的专用转义序列，以使它以彩色显示文本的某些部分。标准 Linux 终端和 X 终端允许您设置前景（文字）颜色和背景颜色，如果需要，还可以启用 "bold" 字符。有八种颜色可供我们选择。
颜色是通过在 PS1 中添加专用序列来选择的 -- 基本上是夹在 "\e["（转义开方括号）和 "m" 之间数字值。如果指定一个以上的数字代码，则用分号将它们分开。下面是一个颜色代码示例：

"\e[0m"

如果将数字代码指定为零，则它就会通知终端将前景、背景和加粗设置重置为它们的默认值。您可能会在在提示行结束时使用这个代码，以使您键入的文字成为非彩色的。现在，让我们看一下这些颜色代码。请注意下面的抓屏结果：
颜色表

要使用这个表，首先请查找您要使用的颜色，然后查找对应的前景编号 (30-37) 和背景编号 (40-47)。例如，如果您喜欢黑底绿字，则可将编号分别设为 32 和 40。然后打开您的提示行定义并在其中添加适当的颜色代码。下面的定义：

export PS1="\w> "

变为：

export PS1="\e[32;40m\w> "

到现在为止，提示行尽管已经很不错了，但仍不太完美。在 bash 显示出工作目录以后，我们需要使用 "\e[0m" 序列将颜色重新设置为正常值。

export PS1="\e[32;40m\w> \e[0m"

这个定义将显示一个漂亮的绿色提示行，但我们仍需要做一些扫尾工作。我们不需要包括 "40" 这个背景颜色设置，因为它将背景设置为黑色，而黑色是默认颜色。此外，绿色还很暗；我们通过添加一个 "1" 颜色代码来修正这个问题，这将启用更亮的加粗文字。除了这个修改之外，我们还需要将全部非打印字符用专用的 bash 转义序列 "\[" 和 "\]" 括起来。这两个序列通知 bash，被括起来的字符不占用行上的任何空间，这样就使自动换行能够继续正常工作。没有这两个转义序列，尽管您有了一个非常漂亮的提示行，但是如果您键入的命令恰好到达终端的最右端，就会造成显示混乱。下面是我们最终的提示行：

export PS1="\[\e[32;1m\]\w> \[\e[0m\]"

别担心在同一个提示行中使用几种颜色，就像下面这样：

export PS1="\[\e[36;1m\]\u@\[\e[32;1m\]\H> \[\e[0m\]"

Xterm 中的乐趣
我已说明了如何在提示行中添加信息和颜色，但您还可以更进一步。您可以通过在提示行中添加专用代码来使 X 终端（如 rxvt 或 aterm）的标题栏得到动态更新。您所要做的只是将下面的序列添加到您的 PS1 提示行中：

"\e]2;titlebar\a"

只须用您希望其出现在 xterm 标题栏中的文字替换子串 "titlebar" 即可，现在已经一切就绪了！不必使用静态文字；您可以将 bash 转义序列插入标题栏中。请查看下面这个示例，它将用户名、主机名和当前工作目录显示在标题栏中，并定义了一个简短、明亮的绿色提示行：

export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "

这就是我在上面的抓屏结果中所用的那个提示行。我喜欢这个提示行，因为它将全部信息显示在标题栏上，而不是显示在终端上，终端对一行可以显示多少字符有限制。顺便提一句，确保用 "\[" 和 "\]" 将您的标题栏序列括起来（因为就终端而言，这个序列是非打印序列）。将大量信息放在标题栏中的问题是，如果您使用非图形终端（如系统控制台），则看不到这些信息。为了解决这个问题，可以在您的 .bashrc 中添加以下几行：

if [ "$TERM" = "linux" ]
then
#we're on the system console or maybe telnetting in
export PS1="\[\e[32;1m\]\u@\H > \[\e[0m\]"
else
#we're not on the console, assume an xterm
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "
fi

这个 bash 条件语句将根据当前的终端设置动态设置提示行。为了获得一致性，您一定希望配置您的 ~/.bash_profile，以便它在启动时搜索 (source) 您的 ~/.bashrc。确保您的 ~/.bash_profile 文件中有以下这样一行：

source ~/.bashrc

这样，无论您开启一个登录 shell 还是一个非登录 shell，都会获得同样的提示行。
好了，您已掌握了提示行魔术。现在尽情享受一下，制作一个漂亮的彩色提示行吧
 
 
 
 
--
 
 
 
Linux 运行的时候，是如何管理共享库(*.so)的？在 Linux 下面，共享库的寻找和加载是由 /lib/ld.so 实现的。 ld.so 在标准路经(/lib, /usr/lib) 中寻找应用程序用到的共享库。
但是，如果需要用到的共享库在非标准路经，ld.so 怎么找到它呢？
目前，Linux 通用的做法是将非标准路经加入 /etc/ld.so.conf，然后运行 ldconfig 生成 /etc/ld.so.cache。 ld.so 加载共享库的时候，会从 ld.so.cache 查找。
传 统上， Linux 的先辈 Unix 还有一个环境变量 - LD_LIBRARY_PATH 来处理非标准路经的共享库。ld.so 加载共享库的时候，也会查找这个变量所设置的路经。但是，有不少声音主张要避免使用 LD_LIBRARY_PATH 变量，尤其是作为全局变量。这些声音是：
* LD_LIBRARY_PATH is not the answer - http://prefetch.net/articles/linkers.badldlibrary.html
* Why LD_LIBRARY_PATH is bad - http://xahlee.org/UnixResource_dir/_/ldpath.html 
* LD_LIBRARY_PATH - just say no - http://blogs.sun.com/rie/date/20040710
解决这一问题的另一方法是在编译的时候通过 -R<path> 选项指定 run-time path。
 
1. 往/lib和/usr/lib里面加东西，是不用修改/etc/ld.so.conf的，但是完了之后要调一下ldconfig，不然这个library会找不到
2. 想往上面两个目录以外加东西的时候，一定要修改/etc/ld.so.conf，然后再调用ldconfig，不然也会找不到
比如安装了一个mysql到/usr/local/mysql，mysql有一大堆library在/usr/local/mysql/lib下面，这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib，保存过后ldconfig一下，新的library才能在程序运行时被找到。
3. 如果想在这两个目录以外放lib，但是又不想在/etc/ld.so.conf中加东西（或者是没有权限加东西）。那也可以，就是export一个全局变量LD_LIBRARY_PATH，然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案，在没有权限或临时需要的时候使用。
4. ldconfig做的这些东西都与运行程序时有关，跟编译时一点关系都没有。编译的时候还是该加-L就得加，不要混淆了。
5. 总之，就是不管做了什么关于library的变动后，最好都ldconfig一下，不然会出现一些意想不到的结果。不会花太多的时间，但是会省很多的事。
http://hi.baidu.com/fanzier/blog/item/222ba3ec74cb9a2463d09fb5.html

LD_LIBRARY_PATH 这个环境变量是大家最为熟悉的，它告诉loader：在哪些目录中可以找到共享库。可以设置多个搜索目录，这些目录之间用冒号分隔开。在linux下，还提供了另外一种方式来完成同样的功能，你可以把这些目录加到/etc/ld.so.conf中，或则在/etc/ld.so.conf.d里创建一个文件，把目录加到这个文件里。当然，这是系统范围内全局有效的，而环境变量只对当前shell有效。按照惯例，除非你用上述方式指明，loader是不会在当前目录下去找共享库的，正如shell不会在当前目前找可执行文件一样。
文章出处：DIY部落(http://www.diybl.com/course/6_system/linux/Linuxjs/20090314/161447.html)</path>]]></description>
		<wfw:commentRss>http://www.y513.com/201203979.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac下终端的颜色显示</title>
		<link>http://www.y513.com/201203965.html</link>
		<comments>http://www.y513.com/201203965.html#comments</comments>
		<pubDate>Sun, 25 Mar 2012 09:54:05 +0000</pubDate>
		<dc:creator>纸口杯</dc:creator>
				<category><![CDATA[liunx]]></category>

		<guid isPermaLink="false">http://www.y513.com/?p=965</guid>
		<description><![CDATA[Mac下开发主要还是终端用的比较多，默认终端比较难看，装了Iterm2之后发现依然没有颜色，感觉不是很爽，于是就自己hack了一下，加上了iTerm2的配色方案，效果如下图所示，可以根据个人的喜好再做调整，这样下来，就和linux终端一样能够拥有漂亮的配色。接下来介绍一下解决方案。
<a href="http://www.y513.com/wp-content/uploads/2012/03/wKgKC03YjcwAAAAAAAbCzS636ro074.png"><img src="http://www.y513.com/wp-content/uploads/2012/03/wKgKC03YjcwAAAAAAAbCzS636ro074-300x187.png" alt="" title="wKgKC03YjcwAAAAAAAbCzS636ro074" width="300" height="187" class="aligncenter size-medium wp-image-966" /></a>

主要分以下三步：

1.手动下载并编译安装coreutils，可以在这里下载：<a href="http://ftp.gnu.org/gnu/coreutils/coreutils-8.9.tar.gz" target="_blank">下载地址</a>。下载完毕之后解压并且安装（安装需要使用gcc，make等命令，可以通过安装Xcode获得）：
[shell]
tar xzvf coreutils-8.9.tar.gz;  
cd coreuiils-8.9;  
./configure --prefix=/usr;  
sudo make;  
sudo make install 
[/shell]
2.安装完毕之后需要配置终端的profile
[shell]
export PS1=&#34;\[\e[0;32m\][\[\e[0;32m\]\u@\[\e[0;31m\]\h \[\e[0;34m\]\w\[\e[0;32m\]] \$ \[\e[0m\]&#34;
test -r /sw/bin/init.sh &#38;&#38; . /sw/bin/init.sh

if [ &#34;$TERM&#34; != &#34;dumb&#34; ]; then
    export LS_OPTIONS='--color=auto'
    test -r ~/.dir_color &#38;&#38; eval &#34;$(dircolors -b ~/.dir_color)&#34; &#124;&#124; eval &#34;$(dircolors -b)&#34;
    eval `dircolors ~/.dir_color`
fi

# Useful aliases
alias ls='ls $LS_OPTIONS'
alias ll='ls -al'
alias grep='grep $LS_OPTIONS'
alias fgrep='fgrep $LS_OPTIONS'
alias egrep='egrep $LS_OPTIONS'
[/shell]

3.如果需要自己设置颜色文件，那么可以编辑如下文件：
vim ~/.dir_color;
添加如下的内容即可:
[shell]
# Configuration file for dircolors, a utility to help you set the
# LS_COLORS environment variable used by GNU ls with the --color option.

# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
# slackware version of dircolors) are recognized but ignored.

# Below, there should be one TERM entry for each termtype that is colorizable
TERM linux
TERM linux-c
TERM mach-color
TERM console
TERM con132x25
TERM con132x30
TERM con132x43
TERM con132x60
TERM con80x25
TERM con80x28
TERM con80x30
TERM con80x43
TERM con80x50
TERM con80x60
TERM xterm
TERM xterm-color
TERM xterm-debian
TERM rxvt
TERM screen
TERM screen-w
TERM vt100

# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
NORMAL 00   # global default, although everything should be something.
FILE 00     # normal file
DIR 01;36   # directory
LINK 01;37  # symbolic link.  (If you set this to 'target' instead of a
# numerical value, the color is as for the file pointed to.)
FIFO 40;33  # pipe
SOCK 01;35  # socket
DOOR 01;35  # door
BLK 40;33;01    # block device driver
CHR 40;33;01    # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file

# This is for files with execute permission:
EXEC 00;35

# List any file extensions like '.gz' or '.tar' that you would like ls
# to colorize below. Put the extension, a space, and the color init string.
# (and any comments you want to add after a '#')

# If you use DOS-style suffixes, you may want to uncomment the following:
#.cmd 01;32 # executables (bright green)
#.exe 01;32
#.com 01;32
#.btm 01;32
#.bat 01;32

.tar 01;31 # archives or compressed (bright red)
.tgz 01;31
.arj 01;31
.taz 01;31
.lzh 01;31
.zip 01;31
.z   01;31
.Z   01;31
.gz  01;31
.bz2 01;31
.deb 01;31
.rpm 01;31
.jar 01;31
.dmg 01;31

# image formats
.jpg 01;35
.png 01;35
.gif 01;35
.bmp 01;35
.ppm 01;35
.tga 01;35
.xbm 01;35
.xpm 01;35
.tif 01;35
.png 01;35
.mpg 01;35
.avi 01;35
.fli 01;35
.gl 01;35
.dl 01;35

# source code files
.pl 00;33
.PL 00;33
.pm 00;33
.tt 00;33
.yml 00;33
.sql 00;33
.html 00;33
.css 00;33
.js 00;33
[/shell]

备注：
<a href="http://www.y513.com/wp-content/uploads/2012/03/out.tar1.gz">下载.profile &#038;& .dir_color 文件</a>]]></description>
		<wfw:commentRss>http://www.y513.com/201203965.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ubuntu 安装ruby 1.9.3</title>
		<link>http://www.y513.com/201202962.html</link>
		<comments>http://www.y513.com/201202962.html#comments</comments>
		<pubDate>Fri, 24 Feb 2012 08:31:16 +0000</pubDate>
		<dc:creator>纸口杯</dc:creator>
				<category><![CDATA[最新新闻]]></category>

		<guid isPermaLink="false">http://www.y513.com/?p=962</guid>
		<description><![CDATA[<blockquote>sudo apt-get update
sudo apt-get install unzip curl aptitude
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
echo '[[ -s "/home/bindiry/.rvm/scripts/rvm" ]] &#038;& source "/home/bindiry/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*' >> ~/.bashrc

source .bashrc

sudo apt-get install build-essential openssl libreadline6 libreadline6-dev \
curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev \
libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev \
autoconf libc6-dev ncurses-dev automake libtool bison g++ nodejs \
libapr1 libaprutil1 libneon27-gnutls libsvn1 subversion pkg-config

rvm get stable
rvm install 1.9.3
rvm 1.9.3 --default
ruby -v</blockquote>]]></description>
		<wfw:commentRss>http://www.y513.com/201202962.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ruby连接MongoDB</title>
		<link>http://www.y513.com/201202953.html</link>
		<comments>http://www.y513.com/201202953.html#comments</comments>
		<pubDate>Wed, 15 Feb 2012 08:01:11 +0000</pubDate>
		<dc:creator>纸口杯</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.y513.com/?p=953</guid>
		<description><![CDATA[想要在Ruby中连接MongoDB，需要使用mongo模块，该模块可以通过ruby自带的gems程序进行安装。
[ruby]
$ gem update --system
$ gem install mongo
$ gem install bson_ext
[/ruby]
Mongo模块提供了Mongo::Connnection类连接MongoDB，如果不指定具体的数据库，默认情况下会创建一个持有MongoDB连接的实例，
[ruby]
require 'mongo'
conn = Mongo::Connection.new
puts conn.class            # Mongo::Connection
puts conn.database_names   # [&#34;admin&#34;, &#34;local&#34;, ...]
[/ruby]
如果需要指定默认的数据库，可以在创建实例的时候指定。如果指定的数据库不存在，MongoDB会创建该数据库。
[ruby]
db = Mongo::Connection.new.db('blog')
db.create_collection('users')  # 创建一个collection
puts db.class                  # Mongo::DB
[/ruby]
涉及数据库的操作，基本的创建、删除、拷贝、重命名。重命名操作可以通过拷贝和删除组合完成。
[ruby]
conn.copy_database('blog', 'blog-backup')
conn.drop_database('blog-backup')
[/ruby]
在MongoDB中没有了表的概念，取而代之的是collection，可以理解为容器，记录全都存放在collection中。对 collection所能做的也是传统的CRUD操作，不过使用起来更加面向对象。Mongo模块的Collection类提供了insert, drop, update, find等方法操作collection。下面大概地了解一下它们的用法。

在先前创建的名为users的collection中插入几条记录。MongoDB中记录的类型为类JSON格式，形式如下。
[ruby]
{
  &#34;_id&#34; : ObjectId(&#34;4d51eb216b6f45122c000001&#34;),
  &#34;username&#34; : &#34;clovery&#34;,
  &#34;password&#34; : &#34;clovery&#34;
}
# ruby中无法识别json格式，所以插入记录时使用ruby的hash格式，mongo模块会自动转换成json形式
# 向users中插入三条记录
db['users'].insert({&#34;username&#34; =&#38;gt; &#34;andy&#34;, &#34;password&#34; =&#38;gt; &#34;12345&#34;})
db['users'].insert({&#34;username&#34; =&#38;gt; &#34;alien&#34;, &#34;password&#34; =&#38;gt; &#34;12345&#34;})
db['users'].insert({&#34;username&#34; =&#38;gt; &#34;angel&#34;, &#34;password&#34; =&#38;gt; &#34;12345&#34;})

db['users'].count  # 3
[/ruby]
可以通过find_one和find检索记录。find_one返回一个BSON::OrderedHash数据，类似于ruby的hash类型。find返回Mongo::Cursor引用，可以
对其进行迭代检索所有符合条件的数据。
[ruby]
db['users'].find_one
# {&#34;_id&#34;=&#38;gt;BSON::ObjectId('4d5246c26b6f451714000004'), &#34;username&#34;=&#38;gt;&#34;andy&#34;, &#34;password&#34;=&#38;gt;&#34;12345&#34;}

db['users'].find.each do &#124;row&#124;
  print &#34;#{row['username']} &#34;
end
# andy alien angel
[/ruby]
update可以更新原有的记录。
[ruby]
db['users'].update({'username' =&#38;gt; 'andy'}, {'$set' =&#38;gt; {'password' =&#38;gt; 'andy'}})
# {&#34;_id&#34;=&#38;gt;BSON::ObjectId('4d52499d6b6f451714000008'), &#34;password&#34;=&#38;gt;&#34;andy&#34;, &#34;username&#34;=&#38;gt;&#34;andy&#34;}
[/ruby]
使用remove删除collection中的记录，如果不指定条件，会删除collection中的所有记录。
[ruby]
db['users'].remove({'username' =&#38;gt; 'andy'})
db['users'].count # 2
[/ruby]
删除collection
[ruby]
db.drop_collection('users')
[/ruby]
关于Ruby如何连接MongDB，详细信息请参考<a href="http://api.mongodb.org/ruby/current/file.TUTORIAL.html">MongoDB Ruby Driver Tutorial</a>]]></description>
		<wfw:commentRss>http://www.y513.com/201202953.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>关于linux的export命令</title>
		<link>http://www.y513.com/201202949.html</link>
		<comments>http://www.y513.com/201202949.html#comments</comments>
		<pubDate>Thu, 09 Feb 2012 09:59:54 +0000</pubDate>
		<dc:creator>纸口杯</dc:creator>
				<category><![CDATA[liunx]]></category>

		<guid isPermaLink="false">http://www.y513.com/?p=949</guid>
		<description><![CDATA[export:将自定义变量设定为系统环境变量（当前shell中有效）

<strong>功能说明：</strong>设置或显示环境变量。

<strong>语　　法：</strong>export
<div id="sina_keyword_ad_area2"><wbr>
<div><wbr>[-fnp][变量名称]=[变量设置值]

<strong>补充说明：</strong>在shell中执行程序时，shell会提供一组环境变量。export可新增，修改或删除环境变量，供后续执行的程序使用。export的效力仅及于该此登陆操作。

<strong>参　　数：</strong>
-f </wbr><wbr></wbr><wbr>　代表[变量名称]中为函数名称。 </wbr><wbr></wbr><wbr>
-n </wbr><wbr></wbr><wbr>　删除指定的变量。变量实际上并未删除，只是不会输出到后续指令的执行环境中。 </wbr><wbr></wbr><wbr>
-p </wbr><wbr></wbr><wbr>　列出所有的shell赋予程序的环境变量。

在shell中输入export可以输出当前的变量。也可以通过
export TARGET=arm-linux-这样的命令设定环境变量,
export PATH=$PATH:/.../bin。

当执行一个脚本时，新开了一个子shell,继承父shell中的环境
变量，但是在子shell中定义的变量是不能被带回到父shell中。

/etc/<strong>environment</strong>是设置整个系统的环境，而/etc/<strong>profile</strong>是设置所有用户的环境，前者与登录用户无关，后者与登录用户有关。

如果同一个变量在用户环境(/etc/<strong>profile</strong>)和系统环境(/etc/<strong>environment</strong>)有不同的值那应该是以用户环境为准了。

另外设置环境变量可以在<span><span style="color: blue;">/etc/profile中，区别如下：</span></span>

<span><span style="color: blue;">/etc/profile:</span>此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
<span style="color: blue;">/etc/bashrc:</span>为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
<span style="color: blue;">~/.bash_profile:</span>每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
<span style="color: blue;">~/.bashrc:</span>该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.
<span style="color: blue;">~/.bash_logout:</span>当每次退出系统(退出bash shell)时,执行该文件. <wbr></wbr><wbr>

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
</wbr><wbr></wbr><wbr>
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同，所以通常前者会调用后者。</wbr></span></wbr></div></wbr></div>]]></description>
		<wfw:commentRss>http://www.y513.com/201202949.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用十年来学编程</title>
		<link>http://www.y513.com/201202941.html</link>
		<comments>http://www.y513.com/201202941.html#comments</comments>
		<pubDate>Wed, 01 Feb 2012 06:23:50 +0000</pubDate>
		<dc:creator>纸口杯</dc:creator>
				<category><![CDATA[最新新闻]]></category>

		<guid isPermaLink="false">http://www.y513.com/?p=941</guid>
		<description><![CDATA[<h2><span style="color: #ff6600;"><strong>为什么每个人都急不可耐？</strong></span></h2>
<div>        走进任何一家书店，你会看见《Teach Yourself Java in 7 Days》（7天Java无师自通）的旁边是一长排看不到尽头的类似书籍，它们要教会你Visual Basic、Windows、Internet等等，而只需要几天甚至几小时。我在<a href="http://www.amazon.com/" target="_blank">Amazon.com</a>上进行了如下<a href="http://www.amazon.com/exec/obidos/tg/browse/-/468558/104-5938873-6579160">搜索</a>：</div>
<div><a href="http://www.amazon.com/exec/obidos/search-handle-url/ix=books&#38;rank=%2Bfeaturedrank&#38;fqp=power%01pubdate%3A%20after%201992%20and%20title%3A%20days%20and%0D%20%28title%3A%20learn%20or%20title%3A%20teach%20yourself%29&#38;sz=25&#38;pg=1/ref=s_b_np" target="_blank">pubdate: after 1992 and title: days and (title: learn or title: teach yourself)
</a> (出版日期：1992年后 and 书名：天 and （书名：学会 or 书名：无师自通）)</div>
<div>我一共得到了248个搜索结果。前面的78个是计算机书籍（第79个是《<a href="http://www.amazon.com/exec/obidos/ASIN/0781802245/" target="_blank">Learn Bengali in 30 days</a>》，30天学会孟加拉语）。我把关键词“days”换成“<a href="http://www.amazon.com/exec/obidos/search-handle-url/ix=books&#38;rank=%2Bfeaturedrank&#38;fqp=power%01pubdate%3A%20after%201992%20and%20title%3A%20hours%20and%0D%20%28title%3A%20learn%20or%20title%3A%20teach%20yourself%29&#38;sz=25&#38;pg=3/ref=s_b_np" target="_blank">hours</a>”，得到了非常相似的结果：这次有253本书，头77本是计算机书籍，第78本是《<a href="http://www.amazon.com/exec/obidos/ASIN/0028638999/" target="_blank">Teach Yourself Grammar and Style in 24 Hours</a>》（24小时学会文法和文体）。头200本书中，有96%是计算机书籍。</div>
<div></div>
<div>结论是，要么是人们非常急于学会计算机，要么就是不知道为什么计算机惊人地简单，比任何东西都容易学会。没有一本书是要在几天里教会人们欣赏贝多芬或者量子物理学，甚至怎样给狗打扮。在《<em><a href="http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html">How to Design Programs</a></em>》这本书里说“<em>Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies.” </em>（坏的程序是很容易的，就算他们是笨蛋白痴都可以在21天内学会。）</div>
<div></div>
<div>让我们来分析一下像《<a href="http://www.amazon.com/Learn-C-Three-Days-Rachele/dp/1556227078" target="_self">Learn C++ in Three Days</a>》（3天学会C++）这样的题目到底是什么意思：</div>
<ul>
	<li><strong>学会</strong>：在3天时间里，你不够时间写一些有意义的程序，并从它们的失败与成功中学习。你不够时间跟一些有经验的 程序员一起工作，你不会知道在C++那样的环境中是什么滋味。简而言之，没有足够的时间让你学到很多东西。所以这些书谈论的只是表面上的精通，而非深入的 理解。如Alexander Pope（英国诗人、作家，1688-1744）所言，<strong>一知半解是危险的（a little learning is a dangerous thing）</strong></li>
	<li><strong>C++</strong>：在3天时间里你可以学会C++的语法（如果你已经会一门类似的语言），但你无法学到多少如何运用这些 语法。简而言之，如果你是，比如说一个Basic程序员，你可以学会用C++语法写出Basic风格的程序，但你学不到C++真正的优点（和缺点）。那关 键在哪里？Alan Perlis（ACM第一任主席，图灵奖得主，1922-1990）曾经说过：“<strong>如果一门语言不能影响你对编程的想法，那它就不值得去学</strong>”。另一种观点是，有时候你不得不学一点C++（更可能是javascript和Flash Flex之类）的皮毛，因为你需要接触现有的工具，用来完成特定的任务。但此时你不是在学习如何编程，你是在学习如何完成任务。</li>
	<li><strong>3天</strong>：不幸的是，这是不够的，正如下一节所言。</li>
</ul>
<h2><span style="color: #ff6600;">10年学编程</span></h2>
<div>一些研究者（<a href="http://www.amazon.com/exec/obidos/ASIN/034531509X/">Bloom (1985)</a>, <a href="http://norvig.com/21-days.html#bh">Bryan &#38; Harter (1899)</a>, <a href="http://www.amazon.com/exec/obidos/ASIN/0805803092">Hayes (1989)</a>, <a href="http://norvig.com/21-days.html#sc">Simmon &#38; Chase (1973)</a>） 的研究表明，在许多领域，都需要大约10 年时间才能培养出专业技能，包括国际象棋、作曲、绘画、钢琴、游泳、网球，以及神经心理学和拓扑学的研究。似乎并不存在真正的捷径：即使是莫扎特，他4 岁就显露出音乐天才，在他写出世界级的音乐之前仍然用了超过13年时间。再看另一种音乐类型的披头士，他们似乎是在1964年的Ed Sullivan节目中突然冒头的。但其实他们从1957年就开始表演了，即使他们很早就显示出了巨大的吸引力，他们第一次真正的成功——Sgt. Peppers——也要到1967年才发行。<a href="http://www.amazon.com/Outliers-Story-Success-Malcolm-Gladwell/dp/0316017922">Malcolm Gladwell</a> 研究报告称，把在伯林音乐学院学生一个班的学生按水平分成高中低，然后问他们对音乐练习花了多少工夫：</div>
<blockquote>在这三个小组中的每一个人基本上都是从相同的时间开始练习的（在五岁的时候）。在开始的几年里，每个人都是每周练习2-3 个小时。但是在八岁的时候，练习的强度开始显现差异。在这个班中水平最牛的人开始比别人练习得更多——在九岁的时候每周练习6个小时，十二岁的时候，每周 8个小时，十四岁的时候每周16个小时，并在成长过程中练习得越来越多，到20岁的时候，其每周练习可超过30个小时。到了20岁，这些优秀者在其生命中 练习音乐总共超过 10,000 小时。与之对比，其它人只平均有8,000小时，而未来只能留校当老师的人仅仅是4,000 小时。</blockquote>
<div>所以，这也许需要10,000 小时，并不是十年，但这是一个magic number。Samuel Johnson（英国诗人）认为10 年还是不够的：“<strong>任何领域的卓越成就都只能通过一生的努力来获得；稍低一点的代价也换不来。</strong>” （Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.） 乔叟（Chaucer，英国诗人，1340-1400）也抱怨说：“<strong>生命如此短暂，掌握技艺却要如此长久。</strong>”（the lyf so short, the craft so long to lerne.）</div>
<div>下面是我在编程这个行当里获得成功的处方：</div>
<ul>
	<li>对编程感兴趣，因为乐趣而去编程。确定始终都能保持足够的乐趣，以致你能够将10年时间投入其中。</li>
	<li>跟其他程序员交谈；阅读其他程序。这比任何书籍或训练课程都更重要。</li>
	<li>编程。最好的学习是<a href="http://www.engines4ed.org/hyperbook/nodes/NODE-120-pg.html" target="_blank">从实践中学习</a>。用更加技术性的语言来讲，“个体在特定领域最高水平的表现不是作为长期的经验的结果而自动获得的，但即使是非常富有经验的个体也可以通过刻意的努力而提高其表现水平。”（<a href="http://www2.umassd.edu/swpi/DesignInCS/expertise.html" target="_blank">p. 366</a>），而且“最有效的学习要求为特定个体制定适当难度的任务，有意义的反馈，以及重复及改正错误的机会。”（p. 20-21）《<a href="http://www.amazon.com/exec/obidos/ASIN/0521357349" target="_blank">Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life</a>》（在实践中认知：心智、数学和日常生活的文化）是关于这个观点的一本有趣的参考书。</li>
	<li>如果你愿意，在大学里花上4年时间（或者再花几年读研究生）。这能让你获得一些工作的入门资格，还能让你对此领域有更深入的理解，但如果你不喜欢 进学校，（作出一点牺牲）你在工作中也同样能获得类似的经验。在任何情况下，单从书本上学习都是不够的。“计算机科学的教育不会让任何人成为内行的程序 员，正如研究画笔和颜料不会让任何人成为内行的画家”, Eric Raymond，《The New Hacker’s Dictionary》（新黑客字典）的作者如是说。我曾经雇用过的最优秀的程序员之一仅有高中学历；但他创造出了许多伟大的软件（<a href="http://www.xemacs.org/" target="_blank">XEmacs</a>, <a href="http://www.mozilla.org/" target="_blank">Mozilla</a>），甚至有讨论他本人的<a href="http://groups.google.com/groups?q=alt.fan.jwz&#38;meta=site%3Dgroups" target="_blank">新闻组</a>，而且股票期权让他达到我无法企及的<a href="http://en.wikipedia.org/wiki/DNA_Lounge" target="_blank">富有程度</a>（译注：指Jamie Zawinski，Xemacs和Netscape的作者）。</li>
	<li>跟别的程序员一起完成项目。在一些项目中成为最好的程序员；在其他一些项目中当最差的一个。当你是最好的程序员时，你要测试自己领导项目的能力，并通过你的洞见鼓舞其他人。当你是最差的时候，你学习高手们在做些什么，以及他们不喜欢做什么（因为他们让你帮他们做那些事）。</li>
	<li>接手别的程序员完成项目。用心理解别人编写的程序。看看在没有最初的程序员在场的时候理解和修改程序需要些什么。想一想怎样设计你的程序才能让别人接手维护你的程序时更容易一些。</li>
	<li>学会至少半打编程语言。包括一门支持类抽象（class abstraction）的语言（如Java或C++），一门支持函数抽象（functional abstraction）的语言（如Lisp或ML），一门支持句法抽象（syntactic abstraction）的语言（如Lisp），一门支持说明性规约（declarative specification）的语言（如Prolog或C++模版），一门支持协程（coroutine）的语言（如Icon或Scheme），以及一门 支持并行处理（parallelism）的语言（如Sisal）。</li>
	<li>记住在“计算机科学”这个词组里包含“计算机”这个词。了解你的计算机执行一条指令要多长时间，从内存中取一个word要多长时间（包括缓存命中和未命中的情况），从磁盘上读取连续的数据要多长时间，定位到磁盘上的新位置又要多长时间。（<a href="http://norvig.com/21-days.html#answers" target="_blank">答案在这里</a>）</li>
	<li>尝试参与到一项语言标准化工作中。可以是ANSI C++委员会，也可以是决定自己团队的编码风格到底采用2个空格的缩进还是4个。不论是哪一种，你都可以学到在这门语言中到底人们喜欢些什么，他们有多喜欢，甚至有可能稍微了解为什么他们会有这样的感觉。</li>
	<li>拥有尽快从语言标准化工作中抽身的良好判断力。</li>
</ul>
抱着这些想法，我很怀疑从书上到底能学到多少东西。在我第一个孩子出生前，我读完了所有“怎样……”的书，却仍然感到自己是个茫无头绪的新手。30 个月后，我第二个孩子出生的时候，我重新拿起那些书来复习了吗？不。相反，我依靠我自己的经验，结果比专家写的几千页东西更有用更靠得住。

Fred Brooks在他的短文《<a href="http://en.wikipedia.org/wiki/No_Silver_Bullet" target="_blank">No Silver Bullets</a>》（没有银弹）中确立了如何发现杰出的软件设计者的三步规划：
<ul>
	<li>尽早系统地识别出最好的设计者群体。</li>
	<li>指派一个事业上的导师负责有潜质的对象的发展，小心地帮他保持职业生涯的履历。</li>
	<li>让成长中的设计师们有机会互相影响，互相激励。</li>
</ul>
这实际上是假定了有些人本身就具有成为杰出设计师的必要潜质；要做的只是引导他们前进。<a href="http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html" target="_blank">Alan Perlis</a>说得更简洁：“每个人都可以被教授如何雕塑；而对米开朗基罗来说，能教给他的倒是怎样能够不去雕塑。杰出的程序员也一样”。

所以尽管去买那些Java书；你很可能会从中找到些用处。但你的生活，或者你作为程序员的真正的专业技术，并不会因此在24小时、24天甚至24个月内发生真正的变化。]]></description>
		<wfw:commentRss>http://www.y513.com/201202941.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在ruby使用ssh连接linux服务器</title>
		<link>http://www.y513.com/201201935.html</link>
		<comments>http://www.y513.com/201201935.html#comments</comments>
		<pubDate>Thu, 12 Jan 2012 03:25:06 +0000</pubDate>
		<dc:creator>纸口杯</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.y513.com/?p=935</guid>
		<description><![CDATA[<blockquote>需要安装ssh的gem</blockquote>

<strong>使用ssh接口访问linux服务器</strong>
[ruby]
require 'net/ssh'
 

host = hostip
username = username
password = pwd

##显示文件和系统版本
server_cmd1 = 'ls -l'
server_cmd2 = 'cat /etc/issue'


# 连接到远程主机 foobar
ssh = Net::SSH.start(host, username, :password =&#62; password) do &#124;ssh&#124;
  result = ssh.exec!(server_cmd1)
  puts result
  result = ssh.exec!(server_cmd2)
  puts result
end
[/ruby]]]></description>
		<wfw:commentRss>http://www.y513.com/201201935.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby 解析 HTML (Nokogiri)</title>
		<link>http://www.y513.com/201112927.html</link>
		<comments>http://www.y513.com/201112927.html#comments</comments>
		<pubDate>Tue, 27 Dec 2011 03:17:10 +0000</pubDate>
		<dc:creator>纸口杯</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.y513.com/?p=927</guid>
		<description><![CDATA[很多时候我们需要爬取网页并且获取页面上的特定内容，不一定是做坏事比如爬取竞争对手的数据。也许我想定期爬自己的网站，找到页面上的链接，并且看它们指向的网页是不是都还可以访问。爬到一个网页，为了获得上面所有的链接，我以前首先想到的是用正则表达式。但是 HTML 并不一定是良构的 XML （如果每个人都用 XML 的标准写 HTML，那我们直接用标准的 XML parser 就好了），写正则表达式的时候你需要考虑大小写、换行、单引号/双引号/没有引号、某些地方的空格，太头疼了。

更好的办法当然是像在浏览器中使用 JavaScript 一样，在 DOM 树上找东西。我比较习惯用 jQuery，通过 CSS selector 来找页面上的节点非常舒服。

其实大部分的语言都有人实现了 HTML parser. 拿当下比较火的 Ruby 来说，随便一搜就找到两个：<a href="http://hpricot.com/">Hpricot</a> 和 <a href="http://nokogiri.org/">Nokogiri</a>.看名字好像都是日本人写的──不奇怪，Ruby 就是日本人发明的。

我在 Mac 上先试用了 Hpricot, 很奇怪我测试的一个文档不能正常处理。于是尝试 Nokogiri，很不错，没有发现问题。如果懂 XPath，Nokogiri 提供了 XPath 方式来寻找文档里的节点。或者你习惯了 CSS selector，在 Nokogiri 中也可以用类似 jQuery 的方法：

[ruby]
require 'nokogiri'

html = '...'
doc = Nokogiri::HTML(html)

# 获取页面上所有的链接
doc.css('a').each do &#124;link&#124;
  puts &#34;#{link.content}, #{link['href']}&#34;
end

# 打出 meta-keywords
puts doc.css('meta[name=&#34;keywords&#34;'])[0].content
[/ruby]

使用 Nokogiri 相对于正则表达式的优点当然是更简单直观，而且更安全。缺点呢？如果你只是要页面上很少的数据，Nokogiri 可能比正则表达式稍微慢点，因为不管你要的数据有多么少，它都需要分析整个 HTML 文档（不过 Nokogiri 也提供了 SAX 方式的解析）。

有意思的是 Nokogiri 一出来就号称比老牌的 Hpricot 快，然后 Hpricot 不服，很快就开始反击，我也不知道现在到底是什么情况了。有兴趣的可以看它们提供的 benchmark. 不过我想解析的速度再慢，这种过程的瓶颈还是在爬取网页这个环节上，尤其在中国这种网速超慢的条件下 :)]]></description>
		<wfw:commentRss>http://www.y513.com/201112927.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TextMate 快捷键收集&amp;教程</title>
		<link>http://www.y513.com/201110925.html</link>
		<comments>http://www.y513.com/201110925.html#comments</comments>
		<pubDate>Mon, 31 Oct 2011 02:39:03 +0000</pubDate>
		<dc:creator>纸口杯</dc:creator>
				<category><![CDATA[最新新闻]]></category>

		<guid isPermaLink="false">http://www.y513.com/?p=925</guid>
		<description><![CDATA[⌘T: Go To File，这个每天要用到N次
Esc: 自动补全
⌃W: 选中当前word
还有默认的类似Emacs的光标移动，不过这些是Mac自己的快捷键

For Rails:
⌘R: Run
⌃&#124;: ...
⌥⌘⇧↓ : Go to...
⌃⇧H：生成partial template
ctrl + ⌘ +上下键：移动整行
ctrl + shift + K： 删除整行
ctrl + shift +D：复制整行
ctrl + shift + T ：看看类里面的方法列表]]></description>
		<wfw:commentRss>http://www.y513.com/201110925.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>centos挂载ntfs（转）</title>
		<link>http://www.y513.com/201110921.html</link>
		<comments>http://www.y513.com/201110921.html#comments</comments>
		<pubDate>Tue, 25 Oct 2011 15:23:42 +0000</pubDate>
		<dc:creator>纸口杯</dc:creator>
				<category><![CDATA[liunx]]></category>

		<guid isPermaLink="false">http://www.y513.com/?p=921</guid>
		<description><![CDATA[摘自http://runforever.blog.163.com/blog/static/13993931620101115617150/

Linux下想访问NTFS分区，现在普遍的方法是利用ntfs-3g或者内核模块来实现。

一、安装ntfs-3g模块

1. 使用yum的安装方法：

请确定你已经安装了rpmforge软件库的源。请参考：RHEL/CentOS 5.5使用第三方软件库

然后安装下列组件。

yum install fuse ntfs-3g -y

注：如果你在使用 CentOS 5.3 或更旧版本，那么你需要安装来自 ELRepo 的 kmod-fuse。

2. 使用ntfs-3g官方源码编译安装的方法：

ntfs-3g下载页面：http://www.tuxera.com/community/ntfs-3g-download/

安装步骤：

wget http://tuxera.com/opensource/ntfs-3g-2010.8.8.tgz

tar zxvf ntfs-3g-2010.8.8.tgz

cd ntfs-3g-2010.8.8

./configure

make

make install

以上两种方法二选一，yum只适用于Redhat系，编译安装适用于所有Linux发行版

二、挂载NTFS文件系统

假设你的NTFS文件系统是 /dev/sda1 而你将会把它挂载在 /mnt/windows/c，请执行以下步骤。

1. 创建挂载点。（一般建议挂在mnt目录里）

mkdir /mnt/windows/c

2. 挂载NTFS分区：

mount -t ntfs-3g /dev/sda1 /mnt/windows/c

注：这里的sda1是指SATA或SCSI硬盘的第一个分区，如果是老式的IDE硬盘，会是hda1，具体请用fdisk -l查看。如偶的一台机：

[root@CentOS ~]# fdisk -l

Disk /dev/sda: 164.6 GB, 164696555520 bytes
255 heads, 63 sectors/track, 20023 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 2550 20482843+ 7 HPFS/NTFS
/dev/sda2 2551 20022 140343840 f W95 Ext’d (LBA)
/dev/sda5 5101 8924 30716248+ 7 HPFS/NTFS
/dev/sda6 8925 12748 30716248+ 7 HPFS/NTFS
/dev/sda7 12749 16572 30716248+ 7 HPFS/NTFS
/dev/sda8 16573 20022 27712093+ 7 HPFS/NTFS
/dev/sda9 2551 2584 273042 83 Linux
/dev/sda10 2585 4928 18828148+ 83 Linux
/dev/sda11 4929 5016 706828+ 82 Linux swap / Solaris

Partition table entries are not in disk order

3. 如果想开机系统启动时自动挂载NTFS分区，编辑vim /etc/fstab文件，加入类似如下内容：

只读式挂载：/dev/sda1 /mnt/windows/c ntfs-3g ro,umask=0222,defaults 0 0

读写式挂载：/dev/sda1 /mnt/windows/c ntfs-3g rw,umask=0000,defaults 0 0
或者： /dev/sda1 /mnt/windows/c ntfs-3g defaults 0 0

如偶的/etc/fstab文件如下：

LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda11 swap swap defaults 0 0

/dev/sda1 /mnt/windows/c ntfs-3g ro,umask=0222,defaults 0 0
/dev/sda5 /mnt/windows/e ntfs-3g defaults 0 0
/dev/sda6 /mnt/windows/f ntfs-3g defaults 0 0
/dev/sda7 /mnt/windows/g ntfs-3g defaults 0 0
/dev/sda8 /mnt/windows/h ntfs-3g defaults 0 0

其他注意问题：

从 CentOS 5.4 起（2.6.18-164 或更新的内核），fuse 模块已经包含在内核里。因此，已不再需要 dkms 及 dkms-fuse。如果你先前安装了 dkms-fuse，请用 yum remove dkms-fuse 命令把它卸装。请注意 CentOS 4.x 的用户需要这两个组件。

使用 centosplus 内核的用户

由CentOS-5.3开始，centoplus内核没有启用NTFS模块。这是由于5.3内的 NTFS 是不能运行的。详情请参阅 https://bugzilla.redhat.com/show_bug.cgi?id=481495 。如果你想使用来自CentOS内核的NTFS模块，你可以安装来自ELRepo的kmod-ntfs。但这个模块没有ntfs-3g好，只提供极度有限的写入功能。


<strong>NTFS-3G 用法</strong>
<blockquote>　　
　　1. 首先得到NTFS分区的信息
　　sudo fdisk -l &#124; grep NTFS
　　2. 设置挂载点，用如下命令实现挂载
　　mount -t ntfs-3g <ntfs Partition> <mount Point>
　　例如得到的NTFS分区信息为/dev/sdb1，挂载点设置在/mnt/ntfs_disk下，可以用
　　mount -t ntfs-3g /dev/sdb1 /mnt/ntfs_disk
　　或者直接用
　　ntfs-3g /dev/sdb1 /mnt/ntfs_disk
　　3. 如果想实现开机自动挂载，可以在/etc/fstab里面添加如下格式语句
　　<ntfs Partition> <mount Point> ntfs-3g silent,umask=0,locale=zh_CN.utf8 0 0
　　这样可以实现NTFS分区里中文文件名的显示。
　　4. 卸载分区可以用umount实现，用
　　umount <ntfs Partition>
　　或者
　　umount <mount Point>
</mount></ntfs></mount></ntfs></mount></ntfs></blockquote>]]></description>
		<wfw:commentRss>http://www.y513.com/201110921.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

