[Linux] Linux的一些Tips

來源:互聯網
上載者:User

http://www.21php.com/tutorial/tutorial.php?tid=89
作者: LinuxForum

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  <-- /dev/cdrom是指向光碟機裝置的一個串連
       mount /mnt/cdrom    <--可以這麼用是因為在/etc/fstab裡已經定義了
       umount /mnt/floppy  <--在拿出磁碟片之前先要把它卸載
       umount /mnt/cdrom   <--不卸載就拿不出光碟片
   當然你也可以自己建一些安裝點,比如"mkdir /mnt/smb","mkdir /scd"然後
       mount -t iso9660 /dev/scd0 /scd  <--/dev/scd0: SCSI光碟機
       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<tab鍵> 自動補起為 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
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.