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:
对于独立显卡的机器,首先配置好机器显示的分辨率,我这里宽屏配置的分辨率是1280x800,首先在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:
这种原因一般是由于0x10和0x13,简单点说是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 100x32 -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.

Monthly Archives

Pages

Powered by Movable Type 7.7.2

About this Entry

This page contains a single entry by Cnangel published on April 22, 2007 9:45 PM.

svchost.exe占CPU 100%的解决方法 was the previous entry in this blog.

同室的他 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.