Linux应用心得 全

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

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

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

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

Q00001:
当修改/etc/fstab文件时,因为修改错误而无法启动,这时进入的急救模式只是可读状态,该怎么解决此类问题?
A00001:
使用mount重载系统分区,使其挂载为可写状态,然后修改/etc/fstab文件,具体挂载方式为:

fdisk -l
mount -o mount,rw /dev/hda1 /mnt

mount -o file_mode=0777,dir_mode=0777

 
Q00002:
有时候换了环境或者网络,发现sendmail与sm_client邮件发送系统启动很慢,虽然能启动成功,但是启动的速度实在让人受不了,怎么sendmail和sm_client服务解决启动慢的问题?
A00002:
类似这样的应该是/etc/hosts文件出现解析问题,不排除其他文件有问题,这里/etc/hosts文件的原始内容如下:

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost localhost.localdomain

 
Q00003:
在有些播放器上,有时候发现播放列表上的字符是乱码,解决播放列表乱码的问题是否有统一的格式呢?
A00003:
估计各个播放器的字符编码方式不一样,目前很难有统一的字符编码方式来处理这类问题,比如常见的xmms可以采用加载windows字体的方式获取汉字编码解决,具体方法把WINDOWS目录Fonts目录下的simsun这种字体拷贝到LINUX的 这个目录下/usr/share/fonts/zh_CN/TrueType,然后重起字体服务,fedora8版本以下解决方案如下:

service xfs restart
fc-cache -f -v

如果没有xfs服务,请先安装xfs:

yum install xfs xfs-devel

再用右键单击xmms播放工具的任何地方
会看到一个”选项”,然后选择”功能设定”选择”fonts”
然后设置刚才考过来的字体,注销系统再播放机即可正常使用,对于高版本的xmms记得设置字符编码。
对于音质比较好的amarok,需要进行下载一个软件包mutagen用来解决amarok播放mp3文件名乱码问题,具体方法如下:
安装必要的软件

>sudo apt-get install python-mutagen

or

>yum search mutagen
>sudo yum install python-mutagen -y

把存在NTFS分区上的音乐文件软连接到ext2或ext3分区

>ln -s /u/music /sun/music

转换标签格式,运行mid3iconv命令:

>cd /u/music
>find . -iname “*.mp3″ -execdir mid3iconv -e GBK {} \;

 
Q00004:
不知道有人使用过在linux下的无线上网”业务”没有?在以前,还没有GUI的界面驱动的时候,常常使用./configure来make install,而随着rpm和deb的盛行,安装变简单了,虽然简单,但是无线仍然不好使,老是激活不了,针对IPW2200的网卡和FC系列的操作系统,我这里给几种解决办法:
A00004:
首先在ipw2200.sourceforge.net下载相关驱动:
使用shell激活:

#!/bin/bash 

iwlist=(‘Cnangel’);
iwpasslist=(’1234567890′);

dev=’eth1′;
n=1;
i=0;

while [ $i -lt $n ];
do
iwname=${iwlist[$i]};
iwpass=${iwpasslist[$i]};
if [ "`ps -ef |grep dhclient|grep $dev`" != "" ];then
echo “$dev is up”;
break;
fi

if [ "`iwlist $dev scanning|grep $iwname`" ];then
/sbin/iwconfig $dev essid $iwname
/sbin/iwconfig $dev key $iwpass
echo > /var/lib/dhcp/dhclient-$dev.leases
echo > /var/run/dhclient-$dev.pid
/sbin/dhclient -1 -q -lf /var/lib/dhcp/dhclient-$dev.leases -pf /var/run/dhclient-$dev.pid $dev
fi
((i++))
done

注意:目前的无线密钥驱动好像不支持WPA-PSK和WPA2,如,仅仅支持WEP,所以选择密钥的时候一定要注意。
另外,驱动也可以找NetworkManager来进行更加方便的GUI管理,安装方法如下:

yum install NetworkManager -y
yum install NetworkManager-gnome -y

 
Q00005:

Eugene M. Minkovskii wrote: 

> I’m use vim on FreeBSD 5.3 now. I trying bouth vim6.3 whitout
> patchs and vim6.3 whith patch 1-62.
> I type:
>
> bash-3.00$ export EDITOR=vim
> bash-3.00$ crontab -e
>
> and after saving crontab changes, I’ll get following error:
>
> crontab: temp file must be edited in place
>
> About this we see in man crontab following:
>
> -e Edit the current crontab using the editor specified by the VISUAL
> or EDITOR environment variables. The specified editor MUST edit
> the file in place; any editor that unlinks the file and recreates
> it cannot be used. After you exit from the editor, the modified
> crontab will be installed automatically.
>
> Hmm. I’ll try to remove my .vimrc and crontab install correctly,
> but when I use empty .vimrc, crontab broken again.
>
> Have you any ideas?

A00005:

Set ‘backupcopy’ to “yes”. “:help crontab”.

You can tune a file system, but you can’t tuna fish
– man tunefs

Cnangel注:希望能看明白,主要针对crontab用的时候发生”crontab: temp file must be edited in place”错误的时候的解决办法。 
Q00006:
当vim一个文件内容显示一团乱码的时候,你会不知所措,根本不知道采用了什么编码,这时候我们利用我们聪慧的头脑去大胆尝试,一切问题会迎刃而解。
A00006:
首先,判断Vim的默认打开编码,进入命令行模式:

:echo &enc

发现为utf8,把终端的字符编码和vim编码格式弄成一种类型;
vim文件,发现内容仍然是一团糟,尝试使用:

:set encoding=utf8

然后,vim文件,文件内容仍然是乱码,强制指定:

:edit ++enc=utf8

vim文件发现一切明了。

fileencodings 参数是告诉 vim 尝试解码的多种可能编码,vim 会一个一个试着解码,直到试对为止,然后会将试出来的编码记录到 fileencoding 里面,可以显示 fileencoding 就能知道现在 vim 用什么来解码这个文件了。如果想将文件用另外一种编码”另存为”,可以修改fileencoding 然后 :w 。
termencoding 参数是Vim 所工作的终端(或者Windows 的Console 窗口) 的字符编码方式。
注意:freebsd中文一般使用cp936,而linux部分机器可使用gbk字符集
我目前使用的vim配置如下:(~/.vimrc)

” Multi-encoding setting, MUST BE IN THE BEGINNING OF .vimrc!

if has(“multi_byte”)
” When ‘fileencodings’ starts with ‘ucs-bom’, don’t do this manually
“set bomb
set fileencodings=ucs-bom,utf-8,chinese,taiwan,japan,korea,latin1
” CJK environment detection and corresponding setting
if v:lang =~ “^zh_CN”
” Simplified Chinese, on Unix euc-cn, on MS-Windows cp936
set encoding=chinese
set termencoding=chinese
if &fileencoding == ”
set fileencoding=chinese
endif
elseif v:lang =~ “^zh_TW”
” Traditional Chinese, on Unix euc-tw, on MS-Windows cp950
set encoding=taiwan
set termencoding=taiwan
if &fileencoding == ”
set fileencoding=taiwan
endif
elseif v:lang =~ “^ja_JP”
” Japanese, on Unix euc-jp, on MS-Windows cp932
set encoding=japan
set termencoding=japan
if &fileencoding == ”
set fileencoding=japan
endif
elseif v:lang =~ “^ko”
” Korean on Unix euc-kr, on MS-Windows cp949
set encoding=korea
set termencoding=korea
if &fileencoding == ”
set fileencoding=korea
endif
endif
” Detect UTF-8 locale, and override CJK setting if needed
if v:lang =~ “utf8$” || v:lang =~ “UTF-8$”
set encoding=utf-8
endif
else
echoerr ‘Sorry, this version of (g)Vim was not compiled with “multi_byte”‘
endif 

“环境变量 LANG(使用的语言)
“环境变量 LC_CTYPE(使用的内部编码)
“Vim 选项 encoding(Vim 的内部编码)
“Vim 选项 termencoding(Vim 在与屏幕/键盘交互时使用的编码)
“Vim 选项 fileencoding(Vim 当前编辑的文件在存储时的编码)
“Vim 选项 fileencodings(Vim 打开文件时的尝试使用的编码)
“Vim 选项 ambiwidth(对“不明宽度”字符的处理方式;Vim 6.1.455 后引入)
syntax on

set fileencodings=ucs-bom,utf-8,gbk,big5,latin1
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8

“缩进
set backspace=2
set autoindent
“set expandtab
“set cindent shiftwidth=2
“set autoindent shiftwidth=2

“空格代替tab
set shiftwidth=4
set softtabstop=4
set tabstop=4
set cindent shiftwidth=4

“行号
set number

“标尺
set ruler

set incsearch
set showmode
“打开文件时自动回到上次编辑位置
set showcmd
“置粘贴模式,这样粘贴过来的程序代码就不会错位了。
set paste

“设置帮助信息
set helplang=cn

“界面字体
set gfn=Courier_New:h10:cANSI
“set guifont=SimSun 12

“搜索关键字高亮
set hls

“搜索是对不全区分大小写
“set ic

