50個最常用的Linux命令
tar grep find ssh sed awk vim diff sort export args ls pwd cd gzip bzip2 unzip shutdown ftp crontab service ps free top df kill rm cp mv cat mount chmod chown passwd mkdir ifconfig uname whereis whatis locate man tail less su mysql yum rpm ping date wget
1. tar
建立一個新的tar檔案
$ tar cvf archive_name.tar dirname/
解壓tar檔案
$ tar xvf archive_name.tar
檢視tar檔案
$ tar tvf archive_name.tar
2. grep
在檔案中查詢字串(不區分大小寫)
$ grep -i "the" demo_file
輸出成功匹配的行,以及該行之後的三行
$ grep -A 3 -i "example" demo_text
在一個資料夾中遞迴查詢包含指定字串的檔案
$ grep -r "ramesh" *
3. find
查詢指定檔名的檔案(不區分大小寫)
$ find -iname "MyProgram.c"
對找到的檔案執行某個命令
$ find -iname "MyProgram.c" -exec md5sum {} \;
查詢home目錄下的所有空檔案
$ find ~ -empty
4. ssh
登入到遠端主機
$ ssh -l jsmith remotehost.example.com
除錯ssh客戶端
$ ssh -v -l jsmith remotehost.example.com
顯示ssh客戶端版本
$ ssh -V
5. sed
當你將Dos系統中的檔案複製到Unix/Linux後,這個檔案每行都會以\r\n結尾,sed可以輕易將其轉換為Unix格式的檔案,使用\n結尾的檔案
$ sed 's/.$//' filename
反轉檔案內容並輸出
$ sed -n '1!G; h; p' filename
為非空行新增行號
$ sed '/./=' thegeekstuff.txt | sed 'N; s/\n/ /'
6. awk
刪除重複行
$ awk '!($0 in array) { array[$0]; print}' temp
列印/etc/passwd中所有包含同樣的uid和gid的行
$ awk -F ':' '$3=$4' /etc/passwd
列印檔案中的指定部分的欄位
$ awk '{print $2,$5;}' employee.txt
7. vim
開啟檔案並跳到第10行
$ vim +10 filename.txt
開啟檔案跳到第一個匹配的行
$ vim +/search-term filename.txt
以只讀模式開啟檔案
$ vim -R /etc/passwd
8. diff
比較的時候忽略空白符
$ diff -w name_list.txt name_list_new.txt
9. sort
以升序對檔案內容排序
$ sort names.txt
以降序對檔案內容排序
$ sort -r names.txt
以第三個欄位對/etc/passwd的內容排序
$ sort -t: -k 3n /etc/passwd | more
10. export
輸出跟字串oracle匹配的環境變數
$ export | grep ORCALE declare -x ORACLE_BASE="/u01/app/oracle" declare -x ORACLE_HOME="/u01/app/oracle/product/10.2.0" declare -x ORACLE_SID="med" declare -x ORACLE_TERM="xterm"
設定全域性環境變數
$ export ORACLE_HOME=/u01/app/oracle/product/10.2.0
11. xargs
將所有圖片檔案拷貝到外部驅動器
$ ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory
將系統中所有jpd檔案壓縮打包
$ find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
下載檔案中列出的所有url對應的頁面
$ cat url-list.txt | xargs wget –c
12. ls
以易讀的方式顯示檔案大小(顯示為MB,GB...)
$ ls -lh -rw-r----- 1 ramesh team-dev 8.9M Jun 12 15:27 arch-linux.txt.gz
以最後修改時間升序列出檔案
$ ls -ltr
在檔名後面顯示檔案型別
$ ls -F
13. pwd
輸出當前工作目錄
14. cd
cd -
可以在最近工作的兩個目錄間切換
使用shopt -s cdspell
可以設定自動對cd命令進行拼寫檢查
15. gzip
建立一個*.gz的壓縮檔案
$ gzip test.txt
解壓*.gz檔案
$ gzip -d test.txt.gz
顯示壓縮的比率
$ gzip -l *.gz compressed uncompressed ratio uncompressed_name 23709 97975 75.8% asp-patch-rpms.txt
16. bzip2
建立*.bz2壓縮檔案
$ bzip2 test.txt
解壓*.bz2檔案
bzip2 -d test.txt.bz2
17. uzip
解壓*.zip檔案
$ unzip test.zip
檢視*.zip檔案的內容
$ unzip -l jasper.zip Archive: jasper.zip Length Date Time Name -------- ---- ---- ---- 40995 11-30-98 23:50 META-INF/MANIFEST.MF 32169 08-25-98 21:07 classes_ 15964 08-25-98 21:07 classes_names 10542 08-25-98 21:07 classes_ncomp
18. shutdown
關閉系統並立即關機
$ shutdown -h now
10分鐘後關機
$ shutdown -h +10
重啟
$ shutdown -r now
重啟期間強制進行系統檢查
$ shutdown -Fr now
19. ftp
ftp命令和sftp命令的用法基本相似連線ftp伺服器並下載多個檔案
$ ftp IP/hostname ftp> mget *.html
顯示遠端主機上檔案列表
ftp> mls *.html - /ftptest/features.html /ftptest/index.html /ftptest/othertools.html /ftptest/samplereport.html /ftptest/usage.html
20. crontab
檢視某個使用者的crontab入口
$ crontab -u john -l
設定一個每十分鐘執行一次的計劃任務
*/10 * * * * /home/ramesh/check-disk-space
21. service
service命令用於執行System V init指令碼,這些指令碼一般位於/etc/init.d檔案下,這個命令可以直接執行這個資料夾裡面的指令碼,而不用加上路徑
檢視服務狀態
$ service ssh status
檢視所有服務狀態
$ service --status-all
重啟服務
$ service ssh restart
22. ps
ps命令用於顯示正在執行中的程序的資訊,ps命令有很多選項,這裡只列出了幾個
檢視當前正在執行的所有程序
$ ps -ef | more
以樹狀結構顯示當前正在執行的程序,H選項表示顯示程序的層次結構
$ ps -efH | more
23. free
這個命令用於顯示系統當前記憶體的使用情況,包括已用記憶體、可用記憶體和交換記憶體的情況
預設情況下free會以位元組為單位輸出記憶體的使用量
$ free total used free shared buffers cached Mem: 3566408 1580220 1986188 0 203988 902960 -/+ buffers/cache: 473272 3093136 Swap: 4000176 0 4000176
如果你想以其他單位輸出記憶體的使用量,需要加一個選項,-g為GB,-m為MB,-k為KB,-b為位元組
$ free -g total used free shared buffers cached Mem: 3 1 1 0 0 0 -/+ buffers/cache: 0 2 Swap: 3 0 3
如果你想檢視所有記憶體的彙總,請使用-t選項,使用這個選項會在輸出中加一個彙總行
[email protected]:~$ free -t total used free shared buffers cached Mem: 3566408 1592148 1974260 0 204260 912556 -/+ buffers/cache: 475332 3091076 Swap: 4000176 0 4000176 Total: 7566584 1592148 5974436
24. top
top命令會顯示當前系統中佔用資源最多的一些程序(預設以CPU佔用率排序)如果你想改變排序方式,可以在結果列表中點選O(大寫字母O)會顯示所有可用於排序的列,這個時候你就可以選擇你想排序的列
Current Sort Field: P for window 1:Def Select sort field via field letter, type any other key to return a: PID = Process Id v: nDRT = Dirty Pages count d: UID = User Id y: WCHAN = Sleeping in Function e: USER = User Name z: Flags = Task Flags ........
如果只想顯示某個特定使用者的程序,可以使用-u選項
$ top -u oracle
25. df
顯示檔案系統的磁碟使用情況,預設情況下df -k
將以位元組為單位輸出磁碟的使用量
$ df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 29530400 3233104 24797232 12% / /dev/sda2 120367992 50171596 64082060 44% /home
使用-h選項可以以更符合閱讀習慣的方式顯示磁碟使用量
$ df -h Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk0s2 232Gi 84Gi 148Gi 37% 21998562 38864868 36% / devfs 187Ki 187Ki 0Bi 100% 648 0 100% /dev map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home /dev/disk0s4 466Gi 45Gi 421Gi 10% 112774 440997174 0% /Volumes/BOOTCAMP //[email protected]/public 2.7Ti 1.3Ti 1.4Ti 48% 0 18446744073709551615 0% /Volumes/public
使用-T選項顯示檔案系統型別
$ df -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sda1 ext4 29530400 3233120 24797216 12% / /dev/sda2 ext4 120367992 50171596 64082060 44% /home
26. kill
kill用於終止一個程序。一般我們會先用ps -ef
查詢某個程序得到它的程序號,然後再使用kill -9 程序號
終止該程序。你還可以使用killall、pkill、xkill來終止程序
$ ps -ef | grep vim ramesh 7243 7222 9 22:43 pts/2 00:00:00 vim $ kill -9 7243
27. rm
刪除檔案前先確認
$ rm -i filename.txt
在檔名中使用shell的元字元會非常有用。刪除檔案前先列印檔名並進行確認
$ rm -i file*
遞迴刪除資料夾下所有檔案,並刪除該資料夾
$ rm -r example
28. cp
拷貝檔案1到檔案2,並保持檔案的許可權、屬主和時間戳
$ cp -p file1 file2
拷貝file1到file2,如果file2存在會提示是否覆蓋
$ cp -i file1 file2
29. mv
將檔名file1重新命名為file2,如果file2存在則提示是否覆蓋
$ mv -i file1 file2
注意如果使用-f選項則不會進行提示
-v會輸出重新命名的過程,當檔名中包含萬用字元時,這個選項會非常方便
$ mv -v file1 file2
30. cat
你可以一次檢視多個檔案的內容,下面的命令會先列印file1的內容,然後列印file2的內容
$ cat file1 file2
-n命令可以在每行的前面加上行號
$ cat -n /etc/logrotate.conf 1 /var/log/btmp { 2 missingok 3 monthly 4 create 0660 root utmp 5 rotate 1 6 }
31. mount
如果要掛載一個檔案系統,需要先建立一個目錄,然後將這個檔案系統掛載到這個目錄上
# mkdir /u01 # mount /dev/sdb1 /u01
也可以把它新增到fstab中進行自動掛載,這樣任何時候系統重啟的時候,檔案系統都會被載入
/dev/sdb1 /u01 ext2 defaults 0 2
32. chmod
chmod用於改變檔案和目錄的許可權
給指定檔案的屬主和屬組所有許可權(包括讀、寫、執行)
$ chmod ug+rwx file.txt
刪除指定檔案的屬組的所有許可權
$ chmod g-rwx file.txt
修改目錄的許可權,以及遞迴修改目錄下面所有檔案和子目錄的許可權
$ chmod -R ug+rwx file.txt
33. chown
chown用於改變檔案屬主和屬組
同時將某個檔案的屬主改為oracle,屬組改為db
$ chown oracle:dba dbora.sh
使用-R選項對目錄和目錄下的檔案進行遞迴修改
$ chown -R oracle:dba /home/oracle
34. passwd
passwd用於在命令列修改密碼,使用這個命令會要求你先輸入舊密碼,然後輸入新密碼
$ passwd
超級使用者可以用這個命令修改其他使用者的密碼,這個時候不需要輸入使用者的密碼
# passwd USERNAME
passwd還可以刪除某個使用者的密碼,這個命令只有root使用者才能操作,刪除密碼後,這個使用者不需要輸入密碼就可以登入到系統
# passwd -d USERNAME
35. mkdir
在home目錄下建立一個名為temp的目錄
$ mkdir ~/temp
使用-p選項可以建立一個路徑上所有不存在的目錄
$ mkdir -p dir1/dir2/dir3/dir4/
36. ifconfig
ifconfig用於檢視和配置Linux系統的網路介面
檢視所有網路介面及其狀態
$ ifconfig -a
使用up和down命令啟動或停止某個介面
$ ifconfig eth0 up $ ifconfig eth0 down
37. uname
uname可以顯示一些重要的系統資訊,例如核心名稱、主機名、核心版本號、處理器型別之類的資訊
$ uname -a Linux john-laptop 2.6.32-24-generic #41-Ubuntu SMP Thu Aug 19 01:12:52 UTC 2010 i686 GNU/Linux
38. whereis
當你不知道某個命令的位置時可以使用whereis命令,下面使用whereis查詢ls的位置
$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
當你想查詢某個可執行程式的位置,但這個程式又不在whereis的預設目錄下,你可以使用-B選項,並指定目錄作為這個選項的引數。下面的命令在/tmp目錄下查詢lsmk命令
$ whereis -u -B /tmp -f lsmk lsmk: /tmp/lsmk
39. whatis
wathis顯示某個命令的描述資訊
$ whatis ls ls (1) - list directory contents $ whatis ifconfig ifconfig (8) - configure a network interface
40. locate
locate命名可以顯示某個指定檔案(或一組檔案)的路徑,它會使用由updatedb建立的資料庫
下面的命令會顯示系統中所有包含crontab字串的檔案
$ locate crontab /etc/anacrontab /etc/crontab /usr/bin/crontab /usr/share/doc/cron/examples/crontab2english.pl.gz /usr/share/man/man1/crontab.1.gz /usr/share/man/man5/anacrontab.5.gz /usr/share/man/man5/crontab.5.gz /usr/share/vim/vim72/syntax/crontab.vim
41. man
顯示某個命令的man頁面
$ man crontab
有些命令可能會有多個man頁面,每個man頁面對應一種命令型別
$ man SECTION-NUMBER commandname
man頁面一般可以分為8種命令型別
- 使用者命令
- 系統呼叫
- c庫函式
- 裝置與網路介面
- 檔案格式
- 遊戲與屏保
- 環境、表、巨集
- 系統管理員命令和後臺執行命令
例如,我們執行whatis crontab
,你可以看到crontab有兩個命令型別1和5,所以我們可以通過下面的命令檢視命令型別5的man頁面
$ whatis crontab crontab (1) - maintain crontab files for individual users (V3) crontab (5) - tables for driving cron $ man 5 crontab
42. tail
tail命令預設顯示檔案最後的10行文字
$ tail filename.txt
你可以使用-n選項指定要顯示的行數
$ tail -n N filename.txt
你也可以使用-f選項進行實時檢視,這個命令執行後會等待,如果有新行新增到檔案尾部,它會繼續輸出新的行,在檢視日誌時這個選項會非常有用。你可以通過CTRL-C終止命令的執行
$ tail -f log-file
43. less
這個命名可以在不載入整個檔案的前提下顯示檔案內容,在檢視大型日誌檔案的時候這個命令會非常有用
$ less huge-log-file.log
當你用less命令開啟某個檔案時,下面兩個按鍵會給你帶來很多幫助,他們用於向前和向後滾屏
CTRL+F – forward one window CTRL+B – backward one window
44. su
su命令用於切換使用者賬號,超級使用者使用這個命令可以切換到任何其他使用者而不用輸入密碼
$ su - USERNAME
用另外一個使用者名稱執行一個命令下面的示例中使用者john使用raj使用者名稱執行ls命令,執行完後返回john的賬號
[[email protected]]$ su - raj -c 'ls' [[email protected]]$
用指定使用者登入,並且使用指定的shell程式,而不用預設的
$ su -s 'SHELLNAME' USERNAME
45. mysql
mysql可能是Linux上使用最廣泛的資料庫,即使你沒有在你的伺服器上安裝mysql,你也可以使用mysql客戶端連線到遠端的mysql伺服器
連線一個遠端資料庫,需要輸入密碼
$ mysql -u root -p -h 192.168.1.2
連線本地資料庫
$ mysql -u root -p
你也可以在命令列中輸入資料庫密碼,只需要在-p後面加上密碼作為引數,可以直接寫在p後面而不用加空格
46. yum
使用yum安裝apache
$ yum install httpd
更新apache
$ yum update httpd
解除安裝/刪除apache
$ yum remove httpd
47. rpm
使用rpm安裝apache
# rpm -ivh httpd-2.2.3-22.0.1.el5.i386.rpm
更新apache
# rpm -uvh httpd-2.2.3-22.0.1.el5.i386.rpm
解除安裝/刪除apache
# rpm -ev httpd
48. ping
ping一個遠端主機,只發5個數據包
$ ping -c 5 gmail.com
49. date
設定系統日期
# date -s "01/31/2010 23:59:53"
當你修改了系統時間,你需要同步硬體時間和系統時間
# hwclock –systohc # hwclock --systohc –utc
50. wget
使用wget從網上下載軟體、音樂、視訊
$ wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz
下載檔案並以指定的檔名儲存檔案
$ wget -O taglist.zip http://www.vim.org/scripts/download_script.php?src_id=7701