對中級Linux 使用者非常有用的20個命令

oschina發表於2013-08-10

  也許你已經發現第一篇文章非常的有用,這篇文章是繼對初級Linux使用者非常有用的20個命令 的一個延伸。 第一篇文章的目的是為新手準備的而這篇文章則是為了Linux的中高階使用者。在這裡你將學會如何進行自定義搜尋,知道正在進行的程式和停掉程式,如何使用Linux的強勢功能和如何在系統內編譯C,C++和JAVA程式。

  21. 命令: Find

  搜尋指定目錄下的檔案,從開始於父目錄,然後搜尋子目錄。

root@tecmint:~# find -name *.sh 

./Desktop/load.sh 
./Desktop/test.sh 
./Desktop/shutdown.sh 
./Binary/firefox/run-mozilla.sh 
./Downloads/kdewebdev-3.5.8/quanta/scripts/externalpreview.sh 
./Downloads/kdewebdev-3.5.8/admin/doxygen.sh 
./Downloads/kdewebdev-3.5.8/admin/cvs.sh 
./Downloads/kdewebdev-3.5.8/admin/ltmain.sh 
./Downloads/wheezy-nv-install.sh

  注意: `-name‘選項是搜尋大小寫敏感。可以使用`-iname‘選項,這樣在搜尋中可以忽略大小寫。(*是萬用字元,可以搜尋所有的檔案;‘.sh‘你可以使用檔名或者檔名的一部分來制定輸出結果)

root@tecmint:~# find -iname *.SH ( find -iname *.Sh /  find -iname *.sH)

./Desktop/load.sh 
./Desktop/test.sh 
./Desktop/shutdown.sh 
./Binary/firefox/run-mozilla.sh 
./Downloads/kdewebdev-3.5.8/quanta/scripts/externalpreview.sh 
./Downloads/kdewebdev-3.5.8/admin/doxygen.sh 
./Downloads/kdewebdev-3.5.8/admin/cvs.sh 
./Downloads/kdewebdev-3.5.8/admin/ltmain.sh 
./Downloads/wheezy-nv-install.sh
root@tecmint:~# find -name *.tar.gz 

/var/www/modules/update/tests/aaa_update_test.tar.gz 
./var/cache/flashplugin-nonfree/install_flash_player_11_linux.i386.tar.gz 
./home/server/Downloads/drupal-7.22.tar.gz 
./home/server/Downloads/smtp-7.x-1.0.tar.gz 
./home/server/Downloads/noreqnewpass-7.x-1.2.tar.gz 
./usr/share/gettext/archive.git.tar.gz 
./usr/share/doc/apg/php.tar.gz 
./usr/share/doc/festival/examples/speech_pm_1.0.tar.gz 
./usr/share/doc/argyll/examples/spyder2.tar.gz 
./usr/share/usb_modeswitch/configPack.tar.gz

  注意:以上命令查詢根目錄下和所有資料夾以及載入的裝置的子目錄下的所有包含‘tar.gz'的檔案。

  ’find'命令的更詳細資訊請參考35 Find Command Examples in Linux

  22. 命令: grep

  ‘grep‘命令搜尋指定檔案中包含給定字串或者單詞的行。舉例搜尋‘/etc/passwd‘檔案中的‘tecmint'

root@tecmint:~# grep tecmint /etc/passwd 

tecmint:x:1000:1000:Tecmint,,,:/home/tecmint:/bin/bash

  使用’-i'選項將忽略大小寫。

root@tecmint:~# grep -i TECMINT /etc/passwd 

tecmint:x:1000:1000:Tecmint,,,:/home/tecmint:/bin/bash

  使用’-r'選項遞迴搜尋所有自目錄下包含字串 “127.0.0.1“.的行。

root@tecmint:~# grep -r "127.0.0.1" /etc/ 