“但现在要区分
“set noic

“设置不备份
“set nobackup
“set nowritebackup

“默认备份文件目录
“set backupdir=/usr/local/backup

“设置配色方案,colorscheme可以设置,但我总提示找不到
“source $VIMRUNTIME/colors/slate.vim
“colorscheme nightflight
“colorscheme desert
highlight Comment ctermfg=Lightred

“默认是插入模式
“set insertmode

“设置vim控制鼠标滚动
“set mouse=a

“设置 Ctrl+x + Ctrl+f 选择路径时,去除不是文件名的特殊字符
set isf=@,48-57,/,.,-,_,+,#,$,%,~

“设置Crontab为可用状态
set backupcopy=yes

“设置使用screen vim时,因为错误的按键使屏幕不再闪烁
set vb t_vb=

“设置折叠模式
set foldcolumn=4
“光标遇到折叠,折叠就打开
set foldopen=all
“移开折叠时自动关闭折叠
set foldclose=all
“zf zo zc zd zr zm zR zM zn zi zN
“依缩进折叠
“set foldmethod=indent
“依标记折叠
“set foldmethod=marker
map <F6> a<C-R>=strftime(“%c”)<CR><Esc>
map <F7> :w<CR>:!sh -x %<CR>
map <F8> :w<CR>:!perl -c %<CR>
map <F9> :w<CR>:!perl %<CR>

最后谢谢谢宇恒同学给予的帮助。
后补:关于vim编译
建议使用vim7.0或以上版本,源码编译时参数可以选择,比如:

./configure –prefix=/usr –enable-multibyte

配置选项的含义:
–enable-multibyte
我们强烈推荐你启用该选项(虽然它是可选的),因为它使得 Vim 可以支持使用多字节字符编码的文件,在一个使用多字节字符集的 locale 上,这是必需的 
Q00007:
利用mail命令发送附件,真的很难么?
A00007:
不难,需要你的服务器端支持uuencode编码就可以。比如利用mail命令发送一个压缩包

tar cf – Hash.lst | gzip | uuencode Hash.lst.tar.Z | mail -s ‘sdas’ xxxx@xxxxc.com

即可完成.
可以man uuencode,发现有这么一条:

tar cf – src_tree | compress | uuencode src_tree.tar.Z | mail sys1!sys2!user

 
Q00008:
怎么利用date获得昨天的日期?
A00008:
在BSD平台上:

date -v-1d “+%Y%m%d %T”

在Linux平台上:

date -d “-1 day” “+%Y%m%d %T”

其他方法,并不一定通用,只是一些有特色思路

date +%Y%m%d -d “-1 day”
date -d yesterday +%C%y%m%d
export TZ=”TAIST+16″ && date|awk ‘{print $2,$3}’ && export TZ=”TAIST-8″
echo |gawk ‘ {print strftime(“%Y%m%d” ,systime()-86400*4) ;exit }’
date -r $(($(date “+%s”)-86400))
date -d “3 days ago” +%Y%m%d

 
Q00009:
怎么使用ssh密钥而不用输入密码登陆远程机器?
A00009:
假如本地机器是localhost,远程机器是remotehost,要访问远程机器,使用ssh-keygen来生成密钥,一般以 rsa key为例 :
Linux上的sh-keygen:

ssh-keygen -t rsa

FreeBSD上的sh-keygen:

ssh-keygen -P ” -t rsa1

早期的sh-keygen:

ssh-keygen -f id_rsa -P ”

原文如下:

If your version of ssh-keygen does not understand the -t option, try: ssh-keygen -f keyname-identity -p ”

然后将id_rsa.pub放到远程机器的~/.ssh/目录下,运行:

chmod 644 ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

这样,在localhost上使用scp以及ssh可以直接登陆remotehost,而不用输入密码了。
注意:
1,.ssh权限最好设置为0711权限,而密钥所在文件是0400权限。
2,如果指定要freebsd不使用identity.pub的公钥,而要使用id_dsa.pub的公钥,除了 -i 指定私钥办法解决外,还可以使用 -oProtocol=2 来解决问题,特别scp的时候。 
Q00010:
我在linux下可以使用命令查看通讯进程,如果发现有死锁的进程,我可以使用kill命令杀掉,但是我如果不得不工作的windows平台下,怎么杀掉一个进程呢?比如我想杀掉占用80端口的进程怎么办呢?
A00010:
长期在linux下工作的朋友,对Windows也非常陌生,对于刚接触到windows的朋友来说,不知道什么进程是占用了什么端口是个非常痛苦的事情,尽管windows任务管理器提供了比较丰富的功能,但是习惯于命令式的人实在是觉得“拗手”吧!查看80端口PID号码:

netstat -ano

查出Local Address列的80端口对应的PID是多少

Active Connections 

Proto Local Address Foreign Address State PID
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 3880
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1880
TCP 0.0.0.0:2804 0.0.0.0:0 LISTENING 956
TCP 0.0.0.0:3260 0.0.0.0:0 LISTENING 1640
TCP 0.0.0.0:3261 0.0.0.0:0 LISTENING 1640
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 520
TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING 3804
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2676

从上面我们运行命令(不会不知道windows的命令从哪入口吧?msdos)知道80端口的PID是3880,于是杀掉这个端口,也就是关闭80这个端口号,运行命令:

ntsd -c q -p 3880

即可以关闭80端口了。 
Q00011:
经常使用Linux机器,发现mail功能不好使,进入/etc/init.d目录,发现根本没有此目录,使用:

which sendmail

确定系统已经安装上mail,但是我怎么将mail作为守护进程运行呢?
A00011:
如果要sendmail处理发送来的信件,必须有一个守护进程在运行。sendmail守护进程就是带有特殊标志位的sendmail程序。这个守护进程是被/etc/init.d/mail脚本在系统启动的时候自动启动的。
在此脚本中用来启动sendmail的命令如下:

/usr/lib/sendmail -bd -q15m

-bd标志是使sendmail作为一个守护程序运行。-q15m标志使sendmail fork出一个子守护进程来每隔15分钟处理一次消息队列。
如果没有对应的目录,我相信写一个mail的守护进程应该不成问题了吧。 
Q00012:
我的本子的显卡型号是ATI MOBILITY RADEON X700,每次尝试一个Linux发行版,都为显卡驱动的安装伤脑筋,这里整理笔记如下,希望能给遇到类似的同学一点点小帮助。
A00012:
首先是去http://www.ati.com下载你计算机专用显卡型号的驱动,比如我的显卡驱动为:ati-driver-installer-8.40.4-x86.x86_64.run,32位机器或者64位机器通用这个显卡驱动,所以不必要担心自己下错了。
再次,需要xorg和相关驱动,一般发行版本自带,老的发行版本没有的话,自己google一下。
接着,安装ati驱动,直接运行可能会找不到相关的内核,所以需要以下形式安装:

./ati-driver-installer-8.40.4-x86.x86_64.run –listpkg

找到我的对应的发行版本:Fedora/F7
紧接着:

./ati-driver-installer-8.40.4-x86.x86_64.run –buildpkg Fedora/F7

若没有错误,则ati驱动安装完成了。
检测阶段:startx,发现黑屏,按Ctrl+Alt+F1,看到提示错误,libstdc++5.0.0不存在,不能装载flgrx.so文件,这个很容易,找一个compat-libstdc++-33包安装就可以了。

yum install compat-libstdc++-33 -y

如果还有错误,根据错误信息处理就ok了。 
Q00013:
在Linux下使用了Windows的丰富的字体,发现在宽屏下,用firefox使用windows的字体看英文字体比较虚,我选择的是宋体,16号大小,如果选择12号,倒是看上去不是很虚,但是字体太小了,有点累眼睛 :) 怎么使用好看一点的字体又不会影响效果呢?
A00013:
对于独立显卡的机器,首先配置好机器显示的分辨率,我这里宽屏配置的分辨率是1280×800,首先在gnome下字体并没有问题,只是我以前改动过firefox的配置,针对firefox的问题解决如下:
1,打开firefox首选项,选择内容项,找到“字体&颜色”;
2,默认字体选择“sans-serif”,大小选择合适的高度,我选择16号大小,其实“Courier New”也不错,根据情况选择;
3,高级选项可以自己选择,比如serif字体,Times New Roman以及Arial字体也不错。
当然这些都是在windows字体点阵足够的情况下,如果仍然看上去虚,把字体由16号变小,直到看清楚为止,也可以找一些比较高点阵的字体,google一下,注意有些字体是要收费的哟。
Q00014:
在unix下运行perl程序时,发现错误提示为“: bad interpreter: No such file or directory”,而程序没有任何错误,解释器路径也正确,为何会出现这种没有这个文件或者目录的情况呢?
A00014:
这种原因一般是由于0×10和0×13,简单点说是windows系统的换行和回车导致问题,一般在linux或者unix下的换行不包括回车符,所以需要使用dos2unix工具将perl程序转换成为unix可识别的文字就可以了。
Q00015:
怎么在Linux下使用Windows下的字体呢?例如:Fedora8
A00015:
在Fedora官方的FAQ上,写得很清楚,这里不累述了,原文如下:

