Linux应用心得(二)

写这篇文章是为了方便自己,也同时为了方便他人。

目前的开源软件盛行,很多的README文档都是以英文的形式出现,很多懒人不愿意去读此类的文章,所以遇到问题也不会知道怎么去解决。

在这之前,《linux宝库》的站长陈绪先生的《linux一句话》已经概括得很经典,而我追求的是linux中的FAQ形式,只要你有心,没有解决不了的问题。

如果你对太多的 A、Q 不知所措,可以Ctrl+F查找你所需要的问题。

Q00053:
怎么使用Berkeley DB来cache内存呢?
A00053:

sudo mkdir /rfs
sudo mount -t ramfs ramfs /rfs
sudo chmod a+w,o+t /rfs
即可使用内存cache,查看用了多少内存就看/rfs目录的大小就是你使用的内存大小,该内存大小可以超过物理内存。

Q00054:
在安装Oracle 10g XE on Debian/Ubuntu中,在 apt 安装 oracle-xe-client 时,有可能会出现如下的错误,提示 Swap 分区没有达到要求的大小,安装无法继续。那么怎么增加系统Swap分区呢?

This system does not meet the minimum requirements for swap space. Based on the amount of physical memory available on the system, Oracle Client 10g Express Edition requires 1024 MB of swap space. This system has 951 MB of swap space. Configure more swap space on the system and retry the installation.
A00054:
1,首先用命令free查看系统内 Swap 分区大小。
free -m
2,在/目录下创建一个1G的swapfile文件。
sudo dd if=/dev/zero of=swapfile bs=1024 count=1048576
3,把生成的swapfile文件转换成 Swap 文件
sudo /sbin/mkswap swapfile
4,激活 Swap 文件。
sudo /sbin/swapon swapfile
5,再次查看 free -m 的结果,是不是已经添加上了?
注意:
1,如果需要卸载这个 swap 文件,可以进入建立的 swap 文件目录。执行下列命令。
sudo /sbin/swapoff swapfile
2,如果需要一直保持这个 swap ,可以把它写入 /etc/fstab 文件。
swapfilepath swap swap defaults 0 0

Q00055:
在PHP5.2的编译的过程中,如果遇到

checking for MySQL support… yes
checking for specified location of the MySQL UNIX socket… no
checking for MySQL UNIX socket location… no
configure: error: Cannot find libmysqlclient_r under /usr/local/mysql.
Note that the MySQL client library is not bundled anymore!
A00055:
如果在编译APACHE的时候,使用–with-mpm模块,请在编译MYSQL的时候加上 –enable-thread-safe-client.
这是PHP5.2的一个改进,在PHP5.2.0之前的版本都不需要MYSQL启用安全线程。

Q00056:
我在执行 svn co http://xxx.xxx.net/repo/xxx/trunk 的时候,出现了svn: Unrecognized URL scheme的错误,该怎么办?
A00056:
首先,大家可以在SVN 官方的FAQ的翻译中找到如下问题说明:
subversion使用外挂系统来存取档案库。
目前有三个这样的外挂:
1,ra_local可以存取本地档案库
2,ra_dav可以透过webdav存取档案库
3,ra_svn可以透过svn server服务器来进行本地或远端的存取
当你想要在subversion进行一个作业时,用户端会试著依urlschema动态载入一个外挂.file://url会试著载入ra_local,而http://url会试著输入ra_dav,以此类推,你看到的这个错误,表示动态连结器/载入器无法找到要载入的外挂。这个发生的原因,通常是因为你以共享程式库的方式编译subversion,但是还没有执行make install就要执行它。另一个可能就是你执行了make install,但是程式库把它存在动态连结器/载入器不认得的地方。在linux下,你可以把那个库目录加进/etc/ld.so.conf,然后执行ldconfig,让连结器/载入器可以找到该库。如果你不想这么作,或是你没有root存取权限,你可以在LD_LIBRARY_PATH环境变数指定该库目录。
其次,我们可以执行一下SVN,看看ra_dav 是否加载:

svn –version
接着,我们发现那个模块并没有加载,经过查看configure 的过程,我们发现我们需要安装一个NEON的插件:
NEON 下载地址: http://www.webdav.org/neon/
安装neon后,重新编译subversion-1.x.x即可。

Q00057:
怎么在linux下打开7zip压缩的文件?
A00057:

sudo yum install p7zip p7zip-plugins -y
安装完成后,运行命令7z x xxx.7z即可。
我看与unrar命令大同小异。

Q00058:
用NetworkManager进行无线连接的时候,发现死活也连接不上无线网络,连接方式、用户名、密码都很正常,但是为什么连接不上呢?
A00058:
右键点击NetworkManager,编辑连接,在出现的对话框里选择“无线”,删除里面的所有无线连接,然后重新输入正确的无线网络用户名和密码,就可以连接上了。
需要注意的是,有时候需要输出域,域可以加在用户名前,用“”号分开,如:

yahoo-bjcnangel

Q00059:
怎么在bash里面得到一串字符的md5值?
A00059:
有人很可能想到:

echo “string” | md5sum
由于echo本身是带换行的,所以这不是这个string字串真正的md5值,这个结果是错误的。
真正的答案应该如下:
echo -n “string” | md5sum

Q00060:
使用cpan来安装相对应的软件时,出现安装不了,提示说:

Your urllist is empty! The urllist can be edited. E.g. with ‘o conf urllist
该如何解决?
A00060:
首先解决urllist为空的问题:
$sudo cpan
cpan>o conf urllist unshift http://www.perl.com/CPAN/
Please use ‘o conf commit’ to make the config permanent!
cpan>o conf commit
commit: wrote ‘/home/cnangel/.cpan/CPAN/MyConfig.pm’
然后安装
cpan>i /FCGI/
cpan>install FCGI

Q00061:
一进程确定占用某一tcp端口,如何杀掉该进程?另外,两应用程序service1和service2,service2依赖service1,即得等service1启动后才能启动,若service1应用占用一确定的tcp端口,如何实现该操作呢?
A00061:

kill -9 $(netstat -tlnp 2>/dev/null|grep 8080|awk ‘{print $7}’|awk -F ‘/’ ‘{print $1}’)
其中8080为端口号。注意:
* 得写出完整端口号,否则易错杀其他进程。
* 7是进程信息所处的列号,不同Linux可能不同,需要调整。
对于第二个问题,可以使用shell循环判断端口即可,如下:
echo “service1 start…”
./service1.sh

netstat -tlnp|grep 8080
until [ "$?" -eq "0" ]
do
echo “waiting service1 to startup…”
sleep 1
netstat -tlnp|grep 8080
done
echo “service1 started.”
./service2.sh
echo “service2 started.”
来源于guyongpeng。

Q00062:
怎么查看内存的增长情况?
A00062:
简单的可以使用free、vmstat等来查看,监控一段时间可以使用:

watch -n 1 -d free

Q00063:
使用sar命令时出现:

Cannot open /var/log/sa/sa10: No such file or directory
无法查看机器以往的状况,该怎么做?
A00063:
Installing sar is not enough, you need to set it up too.

Data needs to be collected and (optional) daily reports have to be made. The first part is needed to use the sar command and to be able to look at older data.

Here are a few examples (should go in the root or admin crontab):

# 8am-7pm activity reports every 10 minutes during weekdays
0 8-18 * * 1-5 /usr/lib/sa/sa1 600 6 &

# 7pm-8am activity reports every hour during weekdays
0 19-7 * * 1-5 /usr/lib/sa/sa1 &

# Activity reports every hour on Saturday and Sunday
0 * * * 0,6 /usr/lib/sa/sa1 &

# Daily summary prepared at 19:05
5 19 * * * /usr/lib/sa/sa2 -A &

See man sar / man sa1 and man sa2 for details.
thanks druuna.
另外,可能是crond服务没有启动,导致sa命令进程一直不在其中,直接启动crond服务是最好的解决办法。
service crond start

Q00064:
如何清掉last命令显示的东西?
A00064:
使用fwtmp命令将/var/adm/wtmp转为文件,编辑这个文件将以前的删掉,在使用fwtmp将修改后的文件转换为wtmp。
如果是清掉所有的显示,对/var/adm/wtmp文件置空就可以了。

Q00065:
我忘记了nm-applet的密钥环密码了,有什么办法找出或者清空么?
A00065:

$cd ~/.gnome2/keyrings
$rm -rf ./*
即可。

Q00066:
写入文件时,大小超过4G就崩溃了,机器32-bits,已加编译选项包括

-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D__GLIBC_HAVE_LONG_LONG,Google无果,求高手帮忙解答一下?
A00066:
分析原因,有可能是:程序中链接了别的静态库,而这个静态库生成时没有加支持大文件的编译选项;可以尝试把fopen函数改成fopen64函数打开文件后,然后写入,曾经尝试写过8G的文件都没有出错;另外,检查变量类型是否正确,如果不正确也可能导致莫名其妙的错误。

Q00067:
ssh登录服务器时出现:

ssh_exchange_identification: Connection closed by remote host
该怎么办解决这个问题呢?
A00067:
主要是/etc/hosts.allow和/etc/hosts.deny的问题。用ifconfig和tracerount找出对应的ip出口范围,然后直接编辑/etc/hosts.allow(当然不建议这么做,一般用iptables等工具),添加相对应的ip范围即可,例如:
ALL : 12.0.29.24/255.255.255.224 : allow
值得注意的是,要添加到deny 之前。
最后别忘记重启sshd哟!service sshd restart

Q00068:
在Linux系统下,怎么用命令查看CPU、内存信息,怎么查看CPU的温度?
A00068:
值得注意的是,系统硬件的一些缓存信息保存在/proc目录下,比如查看cpu信息:

cat /proc/cpuinfo查看内存(包括swap)状况:
cat /proc/meminfo查看cpu温度状况
cat /proc/acpi/thermal_zone/*/temperature
另外,还有一个小工具lm-sensors可以查看Linux系统硬件信息。

