1. 程式人生 > >50個最常用的Unix/Linux命令

50個最常用的Unix/Linux命令

並且 ble 查看 2.6 literal 包含 shared ips ifconf

轉自:http://gywbd.github.io/posts/2014/8/50-linux-commands.html

這篇文章翻譯自http://www.thegeekstuff.com/2010/11/50-linux-commands/這些都是一些很常用的命令,這篇文章中每個命令都有一些簡單的示例說明它的用法,對於想學習Unix/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

更多示例:The Ultimate Tar Command Tutorial with 10 Practical Examples

2. grep

在文件中查找字符串(不區分大小寫)

$ grep -i "the" demo_file

輸出成功匹配的行,以及該行之後的三行

$ grep -A 3 -i "example" demo_text

在一個文件夾中遞歸查詢包含指定字符串的文件

$ grep -r "ramesh" *

更多示例:Get a Grip on the Grep! – 15 Practical Grep Command Examples

3. find

查找指定文件名的文件(不區分大小寫)

$ find -iname "MyProgram.c"

對找到的文件執行某個命令

$ find -iname "MyProgram.c" -exec md5sum {} \;

查找home目錄下的所有空文件

$ find ~ -empty

更多示例:Mommy, I found it! — 15 Practical Linux Find Command Examples

4. ssh

登錄到遠程主機

$ ssh -l jsmith remotehost.example.com

調試ssh客戶端

$ ssh -v -l jsmith remotehost.example.com

顯示ssh客戶端版本

$ ssh -V

更多示例:5 Basic Linux SSH Client Commands

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/ /‘

更多示例:Advanced Sed Substitution Examples

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

更多示例:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

7. vim

打開文件並跳到第10行

$ vim +10 filename.txt

打開文件跳到第一個匹配的行

$ vim +/search-term filename.txt

以只讀模式打開文件

$ vim -R /etc/passwd

更多示例:How To Record and Play in Vim Editor

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

更多示例:Unix LS Command: 15 Practical Examples

13. pwd

輸出當前工作目錄

14. cd

cd -可以在最近工作的兩個目錄間切換

使用shopt -s cdspell可以設置自動對cd命令進行拼寫檢查

更多示例:6 Awesome Linux cd command Hacks

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

更多示例:BZ is Eazy! bzip2, bzgrep, bzcmp, bzdiff, bzcat, bzless, bzmore examples

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

更多示例:FTP and SFTP Beginners Guide with 10 Examples

20. crontab

查看某個用戶的crontab入口

$ crontab -u john -l

設置一個每十分鐘執行一次的計劃任務

*/10 * * * * /home/ramesh/check-disk-space

更多示例:Linux Crontab: 15 Awesome Cron Job Examples

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選項,使用這個選項會在輸出中加一個匯總行

ramesh@ramesh-laptop:~$ 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

更多示例:Can You Top This? 15 Practical Linux Top Command Examples

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
//app@izenesoft.cn/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

更多示例:4 Ways to Kill a Process – kill, killall, pkill, xkill

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

更多示例:7 Chmod Command Examples for Beginners

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

更多示例:Ifconfig: 7 Examples To Configure Network Interface

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種命令類型

  1. 用戶命令
  2. 系統調用
  3. c庫函數
  4. 設備與網絡接口
  5. 文件格式
  6. 遊戲與屏保
  7. 環境、表、宏
  8. 系統管理員命令和後臺運行命令

例如,我們執行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

更多示例:3 Methods To View tail -f output of Multiple Log Files in One Terminal

43. less

這個命名可以在不加載整個文件的前提下顯示文件內容,在查看大型日誌文件的時候這個命令會非常有用

$ less huge-log-file.log

當你用less命令打開某個文件時,下面兩個按鍵會給你帶來很多幫助,他們用於向前和向後滾屏

CTRL+F – forward one window
CTRL+B – backward one window

更多示例:Unix Less Command: 10 Tips for Effective Navigation

44. su

su命令用於切換用戶賬號,超級用戶使用這個命令可以切換到任何其他用戶而不用輸入密碼

$ su - USERNAME

用另外一個用戶名執行一個命令下面的示例中用戶john使用raj用戶名執行ls命令,執行完後返回john的賬號

[john@dev-server]$ su - raj -c ‘ls‘

[john@dev-server]$

用指定用戶登錄,並且使用指定的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

更多示例:RPM Command: 15 Examples to Install, Uninstall, Upgrade, Query RPM Packages

48. ping

ping一個遠程主機,只發5個數據包

$ ping -c 5 gmail.com

更多示例:Ping Tutorial: 15 Effective Ping Command Examples

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

50個最常用的Unix/Linux命令