Yes, you can. Here’s how you install fonts: 

1. Under the “System” menu in the tray, choose “Preferences” and then “Fonts.”
2. Click on the “Details…” button.
3. Click on “Go to font folder.”

Now simply drag & drop your fonts into the “Fonts” window to add them. You may have to log out and log in again to see them actually show up in that folder.

If you have any programs open, you will need to close then and then open them again, to have the new fonts show up in those programs.

By the way, there’s also a very easy way to install all of the common Windows fonts on Linux. This can sometimes make web pages display more nicely:

1. Open a Terminal.
2. Become root:

su -
3. Download the MS Core Fonts Smart Package File:

wget http://corefonts.sourceforge.net/msttcorefonts-2.0-1.spec
4. Make sure that the rpm-build and cabextract packages are installed:

yum install rpm-build cabextract
5. Build the Core Fonts package:

rpmbuild -ba msttcorefonts-2.0-1.spec
6. Install the Core Fonts package:

yum localinstall –nogpgcheck /usr/src/redhat/RPMS/noarch/msttcorefonts-2.0-1.noarch.rpm

 
Q00016:
针对Fedora8(这里又说F8,@_@ ),为什么和以前安装Fedora7、fedora6等等不一样了呢,在插入启动光盘的时候一直sbin\loader… …中或者一直halt,或者无缘无故的怪毛病?
A00016:
笔者在安装fedora8的时候也出现过这样的问题,刚开始以为自己的可擦写盘坏掉了,后来又用dvd刻了一个dvd盘,依旧loader,去官方查没有结果,后来还是搜索给出了答案,原来是硬件配置和现有版本冲突的问题,不知道为什么fedora8这么仓促发布?不把一些环境测试好了在发布,这个问题后来已经反应到redhat的官方网站并且提交上去。笔者机器是acpi冲突,安装时,编辑安装选项(按”e”编辑),后面加上

clocksource=acpi_pm

由于笔者本本的驱动在fedora8中没有集成,所以得自己从官方ati中下载驱动,不过官方的ati驱动又出现了bug,不过整整还能用,安装时候只能在后面加上:

text

这样安装完成了。不过现在笔者已经很满意了,在fc3的时候,官方还没有成型的ati显卡驱动,fedora core3没有自己集成ati驱动,每次都是和flgrx以及xorg重新编译,然后再和内核一起加载,这样才解决,现在方便多了,关于怎么去安装显卡看Q00012。 
Q00017:
关于rpm安装的mysql,在日志文件/var/log/mysqld.log会出现:

[ERROR] Fatal error: Can’t open privilege tables: Can’t find file: ‘./mysql/host.frm’ (errno: 13)

或者:

[ERROR] Fatal error: Can’t open privilege tables: Table ‘mysql.host’ doesn’t exist

的字样,而自己编译的mysql没有这个方面的问题(除非你不按照INSTALL文件的说明去做),究竟该怎么解决呢?
A00017:
这个问题来源于操作系统安装mysql时,都是以root身份安装rpm,实际上是mysql的rpm包的bug,导致数据存放目录权限是root权限导致,正确的解决方法是把mysql_install_db的数据库目录更改所属权限即可,以默认安装的路径为例:

chown -R mysql:root /var/lib/mysql/mysql

 
Q00018:
在x64位机器编译GD库时,发现在编译freetype源码时出现如下错误:

/usr/bin/ld: /usr/local/lib/libz.a(compress.o): relocation R_X86_64_32can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libz.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

其中zlib版本为:zlib-1.2.2
libpng版本为:libpng-1.2.23
libjpeg版本为:jpeg-6b
freetype版本为:freetype-2.3.5
GD版本为:2.0.34
不能通过编译。
A00018:
错误原因:zlib安装问题
解决方法:重新编译zlib文件,步骤如下:

# tar -zxvf zlib-1.2.3.tar.gz
# cd zlib-1.2.3
#./configure
#vi Makefile

找到 CFLAGS=-O3 -DUSE_MMAP
在后面加入-fPIC,即变成CFLAGS=-O3 -DUSE_MMAP -fPIC

#make
# make install

及可正确完成zlib在x64位机器上的安装。
注意:在x64位机器上编译一些软件,其实很多都需要在优化编译选项上加上 -fPIC 这个参数,否则编译会通不过,笔者在这里吃过很大的亏。 
Q00019:
为什么我编译PHP时出现如下错误:

checking for MySQL support… yes
checking for specified location of the MySQL UNIX socket… no
checking for MySQL UNIX socket location… /tmp/mysql.sock
checking for mysql_close in -lmysqlclient… no
checking for mysql_error in -lmysqlclient… no
configure: error: mysql configure failed. Please check config.log for more information.

我已经安装了mysqlclient10-3.23.58-4.RHEL4.1、mysqlclient10-3.23.58-4.RHEL4.1、mysql-4.1.12-3.RHEL4.1、mysql-server-4.1.12-3.RHEL4.1、mysql-bench-4.1.12-3.RHEL4.1、mysqlclient10-devel-3.23.58-4.RHEL4.1和mysql-devel-4.1.12-3.RHEL4.1,并不缺少任何依赖了,为什么出现这种错误呢?怎么样解决这个错误?
A00019:
关于这个问题,我google了很多地方,个人认为是环境支持性问题,也许是php的bug或者是mysql的bug,关于网上所说“安装PHP的时候没有指定一下mysql的安装目录。但是我已经指定了,所以这个说法是错误的,其实主要原因是 mysql-level没有装,也就是mysql的版本不对,应该换 mysql-max-5.0.21版本(包含所有mysql相关内容的软件包)”云云是无可奈何的解法,另外一种解决办法就是将mysql中的libmysqlclient库移到lib库目录下解决问题,以x64位机器为例,假设mysql编译时–prefix=/usr:

# cd /usr/lib64
# ln -s /usr/lib64/mysql/libmysqlclient.so
# ldconfig

然后对PHP进行编译:

./configure –prefix=/usr/share \
–datadir=/usr/share/php \
–with-apxs=/usr/sbin/apxs \
–libdir=/usr/share –includedir=/usr/include \
–bindir=/usr/bin \
–with-config-file-path=/etc \
–enable-mbstring –enable-mbregex \
–with-mysql –enable-bcmath \
–with-gd –enable-calendar \
–with-bz2 –with-zlib –enable-zip \
–enable-gd-imgstrttf \
–enable-gd-native-ttf \
–with-ttf-dir=/usr/lib \
–with-freetype-dir=/usr/lib \
–with-zlib-dir=/usr/lib \
–with-png-dir=/usr/lib \
–with-jpeg-dir=/usr/lib \
–with-xpm-dir=/usr/X11R6 \
–with-tiff-dir=/usr/lib \
–enable-memory-limit –enable-safe-mode \
–bindir=/usr/bin \
–enable-bcmath -enable-calendar \
–enable-ctype –with-ftp \
–enable-magic-quotes \
–enable-inline-optimization \
–with-iconv –enable-ftp \
–enable-debug \
–enable-sqlite-utf8 \
–enable-soap \
–enable-zend-multibyte

一切安装顺利完成。 
Q00020:
声卡驱动alsa安装上了怎么就是没有声音阿?用alsamixergui或者alsamixer配置alsa时,出现:

*** PULSEAUDIO: Unable to connect: Connection refused
alsamixer: function snd_ctl_open failed for default: Connection refused

或者使用alsa的驱动播放时,出现:

*** PULSEAUDIO: Unable to connect: Connection refused
[AO_ALSA] Playback open error: Connection refused
Could not open/initialize audio device -> no sound.

当然,完全可以使用其他的声卡驱动来代替,比如oss,或者转换alsa-oss以及其他方式,总之也很完美,但是有没有更完美的解决,我只想使用alsa方式来进行播放呢?
A00020:
完美的解决方案是有的,这里是alsa的一个bug,当新的驱动应用上的时候,/tmp/pulse-*这个目录下面的配置信息没有更新,导致声卡驱动不能正常使用,只要删除这个目录,就可以了,原文如下:
Ma pulseaudio è avviato?

# ps -eaf | grep pulseaudio

Ti risponde qualcosa?

Se non lo è eseguilo con il tuo utente:

$ pulseaudio -D &

e se da errore verifica se la directory /tmp/pulse-tuoutente ha i permessi corretti:

$ ls -ld /tmp/pulse*

drwx—— 2 tuoutente tuoutente 4096 27 nov 14:26 /tmp/pulse-tuoutente

Se appartiene invece a “root” elimina quella directory prima di riavviare pulse-audio:

$ su

# rm -r /tmp/pulse-tuoutente

# exit

$ pulseaudio -D &

Se non va ancora…

…se lanci mplayer con una di queste opzioni:

$ mplayer -ao nosound blablabla.avi

o

$ mplayer -ao sdl blablabla.avi

o

$ mplayer -ao alsa blablabla.avi

o

$ mplayer -ao oss blablabla.avi

另外,保证alsa驱动相关有这些相关的包:

alsa-utils
alsa-lib
alsa-lib-devel