Q00069:
有人要是在Linux下使用amarok播放不了mp3,到底差些什么播放不了呢?
A00069:
对比一下本人的系统(fedora 9 Gnome):

[cnangel@localhost docroot]$rpm -qa|grep amarok
amarok-extras-nonfree-1.4.8-1.lvn9.i386
amarok-1.4.10-1.fc9.i386
amarok-visualisation-1.4.10-1.fc9.i386
[cnangel@localhost docroot]$rpm -qa|grep xine
xine-plugin-1.0.1-4.fc9.i386
xine-lib-1.1.15-1.fc9.i386
xine-lib-extras-1.1.15-1.fc9.i386
totem-xine-2.23.2-8.fc9.i386
xinetd-2.3.14-20.fc9.i386
xine-lib-pulseaudio-1.1.15-1.fc9.i386
xine-lib-devel-1.1.15-1.fc9.i386
xine-lib-extras-nonfree-1.1.15-1.lvn9.i386
[cnangel@localhost docroot]$rpm -qa|grep libdvd
libdvdnav-devel-4.1.3-1.fc9.i386
libdvdcss-1.2.9-5.lvn9.i386
libdvdread-4.1.3-1.fc9.i386
libdvdread-devel-4.1.3-1.fc9.i386
libdvdnav-4.1.3-1.fc9.i386
其实libdvd系列与mp3是没有关系的,这个主要是为了amarok或者totem-xine播放dvd影碟而安装,其实针对amarok有两种引擎可以用helix engine和 xine engine,helix引擎对应的是realplay引擎,这个可以安装realplay的解码就可以了,而针对xine,找到和我一样的包就可以了。
对于老版本(fedora8及以下)、其他播放器(如:Rhythmbox、Audacious等)、以及KDE环境下,这里来自fedorafaq的一个参考:
# For Rhythmbox or Totem:
yum install gstreamer-plugins-ugly

# For Audacious (which is like XMMS or Winamp):
yum install audacious-plugins-nonfree-mp3

#For KDE MP3 players, like Noatun or Juk:
yum install kdemultimedia-extras-nonfree

Q00070:
我已经安装了flash-plugin和jre,为什么flash和java小控件在firefox下仍然显示不了呢?

[cnangel@Cnangel flash-plugin]$rpm -qa|grep flash-plugin
flash-plugin-10.0.12.36-release.i386
[cnangel@Cnangel flash-plugin]$rpm -qa|grep jre
jre-1.6.0_10-fcs.i586
A00070:
flash-plugin安装的路径是:
[cnangel@Cnangel flash-plugin]$ll /usr/lib/flash-plugin/
总计 9848
-rwxr–r– 1 root root 3116 10-05 11:13 setup*
-rw-r–r– 1 root root 34516 10-05 11:13 LICENSE
-rwxr–r– 1 root root 1367 10-05 11:13 homecleanup*
-rw-r–r– 1 root root 3184 10-08 03:38 README
-rwxr-xr-x 1 root root 10017140 10-09 04:54 libflashplayer.so*
其实setup是安装文件,可以使用sh进行调试安装,发现:
sh -x ./setup
程序运行结果,把其动态连接库做了一个快捷方式,放在/usr/lib/mozilla/plugins目录下面了,我们只需要将其连接再软连接过来即可:
ln -sf /usr/lib/flash-plugin/libflashplayer.so /usr/lib/firefox-3.0.4/plugins/libflashplayer.so
同理,在sun公司的主页下载了jre,安装jre的二进制包后,找到/usr/java/jre-xxxxx目录,在plugins目录中找到相关平台的动态连接库,做一个快捷方式,放到/usr/lib/firefox-3.0.4/plugins/即可。

Q00071:
第71问仍然谈谈firefox的问题,某些时候,打开带有java applet等小控件的页面时,经常出现浏览器莫名其妙的退出,如果在linux下以命令行输出,那么显示:

/usr/lib/firefox-3.0.5/run-mozilla.sh: line 131: 4223 段错误 “$prog” ${1+”$@”}
该怎么解决这个问题呢?
A00071:
在Ubuntu论坛上查到主要是因为SCIM输入法与Firefox等软件冲突的缘故,解决办法也很简单,在.bash_profile上加上一句或者在firefox运行的bash脚本(比如:/usr/bin/firefox)里面加入一句:
export GTK_IM_MODULE=xim
注意的是,这句加在/usr/bin/firefox文件中时,需要加在bash的前面申明。