/etc/vlc/lua/http/.hosts:127.0.0.1
/etc/speech-dispatcher/modules/ivona.conf:#IvonaServerHost "127.0.0.1"
/etc/mysql/my.cnf:bind-address		= 127.0.0.1
/etc/apache2/mods-available/status.conf:    Allow from 127.0.0.1 ::1
/etc/apache2/mods-available/ldap.conf:    Allow from 127.0.0.1 ::1
/etc/apache2/mods-available/info.conf:    Allow from 127.0.0.1 ::1
/etc/apache2/mods-available/proxy_balancer.conf:#    Allow from 127.0.0.1 ::1
/etc/security/access.conf:#+ : root : 127.0.0.1
/etc/dhcp/dhclient.conf:#prepend domain-name-servers 127.0.0.1;
/etc/dhcp/dhclient.conf:#  option domain-name-servers 127.0.0.1;
/etc/init/network-interface.conf:	ifconfig lo 127.0.0.1 up || true
/etc/java-6-openjdk/net.properties:# localhost & 127.0.0.1).
/etc/java-6-openjdk/net.properties:# http.nonProxyHosts=localhost|127.0.0.1
/etc/java-6-openjdk/net.properties:# localhost & 127.0.0.1).
/etc/java-6-openjdk/net.properties:# ftp.nonProxyHosts=localhost|127.0.0.1
/etc/hosts:127.0.0.1	localhost

  注意:您還可以使用以下選項:

  1. -w 搜尋單詞 (egrep -w ‘word1|word2‘ /path/to/file).
  2. -c 用於統計滿足要求的行 (i.e., total number of times the pattern matched) (grep -c ‘word‘ /path/to/file).
  3. –color 彩色輸出 (grep –color server /etc/passwd).

  23. 命令: man

  ‘man‘是系統幫助頁。Man提供命令所有選項及用法的線上文件。幾乎所有的命令都有它們的幫助頁,例如:

root@tecmint:~# man man

MAN(1)                                                               Manual pager utils                                                              MAN(1)

NAME
       man - an interface to the on-line reference manuals

SYNOPSIS
       man  [-C  file]  [-d]  [-D]  [--warnings[=warnings]]  [-R  encoding]  [-L  locale]  [-m  system[,...]]  [-M  path]  [-S list] [-e extension] [-i|-I]
       [--regex|--wildcard] [--names-only] [-a] [-u] [--no-subpages] [-P pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation] [--no-justification]  [-p
       string] [-t] [-T[device]] [-H[browser]] [-X[dpi]] [-Z] [[section] page ...] ...
       man -k [apropos options] regexp ...
       man -K [-w|-W] [-S list] [-i|-I] [--regex] [section] term ...
       man -f [whatis options] page ...
       man -l [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L locale] [-P pager] [-r prompt] [-7] [-E encoding] [-p string] [-t] [-T[device]]
       [-H[browser]] [-X[dpi]] [-Z] file ...
       man -w|-W [-C file] [-d] [-D] page ...
       man -c [-C file] [-d] [-D] page ...
       man [-hV]

  上面是man命令的系統幫助頁,類似的有cat和ls的幫助頁。

  注意:系統幫助頁是為了命令的使用和學習而設計的。

  24. 命令: ps

  ps命令給出正在執行的某個程式的狀態,每個程式有特定的id成為PID。

root@tecmint:~# ps

 PID TTY          TIME CMD
 4170 pts/1    00:00:00 bash
 9628 pts/1    00:00:00 ps

  使用‘-A‘選項可以列出所有的程式及其PID。

root@tecmint:~# ps -A

 PID TTY          TIME CMD
    1 ?        00:00:01 init
    2 ?        00:00:00 kthreadd
    3 ?        00:00:01 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    7 ?        00:00:00 kworker/u:0H
    8 ?        00:00:00 migration/0
    9 ?        00:00:00 rcu_bh
....

  注意:當你要知道有哪些程式在執行或者需要知道想殺死的程式PID時ps命令很管用。你可以把它與‘grep‘合用來查詢指定的輸出結果,例如:

root@tecmint:~# ps -A | grep -i ssh

 1500 ?        00:09:58 sshd
 4317 ?        00:00:00 sshd

  ps命令與grep命令用管道線分割可以得到我們想要的結果。

  25. 命令: kill

  也許你從命令的名字已經猜出是做什麼的了,kill是用來殺死已經無關緊要或者沒有響應的程式.它是一個非常有用的命令,而不是非常非常有用.你可能很熟悉Windows下要殺死程式可能需要頻繁重啟機器因為一個在執行的程式大部分情況下不能夠殺死,即使殺死了程式也需要重新啟動作業系統才能生效.但在linux環境下,事情不是這樣的.你可以殺死一個程式並且重啟它而不是重啟整個作業系統.

  殺死一個程式需要知道程式的PID.

  假設你想殺死已經沒有響應的‘apache2'程式,執行如下命令:

root@tecmint:~# ps -A | grep -i apache2

1285 ?        00:00:00 apache2

  搜尋‘apache2'程式,找到PID並殺掉它.例如:在本例中‘apache2'程式的PID是1285..

root@tecmint:~# kill 1285 (to kill the process apache2)

  注意:每次你重新執行一個程式或者啟動系統,每個程式都會生成一個新的PID.你可以使用ps命令獲得當前執行程式的PID.

  另一個殺死程式的方法是:

root@tecmint:~# pkill apache2

  注意:kill需要PID作為引數,pkill可以選擇應用的方式,比如指定程式的所有者等.

  26. 命令: whereis

  whereis的作用是用來定位命令的二進位制檔案\資源\或者幫助頁.舉例來說,獲得ls和kill命令的二進位制檔案/資源以及幫助頁:

root@tecmint:~# whereis ls 

ls: /bin/ls /usr/share/man/man1/ls.1.gz
root@tecmint:~# whereis kill

kill: /bin/kill /usr/share/man/man2/kill.2.gz /usr/share/man/man1/kill.1.gz

  注意:當需要知道二進位制檔案儲存位置時有用.

  27. 命令: service

  ‘service‘命令控制服務的啟動、停止和重啟,它讓你能夠不重啟整個系統就可以讓配置生效以開啟、停止或者重啟某個服務。

  在Ubuntu上啟動apache2 server:

root@tecmint:~# service apache2 start

 * Starting web server apache2                                                                                                                                 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
httpd (pid 1285) already running						[ OK ]

  重啟apache2 server:

root@tecmint:~# service apache2 restart

* Restarting web server apache2                                                                                                                               apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
 ... waiting .apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName  [ OK ]

  停止apache2 server:

root@tecmint:~# service apache2 stop

 * Stopping web server apache2                                                                                                                                 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
 ... waiting                                                           		[ OK ]

  注意:要想使用service命令,程式的指令碼必須放在‘/etc/init.d‘,並且路徑必須在指定的位置。

  如果要執行“service apache2 start”實際上實在執行“service /etc/init.d/apache2 start”.

  28. 命令: alias

  alias是一個系統自建的shell命令,允許你為名字比較長的或者經常使用的命令指定別名。

  我經常用ls -l‘命令,它有五個字元(包括空格)。於是我為它建立了一個別名‘l'。

root@tecmint:~# alias l='ls -l'

  試試它是否能用:

root@tecmint:~# l

total 36 
drwxr-xr-x 3 tecmint tecmint 4096 May 10 11:14 Binary 
drwxr-xr-x 3 tecmint tecmint 4096 May 21 11:21 Desktop 
drwxr-xr-x 2 tecmint tecmint 4096 May 21 15:23 Documents 
drwxr-xr-x 8 tecmint tecmint 4096 May 20 14:56 Downloads 
drwxr-xr-x 2 tecmint tecmint 4096 May  7 16:58 Music 
drwxr-xr-x 2 tecmint tecmint 4096 May 20 16:17 Pictures 
drwxr-xr-x 2 tecmint tecmint 4096 May  7 16:58 Public 
drwxr-xr-x 2 tecmint tecmint 4096 May  7 16:58 Templates 
drwxr-xr-x 2 tecmint tecmint 4096 May  7 16:58 Videos

  去掉’l'別名,要使用unalias命令:

root@tecmint:~# unalias l

  再試試:

root@tecmint:~# l

bash: l: command not found

  開個玩笑,把一個重要命令的別名指定為另一個重要命令:

alias cd='ls -l' (set alias of ls -l to cd)
alias su='pwd' (set alias of pwd to su)
....
(You can create your own)
....

  想想多麼有趣,現在如果你的朋友敲入‘cd'命令,當他看到的是目錄檔案列表而不是改變目錄;當他試圖用’su‘命令時,他會進入當前目錄。你可以隨後去掉別名,向他解釋以上情況。

  29.命令: df

  報告系統的磁碟使用情況。在跟蹤磁碟使用情況方面對於普通使用者和系統管理員都很有用。 ‘df‘ 通過檢查目錄大小工作,但這一數值僅當檔案關閉時才得到更新。

root@tecmint:~# df

Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1       47929224 7811908  37675948  18% /
none                   4       0         4   0% /sys/fs/cgroup
udev             1005916       4   1005912   1% /dev
tmpfs             202824     816    202008   1% /run
none                5120       0      5120   0% /run/lock
none             1014120     628   1013492   1% /run/shm
none              102400      44    102356   1% /run/user
/dev/sda5         184307   79852     94727  46% /boot
/dev/sda7       95989516   61104  91045676   1% /data
/dev/sda8       91953192   57032  87218528   1% /personal

  ‘df’命令的更多例子請參閱 12 df Command Examples in Linux.

  30. 命令: du

  估計檔案的空間佔用。 逐層統計檔案(例如以遞迴方式)並輸出摘要。

root@tecmint:~# du

8       ./Daily Pics/wp-polls/images/default_gradient
8       ./Daily Pics/wp-polls/images/default
32      ./Daily Pics/wp-polls/images
8       ./Daily Pics/wp-polls/tinymce/plugins/polls/langs
8       ./Daily Pics/wp-polls/tinymce/plugins/polls/img
28      ./Daily Pics/wp-polls/tinymce/plugins/polls
32      ./Daily Pics/wp-polls/tinymce/plugins
36      ./Daily Pics/wp-polls/tinymce
580     ./Daily Pics/wp-polls
1456    ./Daily Pics
36      ./Plugins/wordpress-author-box
16180   ./Plugins
12      ./May Articles 2013/Xtreme Download Manager
4632    ./May Articles 2013/XCache

  注意: ‘df‘ 只顯示檔案系統的使用統計,但‘du‘統計目錄內容。‘du‘命令的更詳細資訊請參閱10 du (Disk Usage) Commands.

  31. 命令: rm

  'rm' 標準移除命令。 rm 可以用來刪除檔案和目錄。

  刪除目錄

root@tecmint:~# rm PassportApplicationForm_Main_English_V1.0

