<?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>LinuxSense &#187; Linux命令</title>
	<atom:link href="http://www.linuxsense.org/archives/category/linux%e5%91%bd%e4%bb%a4/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linuxsense.org</link>
	<description>分享Linux技术的点点滴滴</description>
	<lastBuildDate>Sat, 01 Aug 2009 05:23:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>lsof 命令</title>
		<link>http://www.linuxsense.org/archives/9234.html</link>
		<comments>http://www.linuxsense.org/archives/9234.html#comments</comments>
		<pubDate>Fri, 03 Apr 2009 03:38:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux命令]]></category>
		<category><![CDATA[lsof]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=9234</guid>
		<description><![CDATA[lsof命令详解：lsof命令的原始功能是列出打开的文件的进程，但LINUX下，所有的设备都是以文件的行式存在的，所以，lsof的功能很强大.一般root用户才能执行lsof命令，普通用户可以看见/usr/sbin/lsof命令，但是普通用户执行会显示“permission denied”
sof指令的用法如下：
lsof abc.txt 显示开启文件abc.txt的进程
lsof -i :22 知道22端口现在运行什么程序
lsof -c abc 显示abc进程现在打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上，但是会搜索目录下的目录，时间较长
lsof -d 4 显示使用fd为4的进程

lsof -i 用以显示符合条件的进程情况
语法: lsof -i[46] [protocol][@hostname&#124;hostaddr][:service&#124;port]
46 &#8211;&#62; IPv4 or IPv6
protocol &#8211;&#62; TCP or UDP
hostname &#8211;&#62; Internet host name
hostaddr &#8211;&#62; IPv4位置
service &#8211;&#62; /etc/service中的 service name (可以不只一个)
port &#8211;&#62; 端口号 (可以不只一个)
例子: TCP:25 &#8211; TCP and port 25
@1.2.3.4 [...]]]></description>
			<content:encoded><![CDATA[<p>lsof命令详解：lsof命令的原始功能是列出打开的文件的进程，但LINUX下，所有的设备都是以文件的行式存在的，所以，lsof的功能很强大.一般root用户才能执行lsof命令，普通用户可以看见/usr/sbin/lsof命令，但是普通用户执行会显示“permission denied”</p>
<p>sof指令的用法如下：</p>
<p>lsof abc.txt 显示开启文件abc.txt的进程</p>
<p>lsof -i :22 知道22端口现在运行什么程序</p>
<p>lsof -c abc 显示abc进程现在打开的文件</p>
<p>lsof -g gid 显示归属gid的进程情况</p>
<p>lsof +d /usr/local/ 显示目录下被进程开启的文件</p>
<p>lsof +D /usr/local/ 同上，但是会搜索目录下的目录，时间较长</p>
<p>lsof -d 4 显示使用fd为4的进程</p>
<p><span id="more-9234"></span></p>
<p>lsof -i 用以显示符合条件的进程情况</p>
<p>语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]</p>
<p>46 &#8211;&gt; IPv4 or IPv6</p>
<p>protocol &#8211;&gt; TCP or UDP</p>
<p>hostname &#8211;&gt; Internet host name</p>
<p>hostaddr &#8211;&gt; IPv4位置</p>
<p>service &#8211;&gt; /etc/service中的 service name (可以不只一个)</p>
<p>port &#8211;&gt; 端口号 (可以不只一个)</p>
<p>例子: TCP:25 &#8211; TCP and port 25</p>
<p>@1.2.3.4 &#8211; Internet IPv4 host address 1.2.3.4</p>
<p>tcp@ohaha.ks.edu.tw:ftp &#8211; TCP protocol hosthaha.ks.edu.tw service name:ftp</p>
<p>lsof -n 不将IP转换为hostname，缺省是不加上-n参数</p>
<p>例子: lsof -i tcp@ohaha.ks.edu.tw:ftp -n</p>
<p>lsof -p 12 看进程号为12的进程打开了哪些文件</p>
<p>lsof +|-r [t] 控制lsof不断重复执行，缺省是15s刷新</p>
<p>-r，lsof会永远不断的执行，直到收到中断信号</p>
<p>+r，lsof会一直执行，直到没有档案被显示</p>
<p>例子：不断查看目前ftp连接的情况：lsof -i tcp@ohaha.ks.edu.tw:ftp -r</p>
<p>lsof -s 列出打开文件的大小，如果没有大小，则留下空白</p>
<p>lsof -u username 以UID，列出打开的文件</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/9234.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>fuser 命令</title>
		<link>http://www.linuxsense.org/archives/9232.html</link>
		<comments>http://www.linuxsense.org/archives/9232.html#comments</comments>
		<pubDate>Thu, 02 Apr 2009 07:11:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux命令]]></category>
		<category><![CDATA[fuser]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=9232</guid>
		<description><![CDATA[用途
使用文件或文件结构识别进程。
语法
fuser [ -c &#124; -d &#124; -f ] [ -k ] [ -u ] [ -x ] [ -V ]文件 &#8230;
描述
此 fuser 命令列出了本地进程的进程号，那些本地进程使用File 参数指定的本地或远程文件。对于阻塞特别设备，此命令列出了使用该设备上任何文件的进程。
每个进程号后面都跟随一个字母，该字母指示进程如何使用文件。
c 将此文件作为当前目录使用。
e 将此文件作为程序的可执行对象使用。
r 将此文件作为根目录使用。
s 将此文件作为共享库（或其它可装载对象）使用。

进程号被写入标准输出（在进程号之间有空格的行中）。一个换行符被写入标准错误（在每个文件操作数的最后一个输出之后）。其他所有输出被写入标准错误。
此 fuser 命令不会检测有 mmap 区域的进程，其中相关的文件描述符已从此被关闭。
标志
-c 包含 File的文件系统中关于任何打开的文件的报告。
-d 暗示使用了 -c 和 -x 标志。关于任何与文件系统（自父目录删除的）无链接的打开文件的报告。当与 -V 标志一起使用时，它也会报告被删除文件的节点号和大小。
-f 仅对文件的打开实例报告。
-k 将 SIGKILL 信号发送到每个本地进程。仅有 root 用户能终止另一用户的进程。
-u 为进程号后圆括号中的本地进程提供登录名。
-V 提供详细输出。
-x 与 -c 或 -f 连用，报告除标准 fuser [...]]]></description>
			<content:encoded><![CDATA[<p><strong>用途</strong><br />
使用文件或文件结构识别进程。</p>
<p><strong>语法</strong><br />
fuser [ -c | -d | -f ] [ -k ] [ -u ] [ -x ] [ -V ]文件 &#8230;</p>
<p><strong>描述<br />
</strong>此 fuser 命令列出了本地进程的进程号，那些本地进程使用File 参数指定的本地或远程文件。对于阻塞特别设备，此命令列出了使用该设备上任何文件的进程。</p>
<p>每个进程号后面都跟随一个字母，该字母指示进程如何使用文件。</p>
<p>c 将此文件作为当前目录使用。<br />
e 将此文件作为程序的可执行对象使用。<br />
r 将此文件作为根目录使用。<br />
s 将此文件作为共享库（或其它可装载对象）使用。</p>
<p><span id="more-9232"></span></p>
<p>进程号被写入标准输出（在进程号之间有空格的行中）。一个换行符被写入标准错误（在每个文件操作数的最后一个输出之后）。其他所有输出被写入标准错误。</p>
<p>此 fuser 命令不会检测有 mmap 区域的进程，其中相关的文件描述符已从此被关闭。</p>
<p><strong>标志</strong></p>
<p>-c 包含 File的文件系统中关于任何打开的文件的报告。<br />
-d 暗示使用了 -c 和 -x 标志。关于任何与文件系统（自父目录删除的）无链接的打开文件的报告。当与 -V 标志一起使用时，它也会报告被删除文件的节点号和大小。<br />
-f 仅对文件的打开实例报告。<br />
-k 将 SIGKILL 信号发送到每个本地进程。仅有 root 用户能终止另一用户的进程。<br />
-u 为进程号后圆括号中的本地进程提供登录名。<br />
-V 提供详细输出。<br />
-x 与 -c 或 -f 连用，报告除标准 fuser 输出以外的可执行的和可载入的对象。</p>
<p><strong>示例</strong><br />
要列出使用 /etc/passwd 文件的本地进程的进程号，请输入：</p>
<p>fuser /etc/passwd要列出使用 /etc/filesystems 文件的进程的进程号和用户登录名，请输入：</p>
<p>fuser -u /etc/filesystems要终止使用给定文件系统的所有进程，请输入：</p>
<p>fuser -k -x -u -c /dev/hd1 或者</p>
<p>fuser -kxuc /home任一命令都列出了进程号和用户名，然后终止每个正在使用 /dev/hd1 (/home) 文件系统的进程。仅有 root 用户能终止属于另一用户的进程。如果您正在试图卸下 /dev/hd1 文件系统，而一个正在访问 /dev/hd1 文件系统的进程不允许这样，您可能希望使用此命令。</p>
<p>要列出正在使用已从给定文件系统删除的文件的全部进程，请输入：</p>
<p>fuser -d /usr文件</p>
<p>/dev/kmem 用于系统映像。<br />
/dev/mem 也用于系统映像。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/9232.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pkill和pgrep命令详解</title>
		<link>http://www.linuxsense.org/archives/9230.html</link>
		<comments>http://www.linuxsense.org/archives/9230.html#comments</comments>
		<pubDate>Thu, 02 Apr 2009 05:51:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux命令]]></category>
		<category><![CDATA[pgrep]]></category>
		<category><![CDATA[pkill]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=9230</guid>
		<description><![CDATA[名称
pgrep, pkill – 查找或者发信号给进程通过名称和其它属性。
语法
pgrep [-flvx] [-n &#124; -o] [-d delim] [-P ppidlist] [-g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-G gidlist] [-J projidlist] [-t termlist] [-T taskidlist] [-c ctidlist] [-z zoneidlist] [pattern]
pkill [-signal] [-fvx] [-n &#124; -o] [-P ppidlist] [-g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-G gidlist] [-J projidlist] [-t termlist] [-T [...]]]></description>
			<content:encoded><![CDATA[<p><strong>名称</strong><br />
pgrep, pkill – 查找或者发信号给进程通过名称和其它属性。</p>
<p><strong>语法<br />
</strong>pgrep [-flvx] [-n | -o] [-d delim] [-P ppidlist] [-g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-G gidlist] [-J projidlist] [-t termlist] [-T taskidlist] [-c ctidlist] [-z zoneidlist] [pattern]</p>
<p>pkill [-signal] [-fvx] [-n | -o] [-P ppidlist] [-g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-G gidlist] [-J projidlist] [-t termlist] [-T taskidlist] [-c ctidlist] [-z zoneidlist] [pattern]</p>
<p><span id="more-9230"></span></p>
<p><strong>说明</strong><br />
　　pgrep程序检查在系统的中活动进程，报告进程属性匹配命令行上指定条件的进程的ID。每一个进程ID以一个十进制数表示，通过一个分割字符串和下一个ID分开，默认的分割字符串是一个新行。对于每个属性选项，用户可以在命令行上指定一个以逗号分割的可能值的集合。例如，<br />
　　pgrep -G other,daemon<br />
　　匹配真实组ID是other或者是daemon的进程。如果多个条件被指派，这些匹配条件按逻辑与&#8221;AND&#8221;规则运算。例如，<br />
　　pgrep -G other,daemon -U root,daemon<br />
　　匹配进程它的属性是：<br />
　　(真实的组ID是other或者是daemon) 与 (真实的用户ID是root或者是daemon)<br />
　　pkill函数和pgrep相同，除了匹配的进程被信号通知就像用kill(1)替代了pgrep的进程ID的输出。一个信号名称或者数字可以作为pkill的第一个命令行选项。</p>
<p><strong>选项</strong><br />
　　支持下面的选项：The following options are supported:<br />
　　-c ctidlist　仅匹配列表中列出的ID的进程。<br />
　　-d delim　指定每一个匹配的进程ID之间分割字符串。如果没有 -d 选项指定，默认的是新行字符。-d 选项仅在pgrep命令中有效。<br />
　　-f正则表达式模式将执行与完全进程参数字符串 (从/proc/nnnnn/psinfo文件的pr_psargs字段获得)匹配。如果没有 -f 选项，表达式仅对执行文件名称(从/proc/nnnnn/psinfo文件pr_fname字段获得)匹配。<br />
　　-g pgrplist仅匹配进程组ID在给定列表中的进程。如果组0包括在列表中，这个被解释为pgrep或者pkill进程的组ID。<br />
　　-G gidlist仅匹配真实组ID在给定列表中的进程。每一个组ID可以使用组名称或者数字的组ID指定。<br />
　　-J projidlist匹配项目ID在给定列表中的进程。每一个项目ID可以使用项目的名称或者数字项目ID来指定。<br />
　　-l长格式输出。输出每一个匹配进程的名称连同进程ID。进程名称从pr_psargs 或者 pr_fname字段获得，依赖于-f选项是否指定。-l选项仅在pgrep命令中有效。<br />
　　-n匹配最新（最近生成的）符合所有其它匹配条件的进程。不能和-o选项一起使用。<br />
　　-o匹配最旧（最早生成的）符合所有其它匹配条件的进程。不能和-n选项一起使用。<br />
　　-P ppidlist 仅匹配给定列表中父进程ID的进程。<br />
　　-s sidlist 仅匹配进程会话ID在给定列表中的进程。如果ID 0在列表中，这个解释为pgrep或者pikill进程的会话ID。<br />
　　-t termlist　仅匹配与给定列表中终端关联的进程。每一个终端指定为在/dev中终端设备路径名称的后缀。例如term/a 或者 pts/0。<br />
　　-T taskidlist 仅匹配在给定列表中任务ID的进程。如果ID 0包括在列表中，这个解释为pgrep或者pikill进程的会话ID。<br />
　　-u euidlist 仅匹配有效用户ID在给定列表中的进程。每个用户ID可以通过一个登录名称或者数字的用户ID指定。<br />
　　-U uidlist 仅匹配真实的用户ID在给定列表中的进程。每个用户ID可以通过一个登录名称或者数字的用户ID指定。<br />
　　-v 反向匹配。匹配所有的进程除了符合匹配条件的。<br />
　　-x 仅认为进程其参数字符串或者执行文件名称正确匹配规定模式是匹配的进程。模式被认为是准确的当所有在进程参数字符串或者可执行文件名称的字符匹配模式。<br />
　　-z zoneidlist 仅匹配区域ID在给定列表中的进程。每一个区域ID可以使用一个区域名称或者一个数字的区域ID指定。这个选项仅在全局区域中执行有效。如果pkill程序用来往其它区域的进程发信号，进城必须宣称{PRIV_PROC_ZONE}特权。<br />
　　-signal 指定发往每一个匹配进程的信号。如果没有指定，SIGTERM 是默认的信号。-signal仅在pkill命令中作为第一个选项有效。信号可以是在signal.h中定义的没有SIG前缀的一个符号名字，也可是一个相应的信号数值。</p>
<p><strong>操作</strong></p>
<p>支持如下操作:<br />
pattern<br />
　　　　指定一个扩展正则表达式(Extended Regular Expression (ERE))模式来匹配可执行文件名称或者完整的进程参数字符串。ERE语法的完整描述参看regex(5)。</p>
<p>例子</p>
<p>例子1 获得一个进程ID</p>
<p>获得sendmail的进程ID:</p>
<p>example% pgrep -x -u root sendmail<br />
283</p>
<p>例子2 终止一个进程</p>
<p>终止最近生成的xterm:</p>
<p>example% pkill -n xterm</p>
<p>Exit Status</p>
<p>　　如下退出值被返回：</p>
<p>　　0　一个或者多个进程被匹配。<br />
　　1　没有进程被匹配。<br />
　　2　指定了无效的命令行参数。<br />
　　3　出现一个致命的错误。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/9230.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>man hier中文</title>
		<link>http://www.linuxsense.org/archives/9227.html</link>
		<comments>http://www.linuxsense.org/archives/9227.html#comments</comments>
		<pubDate>Thu, 26 Mar 2009 01:13:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux命令]]></category>
		<category><![CDATA[hier]]></category>
		<category><![CDATA[man hier]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=9227</guid>
		<description><![CDATA[NAME 名称
hier &#8211; 文件系统描述
DESCRIPTION 描述
一个典型的Linux系统具有以下几个目录结构：
/ 根目录，是所有目录树开始的地方。
/bin 此目录下包括了单用户方式及系统启动或修复所用到的所有执行程序。
/boot 包括了引导程序的静态文件。此目录下包括了在引导过程中所必需的文件。系统装载程序及配制文件在 /sbin 和 /etc 目录中找到。
/dev 对应物理设备的指定文件或驱动程序。参见mknod(1)。
/dos 如果MS-DOS和Linux共存于一台计算机时，这里通常用于存放DOS 文件系统。
/etc 用于存放本地机的配置文件。一些大型套件，如X11，在 /etc 下有它们自己的子目录。系统配置文件可以放在这里或在 /usr/etc。 不过所有程序总是在 /etc 目录下查找所需的配置文件，你也可以将这些文件链接到目录 /usr/etc.
/etc/skel


当建立一个新用户账号时，此目录下的文件通常被复制到用户的主目录下。
/etc/X11
X11 window system所需的配置文件。
/home
在Linux机器上，用户主目录通常直接或间接地置在此目录下。其结构通常由本地机的管理员来决定。
/lib
此目录下包含系统引导和在根用户执行命令所必需用到的共享库。
/mnt
挂载临时文件系统的挂载点。
/proc
这是提供运行过程和核心文件系统 proc 挂载点。这一&#8221;伪&#8221;文件系统在以下章节中有详细叙述 proc(5)。
/sbin
类似于 /bin 此目录保存了系统引导所需的命令，但这些命令一般使用者不能执行。
/tmp
此目录用于保存临时文件，临时文件在日常维护或在系统启动时无需通知便可删除
/usr
此目录通常用于从一个独立的分区上挂载文件。它应保存共享只读类文件，这样它可以被运行Linux的不同主机挂载。
/usr/X11R6
X-Window系统 Version 11 release 6.
/usr/X11R6/bin
X-Windows系统使用的二进制文件；通常是在对更传统的 /usr/bin/X11 中文件的符号连接。
/usr/X11R6/lib
保存与X-Windows系统有关数据文件。
/usr/X11R6/lib/X11
此目录保存与运行X-Windows系统有关其他文件。通常是对来自 /usr/lib/X11 中文件的符号连接。
/usr/X11R6/include/X11
此目录保存包括使用X11窗口系统进行编译程序所需的文件。通常是对来自 /usr/lib/X11 中文件的符号连接。
/usr/bin
这是执行程序的主要目录，其中的绝大多数为一般使用者使用，除了那些启动系统或修复系统或不是本地安装的程序一般都放在此目录下。
/usr/bin/X11
X11执行文件放置的地方；在Linux系统中，它通常是对 /usr/X11R6/bin. 符号连接表
/usr/dict
此目录保存拼写检查器所使用的词汇表文件。
/usr/doc
此目录下应可以找到那些已安装的软件文件。
/usr/etc
此目录可用来那些存放整个网共享的配置文件。然而那可执行命令指向总是使用参照使用 /etc 目录下的文件。 /etc 目录下连接文件应指向 /usr/etc. 目录下适当的文件。
/usr/include
C程序语言编译使用的Include&#8221;包括&#8221;文件。
/usr/include/X11
C程序语言编译和X-Windows系统使用的 Include&#8221;包括&#8221;文件。它通常中指向 /usr/X11R6/include/X11. 符号连接表。
/usr/include/asm
申明汇编函数的Include&#8221;包括&#8221;文件，它通常是指向 /usr/src/linux/include/asm 目录的符号连接
/usr/include/linux
包含系统变更的信息通常是指向 /usr/src/linux/include/linux 目录的符号连接表，来获得操作系统特定信息。
(注：使用者应在此自行包含那些保证自己开发的程序正常运行所需的libc [...]]]></description>
			<content:encoded><![CDATA[<p><strong>NAME 名称</strong><br />
hier &#8211; 文件系统描述</p>
<p><strong>DESCRIPTION 描述</strong><br />
一个典型的Linux系统具有以下几个目录结构：<br />
<em>/ 根目录，是所有目录树开始的地方。<br />
/bin 此目录下包括了单用户方式及系统启动或修复所用到的所有执行程序。<br />
/boot 包括了引导程序的静态文件。此目录下包括了在引导过程中所必需的文件。系统装载程序及配制文件在 /sbin 和 /etc 目录中找到。<br />
/dev 对应物理设备的指定文件或驱动程序。参见mknod(1)。<br />
/dos 如果MS-DOS和Linux共存于一台计算机时，这里通常用于存放DOS 文件系统。<br />
/etc 用于存放本地机的配置文件。一些大型套件，如X11，在 /etc 下有它们自己的子目录。系统配置文件可以放在这里或在 /usr/etc。 不过所有程序总是在 /etc 目录下查找所需的配置文件，你也可以将这些文件链接到目录 /usr/etc.<br />
/etc/skel</em></p>
<p><span id="more-9227"></span><br />
<em><br />
当建立一个新用户账号时，此目录下的文件通常被复制到用户的主目录下。<br />
/etc/X11<br />
X11 window system所需的配置文件。<br />
/home<br />
在Linux机器上，用户主目录通常直接或间接地置在此目录下。其结构通常由本地机的管理员来决定。<br />
/lib<br />
此目录下包含系统引导和在根用户执行命令所必需用到的共享库。<br />
/mnt<br />
挂载临时文件系统的挂载点。<br />
/proc<br />
这是提供运行过程和核心文件系统 proc 挂载点。这一&#8221;伪&#8221;文件系统在以下章节中有详细叙述 proc(5)。<br />
/sbin<br />
类似于 /bin 此目录保存了系统引导所需的命令，但这些命令一般使用者不能执行。<br />
/tmp<br />
此目录用于保存临时文件，临时文件在日常维护或在系统启动时无需通知便可删除<br />
/usr<br />
此目录通常用于从一个独立的分区上挂载文件。它应保存共享只读类文件，这样它可以被运行Linux的不同主机挂载。<br />
/usr/X11R6<br />
X-Window系统 Version 11 release 6.<br />
/usr/X11R6/bin<br />
X-Windows系统使用的二进制文件；通常是在对更传统的 /usr/bin/X11 中文件的符号连接。<br />
/usr/X11R6/lib<br />
保存与X-Windows系统有关数据文件。<br />
/usr/X11R6/lib/X11<br />
此目录保存与运行X-Windows系统有关其他文件。通常是对来自 /usr/lib/X11 中文件的符号连接。<br />
/usr/X11R6/include/X11<br />
此目录保存包括使用X11窗口系统进行编译程序所需的文件。通常是对来自 /usr/lib/X11 中文件的符号连接。<br />
/usr/bin<br />
这是执行程序的主要目录，其中的绝大多数为一般使用者使用，除了那些启动系统或修复系统或不是本地安装的程序一般都放在此目录下。<br />
/usr/bin/X11<br />
X11执行文件放置的地方；在Linux系统中，它通常是对 /usr/X11R6/bin. 符号连接表<br />
/usr/dict<br />
此目录保存拼写检查器所使用的词汇表文件。<br />
/usr/doc<br />
此目录下应可以找到那些已安装的软件文件。<br />
/usr/etc<br />
此目录可用来那些存放整个网共享的配置文件。然而那可执行命令指向总是使用参照使用 /etc 目录下的文件。 /etc 目录下连接文件应指向 /usr/etc. 目录下适当的文件。<br />
/usr/include<br />
C程序语言编译使用的Include&#8221;包括&#8221;文件。<br />
/usr/include/X11<br />
C程序语言编译和X-Windows系统使用的 Include&#8221;包括&#8221;文件。它通常中指向 /usr/X11R6/include/X11. 符号连接表。<br />
/usr/include/asm<br />
申明汇编函数的Include&#8221;包括&#8221;文件，它通常是指向 /usr/src/linux/include/asm 目录的符号连接<br />
/usr/include/linux<br />
包含系统变更的信息通常是指向 /usr/src/linux/include/linux 目录的符号连接表，来获得操作系统特定信息。<br />
(注：使用者应在此自行包含那些保证自己开发的程序正常运行所需的libc 函数库。不管怎样，Linux核心系统不是设计用来执行直接运行用户程序的，它并不知道用户程序需要使用哪个版本的libc库 。如果你随意将 /usr/include/asm 和 /usr/include/linux 指向一个系统核心，系统很可能崩溃。Debian系统不这么做。它使用 libc*-dev运行包中提供的核心系统标识，以保证启动所有正确的文件。)</em></p>
<p><em>/usr/include/g++<br />
GNU C++编译程序所使用的Include&#8221;包括&#8221;文件。<br />
/usr/lib<br />
目标库文件，包括动态连接库加上一些通常不是直接调用的可执行文件案。一些复杂的程序可能在此占用整个子目录。<br />
/usr/lib/X11<br />
存放X系统数据文件及系统配置文件的地方。 Linux中通常是指向 /usr/X11R6/lib/X11 目录的符号连接表。<br />
/usr/lib/gcc-lib<br />
GNU C 编译程序所使用的可执行文件案和&#8221;包括&#8221;文件。 gcc(1).<br />
/usr/lib/groff<br />
GNU groff 文件格式系统所使用的文件。<br />
/usr/lib/uucp<br />
uucp(1) 所使用的文件。<br />
/usr/lib/zoneinfo<br />
有关时区信息文件文件。<br />
/usr/local<br />
安装在本地执行程序的地方。<br />
/usr/local/bin<br />
在此地放置本地执行程序的二进制文件。<br />
/usr/local/doc<br />
放置本地文件。<br />
/usr/local/etc<br />
安装在本地程序的配置文件。<br />
/usr/local/lib<br />
安装在本地程序的库文件。<br />
/usr/local/info<br />
安装在本地程序有关信息文件。<br />
/usr/local/man<br />
安装在本地程序使用手册。<br />
/usr/local/sbin<br />
安装在本地的系统管理程序。<br />
/usr/local/src<br />
安装在本地程序的原始码。<br />
/usr/man<br />
手册页通常放在此目录，或相关子目录下。<br />
/usr/man//man[1-9]<br />
此目录在指定的地方以原始码形式存放手册页。系统在所有的手册页中使用自己独特的语言及代码集，可能会省略 substring 子字符串。<br />
/usr/sbin<br />
此目录保存系统管理程序的二进制码，这些文件不是系统启动或文件系统挂载 /usr 目录或修复系统所必需的。<br />
/usr/share<br />
在此目录下不同的子目录中保存了同一个操作系统在不同构架下工作时特定应用程序的共享数据。使用者可以找到通常放在 /usr/doc 或 /usr/lib 或 /usr/man 目录下的这些数据。<br />
/usr/src<br />
系统不同组成部份的源文件包括参考数据报。不要将你自己与项目有关的文件放这里，因为在安装软件外，/usr下的文件属性除通常设为只读。<br />
/usr/src/linux<br />
系统核心资源通常拆包安装于此。这是系统中重要的一环，因为 /usr/include/linux 符号连接表指向此目录。你应当使用其他目录来来编译建立新核心。<br />
/usr/tmp<br />
此目录不再使用了。它应指向目录 /var/tmp。 这个链接只是出于系统兼容的目的，一般不再使用。<br />
/var<br />
此目录下文件的大小可能会改变，如缓冲文件可日志文件。<br />
/var/adm<br />
此目录为 /var/log 甩替代，通常是指向 /var/log 的符号连接表。<br />
/var/backups<br />
此目录用来存放重要系统文件的后备文件<br />
/var/catman/cat[1-9] or /var/cache/man/cat[1-9]<br />
此目录存储根据手册分类预先格式化的参考手册页。(这些参考手册页是相互独立的)<br />
/var/lock<br />
此目录存储锁定文件。依据命名习惯，设备锁定文件是 LCKxxxxx xxxxx与在文件系统中该设备名相同，使用的格式是HDU UUCP锁定文件，例如包含进程标识PID的锁定文件是一个10字节的ASCII格式的数字，后面跟一个换行符。<br />
/var/log<br />
各种日志文件。<br />
/var/preserve<br />
这是 vi(1) 存放正在编辑中的文件，以便以后可以恢复。<br />
/var/run<br />
运行时的变量文件，如存放进程标识和登入使用者信息的文件。 (utmp) 此目录下文件在系统启动时被自动清除。<br />
/var/spool<br />
各种程序产生的缓冲或排除等待的文件<br />
/var/spool/at<br />
at(1) 的作业存缓区<br />
/var/spool/cron<br />
cron(1) 的作业存缓区<br />
/var/spool/lpd<br />
打印缓存文件。<br />
/var/spool/mail<br />
使用者邮箱。<br />
/var/spool/smail<br />
存放 smail(1) 邮件发送程序的缓冲文件。<br />
/var/spool/news<br />
新闻子系统的缓冲目录<br />
/var/spool/uucp<br />
uucp(1) 的缓冲文件<br />
/var/tmp<br />
类似 /tmp, 此目录保存未指定持续时间的临时文件。</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/9227.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>lsof 命令使用简介</title>
		<link>http://www.linuxsense.org/archives/9223.html</link>
		<comments>http://www.linuxsense.org/archives/9223.html#comments</comments>
		<pubDate>Wed, 25 Mar 2009 02:22:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux命令]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=9223</guid>
		<description><![CDATA[lsof（list open files）是一个列出当前系统打开文件的工具。
在linux环境下，任何事物都以文件的形式存在，通过文件不仅仅可以访问常规数据，还可以访问网络连接和硬件。
所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等，系统在后台都为该应用程序分配了一个文件描述符，无论这个文件的本质如何，该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。
因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息，因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
lsof使用 lsof输出信息含义在终端下输入lsof即可显示系统打开的文件，因为 lsof 需要访问核心内存和各种文件，所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
COMMAND    PID      USER   FD      TYPE     DEVICE     SIZE       NODE      NAME
init       1         root  cwd      DIR       3,3       1024       2         /
init       1         root  rtd      DIR       3,3       1024       2         /
init       1         root  txt      REG       3,3       38432      1763452  /sbin/init
init       1         root  mem      REG       3,3       106114     1091620  /lib/libdl-2.6.so
init       1         root  mem      [...]]]></description>
			<content:encoded><![CDATA[<p>lsof（list open files）是一个列出当前系统打开文件的工具。</p>
<p>在linux环境下，任何事物都以文件的形式存在，通过文件不仅仅可以访问常规数据，还可以访问网络连接和硬件。</p>
<p>所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等，系统在后台都为该应用程序分配了一个文件描述符，无论这个文件的本质如何，该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。</p>
<p>因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息，因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。</p>
<p>lsof使用 lsof输出信息含义在终端下输入lsof即可显示系统打开的文件，因为 lsof 需要访问核心内存和各种文件，所以必须以 root 用户的身份运行它才能够充分地发挥其功能。</p>
<blockquote><p>COMMAND    PID      USER   FD      TYPE     DEVICE     SIZE       NODE      NAME<br />
init       1         root  cwd      DIR       3,3       1024       2         /<br />
init       1         root  rtd      DIR       3,3       1024       2         /<br />
init       1         root  txt      REG       3,3       38432      1763452  /sbin/init<br />
init       1         root  mem      REG       3,3       106114     1091620  /lib/libdl-2.6.so<br />
init       1         root  mem      REG       3,3       7560696    1091614  /lib/libc-2.6.so<br />
init       1         root  mem      REG       3,3       79460      1091669  /lib/libselinux.so.1<br />
init       1         root  mem      REG       3,3       223280     1091668  /lib/libsepol.so.1<br />
init       1         root  mem      REG       3,3       564136     1091607  /lib/ld-2.6.so<br />
init       1         root  10u      FIFO      0,15                  1309     /dev/initctl</p></blockquote>
<p><span id="more-9223"></span></p>
<p>每行显示一个打开的文件，若不指定条件默认将显示所有进程打开的所有文件。lsof输出各列信息的意义如下：</p>
<p>COMMAND：进程的名称<br />
PID：进程标识符<br />
USER：进程所有者<br />
FD：文件描述符，应用程序通过文件描述符识别该文件。如cwd、txt等<br />
TYPE：文件类型，如DIR、REG等<br />
DEVICE：指定磁盘的名称<br />
SIZE：文件的大小<br />
NODE：索引节点（文件在磁盘上的标识）<br />
NAME：打开文件的确切名称</p>
<p>其中FD 列中的文件描述符cwd 值表示应用程序的当前工作目录，这是该应用程序启动的目录，除非它本身对这个目录进行更改。</p>
<p>txt 类型的文件是程序代码，如应用程序二进制文件本身或共享库，如上列表中显示的 /sbin/init 程序。</p>
<p>其次数值表示应用程序的文件描述符，这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl，其文件描述符为 10。</p>
<p>u 表示该文件被打开并处于读取/写入模式，而不是只读 ® 或只写 (w) 模式。同时还有大写 的W 表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。</p>
<p>初始打开每个应用程序时，都具有三个文件描述符，从 0 到 2，分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。</p>
<p>与 FD 列相比，Type 列则比较直观。文件和目录分别称为 REG 和 DIR。而CHR 和 BLK，分别表示字符和块设备；或者 UNIX、FIFO 和 IPv4，分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。</p>
<p>lsof常用参数lsof 常见的用法是查找应用程序打开的文件的名称和数目。可用于查找出某个特定应用程序将日志数据记录到何处，或者正在跟踪某个问题。</p>
<p>例如，linux限制了进程能够打开文件的数目。通常这个数值很大，所以不会产生问题，并且在需要时，应用程序可以请求更大的值（直到某个上限）。如果你怀疑应用程序耗尽了文件描述符，那么可以使用 lsof 统计打开的文件数目，以进行验证。</p>
<p>lsof语法格式是： lsof ［options］ filename</p>
<p>常用的参数列表：</p>
<p>lsof filename 显示打开指定文件的所有进程<br />
lsof -a 表示两个参数都必须满足时才显示结果<br />
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件<br />
lsof -u username 显示所属user进程打开的文件<br />
lsof -g gid 显示归属gid的进程情况<br />
lsof +d /DIR/ 显示目录下被进程打开的文件<br />
lsof +D /DIR/ 同上，但是会搜索目录下的所有目录，时间相对较长<br />
lsof -d FD 显示指定文件描述符的进程<br />
lsof -n 不将IP转换为hostname，缺省是不加上-n参数<br />
lsof -i 用以显示符合条件的进程情况<br />
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]<br />
46 &#8211;&gt; IPv4 or IPv6<br />
protocol &#8211;&gt; TCP or UDP<br />
hostname &#8211;&gt; Internet host name<br />
hostaddr &#8211;&gt; IPv4地址<br />
service &#8211;&gt; /etc/service中的 service name (可以不只一个)<br />
port &#8211;&gt; 端口号 (可以不只一个)</p>
<p>例如： 查看22端口现在运行的情况 # lsof -i :22</p>
<p>COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
sshd 1409 root 3u IPv6 5678 TCP *:ssh (LISTEN)</p>
<p>查看所属root用户进程所打开的文件类型为txt的文件: # lsof -a -u root -d txt<br />
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
init 1 root txt REG 3,3 38432 1763452 /sbin/init<br />
mingetty 1632 root txt REG 3,3 14366 1763337 /sbin/mingetty<br />
mingetty 1633 root txt REG 3,3 14366 1763337 /sbin/mingetty<br />
mingetty 1634 root txt REG 3,3 14366 1763337 /sbin/mingetty<br />
mingetty 1635 root txt REG 3,3 14366 1763337 /sbin/mingetty<br />
mingetty 1636 root txt REG 3,3 14366 1763337 /sbin/mingetty<br />
mingetty 1637 root txt REG 3,3 14366 1763337 /sbin/mingetty<br />
kdm 1638 root txt REG 3,3 132548 1428194 /usr/bin/kdm<br />
X 1670 root txt REG 3,3 1716396 1428336 /usr/bin/Xorg<br />
kdm 1671 root txt REG 3,3 132548 1428194 /usr/bin/kdm<br />
startkde 2427 root txt REG 3,3 645408 1544195 /bin/bash<br />
&#8230; &#8230;</p>
<p><strong>lsof使用实例</strong></p>
<p>一、查找谁在使用文件系统在卸载文件系统时，如果该文件系统中有任何打开的文件，操作通常将会失败。那么通过lsof可以找出那些进程在使用当前要卸载的文件系统，如下：</p>
<p># lsof /GTES11/<br />
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />
bash 4208 root cwd DIR 3,1 4096 2 /GTES11/<br />
vim 4230 root cwd DIR 3,1 4096 2 /GTES11/</p>
<p>在这个示例中，用户root正在其/GTES11目录中进行一些操作。一个 bash是实例正在运行，并且它当前的目录为/GTES11，另一个则显示的是vim正在编辑/GTES11下的文件。要成功地卸载/GTES11，应该在通知用户以确保情况正常之后，中止这些进程。</p>
<p>这个示例说明了应用程序的当前工作目录非常重要，因为它仍保持着文件资源，并且可以防止文件系统被卸载。这就是为什么大部分守护进程（后台进程）将它们的目录更改为根目录、或服务特定的目录（如 sendmail 示例中的 /var/spool/mqueue）的原因，以避免该守护进程阻止卸载不相关的文件系统。</p>
<p>二、恢复删除的文件当Linux计算机受到入侵时，常见的情况是日志文件被删除，以掩盖攻击者的踪迹。</p>
<p>管理错误也可能导致意外删除重要的文件，比如在清理旧日志时，意外地删除了数据库的活动事务日志。有时可以通过lsof来恢复这些文件。 当进程打开了某个文件时，只要该进程保持打开该文件，即使将其删除，它依然存在于磁盘中。</p>
<p>这意味着，进程并不知道文件已经被删除，它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。</p>
<p>除了该进程之外，这个文件是不可见的，因为已经删除了其相应的目录索引节点。</p>
<p>在/proc 目录下，其中包含了反映内核和进程树的各种文件。</p>
<p>/proc目录挂载的是在内存中所映射的一块区域，所以这些文件和目录并不存在于磁盘中，因此当我们对这些文件进行读取和写入时，实际上是在从内存中获取相关信息。</p>
<p>大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中，即 /proc/1234 中包含的是 PID 为 1234 的进程的信息。</p>
<p>每个进程目录中存在着各种文件，它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。</p>
<p>lsof 程序使用该信息和其他关于内核内部状态的信息来产生其输出。</p>
<p>所以lsof 可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。</p>
<p>当系统中的某个文件被意外地删除了，只要这个时候系统中还有进程正在访问该文件，那么我们就可以通过lsof从/proc目录下恢复该文件的内容。</p>
<p>假如由于误操作将/var/log/messages文件删除掉了，那么这时要将/var/log/messages文件恢复的方法如下：</p>
<p>首先使用lsof来查看当前是否有进程打开/var/logmessages文件，如下：</p>
<p># lsof |grep /var/log/messages<br />
syslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted)<br />
从上面的信息可以看到 PID 1283（syslogd）打开文件的文件描述符为2。同时还可以看到/var/log/messages已经标记被删除了。</p>
<p>因此我们可以在 /proc/1283/fd/2 （fd下的每个以数字命名的文件表示进程对应的文件描述符）中查看相应的信息，如下：</p>
<p># head -n 10 /proc/1283/fd/2<br />
Aug 4 13:50:15 holmes86 syslogd 1.4.1: restart.<br />
Aug 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started.<br />
Aug 4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8 (root@everestbuilder.linux-ren.org) (gcc version 4.2.0) #1 SMP Wed Jul 18 11:18:32 EDT 2007<br />
Aug 4 13:50:15 holmes86 kernel: BIOS-provided physical RAM map:<br />
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000000000 &#8211; 000000000009f000 (usable)<br />
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000000009f000 &#8211; 00000000000a0000 (reserved)<br />
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000100000 &#8211; 000000001f7d3800 (usable)<br />
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000001f7d3800 &#8211; 0000000020000000 (reserved)<br />
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000e0000000 &#8211; 00000000f0007000 (reserved)<br />
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000f0008000 &#8211; 00000000f000c000 (reserved)</p>
<p>从上面的信息可以看出，查看 /proc/8663/fd/15 就可以得到所要恢复的数据。</p>
<p>如果可以通过文件描述符查看相应的数据，那么就可以使用 I/O 重定向将其复制到文件中，</p>
<p>如: cat /proc/1283/fd/2 &gt; /var/log/messages<br />
对于许多应用程序，尤其是日志文件和数据库，这种恢复删除文件的方法非常有用。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
<strong>摘录总结lsof用法：</strong></p>
<p>　　lsof filename.txt 显示开启文件filename.txt的进程</p>
<p>　　lsof -i :22 知道22端口现在运行什么程序</p>
<p>　　lsof -c abc 显示abc进程现在打开的文件</p>
<p>　　lsof -g gid 显示归属gid的进程情况</p>
<p>　　lsof +d /usr/local/ 显示目录下被进程开启的文件</p>
<p>　　lsof +D /usr/local/ 同上，但是会搜索目录下的目录，时间较长</p>
<p>　　lsof -d 4 显示使用fd为4的进程</p>
<p>　　lsof -i 用以显示符合条件的进程情况</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/9223.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ulimit 命令</title>
		<link>http://www.linuxsense.org/archives/9219.html</link>
		<comments>http://www.linuxsense.org/archives/9219.html#comments</comments>
		<pubDate>Wed, 25 Mar 2009 01:52:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux命令]]></category>
		<category><![CDATA[ulimit]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=9219</guid>
		<description><![CDATA[1. 说明:
ulimit用于shell启动进程所占用的资源.
2. 类别:
shell内建命令
3. 语法格式:
ulimit [-acdfHlmnpsStvw] [size]
4. 参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes 5,简单实例:

5. 举例
在Linux下写程序的时候，如果程序比较大，经常会遇到“段错误”（segmentation fault）这样的问题，这主要就是由于Linux系统初始的堆栈大小（stack size）太小的缘故，一般为10M。我一般把stack size设置成256M，这样就没有段错误了！命令为：
ulimit -s 262140
如果要系统自动记住这个配置，就编辑/etc/profile文件，在 “ulimit -S -c 0 &#62; /dev/null 2&#62;&#38;1”行下，添加“ulimit -s 262140”，保存重启系统就可以了！
1]在RH8的环境文件/etc/profile中,我们可以看到系统是如何配置ulimit的:
#grep ulimit /etc/profile
ulimit -S -c 0 &#62; /dev/null 2&#62;&#38;1
这条语句设置了对软件资源和对core文件大小的设置
2]如果我们想要对由shell创建的文件大小作些限制,如:
#ll h
-rw-r&#8211;r&#8211; 1 lee lee 150062 7月 22 02:39 h
#ulimit -f 100 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1. 说明:</strong><br />
ulimit用于shell启动进程所占用的资源.<br />
<strong>2. 类别:</strong><br />
shell内建命令<br />
<strong>3. 语法格式:</strong><br />
ulimit [-acdfHlmnpsStvw] [size]<br />
<strong>4. 参数介绍:</strong><br />
-H 设置硬件资源限制.<br />
-S 设置软件资源限制.<br />
-a 显示当前所有的资源限制.<br />
-c size:设置core文件的最大值.单位:blocks<br />
-d size:设置数据段的最大值.单位:kbytes<br />
-f size:设置创建文件的最大值.单位:blocks<br />
-l size:设置在内存中锁定进程的最大值.单位:kbytes<br />
-m size:设置可以使用的常驻内存的最大值.单位:kbytes<br />
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n<br />
-p size:设置管道缓冲区的最大值.单位:kbytes<br />
-s size:设置堆栈的最大值.单位:kbytes<br />
-t size:设置CPU使用时间的最大上限.单位:seconds<br />
-v size:设置虚拟内存的最大值.单位:kbytes 5,简单实例:</p>
<p><span id="more-9219"></span><br />
<strong>5. 举例</strong><br />
在Linux下写程序的时候，如果程序比较大，经常会遇到“段错误”（segmentation fault）这样的问题，这主要就是由于Linux系统初始的堆栈大小（stack size）太小的缘故，一般为10M。我一般把stack size设置成256M，这样就没有段错误了！命令为：<br />
ulimit -s 262140<br />
如果要系统自动记住这个配置，就编辑/etc/profile文件，在 “ulimit -S -c 0 &gt; /dev/null 2&gt;&amp;1”行下，添加“ulimit -s 262140”，保存重启系统就可以了！<br />
1]在RH8的环境文件/etc/profile中,我们可以看到系统是如何配置ulimit的:<br />
#grep ulimit /etc/profile<br />
ulimit -S -c 0 &gt; /dev/null 2&gt;&amp;1<br />
这条语句设置了对软件资源和对core文件大小的设置<br />
2]如果我们想要对由shell创建的文件大小作些限制,如:<br />
#ll h<br />
-rw-r&#8211;r&#8211; 1 lee lee 150062 7月 22 02:39 h<br />
#ulimit -f 100 #设置创建文件的最大块(一块=512字节)<br />
#cat h&gt;newh<br />
File size limit exceeded<br />
#ll newh<br />
-rw-r&#8211;r&#8211; 1 lee lee 51200 11月 8 11:47 newh<br />
文件h的大小是150062字节,而我们设定的创建文件的大小是512字节x100块=51200字节<br />
当然系统就会根据你的设置生成了51200字节的newh文件.<br />
3]可以像实例1]一样,把你要设置的ulimit放在/etc/profile这个环境文件中.<br />
用途<br />
设置或报告用户资源极限。<br />
语法<br />
ulimit [ -H ] [ -S ] [ -a ] [ -c ] [ -d ] [ -f ] [ -m ] [ -n ] [ -s ] [ -t ] [ Limit ]<br />
描述<br />
ulimit 命令设置或报告用户进程资源极限，如 /etc/security/limits 文件所定义。文件包含以下缺省值极限：<br />
fsize = 2097151<br />
core = 2097151<br />
cpu = -1<br />
data = 262144<br />
rss = 65536<br />
stack = 65536<br />
nofiles = 2000<br />
当新用户添加到系统中时，这些值被作为缺省值使用。当向系统中添加用户时，以上值通过 mkuser 命令设置，或通过 chuser 命令更改。<br />
极限分为软性或硬性。通过 ulimit 命令，用户可将软极限更改到硬极限的最大设置值。要更改资源硬极限，必须拥有 root 用户权限。<br />
很多系统不包括以上一种或数种极限。 特定资源的极限在指定 Limit 参数时设定。Limit 参数的值可以是每个资源中指定单元中的数字，或者为值 unlimited。要将特定的 ulimit 设置为 unlimited，可使用词 unlimited。<br />
注：在 /etc/security/limits 文件中设置缺省极限就是设置了系统宽度极限， 而不仅仅是创建用户时用户所需的极限。<br />
省略 Limit 参数时，将会打印出当前资源极限。除非用户指定 -H 标志，否则打印出软极限。当用户指定一个以上资源时，极限名称和单元在值之前打印。如果未给予选项，则假定带有了 -f 标志。<br />
由于 ulimit 命令影响当前 shell 环境，所以它将作为 shell 常规内置命令提供。如果在独立的命令执行环境中调用该命令，则不影响调用者环境的文件大小极限。以下示例中正是这种情况：<br />
nohup ulimit -f 10000<br />
env ulimit 10000<br />
一旦通过进程减少了硬极限，若无 root 特权则无法增加，即使返回到原值也不可能。<br />
关于用户和系统资源极限的更多信息，请参见 AIX 5L Version 5.3 Technical Reference: Base Operating System and Extensions Volume 1 中的 getrlimit、setrlimit 或 vlimit 子例程。<br />
标志<br />
-a 列出所有当前资源极限。<br />
-c 以 512 字节块为单位，指定核心转储的大小。<br />
-d 以 K 字节为单位指定数据区域的大小。<br />
-f 使用 Limit 参数时设定文件大小极限（以块计），或者在未指定参数时报告文件大小极限。缺省值为 -f 标志。<br />
-H 指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限，可以增大硬极限。任何用户均可减少硬极限。<br />
-m 以 K 字节为单位指定物理存储器的大小。<br />
-n 指定一个进程可以拥有的文件描述符的数量的极限。<br />
-s 以 K 字节为单位指定堆栈的大小。<br />
-S 指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定，极限适用于以上二者。<br />
-t 指定每个进程所使用的秒数。<br />
退出状态<br />
返回以下退出值：<br />
0 成功完成。<br />
&gt;0 拒绝对更高的极限的请求，或发生错误。<br />
示例<br />
要将文件大小极限设置为 51,200 字节，输入：<br />
ulimit -f 100</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/9219.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ulimit简介</title>
		<link>http://www.linuxsense.org/archives/421.html</link>
		<comments>http://www.linuxsense.org/archives/421.html#comments</comments>
		<pubDate>Wed, 21 Jan 2009 10:03:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux命令]]></category>
		<category><![CDATA[ulimit]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=421</guid>
		<description><![CDATA[1,说明:
ulimit用于shell启动进程所占用的资源.
2,类别:
shell内建命令
3,语法格式:
ulimit [-acdfHlmnpsStvw] [size]
4,参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.

-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes 5,简单实例:
1]在RH8的环境文件/etc/profile中,我们可以看到系统是如何配置ulimit的:
#grep ulimit /etc/profile
ulimit -S -c 0 &#62; /dev/null 2&#62;&#38;1
这条语句设置了对软件资源和对core文件大小的设置
2]如果我们想要对由shell创建的文件大小作些限制,如:
#ll h
-rw-r&#8211;r&#8211; 1 lee lee 150062 7月 22 02:39 h
#ulimit -f 100 #设置创建文件的最大块(一块=512字节)
#cat h&#62;newh
File size limit exceeded
#ll newh
-rw-r&#8211;r&#8211; 1 lee lee 51200 11月 8 11:47 newh
文件h的大小是150062字节,而我们设定的创建文件的大小是512字节x100块=51200字节
当然系统就会根据你的设置生成了51200字节的newh文件.
3]可以像实例1]一样,把你要设置的ulimit放在/etc/profile这个环境文件中.
]]></description>
			<content:encoded><![CDATA[<p>1,说明:<br />
ulimit用于shell启动进程所占用的资源.<br />
2,类别:<br />
shell内建命令<br />
3,语法格式:<br />
ulimit [-acdfHlmnpsStvw] [size]</p>
<p>4,参数介绍:</p>
<p>-H 设置硬件资源限制.<br />
-S 设置软件资源限制.</p>
<p><span id="more-421"></span><br />
-a 显示当前所有的资源限制.<br />
-c size:设置core文件的最大值.单位:blocks<br />
-d size:设置数据段的最大值.单位:kbytes<br />
-f size:设置创建文件的最大值.单位:blocks<br />
-l size:设置在内存中锁定进程的最大值.单位:kbytes<br />
-m size:设置可以使用的常驻内存的最大值.单位:kbytes<br />
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n<br />
-p size:设置管道缓冲区的最大值.单位:kbytes<br />
-s size:设置堆栈的最大值.单位:kbytes<br />
-t size:设置CPU使用时间的最大上限.单位:seconds<br />
-v size:设置虚拟内存的最大值.单位:kbytes 5,简单实例:<br />
1]在RH8的环境文件/etc/profile中,我们可以看到系统是如何配置ulimit的:<br />
#grep ulimit /etc/profile<br />
ulimit -S -c 0 &gt; /dev/null 2&gt;&amp;1<br />
这条语句设置了对软件资源和对core文件大小的设置<br />
2]如果我们想要对由shell创建的文件大小作些限制,如:<br />
#ll h<br />
-rw-r&#8211;r&#8211; 1 lee lee 150062 7月 22 02:39 h<br />
#ulimit -f 100 #设置创建文件的最大块(一块=512字节)<br />
#cat h&gt;newh<br />
File size limit exceeded<br />
#ll newh<br />
-rw-r&#8211;r&#8211; 1 lee lee 51200 11月 8 11:47 newh<br />
文件h的大小是150062字节,而我们设定的创建文件的大小是512字节x100块=51200字节<br />
当然系统就会根据你的设置生成了51200字节的newh文件.<br />
3]可以像实例1]一样,把你要设置的ulimit放在/etc/profile这个环境文件中.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/421.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux关机命令详解</title>
		<link>http://www.linuxsense.org/archives/416.html</link>
		<comments>http://www.linuxsense.org/archives/416.html#comments</comments>
		<pubDate>Mon, 17 Nov 2008 01:42:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux命令]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=416</guid>
		<description><![CDATA[linux下的一些常用的关机/重启命令有shutdown、halt、reboot、及init等，它们都可以达到重启系统的目的，但每个命令的内部工作过程是不同的，通过本文的介绍，希望你可以更加灵活的运用各种关机命令。
1.shutdown
shutdown命令安全地将系统关机。 有些用户会使用直接断掉电源的方式来关闭linux，这是十分危险的。因为linux与windows不同，其后台运行着许多进程，所以强制关机可能会导致进程的数据丢失﹐使系统处于不稳定的状态﹐甚至在有的系统中会损坏硬件设备。
而在系统关机前使用shutdown命令﹐系统管理员会通知所有登录的用户系统将要关闭。
并且login指令会被冻结﹐即新的用户不能再登录。直接关机或者延迟一定的时间才关机都是可能的﹐还可能重启。这是由所有进程〔process〕都会收到系统所送达的信号〔signal〕决定的。这让像vi之类的程序有时间储存目前正在编辑的文档﹐而像处理邮件〔mail〕和新闻〔news〕的程序则可以正常地离开等等。
shutdown执行它的工作是送信号〔signal〕给init程序﹐要求它改变runlevel。
Runlevel 0被用来停机〔halt〕﹐runlevel 6是用来重新激活〔reboot〕系统﹐而runlevel 1则是被用来让系统进入管理工作可以进行的状态﹔这是预设的﹐假定没有-h也没有-r参数给shutdown。要想了解在停机〔halt〕或者重新开机〔reboot〕过程中做了哪些动作﹐你可以在这个文件/etc/inittab里看到这些runlevels相关的资料。
shutdown 参数说明:
[-t] 在改变到其它runlevel之前﹐告诉init多久以后关机。
[-r] 重启计算器。
[-k] 并不真正关机﹐只是送警告信号给每位登录者〔login〕。
[-h] 关机后关闭电源〔halt〕。
[-n] 不用init﹐而是自己来关机。不鼓励使用这个选项﹐而且该选项所产生的后果往往不总是你所预期得到的。
[-c] cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数﹐但是可以输入一个用来解释的讯息﹐而这信息将会送到每位使用者。
[-f] 在重启计算器〔reboot〕时忽略fsck。
[-F] 在重启计算器〔reboot〕时强迫fsck。
[-time] 设定关机〔shutdown〕前的时间。
2.halt&#8212;-最简单的关机命令
其实halt就是调用shutdown -h。halt执行时﹐杀死应用进程﹐执行sync系统调用﹐文件系统写操作完成后就会停止内核。
参数说明:
[-n] 防止sync系统调用﹐它用在用fsck修补根分区之后﹐以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块。
[-w] 并不是真正的重启或关机﹐只是写wtmp〔/var/log/wtmp〕纪录。
[-d] 不写wtmp纪录〔已包含在选项[-n]中〕。
[-f] 没有调用shutdown而强制关机或重启。
[-i] 关机〔或重启〕前﹐关掉所有的网络接口。
[-p] 该选项为缺省选项。就是关机时调用poweroff。
3.reboot
reboot的工作过程差不多跟halt一样﹐不过它是引发主机重启﹐而halt是关机。它的参数与halt相差不多。
4.init
init是所有进程的祖先﹐它的进程号始终为1﹐所以发送TERM信号给init会终止所有的用户进程﹑守护进程等。shutdown 就是使用这种机制。init定义了8个运行级别(runlevel)，init 0为关机﹐init 1为重启。关于init可以长篇大论﹐这里就不再叙述。另外还有telinit命令可以改变init的运行级别﹐比如﹐telinit -iS可使系统进入单用户模式﹐并且得不到使用shutdown时的信息和等待时间。
]]></description>
			<content:encoded><![CDATA[<p>linux下的一些常用的关机/重启命令有shutdown、halt、reboot、及init等，它们都可以达到重启系统的目的，但每个命令的内部工作过程是不同的，通过本文的介绍，希望你可以更加灵活的运用各种关机命令。</p>
<p>1.shutdown</p>
<p>shutdown命令安全地将系统关机。 有些用户会使用直接断掉电源的方式来关闭linux，这是十分危险的。因为linux与windows不同，其后台运行着许多进程，所以强制关机可能会导致进程的数据丢失﹐使系统处于不稳定的状态﹐甚至在有的系统中会损坏硬件设备。</p>
<p>而在系统关机前使用shutdown命令﹐系统管理员会通知所有登录的用户系统将要关闭。</p>
<p>并且login指令会被冻结﹐即新的用户不能再登录。直接关机或者延迟一定的时间才关机都是可能的﹐还可能重启。这是由所有进程〔process〕都会收到系统所送达的信号〔signal〕决定的。这让像vi之类的程序有时间储存目前正在编辑的文档﹐而像处理邮件〔mail〕和新闻〔news〕的程序则可以正常地离开等等。</p>
<p>shutdown执行它的工作是送信号〔signal〕给init程序﹐要求它改变runlevel。</p>
<p>Runlevel 0被用来停机〔halt〕﹐runlevel 6是用来重新激活〔reboot〕系统﹐而runlevel 1则是被用来让系统进入管理工作可以进行的状态﹔这是预设的﹐假定没有-h也没有-r参数给shutdown。要想了解在停机〔halt〕或者重新开机〔reboot〕过程中做了哪些动作﹐你可以在这个文件/etc/inittab里看到这些runlevels相关的资料。</p>
<p>shutdown 参数说明:</p>
<p>[-t] 在改变到其它runlevel之前﹐告诉init多久以后关机。</p>
<p>[-r] 重启计算器。</p>
<p>[-k] 并不真正关机﹐只是送警告信号给每位登录者〔login〕。</p>
<p>[-h] 关机后关闭电源〔halt〕。</p>
<p>[-n] 不用init﹐而是自己来关机。不鼓励使用这个选项﹐而且该选项所产生的后果往往不总是你所预期得到的。</p>
<p>[-c] cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数﹐但是可以输入一个用来解释的讯息﹐而这信息将会送到每位使用者。</p>
<p>[-f] 在重启计算器〔reboot〕时忽略fsck。</p>
<p>[-F] 在重启计算器〔reboot〕时强迫fsck。</p>
<p>[-time] 设定关机〔shutdown〕前的时间。</p>
<p>2.halt&#8212;-最简单的关机命令</p>
<p>其实halt就是调用shutdown -h。halt执行时﹐杀死应用进程﹐执行sync系统调用﹐文件系统写操作完成后就会停止内核。</p>
<p>参数说明:</p>
<p>[-n] 防止sync系统调用﹐它用在用fsck修补根分区之后﹐以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块。</p>
<p>[-w] 并不是真正的重启或关机﹐只是写wtmp〔/var/log/wtmp〕纪录。</p>
<p>[-d] 不写wtmp纪录〔已包含在选项[-n]中〕。</p>
<p>[-f] 没有调用shutdown而强制关机或重启。</p>
<p>[-i] 关机〔或重启〕前﹐关掉所有的网络接口。</p>
<p>[-p] 该选项为缺省选项。就是关机时调用poweroff。</p>
<p>3.reboot</p>
<p>reboot的工作过程差不多跟halt一样﹐不过它是引发主机重启﹐而halt是关机。它的参数与halt相差不多。</p>
<p>4.init</p>
<p>init是所有进程的祖先﹐它的进程号始终为1﹐所以发送TERM信号给init会终止所有的用户进程﹑守护进程等。shutdown 就是使用这种机制。init定义了8个运行级别(runlevel)，init 0为关机﹐init 1为重启。关于init可以长篇大论﹐这里就不再叙述。另外还有telinit命令可以改变init的运行级别﹐比如﹐telinit -iS可使系统进入单用户模式﹐并且得不到使用shutdown时的信息和等待时间。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/416.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux的内核模块管理命令</title>
		<link>http://www.linuxsense.org/archives/414.html</link>
		<comments>http://www.linuxsense.org/archives/414.html#comments</comments>
		<pubDate>Fri, 14 Nov 2008 08:11:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux命令]]></category>
		<category><![CDATA[内核模块]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=414</guid>
		<description><![CDATA[内核模块管理是学习Linux的一个重要的必经之路，如果不断的使用新硬件可能这方面更显得尤为重要。
1. lsmod 列出已经加载的内核模块
lsmod 是列出目前系统中已加载的模块的名称及大小等；另外我们还可以查看 /proc/modules ，我们一样可以知道系统已经加载的模块。
 
2.modinfo 查看模块信息
modinfo 可以查看模块的信息，通过查看模块信息来判定这个模块的用途。
 
3.modprobe 挂载新模块以及新模块相依赖的模块
  modprobe 我们常用的功能就是挂载模块，在挂载某个内核模块的同时，这个模块所依赖的模块也被同时挂载；当然modprobe 也有列出内核所有模块，还有移除模块的功能；下在我们举个例子说一说咱们常用的功能和参数；
    modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-o ] [parameters...]3WiLinux联盟
    modprobe -r [-n] [-i] [-v] &#8230;3WiLinux联盟
    modprobe -l -t [ -a ...]
 
我们可以看到在/etc/modprobe.conf文件中存在的内容形式如下：
 
alias scsi_hostadapter mptbase3WiLinux联盟
alias scsi_hostadapter1 mptspi
 
最后一列是模块名字，中间的是模块的别名。那么如果我们知道了一个模块的名字，怎么知道它的别名呢？用下面的命令就可以：
#modprobe -c 3WiLinux联盟
可以查看所有模块的别名3WiLinux联盟
3WiLinux联盟
#modprobe -c 模块名 &#124;grep 模块名
 
 
modprobe -l 是列出内核中所有的模块，包括已挂载和未挂载的；通过modprobe -l ，我们能查看到我们所需要的模块，然后根据我们的需要来挂载；其实modprobe -l 读取的模块列表就位于 /lib/modules/&#8217;uname -r&#8217; 目录中；其中uname -r [...]]]></description>
			<content:encoded><![CDATA[<p>内核模块管理是学习Linux的一个重要的必经之路，如果不断的使用新硬件可能这方面更显得尤为重要。</p>
<p><strong>1. lsmod 列出已经加载的内核模块</strong><br />
lsmod 是列出目前系统中已加载的模块的名称及大小等；另外我们还可以查看 /proc/modules ，我们一样可以知道系统已经加载的模块。<br />
 <br />
<strong>2.modinfo 查看模块信息</strong><br />
modinfo 可以查看模块的信息，通过查看模块信息来判定这个模块的用途。<br />
 <br />
<strong>3.modprobe 挂载新模块以及新模块相依赖的模块</strong><br />
  modprobe 我们常用的功能就是挂载模块，在挂载某个内核模块的同时，这个模块所依赖的模块也被同时挂载；当然modprobe 也有列出内核所有模块，还有移除模块的功能；下在我们举个例子说一说咱们常用的功能和参数；<br />
    modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-o ] [parameters...]3WiLinux联盟<br />
    modprobe -r [-n] [-i] [-v] &#8230;3WiLinux联盟<br />
    modprobe -l -t [ -a ...]<br />
 <br />
我们可以看到在/etc/modprobe.conf文件中存在的内容形式如下：<br />
 <br />
alias scsi_hostadapter mptbase3WiLinux联盟<br />
alias scsi_hostadapter1 mptspi<br />
 </p>
<p>最后一列是模块名字，中间的是模块的别名。那么如果我们知道了一个模块的名字，怎么知道它的别名呢？用下面的命令就可以：</p>
<p>#modprobe -c 3WiLinux联盟<br />
可以查看所有模块的别名3WiLinux联盟<br />
3WiLinux联盟<br />
#modprobe -c 模块名 |grep 模块名<br />
 </p>
<p> </p>
<p>modprobe -l 是列出内核中所有的模块，包括已挂载和未挂载的；通过modprobe -l ，我们能查看到我们所需要的模块，然后根据我们的需要来挂载；其实modprobe -l 读取的模块列表就位于 /lib/modules/&#8217;uname -r&#8217; 目录中；其中uname -r 是内核的版本；<br />
 </p>
<p>  注意： 模块名是不能带有后缀的，我们通过modprobe -l 所看到的模块，都是带有.ko 或.o后缀；</p>
<p><strong>4.rmmod 移除已挂载模块</strong></p>
<p><strong>5.depmod 创建模块依赖关系的列表</strong></p>
<p>这个模块管理工具是创建模块依赖关系的列表，有几个参数我们注意一下就行了，目前的的Linux 发行版所用的内核是2.6x版本，是自动解决依赖关系，所以这个命令知道就行了；模块之前也有依赖关系，比如我们想驱动USB 移动硬盘，目前有两种驱动，一种是udev ，在内核中有，但目前不太稳定；另一种办法是用usb-storage驱动，而usb-storage 依赖的模块是scsi 模块，所以我们要用usb-storage 的模块，也得把scsi 编译安装；</p>
<p>    再举个例子：sata的硬盘，在Linux中的设备表示的是/dev/sd* ，比如 /dev/sda，/dev/sdb 等&#8230; 系统要驱动 sata硬盘，则需要把sata在内核中选中，或编译成模块，或内置于内核之中，在此同时，还需要在内核中选中ide ，scsi 的支持等；</p>
<p>    depmod 工具的洋文原意：depmod — program to generate modules.dep and map files.（我译的：为modules.dep 文件或映射文件创建依赖关系）</p>
<p>    [root@localhost beinan]# depmod -a 注：为所有列在/etc/modprobe.conf 或/etc/modules.conf 中的所有模块创建依赖关系，并且写入到modules.dep文件；3WiLinux联盟<br />
    [root@localhost beinan]# depmod -e 注：列出已挂载但不可用的模块；3WiLinux联盟<br />
    [root@localhost beinan]# depmod -n 注：列出所有模块的依赖关系，但仅仅是输出出来 （Write the dependency file on stdout only）</p>
<p>    注：modules.dep 位于 /lib/modules/内核版本 目录</p>
<p><strong>6.insmod 挂载模块</strong></p>
<p>insmod 这个工具，和modprobe 有点类似，但功能上没有modprobe 强，modprobe 在挂载模块是不用指定模块文件的路径，也不用带文件的后缀.o 或.ko ；而insmod 需要的是模块的所在目录的绝对路径，并且一定要带有模块文件名后缀的(modulefile.o 或modulesfile.ko ）</p>
<p><strong>7.与内核模块加载相关的配置文件</strong></p>
<p>模块的配置文件 modules.conf 或 modprobe.conf</p>
<p>    内核模块的开机自动挂载模块一般是位于一个配置文件，一般的Linux发行版本都有 /etc/modules.conf 或 /etc/modprobe.conf 。比如Fedora Core 4.0 内核模块开机自动加载文件是 /etc/modprobe.conf ；在这个文件中，一般是写入模块的加载命令或模块的别名的定义等；比如我们在modules.conf 中可能会发行类似的一行 ；</p>
<p>    alias eth0 8139too</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/414.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux的strace命令(详解)</title>
		<link>http://www.linuxsense.org/archives/413.html</link>
		<comments>http://www.linuxsense.org/archives/413.html#comments</comments>
		<pubDate>Fri, 14 Nov 2008 06:37:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux命令]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=413</guid>
		<description><![CDATA[&#160;本文详细讲述linux下的strace命令的用法。
strace 命令是一种强大的工具，它能够显示所有由用户空间程序发出的系统调用。　　strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息，而且不需要以任何特殊的方式来构建内核。　　下面记录几个常用 option . 　　1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程　　2 -o xxx.txt 输出到某个文件。　　3 -e execve 只记录 execve 这类系统调用 　　—————————————————　　进程无法启动，软件运行速度突然变慢，程序的&#8221;SegmentFault&#8221;等等都是让每个Unix系统用户头痛的问题，　　本文通过三个实际案例演示如何使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的&#8221;疑难杂症&#8221;。 　　　　　　truss和strace用来跟踪一个进程的系统调用或信号产生的情况，而 ltrace用来跟踪进程调用库函数的情况。truss是早期为System V R4开发的调试程序，包括Aix、FreeBSD在内的大部分Unix系统都自带了这个工具；　　而strace最初是为SunOS系统编写的，ltrace最早出现在GNU/DebianLinux中。　　这两个工具现在也已被移植到了大部分Unix系统中，大多数Linux发行版都自带了strace和ltrace，而FreeBSD也可通过Ports安装它们。　　　　你不仅可以从命令行调试一个新开始的程序，也可以把truss、strace或ltrace绑定到一个已有的PID上来调试一个正在运行的程序。三个调试工具的基本使用方法大体相同，下面仅介绍三者共有，而且是最常用的三个命令行参数：　　　　-f ：除了跟踪当前进程外，还跟踪其子进程。　　-o file ：将输出信息写到文件file中，而不是显示到标准错误输出（stderr）。　　-p pid ：绑定到一个由pid对应的正在运行的进程。此参数常用来调试后台进程。　　　　 使用上述三个参数基本上就可以完成大多数调试任务了，下面举几个命令行例子：　　truss -o ls.truss ls -al： 跟踪ls -al的运行，将输出信息写到文件/tmp/ls.truss中。　　strace -f -o vim.strace vim： 跟踪vim及其子进程的运行，将输出信息写到文件vim.strace。　　ltrace -p 234： 跟踪一个pid为234的已经在运行的进程。　　　　 三个调试工具的输出结果格式也很相似，以strace为例：　　　　brk(0) = 0×8062aa8　　brk(0×8063000) = 0×8063000　　mmap2(NULL, 4096, PROT_READ, MAP_PRIVATE, 3, 0×92f) = 0×40016000　　　　每一行都是一条系统调用，等号左边是系统调用的函数名及其参数，右边是该调用的返回值。 truss、strace和ltrace的工作原理大同小异，都是使用ptrace系统调用跟踪调试运行中的进程，详细原理不在本文讨论范围内，有兴趣可以参考它们的源代码。 [...]]]></description>
			<content:encoded><![CDATA[<p><P>&nbsp;本文详细讲述linux下的strace命令的用法。</P><br />
<P>strace 命令是一种强大的工具，它能够显示所有由用户空间程序发出的系统调用。<BR>　　strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息，而且不需要以任何特殊的方式来构建内核。<BR>　　下面记录几个常用 option . <BR>　　1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程<BR>　　2 -o xxx.txt 输出到某个文件。<BR>　　3 -e execve 只记录 execve 这类系统调用 <BR>　　—————————————————<BR>　　进程无法启动，软件运行速度突然变慢，程序的&#8221;SegmentFault&#8221;等等都是让每个Unix系统用户头痛的问题，<BR>　　本文通过三个实际案例演示如何使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的&#8221;疑难杂症&#8221;。 <BR>　　<BR>　　<BR>　　truss和strace用来跟踪一个进程的系统调用或信号产生的情况，而 ltrace用来跟踪进程调用库函数的情况。truss是早期为System V R4开发的调试程序，包括Aix、FreeBSD在内的大部分Unix系统都自带了这个工具；<BR>　　而strace最初是为SunOS系统编写的，ltrace最早出现在GNU/DebianLinux中。<BR>　　这两个工具现在也已被移植到了大部分Unix系统中，大多数Linux发行版都自带了strace和ltrace，而FreeBSD也可通过Ports安装它们。<BR>　　<BR>　　你不仅可以从命令行调试一个新开始的程序，也可以把truss、strace或ltrace绑定到一个已有的PID上来调试一个正在运行的程序。三个调试工具的基本使用方法大体相同，下面仅介绍三者共有，而且是最常用的三个命令行参数：<BR>　　<BR>　　-f ：除了跟踪当前进程外，还跟踪其子进程。<BR>　　-o file ：将输出信息写到文件file中，而不是显示到标准错误输出（stderr）。<BR>　　-p pid ：绑定到一个由pid对应的正在运行的进程。此参数常用来调试后台进程。<BR>　　<BR>　　 使用上述三个参数基本上就可以完成大多数调试任务了，下面举几个命令行例子：<BR>　　truss -o ls.truss ls -al： 跟踪ls -al的运行，将输出信息写到文件/tmp/ls.truss中。<BR>　　strace -f -o vim.strace vim： 跟踪vim及其子进程的运行，将输出信息写到文件vim.strace。<BR>　　ltrace -p 234： 跟踪一个pid为234的已经在运行的进程。<BR>　　<BR>　　 三个调试工具的输出结果格式也很相似，以strace为例：<BR>　　<BR>　　brk(0) = 0×8062aa8<BR>　　brk(0×8063000) = 0×8063000<BR>　　mmap2(NULL, 4096, PROT_READ, MAP_PRIVATE, 3, 0×92f) = 0×40016000<BR>　　<BR>　　每一行都是一条系统调用，等号左边是系统调用的函数名及其参数，右边是该调用的返回值。 truss、strace和ltrace的工作原理大同小异，都是使用ptrace系统调用跟踪调试运行中的进程，详细原理不在本文讨论范围内，有兴趣可以参考它们的源代码。 <BR>　　举两个实例演示如何利用这三个调试工具诊断软件的&#8221;疑难杂症&#8221;：<BR>　　<BR>　　案例一：运行clint出现Segment Fault错误<BR>　　<BR>　　操作系统：FreeBSD-5.2.1-release<BR>　　clint是一个C++静态源代码分析工具，通过Ports安装好之后，运行：<BR>　　<BR>　　# clint foo.cpp<BR>　　Segmentation fault (core dumped)<BR>　　 在Unix系统中遇见&#8221;Segmentation Fault&#8221;就像在MS Windows中弹出&#8221;非法操作&#8221;对话框一样令人讨厌。OK，我们用truss给clint&#8221;把把脉&#8221;：<BR>　　<BR>　　# truss -f -o clint.truss clint<BR>　　Segmentation fault (core dumped)<BR>　　# tail clint.truss<BR>　　 739: read(0×6,0×806f000,0×1000) = 4096 (0×1000)<BR>　　 739: fstat(6,0xbfbfe4d0) = 0 (0×0)<BR>　　 739: fcntl(0×6,0×3,0×0) = 4 (0×4)<BR>　　 739: fcntl(0×6,0×4,0×0) = 0 (0×0)<BR>　　 739: close(6) = 0 (0×0)<BR>　　 739: stat(&#8220;/root/.clint/plugins&#8221;,0xbfbfe680) ERR#2 &#8216;No such file or directory&#8217;<BR>　　SIGNAL 11<BR>　　SIGNAL 11<BR>　　Process stopped because of: 16<BR>　　process exit, rval = 139<BR>　　我们用truss跟踪clint的系统调用执行情况，并把结果输出到文件clint.truss，然后用tail查看最后几行。<BR>　 　注意看clint执行的最后一条系统调用（倒数第五行）：stat(&#8220;/root/.clint/plugins&#8221;,0xbfbfe680) ERR#2 &#8216;No such file or directory&#8217;，问题就出在这里：clint找不到目录&#8221;/root/.clint/plugins&#8221;，从而引发了段错误。怎样解决？很简单： mkdir -p /root/.clint/plugins，不过这次运行clint还是会&#8221;Segmentation Fault&#8221;9。继续用truss跟踪，发现clint还需要这个目录&#8221;/root/.clint/plugins/python&#8221;，建好这个目录后 clint终于能够正常运行了。 <BR>　　<BR>　　案例二：vim启动速度明显变慢<BR>　　<BR>　　操作系统：FreeBSD-5.2.1-release<BR>　 　vim版本为6.2.154，从命令行运行vim后，要等待近半分钟才能进入编辑界面，而且没有任何错误输出。仔细检查了.vimrc和所有的vim脚 本都没有错误配置，在网上也找不到类似问题的解决办法，难不成要hacking source code？没有必要，用truss就能找到问题所在：<BR>　　<BR>　　# truss -f -D -o vim.truss vim<BR>　　<BR>　　这里-D参数的作用是：在每行输出前加上相对时间戳，即每执行一条系统调用所耗费的时间。我们只要关注哪些系统调用耗费的时间比较长就可以了，用less仔细查看输出文件vim.truss，很快就找到了疑点：<BR>　　<BR>　　735: 0.000021511 socket(0×2,0×1,0×0) = 4 (0×4)<BR>　　735: 0.000014248 setsockopt(0×4,0×6,0×1,0xbfbfe3c8,0×4) = 0 (0×0)<BR>　　735: 0.000013688 setsockopt(0×4,0xffff,0×8,0xbfbfe2ec,0×4) = 0 (0×0)<BR>　　735: 0.000203657 connect(0×4,{ AF_INET 10.57.18.27:6000 },16) ERR#61 &#8216;Connection refused&#8217;<BR>　　735: 0.000017042 close(4) = 0 (0×0)<BR>　　735: 1.009366553 nanosleep(0xbfbfe468,0xbfbfe460) = 0 (0×0)<BR>　　735: 0.000019556 socket(0×2,0×1,0×0) = 4 (0×4)<BR>　　735: 0.000013409 setsockopt(0×4,0×6,0×1,0xbfbfe3c8,0×4) = 0 (0×0)<BR>　　735: 0.000013130 setsockopt(0×4,0xffff,0×8,0xbfbfe2ec,0×4) = 0 (0×0)<BR>　　735: 0.000272102 connect(0×4,{ AF_INET 10.57.18.27:6000 },16) ERR#61 &#8216;Connection refused&#8217;<BR>　　735: 0.000015924 close(4) = 0 (0×0)<BR>　　735: 1.009338338 nanosleep(0xbfbfe468,0xbfbfe460) = 0 (0×0)<BR>　　<BR>　 　vim试图连接10.57.18.27这台主机的6000端口（第四行的connect（）），连接失败后，睡眠一秒钟继续重试（第6行的 nanosleep（））。以上片断循环出现了十几次，每次都要耗费一秒多钟的时间，这就是vim明显变慢的原因。可是，你肯定会纳闷：&#8221;vim怎么会无 缘无故连接其它计算机的6000端口呢？&#8221;。问得好，那么请你回想一下6000是什么服务的端口？没错，就是X Server。看来vim是要把输出定向到一个远程X Server，那么Shell中肯定定义了DISPLAY变量，查看.cshrc，果然有这么一行：setenv DISPLAY ${REMOTEHOST}:0，把它注释掉，再重新登录，问题就解决了。<BR>　　<BR>　　<BR>　　案例三：用调试工具掌握软件的工作原理<BR>　　<BR>　　操作系统：Red Hat Linux 9.0<BR>　 　用调试工具实时跟踪软件的运行情况不仅是诊断软件&#8221;疑难杂症&#8221;的有效的手段，也可帮助我们理清软件的&#8221;脉络&#8221;，即快速掌握软件的运行流程和工作原理，不 失为一种学习源代码的辅助方法。下面这个案例展现了如何使用strace通过跟踪别的软件来&#8221;触发灵感&#8221;，从而解决软件开发中的难题的。<BR>　　大家都知道，在进程内打开一个文件，都有唯一一个文件描述符（fd：file descriptor）与这个文件对应。而本人在开发一个软件过程中遇到这样一个问题：<BR>　 　已知一个fd，如何获取这个fd所对应文件的完整路径？不管是Linux、FreeBSD或是其它Unix系统都没有提供这样的API，怎么办呢？我们 换个角度思考：Unix下有没有什么软件可以获取进程打开了哪些文件？如果你经验足够丰富，很容易想到lsof，使用它既可以知道进程打开了哪些文件，也 可以了解一个文件被哪个进程打开。好，我们用一个小程序来试验一下lsof，看它是如何获取进程打开了哪些文件。lsof： 显示进程打开的文件。<BR>　　<BR>　　/* testlsof.c */<BR>　　#include #include #include #include #include <BR>　　int main(void)<BR>　　{<BR>　　 open(&#8220;/tmp/foo&#8221;, O_CREAT|O_RDONLY); /* 打开文件/tmp/foo */<BR>　　 sleep(1200); /* 睡眠1200秒，以便进行后续操作 */<BR>　　 return 0;<BR>　　}<BR>　　<BR>　　将testlsof放入后台运行，其pid为3125。命令lsof -p 3125查看进程3125打开了哪些文件，我们用strace跟踪lsof的运行，输出结果保存在lsof.strace中：<BR>　　<BR>　　# gcc testlsof.c -o testlsof<BR>　　# ./testlsof &amp;<BR>　　[1] 3125<BR>　　# strace -o lsof.strace lsof -p 3125<BR>　　<BR>　　我们以&#8221;/tmp/foo&#8221;为关键字搜索输出文件lsof.strace，结果只有一条：<BR>　　<BR>　　<BR>　　# grep &#8216;/tmp/foo&#8217; lsof.strace<BR>　　readlink(&#8220;/proc/3125/fd/3&#8243;, &#8220;/tmp/foo&#8221;, 4096) = 8<BR>　　<BR>　 　原来lsof巧妙的利用了/proc/nnnn/fd/目录（nnnn为pid）：Linux内核会为每一个进程在/proc/建立一个以其pid为名 的目录用来保存进程的相关信息，而其子目录fd保存的是该进程打开的所有文件的fd。目标离我们很近了。好，我们到/proc/3125/fd/看个究 竟：<BR>　　<BR>　　# cd /proc/3125/fd/<BR>　　# ls -l<BR>　　total 0<BR>　　lrwx—— 1 root root 64 Nov 5 09:50 0 -&gt; /dev/pts/0<BR>　　lrwx—— 1 root root 64 Nov 5 09:50 1 -&gt; /dev/pts/0<BR>　　lrwx—— 1 root root 64 Nov 5 09:50 2 -&gt; /dev/pts/0<BR>　　lr-x—— 1 root root 64 Nov 5 09:50 3 -&gt; /tmp/foo<BR>　　# readlink /proc/3125/fd/3<BR>　　/tmp/foo<BR>　　<BR>　　答案已经很明显了：/proc/nnnn/fd/目录下的每一个fd文件都是符号链接，而此链接就指向被该进程打开的一个文件。我们只要用readlink()系统调用就可以获取某个fd对应的文件了，代码如下：<BR>　　<BR>　　<BR>　　#include #include #include #include #include #include <BR>　　int get_pathname_from_fd(int fd, char pathname[], int n)<BR>　　{<BR>　　 char buf[1024];<BR>　　 pid_t pid;<BR>　　 bzero(buf, 1024);<BR>　　 pid = getpid();<BR>　　 snprintf(buf, 1024, &#8220;/proc/%i/fd/%i&#8221;, pid, fd);<BR>　　 return readlink(buf, pathname, n);<BR>　　}<BR>　　int main(void)<BR>　　{<BR>　　 int fd;<BR>　　 char pathname[4096];<BR>　　 bzero(pathname, 4096);<BR>　　 fd = open(&#8220;/tmp/foo&#8221;, O_CREAT|O_RDONLY);<BR>　　 get_pathname_from_fd(fd, pathname, 4096);<BR>　　 printf(&#8220;fd=%d; pathname=%sn&#8221;, fd, pathname);<BR>　　 return 0;<BR>　　}<BR>　　<BR>　 　出于安全方面的考虑，在FreeBSD 5 之后系统默认已经不再自动装载proc文件系统，因此，要想使用truss或strace跟踪程序，你必须手工装载proc文件系统：mount -t procfs proc /proc；或者在/etc/fstab中加上一行：<BR>　　<BR>　　proc /proc procfs rw 0 0</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/413.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