Q00072:
从硬盘安装Fedora10时,将镜像里面的vmlinuz和initrd.img文件取出,然后按照硬盘安装方式,用grub启动:

kernel root (hdX,Y)/vmlinux
initrd root (hdX,Y)/initrd.img
boot
确发现到了load硬盘镜像的时候,怎么也找不到iso里面的images/install.img文件,该怎么办?
A00072:
这个根据笔者经验,可能是厂商的硬件与操作系统的兼容性问题,解决办法是将Fedora-10-i386-DVD.iso里面的images目录也同时提取出来,注意这些文件都需要安放到fat32分区即可。

Q00073:
在linux下,rpm包安装不了,一直halt中,怎么回事呢?
A00073:
其原因有很多,先总结一下:
可以使用

rpm -vv -ivh来查看详细的情况,一般是由于扫描所有分区时,因为一个分区数据有点问题导致的,可以使用参数–ignoresize来解决,具体命令如下所示:rpm -vv -ivh –ignoresize
另外,可以重启一下机器解决或者umount一下。

Q00073:
请问.iso.gz的文件如何解?
A00073:
先file一下看看文件类,然后确定用tar还是gzip或gunzip解压成.iso文件,然后用mount加参数-o loop挂载。

Q00074:
firefox3的插件安装不上,提示不支持该版本或者没有安全的验证升级,该怎么办呢?
A00074:
一般firefox的插件安装不上,可以修改其插件的配置信息达到兼容为目的。
一般firefox的插件文件的后缀是.xpi格式,其实,他是一个zip的压缩格式,可以使用zip命令或者winrar解压。解压出来的文件一般有install.rdf这个文件,这个就是安装的一个配置文件,下面以FirefoxExtensionAddOn2.06.xpi为例:
install.rdf内容中

<em:minVersion>1.7</em:minVersion>
<em:maxVersion>3.5+</em:maxVersion>
标记着至少什么版本的firefox才能使用,有一个最小支持的版本和最大支持的版本;

<em:homepageURL>http://twiki.org/cgi-bin/view/Plugins/FirefoxExtensionAddOn</em:homepageURL>
<em:updateURL>https://twiki.org/p/pub/Plugins/FirefoxExtensionAddOn/update.rdf</em:updateURL>
标记了使用安全验证升级模式的网络地址,一般出现问题是因为上面的地址没有使用https的协议方式,改成https协议方式即可,聪明的读者,您可以试试您安装不上的firefox插件吧。

Q00075:
fedora10发布之后,其开启3D效果后,一直闪屏,真不让人满意,怎么解决这个问题呢?
A00075:
编辑/etc/grub.conf文件:
在kernel命令启动/vmlinuz-x.x.x最后,加上

rhgb quiet vga=792或rhgb quiet vga=0×318即可,792和0×318分别为十进制和十六进制,其表示屏幕分辨率大小为1024×768,其他VESA模式下内核分辨率与色彩的对应关系如下:
| 640×480 800×600 1024×768 1280×1024
—-+————————————-
256 | 0×301 0×303 0×305 0×307
32k | 0×310 0×313 0×316 0×319
64k | 0×311 0×314 0×317 0x31A
16M | 0×312 0×315 0×318 0x31B

Q00076:
在nautilus中如何解决ftp目录中文乱码的问题?
A00076:
解决办法如下:

curlftpfs ftp@host:/ /path -omodules=iconv,from_code=gbk,to_code=utf8
感谢grassofhust提供解决办法。

Q00077:
如果使用vim命令像shell方式那样直接编辑文件?
A00077:
用-c选项,比如替换文件中的所有hello字串为world字串:

vim -c “%s/hello/world/g” file
插入hello,world字串
vim -c “normal ihello,world” file

Q00078:
自动化编译中,make dist的时候,提示错误输出:

name is too long (max 99); not dumped
该怎么办呢?
A00078:
在configure.in或者configure.ac当中加入AM_INIT_AUTOMAKE([tar-ustar]),这样在tar命令的时候,会加入参数-ustar,防止打包的名称过长,另外还要加上AM_PROG_CC_C_O来标识一下。

Q00079:
如果让svn每次输入密码呢?或者想让取消的时候就取消掉呢?
A00079:
在用户的HOME目录下,有一个叫.subversion目录,这个目录下记录着一些svn的配置,当然用户可以修改这些配置,达到可以让用户svn up的时候,每次输入连接svn服务器的用户名和密码,但是这里cnangel提供一个好的方法,就是将这个目录权限改成root权限,即可达到要求。当然用户本身不是root。

