<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux | Hessian's Blog</title><link>https://hessian.cn/cat/linux</link><description>Hessian 的技术笔记：Linux、C++、网络与嵌入式</description><language>zh-CN</language><atom:link href="https://hessian.cn/cat/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>虚拟机硬盘空间增加方法QEMU（QCOW） LVM</title><link>https://hessian.cn/p/1654.html</link><pubDate>Wed, 30 Mar 2022 15:47:33 +0800</pubDate><guid>https://hessian.cn/p/1654.html</guid><description># 先停止虚拟机 virsh stop test-server-1 # 修改磁盘镜像大小 qemu-img resize test-server-data +100G # 进入虚拟机后pvresize pvresize -v /dev/vdb # 扩展lv空间 lvextend -l +100%FREE /dev/mapper/vgdata-data # 调整文件系统大小，这里是ext4的文件系统，用resize2fs，在此之前还需要先执行e2fsck e2fsck -f /dev/mapper/vgdata-data resize2fs /dev/mapper/vgdata-data # 最后挂载磁盘 mount -a 完成&#10;</description></item><item><title>Docker在Mac下挂在/Users之外的目录</title><link>https://hessian.cn/p/1502.html</link><pubDate>Wed, 09 Dec 2015 21:28:02 +0800</pubDate><guid>https://hessian.cn/p/1502.html</guid><description>Docker在Mac下是在VirtualBox虚拟机中运行的。VirtualBox是用共享的形式把宿主机的目录暴露给docker的container，因为默认只挂载了/Users目录，所以Docker的Data Volume都只能mount到/Users目录下面的东西。&#10;</description></item><item><title>解决阿里云postfix邮件发不出去的问题</title><link>https://hessian.cn/p/1450.html</link><pubDate>Tue, 24 Jun 2014 19:04:27 +0800</pubDate><guid>https://hessian.cn/p/1450.html</guid><description>执行mail输出错误信息&#10;sendmail: fatal: parameter inet_interfaces: no local interface found for ::1 原因是神马给忘了，记得是跟IPv6有关，解决办法就是让postfix只用IPv4。&#10;打开文件：/etc/postfix/main.cf&#10;把&#10;inet_protocols = all 改成&#10;inet_protocols = ipv4 完了之后执行&#10;service postfix restart</description></item><item><title>CentOS + Cacti 集中监控服务器 （笔记）</title><link>https://hessian.cn/p/1411.html</link><pubDate>Wed, 15 Jan 2014 06:44:42 +0800</pubDate><guid>https://hessian.cn/p/1411.html</guid><description>Cacti官方网站&#10;官方文档——Installing Under Unix&#10;Percona Monitoring Plugins （Plugins for Cacti）&#10;Percona 为我们提供了很多包括linux,apache,mysql,redis,nginx等等常见服务的监控模板非常方便。&#10;下载地址 | 官方文档&#10;</description></item><item><title>CentOS 6.4 openvpn服务器搭建笔记</title><link>https://hessian.cn/p/1386.html</link><pubDate>Wed, 15 Jan 2014 06:24:26 +0800</pubDate><guid>https://hessian.cn/p/1386.html</guid><description>OpenVPN 源代码、安装包下载地址&#10;官方安装手册&#10;官方easy-rsa3 github&#10;1. 安装openvpn、easy-rsa&#10;yum install openvpn easy-rsa&#10;easy-rsa是生成秘钥用的一系列脚本集合。openvpn2.3版之后程序包里不再捆绑，需要单独安装，官方2.3版本的easy-rsa3改动比较&#10;大，网上也很少有用easy-rsa3的文章，为了避免麻烦，直接装源里的easy-rsa就好了。&#10;</description></item><item><title>在Windows/Linux下让程序指定出口IP地址</title><link>https://hessian.cn/p/1378.html</link><pubDate>Fri, 18 Oct 2013 01:43:00 +0800</pubDate><guid>https://hessian.cn/p/1378.html</guid><description>Windows/Unix* 系统都支持为一个网卡绑定多个IP地址，但是通常操作系统会根据路由表自动选择IP地址，应用程序使用哪个IP地址用户无法主动控制。本文分别讲解在Linux和Windows下为应用程序绑定指定IP地址的方法。&#10;</description></item><item><title>NGINX userid 分析、解码</title><link>https://hessian.cn/p/1362.html</link><pubDate>Wed, 18 Sep 2013 02:05:43 +0800</pubDate><guid>https://hessian.cn/p/1362.html</guid><description>生成userid的代码在 http/modules/ngx_http_userid_filter_module.c 大概550行左右。&#10;uid_set 是4个uint32构成的，其中比较有用的是第二个unit32，是userid的生成时间。第四个是一个递增值 以 0x03030302 为初始值，每次递增0x100。&#10;</description></item><item><title>CentOS Linux 6 NFS 配置</title><link>https://hessian.cn/p/1360.html</link><pubDate>Tue, 17 Sep 2013 20:34:40 +0800</pubDate><guid>https://hessian.cn/p/1360.html</guid><description>yum install nfs nfs-utils rpcbind&#13;service rpcbind start&#13;chckonfig rpcbind on&#13;cat "/shared_dir 192.168.1.200(rw,async,all_squash,anonuid=500,anongid=500)" &gt; /etc/exports 參數 參數功能 預設參數 fg&#10;bg 當執行掛載時，該掛載的行為會在前景 (fg) 還是在背景 (bg) 執行？ 若在前景執行時，則 mount 會持續嘗試掛載，直到成功或 time out 為止，若為背景執行， 則 mount 會在背景持續多次進行 mount ，而不會影響到前景的程序操作。 如果你的網路連線有點不穩定，或是伺服器常常需要開關機，那建議使用 bg 比較妥當。 fg soft&#10;hard 如果是 hard 的情況，則當兩者之間有任何一部主機離線，則 RPC 會持續的呼叫，直到對方恢復連線為止。如果是 soft 的話，那 RPC 會在 time out 後『重複』呼叫，而非『持續』呼叫， 因此系統的延遲會比較不這麼明顯。同上，如果你的伺服器可能開開關關，建議用 soft 喔！ hard intr 當你使用上頭提到的 hard 方式掛載時，若加上 intr 這個參數， 則當 RPC 持續呼叫中，該次的呼叫是可以被中斷的 (interrupted)。 沒有 rsize&#10;wsize 讀出(rsize)與寫入(wsize)的區塊大小 (block size)。 這個設定值可以影響用戶端與伺服器端傳輸資料的緩衝記憶容量。一般來說， 如果在區域網路內 (LAN) ，並且用戶端與伺服器端都具有足夠的記憶體，那這個值可以設定大一點， 比如說 32768 (bytes) 等，提升緩衝記憶區塊將可提升 NFS 檔案系統的傳輸能力！ 但要注意設定的值也不要太大，最好是達到網路能夠傳輸的最大值為限。 rsize=1024&#10;wsize=1024 mount -t nfs -o bg,soft,rsize=32768,wsize=32768 192.168.1.100:/shared_dir /mount_point Mac系统下挂载NFS有一点特别，需要加几个参数&#10;不加resvport在mac下会挂载不了，不加nolockd的话给文件加锁的时候会提示nfs server lockd not responding&#10;</description></item><item><title>强大的 轻量级 Linux服务器监控系统 Monitorix</title><link>https://hessian.cn/p/1348.html</link><pubDate>Thu, 12 Sep 2013 01:16:49 +0800</pubDate><guid>https://hessian.cn/p/1348.html</guid><description>Monitorix 是一个开源的、轻量的 Linux/Unix 服务器监控工具。安装配置简单，图表功能丰富。&#10;官方网站：http://www.monitorix.org&#10;安装方法：&#10;# perl-HTTP-Server-Simple 需要从EPEL安装&#13;rpm -ivh http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm&#13;# 安装依赖&#13;yum install rrdtool rrdtool-perl perl-libwww-perl perl-MailTools perl-MIME-Lite perl-CGI perl-DBI perl-XML-Simple perl-Config-General perl-HTTP-Server-Simple&#13;# 安装Monitorix&#13;yum install monitorix&#13;# 启动服务&#13;service monitorix start 博主最近要监控一台线上服务器，用cacti又嫌太麻烦，在看了《比cacti更好的linux单机监控——Monitorix的安装与配置》 之后决定采用Monitorix。&#10;</description></item><item><title>Linode LNMP服务器环境配置笔记</title><link>https://hessian.cn/p/1273.html</link><pubDate>Tue, 14 May 2013 10:19:42 +0800</pubDate><guid>https://hessian.cn/p/1273.html</guid><description>我选的是1GB的套餐，每个月$20，年付减10%，实付$230.21折合人民币1400多点。&#10;Linode 1GB&#10;操作系统： CentOS Linux 6.2 64bit&#10;运行环境： Nginx+PHP+MySQL&#10;</description></item><item><title>你可能不知道的Shell | 酷壳 – CoolShell.cn</title><link>https://hessian.cn/p/1054.html</link><pubDate>Fri, 23 Nov 2012 09:08:18 +0800</pubDate><guid>https://hessian.cn/p/1054.html</guid><description>via 你可能不知道的Shell | 酷壳 – CoolShell.cn.&#10; &#10;Shell也叫做命令行界面，它是*nix操作系统下用户和计算机的交互界面。Shell这个词是指操作系统中提供访问内核服务的程序。&#10;</description></item><item><title>怎么打开/查看MySQL的SQL记录？</title><link>https://hessian.cn/p/1018.html</link><pubDate>Fri, 02 Nov 2012 17:13:52 +0800</pubDate><guid>https://hessian.cn/p/1018.html</guid><description>我们在开发的时候经常经常遇到在程序中增加调试语句很麻烦的情况，这时候难免会想如果Mysql能看到我们执行了什么SQL语句就好了。&#10;实际上MySQL是有这个功能的，在MySQL 5.1的时候我们就可以通过mysqld的-l参数来启动mysql来记录查询日志。&#10;</description></item><item><title>合并多个Redis dump.rdb 到一个rdb的多个database</title><link>https://hessian.cn/p/994.html</link><pubDate>Tue, 12 Jun 2012 19:14:39 +0800</pubDate><guid>https://hessian.cn/p/994.html</guid><description>公司的服务器上运行了多个redis，现在希望合并到一个redis，用上redis的多database特性。&#10;在网上找了一圈发现没有比较好的工具可以进行这个处理。&#10;</description></item><item><title>CentOS 6.2（RHEL6）高可用服务器环境搭建</title><link>https://hessian.cn/p/961.html</link><pubDate>Fri, 25 May 2012 16:32:44 +0800</pubDate><guid>https://hessian.cn/p/961.html</guid><description>目标 为四台新服务器部署MySQL、Coreseek、Redis、MongoDB、NFS、Varnish等服务。四台服务器分为两组、使用Linux-HA + Pacemaker 实现高可用（HA, High-Availablility）。&#10;</description></item><item><title>修复zsh svn1.7 自动完成的问题</title><link>https://hessian.cn/p/181.html</link><pubDate>Wed, 16 May 2012 12:12:51 +0800</pubDate><guid>https://hessian.cn/p/181.html</guid><description>更新svn(subversion)到1.7后 zsh 的svn自动完成就傻X了。&#10;错误： _arguments:comparguments:312: invalid argument: [–cl]:arg:&#10;修改方法&#10;打开文件：/usr/share/zsh/4.3.11/functions/_subversion&#10;</description></item><item><title>解决fcitx 4.1 选择候选词后输入框消失的问题</title><link>https://hessian.cn/p/165.html</link><pubDate>Wed, 07 Sep 2011 18:42:45 +0800</pubDate><guid>https://hessian.cn/p/165.html</guid><description>fcitx更新到4.0之后我就一直在用fcitx，但是自2011年9月5日更新到4.1.0-1之后，很多候选词就无法上屏了，尤其是当候选词是处在第二页的时候。具体表现为当选择一个无法输入的词时输入框就会消失。后来我把这个问题报给了fcitx的开发人员，以下贴上问题解决的过程。&#10;</description></item><item><title>[转]Linux 中的键盘映射</title><link>https://hessian.cn/p/144.html</link><pubDate>Tue, 23 Aug 2011 00:17:42 +0800</pubDate><guid>https://hessian.cn/p/144.html</guid><description> 原文地址：http://www.linuxidc.com/Linux/2011-04/35197.htm&#10; &#10;对于英语来说，键盘上的字母键直接和英语字母表中的字母对应，但是对于非英语的语种来说，情况就不太一样了。例如，德语中的“ß”字母就没有直接的键和它对应，为此，Linux 提供“键盘映射”或“键盘翻译”，利用键盘映射可将某些键转换为特殊键。&#10;前面提到，X Window 直接处理了键盘的输入输出端口，因此，在 Linux 虚拟控制台下和 X Window 下使用不同的键盘映射方法。在 Linux 虚拟控制台上，可利用 loadkeys 命令将特殊按键映射为特殊字符；而在 X Window 中，必须使用 xmodmap 命令完成键盘映射。这些命令均按照字符映射表文件（文本文件）中的规定完成相应的转换。在 X Window 启动时，它会参考 Linux 文本模式下的字符映射表，因此可获得某些一致的键映射。&#10;字符映射表文件保存在 /usr/lib/kbd/keytables 目录下，defkeymap.map 是默认的字符映射表文件。利用命令：&#10;$ loadkeys fr.map 可装入 fr.map 所规定的字符映射表。这时，按下“.”会显示“:”。命令&#10;$ loadkeys –d 可装入默认字符映射表。对于非默认的键盘映射，可在启动时在 shell 脚本中装入特殊的映射表。&#10;对X Window 而言，它对键盘的处理过程分如下两个步骤：&#10;1．X Server 首先将键码转换为键符号名（keysym）。文件 /usr/include/X11/keysymdef.h 中包含所有的符号名。X Server 能够区分修饰键带来的不同，因为 keysymdef.h 中区分了两种不同的键，例如对“a”和“A”，分别用“KS_a”和“KS_A”定义。&#10;2．X Server 将键符号翻译为 ASCII 字符串。对于大多数的键来说，该字符串只包含一个字符，而对于功能键等特殊按键来说，则包含多个字符。例如，F5 键对应的默认 ASCII 字符串为 “5~”。&#10;利用 xmodmap 工具可修改键盘和键符号名之间的对应关系。例如，X Window 中“A”的键码为 30，而“Q”的键码为16。如果建立文件 maptest：&#10;keycode 38 = A&#13;keycode 24 = Q 在 xterm 中运行&#10;$ xmodmap maptest 之后，将发现“A”键和“Q”键交换了过来。&#10;上述的 maptest 文件实际就是一个简单的 X Window 映射文件。但需要注意的是，文件中的 keycode 和 Linux 内核对键值的定义是不一样的，一般而言，X Window 中的键码要比内核的键值大 8。利用 showkey 命令可以查看内核对键值的定义。例如，运行 showkey 并前后按下“A”和“Q”后，程序的输出为：&#10;$ showkey&#13;kb mode was RAW&#13;...&#13;keycode 30 press&#13;keycode 30 press&#13;keycode 16 press&#13;keycode 16 press 该程序给出的是“A”和“Q”的内核键值。&#10;在 XF86Config 文件中，Keyboard 段用来指定键盘参数，一般而言，这些参数不需要特殊设置：&#10;Section “Keyboard”&#13;Protocol “Standard”&#13;AutoRepeat 500 5&#13;EndSection</description></item><item><title>[译]如何在Linux下禁用键盘、触摸板、鼠标等输入设备</title><link>https://hessian.cn/p/139.html</link><pubDate>Mon, 22 Aug 2011 10:14:46 +0800</pubDate><guid>https://hessian.cn/p/139.html</guid><description>原文地址：http://blog.yjl.im/2010/12/using-xinput-to-disable-keyboard-mouse.html&#10;</description></item><item><title>Arch Linux + Wine运行RTX / QQ</title><link>https://hessian.cn/p/129.html</link><pubDate>Thu, 18 Aug 2011 15:35:24 +0800</pubDate><guid>https://hessian.cn/p/129.html</guid><description>最近被客户要求用RTX沟通，我又懒得开虚拟机，想到以前就有人用WINE 运行过QQ，应该RTX也可以运行才对就到网上搜索了一下。&#10;最后找到这篇帖子：http://www.php-oa.com/2011/01/06/linux-wine-rtx.html&#10;</description></item><item><title>Archlinux 环境配置记录</title><link>https://hessian.cn/p/121.html</link><pubDate>Wed, 10 Aug 2011 17:10:08 +0800</pubDate><guid>https://hessian.cn/p/121.html</guid><description>Archlinux+Openbox+Bmpanel2&#10;Window Manager = Openbox&#10;http://openbox.org/&#10;Desktop Background = Habak&#10;Performace Monitor = Conky&#10;http://conky.sourceforge.net/&#10;Panel = Bmpanel2&#10;http://code.google.com/p/bmpanel2/&#10;Panel-Calendar = Gsimplecal&#10;http://code.google.com/p/gsimplecal/&#10;Volume Control = Volumeicon&#10;http://softwarebakery.com/maato/volumeicon.html&#10;NetworkManager = NetworkManager + nm-applet&#10;http://projects.gnome.org/NetworkManager/?x=22&#10;FileManager = PcManFM&#10;http://pcmanfm.sourceforge.net/&#10;现在用着感觉用pcmanfm做桌面还是不太爽，于是改用了xfce4的桌面，xfdesktop，但是用这个的话file manager也得换成thunar。。。&#10;</description></item><item><title>Archlinux 终于把Kernel3.0放到[Core]里了</title><link>https://hessian.cn/p/118.html</link><pubDate>Tue, 09 Aug 2011 11:44:38 +0800</pubDate><guid>https://hessian.cn/p/118.html</guid><description>Archlinux 终于把Kernel3.0放到[Core]里了&#10;这是一件好事，虽然3.0更新的内容不多，但是作为linux这么久以来难得的一次大版本号变更总还是让人兴奋的。&#10;</description></item><item><title>chroot用法详解 – [linux]</title><link>https://hessian.cn/p/659.html</link><pubDate>Sat, 30 Jul 2011 09:32:00 +0800</pubDate><guid>https://hessian.cn/p/659.html</guid><description>版权声明：转载时请以超链接形式标明文章原始出处和作者信息及本声明&#10;http://wtxawr.blogbus.com/logs/17714526.html&#10;CHROOT就是Change Root，也就是改变程式执行时所参考的根目录位置。&#10;一般的目录架构：&#10;/&#10;/bin&#10;/sbin&#10;/usr/bin&#10;/home&#10;CHROOT的目录架构：&#10;/hell/&#10;/hell/bin&#10;/hell/usr/bin&#10;/hell/home&#10;* 为何要CHROOT？&#10;1.限制被CHROOT的使用者所能执行的程式，如SetUid的程式，或是会造成Load 的 Compiler等等。&#10;2.防止使用者存取某些特定档案，如/etc/passwd。&#10;3.防止入侵者/bin/rm -rf /。&#10;4.提供Guest服务以及处罚不乖的使用者。&#10;5.增进系统的安全。&#10;* 要如何建立CHROOT的环境？&#10;1.chroot()这个function：&#10;chroot(PATH)这个function必须具有 root 的身份才能执行，执行後会将根目录切换到 PATH所指定的地方。&#10;2.login的过程：&#10;使用者无论是从console或是telnet进入，都必须执行/usr/bin/login来&#10;决定是否能进入系统，而login所做的动作大致是：&#10;(1)印出login的提示符号，等待使用者输入密码。&#10;(2)检查密码是否正确，错误的话回到(1)。&#10;(3)正确的话以setuid()来改变身份为login_user。&#10;(4)以exec()执行user的shell。&#10;因此我们必须先修改/usr/bin/login的source code，让login在(2)到(3)&#10;的中间执行chroot($CHROOT_PATH)的动作，已达到CHROOT的目的，并以修&#10;改过的login替代原先的/usr/bin/login。&#10;(5)稍微好一点的方法必须在做chroot()之前检查login&#10;user的group，如果有某个特定的group(如chrootgrp)&#10;才执行chroot()，不然所有的人都会被chroot了。&#10;3.建立CHROOT所需的环境：&#10;(1)必须具备的目录：(假设$CHROOT为希望建立的路径)&#10;$CHROOT/etc $CHROOT/lib $CHROOT/bin&#10;$CHROOT/sbin $CHROOT/usr/lib $CHROOT/usr/bin&#10;$CHROOT/usr/bin $CHROOT/usr/local $CHROOT/home&#10;(2)仔细审查/etc中的档案，需具备执行程式时所需的档&#10;案，如passwd，groups，hosts，resolv.conf等等。&#10;(3)拿掉不想给的执行档，如su，sudo等SetUid的程式，&#10;以及compiler甚至telnet。&#10;(4)测试一下，以root身份执行 chroot $CHROOT /bin/sh&#10;即可进入CHROOT环境中。(man chroot for details)&#10;4.在console或是以telnet进入试试。&#10;5.Username/Password Resolve的考量：&#10;在CHROOT时你可能不希望被CHROOT的使用者(以後简称CHROOTer)能拿到/etc/passwd或是/etc/shadow等档案，尤其是有root密码的。以下有三种情形：&#10;(1)/etc/passwd跟 $CHROOT/etc/passwd相同：&#10;这是最差的作法，因为一来被CHROOTer有机会得到root&#10;的encrypted password，二来要保持/etc/passwd及&#10;$CHROOT/etc/passwd的同步性是个大问题。因为&#10;/usr/bin/login参考的是/etc/passwd，可是一旦&#10;CHROOTer被chroot後执行passwd时，他所执行的&#10;passwd所更改的将是$CHROOT/etc/passwd。&#10;(2)/etc/passwd跟$CHROOT/etc/passwd不同：&#10;你可以把$CHROOT/etc/passwd中的重要人物(如root)&#10;的密码拿掉，然後以比较复杂的方法修改&#10;/usr/bin/login：&#10;if (has_chroot_group) {&#10;re-load $CHROOT/etc/passwd&#10;if (password is valid) {&#10;chroot($CHROOT)&#10;exec(shell)&#10;} else logout()&#10;}&#10;此法的好处是你可以将/etc/passwd跟&#10;$CHROOT/etc/passwd分开来。/etc/passwd只影响&#10;CHROOTer在login时所使用的username，其他如&#10;password甚至uid，gid，shell，home等等都是参&#10;考$CHROOT/etc/passwd的。&#10;缺点是你其他的daemon如ftpd，httpd都必须做相同&#10;的修改才能正确取的CHROOTer的资讯，而且你在把一&#10;个user加入或移出chroot_group时都必须更改&#10;/etc/passwd跟$CHROOT/etc/passwd。&#10;(3)使用NIS/YP：&#10;此法大概是最简单，且麻烦最少的了。因为一切的user&#10;information都经过NIS Bind来取得，不但可以保护住&#10;root的密码，也省去/etc/passwd跟&#10;$CHROOT/etc/passwd同步管理上的问题。不只是&#10;passwd，连其他如groups，hosts，services，&#10;aliases等等都可以一并解决。&#10;* 其他必须考虑的问题：&#10;1.执行档的同步性：&#10;再更新系统或是更新软体时，必须考虑到一并更换&#10;$CHROOT目录下的档案，尤其如SunOS或是BSD等会用&#10;nlist()来取得Kernel Information的，在更新kernel&#10;时必须更新$CHROOT下的kernel。&#10;2./dev的问题：&#10;一般而言你必须用local loopback NFS将/dev read-write mount到$CHROOT/dev以使得一般user跟CHROOTer可以互相write以及解决devices同步性的问题。&#10;3./proc的问题：&#10;在Linux或是SYSV或是4.4BSD的系统上许多程式会去&#10;参考/proc的资料，你必须也将/proc mount到&#10;$CHROOT/proc。&#10;4./var的问题：&#10;一般而言/var也是用local loopback NFS read-write&#10;mount到$CHROOT/var下，以解决spool同步性的问题，&#10;否则你可能必须要修改lpd或是sendmail等daemon，&#10;不然他们是不知道$CHROOT/var下也有spool的存在。&#10;5.Daemon的问题：&#10;你必须修改一些跟使用者相关的Daemon如ftpd，httpd&#10;以使这些daemon能找到正确的user home。&#10;* CHROOT无法解决的安全问题：&#10;1.不小心或是忘记拿掉SetUid的程式：&#10;CHROOTer还是有机会利用SetUid的程式来取得root的&#10;权限，不过因为你已经将他CHROOT了，所以所能影响到&#10;的只有$CHROOT/目录以下的档案，就算他来个&#10;“/bin/rm -rf /” 也不怕了。&#10;不过其他root能做的事还是防不了，如利用tcpdump来&#10;窃听该localnet中的通讯并取得在该localnet上其他&#10;机器的帐号密码，reboot机器，更改NIS的资料，更改&#10;其他没有被CHROOT的帐号的密码藉以取得一般帐号(所&#10;以root不可加入NIS中)等等。&#10;(此时就必须藉由securetty或是login.access或是将&#10;wheel group拿出NIS来防止其login as root)&#10;2.已载入记忆体中的Daemon：&#10;对於那些一开机就执行的程式如sendmail，httpd，&#10;gopherd，inetd等等，如果这些daemon有hole(如&#10;sendmail)，那hacker只要破解这些daemon还是可以取&#10;得root权限。&#10;* 结论：&#10;CHROOT可以增进系统的安全性，限制使用者能做的事，&#10;但是CHROOT Is Not Everything，因为还是有其他的&#10;漏洞等著hacker来找出来。&#10;</description></item><item><title>【转】bash shell if 命令参数说明</title><link>https://hessian.cn/p/352.html</link><pubDate>Fri, 17 Jun 2011 11:08:00 +0800</pubDate><guid>https://hessian.cn/p/352.html</guid><description>第 7 章 条件语句 目录 7.1. 介绍if 7.1.1. 概要 7.1.2. if的简单应用 7.2. 更多if的高级使用方法 7.2.1. if/then/else结构 7.2.2. if/then/elif/else结构 7.2.3. if嵌套语句 7.2.4. 布尔操作 7.2.5. 使用exit语句和if 7.3. 使用case语句 7.3.1. 简单的条件 7.3.2. 初始脚本例子 7.4. 总结 7.5. 练习 摘要 本章我们会讨论在Bash脚本中使用条件，包含以下几个话题： if 语句 使用命令的退出状态 比较和测试输入和文件 if/then/else 结构 if/then/elif/else 结构 使用和测试位置参数 嵌套 if 语句 布尔表达式 使用 case 语句 7.1. 介绍if 7.1.1. 概要 有时候你需要指定shell脚本中的依靠命令的成功与否来实施不同过程的行为。 if 结构允许你来指定这样的条件。 最精简的 if 命令的语法是： if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi TEST-COMMAND 执行后且它的返回状态是0，那么 CONSEQUENT-COMMANDS 就执行。返回状态是最后一个命令的退出状态，或者当没有条件是真的话为0。 TEST-COMMAND 经常包括数字和字符串的比较测试，但是也可以是任何在成功时返回状态0或者失败时返回一些其他状态的一些命令。一元表达式经常用于检查文件的状态。如果对某个要素primaries， FILE 参数是 /dev/fd/N 这样的形式，那么就检查文件描述符 “N”。stdin, stdout 和 stderr 和他们各自的文件描述符也可以用于测试。 7.1.1.1. 和if使用的表达式 下表包含了一个组成 TEST-COMMAND 命令或者命令列表，称作 “要素primaries” 的概览。这些primaries放置在方括号中来表示一个条件表达式的测试。 表 7.1. 主表达式 Primary 意义 [ -a FILE ] 如果 FILE 存在则为真。 [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。 [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。 [ -d FILE ] 如果 FILE 存在且是一个目录则为真。 [ -e FILE ] 如果 FILE 存在则为真。 [ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。 [ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。 [ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。 [ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。 [ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。 [ -r FILE ] 如果 FILE 存在且是可读的则为真。 [ -s FILE ] 如果 FILE 存在且大小不为0则为真。 [ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。 [ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。 [ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。 [ -x FILE ] 如果 FILE 存在且是可执行的则为真。 [ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。 [ -G FILE ] 如果 FILE 存在且属有效用户组则为真。 [ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。 [ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。 [ -S FILE ] 如果 FILE 存在且是一个套接字则为真。 [ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1FILE2 does not则为真。 exists and [ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。 [ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。 [ -o OPTIONNAME ] 如果 shell选项 “OPTIONNAME” 开启则为真。 [ -z STRING ] “STRING” 的长度为零则为真。 [ -n STRING ] or [ STRING ] “STRING” 的长度为非零 non-zero则为真。 [ STRING1 == STRING2 ] 如果2个字符串相同。 “=” may be used instead of “==” for strict POSIX compliance则为真。 [ STRING1 != STRING2 ] 如果字符串不相等则为真。 [ STRING1 &lt; STRING2 ] 如果 “STRING1” sorts before “STRING2” lexicographically in the current locale则为真。 [ STRING1 &gt; STRING2 ] 如果 “STRING1” sorts after “STRING2” lexicographically in the current locale则为真。 [ ARG1 OP ARG2 ] “OP” is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators return true if “ARG1” is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to “ARG2”, respectively. “ARG1” and “ARG2” are integers. 表达式可以借以下操作符组合起来，以降序列出：listed in decreasing order of precedence: 表 7.2. 组合表达式 操作 效果 [ ! EXPR ] 如果 EXPR 是false则为真。 [ ( EXPR ) ] 返回 EXPR的值。这样可以用来忽略正常的操作符优先级。 [ EXPR1 -a EXPR2 ] 如果 EXPR1 and EXPR2 全真则为真。 [ EXPR1 -o EXPR2 ] 如果 EXPR1 或者 EXPR2 为真则为真。 [ (或作 test) 内建命令对条件表达式使用一系列基于参数数量的规则来求值。更多关于这个主题的信息可以在Bash文档中查找。就像if 使用fi 来结束一样，在条件列完之后必须用”&gt;”来结束。 7.1.1.2. 后接then语句的命令 CONSEQUENT-COMMANDS 列出了跟在 then 语句后面可以是任何有效的UNIX命令，任何可执行的程序，任何可执行的shell脚本或者任何shell语句，除了 fi. 。重要地记住 then 和 fi 在shell里面被认为是分开的语句。因此，在命令行上使用的时候，他们用分号隔开。 在脚本中，if语句的不同部分通常是良好分隔的。以下是一些简单的例子： 7.1.1.3. 检查文件 第一个例子检查一个文件是否存在： anny ~&gt; cat msgcheck.sh#!/bin/bash echo “This scripts checks the existence of the messages file.”echo “Checking…”if [ -f /var/log/messages ] then echo “/var/log/messages exists.”fiechoecho “…done.” anny ~&gt; ./msgcheck.shThis scripts checks the existence of the messages file.Checking…/var/log/messages exists. …done.&#10;7.1.1.4. 检查shell选项 加入到你的Bash配置文件中去： # These lines will print a message if the noclobber option is set: if [ -o noclobber ] then echo “Your files are protected against accidental overwriting using redirection.”fi 环境 以上的例子将在命令行输入后开始工作： anny ~&gt; if [ -o noclobber ] ; then echo ; echo "your files are protectedagainst overwriting." ; echo ; fi your files are protected against overwriting. anny ~&gt;&#10;然而，如果你使用依赖环境的测试，当你在脚本中输入相同的命令你可能得到不用的结果，因为脚本会打开一个新的，没有设置预期的变量和选项的shell。 7.1.2. if的简单应用 7.1.2.1. 测试退出状态 ? 变量包含了之前执行命令的退出状态（最近完成的前台进程）。 以下的例子显示了一个简单的测试： anny ~&gt; if [ $? -eq 0 ]More input&gt; then echo 'That was a good job!'More input&gt; fiThat was a good job! anny ~&gt;&#10;以下的例子证明了 TEST-COMMANDS 可以是任何有返回和退出状态的UNIX命令，之后 if 再次返回零的退出状态： anny ~&gt; if ! grep $USER /etc/passwdMore input&gt; then echo "your user account is not managed locally"; fiyour user account is not managed locally anny &gt; echo $?0 anny &gt;&#10;以下能得到同样的结果： anny &gt; grep $USER /etc/passwd anny &gt; if [ $? -ne 0 ] ; then echo "not a local account" ; finot a local account anny &gt;&#10;7.1.2.2. 数字的比较 以下的例子是用了数值的比较： anny &gt; num=`wc -l work.txt` anny &gt; echo $num201 anny &gt; if [ "$num" -gt "150" ]More input&gt; then echo ; echo "you've worked hard enough for today."More input&gt; echo ; fi you’ve worked hard enough for today. anny &gt;&#10;这个脚本在每个星期天由cron来执行。如果星期的数是偶数，他就提醒你把垃圾箱清理： #!/bin/bash # Calculate the week number using the date command: WEEKOFFSET=$[ $(date +”%V”) % 2 ] # Test if we have a remainder. If not, this is an even week so send a message.# Else, do nothing. if [ $WEEKOFFSET -eq “0” ]; then echo “Sunday evening, put out the garbage cans.” | mail -s “Garbage cans out” your@your_domain.org 7.1.2.3. 字符串比较 一个通过比较字符串来测试用户ID的例子： if [ “$(whoami)” != ‘root’ ]; then echo “You have no permission to run $0 as non-root user.” exit 1;fi&#10;使用Bash，你可以缩短这样的结构。下面是以上测试的精简结构： [ “$(whoami)” != ‘root’ ] &amp;&amp; ( echo you are using a non-privileged account; exit 1 )&#10;类似于如果测试为真就执行的 “&amp;&amp;” 表达式， “||” 指定了测试为假就执行。类似于 “&amp;&amp;” 表达式指明了在两个测试条件为真时所采取的动作，“||” 指明测试为假时所采取的行动。 正则表达式也可以在比较中使用： anny &gt; gender="female" anny &gt; if [[ "$gender" == f* ]]More input&gt; then echo "Pleasure to meet you, Madame."; fiPleasure to meet you, Madame. anny &gt;&#10;真正的程序员 多数程序员更喜欢使用和方括号相同作用的内建的 test 命令，像这样： test “$(whoami)” != ‘root’ &amp;&amp; (echo you are using a non-privileged account; exit 1) 参见信息页面得到更多关于Bash “(( EXPRESSION ))” 和 “[[ EXPRESSION ]]” 结构的模块匹配信息。</description></item><item><title>QEMU/Images</title><link>https://hessian.cn/p/518.html</link><pubDate>Fri, 03 Dec 2010 14:50:00 +0800</pubDate><guid>https://hessian.cn/p/518.html</guid><description>QEMU/Images&#10;‍&#10;From Wikibooks, the open-content textbooks collection &lt; QEMU Jump to: navigation, search Once&#10;QEMU has been installed, and kqemu compiled and configured, it should&#10;be ready to run a guest OS from a virtual disc image. A disc image is a&#10;file that represents the data on a hard disc. From the perspective of&#10;the guest OS, it actually is a hard disc, and the guest OS can actually&#10;create its own filesystem on the virtual disc.&#10;</description></item><item><title>SWFUpload https IO Error: #2038</title><link>https://hessian.cn/p/484.html</link><pubDate>Thu, 18 Nov 2010 12:07:00 +0800</pubDate><guid>https://hessian.cn/p/484.html</guid><description>最近在开发后台的时候用到了swfupload做文件上传，以前用一直都没问题，但是现在在HTTPS下就一直出现HTTPS错误，查了一下据说Flash的SSL验证用的居然是IE的验证程序。&#10;</description></item><item><title>解决：ERROR 2013 (HY000)</title><link>https://hessian.cn/p/625.html</link><pubDate>Tue, 26 Oct 2010 11:30:00 +0800</pubDate><guid>https://hessian.cn/p/625.html</guid><description>这个问题遇到了好几次，是出现在用机器名访问数据库时。&#10;以前看了网上很多解决办法都没有搞定，今天终于找到真正的解决办法了。。。没想到居然是这样。。&#10;‍&#10;Arch Linux, a similar line can be added to /etc/hosts.allow:&#10;mysqld: ALL</description></item><item><title>[转]关于bash中if语法结构的广泛误解</title><link>https://hessian.cn/p/637.html</link><pubDate>Tue, 07 Sep 2010 13:14:00 +0800</pubDate><guid>https://hessian.cn/p/637.html</guid><description>src: http://www.linuxdiyf.com/viewarticle.php?id=105505&#10;我打赌正在看这篇文章的你, 超过99%的可能性你对这个问题的理解是错的. 或者至少是有偏差的.&#10;我深信这是一种教育法上的广泛错误, 那就是告诉大家说:&#10;</description></item><item><title>Linux下的邮件系统概述</title><link>https://hessian.cn/p/651.html</link><pubDate>Wed, 17 Jun 2009 14:19:00 +0800</pubDate><guid>https://hessian.cn/p/651.html</guid><description>在Linux下有许多软件包可以实现标准的邮件服务。UNIX/Linux的电子邮件系统模型基本可分为邮件传 递代理MTA，邮件存储和获取代理MSA，以及邮件客户代理MUA三大模块。虽然也有一些特殊的邮件应用程序无法确切归入上述分类。下面我们就Linux 邮件服务做一概述。&#10;</description></item><item><title>Amarok Wiki: How to change the audio output to.</title><link>https://hessian.cn/p/497.html</link><pubDate>Wed, 19 Nov 2008 01:54:00 +0800</pubDate><guid>https://hessian.cn/p/497.html</guid><description>How can I change where the audio is output to? Using xine’s ALSA output pluggin, you can output to a specific device (or all devices).&#10;Finding the names of your cards&#10;Find out the name of your soundcards with the command: cat /proc/asound/cards In the example below, the first card (card 0) is called "Live" and the second card (card 1) called "Headset": oliver@panda:~$ cat /proc/asound/cards&#10;0 [Live ]: EMU10K1 - SBLive! Value [CT4832]&#10;SBLive! Value [CT4832] (rev.8, serial:0x80271102) at 0xd000, irq 5&#10;1 [Headset ]: USB-Audio - Logitech USB Headset&#10;Logitech Logitech USB Headset at usb-0000:00:04.2-2, full speed Using a specific soundcard: method 1&#10;</description></item><item><title>Linux: ntfs-3g or ntfs-fuse ?</title><link>https://hessian.cn/p/607.html</link><pubDate>Tue, 10 Jun 2008 01:08:00 +0800</pubDate><guid>https://hessian.cn/p/607.html</guid><description>Linux kernel driver The NTFS Linux kernel driver is the piece of code that allows Linux software to access NTFS Volumes.&#10;fast, reliable, read-only. Most people already have it.&#10;注： 虽然linux本身就有支持ntfs，且效率也不错，但唯一致命的缺憾却是……read-only 不可写&#10;</description></item><item><title>Arch Linux 哲学</title><link>https://hessian.cn/p/601.html</link><pubDate>Thu, 22 May 2008 15:22:00 +0800</pubDate><guid>https://hessian.cn/p/601.html</guid><description>Arch Linux 哲学 摘自：http://www.archlinux.org.cn/main/node/79?q=node/57#philosophy&#10;Arch Linux背后的哲学，也是开发者遵循的原则就是“简单”。事实上，也就是“保持简单”。开发者们希望由于用复杂的方式做简单的事情浪费大量时间。 这就是为什么Arch的所有配置都是通过修改配置文件来完成的原因，也是为什么只有最新的系统被提供支持的原因。这也是下面将要提到的一些问题的最终决定的理由。&#10;</description></item><item><title>[转]ArchLinux</title><link>https://hessian.cn/p/375.html</link><pubDate>Wed, 21 May 2008 14:48:00 +0800</pubDate><guid>https://hessian.cn/p/375.html</guid><description>src:http://wiki.archlinux.org/index.php/ArchLinux_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#Arch_Linux_.E6.98.AF.E4.BB.80.E4.B9.88.3F&#10;Arch Linux 是什么? Arch Linux 是个 针对 i686 优化的 linux 发行版。最初灵感源于 Per Lidén 开发的一个非常不错的 CRUX 发行版。&#10;优势 Arch 基本理念是快速、轻巧、弹性与简单。这并非华而不实的行话，他们都是事实。Arch 是为 i686 处理器优化的， 所以可以为你取得更多的cpu cycle(快速)。他相较于 RedHat 或是其他的 Linux 而言是轻巧的， 而且简单的设计使他富有弹性并且可以成为任何你想建立的系统的模型。&#10;</description></item><item><title>[原创]Fedora8 + Nginx 0.6.3 + PHP 5.2.5</title><link>https://hessian.cn/p/353.html</link><pubDate>Fri, 09 May 2008 05:07:00 +0800</pubDate><guid>https://hessian.cn/p/353.html</guid><description>Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器，也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的，它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版，但是，Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。</description></item><item><title>ulimit使用简介</title><link>https://hessian.cn/p/520.html</link><pubDate>Fri, 09 May 2008 01:53:00 +0800</pubDate><guid>https://hessian.cn/p/520.html</guid><description>src: http://www.chinaitpower.com/2005September/2005-09-13/204427.html&#10;1,说明:&#10;ulimit用于shell启动进程所占用的资源.&#10;2,类别:&#10;shell内建命令&#10;3,语法格式:&#10;ulimit [-acdfHlmnpsStvw] [size]&#10;</description></item><item><title>Monkeys Audio (APE) for gstreamer 0.10</title><link>https://hessian.cn/p/517.html</link><pubDate>Tue, 22 Apr 2008 19:02:00 +0800</pubDate><guid>https://hessian.cn/p/517.html</guid><description>src:http://www.linuxsir.org/bbs/thread320386.html&#10;内容原文:&#10;可以在rhythmbox和exaile里播放ape文件了。请大家下载测试&#10;我写了一个monkeys audio的gst 0.10的插件，在我这里基本可用了。一年前我跟0.82插件的作者联系过，他比较忙没空移植，我当时写了一个结果总是崩溃，工作上脱不开身就忘记了。最 近想起来仔细阅读了一下gstreamer plugin developer’s guide，参考了flac的代码写了这个 gstmonkeysdec。编译前请安装mac和mac-devel包，在哪装的我也忘了，rpmfind.net找一下吧。&#10;</description></item><item><title>[个人记录用]Fedora 8 常规使用设置</title><link>https://hessian.cn/p/452.html</link><pubDate>Mon, 31 Dec 2007 18:02:00 +0800</pubDate><guid>https://hessian.cn/p/452.html</guid><description>Fedora 8 常规使用设置&#10;以前装linux都没有作记录，虽然再装起来也不是什么难事，但总会忘这忘那，找资料也总会花不少时间的。&#10;昨天挂了一晚上下了Fedora 8(F9test官方已经有消息了…这速度也太快了)，这次也干脆来次重新安装，顺便记录一下一些设置啊什么的。&#10;</description></item><item><title>[转]翻译: 高效率编辑器 VIM – 操作篇, 非常适合VIM新手</title><link>https://hessian.cn/p/581.html</link><pubDate>Tue, 30 Oct 2007 11:20:00 +0800</pubDate><guid>https://hessian.cn/p/581.html</guid><description>转自：http://srandy.yo2.cn/2007/07/21/%E7%BF%BB%E8%AF%91-%E9%AB%98%E6%95%88%E7%8E%87%E7%BC%96%E8%BE%91%E5%99%A8-vim-%E6%93%8D%E4%BD%9C%E7%AF%87-%E9%9D%9E%E5%B8%B8%E9%80%82%E5%90%88vim%E6%96%B0%E6%89%8B%E8%BD%AC/&#10;虽然从很久前就开始用VIM了，但一直都是半调子，翻来覆去只用自己会的命令。最近为了提高书写代码的效率，还有coding时候的乐趣，又重新钻研了一下VIM，发现了一篇很好的VIM入门的文章，原文是英文版的，我觉得非常适合VIM使用入门，所以翻译了过来。这里是简单的介绍了VIM的操作方式，并没有说为什么要用VIM，如果你想知道答案可以去Google，VIM被誉为编辑器之神。&#10;原文的英文名是：Efficient Editing With vim （点击可以欣赏原文），本译文欢迎转贴，但请注明出处和译者Jay。&#10;现在开始~~&#10;</description></item><item><title>［转］Linux系统Shell程序设计的流程控制</title><link>https://hessian.cn/p/435.html</link><pubDate>Mon, 29 Oct 2007 23:48:00 +0800</pubDate><guid>https://hessian.cn/p/435.html</guid><description>和其他高级程序设计语言一样，Shell提供了用来控制程序执行流程的命令，包括条件分支和循环结构，用户可以用这些命令创建非常复杂的程序。&#10;与传统语言不同的是，Shell用于指定条件值的不是布尔运算式，而是命令和字串。&#10;</description></item><item><title>我靠 phpmyadmin 太贱了</title><link>https://hessian.cn/p/592.html</link><pubDate>Sat, 04 Aug 2007 09:36:00 +0800</pubDate><guid>https://hessian.cn/p/592.html</guid><description>Wrong permissions on configuration file, should not be world writable&#10;给它 777 他不给用 非要 775 日了 你说 我还能说啥呢？。。。。。。。&#10;</description></item><item><title>什么是开放源码技术？</title><link>https://hessian.cn/p/313.html</link><pubDate>Wed, 18 Apr 2007 02:02:00 +0800</pubDate><guid>https://hessian.cn/p/313.html</guid><description>该 指南将开放源码的所有基础知识放入上下文中，帮助您开始了解当今范围最广的、并且在不断扩大的软件开发的动态领域。developerWorks 的开放源码专区是获得 how-to 信息、工具和项目更新的一个好地方，这些信息有助于您利用开放源码技术进行开发，并将它们与 IBM 产品结合使用。主题区包括 Eclipse、Apache Derby、Apache Geronimo、脚本语言（如 PHP、 Python 文章与Python 教程 和 Perl 文章与 Perl 文章），以及关于 开放源码许可 和开放源码开发的更广泛讨论。&#10;</description></item><item><title>GCC编译器选项及优化提示</title><link>https://hessian.cn/p/580.html</link><pubDate>Sat, 07 Apr 2007 14:52:00 +0800</pubDate><guid>https://hessian.cn/p/580.html</guid><description>大多数程序和库在编译时默认的优化级别是"2"(使用gcc选项:"-O2")并且在Intel/AMD平台上默认按照i386处理器来编译。&#10;如果你只想让编译出来的程序运行在特定的平台上，就需要执行更高级的编译器优化选项，以产生只能运行于特定平台的代码。&#10;一种方法是修改每个源码包中的Makefile文件，在其中寻找CFLAGS和CXXFLAGS变量(C和C++编译器的编译选项)并修改它的值。&#10;一些源码包比如binutils, gcc, glibc等等，在每个子文件夹中都有Makefile文件，这样修改起来就太累了！&#10;另一种简易做法是设置CFLAGS和CXXFLAGS环境变量。大多数configure脚本会使用这两个环境变量代替Makefile文件中的值。&#10;但是少数configure脚本并不这样做，他们必须需要手动编辑才行。&#10;为了设置CFLAGS和CXXFLAGS环境变量，你可以在bash中执行如下命令(也可以写进.bashrc以成为默认值)：&#10;export CFLAGS="-O3 -march=" &amp;&amp; CXXFLAGS=$CFLAGS&#10;这是一个确保能够在几乎所有平台上都能正常工作的最小设置。&#10;"-march"选项表示为特定的cpu类型编译二进制代码(不能在更低级别的cpu上运行)，&#10;Intel通常是：pentium2, pentium3, pentium3m, pentium4, pentium4m, pentium-m, prescott, nocona&#10;说明：pentium3m/pentium4m是笔记本用的移动P3/P4；pentium-m是迅驰I/II代笔记本的cpu；&#10;prescott是带SSE3的P4(以滚烫到可以煎鸡蛋而闻名)；nocona则是最新的带有EMT64(64位)的P4(同样可以煎鸡蛋)&#10;AMD通常是：k6, k6-2, k6-3, athlon, athlon-tbird, athlon-xp, athlon-mp, opteron, athlon64, athlon-fx&#10;用AMD的一般都是DIYer，就不必解释了吧。&#10;如果编译时没有抱怨"segmentation fault, core dumped"，那么你设定的"-O"优化参数一般就没什么问题。&#10;否则请降低优化级别("-O3" -&gt; "-O2" -&gt; "-O1" -&gt; 取消)。&#10;个人意见：服务器使用"-O2"就可以了，它是最安全的优化参数(集合)；桌面可以使用"-O3" ；&#10;不鼓励使用过多的自定义优化选项，其实他们之间没什么明显的速度差异(有时"-O3"反而更慢)。&#10;编译器对硬件非常敏感，特别是在使用较高的优化级别的时候，一丁点的内存错误都可能导致致命的失败。&#10;所以在编译时请千万不要超频你的电脑(我编译关键程序时总是先降频然的)。&#10;注意：选项的顺序很重要，如果有两个选项互相冲突，则以后一个为准。&#10;比如"-O3"将打开-finline-functions选项，但是可以用"-O3 -fno-inline-functions"既使用-O3的功能又关闭函数内嵌功能。&#10;更多的优化选项请参见：&#10;http://gcc.gnu.org/onlinedocs/gcc-3….e-Options.html&#10;http://gcc.gnu.org/onlinedocs/gcc-3….4-Options.html&#10;http://gcc.gnu.org/onlinedocs/gcc-4….e-Options.html&#10;http://gcc.gnu.org/onlinedocs/gcc-4….4-Options.html&#10;所有GCC选项完整列表参见：&#10;http://gcc.gnu.org/onlinedocs/gcc-3….n-Summary.html&#10;http://gcc.gnu.org/onlinedocs/gcc-4….n-Summary.html&#10;有两个页面值的参考：&#10;(对于gentoo-1.4)比较安全的优化选项&#10;http://www.freehackers.org/gentoo/gc…flag_gcc3.html&#10;(对于gentoo-1.4)进阶优化选项&#10;http://www.freehackers.org/gentoo/gc…g_gcc3opt.html&#10;*******************************************************************&#10;哦，忘了说一声，"-O2"已经启用绝大多数安全的优化选项了，所以其实你不必对那一堆选项发愁。&#10;先说说"-O3"在"-O2"基础上增加的几项，你可以按需添加(还算比较安全)：&#10;[gcc-3.4.4]&#10;-finline-functions 允许编译器选择某些简单的函数在其被调用处展开&#10;-fweb 为每个web结构体分配一个伪寄存器&#10;-frename-registers 试图驱除代码中的假依赖关系，这个选项对具有大量寄存器的机器很有效。&#10;[gcc-4.0.2]&#10;-finline-functions 说明如上&#10;-funswitch-loops 将循环体中不改变值的变量移动到循环体之外&#10;-fgcse-after-reload **不太明白它的含义**[哪位大峡知道给小弟讲解一下，先行谢过 ]&#10;说完"-O3"再说说在嵌入式系统上常用的"-Os"选项，这个选项其实也很重要，它的含义是对生成的二进制代码进行尺寸上的优化，它打开了所有"- O2"打开的选项，因此通常认为的"-Os"生成的二进制代码执行效率低的潜在意识是错误的！当然该选项与"-O2"的不同之处在于它在"-O2"的基础上禁止了所有为了对齐而插入的空间，也就是将所有"-falign-*"系列的选项禁用了。这种禁用究竟是否一定降低了代码的执行效率，依据程序的不同而不同，据说某些情况下"-Os"的效率比"-O3"还要高14%！请兄弟们在实践中自己摸索吧…&#10;———————————————&#10;下面选择我认为比较重要的几项简单介绍一下[gcc-3.4.4]，GCC选项完整列表太长了！精力有限。&#10;[注意]这里列出的都是非默认的选项，你只需要添加你所需要的选项即可&#10;-w 禁止输出警告消息&#10;-Werror 将所有警告转换为错误&#10;-Wall 显示所有的警告消息&#10;-v 显示编译程序的当前版本号&#10;-V 指定gcc将要运行的版本。只有在安装了多个版本gcc的机器上才有效。&#10;-ansi 按照ANSI标准编译程序，但并不限制与标准并不冲突的GNU扩展(一般不用该选项)&#10;-pedantic 如果要限制代码必须严格符合ISO标准，就在"-ansi"的基础上同时启用这个选项(很少使用)&#10;-std= 指定C语言的标准(c89,c99,gnu89)，该选项禁止了GNU C的扩展关键字asm,typeof,inline (一般不用该选项)&#10;-static 连接器将忽略动态连接库，同时通过将静态目标文件直接包含到结果目标文件完成对所有引用的解析。&#10;-shared 连接器将生成共享目标代码，该共享库可在运行时动态连接到程序形成完整的可执行体。&#10;如果使用gcc命令创建共享库作为其输出，该选项可以防止连接器将缺失main()方法视为错误。&#10;为了可以正确的工作，应该一致的使用选项"-fpic"以及目标平台选项编译构成同一个库的所有共享目标模块。&#10;-shared-libgcc 该选项指定使用共享版本的libgcc，在没有共享版本的libgcc的机器上该选项无效。&#10;-specs= gcc驱动程序读取该文件以确定哪些选项应该传递给那些子进程。&#10;该选项可以通过指定配置文件来覆盖默认配置，指定的文件将在默认配置文件读取后进行处理以修改默认配置。&#10;-pipe 使用管道而不是临时文件一个阶段到另一个阶段交换输出的方式，可以加快编译速度。建议使用。&#10;-o 指定输出文件，对各种输出皆有效。由于只能指定一个文件，所以在产生多个输出文件的情况下不要使用该选项。&#10;–help 显示gcc的命令行选项列表；与"-v"一起使用时还将显示gcc调用的各个进程所接受的选项。&#10;–target-help 显示目标机器相关的命令行选项列表&#10;-b 指示需要编译程序的目标机器；默认为编译程序所运行的目标机编译代码。&#10;目标机通过指定包含编译程序的目录来确定，通常为/usr/local/lib/gcc-lib//&#10;-B 指定库文件的位置，包括编译程序的文件、执行程序和数据文件，如果需要运行子程序(如cpp,as,ld)就会用该前缀来定位。&#10;这个前缀可以是用冒号分割的多个路径，环境变量GCC_EXEC_PREFIX和这个选项有相同的效果。&#10;-I 指定搜索系统头文件的目录，可以重复使用多个该选项指定多个目录。&#10;-dumpmachine 显示该程序的目标机名字，不做其他任何动作&#10;-dumpspecs 显示构件编译程序的规范信息，包括用来编译、汇编和连接gcc编译程序自身用到的所有选项，不做其他任何动作。&#10;-dumpversion 显示编译程序自身的版本号，不做其他任何动作&#10;-falign-functions=N 将所有函数的起始地址在N(N=1,2,4,8,16…)的边界上对齐，默认为机器自身的默认值，指定为1表示禁止对齐。&#10;-falign-jumps=N 将分支目标在N(N=1,2,4,8,16…)的边界上对齐，默认为机器自身的默认值，指定为1表示禁止对齐。&#10;-fno-align-labels 建议使用它，以保证不和-falign-jumps("-O2"默认启用的选项)冲突&#10;-fno-align-loops 建议使用它，以确保不会在分支目标前插入多余的空指令。&#10;-fbranch-probabilities 在使用"-fprofile-arcs"选项编译程序并执行它来创建包含每个代码块执行次数的文件之后，程序可以利用这一选项再次编译，&#10;文件中所产生的信息将被用来优化那些经常发生的分支代码。如果没有这些信息，gcc将猜测那一分支可能经常发生并进行优化。&#10;这类优化信息将会存放在一个以源文件为名字的并以".da"为后缀的文件中。&#10;-fno-guess-branch-probability 默认情况下gcc将使用随机模型进行猜测哪个分支更可能被经常执行，并以此来优化代码，该选项关闭它。&#10;-fprofile-arcs 在使用这一选项编译程序并运行它以创建包含每个代码块的执行次数的文件后，程序可以再次使用"-fbranch-probabilities"编译，&#10;文件中的信息可以用来优化那些经常选取的分支。如果没有这些信息，gcc将猜测哪个分支将被经常运行以进行优化。&#10;这类优化信息将会存放在一个以源文件为名字的并以".da"为后缀的文件中。&#10;-fforce-addr 必须将地址复制到寄存器中才能对他们进行运算。由于所需地址通常在前面已经加载到寄存器中了，所以这个选项可以改进代码。&#10;-fforce-mem 必须将数值复制到寄存器中才能对他们进行运算。由于所需数值通常在前面已经加载到寄存器中了，所以这个选项可以改进代码。&#10;-ffreestanding 所编译的程序能够在独立的环境中运行，该环境可以没有标准库，而且可以不从main()函数开始运行。&#10;该选项将设置"-fno-builtin"，且等同于"-fno-hosted"。&#10;-fhosted 所编译的程序需要运行在宿主环境中，其中需要有完整的标准库，而且main()函数具有int型的返回值。&#10;-fno-builtin 除非利用"__builtin_"进行引用，否则不识别所有内建函数。&#10;-fmerge-all-constants 试图将跨编译单元的所有常量值和数组合并在一个副本中。但是标准C/C++要求每个变量都必须有不同的存储位置。&#10;-fmove-all-movables 将所有不变的表达式移动到循环体之外，这种做法的好坏取决于源代码中的循环结构。&#10;-fnon-call-exceptions 产生的代码可供陷阱指令(如非法浮点运算和非法内存寻址)抛出异常，需要相关平台的运行时支持，并不普遍有效。&#10;-fomit-frame-pointer 对于不需要栈指针的函数就不在寄存器中保存指针，因此可以忽略存储和检索地址的代码，并将寄存器用于普通用途。&#10;所有"-O"级别都打开着一选项，但仅在调试器可以不依靠栈指针运行时才有效。建议不需要调试的情况下显式的设置它。&#10;-fno-optional-diags 禁止输出诊断消息，C++标准并不需要这些消息。&#10;-fpermissive 将代码中与标准不符合的诊断消息作为警告而不是错误输出。&#10;-fpic 生成可用于共享库的位置独立代码(PIC)，所有的内存寻址均通过全局偏移表(GOT)完成。该选项并非在所有的机器上都有效。&#10;要确定一个地址，需要将代码自身的内存位置作为表中的一项插入。该选项可以产生在共享库中存放并从中加载的目标模块。&#10;-fprefetch-loop-arrays 生成数组预读取指令，对于使用巨大数组的程序可以加快代码执行速度，适合数据库相关的大型软件等。&#10;-freg-struct-return 生成用寄存器返回短结构的代码，如果寄存器无法荣纳将使用内存。&#10;-fstack-check 为防止程序栈溢出而进行必要的检测，在多线程环境中运行时才可能需要它。&#10;-ftime-report 编译完成后显示编译耗时的统计信息&#10;-funroll-loops 如果在编译时可以确定迭代的次数非常少而且循环中的指令也非常少，可以使用该选项进行循环展开，以驱除循环和复制指令。&#10;-finline-limit= 对伪指令数超过的函数，编译程序将不进行展开，默认为600&#10;–param = gcc内部存在一些优化代码程度的限制，调整这些限制就是调整整个优化全局。下面列出了参数的名字和对应的解释：&#10;名字 解释&#10;max-delay-slot-insn-search 较大的数目可以生成更优化的代码，但是会降低编译速度，默认为100&#10;max-delay-slot-live-search 较大的数目可以生成更优化的代码，但是会降低编译速度，默认为333&#10;max-gcse-memory 执行GCSE优化使用的最大内存量，太小将使该优化无法进行，默认为50M&#10;max-gcse-passes 执行GCSE优化的最大迭代次数，默认为1&#10;*******************************************************************&#10;说完了命令行选项，下面来说说与硬件体系结构(主要是cpu)相关的设置[仅针对i386/x86_64]&#10;最大名鼎鼎的"-march"上面已经说过了，下面讲讲别的(仅挑些实用的)&#10;-mfpmath=sse P3和athlon-tbird以上级别的cpu支持&#10;-masm= 使用指定的dialect输出汇编语言指令，可以使用"intel"或"att"；默认为"att"&#10;-mieee-fp 指定编译器使用IEEE浮点比较，这样将会正确的处理比较结果为无序的情况。&#10;-malign-double 将double, long double, long long对齐于双字节边界上；有助于生成更高速的代码，但是程序的尺寸会变大。&#10;-m128bit-long-double 指定long double为128位，pentium以上的cpu更喜欢这种标准。&#10;-mregparm=N 指定用于传递整数参数的寄存器数目(默认不使用寄存器)。0&lt;=N&lt;=3 ；注意：当N&gt;0时你必须使用同一参数重新构建所有的模块，包括所有的库。&#10;-mmmx&#10;-mno-mmx&#10;-msse&#10;-mno-sse&#10;-msse2&#10;-mno-sse2&#10;-msse3&#10;-mno-sse3&#10;-m3dnow&#10;-mno-3dnow&#10;上面的这些不用解释了，一看就明白，根据自己的CPU决定吧&#10;-maccumulate-outgoing-args 指定在函数引导段中计算输出参数所需最大空间，这在大部分现代cpu中是较快的方法；缺点是会增加代码尺寸。&#10;-mthreads 支持Mingw32的线程安全异常处理。对于依赖于线程安全异常处理的程序，必须启用这个选项。&#10;使用这个选项时会定义"-D_MT"，它将包含使用选项"-lmingwthrd"连接的一个特殊的线程辅助库，用于为每个线程清理异常处理数据。&#10;-minline-all-stringops 嵌入所有的字符串操作。可以提高字符串操作的性能，但是会增加代码尺寸。&#10;-momit-leaf-frame-pointer 不为叶子函数在寄存器中保存栈指针，这样可以节省寄存器，但是将会是调试变的困难。参见"-fomit-frame-pointer"。&#10;下面这几个仅用于x86_64环境：&#10;-m64 生成专门运行于64位环境的代码，不能运行于32位环境&#10;-mcmodel=small [默认值]程序和它的符号必须位于2GB以下的地址空间。指针仍然是64位。程序可以静态连接也可以动态连接。&#10;-mcmodel=kernel 内核运行于2GB地址空间之外。在编译linux内核时必须使用该选项！&#10;-mcmodel=medium 程序必须位于2GB以下的地址空间，但是它的符号可以位于任何地址空间。程序可以静态连接也可以动态连接。&#10;注意：共享库不能使用这个选项编译！&#10;-mcmodel=large 对地址空间没有任何限制，这个选项的功能目前尚未实现。&#10;＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝&#10;既然已经讲了这么多了索性再讲讲gcc使用的一些环境变量&#10;除了大名鼎鼎的CFLAGS和CXXFLAGS以外(其实是Autoconf的环境变量)，再挑几个说说：&#10;所有的PATH类环境变量(除LD_RUN_PATH外)都是用冒号分割的目录列表。&#10;C_INCLUDE_PATH 编译C程序时使用的环境变量，用于查找头文件。&#10;CPLUS_INCLUDE_PATH 编译C++程序时使用的环境变量，用于查找头文件。&#10;OBJC_INCLUDE_PATH 编译Obj-C程序时使用的环境变量，用于查找头文件。&#10;CPATH 编译C/C++/Obj-C程序时使用的环境变量，用于查找头文件。&#10;COMPILER_PATH 如果没有用GCC_EXEC_PREFIX定位子程序，编译程序将会在此查找它的子程序。&#10;LIBRARY_PATH 连接程序将在这些目录中寻找特殊的连接程序文件。&#10;LD_LIBRARY_PATH 该环境变量不影响编译程序，但是程序运行的时候会有影响：程序会查找该目录列表以寻找共享库。&#10;当不能够在编译程序的目录中找到共享库的时候，执行程序必须设置该环境变量。&#10;LD_RUN_PATH 该环境变量不影响编译程序，但是程序运行的时候会有影响：它在运行时指出了文件的名字，运行的程序可以由此得到它的符号名字和地址。&#10;由于地址不会重新载入，因而可能符号应用其他文件中的绝对地址。这个和ld工具使用的"-R"选项完全一样。&#10;GCC_EXEC_PREFIX 编译程序执行所有子程序的名字的前缀，默认值是"/lib/gcc-lib/"，&#10;其中的是安装时configure脚本指定的前缀。&#10;LANG 指定编译程序使用的字符集，可用于创建宽字符文件、串文字、注释；默认为英文。[目前只支持日文"C-JIS,C-SJIS,C-EUCJP"，不支持中文]&#10;LC_ALL 指定多字节字符的字符分类，主要用于确定字符串的字符边界以及编译程序使用何种语言发出诊断消息；默认设置与LANG相同。&#10;中文相关的几项："zh_CN.GB2312 , zh_CN.GB18030 , zh_CN.GBK , zh_CN.UTF-8 , zh_TW.BIG5"&#10;TMPDIR 编译程序存放临时工作文件的临时目录，这些临时文件通常在编译结束时被删除。&#10;</description></item><item><title>解读Linux系统文件权限的设置方法</title><link>https://hessian.cn/p/396.html</link><pubDate>Sat, 07 Apr 2007 14:51:00 +0800</pubDate><guid>https://hessian.cn/p/396.html</guid><description>引:Windows系统其实和Linux系统有相似的地方，Windows系统文件、目录的属性有只读、隐藏，而Linux也一样。&#10;Linux中，每一个文件都具有特定的属性。主要包括文件类型和文件权限两个方面。可以分为5种不同的类型：普通文件、目录文件、链接文件、设备文件和管道文件。&#10;</description></item><item><title>建立一个带宽、线程可控的下载型WEB网站</title><link>https://hessian.cn/p/586.html</link><pubDate>Sat, 07 Apr 2007 14:50:00 +0800</pubDate><guid>https://hessian.cn/p/586.html</guid><description>http://www.chinaunix.net 作者:llzqq 发表于：2004-03-02 07:58:04&#10;APACHE+MYSQL+PHP+PROFTPD+MOD_LIMITIP+MOD_BANDWIDTH&#10;一、前言&#10;本人结合网上资料和个人的实践，利用一个下午的时间写出了这个适用于资源下载型网站的典型配置。这种配置的WEB网站初步实现了IP线程和线程流量的管理，同时proftpd用于上传资源，ssh用于主机管理。无疑这样可以自己支配宝贵的网络带宽，文章后面有个简单的防火墙配置仅供参考，我用的linux版本是redhat as 3.0。希望大家在看了这篇文章后多多和我交流， MAIL:LLZQQ@163.COM&#10;</description></item><item><title>快速编译Linux内核所需模块新方法</title><link>https://hessian.cn/p/588.html</link><pubDate>Sat, 07 Apr 2007 14:50:00 +0800</pubDate><guid>https://hessian.cn/p/588.html</guid><description>来自：linux.ccidnet.com 传统编译内核模块的方法繁琐而费时，本文将告诉我们一种快速编译所需要内核模块的新方法。当你安装完Linux系统，并且已经启动，恭喜你!如果你的硬盘上还安装了WinNT/2000系统，你试图去访问另一个NTFS分区时却遇到了麻烦。因为你所用的Linux系统没有已编译的支持NTFS文件系统的模块。怎么办?也许你会运行make menuconfig，重新定制你需要的所有模块，接着运行make modeules;make modeules_install来安装。这样不仅繁琐、费时，还可能会出现问题。或者因为编译内核对你有些棘手，太多的选择让你手足无措，你根本没有太好的方法。本文给你提供一个简单的方法，你可以轻松地去编译你所需要的支持NTFS系统的模块(ntfs.o)。以此为例，但愿对你编译其他模块有所帮助。</description></item><item><title>让MYSQL彻底支持中文</title><link>https://hessian.cn/p/380.html</link><pubDate>Sat, 07 Apr 2007 14:50:00 +0800</pubDate><guid>https://hessian.cn/p/380.html</guid><description>提要：系统自带的mysql默认字符集不是gbk,因此给数据库的推广应用以及中文程序的开发带来极大的不便,在没完没了的GBK和UTF8的转换过程中消耗了我们无数的精力以及系统的资源.经过摸索尝试解决了中文支持问题,经验与大家分享一下.&#10;</description></item><item><title>如何成为一个Linux系统内核开发者</title><link>https://hessian.cn/p/612.html</link><pubDate>Sat, 07 Apr 2007 14:50:00 +0800</pubDate><guid>https://hessian.cn/p/612.html</guid><description>你想成知道如何成为一个Linux内核开发者么？或者你的老板告诉你，“去为这个设备写一个Linux驱动。“这篇文档的目的，就是通过描述你需要经历的过程和提示你如何和社区一起工作，来教给你为达到这些目的所需要知道的所有知识。本文也尝试解释社区为什么这样工作的一些原因。&#10;</description></item><item><title>UNIX 高手的 10 个习惯</title><link>https://hessian.cn/p/558.html</link><pubDate>Sat, 07 Apr 2007 14:49:00 +0800</pubDate><guid>https://hessian.cn/p/558.html</guid><description>http://meshikar.woku.com/article/1237740.html&#10;懒得分页发了&#10;</description></item><item><title>在Linux中如何提高文件系统的使用效率</title><link>https://hessian.cn/p/510.html</link><pubDate>Sat, 07 Apr 2007 14:49:00 +0800</pubDate><guid>https://hessian.cn/p/510.html</guid><description>文件系统是整个UNIX系统中与用户关系最密切，用户操作最频繁的部分，随着系统运行时间的延续，文件系统的使用效率也跟着下降，这主要表现为：硬盘空间的减少，垃圾信息的增加，寻址时间的增加等。本文将介绍几种提高文件系统使用效率的方法，和大家共享，欢迎更正和补充。&#10;</description></item><item><title>[转]ALSA 0.9.0 HOWTO — 基本PCM音频</title><link>https://hessian.cn/p/386.html</link><pubDate>Sat, 07 Apr 2007 14:48:00 +0800</pubDate><guid>https://hessian.cn/p/386.html</guid><description>最近在写一个LINUX下的播放器,在做音频输出的时候想到了ALSA-LIB,这是LINUX下音频输出的一个库,差不多是事实标准了.所以我找了这么一篇HOWTO作为参考.为了加深理解,我把其中最重要也是大家最常用到的回放(PLAYBACK)部分的文字翻译了一遍.由于本人尚未通过英语4级,译文难免有大把错误,还请众位看官不吝指正. ALSA 0.9.0 HOWTO — 基本PCM音频 作者: Matthias Nagorni 译者: Kevin Lei 转载请注明出处:http://blog.csdn.net/kevinleicn/ 1. 介绍 这个HOWTO计划提供一个简短的介绍,使用ALSA 0.9.0写一个简单的音频应用程序.</description></item><item><title>[转]摄像头在Linux操作系统中的驱动方法v0.1b</title><link>https://hessian.cn/p/599.html</link><pubDate>Sat, 07 Apr 2007 14:47:00 +0800</pubDate><guid>https://hessian.cn/p/599.html</guid><description>作者：北南南北&#10;来自：LinuxSir.Org&#10;摘要：本文主要内容是摄像头（WebCam）在Linux操作系统中的驱动方法；本文是以源码码编译的方法来安装驱动程序的；虽然能把摄像驱动起来，但缺少好的视频聊天程序。看来只能一步一步的来了。希望就在眼前； 本文正在修正中…..请指点，谢谢～～&#10;</description></item><item><title>Linux系统环境变量</title><link>https://hessian.cn/p/445.html</link><pubDate>Sat, 07 Apr 2007 14:47:00 +0800</pubDate><guid>https://hessian.cn/p/445.html</guid><description>Linux是一个多用户的操作系统。每个用户登录系统后，都会有一个专用的运行环境。通常每个用户默认的环境都是相同的，这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制，其方法就是修改相应的系统环境变量。&#10;</description></item><item><title>如何在Linux下实现设备的配置（上）</title><link>https://hessian.cn/p/624.html</link><pubDate>Sat, 07 Apr 2007 14:47:00 +0800</pubDate><guid>https://hessian.cn/p/624.html</guid><description>级别: 初级&#10;于辰涛 (scu_yct@263.net), 软件工程师, 联想（北京）电脑公司 2001 年 8 月 01 日&#10;本文是 《如何在Linux下实现硬件的自动检测》的姊妹篇。将为您介绍在进行了设备检测，通过设备信息文件获得了设备对应的驱动程序，工作参数等信息后，如何对于几种最常见的设备进行配置、生成正确的配置脚本，以使设备正常工作。 Linux下设备的配置过程是指在检测到设备类型、设备当前工作参数等信息之后，使用这些信息来配置设备的驱动程序，工作方式等，（设备的检测过程参见 《如何在Linux下实现硬件的自动检测》）。要完成这样的任务，需要做两方面的工作：</description></item><item><title>Linux 日常命令</title><link>https://hessian.cn/p/347.html</link><pubDate>Sat, 07 Apr 2007 14:43:00 +0800</pubDate><guid>https://hessian.cn/p/347.html</guid><description>NO 分类 PS1 命令名 用法及参数 功能注解       1 文件管理 # ls ls -a 列出当前目录下的所有文件，包括以.头的隐含文件       文件管理 # ls ls -l或ll 列出当前目录下文件的详细信息       文件管理 # pwd pwd 查看当前所在目录的绝对路经       文件管理 # cd cd .. 回当前目录的上一级目录       文件管理 # cd cd – 回上一次所在的目录       文件管理 # cd cd ~ 或 cd 回当前用户的宿主目录       文件管理 # cd cd ~用户名 回指定用户的宿主目录       2 文件管理 # mkdir mkdir 目录名 创建一个目录       文件管理 # mkdir mkdir –p 递归式去创建一些嵌套目录       文件管理 # rmdir Rmdir 空目录名 删除一个空目录       3 文件管理 # rm rm 文件名 文件名 删除一个文件或多个文件       文件管理 # rm rm -rf 非空目录名 递归删除一个非空目录下的一切，不让提式-f       4 文件管理 # cat cat文件名 一屏查看文件内容       5 文件管理 # more more文件名 分页查看文件内容       6 文件管理 # less less 文件名 可控分页查看文件内容       7 文件管理 # grep grep字符 文件名 根据字符匹配来查看文件部分内容       8 文件管理 # mv mv 路经/文件 /经/文件 移动相对路经下的文件到绝对路经下       文件管理 # mv mv 文件名 新名称 在当前目录下改名       9 文件管理 # cp cp /路经/文件 ./ 移动绝对路经下的文件到当前目录下       10 文件管理 # find find 路经 -name “字符串” 查找路经所在范围内满足字符串匹配的文件和目录       11 文件管理 # ln ln 源文件 链接名 创建当前目录源文件的硬链接       ln /home/test /usr/test1 在/usr下建立/home/test的硬链接       12 文件管理 # ln Ln -s a b 创建当前目录下a的符号链接b    13 文件管理 # touch touch file1 file2 创建两个空文件       14 磁盘管理 # df df 用于报告文件系统的总容量，使用量，剩余容量。       15 磁盘管理 # du du -b /home 查看目前/HOME目录的容量(k)及子目录的容量(k)。       16 磁盘管理 # fdisk fdisk -l 查看系统分区信息    17 磁盘管理 # fdisk fdisk /dev/sdb 为一块新的SCSI硬盘进行分区    18 磁盘管理 # mkfs.ext3 Mkfs.ext3 /dev/sdb1 为第一块SCSI硬盘的第一主分区格式化成 ext3的文件系统          mkfs.ext2 Mkfs.ext2/dev/sdb2 格式化成ext2文件系统    19 磁盘管理 # mount mount -t 文件系统类型 设备路经 访问路经       磁盘管理 #    文件系统类型                   Iso9660 光驱文件系统                vfat Fat文件系统(windows)       挂载光驱 # mount –t iso9660 /dev/cdrom /mnt/cdrom       挂载FAT # mount –t vfat /dev/hda5 /mnt/cdrom 挂第一个ide的第五个逻辑分区    17 磁盘管理 # Umount /mnt/cdrom 卸载/mnt/cdrom为空    18 文件权限 # chmod chmod u+s file 为file的属主加上特殊权限                chmod g+r file 为file的属组加上读权限                chmod o+w file 为file的其它用户加上写权限                chmod a-x file 为file的所有用户减去执行权限    chmod 765 file 为file的属主设为完全权限，属组设成读写权，其它用户具有读和执心权限    19 文件权限 # chown chown root /home 把/home的属主改成root用户    20 文件权限 # chgrp chgrp root /home 把/home的属组改成root组    21 打印管理 # redhat-config-printer-tui 进入安装打印机界面       22 打印管理 # lp lp –d hptr file 打印file到hptr的打印机上       23 打印管理 # lpq Lpq –P 打印机名 查看打印机的状态       24 打印管理 # lprm Lprm –P 打印机名 a 删除打印机内的打印作业       25 打印管理 # disable Disable –r “changing paper” HPtr 禁用打印机并提示原因    26 打印管理 # enable Enable HPtr 重新启用被禁用的       27 用户管理 # useradd Useradd 创建一个新的用户       28 用户管理 # groupadd Groupadd 组名 创建一个新的组       29 用户管理 # passwd Passwd 用户名 为用户创建密码       30 用户管理 # Passwd -d Passwd -d用户名 删除用户密码也能登陆       31 用户管理 # Passwd -l Passwd -l用户名 锁定账号密码       32 用户管理 # Passwd -u Passwd -u用户名 解锁账号密码       33 用户管理 # Passwd -S Passwd -S用户名 查询账号密码       34 用户管理 # Usermod -l Usermod -l 新用户名 老用户名 为用户改名       35 用户管理 # Usermod -L Usermod -L 要锁定用户名 锁定用户登陆       36 用户管理 # Usermod -U Usermod –U解锁用户名 解锁用户登陆       37 用户管理 # Usermod -u Usermod –u 501用户名 改变用户UID       38 用户管理 # Userdel Userdel–r 用户名 删除用户一切       39 用户管理 # Groupmod -n Groupmod –n新用户名 老用户名 为组改名       40 用户管理 # Groupmod -g Groupmod –g 501 组名 改变组GID       41 用户管理 # groupdel Groupdel组名 先应删它的用户 删除组       42 用户管理 # gpasswd -a gpasswd -a 用户名 组名 增加用户到组       43 用户管理 # Id id 用户名 查用户信息       44 软件管理 # rpm -qa rpm –qa | less 查询已安装RPM       45 软件管理 #    rpm –qa | grep ftp 查询指定RPM       46 软件管理 # rpm -q rpm -q 已安装的RPM包 查是否安装       47 软件管理 #    rpm -q telnet-server 查看telnet服务器包    48 软件管理 # rpm -qi rpm –qi 软件包名称 查看软件的描述信息    49 软件管理 # rpm -ql rpm –ql软件包名称 查询软件包的文件列表    50 软件管理 # rpm -qf rpm –qf软件包名称 查询某个文件所属的软件包    51 软件管理 # rpm -qp rpm –qp软件包全名 查询未安装的软件包信息    52 软件管理 # rpm -e rpm –e 软件包名称 删除具体的软件包    53 软件管理 # rpm -U rpm –Uvh软件包全名 升级软件包并显示过程    54 软件管理 # rpm -ivh rpm –ivh 软件包全名 安装软件包并显示过程    55 软件管理 # rpm -V rpm –V软件包名称 验证软件包的大小，类型等    56 软件管理 # tar -c 创建包 –x 释放包 -v 显示命令过程 –z 代表压缩包    57 软件管理 # tar -cf tar –cvf benet.tar /home/benet 把/home/benet目录打包    58 软件管理 # tar -czf tar –zcvf benet.tar.gz /mnt 把目录打包并压缩    59 软件管理 # tar –tf tar –tf benet.tar 看非压缩包的文件列表    60 软件管理 # tar –tzf tar –tf benet.tar.gz 看压缩包的文件列表    61 软件管理 # tar –xf tar –xf benet.tar 非压缩包的文件恢复    62 软件管理 # tar –zxvf tar –zxvf benet.tar.gz 压缩包的文件解压恢复    63 软件管理 # tar -jxvf tar –jxvf benet.tar.bz2       64 软件管理 # diff diff file1 file2 &gt; 补丁名.patch 为新旧文件生成补丁文件    65 软件管理 # diff diff file1 file2 比较两个文件的区别    66 软件管理 # Patch Patch file补丁名.patch 打补丁    67 软件管理 # ./configure –prefix=/usr/local/ 编译前配置    68 软件管理 # make 编译    69 软件管理 # make install 安装编译好的源码包    70 启动管理 # reboot Init 6 重启LINUX系统    71 启动管理 # Halt Init 0 Shutdown –h now 关闭LINUX系统    72 启动管理 # runlevel    显示系统运行级    73 启动管理 # Init [0123456]    改变系统运行级,7种    74 启动管理 # Chkconfig –-list [服务名称] 查看服务的状态    75 启动管理 # Chkconfig –-level &lt;运行级&gt; &lt;服务名&gt; on|off|set 设置服务的启动状态    76 启动管理 # Chkconfig &lt;服务名&gt; on|off|set 设置非独立服务启状态    77 进程管理 # Top动态 Ps-aux静态 进程树pstree 查看系统进程    78 进程管理 # 程序名 &amp; 后台运行程序       79 进程管理 # fg 把后台运行的进程调回前台       80 进程管理 # bg 把前台运行进程调到后台       81 进程管理 # renice Renice +1 180 把180号进程的优先级加1    82 进程管理 # kill Kill PID 终止某个PID进程    83 进程管理 # at at 5pm + 3 days /bin/ls 指定三天后下午5:00执行/bin/ls    84 进程管理 # crontab Crontab -e 用VI的形式来编辑自动周期性任务    85 进程管理 # crontab Crontab -l 查看自动周期性任务    86 进程管理 # crontab Crontab -r 删除自动周期性任务    87 进程管理 # crond Service crond &lt;start|stop|restart|status&gt;    马上启动自动周期性服务 Service crond &lt;启动|停止|重启|状态&gt;             实现磁盘配额 (注安装LINUX时建立/home分区） 目标：对用户zhao在/home目录上实现soft limit为5k,hard limit 为10k的磁盘配额 实现步骤： 1. 修改包含/home的行， #vi /etc/fstab， 改为：defaults,usrquota。也就是增加usrquota项。然后保存退出。 2、卸载/home目录 #umount /home 3. 挂接/home目录 #mount /home 4、增加用户zhao #useradd zhao 5、修改密码 #passwd zhao 6、生成关于/home目录的quota信息 # quotacheck -cmug /home #quotacheck -vu /home 7、查看所有用户的信息 #repquota -au 8、设置配额 #edquota -u zhao 将soft 和hard 分别改为5和10 9、保存并退出 #wq! 10、修改时间 #edquota -t 11、 #wq! 12.开启/home上的磁盘配额功能 #quotaon /home 13.查询配额 #quota -u zhao 14.验证配额 #su – zhao $touch myfile&#10;</description></item><item><title>编译内核操作流程 ──为新手指南</title><link>https://hessian.cn/p/600.html</link><pubDate>Sat, 07 Apr 2007 14:43:00 +0800</pubDate><guid>https://hessian.cn/p/600.html</guid><description> 作者：北南南北&#10;来自：LinuxSir.Org&#10;提要： 编译内核主要是通过内核实现某些功能，比如iptables 需要内支持；所有的硬件的支持也是通过内核实现的；本文只是简单的给初学者讲一下编译内核的流程；</description></item><item><title>内核管理概述</title><link>https://hessian.cn/p/403.html</link><pubDate>Sat, 07 Apr 2007 14:42:00 +0800</pubDate><guid>https://hessian.cn/p/403.html</guid><description> 作者：北南南北&#10;来自：LinuxSir.Org&#10;摘要：本文讲述与内核操作有关的基础知识；比如编译内核，装载、移除内核模块，查看模块信息等；本文涉及相关的命令有modprobe、insmod、depmod、rmmod、modinfo等；&#10;++++++++++++++++++++++++++++++++++++++++++++++++++++++&#10;正文&#10;++++++++++++++++++++++++++++++++++++++++++++++++++++++&#10;一、什么是内核；&#10;内核官方：http://www.kernel.org&#10;内核洋文用 kernel，我刚才翻了一下词典，kernel 中文意思是内核、核心、中心、精髓的意思；也是果仁、果核的意思。从字面理解，kernel 是一事物的中心，植物的果实最重要的也是果仁和果核；:) 由此我们可以推断内核是操作系统的中心。&#10;我们知道Linus Torvalds 开发了Linux ，其实他开发的就是内核，按内核官方主页的理解，这个内核就是Linux ；其它的扩展和应用都是围绕内核而展开的。所有Linux应用程序都会和内核发生直接或者间接的接触；比如硬件需要内核支持，网络的通信也需要内核支持；文件系统更需要内核支持… … 直言我的能力的不行，如果您想了解和学习解操作系统，我写的教程只是初级应用，理论性的东西不是一言两语能说的清楚的，更不是应用者能说的清楚的。&#10;二、为什么需要编译内核和管理内核&#10;硬件是需要内核支持才行，有些硬件的支持没有被编入内核，这也需要我们重编内核；内核的包含的不仅仅是设备的驱动，还有其它的内容，比如网络协议的支持，防火墙的支持… … 比如iptables的实现，有些功能是需要内核支持的，如果内核与iptables相关的内容没有被编入，iptables 相关的功能就无法实现；&#10;三、内核编译方法&#10;请参考：《编译内核操作流程 ──为新手指南》&#10;四、管理内核模块的相关命令&#10;1、lsmod 列加以挂载的内核模块；&#10;lsmod 是列出目前系统中已加载的模块的名称及大小等；另外我们还可以查看 /proc/modules ，我们一样可以知道系统已经加载的模块； [root@localhost beinan]# lsmod 2、modinfo 查看模块信息；&#10;modinfo 可以查看模块的信息，通过查看模块信息来判定这个模块的用途；&#10;[root@localhost beinan]# moinfo 模块名 举例：&#10;[root@localhost beinan]# modinfo ne2k-pci&#10;filename: /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ne2k-pci.ko&#10;author: Donald Becker / Paul Gortmaker&#10;description: PCI NE2000 clone driver&#10;license: GPL&#10;parmtype: debug:int&#10;parmtype: options:array of int&#10;parmtype: full_duplex:array of int&#10;parm: debug:debug level (1-2)&#10;parm: options:Bit 5: full duplex&#10;parm: full_duplex:full duplex setting(s) (1)&#10;vermagic: 2.6.11-1.1369_FC4 686 REGPARM 4KSTACKS gcc-4.0&#10;depends: 8390&#10;alias: pci:v000010ECd00008029sv*sd*bc*sc*i*&#10;alias: pci:v00001050d00000940sv*sd*bc*sc*i*&#10;alias: pci:v000011F6d00001401sv*sd*bc*sc*i*&#10;alias: pci:v00008E2Ed00003000sv*sd*bc*sc*i*&#10;alias: pci:v00004A14d00005000sv*sd*bc*sc*i*&#10;alias: pci:v00001106d00000926sv*sd*bc*sc*i*&#10;alias: pci:v000010BDd00000E34sv*sd*bc*sc*i*&#10;alias: pci:v00001050d00005A5Asv*sd*bc*sc*i*&#10;alias: pci:v000012C3d00000058sv*sd*bc*sc*i*&#10;alias: pci:v000012C3d00005598sv*sd*bc*sc*i*&#10;alias: pci:v00008C4Ad00001980sv*sd*bc*sc*i*&#10;srcversion: 6ACE95F441CD26DF9DC31C2 上面的例子是我们查看 ne2k-pci 这个模块的信息，通过查看，我们知道ne2k-pci 模块是8029网卡（PCI NE2000 clone driver）的驱动；模块是位于 /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ 中ne2k-pci.ko&#10;我们现在常用的网卡也有8139的，8139网卡所用的驱动是 8139too ；查查看？&#10;[root@localhost beinan]# modinfo 8139too 我们再查查vfat 和ntfs 的模块信息；&#10;[root@localhost beinan]# modinfo vfat&#10;[root@localhost beinan]# modinfo ntfs 自己尝试一下；&#10;注意： 模块名是不能带有后缀的，我们通过modprobe -l 所看到的模块，都是带有.ko 或.o后缀；&#10;3、modprobe 挂载新模块以及新模块相依赖的模块&#10;modprobe 我们常用的功能就是挂载模块，在挂载某个内核模块的同时，这个模块所依赖的模块也被同时挂载；当然modprobe 也有列出内核所有模块，还有移除模块的功能；下在我们举个例子说一说咱们常用的功能和参数；&#10;modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-o &lt;modname&gt;] &lt;modname&gt; [parameters...]&#10;modprobe -r [-n] [-i] [-v] &lt;modulename&gt; ...&#10;modprobe -l -t &lt;dirname&gt; [ -a &lt;modulename&gt; ...] 上面是modprobe 的用法，具体更为详细的帮助，我们可以查看 man modprobe ；&#10;[root@localhost beinan]# modprobe -c modprobe -c 可以查看modules 的配置文件，比如模块的别名是什么等；&#10;[root@localhost beinan]# modprobe -l modprobe -l 是列出内核中所有的模块，包括已挂载和未挂载的；通过modprobe -l ，我们能查看到我们所需要的模块，然后根据我们的需要来挂载；其实modprobe -l 读取的模块列表就位于 /lib/modules/’uname -r’ 目录中；其中uname -r 是内核的版本； [root@localhost beinan]# uname -r&#10;2.6.11-1.1369_FC4&#10;[root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/ 通过上面的命令，自己试试看？&#10;[root@localhost beinan]# modprobe 模块名 注：挂载一个模块； 举例： [root@localhost beinan]# modprobe ne2k-pci 注：挂载 ne2k-pci 模块；&#10;[root@localhost beinan]# modprobe vfat 注：挂载vfat 模块&#10;[root@localhost beinan]# modprobe ntfs 注：挂载ntfs 模块&#10;[root@localhost beinan]# lsmod 注：列出已挂载模块， 我们会看到ne2k-pci ，vfat ，ntfs的模块 ； 注意： 模块名是不能带有后缀的，我们通过modprobe -l 所看到的模块，都是带有.ko 或.o后缀；&#10;[root@localhost beinan]# modprobe -r 模块名 注：移除已加载的模块，和rmmod 功能相同； 注意： 模块名是不能带有后缀的，我们通过modprobe -l 所看到的模块，都是带有.ko 或.o后缀；&#10;[root@localhost beinan]# modprobe -r 模块名 举例： [root@localhost beinan]# modprobe -r ne2k-pci 就说这么多吧，更为详细的还是用 man modprobe 来查看和尝试；&#10;4、rmmod 移除已挂载模块；&#10;命令格式： rmmod 模块名 注意： 模块名是不能带有后缀的，我们通过modprobe -l 所看到的模块，都是带有.ko 或.o后缀；&#10;举例：&#10;[root@localhost beinan]# rmmod vfat 注：移除已挂载的模块vfat 5、depmod 创建模块依赖关系的列表&#10;这个模块管理工具是创建模块依赖关系的列表，有几个参数我们注意一下就行了，目前的的Linux 发行版所用的内核是2.6x版本，是自动解决依赖关系，所以这个命令知道就行了；模块之前也有依赖关系，比如我们想驱动USB 移动硬盘，目前有两种驱动，一种是udev ，在内核中有，但目前不太稳定；另一种办法是用usb-storage驱动，而usb-storage 依赖的模块是scsi 模块，所以我们要用usb-storage 的模块，也得把scsi 编译安装；&#10;再举个例子：sata的硬盘，在Linux中的设备表示的是/dev/sd* ，比如 /dev/sda，/dev/sdb 等… 系统要驱动 sata硬盘，则需要把sata在内核中选中，或编译成模块，或内置于内核之中，在此同时，还需要在内核中选中ide ，scsi 的支持等；&#10;depmod 工具的洋文原意：depmod — program to generate modules.dep and map files.（我译的：为modules.dep 文件或映射文件创建依赖关系）&#10;[root@localhost beinan]# depmod -a 注：为所有列在/etc/modprobe.conf 或/etc/modules.conf 中的所有模块创建依赖关系，并且写入到modules.dep文件；&#10;[root@localhost beinan]# depmod -e 注：列出已挂载但不可用的模块；&#10;[root@localhost beinan]# depmod -n 注：列出所有模块的依赖关系，但仅仅是输出出来 （Write the dependency file on stdout only） 注：modules.dep 位于 /lib/modules/内核版本 目录&#10;比如 Fedora Core 4.0 中，系统默认的内核： [root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/modules.dep&#10;/lib/modules/2.6.11-1.1369_FC4/modules.dep 6、insmod 挂载模块；&#10;insmod 这个工具，和modprobe 有点类似，但功能上没有modprobe 强，modprobe 在挂载模块是不用指定模块文件的路径，也不用带文件的后缀.o 或.ko ；而insmod 需要的是模块的所在目录的绝对路径，并且一定要带有模块文件名后缀的(modulefile.o 或modulesfile.ko ）；&#10;对于这个工具，我们只是介绍一下， 并不推荐使用。因为模块有依赖关系，对于新手来说，可能不知道这个模块依赖和哪个模块依赖；&#10;举例：&#10;[root@localhost beinan]# insmod /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/tg3.ko 我们要到 /lib/modules/内核版本 uname -r 的命令输出/kernel/drivers 中找相对应的模块才行，要有绝对路径，而且必须要用到文件名的全称，不能把文件名的后缀省略；&#10;五、与内核模块加载相关的配置文件；&#10;1、模块的配置文件 modules.conf 或 modprobe.conf&#10;内核模块的开机自动挂载模块一般是位于一个配置文件，一般的Linux发行版本都有 /etc/modules.conf 或 /etc/modprobe.conf 。比如Fedora Core 4.0 内核模块开机自动加载文件是 /etc/modprobe.conf ；在这个文件中，一般是写入模块的加载命令或模块的别名的定义等；比如我们在modules.conf 中可能会发行类似的一行 ； alias eth0 8139too 而8029的网卡应该是&#10;alias eth0 ne2k-pci 这样系统启动的时候，首先会modprobe 8139too ，然后再为8139too 指定别名为 eth0，然后我们在登录的时候，用 ifconfig 就会查看到网卡的IP 等情况，当然您得为网卡设置IP 才行；&#10;一般的情况下，modproe.conf 或modules.conf的内容是我们用相应的硬件配置工具而生成的；如果您的硬件驱动是没有被内核支持，您自己到硬件的厂商下载而来的驱动。一般的情况下都有安装和帮助文件。他们的驱动在配置时，他会写入硬件的支持到modules.conf 或modprobe.conf 文件中。&#10;再比如我们的声卡在modules.conf 或modprobe.conf 中也有相应的内容，这是由alsaconf 配置工具生成的，明白了吧；同理网卡在modprobe.conf 或modules.conf中的内容也是由网卡的配置工具而来的。&#10;有些硬件是以内核模块的方式驱动的，模块一旦加载上就能用，也没有什么配置工具，比如vfat 和ntfs 的支持；如果是硬件驱动不以模块的方式支持，而是直接编入内核，也不会用在modprobe.conf 或 modules.conf 中加入什么内容；&#10;如果您有些模块不能开机加载，您想让一些模块加机自动加载，就可以把modprobe 模块 直接写入配置文件；&#10;2、内核模块其它配置文件&#10;内核模块的其它配置文件还是需要了解的，比如 /lib/modules/内核版本目录下的几个文件；了解一下就行；比如：&#10;[root@localhost beinan]# uname -r&#10;2.6.11-1.1369_FC4&#10;[root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/&#10;build misc modules.ccwmap modules.ieee1394map modules.isapnpmap modules.symbols source&#10;kernel modules.alias modules.dep modules.inputmap modules.pcimap modules.usbmap 六、硬件驱动在系统中的目录；&#10;硬件驱动在内核中以模块支持的目录；&#10;硬件驱动是必须由内核支持的，无论是我们自己安装驱动，还是内核自带的驱动都是如此。硬件驱动如果是以内核模块支持的，驱动目录位于： /lib/modules/内核版本/kernel/目录 或 /lib/modules/内核版本/kernel/drivers 目录中；&#10;[root@localhost beinan]# uname -r&#10;2.6.11-1.1369_FC4&#10;[root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/kernel&#10;arch crypto drivers fs lib net sound 注：只有驱动在内核中以模块的方法支持，驱动才位于 /lib/modules/相应的目录；如果是直接置入内核的，不会出现在/lib/modules驱动相关的目录；&#10;七、自己编译驱动的办法；&#10;如果是硬件厂商或者开源社区提供的驱动（没有集成在内核源码中的），编译驱动过程一般是./configure ;make;make install ，有时程序不提供./configure ，我们可以make或make install ，或者执行make;make install ；如果不能make install ，则需要我们自己复制.o或者.ko文件到 /lib/modules/内核版本/kernel/目录 或 /lib/modules/内核版本/kernel/drivers 目录中相应的驱动目录；&#10;这个还是自己尝试吧，说也说不清楚，遇到问题后就知道怎么弄了；具体的还是驱动的REAME和INSTALL为准；&#10;现在大多驱动都是在编译安装时，都自动复制.o或.ko 文件到内核模块目录，大多不用我们自己动手复制过去。如果您尝试编译安装声卡驱动 alsa-drivers 就会明白我所说的意思；&#10;如果是我们通过重编内核来解决驱动问题，可以查看/usr/src/目录中的内核源码目录中的 Documentation 的REAME ；所有的帮助文件都在那里；&#10;后记：&#10;内核编译对新手来说是有点困难，我写过类似的文档也有好多篇，但是不是新手弟兄从中能学到点什么，我不太知道；毕竟我写的文档在内核文件告诉一些基本的流程和注意的事项；内核的配置只有多实践才能学会，在配置内核时，要多看看帮助；&#10;内核模块管理方面我在本文中已经写了一些，大体上就这些，如果想要知道更为详细的，只能是自己看man 和–help了，我写文档也无非是查看这些东西，然后实践再写给大家；我能写出来，我想您的能力并不一定比我差，应该超出我才对；&#10;相关文档：&#10;1、《编译内核操作流程 ──为新手指南》&#10;2、《内核管理概述》&#10;3、《用ALSA驱动声卡流程详解》&#10;4、 《Fedora / Redhat 软件包管理指南》&#10;5、内核主站：http://kernel.org&#10;</description></item><item><title>完全用 GNU/Linux 工作【闲】】[2]</title><link>https://hessian.cn/p/466.html</link><pubDate>Sat, 07 Apr 2007 14:42:00 +0800</pubDate><guid>https://hessian.cn/p/466.html</guid><description>4. 释放内存 我在 Windows 下做过的一件最傻的事情莫过于“释放内存”了。有一天我看到一个 Windows 程序说：“这个程序可以帮你把大量内存释放出来给一个很大的程序用。”我试了一下，居然一下把我的 64M 内存释放出来 48M！我高兴极了。现在想一想，那是多么傻的事情，那么多的内存留着干什么？不用白不用啊！一个操作系统，居然还需要别人写的程序来释放内存，那是什么样的操作系统？</description></item><item><title>完全用 GNU/Linux 工作【闲】】[1]</title><link>https://hessian.cn/p/414.html</link><pubDate>Sat, 07 Apr 2007 14:41:00 +0800</pubDate><guid>https://hessian.cn/p/414.html</guid><description>完全用 GNU/Linux 工作 理解 GNU/Linux 注：本文是清华“牛仔”王垠的“成名作”，在网上引起很大的争议。对他崇拜地五体投地者有，对他嗤之以鼻者也有，总之成了一年多以前Linux 爱好者的圈子里的一个很有意思的现象。之后他对这篇文章进行了很大的修改，已经没有了原来那种意气风发。现存的版本如白开水一般无味，请参见：http: //learn.tsinghua.edu.cn/homepage/2001315450/ 尽管他原来的观点有所偏激，但我还是很欣赏他原来的风格。</description></item><item><title>关于如何让jre显示中文字体的方法</title><link>https://hessian.cn/p/660.html</link><pubDate>Sat, 07 Apr 2007 14:40:00 +0800</pubDate><guid>https://hessian.cn/p/660.html</guid><description>创建：2005-10-28 00:09:13&#10;作者：Unlinux&#10;来自: http://www.Unlinux.com&#10;由于jre里font.properies默认的字体是 Turbolinux里的-tlc-song-字体，如果你没有这种字体，肯定显示的都是“口”，解决方法有2种，一个就是按照jre里的说明，按照它的方法自己添加字体，但是这个难度比较大，需要用它提供的脚本，但是对于我们这些不是很了解java程序的菜鸟来说，这个方法显然有点难度。于是，我就想，既然我自己没有办法生成字体目录，我就改我原来的fonts.dir，让它支持这种-tlc-song-字体，同时保持原来的字体-misc- simsun-。更改的方法有很多种，我的方法不一定最好，也不一定是最简单，如果那个兄弟有更好的方法，可以写出来。&#10;1&gt; 新生成一个fonts.dir；&#10;2&gt; 在原来的fonts.dir里增加新的字体定义。&#10;我以前一种为例子，具体方法如下：&#10;1.在/usr/X11R6/lib/X11/fonts/trutype/下建立一个新的目录ttf-zh（目录名随便你起），然后将simsun.ttf，tahoma字体拷贝至这个新建立的目录。&#10;2.将simsun.ttf改名为tlc_song.ttf，将tahoma.ttf改为tlc_song_ascii.ttf。&#10;3.生成fonts.dir文件：&#10;132&#10;tlc_song_ascii.ttf -tlc-song-medium-r-normal–0-0-0-0-p-0-iso8859-1&#10;tlc_song.ttf -tlc-song-medium-r-normal–0-0-0-0-c-0-iso10646-1&#10;tlc_song.ttf -tlc-song-medium-r-normal–0-0-0-0-c-0-gbk-0&#10;tlc_song.ttf -tlc-song-medium-r-normal–0-0-0-0-c-0-gb2312.1980-0&#10;tlc_song.ttf -tlc-song-medium-r-normal–0-0-0-0-c-0-gb18030.2000-1&#10;tlc_song.ttf -tlc-song-medium-r-normal–0-0-0-0-c-0-gb18030.2000-0&#10;tlc_song.ttf -tlc-song-medium-r-normal–0-0-0-0-c-0-gb18030-0&#10;tlc_song.ttf -tlc-song-medium-r-normal–0-0-0-0-c-0-big5.eten-0&#10;tlc_song.ttf -tlc-song-medium-r-normal–0-0-0-0-c-0-big5.et-0&#10;tlc_song.ttf -tlc-song-medium-r-normal–0-0-0-0-c-0-big5-0&#10;ai=0.3:tlc_song_ascii.ttf -tlc-song-medium-i-normal–0-0-0-0-p-0-iso8859-1&#10;ai=0.3:tlc_song.ttf -tlc-song-medium-i-normal–0-0-0-0-c-0-iso10646-1&#10;ai=0.3:tlc_song.ttf -tlc-song-medium-i-normal–0-0-0-0-c-0-gbk-0&#10;ai=0.3:tlc_song.ttf -tlc-song-medium-i-normal–0-0-0-0-c-0-gb2312.1980-0&#10;ai=0.3:tlc_song.ttf -tlc-song-medium-i-normal–0-0-0-0-c-0-gb18030.2000-1&#10;ai=0.3:tlc_song.ttf -tlc-song-medium-i-normal–0-0-0-0-c-0-gb18030.2000-0&#10;ai=0.3:tlc_song.ttf -tlc-song-medium-i-normal–0-0-0-0-c-0-gb18030-0&#10;ai=0.3:tlc_song.ttf -tlc-song-medium-i-normal–0-0-0-0-c-0-big5.eten-0&#10;ai=0.3:tlc_song.ttf -tlc-song-medium-i-normal–0-0-0-0-c-0-big5.et-0&#10;ai=0.3:tlc_song.ttf -tlc-song-medium-i-normal–0-0-0-0-c-0-big5-0&#10;ds=y:tlc_song_ascii.ttf -tlc-song-bold-r-normal–0-0-0-0-p-0-iso8859-1&#10;ds=y:tlc_song.ttf -tlc-song-bold-r-normal–0-0-0-0-c-0-iso10646-1&#10;ds=y:tlc_song.ttf -tlc-song-bold-r-normal–0-0-0-0-c-0-gbk-0&#10;ds=y:tlc_song.ttf -tlc-song-bold-r-normal–0-0-0-0-c-0-gb2312.1980-0&#10;ds=y:tlc_song.ttf -tlc-song-bold-r-normal–0-0-0-0-c-0-gb18030.2000-1&#10;ds=y:tlc_song.ttf -tlc-song-bold-r-normal–0-0-0-0-c-0-gb18030.2000-0&#10;ds=y:tlc_song.ttf -tlc-song-bold-r-normal–0-0-0-0-c-0-gb18030-0&#10;ds=y:tlc_song.ttf -tlc-song-bold-r-normal–0-0-0-0-c-0-big5.eten-0&#10;ds=y:tlc_song.ttf -tlc-song-bold-r-normal–0-0-0-0-c-0-big5.et-0&#10;ds=y:tlc_song.ttf -tlc-song-bold-r-normal–0-0-0-0-c-0-big5-0&#10;ai=0.3:ds=y:tlc_song_ascii.ttf -tlc-song-bold-i-normal–0-0-0-0-p-0-iso8859-1&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-song-bold-i-normal–0-0-0-0-c-0-iso10646-1&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-song-bold-i-normal–0-0-0-0-c-0-gbk-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-song-bold-i-normal–0-0-0-0-c-0-gb2312.1980-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-song-bold-i-normal–0-0-0-0-c-0-gb18030.2000-1&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-song-bold-i-normal–0-0-0-0-c-0-gb18030.2000-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-song-bold-i-normal–0-0-0-0-c-0-gb18030-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-song-bold-i-normal–0-0-0-0-c-0-big5.eten-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-song-bold-i-normal–0-0-0-0-c-0-big5.et-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-song-bold-i-normal–0-0-0-0-c-0-big5-0&#10;tlc_song_ascii.ttf -tlc-ming-medium-r-normal–0-0-0-0-p-0-iso8859-1&#10;tlc_song.ttf -tlc-ming-medium-r-normal–0-0-0-0-c-0-big5.eten-0&#10;tlc_song.ttf -tlc-ming-medium-r-normal–0-0-0-0-c-0-big5.et-0&#10;tlc_song.ttf -tlc-ming-medium-r-normal–0-0-0-0-c-0-big5-0&#10;ai=0.3:tlc_song_ascii.ttf -tlc-ming-medium-i-normal–0-0-0-0-p-0-iso8859-1&#10;ai=0.3:tlc_song.ttf -tlc-ming-medium-i-normal–0-0-0-0-c-0-big5.eten-0&#10;ai=0.3:tlc_song.ttf -tlc-ming-medium-i-normal–0-0-0-0-c-0-big5.et-0&#10;ai=0.3:tlc_song.ttf -tlc-ming-medium-i-normal–0-0-0-0-c-0-big5-0&#10;ds=y:tlc_song_ascii.ttf -tlc-ming-bold-r-normal–0-0-0-0-p-0-iso8859-1&#10;ds=y:tlc_song.ttf -tlc-ming-bold-r-normal–0-0-0-0-c-0-big5.eten-0&#10;ds=y:tlc_song.ttf -tlc-ming-bold-r-normal–0-0-0-0-c-0-big5.et-0&#10;ds=y:tlc_song.ttf -tlc-ming-bold-r-normal–0-0-0-0-c-0-big5-0&#10;ai=0.3:ds=y:tlc_song_ascii.ttf -tlc-ming-bold-i-normal–0-0-0-0-p-0-iso8859-1&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-ming-bold-i-normal–0-0-0-0-c-0-big5.eten-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-ming-bold-i-normal–0-0-0-0-c-0-big5.et-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-ming-bold-i-normal–0-0-0-0-c-0-big5-0&#10;tlc_song.ttf -tlc-mincho-medium-r-normal–0-0-0-0-c-0-jisx0212.1990-0&#10;tlc_song.ttf -tlc-mincho-medium-r-normal–0-0-0-0-c-0-jisx0208.1990-0&#10;tlc_song.ttf -tlc-mincho-medium-r-normal–0-0-0-0-c-0-jisx0208.1983-0&#10;tlc_song.ttf -tlc-mincho-medium-r-normal–0-0-0-0-c-0-jisx0201.1976-0&#10;tlc_song_ascii.ttf -tlc-mincho-medium-r-normal–0-0-0-0-p-0-iso8859-1&#10;ai=0.3:tlc_song.ttf -tlc-mincho-medium-i-normal–0-0-0-0-c-0-jisx0212.1990-0&#10;ai=0.3:tlc_song.ttf -tlc-mincho-medium-i-normal–0-0-0-0-c-0-jisx0208.1990-0&#10;ai=0.3:tlc_song.ttf -tlc-mincho-medium-i-normal–0-0-0-0-c-0-jisx0208.1983-0&#10;ai=0.3:tlc_song.ttf -tlc-mincho-medium-i-normal–0-0-0-0-c-0-jisx0201.1976-0&#10;ai=0.3:tlc_song_ascii.ttf -tlc-mincho-medium-i-normal–0-0-0-0-p-0-iso8859-1&#10;ds=y:tlc_song.ttf -tlc-mincho-bold-r-normal–0-0-0-0-c-0-jisx0212.1990-0&#10;ds=y:tlc_song.ttf -tlc-mincho-bold-r-normal–0-0-0-0-c-0-jisx0208.1990-0&#10;ds=y:tlc_song.ttf -tlc-mincho-bold-r-normal–0-0-0-0-c-0-jisx0208.1983-0&#10;ds=y:tlc_song.ttf -tlc-mincho-bold-r-normal–0-0-0-0-c-0-jisx0201.1976-0&#10;ds=y:tlc_song_ascii.ttf -tlc-mincho-bold-r-normal–0-0-0-0-p-0-iso8859-1&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-mincho-bold-i-normal–0-0-0-0-c-0-jisx0212.1990-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-mincho-bold-i-normal–0-0-0-0-c-0-jisx0208.1990-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-mincho-bold-i-normal–0-0-0-0-c-0-jisx0208.1983-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-mincho-bold-i-normal–0-0-0-0-c-0-jisx0201.1976-0&#10;ai=0.3:ds=y:tlc_song_ascii.ttf -tlc-mincho-bold-i-normal–0-0-0-0-p-0-iso8859-1&#10;tlc_song_ascii.ttf -tlc-HanyiSong-medium-r-normal–0-0-0-0-p-0-iso8859-1&#10;tlc_song.ttf -tlc-HanyiSong-medium-r-normal–0-0-0-0-c-0-iso10646-1&#10;tlc_song.ttf -tlc-HanyiSong-medium-r-normal–0-0-0-0-c-0-gbk-0&#10;tlc_song.ttf -tlc-HanyiSong-medium-r-normal–0-0-0-0-c-0-gb2312.1980-0&#10;tlc_song.ttf -tlc-HanyiSong-medium-r-normal–0-0-0-0-c-0-gb18030-0&#10;tlc_song.ttf -tlc-HanyiSong-medium-r-normal–0-0-0-0-c-0-big5-0&#10;ai=0.3:tlc_song_ascii.ttf -tlc-HanyiSong-medium-i-normal–0-0-0-0-p-0-iso8859-1&#10;ai=0.3:tlc_song.ttf -tlc-HanyiSong-medium-i-normal–0-0-0-0-c-0-iso10646-1&#10;ai=0.3:tlc_song.ttf -tlc-HanyiSong-medium-i-normal–0-0-0-0-c-0-gbk-0&#10;ai=0.3:tlc_song.ttf -tlc-HanyiSong-medium-i-normal–0-0-0-0-c-0-gb2312.1980-0&#10;ai=0.3:tlc_song.ttf -tlc-HanyiSong-medium-i-normal–0-0-0-0-c-0-gb18030-0&#10;ai=0.3:tlc_song.ttf -tlc-HanyiSong-medium-i-normal–0-0-0-0-c-0-big5-0&#10;ds=y:tlc_song_ascii.ttf -tlc-HanyiSong-bold-r-normal–0-0-0-0-p-0-iso8859-1&#10;ds=y:tlc_song.ttf -tlc-HanyiSong-bold-r-normal–0-0-0-0-c-0-iso10646-1&#10;ds=y:tlc_song.ttf -tlc-HanyiSong-bold-r-normal–0-0-0-0-c-0-gbk-0&#10;ds=y:tlc_song.ttf -tlc-HanyiSong-bold-r-normal–0-0-0-0-c-0-gb2312.1980-0&#10;ds=y:tlc_song.ttf -tlc-HanyiSong-bold-r-normal–0-0-0-0-c-0-gb18030-0&#10;ds=y:tlc_song.ttf -tlc-HanyiSong-bold-r-normal–0-0-0-0-c-0-big5-0&#10;ai=0.3:ds=y:tlc_song_ascii.ttf -tlc-HanyiSong-bold-i-normal–0-0-0-0-p-0-iso8859-1&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-HanyiSong-bold-i-normal–0-0-0-0-c-0-iso10646-1&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-HanyiSong-bold-i-normal–0-0-0-0-c-0-gbk-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-HanyiSong-bold-i-normal–0-0-0-0-c-0-gb2312.1980-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-HanyiSong-bold-i-normal–0-0-0-0-c-0-gb18030-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-HanyiSong-bold-i-normal–0-0-0-0-c-0-big5-0&#10;tlc_song_ascii.ttf -tlc-default-medium-r-normal–0-0-0-0-p-0-iso8859-1&#10;tlc_song.ttf -tlc-default-medium-r-normal–0-0-0-0-c-0-iso10646-1&#10;tlc_song.ttf -tlc-default-medium-r-normal–0-0-0-0-c-0-gbk-0&#10;tlc_song.ttf -tlc-default-medium-r-normal–0-0-0-0-c-0-gb2312.1980-0&#10;tlc_song.ttf -tlc-default-medium-r-normal–0-0-0-0-c-0-gb18030-0&#10;tlc_song.ttf -tlc-default-medium-r-normal–0-0-0-0-c-0-big5.eten-0&#10;tlc_song.ttf -tlc-default-medium-r-normal–0-0-0-0-c-0-big5.et-0&#10;tlc_song.ttf -tlc-default-medium-r-normal–0-0-0-0-c-0-big5-0&#10;ai=0.3:tlc_song_ascii.ttf -tlc-default-medium-i-normal–0-0-0-0-p-0-iso8859-1&#10;ai=0.3:tlc_song.ttf -tlc-default-medium-i-normal–0-0-0-0-c-0-iso10646-1&#10;ai=0.3:tlc_song.ttf -tlc-default-medium-i-normal–0-0-0-0-c-0-gbk-0&#10;ai=0.3:tlc_song.ttf -tlc-default-medium-i-normal–0-0-0-0-c-0-gb2312.1980-0&#10;ai=0.3:tlc_song.ttf -tlc-default-medium-i-normal–0-0-0-0-c-0-gb18030-0&#10;ai=0.3:tlc_song.ttf -tlc-default-medium-i-normal–0-0-0-0-c-0-big5.eten-0&#10;ai=0.3:tlc_song.ttf -tlc-default-medium-i-normal–0-0-0-0-c-0-big5.et-0&#10;ai=0.3:tlc_song.ttf -tlc-default-medium-i-normal–0-0-0-0-c-0-big5-0&#10;ds=y:tlc_song_ascii.ttf -tlc-default-bold-r-normal–0-0-0-0-p-0-iso8859-1&#10;ds=y:tlc_song.ttf -tlc-default-bold-r-normal–0-0-0-0-c-0-iso10646-1&#10;ds=y:tlc_song.ttf -tlc-default-bold-r-normal–0-0-0-0-c-0-gbk-0&#10;ds=y:tlc_song.ttf -tlc-default-bold-r-normal–0-0-0-0-c-0-gb2312.1980-0&#10;ds=y:tlc_song.ttf -tlc-default-bold-r-normal–0-0-0-0-c-0-gb18030-0&#10;ds=y:tlc_song.ttf -tlc-default-bold-r-normal–0-0-0-0-c-0-big5.eten-0&#10;ds=y:tlc_song.ttf -tlc-default-bold-r-normal–0-0-0-0-c-0-big5.et-0&#10;ds=y:tlc_song.ttf -tlc-default-bold-r-normal–0-0-0-0-c-0-big5-0&#10;ai=0.3:ds=y:tlc_song_ascii.ttf -tlc-default-bold-i-normal–0-0-0-0-p-0-iso8859-1&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-default-bold-i-normal–0-0-0-0-c-0-iso10646-1&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-default-bold-i-normal–0-0-0-0-c-0-gbk-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-default-bold-i-normal–0-0-0-0-c-0-gb2312.1980-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-default-bold-i-normal–0-0-0-0-c-0-gb18030-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-default-bold-i-normal–0-0-0-0-c-0-big5.eten-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-default-bold-i-normal–0-0-0-0-c-0-big5.et-0&#10;ai=0.3:ds=y:tlc_song.ttf -tlc-default-bold-i-normal–0-0-0-0-c-0-big5-0&#10;生成fonts.scale：cp fonts.dir fonts.scale。&#10;4.修改/etc/X11/XF86config文件，增加字体目录FontPath "/usr/X11R6/lib/X11/fonts/truetype/ttf-zh"&#10;5.运行SuSEconfig，如果没有什么错误提示，重新启动xwindow，你此时运行/jre/bin/ControlPanel就会见到下面的图样。&#10;</description></item><item><title>［转］往JRE里添加新字体</title><link>https://hessian.cn/p/508.html</link><pubDate>Sat, 07 Apr 2007 14:39:00 +0800</pubDate><guid>https://hessian.cn/p/508.html</guid><description>   Adding Fonts to the Java Runtime 要加一种亚洲字体进JRE，请按以下步骤进行：&#10;1.装入字体&#10;首先，你必须装载中文、日文、韩文或传统的中文字体（楷书、宋体等）到你的系统里面&#10;2.复制字体进font.properties&#10;装好了字体后，复制你感兴趣字体的descriptio到font.properties,最简捷的方法是把&#10;font.properties.&lt;locale&gt;直接改名为font.properties&#10;</description></item><item><title>Linux下配置功能完善的web服务器</title><link>https://hessian.cn/p/474.html</link><pubDate>Sat, 07 Apr 2007 14:38:00 +0800</pubDate><guid>https://hessian.cn/p/474.html</guid><description>调试环境：Redhat9.0 Apache1.3.29 Mysql3.23.58 PHP4.3.4 Linux系统的安装我就不讲了，这是基本功，其实这篇文章在类似Redhat的其他linux也应该通用，大家只要掌握我提供的方法就行。记 得安装Redhat9。0的时候不要安装系统默认的apache，mysql和php以及相关的软件。已经安装的请用rpm -e * 删除已经安装的包。</description></item><item><title>apache打开或者关闭列目录功能</title><link>https://hessian.cn/p/587.html</link><pubDate>Sat, 07 Apr 2007 14:30:00 +0800</pubDate><guid>https://hessian.cn/p/587.html</guid><description>&#10;问题分析：如果客户端发送一个URL请求， 但是相应的目录里面没有DirectoryIndex属性指定的文件名，那么可以使用mod_autoindex模块来列出该目录的文件名。&#10;</description></item><item><title>PHP5安装说明（Apache 2 共享模块版本）</title><link>https://hessian.cn/p/311.html</link><pubDate>Sat, 07 Apr 2007 14:30:00 +0800</pubDate><guid>https://hessian.cn/p/311.html</guid><description>1. gzip -d httpd-2_0_NN.tar.gz&#10;2. tar xvf httpd-2_0_NN.tar&#10;3. gunzip php-NN.tar.gz&#10;4. tar -xvf php-NN.tar&#10;5. cd httpd-2_0_NN&#10;6. ./configure --enable-so&#10;7. make&#10;8. make install&#10;现在已经将 Apache 2.0.NN 安装在 /usr/local/apache。本安装支持可装载模块&#10;和标准的 MPM prefork。之后，可以使用如下命令启动 Apache 服务器：&#10;/usr/local/apache2/bin/apachectl start&#10;如果成功，可以停止 Apache 服务器并继续安装 PHP：&#10;/usr/local/apache2/bin/apachectl stop.&#10;9. cd ../php4-NN&#10;10. 现在需要配置 PHP。在这里可以用各种各样的参数来自定义PHP，例如启动哪些&#10;扩展功能包的支持等。用 ./configure --help 命令可以列出当前可用的所有参&#10;数。在此例中，将给出一个在有 MySQL 支持的 Apache 2 上进行配置的范例。&#10;用户本地的 apxs 的路径可能会不同，事实上，在用户的系统中，它可能被命名为&#10;apxs2。&#10;./configure --with-apxs2=/usr/local/apache2/bin/apxs&#10;11. make&#10;12. make install&#10;如果决定在安装后改变配置选项，只需重复最后的三步，然后需要重新启动 Apache&#10;使新模块生效。无需重新编译。&#10;请注意，除非明确有提示，否则“make install”命令将安装 PEAR、各种 PHP 工具&#10;诸如 phpize，安装 PHP CLI 等等。&#10;13. 配置 php.ini&#10;cp php.ini-dist /usr/local/lib/php.ini&#10;可以编辑 php.ini 文件以修改 PHP 的选项。如果想要把此文件放到另外的位置，&#10;需要在步骤 10 添加 --with-config-file-path=/path 选项。&#10;如果选择 php.ini -recommended，请务必阅读其中的变更的列表，它们将影响&#10;PHP 的执行。&#10;14. 编辑 httpd.conf 文件以调用 PHP 模块。LoadMolude 表达式右边的路径必须指向&#10;系统中的 PHP。以上的 make install 命令可能已经完成了这些，但务必要检查。&#10;对于 PHP 4：&#10;LoadModule php4_module modules/libphp4.so&#10;对于 PHP 5：&#10;LoadModule php5_module modules/libphp5.so&#10;15. 告知 Apache 将特定的扩展名解析成 PHP，例如，让 Apache 将扩展名 .php&#10;解析成 PHP。可以将任何扩展名指定为 PHP，只需添加它们，每一个用空格分隔。&#10;例如，要添加 .phtml：&#10;AddType application/x-httpd-php .php .phtml&#10;通常还将 .phps 扩展名设置成显示高亮的 PHP 源文件，可以这样来完成：&#10;AddType application/x-httpd-php-source .phps&#10;16. 启动 Apache 服务器：&#10;/usr/local/apache2/bin/apachectl start</description></item></channel></rss>