轉載至:http://gywbd.github.io/posts/2014/8/50-linux-commands.html
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" *
更多示例: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種命令類型
- 用戶命令
- 系統調用
- 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
更多示例: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
更多示例:The Ultimate Wget Download Guide With 15 Awesome Examples