alsa-driver似乎可以不需要 :)
关于pulseaudio的不发声的问题,其实大部分问题来源于权限问题,也不排除其他问题,详情可以参照:莫名其妙的pulse audio 
Q00021:
Linux下我建立了.bash_profile文件作为用户的配置文件,怎么不生效呢?
A00021:
在类Unix系统里,有几种格式的文件配置,.bash_profile只是其中的一种,比如BSD系统,常用.profile文件作为用户基础配置文件,而Linux家族里面,常用.bash_profile和.bashrc作为配置文件,这些配置文件与主shell有关,比如BSD系统经常用csh,而linux系统常用bash。
除了以上,注意.bash_profile等配置文件必须写正确,检查正确是否,可以直接在命令行上运行,或者

sh -x .bash_profile

或者

source .bash_profile

来运行。
注意一下:关于shell,有好几种不同的版本,比如bash、csh、tsh等等,source仅仅在bash等几种shell版本中起作用,一般使用”.”来代替。 
Q00022:
怎么在BSD下和Linux下的top命令打印出来的内容输出到一个文件,但是我只想几分钟来监测一次?
A00022:

#!/bin/bash 

os=`uname -s`
logpath=/home/Cnangel
topdate=`date “+%Y%m%d %T”`
topfile=$logpath/`date “+%Y_%m_%d_%H_%M_%S”`.top
export TERM=linux;

