中級 Linux 用戶非常有用的 20 個命令
來自: http://my.oschina.net/u/192561/blog/617318
21. 命令: Find
搜索指定目錄下的文件,從開始于父目錄,然后搜索子目錄。
? ~ find -name idea.sh ./bigdata/idea-IU-143.1184.17/bin/idea.sh ./bigdata/idea-IC-141.2735.5/bin/idea.sh
注意: `-name‘選項是搜索大小寫敏感。可以使用`-iname‘選項,這樣在搜索中可以忽略大小寫。(*是通配符,可以搜索所有的文件;‘.sh‘你可以使用文件名或者文件名的一部分來制定輸出結果)
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"
注意:您還可以使用以下選項:
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
24. 命令: ps
ps命令給出正在運行的某個進程的狀態,每個進程有特定的id成為PID。
? ~ ps PID TTY TIME CMD 10668 pts/4 00:00:00 ps 25757 pts/4 00:00:00 zsh
使用‘-A‘選項可以列出所有的進程及其PID。
注意:當你要知道有哪些進程在運行或者需要知道想殺死的進程PID時ps命令很管用。你可以把它與‘grep‘合用來查詢指定的輸出結果,例如:
? ~ ps -A|grep -i ssh 1148 ? 00:00:00 sshd 2617 ? 00:00:00 ssh-agent
25. 命令: kill
殺死一個進程需要知道進程的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命令的二進制文件/資源以及幫助頁:
? ~ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz ? ~ 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:#####
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的一些鮮為人知的知識.
原文出處:Tecmit
譯文出處:oschina
譯文鏈接:http://www.oschina.net/translate/20-advanced-commands-for-middle-level-linux-users