歡迎您光臨本站 註冊首頁

Linux的一些Tips

←手機掃碼閱讀     火星人 @ 2014-03-24 , reply:0

收集整理了一些技巧提示,以幫助新手快速上路。
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 <---- to count files
ls -l * | grep "^d" | wc -l <----- to count dir
還可以將以上的語句變成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 ftp://ftp.xxx.xxx
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 news://news.freesoft.cei.gov.cn/chinese.com.linux
# 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 <--把linux文件系統格式的軟盤安裝上來
mount -t msdos /dev/fd0 /mnt/floppy <--把dos文件系統格式的軟盤安裝上來
mount -t vfat /dev/fd0 /mnt/floppy <--vfat支持瘟95/98的長文件名
mount /dev/hdb /mnt/cdrom <--把以從盤方式接在第一個IDE口上的光碟機上的光碟安裝上來
mount /dev/cdrom /mnt/cdrom <-- > mount /mnt/cdrom <--可以這麼用是因為在/etc/fstab里已經定義了
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工具,挺不錯的。

[火星人 ] Linux的一些Tips已經有652次圍觀

http://coctec.com/docs/linux/show-post-134947.html