<?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>庆亮的博客-webgame架构 &#187; Linux/Unix/BSD</title>
	<atom:link href="http://www.qingliangcn.com/category/linux_unix_bsd/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.qingliangcn.com</link>
	<description>关注LAMP&#124;PHP源代码分析&#124;web架构&#124;PHP扩展&#124;Erlang&#124;服务端架构</description>
	<lastBuildDate>Thu, 22 Jul 2010 09:19:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>ubuntu下使用ntfs-config快速配置自动加载windows分区</title>
		<link>http://www.qingliangcn.com/2010/05/ubuntu%e4%b8%8b%e4%bd%bf%e7%94%a8ntfs-config%e5%bf%ab%e9%80%9f%e9%85%8d%e7%bd%ae%e8%87%aa%e5%8a%a8%e5%8a%a0%e8%bd%bdwindows%e5%88%86%e5%8c%ba/</link>
		<comments>http://www.qingliangcn.com/2010/05/ubuntu%e4%b8%8b%e4%bd%bf%e7%94%a8ntfs-config%e5%bf%ab%e9%80%9f%e9%85%8d%e7%bd%ae%e8%87%aa%e5%8a%a8%e5%8a%a0%e8%bd%bdwindows%e5%88%86%e5%8c%ba/#comments</comments>
		<pubDate>Wed, 19 May 2010 16:11:22 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Linux/Unix/BSD]]></category>
		<category><![CDATA[ntfs-config]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.qingliangcn.com/?p=258</guid>
		<description><![CDATA[apt-get install ntsf-config 恩，十分简单方便，记录以备查询。]]></description>
			<content:encoded><![CDATA[<p>apt-get install ntsf-config</p>
<p>恩，十分简单方便，记录以备查询。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2010/05/ubuntu%e4%b8%8b%e4%bd%bf%e7%94%a8ntfs-config%e5%bf%ab%e9%80%9f%e9%85%8d%e7%bd%ae%e8%87%aa%e5%8a%a8%e5%8a%a0%e8%bd%bdwindows%e5%88%86%e5%8c%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux之路 &#8212; SSH篇</title>
		<link>http://www.qingliangcn.com/2009/07/linux%e4%b9%8b%e8%b7%af-ssh%e7%af%87/</link>
		<comments>http://www.qingliangcn.com/2009/07/linux%e4%b9%8b%e8%b7%af-ssh%e7%af%87/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 07:29:56 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Linux/Unix/BSD]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[securecrt]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[winscp]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=151</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160;&#160; 需要的windows软件：SecureCRT，WinSCP 一、前言 &#160;&#160;&#160;&#160;&#160;&#160;&#160; 即使Linux本身的安全性已经相当好，我们仍然需要在实际操作中关注某些安全要点。目前大部分的Linux管理都采用远程控制来进行，如果保证远程控制中数据的安全是一个合格的linux管理员必须熟悉的技能。 &#160;&#160;&#160;&#160;&#160;&#160;&#160; 各种黑客行为、尝试给我们的网络带来了大量的破坏，但不可否认这些行为和尝试也给计算机安全带来了极大的促进。从理论上来说，网络传输中任何对称加密算法都是不安全的，所以我们在日常的linux管理中应该采用非对称加密算法来进行权限验证。SSH是一种加密传输数据的方式（不同于telnet等的明文数据传输），是目前最通用的linux远程安全控制方案，它提供两种认证方式：密码认证和密匙认证。关于非对称加密的相关知识请看 http://baike.baidu.com/view/554866.htm &#160;&#160;&#160;&#160;&#160;&#160; 本文以Centos 5.3 为例并假设你已经有一个安装好的Linux主机或者虚拟机，我这里采用的是虚拟机。 二、用户配置 平时我们为了安全一般不采用root直接登录到服务器，实际上多数的维护操作并不需要root权限，过多的权限可能只会带来更多的麻烦，通常我们只在需要时才su。那么如何进行日常的维护操作呢？ 1. 添加一个用于维护的账号， # useradd centosadmin， 为centosadmin设置密码， # passwd centosadmin，请记好你的密码 2.将该用户添加到wheel组。为什么？ 为了操作安全，我们需要只有某个特殊的用户组中用户输入了su -，并且有正确的root密码时才能获得root shell，而其他组的用户即使输入了正确的root密码，也无法获得su shell，而这个特殊的组通常为wheel，这仅仅是一个惯例，你可以自己添加一个组来实现这个功能。 3.配置只有wheel组的用户能够通过su 获得root shell。&#160;# vim /etc/pam.d/su 取消这一行的注释 &#160;auth required pam_wheel.so use_uid，然后保存退出 这时可以测试发现，非wheel已经无法通过su获得root shell了。 &#160; 三、密匙 1. # su centosadmin，输入你的密码。 # cd ~ 进入centosadmin的主目录，&#160;建立&#160;.ssh目录（为什么？）&#160; 2. #&#160;ssh-keygen&#160;-t&#160;rsa&#160;，表示使用SSH2协议生成RSA公匙和私匙。 你将看到这行提示&#160;&#160; Enter file [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要的windows软件：SecureCRT，WinSCP</p>
<p><span style="font-size: large"><strong><span style="color: #0000ff">一、前言</span></strong></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 即使Linux本身的安全性已经相当好，我们仍然需要在实际操作中关注某些安全要点。目前大部分的Linux管理都采用远程控制来进行，如果保证远程控制中数据的安全是一个合格的linux管理员必须熟悉的技能。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 各种黑客行为、尝试给我们的网络带来了大量的破坏，但不可否认这些行为和尝试也给计算机安全带来了极大的促进。从理论上来说，网络传输中任何对称加密算法都是不安全的，所以我们在日常的linux管理中应该采用非对称加密算法来进行权限验证。SSH是一种加密传输数据的方式（不同于telnet等的明文数据传输），是目前最通用的linux远程安全控制方案，它提供两种认证方式：密码认证和密匙认证。关于非对称加密的相关知识请看 <a href="http://baike.baidu.com/view/554866.htm">http://baike.baidu.com/view/554866.htm</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文以Centos 5.3 为例并假设你已经有一个安装好的Linux主机或者虚拟机，我这里采用的是虚拟机。<span id="more-151"></span></p>
<p><span style="font-size: large"><strong><span style="color: #0000ff">二、用户配置</span></strong></span></p>
<p>平时我们为了安全一般不采用root直接登录到服务器，实际上多数的维护操作并不需要root权限，过多的权限可能只会带来更多的麻烦，通常我们只在需要时才su。那么如何进行日常的维护操作呢？</p>
<p>1. 添加一个用于维护的账号， # useradd centosadmin， 为centosadmin设置密码， # passwd centosadmin，请记好你的密码</p>
<p>2.将该用户添加到wheel组。为什么？ 为了操作安全，我们需要只有某个特殊的用户组中用户输入了su -，并且有正确的root密码时才能获得root shell，而其他组的用户即使输入了正确的root密码，也无法获得su shell，而这个特殊的组通常为wheel，这仅仅是一个惯例，你可以自己添加一个组来实现这个功能。</p>
<p>3.配置只有wheel组的用户能够通过su 获得root shell。&nbsp;# vim /etc/pam.d/su</p>
<p><img alt="" height="44" src="http://www.qingliangcn.com/blog2/blog2/uploads/5(1).jpg" width="645" /></p>
<p>取消这一行的注释 &nbsp;auth required pam_wheel.so use_uid，然后保存退出</p>
<p>这时可以测试发现，非wheel已经无法通过su获得root shell了。</p>
<p><img alt="" height="72" src="http://www.qingliangcn.com/blog2/blog2/uploads/6(1).jpg" width="262" /></p>
<p>&nbsp;</p>
<p><span style="font-size: large"><strong><span style="color: #0000ff">三、密匙</span></strong></span></p>
<p><span style="font-size: larger">1. # su centosadmin，输入你的密码。 # cd ~ 进入centosadmin的主目录，&nbsp;建立&nbsp;.ssh目录（为什么？）&nbsp;</span></p>
<p><span style="font-size: larger">2. #&nbsp;ssh-keygen&nbsp;-t&nbsp;rsa&nbsp;，表示使用SSH2协议生成RSA公匙和私匙。</span></p>
<p><span style="font-size: larger">你将看到这行提示&nbsp;&nbsp;</span></p>
<p><span style="font-size: larger">Enter file in which to save the key (/home/centosadmin/.ssh/id_rsa): </span></p>
<p><span style="font-size: larger">如无特殊需要直接回车即可，然后是设置你的密匙口令</span></p>
<p><span style="font-size: larger">Enter passphrase (empty for no passphrase): </span></p>
<p><span style="font-size: larger">这个是在之后的密匙登录SSH时会用到，一定要记住。</span></p>
<p><span style="font-size: larger">3. 这时你的/home/centosadmin/.ssh/下应该有如下的两个文件</span></p>
<p><span style="font-size: larger">id_rsa&nbsp; id_rsa.pub</span></p>
<p><span style="font-size: larger">分别是私匙和公匙文件。</span></p>
<p><span style="font-size: larger">4. 下载密匙到本地。&nbsp; windows下打开winscp（没有这个工具？去下载吧）</span>，操作很简单，和FTP工具类似，登录后会自动进入对应用户的主目录</p>
<p><img alt="" height="236" src="http://www.qingliangcn.com/blog2/blog2/uploads/7(1).jpg" width="577" /></p>
<p>把</p>
<p><span style="font-size: larger">id_rsa&nbsp; id_rsa.pub</span></p>
<p><span style="font-size: larger">都下载到你的本地。</span></p>
<p><span style="font-size: larger">5.重命名公匙文件 #mv id_rsa.pub authorized_keys</span></p>
<p>&nbsp;</p>
<p><span style="font-size: large"><strong><span style="color: #0000ff">四、SSH配置</span></strong></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.打开SecureCRT， 登录到linux，现在还没有配置SSH，而SSH默认是密码认证的方式验证的，所以直接输入用户名密码即可。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.如果你是非root用户登录，请在连接终端下输入 su &#8211; 获得root权限，因为SSH的配置需要有管理员权限。</p>
<p><img alt="" height="56" src="http://www.qingliangcn.com/blog2/blog2/uploads/1(1).jpg" width="345" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. 开始编辑ssh的配置文件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [root@localhostCentos ~]# vim /etc/ssh/sshd_config</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.一次修改配置如下</p>
<p><img alt="" src="http://www.qingliangcn.com/blog2/blog2/uploads/2(1).jpg" /></p>
<p>PermitEmptyPasswords no代表不允许空密码登录</p>
<p>PasswordAuthentication no 代表不采用密码认证方式</p>
<p><img alt="" height="50" src="http://www.qingliangcn.com/blog2/blog2/uploads/3(1).jpg" width="371" /></p>
<p>PubkeyAuthentication yes 表示采用key文件方式认证</p>
<p>AuthorizedKeysFile&nbsp;&nbsp;&nbsp; .ssh/authorized_keys 表示对用用户的公匙文件放置的位置，文件默认相对的是对应用户的主目录。（看到这里我们就明白了为什么我们上面的操作中要建立.ssh目录，要重命名公匙文件了）</p>
<p><img alt="" height="59" src="http://www.qingliangcn.com/blog2/blog2/uploads/4(1).jpg" width="196" /></p>
<p>PermitRootLogin no 表示不允许root直接远程登录（这一部分之后会说明）</p>
<p>重启SSHD服务，你可以通过下面的命令完成。 # /etc/rc.d/init.d/sshd restart 或者 # service sshd restart</p>
<p><strong><span style="font-size: large"><span style="color: #0000ff">五、登录</span></span></strong><br />
	1.&nbsp; 退出当前的所有连接，重新登录Linux主机，记住前面我们已经设置不允许root直接远程，而是用centosadmin这个管理账号来登录。</p>
<p>
	2.SecureCRT提示你需要公匙文件，选择你的公匙文家，如果一切正常，此时会提示你输入你的密匙口令（还记得在哪里设置的吗？），OK！已经进入了。此时你的权限是centosadmin的用户权限，可以试试通过su看看能不能获得root shell。</p>
<p>&nbsp;</p>
<p><strong><span style="color: #0000ff"><span style="font-size: large">六、文件传输</span></span></strong></p>
<p>为了安全我们通常关闭所有不必要的服务，如果不需要频繁的传输大文件，利用SSH来传输文件是个非常安全的选择。需要工具 winscp和putty 的key-gen，为什么又多了一个工具？因为winscp是无法直接使用我们在服务器生成的密匙文件的， 需要使用putty的key-gen将我们现有的密匙文件转化成ppk格式。</p>
<p>打开PuTTYGen，选择load，文件类型选择all files，选择你从服务器上下载的私匙文件，这时会要求你输入密匙口令：</p>
<p><img alt="" height="134" src="http://www.qingliangcn.com/blog2/blog2/uploads/20090712001.jpg" width="226" /></p>
<p>确认密码后弹出</p>
<p><img alt="" height="170" src="http://www.qingliangcn.com/blog2/blog2/uploads/20090712002.jpg" width="323" /></p>
<p>点击确定，点击 save private key，保存ppk文件到你本地（U盘最佳）。</p>
<p>打开WINScp，密匙选择你刚刚保存的ppk文件</p>
<p><img alt="" height="356" src="http://www.qingliangcn.com/blog2/blog2/uploads/20090712003.jpg" width="520" /></p>
<p>登录，再次要求输入密匙口令，输入口令，OK！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/07/linux%e4%b9%8b%e8%b7%af-ssh%e7%af%87/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux之路 &#8212; 工具准备篇：SecureCRT配色显示</title>
		<link>http://www.qingliangcn.com/2009/07/linux%e4%b9%8b%e8%b7%af-%e5%b7%a5%e5%85%b7%e5%87%86%e5%a4%87%e7%af%87%ef%bc%9asecurecrt%e9%85%8d%e8%89%b2%e6%98%be%e7%a4%ba/</link>
		<comments>http://www.qingliangcn.com/2009/07/linux%e4%b9%8b%e8%b7%af-%e5%b7%a5%e5%85%b7%e5%87%86%e5%a4%87%e7%af%87%ef%bc%9asecurecrt%e9%85%8d%e8%89%b2%e6%98%be%e7%a4%ba/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 17:44:26 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Linux/Unix/BSD]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[securecrt]]></category>
		<category><![CDATA[颜色]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=140</guid>
		<description><![CDATA[SecureCRT的配置功能非常强大，可以完全的显示Linux下的颜色显示。设置如下： 会话设置 选择Xterm 选择颜色方案 &#160; 全局配置 修改颜色，文件目录和文件中注释默认显示为深蓝色，看起来相当的吃力 我选择修改为兰色，你可以根据自己的喜好修改 链接终端， # vim /etc/ssh/sshd_config vim 下键入syntax enable，打开语法着色功能。效果如下： 如果没有显示出颜色，而且你确认你的终端支持颜色显示，请先退出VIM，输入如下命令： TERM=xterm-color; export TREM 用于告诉VIM你的终端是支持颜色显示的。最后，祝你有个愉快的Linux之旅。 &#160;]]></description>
			<content:encoded><![CDATA[<p>SecureCRT的配置功能非常强大，可以完全的显示Linux下的颜色显示。设置如下：</p>
<p>会话设置</p>
<p><img alt="" height="135" src="http://www.qingliangcn.com/blog2/blog2/uploads/1.jpg" width="226" /></p>
<p>选择Xterm</p>
<p><img alt="" height="207" src="http://www.qingliangcn.com/blog2/blog2/uploads/2.jpg" width="497" /></p>
<p>选择颜色方案</p>
<p><img alt="" height="242" src="http://www.qingliangcn.com/blog2/blog2/uploads/6.jpg" width="453" /></p>
<p>&nbsp;</p>
<p>全局配置</p>
<p><img alt="" height="133" src="http://www.qingliangcn.com/blog2/blog2/uploads/3.jpg" width="223" /></p>
<p>修改颜色，文件目录和文件中注释默认显示为深蓝色，看起来相当的吃力</p>
<p><img alt="" height="281" src="http://www.qingliangcn.com/blog2/blog2/uploads/5.jpg" width="512" /></p>
<p>我选择修改为兰色，你可以根据自己的喜好修改</p>
<p><img alt="" height="199" src="http://www.qingliangcn.com/blog2/blog2/uploads/4.jpg" width="497" /></p>
<p>链接终端， # vim /etc/ssh/sshd_config</p>
<p>vim 下键入syntax enable，打开语法着色功能。效果如下：</p>
<p><img alt="" height="303" src="http://www.qingliangcn.com/blog2/blog2/uploads/7.jpg" width="328" /></p>
<p>如果没有显示出颜色，而且你确认你的终端支持颜色显示，请先退出VIM，输入如下命令：</p>
<p>TERM=xterm-color; export TREM</p>
<p>	用于告诉VIM你的终端是支持颜色显示的。最后，祝你有个愉快的Linux之旅。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/07/linux%e4%b9%8b%e8%b7%af-%e5%b7%a5%e5%85%b7%e5%87%86%e5%a4%87%e7%af%87%ef%bc%9asecurecrt%e9%85%8d%e8%89%b2%e6%98%be%e7%a4%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Centos 5下默认网关设置</title>
		<link>http://www.qingliangcn.com/2009/07/centos-5%e4%b8%8b%e9%bb%98%e8%ae%a4%e7%bd%91%e5%85%b3%e8%ae%be%e7%bd%ae/</link>
		<comments>http://www.qingliangcn.com/2009/07/centos-5%e4%b8%8b%e9%bb%98%e8%ae%a4%e7%bd%91%e5%85%b3%e8%ae%be%e7%bd%ae/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 17:10:24 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Linux/Unix/BSD]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[网关]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=137</guid>
		<description><![CDATA[Centos/Fedora下都有多种方法可以设置默认网关，即使是配置文件也有多处。以前感觉的是方便，今天感觉却是郁闷。描述一下情况： 本地虚拟机中安装了个Centos 5.2，安装过程填网关时输错，之后虚拟机中一直无法ping通外部网络，通过route add default gw 192.168.159.2命令添加后可ping通，但是重启后失效。之后直接写配置文件/etc/sysconfig/network，添加 GATEWAY 192.168.158.2，但是奇怪的是依然无法ping通（网络服务、机器均重启）。 没办法只好直接在/etc/sysconfig/network-scripts/ifcfg-eth0中添加GATEWAY 192.168.158.2，重启，OK！ 猜测是其他地方的配置文件设置的依然是错误的网关配置，而且优先级大于/etc/sysconfig/network中的配置。但是没有找到这个文件，有知道的麻烦指点一下。]]></description>
			<content:encoded><![CDATA[<p>Centos/Fedora下都有多种方法可以设置默认网关，即使是配置文件也有多处。以前感觉的是方便，今天感觉却是郁闷。描述一下情况：</p>
<p>本地虚拟机中安装了个Centos 5.2，安装过程填网关时输错，之后虚拟机中一直无法ping通外部网络，通过route add default gw 192.168.159.2命令添加后可ping通，但是重启后失效。之后直接写配置文件/etc/sysconfig/network，添加 GATEWAY 192.168.158.2，但是奇怪的是依然无法ping通（网络服务、机器均重启）。 没办法只好直接在/etc/sysconfig/network-scripts/ifcfg-eth0中添加GATEWAY 192.168.158.2，重启，OK！</p>
<p>猜测是其他地方的配置文件设置的依然是错误的网关配置，而且优先级大于/etc/sysconfig/network中的配置。但是没有找到这个文件，有知道的麻烦指点一下。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/07/centos-5%e4%b8%8b%e9%bb%98%e8%ae%a4%e7%bd%91%e5%85%b3%e8%ae%be%e7%bd%ae/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>su后“不能”使用某些超级命令的解决</title>
		<link>http://www.qingliangcn.com/2009/07/su%e5%90%8e%e4%b8%8d%e8%83%bd%e4%bd%bf%e7%94%a8%e6%9f%90%e4%ba%9b%e8%b6%85%e7%ba%a7%e5%91%bd%e4%bb%a4%e7%9a%84%e8%a7%a3%e5%86%b3/</link>
		<comments>http://www.qingliangcn.com/2009/07/su%e5%90%8e%e4%b8%8d%e8%83%bd%e4%bd%bf%e7%94%a8%e6%9f%90%e4%ba%9b%e8%b6%85%e7%ba%a7%e5%91%bd%e4%bb%a4%e7%9a%84%e8%a7%a3%e5%86%b3/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 03:43:04 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Linux/Unix/BSD]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[su]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=73</guid>
		<description><![CDATA[一个基础问题而已。从普通用户使用su之后，某些命令无法使用，如： bash: usermod: command not found 命令存在，也有了root权限，为何提示&#8220;命令找不到&#8221;，想一想就明白了是环境变量的问题（PATH）。man su，第一个参数告诉了我们真相。 -, -l, &#8211;login &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; make the shell a login shell 使用这个选项用于在su的同时（成功的情况下）更换到对应用户的shell，也就是说正常情况下，我们su之后只是获得了root权限，但是shell还是之前的普通权限用户的shell，而普通用户shell的PATH通常是没有/usr/sbin等目录的。解决方法： 1.添加这些超级工具目录到PATH 2.使用su &#8211; 来切换到root权限 3.使用命令的完全路径，如/usr/sbin/usermod]]></description>
			<content:encoded><![CDATA[<p>一个基础问题而已。从普通用户使用su之后，某些命令无法使用，如：</p>
<p>bash: usermod: command not found</p>
<p>命令存在，也有了root权限，为何提示&ldquo;命令找不到&rdquo;，想一想就明白了是环境变量的问题（PATH）。man su，第一个参数告诉了我们真相。</p>
<blockquote>
<p>-, -l, &#8211;login<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; make the shell a login shell</p>
</blockquote>
<p>
使用这个选项用于在su的同时（成功的情况下）更换到对应用户的shell，也就是说正常情况下，我们su之后只是获得了root权限，但是shell还是之前的普通权限用户的shell，而普通用户shell的PATH通常是没有/usr/sbin等目录的。解决方法：</p>
<p>1.添加这些超级工具目录到PATH</p>
<p>2.使用su &#8211; 来切换到root权限</p>
<p>3.使用命令的完全路径，如/usr/sbin/usermod</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/07/su%e5%90%8e%e4%b8%8d%e8%83%bd%e4%bd%bf%e7%94%a8%e6%9f%90%e4%ba%9b%e8%b6%85%e7%ba%a7%e5%91%bd%e4%bb%a4%e7%9a%84%e8%a7%a3%e5%86%b3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下fork函数的一些理解</title>
		<link>http://www.qingliangcn.com/2009/05/linux%e4%b8%8bfork%e5%87%bd%e6%95%b0%e7%9a%84%e4%b8%80%e4%ba%9b%e7%90%86%e8%a7%a3/</link>
		<comments>http://www.qingliangcn.com/2009/05/linux%e4%b8%8bfork%e5%87%bd%e6%95%b0%e7%9a%84%e4%b8%80%e4%ba%9b%e7%90%86%e8%a7%a3/#comments</comments>
		<pubDate>Sun, 10 May 2009 11:59:16 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Linux/Unix/BSD]]></category>
		<category><![CDATA[fork]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=93</guid>
		<description><![CDATA[fork函数用于linux下创建进程, fork的字面意思为&#34;叉子&#34;, 从之后的内容中将会了解到&#34;叉子&#34;是非常的贴切的. fork原型为 pid_t fork() , 如果成功则返回子进程的进程id, 如果失败则返回-1, 通常在系统内存不够或者进程数已经达到上限时, fork才会失败. 让我们来看一段代码 #include&#160;&#60;unistd.h&#62; #include&#160;&#60;sys/types.h&#62; #include&#160;&#60;stdio.h&#62; #include&#160;&#60;stdlib.h&#62; int&#160;main() { &#160;&#160;&#160;&#160;pid_t&#160;&#160;&#160;child; &#160;&#160;&#160;&#160;if&#160;((child&#160;=&#160;fork()&#160;&#160;==&#160;&#160;-1) &#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf(&#34;fork&#160;error:&#160;%s\n&#34;,&#160;strerr(errno)); &#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;else&#160;if&#160;(child&#160;==&#160;0) &#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf(&#34;I&#160;am&#160;child&#160;:&#160;%ld&#160;\n&#34;,&#160;getpid()); &#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;else &#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf(&#34;I&#160;am&#160;parent&#160;:&#160;%ld&#34;,&#160;getpid()); &#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;return&#160;0; } &#160; &#160; 先来看程序执行的结果: [root@localhost fork]# ./main I am child: 5731 I am parent : 5730 刚开始时, 我实在无法理解为什么可以运行if的两个分支. 仔细想想fork的作用: 创建进程 &#8212; 从父进程的此处开始复制执行.&#160;&#160; 当执行child [...]]]></description>
			<content:encoded><![CDATA[<p>fork函数用于linux下创建进程, fork的字面意思为&quot;叉子&quot;, 从之后的内容中将会了解到&quot;叉子&quot;是非常的贴切的.<br />
fork原型为 pid_t fork() , 如果成功则返回子进程的进程id, 如果失败则返回-1, 通常在系统内存不够或者进程数已经达到上限时, fork才会失败.<br />
让我们来看一段代码<span id="more-93"></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;unistd.h&gt;</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;sys/types.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;stdio.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;stdlib.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">int</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;main()</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;pid_t&nbsp;&nbsp;&nbsp;child;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">if</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;((child&nbsp;=&nbsp;fork()&nbsp;&nbsp;==&nbsp;&nbsp;-1)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;fork&nbsp;error:&nbsp;%s\n&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">,&nbsp;strerr(errno));</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">else</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">if</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;(child&nbsp;==&nbsp;0)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;I&nbsp;am&nbsp;child&nbsp;:&nbsp;%ld&nbsp;\n&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">,&nbsp;getpid());</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">else</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;I&nbsp;am&nbsp;parent&nbsp;:&nbsp;%ld&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">,&nbsp;getpid());</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">return</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;0;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span></p>
<p><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt">
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt">&nbsp;</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt">&nbsp;</p>
<p>先来看程序执行的结果:<br />
[root@localhost fork]# ./main<br />
I am child: 5731<br />
I am parent : 5730</p>
<p>刚开始时, 我实在无法理解为什么可以运行if的两个分支. <br />
仔细想想fork的作用: 创建进程 &#8212; 从父进程的此处开始复制执行.&nbsp;&nbsp;<br />
当执行child = fork() 时, 如果返回的是-1,也就是fork失败时, 则只输出fork错误信息. 但是如果成功的创建了进程, 那么从 child = fork() 开始的代码都将会被子进程继承, 一并继承的还有子进程的数据(除了文件锁, 未决信号集以及pid, ppid).&nbsp;&nbsp;从而子进程也会执行if ((child = fork()&nbsp;&nbsp;==&nbsp;&nbsp;-1) 这一句, 并进行if判断, fork函数在子进程中调用时会返回0 , 以表示自己是一个子进程. <br />
到这里大家应该明白为什么会输出if的两个分支了, 因为这是两个进程执行的结果. <br />
另外, fork函数在子进程中只是第一次运行时才会返回0 以表示自己的子进程身份, 而当第二次甚至更多次运行时则会创建新的属于自己的子进程. 来看下面的代码:<br />
(引用自http://www.cppblog.com/zhangxu/archive/2009/02/21/37640.html)<br />
&nbsp;</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;unistd.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;sys/types.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;stdio.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;stdlib.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">int</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;main()</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;0;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">for</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;(i=0;&nbsp;i&lt;3;&nbsp;i++)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">pid_t&nbsp;&nbsp;&nbsp;child&nbsp;=&nbsp;fork();</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">if</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;(child&nbsp;==&nbsp;0)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">printf(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;child\n&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">else</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">if</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;(child&nbsp;&gt;&nbsp;0)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">printf(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;parent\n&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">return</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;0;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt">&nbsp;</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">输出的结果有7个father和7个child, 为什么呢? 第一次运行时, 产生一个子进程, 该子进程输出child, 并且自父进程获得i=0 , 子进程继续运行到for之后则i=1, 因而该子进程可以进行两次for循环, 依次类推即可得出结果. (通过图形理解比较容易.见上述链接)</span></p>
<p><!--EndFragment--></span><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/05/linux%e4%b8%8bfork%e5%87%bd%e6%95%b0%e7%9a%84%e4%b8%80%e4%ba%9b%e7%90%86%e8%a7%a3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cygwin导入windows用户</title>
		<link>http://www.qingliangcn.com/2009/03/cygwin%e5%af%bc%e5%85%a5windows%e7%94%a8%e6%88%b7/</link>
		<comments>http://www.qingliangcn.com/2009/03/cygwin%e5%af%bc%e5%85%a5windows%e7%94%a8%e6%88%b7/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 12:11:25 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Linux/Unix/BSD]]></category>
		<category><![CDATA[cygwin]]></category>
		<category><![CDATA[导入用户]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=101</guid>
		<description><![CDATA[系统重装后,发现cygwin许多不能用了,进入系统path设置,添加 {%cygwinroot%}/bin ,其中{%cygwinroot%}是cygwin的安装目录. 发现可以用了, 由于之前很多设置都是和帐户有关的, 所以需要再导入之前的用户. cygwin没有adduser命令, 只能通过先windows添加用户, 然后通过如下命令来实现: mkpasswd -l [-d] &#62; /etc/passwd mkgroup&#160;&#160;-l [-d] &#62; /etc/group -d 用于导入域用户. &#160;]]></description>
			<content:encoded><![CDATA[<p>系统重装后,发现cygwin许多不能用了,进入系统path设置,添加 {%cygwinroot%}/bin ,其中{%cygwinroot%}是cygwin的安装目录.<br />
发现可以用了, 由于之前很多设置都是和帐户有关的, 所以需要再导入之前的用户. cygwin没有adduser命令, 只能通过先windows添加用户, 然后通过如下命令来实现:<br />
mkpasswd -l [-d] &gt; /etc/passwd<br />
mkgroup&nbsp;&nbsp;-l [-d] &gt; /etc/group<br />
-d 用于导入域用户.<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/03/cygwin%e5%af%bc%e5%85%a5windows%e7%94%a8%e6%88%b7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用Portsnap更新Freebsd port tree</title>
		<link>http://www.qingliangcn.com/2008/12/%e4%bd%bf%e7%94%a8portsnap%e6%9b%b4%e6%96%b0freebsd-port-tree/</link>
		<comments>http://www.qingliangcn.com/2008/12/%e4%bd%bf%e7%94%a8portsnap%e6%9b%b4%e6%96%b0freebsd-port-tree/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 12:27:43 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Linux/Unix/BSD]]></category>
		<category><![CDATA[Freebsd]]></category>
		<category><![CDATA[port]]></category>
		<category><![CDATA[Portsnap]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=109</guid>
		<description><![CDATA[portsnap从Freebsd 6.0之后成为ports的默认部分, 从效率上来说比cvsup要快的多,因为它是一次性下载压缩包. 首先找个国内速度快的镜像 vi /etc/portsnap.conf SERVERNAME=portsnap.hshh.org&#160;&#160;//修改这里 直接更新 portsnap fetch update Looking up portsnap.hshh.org mirrors&#8230; none found. Fetching snapshot tag from portsnap.hshh.org&#8230; done. Fetching snapshot metadata&#8230; done. Fetching snapshot generated at Wed Dec 10 08:53:10 CST 2008: 9a1ae52a520fe4d3e68c95e6ba504df335263db970de9f 51% of&#160;&#160; 54 MB&#160;&#160;505 kBps 00m53s 嘿嘿,速度相当的快,比cvsup爽多了. &#160;]]></description>
			<content:encoded><![CDATA[<p>portsnap从Freebsd 6.0之后成为ports的默认部分, 从效率上来说比cvsup要快的多,因为它是一次性下载压缩包.</p>
<p>首先找个国内速度快的镜像 <br />
vi /etc/portsnap.conf</p>
<p>SERVERNAME=portsnap.hshh.org&nbsp;&nbsp;//修改这里</p>
<p>直接更新 <br />
portsnap fetch update<br />
Looking up portsnap.hshh.org mirrors&#8230; none found.<br />
Fetching snapshot tag from portsnap.hshh.org&#8230; done.<br />
Fetching snapshot metadata&#8230; done.<br />
Fetching snapshot generated at Wed Dec 10 08:53:10 CST 2008:<br />
9a1ae52a520fe4d3e68c95e6ba504df335263db970de9f 51% of&nbsp;&nbsp; 54 MB&nbsp;&nbsp;505 kBps 00m53s</p>
<p>嘿嘿,速度相当的快,比cvsup爽多了.<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2008/12/%e4%bd%bf%e7%94%a8portsnap%e6%9b%b4%e6%96%b0freebsd-port-tree/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeBSD下pkg_add安装tbz包出错.</title>
		<link>http://www.qingliangcn.com/2008/11/freebsd%e4%b8%8bpkg_add%e5%ae%89%e8%a3%85tbz%e5%8c%85%e5%87%ba%e9%94%99/</link>
		<comments>http://www.qingliangcn.com/2008/11/freebsd%e4%b8%8bpkg_add%e5%ae%89%e8%a3%85tbz%e5%8c%85%e5%87%ba%e9%94%99/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 12:31:46 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Linux/Unix/BSD]]></category>
		<category><![CDATA[Freebsd]]></category>
		<category><![CDATA[pkg_add]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=112</guid>
		<description><![CDATA[Freebsd最小化安装,版本 7.0: 想使用bash: 进入/cdrom/packages/shells 然后 pkg_add bash-3.2.25.tbz 提示: pkg_add: unable to open table of contents file &#8216;+CONTENTS&#8217; &#8211; not a package? 网上搜索没有答案.&#160;&#160; 无意中发现在/cdrom/packages/All下的都可以安装,为什么呢? 再次查看/cdrom/packages/shells下的文件,发现原来该文件夹下的文件都是硬链接文件, 郁闷&#8230;.]]></description>
			<content:encoded><![CDATA[<p>Freebsd最小化安装,版本 7.0: </p>
<p>想使用bash:<br />
进入/cdrom/packages/shells</p>
<p>然后 pkg_add bash-3.2.25.tbz <br />
提示: pkg_add: unable to open table of contents file &#8216;+CONTENTS&#8217; &#8211; not a package? </p>
<p>网上搜索没有答案.&nbsp;&nbsp;</p>
<p>无意中发现在/cdrom/packages/All下的都可以安装,为什么呢? 再次查看/cdrom/packages/shells下的文件,发现原来该文件夹下的文件都是硬链接文件, 郁闷&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2008/11/freebsd%e4%b8%8bpkg_add%e5%ae%89%e8%a3%85tbz%e5%8c%85%e5%87%ba%e9%94%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