rm: cannot remove `PassportApplicationForm_Main_English_V1.0': Is a directory

  'rm' 不能直接刪除目錄,需要加上相應的'-rf'引數才可以。

root@tecmint:~# rm -rf PassportApplicationForm_Main_English_V1.0

  警告: "rm -rf" 命令是一個破壞性的命令,假如你不小心刪除一個錯誤的目錄。一旦你使用'rm -rf' 刪除一個目錄,在目錄中所有的檔案包括目錄本身會被永久的刪除,所以使用這個命令要非常小心。

  32. 命令: echo

  echo  的功能正如其名,就是基於標準輸出列印一段文字。它和shell無關,shell也不讀取通過echo命令列印出的內容。然而在一種互動式指令碼中,echo通過終端將資訊傳遞給使用者。它是在指令碼語言,互動式指令碼語言中經常用到的命令。

root@tecmint:~# echo "Tecmint.com is a very good website" 

Tecmint.com is a very good website
  建立一小段互動式指令碼

  1. 在桌面上新建一個檔案,命名為 ‘interactive_shell.sh‘  (記住必須帶 ‘.sh‘副檔名)。

  2. 複製貼上如下指令碼程式碼,確保和下面的一致。

#!/bin/bash 
echo "Please enter your name:" 
   read name 
   echo "Welcome to Linux $name"

  接下來,設定執行許可權並執行指令碼。

root@tecmint:~# chmod 777 interactive_shell.sh
root@tecmint:~# ./interactive_shell.sh

Please enter your name:
Ravi Saive
Welcome to Linux Ravi Saive

  注意: ‘#!/bin/bash‘ 告訴shell這是一個指令碼,並且在指令碼首行寫上這句話是個好習慣。. ‘read‘ 讀取給定的輸出.

  33. 命令: passwd

  這是一個很重要的命令,在終端中用來改變自己密碼很有用。顯然的,因為安全的原因,你需要知道當前的密碼。

root@tecmint:~# passwd 

Changing password for tecmint. 
(current) UNIX password: ******** 
Enter new UNIX password: ********
Retype new UNIX password: ********
Password unchanged   [這裡表示密碼未改變,例如:新密碼=舊密碼]
Enter new UNIX password: #####
Retype new UNIX password:#####

  34. 命令: lpr

  這個命令用來在命令列上將指定的檔案在指定的印表機上列印。

root@tecmint:~# lpr -P deskjet-4620-series 1-final.pdf

  注意: "lpq"命令讓你檢視印表機的狀態(是開啟狀態還是關閉狀態)和等待列印中的工作(檔案)的狀態。

  35. 命令: cmp

  比較兩個任意型別的檔案並將結果輸出至標準輸出。如果兩個檔案相同, ‘cmp‘預設返回0;如果不同,將顯示不同的位元組數和第一處不同的位置。

  以下面兩個檔案為例:

  file1.txt
root@tecmint:~# cat file1.txt

Hi My name is Tecmint
  file2.txt
root@tecmint:~# cat file2.txt

Hi My name is tecmint [dot] com

  比較一下這兩個檔案,看看命令的輸出。

root@tecmint:~# cmp file1.txt file2.txt 

file1.txt file2.txt differ: byte 15, line 1

  36. 命令: wget

  Wget是用於非互動式(例如後臺)下載檔案的免費工具.支援HTTP, HTTPS, FTP協議和 HTTP 代理。

  使用wget下載ffmpeg

root@tecmint:~# wget http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2

--2013-05-22 18:54:52--  http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2
Resolving downloads.sourceforge.net (downloads.sourceforge.net)... 216.34.181.59
Connecting to downloads.sourceforge.net (downloads.sourceforge.net)|216.34.181.59|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://kaz.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2 [following]
--2013-05-22 18:54:54--  http://kaz.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2
Resolving kaz.dl.sourceforge.net (kaz.dl.sourceforge.net)... 92.46.53.163
Connecting to kaz.dl.sourceforge.net (kaz.dl.sourceforge.net)|92.46.53.163|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 275557 (269K) [application/octet-stream]
Saving to: ‘ffmpeg-php-0.6.0.tbz2’

100%[===========================================================================>] 2,75,557    67.8KB/s   in 4.0s   

2013-05-22 18:55:00 (67.8 KB/s) - ‘ffmpeg-php-0.6.0.tbz2’ saved [275557/275557]

  37 命令: mount

  mount 是一個很重要的命令,用來掛載不能自動掛載的檔案系統。你需要root許可權掛載裝置。

  在插入你的檔案系統後,首先執行"lsblk"命令,識別出你的裝置,然後把分配的裝置名記下來。

root@tecmint:~# lsblk 

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT 
sda      8:0    0 931.5G  0 disk 
├─sda1   8:1    0 923.6G  0 part / 
├─sda2   8:2    0     1K  0 part 
└─sda5   8:5    0   7.9G  0 part [SWAP] 
sr0     11:0    1  1024M  0 rom  
sdb      8:16   1   3.7G  0 disk 
└─sdb1   8:17   1   3.7G  0 part

  從這個輸出上來看,很明顯我插入的是4GB的U盤,因而“sdb1”就是要掛載上來的檔案系統。以root使用者操作,然後切換到/dev目錄,它是所有檔案系統掛載的地方。

root@tecmint:~# su
Password:
root@tecmint:~# cd /dev

  建立一個任何名字的目錄,但是最好和引用相關。

root@tecmint:~# mkdir usb

  現在將“sdb1”檔案系統掛載到“usb目錄.

root@tecmint:~# mount /dev/sdb1 /dev/usb

  現在你就可以從終端進入到/dev/usb或者通過X視窗系統從掛載目錄訪問檔案。

  是時候讓程式猿見識見識Linux環境是多麼豐富了!

  38. 命令: gcc

  gcc 是Linux環境下C語言的內建編譯器。下面是一個簡單的C程式,在桌面上儲存為Hello.c (記住必須要有‘.c‘副檔名)。

#include <stdio.h>
int main()
{
  printf("Hello world\n");
  return 0;
}
  編譯
root@tecmint:~# gcc Hello.c
  執行
root@tecmint:~# ./a.out 

Hello world

  注意: 編譯C程式時,輸出會自動儲存到一個名為“a.out”的新檔案,因此每次編譯C程式 “a.out”都會被修改。 因此編譯期間最好定義輸出檔名.,這樣就不會有覆蓋輸出檔案的風險了。

  用這種方法編譯
root@tecmint:~# gcc -o Hello Hello.c

  這裡‘-o‘將輸出寫到‘Hello‘檔案而不是 ‘a.out‘。再執行一次。

root@tecmint:~# ./Hello 

Hello world

  39. 命令: g++

  g++C++的內建編譯器。下面是一個簡單的C++程式,在桌面上儲存為Add.cpp (記住必須要有‘.cpp‘副檔名)。

#include <iostream>

using namespace std;

int main() 
    {
          int a;
          int b;
          cout<<"Enter first number:\n";
          cin >> a;
          cout <<"Enter the second number:\n";
          cin>> b;
          cin.ignore();
          int result = a + b;
          cout<<"Result is"<<"  "<<result<<endl;
          cin.get();
          return 0;
     }
  編譯
root@tecmint:~# g++ Add.cpp
  執行
root@tecmint:~# ./a.out

Enter first number: 
...
...

  注意:編譯C++程式時,輸出會自動儲存到一個名為a.out”的新檔案,因此每次編譯C++程式 “a.out”都會被修改。 因此編譯期間最好定義輸出檔名.,這樣就不會有覆蓋輸出檔案的風險了。

  用這種方法編譯
root@tecmint:~# g++ -o Add Add.cpp
  執行
root@tecmint:~# ./Add 

Enter first number: 
...
...

  40. 命令: java

  Java 是世界上使用最廣泛的程式語言之一. 它也被認為是高效, 安全和可靠的程式語言. 現在大多數基於網路的服務都使用Java實現. 

  拷貝以下程式碼到一個檔案就可以建立一個簡單的Java程式. 不妨把檔案命名為tecmint.java (記住: '.java'副檔名是必需的).

class tecmint {
  public static void main(String[] arguments) {
    System.out.println("Tecmint ");
  }
}
  用javac編譯tecmint.java
root@tecmint:~# javac tecmint.java
  執行
root@tecmint:~# java tecmint

  注意: 幾乎所有的Linux發行版都帶有gcc編譯器, 大多數發行版都內建了g++ 和 java 編譯器, 有些也可能沒有. 你可以用apt 或 yum 安裝需要的包.

  請留下您寶貴的意見和想看到的文章型別. 稍後, 我會打來一個很有趣主題, 關於Linux的一些鮮為人知的知識.

  英文來源:http://www.tecmint.com/20-advanced-commands-for-middle-level-linux-users/

相關文章