case “$os” in
FreeBSD)
# cpulevel=`vmstat|awk ‘END{print $19}’`
/usr/bin/top -b -d 3 | awk ‘{if (NF == 0) { line ++;} if (line >= 6){print $0;} }’ > $topfile
id=`grep idle $topfile | awk -F “,” ‘{print $5}’`
id=${id#*[ ]}
cpulevel=${id%.*}
if [ "$cpulevel" -le "50" ]
then
/bin/awk ‘{if ($9 ~ /^%/) { ss = 1; next; } if (ss == 1) { print “‘”$topdate”‘” “\t” $9 “\t” $12; ss = 0; } }’ $topfile >>
$logpath/cpu.log
fi
;;
Linux)
# cpulevel=`vmstat|awk ‘END{print $15}’`
/usr/bin/top -b -n 3 | awk ‘{if (NF == 0) { line ++;} if (line >= 6){print $0;} }’ > $topfile
id=`grep “id,” $topfile | awk -F “,” ‘{print $4}’`
id=${id#*[ ]}
wa=`grep “id,” $topfile | awk -F “,” ‘{print $5}’`
wa=${wa#*[ ]}
cpulevel=${id%.*}
iolevel=${wa%.*}
if [ "$cpulevel" -le "50" -o "$iolevel" -ge "60" ]
then
/bin/awk ‘{if ($9 ~ /^%/) { ss = 1; next; } if (ss == 1) { print “‘”$topdate”‘” “\t” $9 “\t” $12; ss = 0; } }’ $top
file >> $logpath/cpu.log
fi
;;
esac

注意BSD与linux不同,为了稳定起见,top更新是1秒钟一次,所以开始2秒是不准确的,一般从第三秒开始记。
另外,类Unix下有一个命令是sar(System Activity Reporter),主要将系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态,关于其用法可以参考其手册,这里不再累述。 
Q00023:
在Windows下怎么将postgresql安装成服务?postgresql.conf 中的 tcpip_socket选项 怎么没有呢?另外,我创建一个大写的”QQ”用户该怎么操作呢?
A00023:
其实安装办法和mysql差不多,postgresql提供一个pg_ctl.exe程序来完成安装windows的服务:

F:/usr/local/pgsql/bin/pg_ctl.exe runservice -N “PGSQL” -D “F:/usr/local/pgsql/data”

然后启动PGSQL服务:

net start PGSQL

但是直接使用psql时候出现

D:\>psql
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket “/tmp/.s.PGSQL.5432″?

看样子是类似unix的socket的接口没有接上,那我们就接上吧,但是从postgresql.conf 中没有发现tcpip_socket字样的接口,去官方一查,原来是postgresql从8.24版本以后抛弃了这个参数,一切使用listen_addresses来控制。于是修改postgresql.conf文件,将listen_addresses修改成’localhost’,并去掉前面的“#”号,然后使用客户端程序psql进行连接:

D:\>psql -h localhost -U root -d cnangel
Welcome to psql 8.0.7, the PostgreSQL interactive terminal. 

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

cnangel=# \l
List of databases
Name | Owner | Encoding
———–+———+———–
MTOS | root | SQL_ASCII
QQ | cnangel | SQL_ASCII
cnangel | cnangel | SQL_ASCII
postgres | root | SQL_ASCII
root | root | SQL_ASCII
template0 | root | SQL_ASCII
template1 | root | SQL_ASCII
(7 rows)
cnangel=# alter database “QQ” owner to “QQ”;

这样解决了我们的问题,其实发现很多windows下的东西都可以模仿类Unix,另外,遇到问题多看文档,多动脑筋,做一个自己的OS也不成问题了。 
Q00024:
Mysql数据库中的表出现了错误,查询和插入的时候都会出错,查询错误显示:

mysql> SELECT id, ybg FROM querylog_discrepant WHERE keyword LIKE BINARY ‘宰相刘罗锅在线观看’;
ERROR 1030 (HY000): Got error 127 from storage engine

使用mysqlcheck修复也无法修复,显示错误信息如下:

warning : Table is marked as crashed
warning : 1 client is using or hasn’t closed the table properly
error : Size of datafile is: 214 Should be: 220
error : Corrupt

该怎么办呢?
A00024:
使用该命令来强制修复,但是会丢失一些数据,但是总比你这个表不能用好一些吧,建议重要性的表进行一些调度性的备份。命令如下:

mysqlcheck -uroot -S /tmp/mysql.sock –force –auto-repair querylog querylog_discrepant;

 
Q00025:
类Unix环境里,A主机能够ping通B主机但是由于防火墙等策略限制不能使用B主机中其中一个3206端口的服务,怎么才能访问这个服务呢?
A00025:
找一台C主机,虽然A主机不能ssh到C主机,但C主机必须能够ssh到A主机,且C主机能够使用B主机中3206端口的服务,然后可以使用screen命令放置ssh“隧道”,命令如下:

screen ssh -q -x -R 2008:www.B.com:3206 user@www.A.com vmstat 45

注意以下几点:
1,保证A主机的2008端口没有被占用,这个端口可以随意指定,不一定是2008;
2,www.A.com这个主机名称可以使用IP来代替,当然这不是好的方案,因为IP经常变化。 
Q00026:
在使用screen vim时候,终端的屏幕经常因为错误按键会闪烁不停,影响视觉感官,该怎么办才能让它不进行闪烁呢?
A00026:
在终端输入:

screen vim test.c

然后输入:

:help ‘visualbell’

回车后发现一些关于vim bell的帮助,然后根据需解决问题再输入

set vb t_vb=

回车一下,看看连续按几次ESC,是否还会闪烁屏幕呢?呵呵,一切正常了。 
Q00027:
当服务器设置了ssh登陆超时时间(一般为30秒),即当终端用户30秒内没有反应(数据包的传递),则ssh自动断开,若我一直想ssh连接着,并不想断开;但是服务器已经设置了,我并不想改动服务器配置,该怎么解决这个问题呢?
A00027:
这里提供给使用putty的朋友一个好的办法(适合Windows和Linux环境),如图:
putty.PNG
将0设置为15秒左右即可。
对于Linux用户另外有一种解决办法,首先:
在$HOME/.ssh目录更改config文件,若没有该配置文件,则创建一个,里面内容添加一句:

ServerAliveInterval 15

这样也不会因为服务器的ssh超时配置导致ssh断开了。该配置的意思就是每隔15秒内送数据包给服务器,保证持久性连接。 
Q00028:
使用pietty或Putty的人,经常不小心按到Ctrl+s,导致终端挂起,看上去跟机器死了似的,这时候唤醒机器该怎么办?
A00028:
其实这个是一种使用经验,在putty里面,无论使用screen或者vim等模式下按ctrl+s都会出现这种挂起情况,一般人认为是无可救药了,直接kill这个进程的pid,尤其是screen或者vim等模式时,正在编辑文档,导致数据丢失,到底怎么解决这个办法呢?其实这个方法非常简单:
按住

Ctrl+q

即可唤醒机器。 
Q00029:
怎么直接从mysql导出xml的数据?
A00029:
很简单,使用-X选项即可

mysql -X -u root -e “use mysql; show processlist;”

输出内容如下:

<?xml version=”1.0″?> 

<resultset statement=”show processlist” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<row>
<field name=”Id”>97</field>
<field name=”User”>root</field>
<field name=”Host”>localhost</field>
<field name=”db”>mysql</field>
<field name=”Command”>Query</field>
<field name=”Time”>0</field>
<field name=”State” xsi:nil=”true” />
<field name=”Info”>show processlist</field>
</row>
</resultset>

 
Q00030:
sqlite与sqlite2有什么关系,其中若想从sqlite升级到sqlite2升级,该怎么办?
A00030:
sqlite2是sqlite的升级版本,sqlite2不兼容以前sqlite的数据库,如果需要转换,可以使用如下命令:

sqlite2 mydb.db .dump | sqlite3 mydb-new.db

我们常把sqlite2.x版本说成sqlite,而把sqlite3.x以上说成sqlite2,只是习惯而已,sqlite2实现了一些优化算法,如btree,使速度更快于sqlite,网上有人说sqlite2快于mysql,我看不尽然,其实任何东西有利有弊,看怎么用才能体验出它的好处和优点。 
Q00031:
sudo可不可以不输入密码?
A00031:
改一下/etc/sudoers
加上一句

[用户] ALL=(ALL) NOPASSWD: ALL

但是不建议直接编辑/etc/sudoers文件,可以使用visudo,格式:

用户名 主机名=NOPASSWD:/sbin/bash

 
Q00032:
使用php编写可视化的界面是一件非常爽的事情,但是我安装php-gtk完成之后,怎么执行php程序出错呢?

PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php/modules/php_gtk2.so’ – /usr/lib/php/modules/php_gtk2.so: undefined symbol: phpi_get_le_gd in Unknown on line 0
PHP Fatal error: Class ‘GtkWindow’ not found in /u/pro/php/calendar.php on line 22

A00032:
这里要说清楚的是,gtk依赖于gd。首先:

[Cnangel@localhost php-gtk]$ tar -zxf php-gtk-2.0.0beta.tar.gz
[Cnangel@localhost php-gtk]$ cd php-gtk-2.0.0beta
[Cnangel@localhost php-gtk-2.0.0beta]$ ./buildconf –with-phpize=`which phpize`
[Cnangel@localhost php-gtk-2.0.0beta]$ ./configure –with-php-config=`which php-config`
[Cnangel@localhost php-gtk-2.0.0beta]$ make
[Cnangel@localhost php-gtk-2.0.0beta]$ sudo make install

安装之后会有类似这样的提示:

Installing shared extensions: /usr/lib/php/modules/

修改/etc/php.ini文件,增加:

extension=gd.so
extension=php_gtk2.so
extension_dir=/usr/lib/php/modules/

然后执行php程序,看看是不是基于GTK的界面出来了?

这里注意两点:
1,如果找不到 phpize 和 php-config 这两个程序,需要安装php的development包,简单安装:sudo yum install php-devel。
2,执行:

[Cnangel@localhost php-gtk-2.0.0beta]$ php
PHP Warning: Module ‘gd’ already loaded in Unknown on line 0


出现类似字样,是gd重复使用的效果,应该将extension=gd.so和php.d/gd.ini取其一,并必须放置于extension=php_gtk2.so之前即可。
 
Q00033:
当使用mysql时,当字段d1和d2的属性都属于int unsigned类型,且d1

select d1-d2 from tablename;

发现结果是一个很大的正整数,而不是我想要的负数,该怎么办呢?
A00033:
这里有两种解决办法,一种是更改字段属性为signed;一种是使用cast函数来解决,比如:

mysql> SELECT CAST(1-2 AS UNSIGNED)
-> 18446744073709551615
mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
-> -1

注意,假如任意一个操作数为一个浮点值,则结果为一个浮点值, 且不会受到上述规则影响 (关于这一点, DECIMAL 列值被视为浮点值)。

mysql> SELECT CAST(1 AS UNSIGNED) – 2.0;
-> -1.0

感谢叶金荣同学给予的帮助。 
Q00034:
在源码安装putty等软件时,虽然安装成功,但是会出现:

Gtk-WARNING **: Failed to load module “libgnomebreakpad.so”: libgnomebreakpad.so: cannot open shared object file: No such file or directory

怎么解决这个问题呢?
A00034:
安装putty后,虽然软件可以运行,但是有一些异常情况,运行检查依赖性的话:

yum provides \*libgnomebreakpad.so\*

结果是

bug-buddy.i386 : A bug reporting utility for GNOME
bug-buddy.i386 : A bug reporting utility for GNOME

解决办法如下:

I fixed the libgnomebreakpad.so on my Fedora 8 x86 system when I added
the file “/etc/ld.so.conf.d/gtk-2.0.conf” with the line:
/usr/lib/gtk-2.0/modules
and ran ldconfig.

或者

yum erase bug-buddy

 
Q00035:
mount硬盘时,突然发现如下错误:

[root@localhost c]# mount /dev/sda1 /mnt/c
Windows is hibernated, refused to mount.
Failed to mount ‘/dev/sda1′: 不允许的操作
The NTFS partition is hibernated. Please resume and shutdown Windows
properly, so mounting could be done safely.

到底是什么原因导致呢?
A00035:
开始看到这个信息以为这里面有boot分区在里面被挂载了,其实是因为我的另外一个操作系统处于休眠状态,导致挂载不上,解决办法很简单,让另外一个操作系统关闭计算机就可以了。 :)
感谢Cuci好友。 
Q00036:
在linux下ls时,经常显示乱码,vim一个文件颜色非常乱套,文件也乱码,怎么办?
A00036:
经常问这个问题的人会把上面的问题当作一个问题来对待,其实这是两个问题:
1,ls出现乱码,主要是LANG的指出现问题,可以在终端环境下使用echo $LANG看到zh_CN.GB18030字样,如果你的终端使用的是utf8,那么一定会乱码,需要设置export LANG=zh_CN.UTF-8或者unset LANG都能解决问题;
2,vim颜色乱套一般是在/usr/share/vim/vim71/plugins里面有颜色的自动配置,注意plugins里面的所有插件是自动加载的,颜色配置一般放在/usr/share/vim/vim71/colors里面,关于乱码问题在A00006里面已经详述。
Q00037:
在调试Perl脚本时,在print 输出utf-8字符时,日志里会产生大量的
“Wide character in print at line …” 警告信息,怎么不让调试信息显示出该警告信息呢?
A00037:
由于Perl中的 I/O不能理解utf-8编码,在缺省情况下,认为输出都应该是iso-8859编码,所以,遇到不符合这个规范的编码,就报告一条警告。
perl有个函数binmode()可以解决这个问题。

binmode(STDIN, ‘:encoding(utf8)’);
binmode(STDOUT, ‘:encoding(utf8)’);
binmode(STDERR, ‘:encoding(utf8)’);

在实际的情况下,我只是通过STDOUT进行print,所以,我只要设置STDOUT的binmode即可。
在具体的情况下,encoding的参数可以是gbk,big5等。
来源于kueruntu朋友。 
Q00038:
使用iconv转换字符编码时,由于各种编码混杂在一起,偶尔iconv会转换出错,有什么解决办法没有?
A00038:
iconv 加个 -c 参数可以即使转码出错也不中断。谢谢谢宇恒的补充。
Q00039:
打开2G以上文件的C/C++程序的编译选项是什么?
A00039:

-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE

 
Q00040:
在使用C++做PHP扩展时,经常按照网上的教程进行设计,发现会出现如下的错误:

PHP Warning: dl(): Unable to load dynamic library ‘/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/anticontraband.so’ – /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/anticontraband.so: undefined symbol: __gxx_personality_v0 in /opt/antispam/AntiContraband/src/php-5.2.5/ext/anticontraband/anticontraband.php on line 5

但是使用nm命令查看这个动态库时,发现有了这个__gxx_personality_v0的定义,但是为什么出错呢?
A00040:
Google了一下(Google的确是好东西,对于一个搞技术的人来说是不可多得的朋友),发现是原因是stdc++库的问题没有加载,解决方法原文如下:

if you search the archives you’ll find the answer.

configure php
edit Makefile – add “-lstdc++’ to the EXTRA_LDFLAGS line
make
make install

php should now load up sablot ok.

如果想在config.m4下进行修改,可以使用

CPPFLAGS=”-lstdc++”

PHP_ADD_LIBRARY(stdc++, “”, EXTRA_LDFLAGS)

PHP_ADD_LIBRARY(stdc++, “”, ANTICONTRABAND_SHARED_LIBADD)
PHP_SUBST(ANTICONTRABAND_SHARED_LIBADD)

若要想了解更多config.m4的方法见——Linux下C++实现PHP扩展中级应用。 
Q00041:
我使用rxvt时,老是有些乱码,或者界面也很难看,有什么好的配置方法没有?
A00041:
这里推荐使用rxvt的unicode模式,名字叫urxvt,可以解决乱码问题。如果想有美化的界面,这里推荐一种配置:

urxvt -bg black -fg gray -ls +sb -sl 50000 -geometry 100×32 -fn ‘-*-fixed-medium-r-normal-*-14-*,-*-simsun-medium-r-normal-*-14-*-*-*-*-*-iso10646-1′ -fb ‘-*-fixed-medium-r-normal-*-14-*,-*-simsun-medium-r-normal-*-14-*-*-*-*-*-iso10646-1′

比原来初始的配置漂亮多了。感谢谢宇恒同学的帮助 
Q00042:
我发现Linux下一些常用命令没有,比如unrar、dos2unix、uuencode等,而我该怎么安装相应的lib?
A00042:
你能从rar官方找到相对应平台的版本:Unrar;
dos格式和Unix格式转换的命令可以使用yum来查找并安装:

yum search dos2unix
yum search unix2dos

关于uuencode命令是一个专门的lib,所以需要安装Sharutils库:

yum search sharutils
sudo yum install sharutils

详情见GNU Sharutils。 
Q00043:
redhat开源发行版本Fedora自带totem播放器一直播放不了rm格式,连mp3、wma、wmv和mpeg等音频、视频都播放不了,一直如同鸡胁,到底能不能用啊?
A00043:
Redhat/Fedora一直是Linux世界的精神领袖,相比其他linux发行版本而言,从来不带一些受限的驱动以及一些闭源的软件放在安装版本中,所以在发行版本中自带totem没有解码是播放不了rm格式的。
其实无论在那个版本都能用的(无论是totem还是totem-xine),关键的一点,需要安装的都安装了,就不会有问题了。,这个播放不了的问题主要是解码问题。
首先到Mplayer Codecs下载all-20071007.tar.bz2和rp9codecs-win32-20050115.tar.bz2,解压之后,把这些文件全部放在 /usr/lib/codecs 文件夹中,没有该文件夹就创建一个。
然后使用ldconfig重新加载一下lib。如果需要firefox中显示,还需要安装 totem-mozplugin ,如果实在不知道有哪些安装的话,可以使用yum的模糊搜索:

yum search totem
yum search gstreamer
yum search ffmpeg
yum search codecs

 
Q00044:
我平时正常一般使用DBD::mysql连接mysql,突然有一天连接mysql出了问题,提示错误:

Client does not support authentication protocol requested by server

貌似我mysql客户端出现了一些问题。
A00044:
查了一下原因,应该是password验证问题,可以使用一种办法暂时解决这个问题,就是将现在加密方式的密码更改成以前4.1之前的加密方式的密码,修改办法如下:

mysql> SET PASSWORD FOR cnangel@localhost=OLD_PASSWORD(‘yahoo’);

这样就能连接上了。 
Q00045:
我觉得vim里面Ctrl+w与Ctrl+i结合起来查找程序当中各个变量的定义时非常好用,但是我查找一个C++的定义时,有时侯这种方法找得并不准确,甚至没有结果,有没有一个很好的办法加强这种查找定义的效果?
A00045:
使用tags命令,命令如下:

>mkdir ~/.vim
>ctags -o ~/.vim/tags.gcc -R –c++-kinds=+p –fields=+iaS –extra=+q -h .h.H.hh.hpp.hxx.h++.inc.def. –langmap=c++:.c++.cc.cp.cpp.cxx.h.h++.hh.hp.hpp.hxx.C.H. /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include
>ctags -o ~/.vim/tags.include -R –c++-kinds=+p –fields=+iaS –extra=+q /usr/include

一般针对gcc而言,其标准的路径一般为 /usr/lib/gcc/ixxx-xx-*ux-gnu/x.x.x/include 目录或者 /usr/include/c++/x.x.x ,如果要包含比较全的头文件,则指向到系统的include目录,这样将指向的目录生成一个索引tags,可以将这个tags用于vim的查找。我们只需要在用户根目录中的.vimrc文件中加入:

set tag+=~/.vim/tags.gcc

有时侯tags非常的大,对于一次性加载会导致vim查找性能问题,我们可以采用一种激活的方式进行加载,在.vimrc中添加:

autocmd BufReadPost ~/MLPlatform/* set tags+=~/.vim/tags.MLPlatform

上面的意思是说明,当在~/MLPlatform目录下时,这时候激活~/.vim下的tags.MLPlatform,当然这个tags文件要事先用上面的命令生成好。
这些以上做好之后,就可以使用Ctrl+w和Ctrl+]进行查找了。如果找到的东西仍然不是你想要的结果,可以使用 :tprev 和 :tnext 来进行上一个和下一个的查找哟! 
Q00046:
如何识别CPU的个数?
A00046:
双核CPU和超线程CPU在性能上还是有较大的差别。在测试HLFS性能的时候,发现超线程的双核比物理的双核性能要差很多。
判断服务器CPU个数以及Core个数的小常识
# 在Linux系统上,通过查看/proc/cpuinfo文件。
格式说明:
* processor字段表示逻辑CPU的个数
* physical id字段表示物理CPU的个数,相同的physical id表示同一个CPU
* siblings字段表示该物理CPU下的逻辑CPU的个数
* cpu cores字段表示该物理CPU下的core的个数
* 如果逻辑CPU的个数>core的个数,说明CPU采用了超线程(Hyper thread)技术,在flags字段中用ht表示
# FreeBSD下是cat /var/run/dmesg.boot | grep CPU
Q00047:
想把某一个命令的man信息全部抓下来并转成pdf?
A00047:

man -t sort | ps2pdf – > man_sort.pdf

 
Q00048:
使用CVS时,老是Check不出来,我已经设置了

export CVSROOT=vault.yahoo.com:/CVSROOT

提示错误如下:

[lijunlia@rsdev4 ~]$ cvs co yahoo/libraries/ydm/src/ydm/classify/loglinear/
connect to address 192.168.1.68: Connection refused
Trying krb4 rsh…
connect to address 192.168.1.68: Connection refused
trying normal rsh (/usr/bin/rsh)
vault101.dt.corp.yahoo.com: Connection refused
cvs [checkout aborted]: end of file from server (consult above messages if any)

A00048:
解决办法就是设置一下CVS_RSH变量为ssh方式,附上原文:

CVS (Concurrent Versions System)

A CVS server is now installed on cvs.cs.arizona.edu. CVS (Concurrent Versions System) is a tool for version control. This server can be used by faculty, staff and students within the department. If you need a project area on this set up, you should use the web based group/CVS application process available at http://www.cs.arizona.edu/computing/services.
You can use the :pserver: method to obtain anonymous read only access to a limited number of project areas.

These areas are ‘test’, ‘algovista’, ‘sr’, and ‘icon’.

For example:

% cvs -d
:pserver:anonymous@cvs.cs.arizona.edu:/cvs/test login
% cvs -d
:pserver:anonymous@cvs.cs.arizona.edu:/cvs/test checkout .
% cvs -d
:pserver:anonymous@cvs.cs.arizona.edu:/cvs/test logout 

% cvs -d
:pserver:anonymous@cvs.cs.arizona.edu:/cvs/sr login # etc.
% cvs -d
:pserver:anonymous@cvs.cs.arizona.edu:/cvs/icon login # etc.

The password for ‘anonymous’ is any non null character string.

You can use the :ext: method together with ssh to obtain read-write access to your project areas. To do this, you need to set the environment variable ‘CVS_RSH’ to ‘ssh’.

For example, on a Linux machine, where ‘username’ is your user name, and ‘project-name’ is your project name, you can do at a shell prompt:

% setenv CVS_RSH ssh # in csh or tcsh.

or

% CVS_RSH=ssh # in sh or bash.
% export CVS_RSH

% cvs -d \
:ext:username@cvs.cs.arizona.edu:/cvs/cvs/project-name checkout .

The :ext: method requires that you have an account on the cvs server. If you have an account on lectura, you will have an account on the cvs server.

There are a number of project areas currently on the cvs server. These can be accessed on the unix machines in the department via the path /cs/cvs/project-name.

Note that files checked into cvs via the ext method are subject to the current umask. If you want to make your checked in files readable and writable by your group, set your umask to 2, before checking files in.

If an account needs to be set up on the cvs server for read/write access, or if an additional project area under cvs needs to be set up, see the link at the top of this page.

Complete documentation on CVS can be found at:

CVS Homepage http://www.cvshome.org

 
Q00049:
怎么改变memcached的value的默认值,它的默认值大小为1M,太小了,满足不了我的要求。
A00049:
经常多方查看官方文档、与作者进行沟通和查看memcached的源代码等一些帮助,知道在memcached源码中有一个slabs.c文件,用vim打开,第27行有一句:

#define POWER_BLOCK 1048576

修改成:

#define POWER_BLOCK 1048576 * 8

这样表示每个slabs为8M,但是这样比较浪费内存,不建议这样使用。 
Q00050:
从xpm官方站点(http://koala.ilog.fr/lehors/xpm.html)下载出来的包,没有Makefile,只有iMakefile和Makefile.noX,该怎么办才能完成xpm的安装呢?特别是这个包是1999年的,最新的系统都不支持了,imake也是商业版本的。我怎么用xpm做开发?
A00050:
新的系统支持imake或者xmkmf都可以完成安装,老系统估计很难找到对应的imake或者xmkmf,不过本身系统已经安装了其库文件libXpm.so,只需要将源码中的几个头文件拷贝到/usr/X11R6/include里面即可。另外利用xpm做开发的时候,检查/usr/X11R6/lib目录是否有相关libXpm.so和libXpm.so.xx,如果没有libXpm.so,则需要做一下软连接。

ln -sf /usr/X11R6/lib/libXpm.so.xx /usr/X11R6/lib/libXpm.so
ln -sf /usr/X11R6/lib/libX11.so.xx /usr/X11R6/lib/libX11.so

 

 

Q00051:
使用evolution收发邮件:按照系统用户手册中的设定完,进入软件,在单击“收件箱”,我想收点邮件,但是工具栏上“发送/接收”按钮始终是灰色的,按不了,我以前用过fedora上linux的evolution,没碰到过这种情况。反复设置了几次,还是不行。使用evolution收发邮件失败了。
A00051:
启动程序后要在菜单里点一下“联机工作”

 

Q00052:
使用scp的时候出现如此信息该怎么办?

[lijunlia@rsdev4 ~]$ scp ./works/fakedownload/lib/DICDataFetch.pm web82.search.cnb:
stty: stdin isn’t a terminal
DICDataFetch.pm 100% 6736 6.6KB/s 00:00

A00052:

It could mean that you have a password change policy in place, but because SSH is
being called via SCP it cannot change the PW. You could also get this if your
.profile (or .bash_profile) has stty commands (e.g., stty erase). In other words,
it’s saying that you need a TTY device (generally a shell session) but because of
how SSH is being called it doesn’t have one.

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

Linux应用心得已经在《My Study》中发布了二期,虽然以FAQ形式的出现,但是由于Linux应用的突飞猛进,很多的问答已经变得很苍白,但是我希望还是能够体现Linux中一种自由、开放的精神,让更多的人得到帮助。
如果你对太多的A、Q 不知所措,可以Ctrl+F查找你所需要的问题。

Q00105:
在Linux平台上,大量出现”too many open files”的error信息,如何解决?
A00105:
这个错误产生的原因是操作系统对同时能打开的文件句柄数量有限制,使用”ulimit -a”命令可以查看限制的大小,默认为1024。

$ ulimit -a
open files (-n) 1024
解决办法如下:
(1)修改/etc/security/limits.conf
在最底下增加一行
* – nofile 65535
(2)修改/etc/pam.d/login
在最底下增加一行
session required /lib/security/pam_limits.so
(3)使用命令logout登出后再login,使用命令ulimit -a看看open files是不是改变了。

Q00106:
在使用PHP中Cookie的过程里,发现如论如何也不能使用setcookie这个函数,返回值一直为0,为什么setcookie函数会失效呢?
A00106:
往往神秘的现象背后都是有产生神秘现象的条件,这个也不例外。
经过调试可以发现,单条session的cookie可以正常运转,但是一旦集成,则失效,检查php的配置文件php.ini文件,发现这个文件根本不存在。于是从php源代码中将php.ini-recommended拷贝到配置路径下为php.ini,发现一切正常,神秘现象消失。

Q00107:
在gnome的环境中,eclipse按钮无法响应,怎么解决?
A00107:
这是由于gtk的问题,在
/usr/bin/eclipse启动脚本中
加入

export GDK_NATIVE_WINDOWS=1

Q00108:
如何解决 Freemind 中文字体乱码?
A00108:
由于 Freemind 要应用到 Java 运行时环境,显示中文字体乱码是由于 JRE 的字体造成的,所以更改 JRE 的字体即可。
找一个可用于中文显示的字体。比如: wqy 字体,我这里采用正黑。
确认字体已经安装于系统。我的系统增黑字体安装于:

/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc
找到 JRE 的字体目录,位于:
/usr/lib/jvm/java-6-sun/jre/lib/fonts
如果没有,则创建该字体目录:
$ cd /usr/lib/jvm/java-6-sun/jre/lib/fonts/
$ mkdir fallback
$ ln -s /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc wqy-zenhei.ttc
$ mkfontdir
$ mkfontscale
$ fc-cache

末了,重启 Freemind 即可。

Q00109:
在Eclipse中编写Java代码时,用到了BASE64Decoder,import sun.misc.BASE64Decoder;可是Eclipse提示:

Access restriction : The type BASE64Decoder is not accessible due to restriction on required library /usr/java/default/jre/lib/rt.jar
Access restriction : The constructor BASE64Decoder() is not accessible due to restriction on required library /usr/java/default/jre/lib/rt.jar
搞不懂是为什么?
A00109:
解决方案如下:
只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。

Q00110:
在RHEL 5.2中,使用vsftpd,如何根据防火墙设置了被动模式?使用了pam验证,发现输入了用户名称和密码怎么也通不过其验证,这个是怎么回事呢?
A00110:
首先,我们需要检查vsftpd安装的正确性,一般rpm或yum安装都无特殊问题,但是如果是编译安装,则需要注意源码中 (1)配置文件的路径:

defs.h:#define VSFTP_DEFAULT_CONFIG “/etc/vsftpd/vsftpd.conf”
(2)安装的位置,默认为/usr/local/sbin,很容易造成使用原先的vsftpd问题。
(3)lib64的问题,如果使用x86_64位系统,还需要注意脚本vsf_findlibs.sh找到lib的位置信息。
(4)libpam的问题,一般密码验证有问题都会出现在这,使用:

$ ldd vsftpd
libpam.so.0 => /lib64/libpam.so.0 (0x00002aba248b0000)
libdl.so.2 => /lib64/libdl.so.2 (0×0000003794600000)
libnsl.so.1 => /lib64/libnsl.so.1 (0×0000003797600000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x000000379a600000)
libcap.so.1 => /lib64/libcap.so.1 (0×0000003798200000)
libc.so.6 => /lib64/libc.so.6 (0×0000003794200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003793e00000)
看libpam.so.0是否存在,如果不存在的话(一般RHEL5),需要重新安装pam库,才能将pam库链接编译到vsftpd中去。
接着,配置vsftpd.conf,整个vsftpd.conf如下所示:
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
listen=YES
listen_port=21
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/vsftpd.user_list
user_config_dir=/etc/vsftpd/vsftpd_user_conf
pasv_enable=YES
pasv_address=xxx.yyy.zzz.nnn
pasv_min_port=62007
pasv_max_port=62009
virtual_use_local_privs=YES
tcp_wrappers=YES

根据配置文件,需要(1)增加虚拟用户:
$ useradd vuser -s /sbin/nologin
(2)设置虚拟用户中ftp用户,这里使用Berkeley DB的工具来生成用户名和密码如下:
db_load -T -t hash -f ftpusers /etc/vsftpd/vsftpd_login.db
其中ftpusers为文本,内容大概形式如下:
$ cat ftpusers
user1
password1
user2
password2
cnangel
cnangel

(3)设置用户登录路径:
$ cat /etc/vsftpd/vsftpd.user_list/cnangel
local_root=/home/vuser/cnangel
write_enable=YES
local_umask=022
chmod_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES

最后在/etc/pam.d增加验证配置文件vsftpd(/etc/pam.d/vsftpd),内容如下:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
如果使用x86_64位系统,还需要注意库文件pam_userdb.so的路径问题。
(4)最后连接ftp进行测试:
[cnangel@cadev12 ~]$lftp 10.19.86.8 -u cnangel
口令:
lftp cnangel@10.19.86.8:~> debug
lftp cnangel@10.19.86.8:~> set ftp:passive-mode on
lftp cnangel@10.19.86.8:~> ls
—- 正在连接到 10.19.86.8 (10.19.86.8) 端口 21
<— 220 Welcome to Cnangel FTP service.
—> FEAT
<— 211-Features:
<— EPRT
<— EPSV
<— MDTM
<— PASV
<— REST STREAM
<— SIZE
<— TVFS
<— UTF8
<— 211 End
—> OPTS UTF8 ON
<— 200 Always in UTF8 mode.
—> USER cnangel
<— 331 Please specify the password.
—> PASS XXXX
<— 230 Login successful.
—> PWD
<— 257 “/”
—> PASV
<— 227 Entering Passive Mode (10,19,86,144,194,197).
—- 正在建立数据连接到 (10.19.86.8) 端口 49861
—> LIST
<— 150 Here comes the directory listing.
<— 226 Directory send OK.
—- 关闭数据连接
-rw-r–r– 1 cnangel users 0 Dec 14 04:46 aa
-rw-r–r– 1 cnangel users 255251 Dec 14 04:45 king02.pdf
lftp cnangel@10.19.86.8:/> exit
—> QUIT
—- 关闭控制连接
[cnangel@cadev12 ~]$
看看是否还有问题。

Q00111:
自己编译svn上传代码是报这样的错误:

svn: SSL is not supported
如何让让svn支持ssl?
A00111:
subversion对https链接的支持集成在neon这个组件中。可以下载了一个最新版的neon,用下面的指令编译

./configure –with-ssl -with-zlib –enable-shared –enable-static –prefix=/usr

这样加入ssl的支持,可以使用neon-config程序来确认编译成功:
[cnangel@localhost ~]$neon-config –libs
-lneon -lz -L/usr/kerberos/lib -L/usr/kerberos/lib64 -lssl -lcrypto -lgssapi_krb5 -lkrb5 -lcom_err -lk5crypto -lresolv -ldl -lz -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lresolv -lexpat

Q00112:
如何在shell中将汉字urlencode化?
A00112:
这里有很多种解决办法:
(1)调用perl

echo -n “中国” | perl -MURI::Escape -e “print uri_escape(<>);”
(2)调用php
php -r “echo rawurlencode(‘$(sed “s/’/\\’/g” <<< “中国”)’);”
(3)其它
echo -n “中国”|od -An -tx1|tr ‘ ‘ %
上面三种结果都是%e4%b8%ad%e5%9b%bd。

Q00113:
在链接libmysqlclient的时候,发现出现如下错误:

/usr/lib64/mysql/libz.a(adler32.o)(.text+0×0): In function `adler32′:
/export/home/my/tmp-200903301116-5.1.34-19266/rpm/BUILD/mysql-5.1.34/zlib/adler32.c:66: multiple definition of `adler32′
/usr/lib64/mysql/libmysqlclient.a(adler32.o)(.text+0×0):/export/home/my/tmp-200903301116-5.1.34-19266/rpm/BUILD/mysql-5.1.34/zlib/adler32.c:66: first defined here
/usr/lib64/mysql/libz.a(adler32.o)(.text+0×340): In function `adler32_combine’:
/export/home/my/tmp-200903301116-5.1.34-19266/rpm/BUILD/mysql-5.1.34/zlib/adler32.c:138: multiple definition of `adler32_combine’
/usr/lib64/mysql/libmysqlclient.a(adler32.o)(.text+0×340):/export/home/my/tmp-200903301116-5.1.34-19266/rpm/BUILD/mysql-5.1.34/zlib/adler32.c:138: first defined here
/usr/lib64/mysql/libz.a(compress.o)(.text+0×0): In function `compress2′:
/export/home/my/tmp-200903301116-5.1.34-19266/rpm/BUILD/mysql-5.1.34/zlib/compress.c:28: multiple definition of `compress2′
/usr/lib64/mysql/libmysqlclient.a(compress.o)(.text+0×0):/export/home/my/tmp-200903301116-5.1.34-19266/rpm/BUILD/mysql-5.1.34/zlib/compress.c:28: first defined here
/usr/lib64/mysql/libz.a(compress.o)(.text+0xf0): In function `compress’:
/export/home/my/tmp-200903301116-5.1.34-19266/rpm/BUILD/mysql-5.1.34/zlib/compress.c:68: multiple definition of `compress’
/usr/lib64/mysql/libmysqlclient.a(compress.o)(.text+0xf0):/export/home/my/tmp-200903301116-5.1.34-19266/rpm/BUILD/mysql-5.1.34/zlib/compress.c:68: first defined here

该如何解决?
A00113:
从libmysqlclient.a中删除所有有问题的.o文件即可:
# cp -p /usr/lib/mysql/libmysqlclient.a /usr/lib/mysql/libmysqlclient.a.orig
# ar d /usr/lib/mysql/libmysqlclient.a adler32.o compress.o crc32.o deflate.o gzio.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o
原文见:http://www.root0.net/php/index.html#Some_problems

Q00114:
在x86_64平台下,使用jni的时候发现调用jni出现如下错误:

libextractorJni-1.0.0.so.1.0.0: cannot open shared object file: No such file or directory (Possible cause: architecture word width mismatch)
到底怎么解决呢?
A00114:
这个变态的问题发现java的jdk版本是32位所致,安装x86_64位的jdk即可。

Q00115:
刚要删除一个tmp目录下临时文件
由于tmp目录下的临时文件数目太多

rm -rf tmp/*执行的结果是
bash: /bin/rm: Argument list too long
A00115:
解决办法如下:
ls | xargs -n 10 rm -fr

Q00116:
编译vim的时候,指定configure选项:

./configure –prefix=$HOME/opt/usr –enable-multibyte –enable-cscope –enable-perlinterp
发现执行后,出现如下错误:
checking –with-tlib argument… empty: automatic terminal library selection
checking for tgetent in -lncurses… no
checking for tgetent in -ltermlib… no
checking for tgetent in -ltermcap… no
checking for tgetent in -lcurses… no
no terminal library found
checking for tgetent()… configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with –with-tlib.

检查ncurses是否安装:rpm -q ncurses发现ncurses已经安装过了,如何解决这个configure配置问题呢?
A00116:
安装ncurses-devel或termcap-devel包即可,或者编译安装ncurses软件包。

Q00117:
如果要清空memcache的items,常用的办法是什么?
A00117:
假设memcached运行在本地的11211端口,那么跑一下命令行:

$ echo ”flush_all” | nc localhost 11211
注:flush并不会将items删除,只是将所有的items标记为expired。

Q00118:
在使用gcc编译时,加上了一些测试的选项:

-fprofile-arcs -ftest-coverage
然后编译时,发现出现如下错误:
/usr/lib/gcc/i686-redhat-linux/4.4.4/libgcov.a(_gcov.o): In function `__gcov_init’:
(.text+0×160): undefined reference to `__stack_chk_fail_local’
/usr/lib/gcc/i686-redhat-linux/4.4.4/libgcov.a(_gcov.o): In function `gcov_exit’:
(.text+0x148e): undefined reference to `__stack_chk_fail_local’
/usr/bin/ld: .libs/libcpssqclient.so.0.0.0: hidden symbol `__stack_chk_fail_local’ isn’t defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
应该如何解决呢?
A00118:
如果是gcc,则在CFLAGS选项上加上:
-fstack-protector -fstack-protector-all
如果是g++,则在CXXFLAGS选项上加上:
-fstack-protector -fstack-protector-all

Q00119:
使用SSH-Batch或者crontab的时候sudo经常会碰到这个情况:

sudo: sorry, you must have a tty to run sudo
如何解决?
A00119:
修改一下sudo的配置就好了
vi /etc/sudoers (最好用visudo命令)
注释掉 Default requiretty 一行
#Default requiretty
意思就是sudo默认需要tty终端。注释掉就可以在后台执行了。

Q00120:
在安装FreeBSD 8.1的Linux二进制兼容包的时候,发现安装不了,提示错误:

linux_base-f10-10_2 linuxulator is not (kld)loaded.
*** Error code 1

如何解决呢?
A00120:
在安装过程中,先忽略(不安装)这个兼容包。等FreeBSD系统安装好,初始化成功后,我们使用sysinstall进行安装,不过使用sysinstall安装之前,需要执行(见:http://www.freebsd.org/doc/handbook/linuxemu-lbc-install.html):
kldload linux
然后使用命令sysintall:Configure => Packages => CD/DVDs => linux => linux_base-xxx
安装即可。

Q00121:
使用openssh、SSH-Batch等工具的时候发现出现如下错误:

sudo: sorry, you must have a tty to run sudo

该怎么解决呢?
A00121:
使用命令visudo或者编辑/etc/sudoers(不建议直接编辑这个文件),注释或去掉:
Defaults requiretty
这一行即可。

Q00122:
GDB跟到某个程序语句,该语句里有变量nTmp,使用print nTmp查看其变量值时,GDB提示:

No symbol “nTmp” defined in current context.
A00122:
出现此问题的原因可能是编译时局部变量被优化到寄存器里了,此时是无法在内存中查看变量的值的。
解决方法:
CFLAGS=-gstabs+
参见“Debuging with GDB”8.2节:
Another possible efect of compiler optimizations is to optimize unused variables out of
existence, or assign variables to registers (as opposed to memory addresses). Depending
on the support for such cases o ered by the debug info format used by the compiler, gdb
might not be able to display values for such local variables. If that happens, gdb will print
a message like this:
No symbol “foo” in current context.
To solve such problems, either recompile without optimizations, or use a di erent debug
info format, if the compiler supports several such formats. For example, gcc, the gnu
C/C++ compiler usually supports the ‘-gstabs+’ option. ‘-gstabs+’ produces debug info
in a format that is superior to formats such as COFF. You may be able to use DWARF
2 (‘-gdwarf-2’), which is also an e ective form for debug info.

Q00123:
ssh使用选项-X到一台服务器上的时候,发现xclock显示不了始终,提示:

Error: Can’t open display:或
Failed to open the X11 display!
到底怎么才能显示呢?
A00123:
修改/etc/ssh/sshd_config,将X11Forwarding设置为yes即可。

Q00124:
使用sudo的时候发现sudo用户使用不了,/etc/sudoers配置文件也没有权限的配置错误,但root用户是可以使用sudo的,sudo的用户提示如下错误:

sudo: pam_authenticate: Module is unknown
该如何解决?
A00124:
这个是某个版本sudo的bug,目前最好的方式是更新版本或者会滚版本进行解决,建议使用对应版本的二进制包,而不要使用最新源码的编译方式。

Q00125:
使用mysql客户端连接mysql数据库,发现出现错误:

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/home/mysql/mysql.sock’ (13)
怎么解决呢?
A00125:
这个是由于mysql的datadir目录没有权限读写所造成的,一般赋予权限即可:
sudo chown -R mysql.mysql /home/mysql
sudo chmod 0755 /home/mysql
看看是不是可以了呢?

Q00126:
修改程序崩溃时产生core文件的大小时:

ulimit -c unlimited
发现提示:
bash: ulimit: core file size: cannot modify limit: Operation not permitted
如何解决?
A00126:
检查PAM的配置文件:/etc/security/limits.conf以及/etc/security/limits.d/目录权限是否正确,一般文件是644权限。

发表评论

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

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