Q00080:
用libtool编译程序时,调用使用libanet.so的时候,出现警告

libtool: link: warning: /usr/lib64/libanet.la seems to be moved
怎么去除这个警告呢?
A00080:
出这个情况的原因是,libanet.la这个文件已经被更新了,指定路径的地方已经变了,只要手动改回来即可,如库路径指定为libdir=’/usr/local/lib64′
来源:http://archives.devshed.com/forums/development-94/libtool-link-warning-libexpat-la-seems-to-be-moved-1957466.html

FYI, those .la files are textfiles that describe where a library expects to be installed, what other libs it depends on etc. The warning means that the library was moved to a different place than the one it expected to be, possibly causing it to not function or not function properly.

Lastly, you can install Subversion from source without any root privileges at
all, the only thing you need is to pass e.g. ‘ ~/svn-install’ to
configure and adapt a few things like PATH and LD_LIBRARY_PATH. This helps
keeping this install from affecting other stuff on the system. In fact that
is a feature of autotools, so every program that comes with a configure
script should be installable like that.

感谢刘强

Q00081:
mplayer,使用一直都很不正常,每次打开都会弹出

Cannot prepare subtitle font
的错误提示,播放任何文件就不停地弹出对话框,并且占用很高的CPU资源,该如何解决?
A00081:
google了一下,在一篇文章中找到如下:
the default setting on ‘fontconfig’ of mplayer.conf in /etc/mplayer/ is yes. however the documentation tells us :
‘If MPlayer was compiled with fontconfig support, the above methods won’t work, instead -font expects a fontconfig font name and defaults to the sans-serif font
似乎这个问题和fontconfig有关系
vim /etc/mplayer/mplayer.conf
fontconfig = yes —>no,可以暂时避免这个问题导致的cpu资源过高问题。

Q00082:
FreeBSD如果进入桌面?
A00082:
首先确认安装上了gnome或者kde,如果没有,请用安装光盘mount后,sysinstall命令安装,然后:

echo “exec startkde” > ~/.xinitrc

echo “exec gnome-session” > ~/.xinitrc
再执行 startx 就进入kde 或 gnome界面了。

Q00083:
如何在fedora10下实现用户自动登录?
A00083:
在/etc/gdm/custom.conf文件中加入

[daemon]
TimedLoginEnable=true
TimedLogin=X
TimedLoginDelay=0
注:X为自动登录用户,保存后重启。

Q00084:
使用tail命令,发现

