Linux的一些Tips

tolywang發表於2007-12-17
1.虛擬控制檯
登入後按Alt+F2鍵這時又可以看到"login:"提示符, 這個就是第二個虛擬控制檯.再按Alt+F1又回到第一個控制檯,來回切換很方便。檢視/etc/inittab檔案可以找到一下幾行:

#Run gettys in standard runlevels
1:12345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
也就是說初始化的時候定義了6個虛擬控制檯,你可以編輯這個檔案來增加或減少虛擬控制檯。在Xwin下使用虛擬控制檯則要用Ctrl+Alt+F?來切換。Xwindow佔用虛擬控制檯後的第一個控制檯,預設就是tty7,所以要切換回Xwin則按Alt+F7(當你改變了虛擬控制檯的數目時則要改變)。如果啟動了第二個Xserver則應該是Alt+F8,等等。

2.Redhat下顯示彩色目錄及檔案列表
用ls --color -F,引數--color指示用彩色顯示,引數-F會在檔案/目錄名後加一個字元來指示它的類別。建議初學者用man ls看看詳細資訊。比如用-l引數列出檔案/目錄的絕大部分資訊(長格式顯示);用-a引數列出所有檔案;包括首字元為"."的隱含檔案;用-N引數不處理檔名直接顯示,這樣在中文環境下就可以顯示中文檔名了。還要注意ls與其它命令搭配使用可以生出很多技巧(最簡單的如"ls -l | more")。
為了方便起見,你可以編輯/etc/bashrc或自己家目錄(home)下的.bashrc,加入一行:
alias ls="ls --color -F -N"
重新執行一下bash會立即生效,如果加在/etc/bashrc裡則對所有使用bash shell的使用者有效。如果使用的是其它的shell,則去找對應的配置檔案。注意不是/etc/aliases檔案,那是sendmail的別名配置檔案。
ls顯示的顏色是可以修改的,請參考"Colours with Linux terminals",裡面有個shell指令碼可以顯示所有的ANSI顏色。你可以去看一下/etc/DIR_COLORS或$HOME/.dir_colors,要注意兩個檔案的作用範圍不同。也可以用dircolors -p命令列出設定,更詳細資訊見"man dircolors"。

3.只列子目錄的方法:
ls -F | grep /$ 或者 alias sub = "ls -F | grep /$"(linux)
ls -l | grep "^d" 或者 ls -lL | grep "^d" (Solaris)
find . -type d
find . -type d | sort
參考dtree

4.列出除了某些型別檔案的當前目錄所有檔案
使用Ksh,用ls !(*.Z)可以顯示所有檔案,除了*.Z檔案。
這個命令在一個目錄裡有許多種型別的檔案的時候很有用.

5.計算檔案數和目錄數
下面的語句可以幫你計算有多少個檔案和多少個目錄..
ls -l * | grep "^-" | wc -l ls -l * | grep "^d" | wc -l 還可以將以上的語句變成script或做個alias

6.複製子目錄及子目錄下的所有檔案
在用cp時加上-r引數,如"cp -r /mnt/floppy/* /usr/local/"
要參考的重要引數是-f -s

7.檔案/目錄改名
簡單地用move命令移到新名字下即可。例如"mv /usr/oldname /usr/newname"

