<?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>碧云涛小屋 &#187; 自由世界</title>
	<atom:link href="http://blog.axqd.net/categories/tech/%e8%87%aa%e7%94%b1%e4%b8%96%e7%95%8c/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.axqd.net</link>
	<description>by aXqd</description>
	<lastBuildDate>Sat, 17 Jul 2010 16:42:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<atom:link rel='hub' href='http://blog.axqd.net/?pushpress=hub'/>
		<item>
		<title>BASH取得脚本所在路径</title>
		<link>http://blog.axqd.net/2009/12/22/get-script-path-in-bash/</link>
		<comments>http://blog.axqd.net/2009/12/22/get-script-path-in-bash/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 09:08:11 +0000</pubDate>
		<dc:creator>axqd</dc:creator>
				<category><![CDATA[自由世界]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://blog.axqd.net/?p=758</guid>
		<description><![CDATA[脚本所在路径通常来说，比pwd好用得多。以前，总是直接dirname $0，或者在perl里从__FILE__里取。今天又要写这个，看恶心了，想起bash自己就能做这种事情，但不记得语法了。于是google了一下&#8221;bash string manipulate&#8221;。 果然很好很强大：http://tldp.org/LDP/abs/html/string-manipulation.html 用得上的是这段： ${string%substring} Deletes shortest match of $substring from back of $string. 于是${0%/*}把末尾&#8217;/'以后的全删掉就行了。 当然，这是相对于pwd的路径，不过已经够用了。]]></description>
			<content:encoded><![CDATA[<p>脚本所在路径通常来说，比pwd好用得多。以前，总是直接dirname $0，或者在perl里从__FILE__里取。今天又要写这个，看恶心了，想起bash自己就能做这种事情，但不记得语法了。于是google了一下&#8221;bash string manipulate&#8221;。</p>
<p>果然很好很强大：<a href="http://tldp.org/LDP/abs/html/string-manipulation.html">http://tldp.org/LDP/abs/html/string-manipulation.html</a></p>
<p>用得上的是这段：<br />
${string%substring}<br />
Deletes shortest match of $substring from back of $string.</p>
<p>于是${0%/*}把末尾&#8217;/'以后的全删掉就行了。<br />
当然，这是相对于pwd的路径，不过已经够用了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axqd.net/2009/12/22/get-script-path-in-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian常用命令</title>
		<link>http://blog.axqd.net/2007/06/10/debian-common-commands/</link>
		<comments>http://blog.axqd.net/2007/06/10/debian-common-commands/#comments</comments>
		<pubDate>Sun, 10 Jun 2007 02:25:09 +0000</pubDate>
		<dc:creator>axqd</dc:creator>
				<category><![CDATA[自由世界]]></category>

		<guid isPermaLink="false">http://blog.axqd.net/?p=428</guid>
		<description><![CDATA[查看软件xxx安装内容 dpkg -L xxx 查找软件 apt-cache search 正则表达式 查找文件属于哪个包 dpkg -S filename apt-file search filename 查询软件xxx依赖哪些包 apt-cache depends xxx 查询软件xxx被哪些包依赖 apt-cache rdepends xxx 增加一个光盘源 apt-cdrom add 系统升级 apt-get update apt-get upgrade apt-get dist-upgrade 清除所有删除包的残余配置文件 dpkg -l &#124;grep ^rc&#124;awk ''{print $2}'' &#124;tr ["\n"] [" "]&#124;sudo xargs dpkg -P - 编译时缺少h文件的自动处理 auto-apt run ./configure 查看安装软件时下载包的临时存放目录 ls /var/cache/apt/archives [...]]]></description>
			<content:encoded><![CDATA[<p>查看软件xxx安装内容<br />
<code>dpkg -L xxx</code></p>
<p>查找软件<br />
<code>apt-cache search 正则表达式</code></p>
<p>查找文件属于哪个包<br />
<code>dpkg -S filename<br />
apt-file search filename</code></p>
<p>查询软件xxx依赖哪些包<br />
<code>apt-cache depends xxx</code></p>
<p>查询软件xxx被哪些包依赖<br />
<code>apt-cache rdepends xxx</code></p>
<p>增加一个光盘源<br />
<code>apt-cdrom add</code></p>
<p>系统升级<br />
<code>apt-get update<br />
apt-get upgrade<br />
apt-get dist-upgrade</code></p>
<p>清除所有删除包的残余配置文件<br />
<code>dpkg -l |grep ^rc|awk ''{print $2}'' |tr ["\n"] [" "]|sudo xargs dpkg -P -</code></p>
<p>编译时缺少h文件的自动处理<br />
<code>auto-apt run ./configure</code></p>
<p>查看安装软件时下载包的临时存放目录<br />
<code>ls /var/cache/apt/archives</code></p>
<p>备份当前系统安装的所有包的列表<br />
<code>dpkg --get-selections | grep -v deinstall > ~/somefile</code></p>
<p>从上面备份的安装包的列表文件恢复所有包<br />
<code>dpkg --set-selections < ~/somefile<br />
dselect</code></p>
<p>清理旧版本的软件缓存<br />
<code>apt-get autoclean</code></p>
<p>清理所有软件缓存<br />
<code>apt-get clean</code></p>
<p>删除系统不再使用的孤立软件<br />
<code>apt-get autoremove</code></p>
<p>查看包在服务器上面的地址<br />
<code>apt-get -qq --print-uris install ssh | cut -d\'' -f2</code></p>
<p>查看内核<br />
<code>uname -a</code></p>
<p>查看Ubuntu版本<br />
<code>cat /etc/issue</code></p>
<p>查看内核加载的模块<br />
<code>lsmod</code></p>
<p>查看PCI设备<br />
<code>lspci</code></p>
<p>查看USB设备<br />
<code>lsusb</code></p>
<p>查看网卡状态<br />
<code>ethtool eth0</code></p>
<p>查看CPU信息<br />
<code>cat /proc/cpuinfo</code></p>
<p>显示当前硬件信息<br />
<code>lshw</code></p>
<p>查看硬盘的分区<br />
<code>fdisk -l</code></p>
<p>查看IDE硬盘信息<br />
<code>hdparm -i /dev/hda</code></p>
<p>查看STAT硬盘信息<br />
<code>hdparm -I /dev/sda<br />
或<br />
apt-get install blktool<br />
blktool /dev/sda id</code></p>
<p>查看硬盘剩余空间<br />
<code>df -h<br />
df -H</code></p>
<p>查看目录占用空间<br />
<code>du -hs 目录名</code></p>
<p>优盘没法卸载<br />
<code>sync<br />
fuser -km /media/usbdisk</code></p>
<p>查看当前的内存使用情况<br />
<code>free -m</code></p>
<p>查看当前有哪些进程<br />
<code>ps -aux</code></p>
<p>中止一个进程<br />
<code>kill 进程号<br />
或 killall 进程名</code></p>
<p>强制中止一个进程<br />
<code>kill -9 进程号<br />
或 killall -9 进程名</code></p>
<p>查看当前进程的实时状况<br />
<code>top</code></p>
<p>查看进程打开的文件<br />
<code>lsof -p</code></p>
<p>配置 ADSL<br />
<code>pppoeconf</code></p>
<p>ADSL手工拨号<br />
<code>pon dsl-provider</code></p>
<p>激活 ADSL<br />
<code>/etc/ppp/pppoe_on_boot</code></p>
<p>断开 ADSL<br />
<code>poff</code></p>
<p>查看拨号日志<br />
<code>plog</code></p>
<p>根据IP查网卡地址<br />
<code>arping IP地址</code></p>
<p>查看当前IP地址<br />
<code>ifconfig eth0</code></p>
<p>查看当前监听80端口的程序<br />
<code>lsof -i :80</code></p>
<p>查看当前网卡的物理地址<br />
<code>arp -a | awk ''{print $4}''<br />
ifconfig eth0 | head -1 | awk ''{print $5}''</code></p>
<p>立即让网络支持nat<br />
<code>echo 1 > /proc/sys/net/ipv4/ip_forward<br />
iptables -t nat -I POSTROUTING -j MASQUERADE</code></p>
<p>查看路由信息<br />
<code>netstat -rn<br />
route -n</code></p>
<p>手工增加删除一条路由<br />
<code>route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1<br />
route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1</code></p>
<p>修改网卡MAC地址的方法<br />
<code>ifconfig eth0 down #关闭网卡<br />
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #然后改地址<br />
ifconfig eth0 up #然后启动网卡</code></p>
<p>统计当前IP连接的个数<br />
<code>netstat -na|grep ESTABLISHED|awk ''{print $5}''|awk -F: ''{print $1}''|sort|uniq -c|sort -r -n<br />
netstat -na|grep SYN|awk ''{print $5}''|awk -F: ''{print $1}''|sort|uniq -c|sort -r -n</code></p>
<p>统计当前20000个IP包中大于100个IP包的IP地址<br />
<code>tcpdump -tnn -c 20000 -i eth0 | awk -F "." ''{print $1"."$2"."$3"."$4}'' | sort | uniq -c | sort -nr | awk '' $1 > 100 ''</code></p>
<p>屏蔽IPV6<br />
<code>echo "blacklist ipv6" | tee /etc/modprobe.d/blacklist-ipv6</code></p>
<p>添加一个服务<br />
<code>update-rc.d 服务名 defaults 99</code></p>
<p>删除一个服务<br />
<code>update-rc.d 服务名 remove</code></p>
<p>临时重启一个服务<br />
<code>/etc/init.d/服务名 restart</code></p>
<p>临时关闭一个服务<br />
<code>/etc/init.d/服务名 stop</code></p>
<p>临时启动一个服务<br />
<code>/etc/init.d/服务名 start</code></p>
<p>配置默认Java使用哪个<br />
<code>update-alternatives --config java</code></p>
<p>修改用户资料<br />
<code>chfn userid</code></p>
<p>给apt设置代理<br />
<code>export http_proxy=http://xx.xx.xx.xx:xxx</code></p>
<p>修改系统登录信息<br />
<code>vi /etc/motd</code></p>
<p>转换文件名由GBK为UTF8<br />
<code>apt-get install convmv<br />
convmv -r -f cp936 -t utf8 --notest --nosmart *</code></p>
<p>批量转换src目录下的所有文件内容由GBK到UTF8<br />
<code>find src -type d -exec mkdir -p utf8/{} \;<br />
find src -type f -exec iconv -f GBK -t UTF-8 {} -o utf8/{} \;<br />
mv utf8/* src<br />
rm -fr utf8</code></p>
<p>转换文件内容由GBK到UTF8<br />
<code>iconv -f gbk -t utf8 $i > newfile</code></p>
<p>转换 mp3 标签编码<br />
<code>apt-get install python-mutagen<br />
find . -iname “*.mp3” -execdir mid3iconv -e GBK {} \;</code></p>
<p>控制台下显示中文<br />
<code>apt-get install zhcon<br />
使用时，输入zhcon即可</code></p>
<p>快速查找某个文件<br />
<code>whereis filename<br />
find 目录 -name 文件名</code></p>
<p>查看文件类型<br />
<code>file filename</code></p>
<p>显示xxx文件倒数6行的内容<br />
<code>tail -n 6 xxx</code></p>
<p>让tail不停地读地最新的内容<br />
<code>tail -n 10 -f /var/log/apache2/access.log</code></p>
<p>查看文件中间的第五行 ( 含 ) 到第 10 行 ( 含 ) 的内容<br />
<code>sed -n ''5,10p'' /var/log/apache2/access.log</code></p>
<p>查找包含xxx字符串的文件<br />
<code>grep -l -r xxx .</code></p>
<p>查找关于xxx的命令<br />
<code>apropos xxx<br />
man -k xxx</code></p>
<p>通过ssh传输文件<br />
<code>scp -rp /path/filename username@remoteIP:/path  #将本地文件拷贝到服务器上<br />
scp -rp username@remoteIP:/path/filename /path  #将远程文件从服务器下载到本地</code></p>
<p>查看某个文件被哪些应用程序读写<br />
<code>lsof 文件名</code></p>
<p>把所有文件的后辍由rm改为rmvb<br />
<code>rename ''s/.rm$/.rmvb/'' *</code></p>
<p>把所有文件名中的大写改为小写<br />
<code>rename ''tr/A-Z/a-z/'' *</code></p>
<p>删除特殊文件名的文件，如文件名：--help.txt<br />
<code>rm -- --help.txt 或者 rm ./--help.txt</code></p>
<p>查看当前目录的子目录<br />
<code>ls -d */. 或 echo */.</code></p>
<p>将当前目录下最近30天访问过的文件移动到上级back目录<br />
<code>find . -type f -atime -30 -exec mv {} ../back \;</code></p>
<p>将当前目录下最近2小时到8小时之内的文件显示出来<br />
<code>find . -mmin +120 -mmin -480 -exec more {} \;</code></p>
<p>删除修改时间在30天之前的所有文件<br />
<code>find . -type f -mtime +30 -mtime -3600 -exec rm {} \;</code></p>
<p>查找guest用户的以avi或者rm结尾的文件并删除掉<br />
<code>find . -name ''*.avi'' -o -name ''*.rm'' -user ''guest'' -exec rm {} \;</code></p>
<p>查找的不以java和xml结尾,并7天没有使用的文件删除掉<br />
<code>find . ! -name *.java ! -name ‘*.xml’ -atime +7 -exec rm {} \;</code></p>
<p>统计当前文件个数<br />
<code>ls /usr/bin|wc -w</code></p>
<p>统计当前目录个数<br />
<code>ls -l /usr/bin|grep ^d|wc -l</code></p>
<p>显示当前目录下2006-01-01的文件名<br />
<code>ls -l |grep 2006-01-01 |awk ''{print $8}''</code></p>
<p>解压缩 xxx.tar.gz<br />
<code>tar -zxvf xxx.tar.gz</code></p>
<p>解压缩 xxx.tar.bz2<br />
<code>tar -jxvf xxx.tar.bz2</code></p>
<p>压缩aaa bbb目录为xxx.tar.gz<br />
<code>tar -zcvf xxx.tar.gz aaa bbb</code></p>
<p>压缩aaa bbb目录为xxx.tar.bz2<br />
<code>tar -jcvf xxx.tar.bz2 aaa bbb</code></p>
<p>特殊 URI 地址<br />
<code>* computer:/// - 全部挂载的设备和网络<br />
* network:/// - 浏览可用的网络<br />
* burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录<br />
* smb:/// - 可用的 windows/samba 网络资源<br />
* x-nautilus-desktop:/// - 桌面项目和图标<br />
* file:/// - 本地文件<br />
* trash:/// - 本地回收站目录<br />
* ftp:// - FTP 文件夹<br />
* ssh:// - SSH 文件夹<br />
* fonts:/// - 字体文件夹，可将字体文件拖到此处以完成安装 * themes:/// - 系统主题文件夹</code></p>
<p>详细显示程序的运行信息<br />
<code>strace -f -F -o outfile <cmd></code></p>
<p>设置日期<br />
<code>date -s mm/dd/yy</code></p>
<p>设置时间<br />
<code>date -s HH:MM</code></p>
<p>将时间写入CMOS<br />
<code>hwclock --systohc</code></p>
<p>读取CMOS时间<br />
<code>hwclock --hctosys</code></p>
<p>从服务器上同步时间<br />
<code>ntpdate time.nist.gov<br />
ntpdate time.windows.com</code></p>
<p>从mysql中导出和导入数据<br />
<code>mysqldump 数据库名 > 文件名  #导出数据库mysqladmin create 数据库名 #建立数据库<br />
mysql 数据库名 < 文件名 #导入数据库</code></p>
<p>忘了mysql的root口令怎么办<br />
<code>/etc/init.d/mysql stop<br />
mysqld_safe --skip-grant-tables &#038;<br />
mysqladmin -u user password ''newpassword''''<br />
mysqladmin flush-privileges</code></p>
<p>修改mysql的root口令<br />
<code>mysqladmin -uroot -p password ''你的新密码''</code></p>
<p>下载网站文档<br />
<code>wget -r -p -np -k http://www.21cn.com<br />
· -r：在本机建立服务器端目录结构；<br />
· -p: 下载显示HTML文件的所有图片；<br />
· -np：只下载目标站点指定目录及其子目录的内容；<br />
· -k: 转换非相对链接为相对链接。</code></p>
<p>如何删除Totem电影播放机的播放历史记录<br />
<code>rm ~/.recently-used </code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axqd.net/2007/06/10/debian-common-commands/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is This Still The VPN?</title>
		<link>http://blog.axqd.net/2005/03/01/is-this-still-the-vpn/</link>
		<comments>http://blog.axqd.net/2005/03/01/is-this-still-the-vpn/#comments</comments>
		<pubDate>Tue, 01 Mar 2005 09:09:30 +0000</pubDate>
		<dc:creator>axqd</dc:creator>
				<category><![CDATA[网络]]></category>
		<category><![CDATA[自由世界]]></category>
		<category><![CDATA[pptpd]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://blog.axqd.net/?p=315</guid>
		<description><![CDATA[VPN Server:PPTPD For Linux VPN Client:PPTP Client For Linux Connect/Disconnect Command:pon / poff $Tunnel Requirement: MPPE support in kernel * How to Check:modprobe ppp-compress-18 &#38;&#38; echo Success * How to Install: a.Prepare the system for kernel package building: gcc bin86 libc6-dev bzip2 kernel-package kernel-patch-mppe b.Install, unpack, and clean the kernel source package make-kpkg clean c.Copy [...]]]></description>
			<content:encoded><![CDATA[<p><strong>VPN Server:</strong>PPTPD For Linux<br />
<strong>VPN Client:</strong>PPTP Client For Linux<br />
<strong>Connect/Disconnect Command:</strong>pon / poff $Tunnel<br />
<strong>Requirement:</strong><br />
MPPE support in kernel<br />
* How to Check:modprobe ppp-compress-18 &amp;&amp; echo Success<br />
* How to Install:<br />
a.Prepare the system for kernel package building:<br />
gcc bin86 libc6-dev bzip2 kernel-package kernel-patch-mppe<br />
b.Install, unpack, and clean the kernel source package<br />
make-kpkg clean<br />
c.Copy /boot/config* ./.config<br />
d.Build the kernel package:<br />
make-kpkg<br />
&#8211;added-patches mppe<br />
&#8211;append-to-version -mppe<br />
&#8211;config oldconfig<br />
[--initrd kernel-image](Not Woody Version)<br />
e. When you are prompted for the CONFIG_PPP_MPPE option, type m and press Enter.<br />
f. Don&#8217;t forget to reboot.<br />
<strong>ServerSide:</strong><br />
/etc/ppp/chap-secret for username &amp; password<br />
/etc/pptpd.conf for remoteip<br />
<strong>ClientSide:</strong><br />
/etc/ppp/chap-secret for host &amp; username &amp; password<br />
/etc/ppp/peers/ for tunnel<br />
<strong>For Ease:</strong><br />
pptpconfig(GUI):Helper to config the pptp client.<br />
<strong>Case Study:</strong><br />
202.*.*.200: VPN Server(VPN:192.168.0.1)(Eth0:172.*.17.1)<br />
202.*.*.233: VPN Client(VPN:172.*.0.35)(It&#8217;s mine:()<br />
<strong>What is interesting:</strong><br />
Get blocked without the IP assigned by the DHCP Server<br />
So How to make use of the 172.*.0.35?<br />
a.Transfer the DHCP information through the VPN Tunnel(Under Study)<br />
b.iptables &amp; &#8216;ip route&#8217;:<br />
iptables -t nat -A PREROUTING -i eth0 -d 172.*.17.1 -j DNAT &#8211;to<br />
172.*.0.35<br />
iptables -t nat -A POSTROUTING -s 172.*.0.35 -j SNAT &#8211;to<br />
172.*.17.1<br />
(Client)route add -net 172.*.0.0/16 dev eth*<br />
<strong>But I Wonder:</strong><br />
Is This Still The VPN?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axqd.net/2005/03/01/is-this-still-the-vpn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>196 Apache UTF-8 Encoded URL Problem</title>
		<link>http://blog.axqd.net/2004/11/10/196-apache-utf-8-encoded-url-problem/</link>
		<comments>http://blog.axqd.net/2004/11/10/196-apache-utf-8-encoded-url-problem/#comments</comments>
		<pubDate>Wed, 10 Nov 2004 10:00:18 +0000</pubDate>
		<dc:creator>axqd</dc:creator>
				<category><![CDATA[自由世界]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[netunion]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://blog.axqd.net/?p=371</guid>
		<description><![CDATA[[现象描述] 当你在IE的浏览器中输入URL地址的时候，IE会以UTF-8对其进行编码（除非在高级设置里面取消选项“总是以UTF-8发送URL”），由此，全面支持国际化语言。 但是对于一般配置的apache服务器，默认并不会支持UTF-8编码的URL，因此当你发送包含中文的URL（例如：http://***.***.***.***/音乐.***）时，会返回 404 Not Found 错误。 一般的解决方法是将发送URL请求中的中文采用URLEncode（）进行转换，形成apache能够支持的URL格式（例如：http://***.***.***.***/%D2%F4%C0%D6.***），但是这样解决的问题是，如果下载的是mp3的话，下载链接中包含乱码，可能会导致某些播放器不能正确显示歌名，进而导致不能正确使用迷你歌词。 综上所述，最好的解决方案是使apache支持直接包含中文的URL。 [解决方法] 对于此问题，apache官方并没有发布相应的解决方案，但是在网上却于很早以前已经解决了此问题，方法是使用由第三方发布的一个转换模块，籍由apache提供的第三方模块安装工具apxs安装即可。（ps：其实此模块代码极少，就是做个转换：P，主要是同apache的接口结合比较麻烦）具体步骤描述如下： 1、首先要确保apache服务器在编译的时候安装了apxs，并且configure的时候采用了选项 &#8211;enable-so(apache 2.0)或者 &#8211;enable-module=so(apache 1.0) （请务必注意版本，如果写错，提示不容易发现，最终会导致没法编入模块）。 采用以上编译选项会使apache支持第三方插件。 另外，如果apche服务器是使用的安装系统时候自带的（以RedHat 9.0为例），则没有apxs这个软件，请先行安装apache-devel软件包，并且此软件包的版本务必与你apache服务器的版本一致。 2、下载并安装mod_utf8软件包（目前版本1.3） 注意选对apache1.*和apache2.*，然后执行： apxs -a -i -c mod_utf8.c 3、重启apache服务器 当然实际操作过程中，可能会遇到各种各样的问题，因为这个软件包还并不是特别的完美，因此需要具备一定的排错能力，软件包由C语言书写，下载源代码，请点击这里。]]></description>
			<content:encoded><![CDATA[<p>[现象描述]</p>
<p>当你在IE的浏览器中输入URL地址的时候，IE会以UTF-8对其进行编码（除非在高级设置里面取消选项“总是以UTF-8发送URL”），由此，全面支持国际化语言。<br />
但是对于一般配置的apache服务器，默认并不会支持UTF-8编码的URL，因此当你发送包含中文的URL（例如：http://***.***.***.***/音乐.***）时，会返回 404 Not Found 错误。<br />
一般的解决方法是将发送URL请求中的中文采用URLEncode（）进行转换，形成apache能够支持的URL格式（例如：http://***.***.***.***/%D2%F4%C0%D6.***），但是这样解决的问题是，如果下载的是mp3的话，下载链接中包含乱码，可能会导致某些播放器不能正确显示歌名，进而导致不能正确使用迷你歌词。<br />
综上所述，最好的解决方案是使apache支持直接包含中文的URL。</p>
<p>[解决方法]</p>
<p>对于此问题，apache官方并没有发布相应的解决方案，但是在网上却于很早以前已经解决了此问题，方法是使用由第三方发布的一个转换模块，籍由apache提供的第三方模块安装工具apxs安装即可。（ps：其实此模块代码极少，就是做个转换：P，主要是同apache的接口结合比较麻烦）具体步骤描述如下：</p>
<p>1、首先要确保apache服务器在编译的时候安装了apxs，并且configure的时候采用了选项 &#8211;enable-so(apache 2.0)或者 &#8211;enable-module=so(apache 1.0) （请务必注意版本，如果写错，提示不容易发现，最终会导致没法编入模块）。<br />
采用以上编译选项会使apache支持第三方插件。<br />
另外，如果apche服务器是使用的安装系统时候自带的（以RedHat 9.0为例），则没有apxs这个软件，请先行安装apache-devel软件包，并且此软件包的版本务必与你apache服务器的版本一致。</p>
<p>2、下载并安装mod_utf8软件包（目前版本1.3）<br />
注意选对apache1.*和apache2.*，然后执行：<br />
apxs -a -i -c mod_utf8.c</p>
<p>3、重启apache服务器</p>
<p>当然实际操作过程中，可能会遇到各种各样的问题，因为这个软件包还并不是特别的完美，因此需要具备一定的排错能力，软件包由C语言书写，下载源代码，<a href="http://blog.axqd.net/wp-content/uploads/2008/06/mod_utf-8.c">请点击这里</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axqd.net/2004/11/10/196-apache-utf-8-encoded-url-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux命名</title>
		<link>http://blog.axqd.net/2004/11/09/linux-name/</link>
		<comments>http://blog.axqd.net/2004/11/09/linux-name/#comments</comments>
		<pubDate>Tue, 09 Nov 2004 09:55:56 +0000</pubDate>
		<dc:creator>axqd</dc:creator>
				<category><![CDATA[自由世界]]></category>
		<category><![CDATA[囧rz]]></category>

		<guid isPermaLink="false">http://blog.axqd.net/?p=369</guid>
		<description><![CDATA[今天startx，找了半天“rpm软件包管理器”，居然没有找到，本想就此作罢，但总觉得不爽，于是乎google，原来在kde下叫作kpackage，一查居然没有装，肯定不可能啊，于是再google，原来现在叫redhat-config-packages（这么长&#8230;），于是乎启动，当我看到他标题栏上字的时候，我彻底晕倒了，只见上书六个大字： “添加/删除程序”]]></description>
			<content:encoded><![CDATA[<p>今天startx，找了半天“rpm软件包管理器”，居然没有找到，本想就此作罢，但总觉得不爽，于是乎google，原来在kde下叫作kpackage，一查居然没有装，肯定不可能啊，于是再google，原来现在叫redhat-config-packages（这么长&#8230;），于是乎启动，当我看到他标题栏上字的时候，我彻底晕倒了，只见上书六个大字：</p>
<p>“添加/删除程序”</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axqd.net/2004/11/09/linux-name/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>考试前，搞定一个问题&#8212;configure参数</title>
		<link>http://blog.axqd.net/2004/11/06/configure-parameters/</link>
		<comments>http://blog.axqd.net/2004/11/06/configure-parameters/#comments</comments>
		<pubDate>Sat, 06 Nov 2004 09:38:51 +0000</pubDate>
		<dc:creator>axqd</dc:creator>
				<category><![CDATA[自由世界]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[netunion]]></category>
		<category><![CDATA[objdump]]></category>

		<guid isPermaLink="false">http://blog.axqd.net/?p=368</guid>
		<description><![CDATA[大家都知道，Linux下用源码包安装软件，一般会用到./configure命令，其后经常跟很多参数，但是安装完后： 1、忘掉参数； 2、本身就不是你装的； 这下若想查出参数就够你受的了：（ 虽然现在还没有想到什么解决的办法，不过今天在QQ上问了问小林子倒是有一个解决部分参数问题的办法，现总结如下： 参数限制 一般为查询是否加载某模块，本例为mod_so.c 方法 原来使用过文件倾印工具的会比较熟悉一点，(例如原来在borland的C++ Builder下的TDump) 实际上objdump就是Linux下的文件倾印工具 $objdump -T /path/httpd &#124; grep so &#8230; 080920a0 g DO .data 00000038 Base so_module &#8230; 可见，&#8211;with-module-so BTW 谁能告诉我196的apache是谁装的？我吗？你吗？实在记不得了，想问他/我几个问题!!!]]></description>
			<content:encoded><![CDATA[<p>大家都知道，Linux下用源码包安装软件，一般会用到./configure命令，其后经常跟很多参数，但是安装完后：<br />
1、忘掉参数；<br />
2、本身就不是你装的；<br />
这下若想查出参数就够你受的了：（<br />
虽然现在还没有想到什么解决的办法，不过今天在QQ上问了问小林子倒是有一个解决部分参数问题的办法，现总结如下：</p>
<p>参数限制</p>
<p>一般为查询是否加载某模块，本例为mod_so.c</p>
<p>方法</p>
<p>原来使用过文件倾印工具的会比较熟悉一点，(例如原来在borland的C++ Builder下的TDump)<br />
实际上objdump就是Linux下的文件倾印工具</p>
<p>$objdump -T /path/httpd | grep so<br />
&#8230;<br />
080920a0 g    DO .data  00000038  Base        so_module<br />
&#8230;</p>
<p>可见，&#8211;with-module-so</p>
<p>BTW</p>
<p>谁能告诉我196的apache是谁装的？我吗？你吗？实在记不得了，想问他/我几个问题!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axqd.net/2004/11/06/configure-parameters/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Linux安全清单</title>
		<link>http://blog.axqd.net/2004/10/28/check-list-for-linux/</link>
		<comments>http://blog.axqd.net/2004/10/28/check-list-for-linux/#comments</comments>
		<pubDate>Thu, 28 Oct 2004 06:14:42 +0000</pubDate>
		<dc:creator>axqd</dc:creator>
				<category><![CDATA[自由世界]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.axqd.net/?p=356</guid>
		<description><![CDATA[1.物理安全 确保每次本机登录服务器后的SignOut过程；设置BIOS密码且修改引导次序禁止从软盘启动系统； 2．使用安全密码 包括对密码长度和密码复杂度的相应要求； 3．限制不必要的用户数量 注意经常检查系统的账号，删除已经不再使用的账号，并注意检查相应账号的权限设置； 4. 口令文件 使用chattr命令给下面的文件加上不可更改属性，防止非授权用户获得权限： # chattr +i /etc/passwd # chattr +i /etc/shadow # chattr +i /etc/group # chattr +i /etc/gshadow 5. 禁止Ctrl+Alt+Delete重新启动机器命令 修改/etc/inittab文件，将&#8221;ca::ctrlaltdel:/sbin/shutdown -t3 -r now&#8221;一行注释掉，然后重新设置/etc/rc.d/init.d/目录下所有文件的许可权限： # chmod -R 700 /etc/rc.d/init.d/* 6. 限制su命令 编辑/etc/pam.d/su文件，增加如下两行： auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=isd 这时，仅isd组的用户可以用su作为root； 7. 删减登录信息 编辑/etc/rc.d/rc.local将输出系统信息的如下行通通注释掉： # This will overwrite [...]]]></description>
			<content:encoded><![CDATA[<p>1.物理安全</p>
<p>确保每次本机登录服务器后的SignOut过程；设置BIOS密码且修改引导次序禁止从软盘启动系统；</p>
<p>2．使用安全密码</p>
<p>包括对密码长度和密码复杂度的相应要求；</p>
<p>3．限制不必要的用户数量</p>
<p>注意经常检查系统的账号，删除已经不再使用的账号，并注意检查相应账号的权限设置；</p>
<p>4. 口令文件</p>
<p>使用chattr命令给下面的文件加上不可更改属性，防止非授权用户获得权限：</p>
<p><code># chattr +i /etc/passwd<br />
# chattr +i /etc/shadow<br />
# chattr +i /etc/group<br />
# chattr +i /etc/gshadow</code></p>
<p>5. 禁止Ctrl+Alt+Delete重新启动机器命令</p>
<p>修改/etc/inittab文件，将&#8221;ca::ctrlaltdel:/sbin/shutdown -t3 -r now&#8221;一行注释掉，然后重新设置/etc/rc.d/init.d/目录下所有文件的许可权限：</p>
<p><code># chmod -R 700 /etc/rc.d/init.d/*</code></p>
<p>6. 限制su命令</p>
<p>编辑/etc/pam.d/su文件，增加如下两行：</p>
<p>auth sufficient /lib/security/pam_rootok.so debug<br />
auth required /lib/security/pam_wheel.so group=isd</p>
<p>这时，仅isd组的用户可以用su作为root；</p>
<p>7. 删减登录信息</p>
<p>编辑/etc/rc.d/rc.local将输出系统信息的如下行通通注释掉：</p>
<p><code># This will overwrite /etc/issue at every boot. So， make any changes you<br />
# want to make to /etc/issue here or you will lose them when you reboot<br />
# echo "" ＞ /etc/issue<br />
# echo "$R" ＞＞ /etc/issue<br />
# echo "Kernel $(uname -r) on $a $(uname -m)" ＞＞ /etc/issue<br />
# cp -f /etc/issue /etc/issue.net<br />
# echo ＞＞ /etc/issue</code></p>
<p>然后，进行如下操作： </p>
<p><code># rm -f /etc/issue<br />
# rm -f /etc/issue.net<br />
# touch /etc/issue<br />
# touch /etc/issue.net </code></p>
<p>8．限制NFS访问　</p>
<p>应该确保你的/etc/exports具有最严格的访问权限设置，也就是意味着不要使用任何通配符、不允许root写权限并且只能安装为只读文件系统，编辑文件/etc/exports并加入如下两行。</p>
<p>/dir/to/export host1.mydomain.com(ro，root_squash)<br />
/dir/to/export host2.mydomain.com(ro，root_squash)</p>
<p>/dir/to/export 是你想输出的目录，host.mydomain.com是登录这个目录的机器名，ro意味着mount成只读系统，root_squash禁止root写入该目录；</p>
<p>为了使改动生效，运行如下命令：</p>
<p><code># /usr/sbin/exportfs –a</code></p>
<p>9．Inetd设置  </p>
<p>首先要确认/etc/inetd.conf的所有者是root，且文件权限设置为600。设置完成后，可以使用&#8221;stat&#8221;命令进行检查；</p>
<p><code># chmod 600 /etc/inetd.conf</code> </p>
<p>然后，编辑/etc/inetd.conf禁止以下服务； </p>
<p><code>ftp telnet shell login exec talk ntalk imap pop-2 pop-3 finger auth</code></p>
<p>如果你安装了ssh/scp，也可以禁止掉Telnet/FTP；</p>
<p>为了使改变生效，运行如下命令：</p>
<p><code>#killall -HUP inetd</code></p>
<p>请使用TCP_WRAPPERS增强系统安全性，可以修改/etc/hosts.deny和/etc/hosts.allow来增加访问限制；</p>
<p>例如，将/etc/hosts.deny设为&#8221;ALL: ALL&#8221;可以默认拒绝所有访问；然后在/etc/hosts.allow文件中添加允许的访问；例如，&#8221;sshd: 192.168.1.10/255.255.255.0 gate.openarch.com&#8221;表示允许IP地址192.168.1.10和主机名gate.openarch.com允许通过SSH连接；</p>
<p>配置完成后，可以用tcpdchk检查：</p>
<p><code># tcpdchk</code><br />
（tcpchk是TCP_Wrapper配置检查工具，它检查你的tcp wrapper配置并报告所有发现的潜在/存在的问题）；</p>
<p>10．登录终端设置   </p>
<p>/etc/securetty文件指定了允许root登录的tty设备，由/bin/login程序读取，<br />
其格式是一个被允许的名字列表，你可以编辑/etc/securetty且注释掉如下的行；</p>
<p><code># tty1<br />
# tty2<br />
# tty3<br />
# tty4<br />
# tty5<br />
# tty6</code></p>
<p>这时，root仅可在tty1终端登录；</p>
<p>11．避免显示系统和版本信息</p>
<p>可以如下改变/etc/inetd.conf文件：</p>
<p><code>telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h</code></p>
<p>加-h表示telnet不显示系统信息，而仅仅显示&#8221;login:&#8221;；</p>
<p>12．阻止ping</p>
<p>在/etc/rc.d/rc.local文件中增加如下一行：</p>
<p><code>echo 1 ＞/proc/sys/net/ipv4/<br />
icmp_echo_ignore_all</code></p>
<p>13．防止IP欺骗</p>
<p>编辑host.conf文件并增加如下几行：</p>
<p><code>order bind，hosts<br />
multi off<br />
nospoof on</code></p>
<p>14．防止DoS攻击</p>
<p>对系统所有的用户设置资源限制可以防止DoS类型攻击，如最大进程数和内存使用数量等；例如，可以在/etc/security/limits.conf中添加如下几行：</p>
<p><code>* hard core 0<br />
* hard rss 5000<br />
* hard nproc 20</code></p>
<p>然后必须编辑/etc/pam.d/login文件检查下面一行是否存在。</p>
<p><code>session required /lib/security/pam_limits.so</code></p>
<p>上面的命令禁止调试文件，限制进程数为50并且限制内存使用为5MB。</p>
<p>15．安装补丁</p>
<p>经常访问相应系统网站和一些安全站点，下载最新的漏洞补丁；</p>
<p>具体网址：</p>
<p>REDHAT<br />
ftp://updates.redhat.com/</p>
<p>DEBIAN</p>
<p>http://www.debian.org/security/</p>
<p>或者使用apt-get update/upgrade 进行相应的升级工作；</p>
<p>source.list如下：<br />
deb http://security.debian.org/ slink updates<br />
或 deb http://security.debian.org/ potato/updates main contrib non-free </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axqd.net/2004/10/28/check-list-for-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>困扰多时的问题搞定了&#8212;proftpd相关</title>
		<link>http://blog.axqd.net/2004/09/30/trouble-shooting/</link>
		<comments>http://blog.axqd.net/2004/09/30/trouble-shooting/#comments</comments>
		<pubDate>Thu, 30 Sep 2004 10:57:37 +0000</pubDate>
		<dc:creator>axqd</dc:creator>
				<category><![CDATA[自由世界]]></category>
		<category><![CDATA[proftpd，林卓毅]]></category>

		<guid isPermaLink="false">http://blog.axqd.net/?p=350</guid>
		<description><![CDATA[在国内N大论坛上发贴问，都没有回音，没想到在国外的论坛上有明显的答案，哎，汗一个&#8230; 问题描述： Proftpd在chroot()以后，不能再访问到外部的系统passwd,group文件，导致如果使用用户组，那么可以进入（因为进入前还没有chroot，系统还能够找到passwd,group文件），但是不能列出目录（因为此时已经chroot，不能找到passwd,group文件了）。 如果使用AuthUserFile,AuthGroupFile 则也必须保证此二文件在chroot以内，这点有时不可能（因为DefaultRoot ~，每个人chroot的不一样）。 问题解决： PersistentPasswd on 自己汗一个&#8230;累啊 ps： 秉承小林子遗风，二次修改：) 那些&#8230;说的应该是在chroot以前就打开此二文件的handle，然后在关闭proftpd主进程之前一直不关闭&#8230;]]></description>
			<content:encoded><![CDATA[<p>在国内N大论坛上发贴问，都没有回音，没想到在国外的论坛上有明显的答案，哎，汗一个&#8230;</p>
<p>问题描述：<br />
Proftpd在chroot()以后，不能再访问到外部的系统passwd,group文件，导致如果使用用户组，那么可以进入（因为进入前还没有chroot，系统还能够找到passwd,group文件），但是不能列出目录（因为此时已经chroot，不能找到passwd,group文件了）。<br />
如果使用AuthUserFile,AuthGroupFile 则也必须保证此二文件在chroot以内，这点有时不可能（因为DefaultRoot ~，每个人chroot的不一样）。</p>
<p>问题解决：<br />
PersistentPasswd on</p>
<p>自己汗一个&#8230;累啊</p>
<p>ps：<br />
秉承小林子遗风，二次修改：)<br />
那些&#8230;说的应该是在chroot以前就打开此二文件的handle，然后在关闭proftpd主进程之前一直不关闭&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.axqd.net/2004/09/30/trouble-shooting/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
