Linux应用心得
寫這篇文章是為了方便自己,也同時為了方便他人。
目前的開源軟件盛行,很多的README文檔都是以英文的形式出現(xiàn),很多懶人不愿意去讀此類的文章,所以遇到問題也不會知道怎么去解決。
在這之前,《linux寶庫》的站長陳緒先生的《linux一句話》已經(jīng)概括得很經(jīng)典,而我追求的是linux中的FAQ形式,只要你有心,沒有解決不了的問題。
如果你對太多的 A、Q 不知所措,可以Ctrl+F查找你所需要的問題。
Q00001:
當修改/etc/fstab文件時,因為修改錯誤而無法啟動,這時進入的急救模式只是可讀狀態(tài),該怎么解決此類問題?
A00001:
使用mount重載系統(tǒng)分區(qū),使其掛載為可寫狀態(tài),然后修改/etc/fstab文件,具體掛載方式為:
mount -o mount,rw /dev/hda1 /mnt
或
mount -o file_mode=0777,dir_mode=0777
Q00002:
有時候換了環(huán)境或者網(wǎng)絡,發(fā)現(xiàn)sendmail與sm_client郵件發(fā)送系統(tǒng)啟動很慢,雖然能啟動成功,但是啟動的速度實在讓人受不了,怎么sendmail和sm_client服務解決啟動慢的問題?
A00002:
類似這樣的應該是/etc/hosts文件出現(xiàn)解析問題,不排除其他文件有問題,這里/etc/hosts文件的原始內(nèi)容如下:
# that require network functionality will fail.
127.0.0.1 localhost localhost.localdomain
Q00003:
在有些播放器上,有時候發(fā)現(xiàn)播放列表上的字符是亂碼,解決播放列表亂碼的問題是否有統(tǒng)一的格式呢?
A00003:
估計各個播放器的字符編碼方式不一樣,目前很難有統(tǒng)一的字符編碼方式來處理這類問題,比如常見的xmms可以采用加載windows字體的方式獲取漢字編碼解決,具體方法把WINDOWS目錄Fonts目錄下的simsun這種字體拷貝到LINUX的 這個目錄下/usr/share/fonts/zh_CN/TrueType,然后重起字體服務,fedora8版本以下解決方案如下:
fc-cache -f -v
如果沒有xfs服務,請先安裝xfs:
yum install xfs xfs-devel
再用右鍵單擊xmms播放工具的任何地方
會看到一個"選項",然后選擇"功能設定"選擇"fonts"
然后設置剛才考過來的字體,注銷系統(tǒng)再播放機即可正常使用,對于高版本的xmms記得設置字符編碼。
對于音質(zhì)比較好的amarok,需要進行下載一個軟件包mutagen用來解決amarok播放mp3文件名亂碼問題,具體方法如下:
安裝必要的軟件
>sudo apt-get install python-mutagen
or
>yum search mutagen
>sudo yum install python-mutagen -y
把存在NTFS分區(qū)上的音樂文件軟連接到ext2或ext3分區(qū)
>ln -s /u/music /sun/music
轉(zhuǎn)換標簽格式,運行mid3iconv命令:
>cd /u/music
>find . -iname "*.mp3" -execdir mid3iconv -e GBK {} \;
Q00004:
不知道有人使用過在linux下的無線上網(wǎng)"業(yè)務"沒有?在以前,還沒有GUI的界面驅(qū)動的時候,常常使用./configure來make install,而隨著rpm和deb的盛行,安裝變簡單了,雖然簡單,但是無線仍然不好使,老是激活不了,針對IPW2200的網(wǎng)卡和FC系列的操作系統(tǒng),我這里給幾種解決辦法:
A00004:
首先在ipw2200.sourceforge.net下載相關(guān)驅(qū)動:
使用shell激活:
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
注意:目前的無線密鑰驅(qū)動好像不支持WPA-PSK和WPA2,如,僅僅支持WEP,所以選擇密鑰的時候一定要注意。
另外,驅(qū)動也可以找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用的時候發(fā)生"crontab: temp file must be edited in place"錯誤的時候的解決辦法。
Q00006:
當vim一個文件內(nèi)容顯示一團亂碼的時候,你會不知所措,根本不知道采用了什么編碼,這時候我們利用我們聰慧的頭腦去大膽嘗試,一切問題會迎刃而解。
A00006:
首先,判斷Vim的默認打開編碼,進入命令行模式:
發(fā)現(xiàn)為utf8,把終端的字符編碼和vim編碼格式弄成一種類型;
vim文件,發(fā)現(xiàn)內(nèi)容仍然是一團糟,嘗試使用:
:set encoding=utf8
然后,vim文件,文件內(nèi)容仍然是亂碼,強制指定:
:edit ++enc=utf8
vim文件發(fā)現(xiàn)一切明了。
fileencodings 參數(shù)是告訴 vim 嘗試解碼的多種可能編碼,vim 會一個一個試著解碼,直到試對為止,然后會將試出來的編碼記錄到 fileencoding 里面,可以顯示 fileencoding 就能知道現(xiàn)在 vim 用什么來解碼這個文件了。如果想將文件用另外一種編碼"另存為",可以修改 fileencoding 然后 :w 。
termencoding 參數(shù)是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
"環(huán)境變量 LANG(使用的語言)
"環(huán)境變量 LC_CTYPE(使用的內(nèi)部編碼)
"Vim 選項 encoding(Vim 的內(nèi)部編碼)
"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
"搜索關(guān)鍵字高亮
set hls
"搜索是對不全區(qū)分大小寫
"set ic
"但現(xiàn)在要區(qū)分
"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為可用狀態(tài)
set backupcopy=yes
"設置使用screen vim時,因為錯誤的按鍵使屏幕不再閃爍
set vb t_vb=
"設置折疊模式
set foldcolumn=4
"光標遇到折疊,折疊就打開
set foldopen=all
"移開折疊時自動關(guān)閉折疊
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>
最后謝謝 謝宇恒同學給予的幫助。
后補:關(guān)于vim編譯
建議使用vim7.0或以上版本,源碼編譯時參數(shù)可以選擇,比如:
./configure --prefix=/usr --enable-multibyte
配置選項的含義:
--enable-multibyte
我們強烈推薦你啟用該選項(雖然它是可選的),因為它使得 Vim 可以支持使用多字節(jié)字符編碼的文件,在一個使用多字節(jié)字符集的 locale 上,這是必需的
Q00007:
利用mail命令發(fā)送附件,真的很難么?
A00007:
不難,需要你的服務器端支持uuencode編碼就可以。比如利用mail命令發(fā)送一個壓縮包
可以man uuencode,發(fā)現(xiàn)有這么一條:
tar cf - src_tree | compress | uuencode src_tree.tar.Z | mail sys1!sys2!user
Q00008:
怎么利用date獲得昨天的日期?
A00008:
在BSD平臺上:
在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:
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權(quán)限最好設置為0711權(quán)限,而密鑰所在文件是0400權(quán)限。
2,如果指定要freebsd不使用identity.pub的公鑰,而要使用id_dsa.pub的公鑰,除了 -i 指定私鑰辦法解決外,還可以使用 -oProtocol=2 來解決問題,特別scp的時候。
Q00010:
我在linux下可以使用命令查看通訊進程,如果發(fā)現(xiàn)有死鎖的進程,我可以使用kill命令殺掉,但是我如果不得不工作的windows平臺下,怎么殺掉一個進程呢?比如我想殺掉占用80端口的進程怎么辦呢?
A00010:
長期在linux下工作的朋友,對Windows也非常陌生,對于剛接觸到windows的朋友來說,不知道什么進程是占用了什么端口是個非常痛苦的事情,盡管windows任務管理器提供了比較豐富的功能,但是習慣于命令式的人實在是覺得“拗手”吧!查看80端口PID號碼:
查出 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,于是殺掉這個端口,也就是關(guān)閉80這個端口號,運行命令:
ntsd -c q -p 3880
即可以關(guān)閉80端口了。
Q00011:
經(jīng)常使用Linux機器,發(fā)現(xiàn)mail功能不好使,進入/etc/init.d目錄,發(fā)現(xiàn)根本沒有此目錄,使用:
確定系統(tǒng)已經(jīng)安裝上mail,但是我怎么將mail作為守護進程運行呢?
A00011:
如果要sendmail處理發(fā)送來的信件,必須有一個守護進程在運行。sendmail守護進程就是帶有特殊標志位的sendmail程序。這個守護進程是被/etc/init.d/mail腳本在系統(tǒng)啟動的時候自動啟動的。
在此腳本中用來啟動sendmail的命令如下:
/usr/lib/sendmail -bd -q15m
-bd標志是使sendmail作為一個守護程序運行。-q15m標志使sendmail fork出一個子守護進程來每隔15分鐘處理一次消息隊列。
如果沒有對應的目錄,我相信寫一個mail的守護進程應該不成問題了吧。
Q00012:
我的本子的顯卡型號是ATI MOBILITY RADEON X700,每次嘗試一個Linux發(fā)行版,都為顯卡驅(qū)動的安裝傷腦筋,這里整理筆記如下,希望能給遇到類似的同學一點點小幫助。
A00012:
首先是去http://www.ati.com下載你計算機專用顯卡型號的驅(qū)動,比如我的顯卡驅(qū)動為:ati-driver-installer-8.40.4-x86.x86_64.run,32位機器或者64位機器通用這個顯卡驅(qū)動,所以不必要擔心自己下錯了。
再次,需要xorg和相關(guān)驅(qū)動,一般發(fā)行版本自帶,老的發(fā)行版本沒有的話,自己google一下。
接著,安裝ati驅(qū)動,直接運行可能會找不到相關(guān)的內(nèi)核,所以需要以下形式安裝:
找到我的對應的發(fā)行版本: Fedora/F7
緊接著:
./ati-driver-installer-8.40.4-x86.x86_64.run --buildpkg Fedora/F7
若沒有錯誤,則ati驅(qū)動安裝完成了。
檢測階段:startx,發(fā)現(xiàn)黑屏,按Ctrl+Alt+F1,看到提示錯誤,libstdc++5.0.0不存在,不能裝載flgrx.so文件,這個很容易,找一個compat-libstdc++-33包安裝就可以了。
yum install compat-libstdc++-33 -y
如果還有錯誤,根據(jù)錯誤信息處理就ok了。
Q00013:
在Linux下使用了Windows的豐富的字體,發(fā)現(xiàn)在寬屏下,用firefox使用windows的字體看英文字體比較虛,我選擇的是宋體,16號大小,如果選擇12號,倒是看上去不是很虛,但是字體太小了,有點累眼睛 :) 怎么使用好看一點的字體又不會影響效果呢?
A00013:
對于獨立顯卡的機器,首先配置好機器顯示的分辨率,我這里寬屏配置的分辨率是1280x800,首先在gnome下字體并沒有問題,只是我以前改動過firefox的配置,針對firefox的問題解決如下:
1,打開firefox首選項,選擇內(nèi)容項,找到“字體&顏色”;
2,默認字體選擇“sans-serif”,大小選擇合適的高度,我選擇16號大小,其實“Courier New”也不錯,根據(jù)情況選擇;
3,高級選項可以自己選擇,比如serif字體,Times New Roman以及Arial字體也不錯。
當然這些都是在windows字體點陣足夠的情況下,如果仍然看上去虛,把字體由16號變小,直到看清楚為止,也可以找一些比較高點陣的字體,google一下,注意有些字體是要收費的喲。
Q00014:
在unix下運行perl程序時,發(fā)現(xiàn)錯誤提示為“: bad interpreter: No such file or directory",而程序沒有任何錯誤,解釋器路徑也正確,為何會出現(xiàn)這種沒有這個文件或者目錄的情況呢?
A00014:
這種原因一般是由于0x10和0x13,簡單點說是windows系統(tǒng)的換行和回車導致問題,一般在linux或者unix下的換行不包括回車符,所以需要使用dos2unix工具將perl程序轉(zhuǎn)換成為unix可識別的文字就可以了。
Q00015:
怎么在Linux下使用Windows下的字體呢?例如:Fedora8
A00015:
在Fedora官方的FAQ上,寫得很清楚,這里不累述了,原文如下:
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的時候也出現(xiàn)過這樣的問題,剛開始以為自己的可擦寫盤壞掉了,后來又用dvd刻了一個dvd盤,依舊loader,去官方查沒有結(jié)果,后來還是搜索給出了答案,原來是硬件配置和現(xiàn)有版本沖突的問題,不知道為什么fedora8這么倉促發(fā)布?不把一些環(huán)境測試好了在發(fā)布,這個問題后來已經(jīng)反應到redhat的官方網(wǎng)站并且提交上去。筆者機器是acpi沖突,安裝時,編輯安裝選項(按”e"編輯),后面加上
由于筆者本本的驅(qū)動在fedora8中沒有集成,所以得自己從官方ati中下載驅(qū)動,不過官方的ati驅(qū)動又出現(xiàn)了bug,不過整整還能用,安裝時候只能在后面加上:
text
這樣安裝完成了。不過現(xiàn)在筆者已經(jīng)很滿意了,在fc3的時候,官方還沒有成型的ati顯卡驅(qū)動,fedora core3沒有自己集成ati驅(qū)動,每次都是和flgrx以及xorg重新編譯,然后再和內(nèi)核一起加載,這樣才解決,現(xiàn)在方便多了,關(guān)于怎么去安裝顯卡看Q00012。
Q00017:
關(guān)于rpm安裝的mysql,在日志文件/var/log/mysqld.log會出現(xiàn):
或者:
[ERROR] Fatal error: Can't open privilege tables: Table 'mysql.host' doesn't exist
的字樣,而自己編譯的mysql沒有這個方面的問題(除非你不按照INSTALL文件的說明去做),究竟該怎么解決呢?
A00017:
這個問題來源于操作系統(tǒng)安裝mysql時,都是以root身份安裝rpm,實際上是mysql的rpm包的bug,導致數(shù)據(jù)存放目錄權(quán)限是root權(quán)限導致,正確的解決方法是把mysql_install_db的數(shù)據(jù)庫目錄更改所屬權(quán)限即可,以默認安裝的路徑為例:
chown -R mysql:root /var/lib/mysql/mysql
Q00018:
在x64位機器編譯GD庫時,發(fā)現(xiàn)在編譯freetype源碼時出現(xiàn)如下錯誤:
/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位機器上編譯一些軟件,其實很多都需要在優(yōu)化編譯選項上加上 -fPIC 這個參數(shù),否則編譯會通不過,筆者在這里吃過很大的虧。
Q00019:
為什么我編譯PHP時出現(xiàn)如下錯誤:
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.
我已經(jīng)安裝了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,并不缺少任何依賴了,為什么出現(xiàn)這種錯誤呢?怎么樣解決這個錯誤?
A00019:
關(guān)于這個問題,我google了很多地方,個人認為是環(huán)境支持性問題,也許是php的bug或者是mysql的bug,關(guān)于網(wǎng)上所說“ 安裝PHP的時候沒有指定一下mysql的安裝目錄。但是我已經(jīng)指定了,所以這個說法是錯誤的,其實主要原因是 mysql-level沒有裝,也就是mysql的版本不對,應該換 mysql-max-5.0.21版本(包含所有mysql相關(guān)內(nèi)容的軟件包)”云云是無可奈何的解法,另外一種解決辦法就是將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:
聲卡驅(qū)動alsa安裝上了怎么就是沒有聲音阿?用alsamixergui或者alsamixer配置alsa時,出現(xiàn):
alsamixer: function snd_ctl_open failed for default: Connection refused
或者使用alsa的驅(qū)動播放時,出現(xiàn):
*** PULSEAUDIO: Unable to connect: Connection refused
[AO_ALSA] Playback open error: Connection refused
Could not open/initialize audio device -> no sound.
當然,完全可以使用其他的聲卡驅(qū)動來代替,比如oss,或者轉(zhuǎn)換alsa-oss以及其他方式,總之也很完美,但是有沒有更完美的解決,我只想使用alsa方式來進行播放呢?
A00020:
完美的解決方案是有的,這里是alsa的一個bug,當新的驅(qū)動應用上的時候,/tmp/pulse-*這個目錄下面的配置信息沒有更新,導致聲卡驅(qū)動不能正常使用,只要刪除這個目錄,就可以了,原文如下:
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驅(qū)動相關(guān)有這些相關(guān)的包:
alsa-utils
alsa-lib
alsa-lib-devel
alsa-driver似乎可以不需要 :)
關(guān)于pulseaudio的不發(fā)聲的問題,其實大部分問題來源于權(quán)限問題,也不排除其他問題,詳情可以參照: 莫名其妙的pulse audio
Q00021:
Linux下我建立了.bash_profile文件作為用戶的配置文件,怎么不生效呢?
A00021:
在類Unix系統(tǒng)里,有幾種格式的文件配置,.bash_profile只是其中的一種,比如BSD系統(tǒng),常用.profile文件作為用戶基礎(chǔ)配置文件,而Linux家族里面,常用.bash_profile和.bashrc作為配置文件,這些配置文件與主shell有關(guān),比如BSD系統(tǒng)經(jīng)常用csh,而linux系統(tǒng)常用bash。
除了以上,注意.bash_profile等配置文件必須寫正確,檢查正確是否,可以直接在命令行上運行,或者
注意一下:關(guān)于shell,有好幾種不同的版本,比如bash、csh、tsh等等,source僅僅在bash等幾種shell版本中起作用,一般使用"."來代替。
Q00022:
怎么在BSD下和Linux下的top命令打印出來的內(nèi)容輸出到一個文件,但是我只想幾分鐘來監(jiān)測一次?
A00022:
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不同,為了穩(wěn)定起見,top更新是1秒鐘一次,所以開始2秒是不準確的,一般從第三秒開始記。
另外,類Unix下有一個命令是 sar(System Activity Reporter),主要將系統(tǒng)當前的狀態(tài)進行取樣,然后通過計算數(shù)據(jù)和比例來表達系統(tǒng)的當前運行狀態(tài),關(guān)于其用法可以參考其手冊,這里不再累述。
Q00023:
在Windows下怎么將postgresql安裝成服務?postgresql.conf 中的 tcpip_socket選項 怎么沒有呢?另外,我創(chuàng)建一個大寫的"QQ"用戶該怎么操作呢?
A00023:
其實安裝辦法和mysql差不多,postgresql提供一個pg_ctl.exe程序來完成安裝windows的服務:
然后啟動PGSQL服務:
net start PGSQL
但是直接使用psql時候出現(xiàn)
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 中沒有發(fā)現(xiàn)tcpip_socket字樣的接口,去官方一查,原來是postgresql從8.24版本以后拋棄了這個參數(shù),一切使用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";
這樣解決了我們的問題,其實發(fā)現(xiàn)很多windows下的東西都可以模仿類Unix,另外,遇到問題多看文檔,多動腦筋,做一個自己的OS也不成問題了。
Q00024:
Mysql數(shù)據(jù)庫中的表出現(xiàn)了錯誤,查詢和插入的時候都會出錯,查詢錯誤顯示:
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:
使用該命令來強制修復,但是會丟失一些數(shù)據(jù),但是總比你這個表不能用好一些吧,建議重要性的表進行一些調(diào)度性的備份。命令如下:
mysqlcheck -uroot -S /tmp/mysql.sock --force --auto-repair querylog querylog_discrepant;
Q00025:
類Unix環(huán)境里,A主機能夠ping通B主機但是由于防火墻等策略限制不能使用B主機中其中一個3206端口的服務,怎么才能訪問這個服務呢?
A00025:
找一臺C主機,雖然A主機不能ssh到C主機,但C主機必須能夠ssh到A主機,且C主機能夠使用B主機中3206端口的服務,然后可以使用screen命令放置ssh“隧道”,命令如下:
注意以下幾點:
1,保證A主機的2008端口沒有被占用,這個端口可以隨意指定,不一定是2008;
2,www.A.com這個主機名稱可以使用IP來代替,當然這不是好的方案,因為IP經(jīng)常變化。
Q00026:
在使用screen vim時候,終端的屏幕經(jīng)常因為錯誤按鍵會閃爍不停,影響視覺感官,該怎么辦才能讓它不進行閃爍呢?
A00026:
在終端輸入:
然后輸入:
:help 'visualbell'
回車后發(fā)現(xiàn)一些關(guān)于vim bell的幫助,然后根據(jù)需解決問題再輸入
set vb t_vb=
回車一下,看看連續(xù)按幾次ESC,是否還會閃爍屏幕呢?呵呵,一切正常了。
Q00027:
當服務器設置了ssh登陸超時時間(一般為30秒),即當終端用戶30秒內(nèi)沒有反應(數(shù)據(jù)包的傳遞),則ssh自動斷開,若我一直想ssh連接著,并不想斷開;但是服務器已經(jīng)設置了,我并不想改動服務器配置,該怎么解決這個問題呢?
A00027:
這里提供給使用putty的朋友一個好的辦法(適合Windows和Linux環(huán)境),如圖:
將0設置為15秒左右即可。
對于Linux用戶另外有一種解決辦法,首先:
在$HOME/.ssh目錄更改config文件,若沒有該配置文件,則創(chuàng)建一個,里面內(nèi)容添加一句:
這樣也不會因為服務器的ssh超時配置導致ssh斷開了。該配置的意思就是每隔15秒內(nèi)送數(shù)據(jù)包給服務器,保證持久性連接。
Q00028:
使用pietty或Putty的人,經(jīng)常不小心按到Ctrl+s,導致終端掛起,看上去跟機器死了似的,這時候喚醒機器該怎么辦?
A00028:
其實這個是一種使用經(jīng)驗,在putty里面,無論使用screen或者vim等模式下按ctrl+s都會出現(xiàn)這種掛起情況,一般人認為是無可救藥了,直接kill這個進程的pid,尤其是screen或者vim等模式時,正在編輯文檔,導致數(shù)據(jù)丟失,到底怎么解決這個辦法呢?其實這個方法非常簡單:
按住
Q00029:
怎么直接從mysql導出xml的數(shù)據(jù)?
A00029:
很簡單,使用-X選項即可
輸出內(nèi)容如下:
<?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有什么關(guān)系,其中若想從sqlite升級到sqlite2升級,該怎么辦?
A00030:
sqlite2是sqlite的升級版本,sqlite2不兼容以前sqlite的數(shù)據(jù)庫,如果需要轉(zhuǎn)換,可以使用如下命令:
我們常把sqlite2.x版本說成sqlite,而把sqlite3.x以上說成sqlite2,只是習慣而已,sqlite2實現(xiàn)了一些優(yōu)化算法,如btree,使速度更快于sqlite,網(wǎng)上有人說sqlite2快于mysql,我看不盡然,其實任何東西有利有弊,看怎么用才能體驗出它的好處和優(yōu)點。
Q00031:
sudo可不可以不輸入密碼?
A00031:
改一下/etc/sudoers
加上一句
[用戶] ALL=(ALL) NOPASSWD: ALL
但是不建議直接編輯/etc/sudoers文件,可以使用visudo,格式:
用戶名 主機名=NOPASSWD:/sbin/bash
Q00032:
使用php編寫可視化的界面是一件非常爽的事情,但是我安裝php-gtk完成之后,怎么執(zhí)行php程序出錯呢?
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/
然后執(zhí)行php程序,看看是不是基于GTK的界面出來了?
這里注意兩點:
1,如果找不到 phpize 和 php-config 這兩個程序,需要安裝php的development包,簡單安裝:sudo yum install php-devel。
2,執(zhí)行:
[Cnangel@localhost php-gtk-2.0.0beta]$ php
PHP Warning: Module 'gd' already loaded in Unknown on line 0
出現(xiàn)類似字樣,是gd重復使用的效果,應該將extension=gd.so和php.d/gd.ini取其一,并必須放置于extension=php_gtk2.so之前即可。
Q00033:
當使用mysql時,當字段d1和d2的屬性都屬于int unsigned類型,且d1
發(fā)現(xiàn)結(jié)果是一個很大的正整數(shù),而不是我想要的負數(shù),該怎么辦呢?
A00033:
這里有兩種解決辦法,一種是更改字段屬性為signed;一種是使用cast函數(shù)來解決,比如:
mysql> SELECT CAST(1-2 AS UNSIGNED)
-> 18446744073709551615
mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
-> -1
注意,假如任意一個操作數(shù)為一個浮點值,則結(jié)果為一個浮點值, 且不會受到上述規(guī)則影響 (關(guān)于這一點, DECIMAL 列值被視為浮點值)。
mysql> SELECT CAST(1 AS UNSIGNED) - 2.0;
-> -1.0
感謝葉金榮同學給予的幫助。
Q00034:
在源碼安裝putty等軟件時,雖然安裝成功,但是會出現(xiàn):
怎么解決這個問題呢?
A00034:
安裝putty后,雖然軟件可以運行,但是有一些異常情況,運行檢查依賴性的話:
yum provides \*libgnomebreakpad.so\*
結(jié)果是
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硬盤時,突然發(fā)現(xiàn)如下錯誤:
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.
到底是什么原因?qū)е履?#xff1f;
A00035:
開始看到這個信息以為這里面有boot分區(qū)在里面被掛載了,其實是因為我的另外一個操作系統(tǒng)處于休眠狀態(tài),導致掛載不上,解決辦法很簡單,讓另外一個操作系統(tǒng)關(guān)閉計算機就可以了。 :)
感謝Cuci好友。
Q00036:
在linux下ls時,經(jīng)常顯示亂碼,vim一個文件顏色非常亂套,文件也亂碼,怎么辦?
A00036:
經(jīng)常問這個問題的人會把上面的問題當作一個問題來對待,其實這是兩個問題:
1,ls出現(xiàn)亂碼,主要是LANG的指出現(xiàn)問題,可以在終端環(huán)境下使用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里面,關(guān)于亂碼問題在A00006里面已經(jīng)詳述。
Q00037:
在調(diào)試Perl腳本時,在print 輸出utf-8字符時,日志里會產(chǎn)生大量的
"Wide character in print at line ..." 警告信息,怎么不讓調(diào)試信息顯示出該警告信息呢?
A00037:
由于Perl中的 I/O不能理解utf-8編碼,在缺省情況下,認為輸出都應該是iso-8859編碼,所以,遇到不符合這個規(guī)范的編碼,就報告一條警告。
perl有個函數(shù)binmode()可以解決這個問題。
binmode(STDOUT, ':encoding(utf8)');
binmode(STDERR, ':encoding(utf8)');
在實際的情況下,我只是通過STDOUT進行print,所以,我只要設置STDOUT的binmode即可。
在具體的情況下,encoding的參數(shù)可以是gbk,big5等。
來源于kueruntu朋友。
Q00038:
使用iconv轉(zhuǎn)換字符編碼時,由于各種編碼混雜在一起,偶爾iconv會轉(zhuǎn)換出錯,有什么解決辦法沒有?
A00038:
iconv 加個 -c 參數(shù)可以即使轉(zhuǎn)碼出錯也不中斷。謝謝謝宇恒的補充。
Q00039:
打開2G以上文件的C/C++程序的編譯選項是什么?
A00039:
Q00040:
在使用C++做PHP擴展時,經(jīng)常按照網(wǎng)上的教程進行設計,發(fā)現(xiàn)會出現(xiàn)如下的錯誤:
但是使用nm命令查看這個動態(tài)庫時,發(fā)現(xiàn)有了這個__gxx_personality_v0的定義,但是為什么出錯呢?
A00040:
Google了一下(Google的確是好東西,對于一個搞技術(shù)的人來說是不可多得的朋友),發(fā)現(xiàn)是原因是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++實現(xiàn)PHP擴展中級應用。
Q00041:
我使用rxvt時,老是有些亂碼,或者界面也很難看,有什么好的配置方法沒有?
A00041:
這里推薦使用rxvt的unicode模式,名字叫urxvt,可以解決亂碼問題。如果想有美化的界面,這里推薦一種配置:
比原來初始的配置漂亮多了。 感謝謝宇恒同學的幫助
Q00042:
我發(fā)現(xiàn)Linux下一些常用命令沒有,比如unrar、dos2unix、uuencode等,而我該怎么安裝相應的lib?
A00042:
你能從rar官方找到相對應平臺的版本:Unrar;
dos格式和Unix格式轉(zhuǎn)換的命令可以使用yum來查找并安裝:
yum search unix2dos
關(guān)于uuencode命令是一個專門的lib,所以需要安裝Sharutils庫:
yum search sharutils
sudo yum install sharutils
詳情見GNU Sharutils。
Q00043:
redhat開源發(fā)行版本Fedora自帶totem播放器一直播放不了rm格式,連mp3、wma、wmv和mpeg等音頻、視頻都播放不了,一直如同雞脅,到底能不能用啊?
A00043:
Redhat/Fedora一直是Linux世界的精神領(lǐng)袖,相比其他linux發(fā)行版本而言,從來不帶一些受限的驅(qū)動以及一些閉源的軟件放在安裝版本中,所以在發(fā)行版本中自帶totem沒有解碼是播放不了rm格式的。
其實無論在那個版本都能用的(無論是totem還是totem-xine),關(guān)鍵的一點,需要安裝的都安裝了,就不會有問題了。,這個播放不了的問題主要是解碼問題。
首先到Mplayer Codecs下載all-20071007.tar.bz2和rp9codecs-win32-20050115.tar.bz2,解壓之后,把這些文件全部放在 /usr/lib/codecs 文件夾中,沒有該文件夾就創(chuàng)建一個。
然后使用ldconfig重新加載一下lib。如果需要firefox中顯示,還需要安裝 totem-mozplugin ,如果實在不知道有哪些安裝的話,可以使用yum的模糊搜索:
yum search gstreamer
yum search ffmpeg
yum search codecs
Q00044:
我平時正常一般使用DBD::mysql連接mysql,突然有一天連接mysql出了問題,提示錯誤:
貌似我mysql客戶端出現(xiàn)了一些問題。
A00044:
查了一下原因,應該是password驗證問題,可以使用一種辦法暫時解決這個問題,就是將現(xiàn)在加密方式的密碼更改成以前4.1之前的加密方式的密碼,修改辦法如下:
mysql> SET PASSWORD FOR cnangel@localhost=OLD_PASSWORD('yahoo');
這樣就能連接上了。
Q00045:
我覺得vim里面Ctrl+w與Ctrl+i結(jié)合起來查找程序當中各個變量的定義時非常好用,但是我查找一個C++的定義時,有時侯這種方法找得并不準確,甚至沒有結(jié)果,有沒有一個很好的辦法加強這種查找定義的效果?
A00045:
使用tags命令,命令如下:
>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 ,如果要包含比較全的頭文件,則指向到系統(tǒng)的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+]進行查找了。如果找到的東西仍然不是你想要的結(jié)果,可以使用 :tprev 和 :tnext 來進行上一個和下一個的查找喲!
Q00046:
如何識別CPU的個數(shù)?
A00046:
雙核CPU和超線程CPU在性能上還是有較大的差別。在測試HLFS性能的時候,發(fā)現(xiàn)超線程的雙核比物理的雙核性能要差很多。
判斷服務器CPU個數(shù)以及Core個數(shù)的小常識
# 在Linux系統(tǒng)上,通過查看/proc/cpuinfo文件。
格式說明:
* processor字段表示邏輯CPU的個數(shù)
* physical id字段表示物理CPU的個數(shù),相同的physical id表示同一個CPU
* siblings字段表示該物理CPU下的邏輯CPU的個數(shù)
* cpu cores字段表示該物理CPU下的core的個數(shù)
* 如果邏輯CPU的個數(shù)>core的個數(shù),說明CPU采用了超線程(Hyper thread)技術(shù),在flags字段中用ht表示
# FreeBSD下是cat /var/run/dmesg.boot | grep CPU
Q00047:
想把某一個命令的man信息全部抓下來并轉(zhuǎn)成pdf?
A00047:
Q00048:
使用CVS時,老是Check不出來,我已經(jīng)設置了
提示錯誤如下:
[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:
經(jīng)常多方查看官方文檔、與作者進行溝通和查看memcached的源代碼等一些幫助,知道在memcached源碼中有一個slabs.c文件,用vim打開,第27行有一句:
修改成:
#define POWER_BLOCK 1048576 * 8
這樣表示每個slabs為8M,但是這樣比較浪費內(nèi)存,不建議這樣使用。
Q00050:
從xpm官方站點(http://koala.ilog.fr/lehors/xpm.html)下載出來的包,沒有Makefile,只有iMakefile和Makefile.noX,該怎么辦才能完成xpm的安裝呢?特別是這個包是1999年的,最新的系統(tǒng)都不支持了,imake也是商業(yè)版本的。我怎么用xpm做開發(fā)?
A00050:
新的系統(tǒng)支持imake或者xmkmf都可以完成安裝,老系統(tǒng)估計很難找到對應的imake或者xmkmf,不過本身系統(tǒng)已經(jīng)安裝了其庫文件libXpm.so,只需要將源碼中的幾個頭文件拷貝到/usr/X11R6/include里面即可。另外利用xpm做開發(fā)的時候,檢查/usr/X11R6/lib目錄是否有相關(guān)libXpm.so和libXpm.so.xx,如果沒有l(wèi)ibXpm.so,則需要做一下軟連接。
ln -sf /usr/X11R6/lib/libX11.so.xx /usr/X11R6/lib/libX11.so
Q00051:
使用evolution收發(fā)郵件:按照系統(tǒng)用戶手冊中的設定完,進入軟件,在單擊“收件箱”,我想收點郵件,但是工具欄上“發(fā)送/接收”按鈕始終是灰色的,按不了,我以前用過fedora上linux的evolution,沒碰到過這種情況。反復設置了幾次,還是不行。使用evolution收發(fā)郵件失敗了。
A00051:
啟動程序后要在菜單里點一下“聯(lián)機工作”
Q00052:
使用scp的時候出現(xiàn)如此信息該怎么辦?
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.
總結(jié)
- 上一篇: 加载繁体字体时遇到的问题
- 下一篇: 实习随笔2(独自乘车南下深圳)