8.刪除一個目錄下的所有檔案和子目錄及子目錄下的所有檔案
rm -rf /tmp/example
這些都是給懶人們準備的,新手最好多用man命令學習。要是英語不好,等中文發行版出來 :-(

9.快速進入某些目錄
鍵入 cd ~ (或cd $HOME)可進入使用者的home目錄.
鍵入 cd - 可進入上一次所在的目錄.

10.顯示環境變數
echo $HOME 顯示家目錄
echo $PATH 顯示可執行檔案搜尋路徑
env 顯示所有環境變數(可能很多,最好用"env | more","env | grep PATH"等)
修改環境變數,在bash下用export,在csh下用setenv。比如:
export PATH=$PATH:/usr/local/bin
要想知道export的具體用法,可以用shell的help命令:help export

11.顯示檔案的型別
用file命令,比如"file /bin/mount","file xxx.gz","file netscape","file initrd.img"等等。
相關的配置檔案在/etc/magic或者/usr/share/magic

12.查詢命令檔案的路徑
比如你要查詢mount命令的具體路徑,可以用
type mount
whereis mount 這個命令還可以找出與這個命令檔案相關的檔案如manuals page。

13.查詢檔案
使用find命令,比如:
find /usr -name XF86* 在/usr目錄下(包含子目錄)查詢名字前四個字母為XF86的檔案
find . -name netscape -print 在當前目錄下(包含子目錄)查詢名為netscape的檔案
find /home -nouser 在/home目錄下查詢沒有使用者屬主的檔案(使用者帳號被刪除但有遺留檔案)
find /var -newer test 在/var目錄下查詢比test檔案日期更新的檔案
find命令有很多引數,注意用man命令檢視。
更快速的查詢檔案是使用locate,第一次使用locate之前用updatedb來更新檔案/目錄名資料庫。
它把檔案/目錄資訊寫到資料庫中,以後查詢起來就特別的快。updatedb放在crontab中而且預設配置是在半夜自動執行。locate存在輕微的安全性問題,因為普通使用者可以用它來取得自己不能訪問的目錄/檔案的部分資訊。現在有個secure locate,把uid/gid也儲存到資料庫中,使用者在locate時先比較許可權。

14.控制檯下回卷螢幕
如何檢視已經卷過螢幕的資訊呢?試試這兩個按鍵組合:shift+PageUp和shift+PageDown
對xterm/nxterm/cxterm/xxgdb都有效。而KDE帶的KVT已經做得很好了。

15.檢視檔案內容的特殊方法
相信最基本的cat和less你已經很熟悉了,如果有特殊的要求呢:
如果你只想看檔案的前5行,可以使用head命令,如:
head -5 /etc/passwd
如果你想檢視檔案的後10行,可以使用tail命令,如:
tail -10 /etc/passwd
tail -f /var/log/messages
引數-f使tail不停地去讀最新的內容,這樣有實時監視的效果,
當你在ppp撥號的過程中用它豈不是很方便!
檢視檔案中間一段,你可以使用sed命令 如:
sed -n '5,10p' /etc/passwd
這樣你就可以只檢視檔案的第5行到第10行。

16.取消^M字元
當你FTP一些DOS檔案到unix下時,你經常會看見每行檔案後面有個討厭的^M 字元,
有兩個簡單的方法可以取消它。
用"vi"開啟此檔案,在Command mode下敲入:
:%s/^V^M//g
或者,在UNIX SHELL下敲入:
sed 's/^V^M//g' foo > foo.new

17.利用Find命令改變所有權
想要改變當前目錄下所有檔案的所有權,可以這樣:
find . -exec chown OWNER.[GROUP] {} ; (Solaris)
find . -exec chown -R OWNER.[GROUP] {} ; (Linux)

18.改變xterm/cxterm下字型大小
同時按下Ctrl鍵和滑鼠右鍵會彈出一個選單讓你選擇,也可以在啟動xterm時指定字型,
如"xterm -fn 8x16 &"
提示:難道你不想試試Ctrl+滑鼠左鍵會有什麼嗎?!

19.啟動一個程式時讓它立即進入後臺執行方式
看過前面一篇bash的介紹應該明白Ctrl+z/bg/fg的用法。有些程式工作起來挺費時間,在它後面加個&符號看看,例如"updatedb &","netscape &"等等。這樣這個shell會釋放出來幹別的活。注意這樣出來的程式父程式仍然是這個shell,若你退出這個shell,這些程式也會被kill掉(除非這個程式自己特別處理能脫離shell)。建議退出shell之前用jobs命令檢視後臺作業。

20.使用nohup命令(不掛起)
如果你想程式在你退出系統後還能執行,可以使用NOHUP命令如:
% nohup tar -cf /dev/tape /home &
你logout退出後再重新登入的話,使用'ps'命令可以看到程式還在執行
注意,要想把命令真正放到後臺執行,nohup必須與&操作同時使用。
有些軟體自己能處理SIGHUP訊號,如wget,則對它們無須用nohup。
如果你願開動腦筋的話,還可以用nohup來實現ppp回撥:先撥號上去,然後以nohup執行一個自制的指令碼,如"sleep 60; ppp-start-script"等等。最後logout退出並結束通話電話等著就是。

21.快速調出歷史命令
看了上一篇bash的介紹,想必對history,!,!!這些用法很熟悉了。其實你還可以用上下游標鍵來調出歷史命令,然後用左右游標鍵移動並可編輯命令列。

22.產生一個以當日日期為字尾的檔案
file=`date '+%m%d'` | touch todayis.$file
或者做一個shell指令碼:
#!/usr/bin/sh
file=`date '+%M%d'`
touch todayis.$file
exit 0
注意定義file變數中的“`”不是“ '”,而是左上角數字鍵1傍邊那個(左單引號)。

23.將man/info的內容存為文字檔案
以man tcsh為例:
1) man tcsh | col -b > tcsh.txt
2) nroff -man tcsh.man | col -b > tcsh.txt
以info emacs為例
info emacs -o emacs.txt -s
提示,如果安裝了KDE的話用kdehelp去看man page和info page是很方便的。
嫌KDE太大的話還有TkMan可以選擇,也是圖形/超文字方式的,有搜尋引擎,功能更強。
新來者要多去看man和info喲!

24.關於rpm的小技巧
1)安裝rpm包時顯示進度
用-vh引數,如rpm -ivh ipchains-1.3.6-1.i386.rpm
如果用glint或xrpm則不必。
2)直接透過ftp來安裝rpm包
如rpm -i [url]ftp://ftp.xxx.xxx[/url]
3)校驗所有的rpm包,查詢丟失的檔案
rpm -Va
4)查詢一個檔案屬於哪個rpm包
例如:rpm -qf /usr/bin/who
5)列出一個rpm包的描述資訊
例如:rpm -qpi mon-0.37j-1.i386.rpm
6)列出一個rpm包的檔案資訊
例如:rpm -qpl mon-0.37j-1.i386.rpm

25.快速展開xxx.tar.gz/xxx.tgz壓縮的包
tar zvfx xxx.tgz 在當前目錄下展開這個包
tar zvft xxx.tgz 只測試不展開
tar zvfx xxx.tgz -C /new-dir 展開後放到/new-dir目錄下
tar zvfc test.tgz /test 把/test目錄下所有的檔案及子目錄打包成test.tgz
tar的引數很多,要仔細學習。

26.複製與貼上文字
如果啟動了gpm這個守護神(deamon)程式的話,可以用滑鼠左鍵來選擇文字,然後就可以用滑鼠中鍵把它貼上到你所想要的地方。如果是兩鍵滑鼠則在配置是要選擇防真3鍵滑鼠,之後同時按下左右鍵模擬中鍵。在文字終端下應該用滑鼠右鍵來貼上。

27.快速查詢某個程式執行中的PID號/關機
例如想查詢inetd: ps aux | grep inetd
又如想找到最吃記憶體的程式: ps aux | sort +4n
找到程式的PID之後就可以用kill給它發訊號,或者強制殺死它如:kill -9 xxx(某個程式的PID)
在Linux下還提供了一個killall,可以直接使用程式的名字而不是PID號,如killall -HUP inetd
又如killall xdm。killall會把訊號發給以指定名字的程式執行的所有程式。
用killall -l列出所有可用的訊號。
提到ps忍不住給大家介紹一下qps,用qt寫的圖形介面,綜合了free,top,ps及kill的特點,還可以看到程式的Socket/Memory Map/Files資訊。還有為KDE寫的ktop,優點是列出了父子程式的關係。
shutdown -r now 殺掉所有程式立即重新啟動
shutdown -h now 殺掉所有程式立即停機
shutdown -h +5 "Warning: After 5 minutes I'll shutdown" 給使用者發訊息並在5分鐘後停機。
相關命令有reboot,halt,poweroff,init等。
要想實現軟體關掉電源,則你的PC機必須是ATX結構的,然後去配置編譯核心,開啟
charactor device/Advanced Power Management support/Power off on shutdown這一項。

28.查詢Xwindow下的字型資訊,特別是字元對映表(內碼)
xlsfonts 列出所有字型
xfontsel 分類列出所有字型並顯示示範文字
xfd 顯示某個字型檔案中的所有字元及內碼,比如用 xfd -fn hanzigb16fs 看看中文內碼
再用xfd -fn cclib16st看看cxterm所用字型檔的內碼與XF86的不同(注意最高位)。

29.查詢日期為某一天的檔案
A=`find ~ -print` | ls -l --full-time $A 2>/dev/null | grep "Jun 27" | grep 1998
Linux的命令很厲害的呀!
給你寫了下面這個script,用著方便點兒。你把它存成一個隨便什麼名字的檔案,置上x屬性就行了。
#!/bin/sh
# Copyright by Ming Gong(宮敏) for [url]news://news.freesoft.cei.gov.cn/chinese.com.linux[/url]
# GPL V2, Jun 30, 1998
# The right of usage, distribution and modification is here by granted by the author.
# The author deny any responsibilities and liabilities related to the code.
#
OK=0
A=`find $1 -print`
if expr $3 == 1 >/dev/null ; then M=Jan ; OK=1 ; fi
if expr $3 == 2 >/dev/null ; then M=Feb ; OK=1 ; fi
if expr $3 == 3 >/dev/null ; then M=Mar ; OK=1 ; fi
if expr $3 == 4 >/dev/null ; then M=Apr ; OK=1 ; fi
if expr $3 == 5 >/dev/null ; then M=May ; OK=1 ; fi
if expr $3 == 6 >/dev/null ; then M=Jun ; OK=1 ; fi
if expr $3 == 7 >/dev/null ; then M=Jul ; OK=1 ; fi
if expr $3 == 8 >/dev/null ; then M=Aug ; OK=1 ; fi
if expr $3 == 9 >/dev/null ; then M=Sep ; OK=1 ; fi
if expr $3 == 10 >/dev/null ; then M=Oct ; OK=1 ; fi
if expr $3 == 11 >/dev/null ; then M=Nov ; OK=1 ; fi
if expr $3 == 12 >/dev/null ; then M=Dec ; OK=1 ; fi
if expr $3 == 1 >/dev/null ; then M=Jan ; OK=1 ; fi

if expr $OK == 1 > /dev/null ; then
ls -l --full-time $A 2>/dev/null | grep "$M $4" | grep $2 ;
else
echo Usage: $0 path Year Month Day;
echo Example: $0 ~ 1998 6 30;
fi

30.使用軟盤/光碟等移動介質
剛從跺死/瘟都死轉過來的朋友,手拿著軟盤/光碟不知道該如何辦,因為Linux下沒有A盤D盤的概念.我自己剛開始學習Linux時也是這樣(以前從來就沒有做過root :-)。如果你手頭有講Linux的書,仔細去看裝置及檔案系統的相關章節。簡單地說,你需要把軟盤/光碟裝置上的檔案系統安裝到Linux目錄樹上的一個點上,稱之為安裝點(mount point),通常是一個目錄。安裝Linux後會有個預設的安裝點/mnt,在它下面還有/mnt/floppy和/mnt/cdrom。你可以用
mount -t ext2 /dev/fd0 /mnt/floppy mount -t msdos /dev/fd0 /mnt/floppy mount -t vfat /dev/fd0 /mnt/floppy mount /dev/hdb /mnt/cdrom mount /dev/cdrom /mnt/cdrom mount /mnt/cdrom umount /mnt/floppy umount /mnt/cdrom 當然你也可以自己建一些安裝點,比如"mkdir /mnt/smb","mkdir /scd"然後
mount -t iso9660 /dev/scd0 /scd smbmount //fjj/download /mnt/smb
等等,熟悉之後就可以靈活運用。
單用mount而不跟任何引數可以顯示已經安裝的檔案系統,或者檢視/etc/mtab檔案
初學者還經常問到如何格式化磁碟,在Linux裡概念有些不同,稱之為製作檔案系統(make filesystem)
應該用mkfs命令,由於現在的Linux都使用ext2格式,最好直接使用mke2fs,比如mke2fs /dev/fd0
mke2fs /dev/hdb2等等。如果要對軟盤低階格式化,則可以用fdformat,而硬碟在出廠時已經格式化,
無須低階格式化(那是危險的)。檢查檔案系統則用e2fsck,如e2fsck -av /dev/fd0。
哈,這個根本算不上Tips,不過有些初學者總是不喜歡看書思考,甚至還問如何新增/刪除使用者。

31.新增/刪除使用者
用useradd username(或者adduser username)新增一個名為username的使用者,然後用passwd username 指定口令。使用者的資訊記錄在/etc/passwd檔案裡,由於每個使用者都可以(而且必須能)讀出這個檔案然後就可以crack出其它使用者的密碼,為安全考慮現在都使用shadow。在/etc/passwd下使用者的口令變為x 真正的口令密文記錄在/etc/shadow裡,而這個檔案只有以root許可權才能讀出。Redhat 5.1以下版本沒有直接使用shadow,需要用pwconv轉換一下,如果要變回來,可以用pwunconv。提示:在/etc/skel目錄記錄了一個使用者應該有的基本檔案(ls -a /etc/skel/看看都有什麼),useradd會自動把這些檔案複製到使用者的家目錄下並置上適當的許可權(除非新增使用者時用了-m引數: useradd -m xxx)。如果你在這個目錄下鍵一個public_html的目錄,則以後新增的使用者在它的家目錄下都會自動有個同名的目錄,這樣每個使用者都有了“個人主頁”。
刪除使用者可以用userdel usrname或userdel -r username(有些發行版可能是deluser),-r引數會刪除這個使用者的家目錄,但是在系統裡別的地方還可能有此使用者的資訊,所以在刪除使用者之前最好還要用find / -user username等方式去找一找相關資訊。
如果要臨時禁止一個使用者,可以在/etc/passwd檔案中此使用者的密碼這一項第一個字元前新增一個*號。
如果把密碼域改為空,則此使用者不需要密碼就可以進入系統,當你忘記root口令時,可以用軟盤啟動把原來的root安裝上來,直接去改passwd檔案。我記得以單使用者方式啟動時不需要密碼可以進去。
長使用者名稱的問題,在Redhat發行版中已經做得很好了,也允許使用者名稱中有空格。如果你手上的發行版不支援,到/usr/include/utmpbits.h裡把UT_NAMEDSIZE改為32,重新編譯相關程式。
另一個直觀的配置工具是linuxconf,比如用它來配置pppuser等等。
這裡只能給一些線索,自己多看"man useradd","man shadow","man group","man userdel"......
再一次建議新來者多看書多思考多看看man page,否則不大容易找到/etc/skel是幹什麼的。

32.列出一個目錄佔用的空間
du或du -s或du -k
du -S | sort -n 可以迅速發現那個目錄是最大的。
用df可以看到已安裝的檔案系統的空間大小及剩餘空間大小。
quota -v檢視使用者的磁碟空間資訊,如果你用quota限制了使用者空間大小的話。

33.命令補起(TAB鍵的妙用)
很多shell都有這個功能。
1) 只需輸入檔案或目錄名的前幾個字元, 然後按TAB鍵,如無相重的,完整的檔名立即自動在命令列出現;如有相重的,再按一下TAB鍵,系統會列出當前目錄下所有以這幾個字元開頭的名字.例如
cd /mnt/cd 自動補起為 cd /mnt/cdrom
2) 在命令列下,只需輸入例如"m",再連續按兩次TAB鍵,系統將列出所有以"m"開頭的命令,(包括自定義的Bshell命令函式),對查詢某些記不清楚的命令特有用.例如輸入"ftp",將查到ftp,ftpcount,ftpwho,ftpshut等本不熟悉的命令.

34.在redhat5.0中沒有setenv,用set設定的變數在程式中用getenv讀不出來.
用哪個函式可以讀出用set設定的環境變數?
set env;export env
然後在用getenv去讀。

35.讓grep搜尋檔案及所有子目錄下的檔案裡的內容
例如搜尋ZhXwin下所有C原始碼中的"Chinput"(試試取消下行的-q引數):
find /download/ZhXwin -name *.c -exec grep -q -s Chinput {} ; -print
查詢所有檔案則可以用:
find . -type f -exec grep -s chinese {} ; -print
如果喜歡圖形介面,KDE帶的kfind很不錯。

36.檢視啟動時的log資訊
首先去檢視/etc/syslog.conf檔案,找到對應的檔案。
(更詳細的資訊去看"man syslogd" "man syslog.conf" 以及"man klogd")
通常在SlackWare下為/var/adm/messages,在Redhat下為/var/log/messages。
這些檔案可能會很大,要注意備份和刪除。
前面已經提到用tail(tail -f)檢視這些檔案的方法,另外還有個logscanner工具,挺不錯的。


建議大家去讀一下The Linux Tips Howto,並且去訂閱Linux Gazette。
收集整理這些文件的時候看到一個新開的站點:Linux Tips & Tricks

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-85117/,如需轉載,請註明出處,否則將追究法律責任。