tail +256 filename不好使了,提示错误如下:
tail: cannot open `+1′ for reading: No such file or directory
如何解决?
A00084:
以前老的POSIX标准支持直接接入参数,新的标准不支持,解决办法如下:
tail -n +256 filename
或者
export _POSIX2_VERSION=199209
适应新的标准或者修改环境变量为老的POSIX标准即可。

Q00085:
服务器IP:172.0.0.1,主机名:p470-1, 通过NFS共享/disk1目录
在客户端使用

mount -t nfs p470-1:/disk1 /disk1
时出现”mount: mount to NFS server ‘p470-1′ failed: RPC Error: Program not registered.”错误提示,如何解决呢?
A00085:
出错原因:p470-1由于网络原因nfs服务被中断,重新开启p470-1的nfs服务
service nfs restart或/etc/rc.d/init.d/nfs restart
然后在客户端重新mount disk1即可。感谢stevenz

Q00086:
nautilus开机之后,占用CPU一直100%,要过几十分钟后才会降下来,kill -9也不好使,该如何解决?
A00086:
刚开始笔者一直认识是mount的问题,后来发现不是。
通过

ps -ef|grep nautilus
lsof -p pid比较正常的nautilus和占用CPU比较高的得到差异,发现/home/cnangel/.gvfs有一些异常,笔者试着删除这个目录,但是由于mount的原因,删除不了,于是umount 这个目录后,删除.gvfs目录,然后重启,一切正常。

Q00087:
ssh登录时,出现如下错误:

ssh too many authentication failures for root该如何解决呢?
A00087:
一般有些发行版本是不允许直接使用root用户使用密码进行ssh登录的,如果需要,则
1,检查客户端验证密码的方式是password,一般windows下登录ssh的客户端有putty,Fecure SSH, SRT等,linux下有urxvt、putty、gnome-terminal等。
2,检查服务端ssh的配置是否允许使用密码进行连接,具体操作如下:

Go to the service console on the physical server & login as root
vi /etc/ssh/sshd_config
Change the line that says PermitRootLogin from “no” to “yes”

Q00088:
在linux命令环境下,如何进行转义?
A00088:
进行web应用开发和底层开发的人都知道,在一个字符串中,一般双引号需要进行转义,而转义一般使用加反斜杠(“”)来进行。但是有些特殊的例子:
1,bash和expect混合编程中的引号转义,一般使用”‘来进行;
2,bash和awk等混合编程中的其他$符号的转义,一般使用重复其符号($$)进行转义;
3,bash和perl混合编程中,引号的多次转义,可以使用加$”来对反引号的转义进行逃逸,从而达到转移。

Q00089:
Apache开发中,信号量删除方法?
A00089:
在apache等开发中,经常遇到:

No space left on device: Couldn’t create accept lock or Cannot create SSLMutex,以致无法启
动程序。下面脚本可以删除用户的信号量:
ipcs -s | grep | perl -e ‘while () { @a=split(/s+/);
print `ipcrm sem $a[1]`}’
原文见:http://carlosrivero.com/fix-apache—no-space-left-on-device-couldnt-create-accept-lock

Q00090:
如何清空其中一条iptables规则,用iptables -I FORWARD -s XXX.XXX.XXX.XXX -j DROP多条规则后,如何只清空其中一条,我用IPCOP,用iptables -F后全部规则都会清空,只有重启路由器后才能上网,如何只清除其中一条,而不必全部清空呢?
A00090:
我们了解iptables规则中:

-A 添加一条规则
-D 删除一条规则
-I 插入一条规则
-F 清空一个链
我们可以用两种办法中的任一种删除规则。
1,首先,因为知道这是INPUT链中唯一的规则,我们用编号删除:
# iptables -D INPUT 1
删除INPUT链中的编号为1的规则,使用–line-numbers参数,列出的表中开头一个是NUM。
2, -A 命令的映射,不过用-D替换-A。当你的链中规则很复杂,而你不想计算它们的编号的时候这就十分有用了。这样的话,我们可以使用:
# iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
-D的语法必须和-A(或者-I或者-R)一样精确。如果链中有多个相同的规则,只会删除第一个。

Q00090:
如何解决

rpmdb: PANIC: fatal region error detected; run recovery错误?
A00090:
rpm后台数据库丢失,或数据包冲突。解决方法,运行:
rm -f /var/lib/rpm/__db*
db_verify /var/lib/rpm/Packages
rpm –rebuilddb问题解决。

Q00091:
Linux系统上的内存如何释放?
A00091:
首先,把内存里的数据暂时写到硬盘里

[cnangel@localhost ~]# sync
接着,修改 /proc/sys/vm/drop_caches文件
[cnangel@localhost ~]# echo 3 > /proc/sys/vm/drop_caches
[cnangel@localhost ~]# cat /proc/sys/vm/drop_caches
最后,使用free命令查看内存减少多少了。

Q00092:
Everytime I log in using normal user, I got this message:

$ psql -U gateadmin template1
psql: FATAL: IDENT authentication failed for user “gateadmin”

Why?

It looks like you would rather use password authentication than the
default IDENT-based auth (it’s default in Debian distro of postgres
anyway). IDENT will only let you in when you do *not* use -U, ie,
your postgres user name is the same as your Unix user name. Change
this in pg_hba.conf, and don’t forget to SIGHUP or restart the
postmaster afterwards.

regards, tom lane
A00092:
Just modify pg_hba.conf like this (change to trust)

local all trust
host all 127.0.0.1 255.255.255.255 trust

Q00093:
在终端使用cat 或者more命令显示一个二进制文件的时候,发现命令结束后,终端变成了乱码,如何解决?
A00093:
在终端输入命令reset即可解决问题。

Q00094:
运行git svn时,发现出现如下错误:

../libsvn_ra_dav-1.so.0: undefined symbol: gss_delete_sec_context…

该如何解决?
Q00094:
把 Makefile 中的
SVN_APR_LIBS = /home/cnangel/tmp/subversion-1.6.5/apr/libapr-0.la -lrt -lm -lcrypt -lnsl -lpthread -ldl
改为
SVN_APR_LIBS = /home/cnangel/tmp/subversion-1.6.5/apr/libapr-0.la -lrt -lm -lcrypt -lnsl -lpthread -ldl -L/usr/kerberos/lib -lgssapi_krb5 -lkrb5 -lk5crypto
主要是因为编译需要加入gssapi这个库,某些时候根据一些错误信息就可以直接找到相关的库依赖等问题,从而解决问题;

Q00095:
如何让apache能够访问xul文件?
A00095:
For Apache, you can do this by adding the following line to your mime.types file:

application/vnd.mozilla.xul+xml .xul
Alternately, add this line to your httpd.conf file or, if the Apache server is configured to allow it, to the .htaccess file in the directory from which the XUL file is served:

AddType application/vnd.mozilla.xul+xml .xul
Then restart your web server.

Q00096:
使用git clone的时候出现如下错误:

warning: remote HEAD refers to nonexistent ref, unable to checkout.
该如何解决?
A00096:
先在确定能push的机器上,将HEAD信息push到远程git服务器上:
git push origin –all
然后git clone可以完成拷贝。

Q00097:
如何更改ext[x]和reiserfs等分区格式的标签(label)?
A00097:
在Linux系统中,这里指fedora系列,可以使用:
e2label或者tune2fs来修改ext[x]分区格式的标签:

# e2label /dev/sdb2 usbstroage

# tune2fs -L usbstroage /dev/sdb2
另外,reiserfs分区格式的标签可以使用reiserfstune来进行修改,如下所示:
# reiserfstune -l reiserfs /dev/sdb2
另外,xfs格式可以使用xfs_admin加上选项-L来修改标签。
修改vfat的label,属于dosfstools软件包

NAME
dosfslabel – set or get a MS-DOS filesystem label
SYNOPSIS
dosfslabel device [label]

修改NTFS的label,属于ntfsprogs

NAME
ntfslabel – display/change the label on an ntfs file system

SYNOPSIS
ntfslabel [options] device [new-label]

Q00098:
如何彻底解决gftp的中文乱码问题?
A00098:
gftp是一款不错的ftp客户端软件,可以和windows下的cuteftp相媲美,在网络上给出了各种各样到解决gftp中文乱码的方法,但是我认为我的这一种方法最有效果。
如果你的环境是zh_CN.GB2312,相对来说很简单;
若你到系统环境是zh_CN.UTF8(可以使用locale命令来进行查看),查看你gftp的路径,并修改gftp这个文件如下,在exec_prefix=/usr后面加上一句话:

export LC_ALL=zh_CN.GB2312
完成修改即可。
这样针对UTF-8编码的中文文件也不会乱码,而且对于GBK编码的中文文件也不会出现乱码的情况,如果你到字符集里面有GB18030(可以在/usr/share/fonts/下查看)这种字符集,当然更好了。

Q00099:
Fedora 11安装tex的时候:

gbkfonts fonts/truetype/chinese/simsun.ttf song
怎么老是导致机器CPU占用100%,并且最终挂机,终端显示:
Con’t read raw font…
到底是怎么回事呢?
A00099:
一般机器默认没有安装 tetex-afm 或 texlive-afm,只要使用yum安装即可解决问题。

Q00100:
在使用aspell库做拼写检查时,出现

Error: No word lists can be found for the language “en”.
的字样,该怎么办?
A00100:
很明显,这个是由于系统没有安装aspell_en辞典所致,安装上即可。

Q00101:
在php-5.3.0版本中,使用

./configure –prefix=/usr –with-apxs2=/usr/local/apache2/bin/apxs –with-mysql –with-config-file-path=/etc –with-gd –with-zlib –with-jpeg-dir –with-libxml-dir –enable-sockets –enable-mbstring –enable-soap –with-curl –with-freetype-dir –enable-zend-multibyte –enable-mod-charset –enable-dba –enable-exif –with-png-dir –enable-gd-native-ttf –enable-gd-jis-conv –with-gettext –enable-sqlite-utf8 –enable-zip –with-pear –enable-shared –enable-static –with-iconv –with-mcrypt –enable-mbstring=all
之后,make发现如下错误:

/home/cnangel/php-5.3.0/ext/gd/libgd/gdkanji.c:350: undefined reference to `libiconv_open’
ext/gd/libgd/.libs/gdkanji.o(.text+0×182):/home/cnangel/php-5.3.0/ext/gd/libgd/gdkanji.c:365: undefined reference to `libiconv’
ext/gd/libgd/.libs/gdkanji.o(.text+0x18e):/home/cnangel/php-5.3.0/ext/gd/libgd/gdkanji.c:381: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0x1dc): In function `_php_iconv_appendl’:
/home/cnangel/php-5.3.0/ext/iconv/iconv.c:337: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0x2d2):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:374: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0x3b9): In function `php_iconv_string’:
/home/cnangel/php-5.3.0/ext/iconv/iconv.c:430: undefined reference to `libiconv_open’
ext/iconv/.libs/iconv.o(.text+0x3f5):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:442: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0×418):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:456: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0×437):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:467: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0x4b6): In function `_php_iconv_strlen’:
/home/cnangel/php-5.3.0/ext/iconv/iconv.c:592: undefined reference to `libiconv_open’
ext/iconv/.libs/iconv.o(.text+0x52c):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:615: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0×557):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:649: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0×605): In function `_php_iconv_strpos’:
/home/cnangel/php-5.3.0/ext/iconv/iconv.c:840: undefined reference to `libiconv_open’
ext/iconv/.libs/iconv.o(.text+0×672):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:868: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0×718):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:982: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0x8d7): In function `_php_iconv_mime_decode’:
/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1342: undefined reference to `libiconv_open’
ext/iconv/.libs/iconv.o(.text+0x9de):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1811: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0x9ec):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1814: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0xb5d):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1453: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0xb6b):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1456: undefined reference to `libiconv_open’
ext/iconv/.libs/iconv.o(.text+0x14ce): In function `zif_iconv_substr’:
/home/cnangel/php-5.3.0/ext/iconv/iconv.c:712: undefined reference to `libiconv_open’
ext/iconv/.libs/iconv.o(.text+0x15a2):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:736: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0x15ee):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:791: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0×1600):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:795: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0x163a):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:744: undefined reference to `libiconv_open’
ext/iconv/.libs/iconv.o(.text+0x1d70): In function `zif_iconv_mime_encode’:
/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1032: undefined reference to `libiconv_open’
ext/iconv/.libs/iconv.o(.text+0x1d93):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1046: undefined reference to `libiconv_open’
ext/iconv/.libs/iconv.o(.text+0x1fca):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1304: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0x1fdc):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1307: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0x213c):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1117: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0×2175):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1149: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0x21a0):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1165: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0x24ce):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1217: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0x250c):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1248: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0×2782):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:1291: more undefined references to `libiconv’ follow
ext/iconv/.libs/iconv.o(.text+0x35c8): In function `php_iconv_stream_filter_dtor’:
/home/cnangel/php-5.3.0/ext/iconv/iconv.c:2440: undefined reference to `libiconv_close’
ext/iconv/.libs/iconv.o(.text+0×3702): In function `php_iconv_stream_filter_append_bucket’:
/home/cnangel/php-5.3.0/ext/iconv/iconv.c:2590: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0x374b):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:2590: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0x37e0):/home/cnangel/php-5.3.0/ext/iconv/iconv.c:2512: undefined reference to `libiconv’
ext/iconv/.libs/iconv.o(.text+0x3ba7): In function `php_iconv_stream_filter_factory_create’:
/home/cnangel/php-5.3.0/ext/iconv/iconv.c:2466: undefined reference to `libiconv_open’
collect2: ld returned 1 exit status

