Linux/Unix 常用命令 【更新】

2020-08-14 19:09:34

該文章爲本人學習記錄使用,整理了日常使用的命令。如有錯誤歡迎指正。

什麼是 Linux

Linux,全稱 GNU/Linux,是一套免費使用和自由傳播的類 UNIX 操作系統,其內核由 Linus Benedict Torvalds 於1991年第一次釋出,它主要受到 Minix 和 Unix 思想的啓發。它能執行主要的 Unix 工具軟體、應用程式和網路協定。它支援32位元和64位元硬體。Linux繼承了Unix以網路爲核心的設計思想,是一個效能穩定的多使用者網路操作系統。
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-toVZyg9z-1597395888097)(Linux-常用命令/DB04CB7380394D02868AC162A6E50FC0-3865896.jpg)]


常用命令

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

tar

建立一個新的tar檔案

$ tar cvf archive_name.tar dirname/

解壓tar檔案

$ tar xvf archive_name.tar

檢視tar檔案

$ tar tvf archive_name.tar

grep

在檔案中查詢字串(不區分大小寫)

$ grep -i 「the」 demo_file

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

$ grep -A 3 -i 「example」 demo_text

在一個資料夾中遞回查詢包含指定字串的檔案

$ grep -r 「ramesh」 *

find

查詢指定檔名的檔案(不區分大小寫)

$ find -iname 「MyProgram.c」

對找到的檔案執行某個命令

$ find -iname 「MyProgram.c」 -exec md5sum {} ;

查詢home目錄下的所有空檔案

$ find ~ -empty

ssh

登錄到遠端主機

$ ssh -l jsmith remotehost.example.com

偵錯ssh用戶端

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

顯示ssh用戶端版本

$ ssh -V

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

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

vim

開啓檔案並跳到第10行

$ vim +10 filename.txt

開啓檔案跳到第一個匹配的行

$ vim +/search-term filename.txt

以只讀模式開啓檔案

$ vim -R /etc/passwd

diff

比較的時候忽略空白符

$ diff -w name_list.txt name_list_new.txt

sort

以升序對檔案內容排序

$ sort names.txt

以降序對檔案內容排序

$ sort -r names.txt

以第三個欄位對/etc/passwd的內容排序

$ sort -t: -k 3n /etc/passwd | more

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

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

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

pwd

輸出當前工作目錄

cd

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

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

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

bzip2

建立*.bz2壓縮檔案

$ bzip2 test.txt

解壓*.bz2檔案

bzip2 -d test.txt.bz2

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

shutdown

關閉系統並立即關機

$ shut an> -h now

10分鐘後關機

$ shutdown -h +10

重新啓動

$ shutdown -r now

重新啓動期間強制進行系統檢查

$ shut an> -Fr now

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

crontab

檢視某個使用者的crontab入口

$ crontab -u john -l

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

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

service

service命令用於執行System V init指令碼,這些指令碼一般位於/etc/init.d檔案下,這個命令可以直接執行這個資料夾裏面的指令碼,而不用加上路徑

檢視服務狀態

$ service ssh status

檢視所有服務狀態

$ service --status-all

重新啓動服務

$ service ssh restart

ps

ps命令用於顯示正在執行中的進程的資訊,ps命令有很多選項,這裏只列出了幾個

檢視當前正在執行的所有進程

$ ps -ef | more

以樹狀結構顯示當前正在執行的進程,H選項表示顯示進程的層次結構

$ ps -efH | more

ps

ps命令用於顯示正在執行中的進程的資訊,ps命令有很多選項,這裏只列出了幾個

檢視當前正在執行的所有進程

$ ps -ef | more

以樹狀結構顯示當前正在執行的進程,H選項表示顯示進程的層次結構

$ ps -efH | more

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

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

df

顯示檔案系統的磁碟使用情況,預設情況下df -k將以位元組爲單位輸出磁碟的使用量

$ df -k
Filesystem           1K-blocks      Used Available Use% Mounted > on
/dev/sda1             29530400   3233104  24797232  12% /
/dev/sda2            120367992  < class="hljs-number">50171596

使用-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

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

rm

刪除檔案前先確認

$ rm -i filename.txt

在檔名中使用shell的元字元會非常有用。刪除檔案前先列印檔名並進行確認

$ rm -i file*

遞回刪除資料夾下所有檔案,並刪除該資料夾

$ rm -r example

cp

拷貝檔案1到檔案2,並保持檔案的許可權、屬主和時間戳

$ cp -p file1 file2