而我已经安装了libiconv库,但是为什么找不到呢?
A00101:
排除路径及环境变量问题,发现主要是没有加编译选项-liconv所致,但是怎么在一个完整的工程里面加入这个参数呢?
这里提供几种方法:
1,在./configure后,修改Makefile文件,在 LDFLAGS 项中加上 -liconv 选项即可;
2,直接在make后带选项加入,比如 ZEND_EXTRA_LIBS=’-liconv’即可;

Q00102:
安装mcrypt-2.6.8时候,发现说libmcrpt不存在,不明白什么意思?
后来知道libmcrypt和mcrypt不是同一个东东,安装上libmcrypt-2.5.8之后,发现mcrypt仍然安装不上,不知道为什么?
A00102:
经过发现mcrypt的configure.in有些问题,我修改它的测试用例为./conftes.c,然后手工生成一个可执行文件:

gcc -o ./conftes ./conftes.c -lmcrypt
执行发现问题:
[cnangel@cadev12 mcrypt-2.6.8]$./conftes
./conftes: error while loading shared libraries: libmcrypt.so.4: cannot open shared object file: No such file or directory
然后按照经验:
export LD_LIBRARY_PATH=/usr/lib
发现没有问题了,然后重新解压mcrypt-2.6.8.tar.gz包,一切问题没有了,看样子遇到东西得实际分析才成,难怪一般在硅谷的工程师都是10年为一个提升阶段。

Q00103:
tex的问题一直我没有搞懂,有什么大概的诀窍没?
A00103:
这里tex其实本身就跟wiki、twiki的语法一样,不过tex的字体成为tex的重点,因为wiki、twiki不用关注于字体,而tex不同,tex需要点阵字体才能保证dvi、pdf等字体不会因为操作系统或者浏览器的不同而产生变化;
这里有一篇文章tex的字体的相关基础知识可以分享一下。

Q00104:
用make编译一个open client程序时,出现错误:

undefined reference to `__ctype_b’
如何解决呢?
A00104:
这个是一个老版本的兼容问题导致,一般会出现在比较老的代码种,现在的kernel结构变化后,就不支持老代码种的一些定义了,不过我们可以补全定义,达到编译通过为目的。
创建linuxpatch.c源文件
#include
__const unsigned short int *__ctype_b;
__const __int32_t *__ctype_tolower;
__const __int32_t *__ctype_toupper;
void ctSetup()
{
__ctype_b = *(__ctype_b_loc());
__ctype_toupper = *(__ctype_toupper_loc());
__ctype_tolower = *(__ctype_tolower_loc());
}
并在.c源程序中包含,并在main()中执行即可。
你的老代码是不是可以编译通过了呢?

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>