拷貝file1到file2,如果file2存在會提示是否覆蓋

$ cp -i file1 file2

mv

將檔名file1重新命名爲file2,如果file2存在則提示是否覆蓋

$ mv -i file1 file2

注意如果使用-f選項則不會進行提示

-v會輸出重新命名的過程,當檔名中包含萬用字元時,這個選項會非常方便

$ mv -v file1 file2

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	}

mount

如果要掛載一個檔案系統,需要先建立一個目錄,然後將這個檔案系統掛載到這個目錄上

$ # mkdir /u01



$ # mount /dev/sdb1 /u01

也可以把它新增到fstab中進行自動掛載,這樣任何時候系統重新啓動的時候,檔案系統都會被載入

/dev/sdb1 /u01 ext2 defaults 0 2

chmod

chmod用於改變檔案和目錄的許可權

給指定檔案的屬主和屬組所有許可權(包括讀、寫、執行)

$ chmo ug+rwx file.txt

刪除指定檔案的屬組的所有許可權

$ chmo g-rwx file.txt

修改目錄的許可權,以及遞回修改目錄下面 下麪所有檔案和子目錄的許可權

$ chmo -R ug+rwx file.txt

chown

chown用於改變檔案屬主和屬組

同時將某個檔案的屬主改爲oracle,屬組改爲db

$ chown oracle:dba dbora.sh

使用-R選項對目錄和目錄下的檔案進行遞回修改

$ chow -R oracle:dba /home/oracle

passwd

passwd用於在命令列修改密碼,使用這個命令會要求你先輸入舊密碼,然後輸入新密碼

$ passwd

超級使用者可以用這個命令修改其他使用者的密碼,這個時候不需要輸入使用者的密碼

$ # passwd USERNAME

passwd還可以刪除某個使用者的密碼,這個命令只有root使用者才能 纔能操作,刪除密碼後,這個使用者不需要輸入密碼就可以登錄到系統

$ # passwd -d USERNAME

mkdir

在home目錄下建立一個名爲temp的目錄

$ mkdir ~/temp

使用-p選項可以建立一個路徑上所有不存在的目錄

$ mkdir -p dir1/dir2/dir3/dir4/

ifconfig

ifconfig用於檢視和設定Linux系統的網路介面

檢視所有網路介面及其狀態

$ ifconfig -a

使用up和down命令啓動或停止某個介面

$ ifconfig eth0 up



$ ifconfig eth0 down

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

whereis

當你不知道某個命令的位置時可以使用whereis命令,下面 下麪使用whereis查詢ls的位置

$ whereis ls

ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

whatis

wathis顯示某個命令的描述資訊

$ whatis ls
ls		(1)  - list directory contents

$ whatis ifconfig
ifconfig (8)         - configure a network interface

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

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

tail

tail命令預設顯示檔案最後的10行文字

$ tail filename.txt

你可以使用-n選項指定要顯示的行數

$ tail -n N filename.txt

你也可以使用-f選項進行實時檢視,這個命令執行後會等待,如果有新行新增到檔案尾部,它會繼續輸出新的行,在檢視日誌時這個選項會非常有用。你可以通過CTRL-C終止命令的執行

$ tail -f log-file

less

這個命名可以在不載入整個檔案的前提下顯示檔案內容,在檢視大型日誌檔案的時候這個命令會非常有用

$ less huge-log-file.log

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

CTRL+F – forward one window

CTRL+B – backward one window

su

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

$ su - USERNAME

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

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



[john@dev-server]$

用指定使用者登錄,並且使用指定的shell程式,而不用預設的

$ su -s ‘SHELLNAME’ USERNAME

mysql

mysql可能是Linux上使用最廣泛的數據庫,即使你沒有在你的伺服器上安裝mysql,你也可以使用mysql用戶端連線到遠端的mysql伺服器

連線一個遠端數據庫,需要輸入密碼

$ mysql -u root -p -h 192.168.1.2

連線本地數據庫

$ mysql -u root -p

你也可以在命令列中輸入數據庫密碼,只需要在-p後面加上密碼作爲參數,可以直接寫在p後面而不用加空格

yum

使用yum安裝apache

$ yum install httpd

更新apache

$ yum update httpd

解除安裝/刪除apache

$ yum remove httpd

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

參考

[1] 鳥哥. 鳥 哥 的 Linux 私 房 菜 基 礎 篇 第 三 版[J]. 2009.
[2] https://www.thegeekstuff.com/2010/11/50-linux-commands/