1. 程式人生 > >linux入門系列5--新手必會的linux命令

linux入門系列5--新手必會的linux命令

上一篇文章“linux入門系列4--vi/vim編輯器”我們討論了在linux下如何快速高效對文字檔案進行編輯和管理,本文將進一步學習必須掌握的linux命令,掌握這些命令才能讓計算機更懂你。

就我們前文已經裝好的centos作業系統而言,我們操作通常有2種方式:第一種就是通過桌面圖形化操作;另外一種則是通過終端輸入命令。

針對伺服器而言我們通常是採用遠端連線工具連線到伺服器,然後以命令的方式進行管理。我們輸入命令後計算機怎麼就知道該做什麼呢?那就得靠命令列工具(也稱終端)進行翻譯解釋,然後呼叫相應的介面服務完成特定的功能。

使用者與linux系統的互動是通過shell終端,下文講先分析shell命令列工具,再講解最基礎的linux命令。

一、shell簡介

計算機硬體是由運算器、控制器、儲存器、輸入/輸出裝置等共同組成的,而讓各種硬體裝置各司其職且又能協同執行的東西就是系統核心。Linux 系統的核心負責完成對硬體資源的分配、排程等管理任務。因此,系統核心對計算機的正常執行至關重要,一般不建議直接去編輯核心中的引數,而是讓使用者通過基於系統呼叫介面開發出的程式或服務來管理計算機,以滿足日常工作的需要。而shell就是這樣一個客戶端命令列工具,充當使用者與系統核心溝通的橋樑。

Shell也稱“終端”、“殼”,是一種用c語言寫的命令列工具, 充當人與核心(硬體)之間的翻譯官,使用者把一些命令“告訴”終端,它就會呼叫相應的程式服務去完成某些工作。

1.1 shell版本

以下列舉幾種shell版本

  • sh(Bourne Shell): 是UNIX最初使用的 shell,而且在每種 UNIX 上都可以使用 。在shell程式設計方面做的很優秀,但是在處理與使用者的互動方面做得不如其他幾種shell。
  • bash(Bourne Again Shell):Linux預設,是Bourne Shell的擴充套件。完全相容Bourne Shell,並在他基礎上增加了很多特性如命令補全、命令歷史等。它還包含了很多C Shell和Korn Shell中的優點,有靈活和強大的編輯介面,同時有很友好的使用者介面。
  • csh(C Shell):一種比Bourne Shell更適合的變種Shell,語法與C語言很相似。
  • Tcsh:Linux提供的C Shell的一個擴充套件版本。 包括命令列編輯,可程式設計單詞補全,拼寫校正,歷史命令替換,作業控制和類似 C 語言的語法,他不僅和 Bash Shell 提示符相容,而且還提供比 Bash Shell 更多的提示符引數 。
  • ksh(Korn Shell): 集合了 C Shell 和 Bourne Shell 的優點並且和 Bourne Shell 完全相容。
  • pdksh: Linux 系統提供的 ksh 的擴充套件。 支援人物控制,可以在命令列上掛起,後臺執行,喚醒或終止程式。

現在包括紅帽系統在內的許多主流 Linux 系統預設使用的終端是 Bash(Bourne-Again SHell)直譯器 。 主流 Linux 系統選擇 Bash 直譯器作為命令列終端主要有以下 4 項優勢 :

通過上下方向鍵來調取過往執行過的 Linux 命令;

命令或引數僅需輸入前幾位就可以用 Tab 鍵補全;

具有強大的批處理指令碼;

具有實用的環境變數功能。

我們裝好的centos7預設也是採用的bash終端,當採用遠端連線工具連線到centos7,預設開啟的終端就是bash,可以通過在終端中輸入命令:echo $SHELL 進行檢視,得到的結果為:/bin/bash。

  • 如何判斷當前終端的型別?

​ 通過"echo $SHELL" 命令或通過"evn"終端命令

  • 如何更改登入的終端型別?

​ 通過終端命令chsh,如:chsh -s /bin/bash將登入終端改為bash

1.2 shell命令型別

shell是一個程式,用於使用者和作業系統進行互動,相當於是一個命令解析器。

作為使用者和核心互動的介面,既是一種命令語言又是一種程式設計語言。shell命令又分為內建命令和外部命令。

  • 內建命令

    內部命令實際上是shell程式的一部分,其中包含的是一些比較簡單的linux系統命令,這些命令由shell程式識別並在shell程式內部完成執行,通常在linux系統載入執行時shell就被載入並駐留在系統記憶體中。內部命令是寫在bashy原始碼裡面的,其執行速度比外部命令快,因為解析內部命令shell不需要建立子程序。比如:exit,history,cd,echo等 。

  • 外部命令

    外部命令是linux系統中的實用程式部分,因為實用程式的功能通常都比較強大,所以其包含的程式量也會很大,在系統載入時並不隨系統一起被載入到記憶體中,而是在需要時才將其呼叫記憶體。通常外部命令的實體並不包含在shell中,但是其命令執行過程是由shell程式控制的。shell程式管理外部命令執行的路徑查詢、載入存放,並控制命令的執行。外部命令是在bash之外額外安裝的,通常放在/bin,/usr/bin,/sbin,/usr/sbin......等等。可通過“echo $PATH”命令檢視外部命令的儲存路徑,比如:ls、vi等

如何區分是內部命令還是外部命令?

  • 通過type命令,如:type cd 可以看到是內部命令;type mkdir可以看到是外部命令。

  • 通過man命令,如:man cd,會提示是bash的內建命令;man ls,會提示是外部命令。

​ 內部命令和外部命令最大的區別之處就是效能。內部命令由於構建在shell中而不必建立多餘的程序,要比外部命令執行快得多。因此和執行更大的指令碼道理一樣,執行包含很多外部命令的指令碼會損害指令碼的效能。

二、最常用命令

既然 Linux 系統中已經有了 Bash 這麼好用的“翻譯官”,那麼接下來就有必要好好學習怎麼跟它溝通了。要想準確、高效地完成各種任務,僅依賴於命令本身是不夠的,還應該根 據實際情況來靈活調整各種命令的引數 。

linux執行命令一般格式:命令名稱 [命令引數] [命令物件]

命令名稱、命令引數、命令物件之間用空格鍵分隔。命令物件一般是指要處理的檔案、目錄、使用者等資源 ,命令引數則可以用長格式(--)或短格式(-)。

長格式:man --help

短格式:man -h

linux命令很多,最重要的是各種引數的搭配使用,新手記住所有引數是不可能的,需要經常通過幫助命令進行查閱。

特別說明:在終端中,有時候顯示的內容很多,可以通過快捷鍵進行翻看。

shift+PgUp:向上翻頁

shift+PgDn:向下翻頁

2.1 幫助命令

幫助命令主要有2個:man、help。平時要多於幫助命令,遇到不清楚的命令就用幫助命令檢視,無須死記硬背,熟能生巧。

2.1.1 man命令

語法:man [命令或配置檔案]

作用:獲取幫助資訊

案例:

[root@heimatengyun ~]# man date

比如欲檢視date命令的用法,輸入命令man date之後出現下圖資訊

由於幫助資訊比較多,需要翻頁才能看完,因此先說明一下本介面可能需要用到按鍵及用途。

按鍵 用途
空格鍵 向下翻頁
PgDn (page down) 向下翻頁
PgUp (page up) 向上翻頁
home 前往首頁
end 前往頁尾
/ 從上至下搜尋關鍵字,如“/linux”
從下至上搜索關鍵字,如“?linux”
n 定位到下一個搜尋到的關鍵詞
N 定位到上一個搜尋到的關鍵詞
q 退出幫助文件

初學者一看,這麼多的幫助資訊反而感到困惑了,其實很簡單的,我們來理一下幫助資訊的結構(上圖中圈紅線的部分)。

結構名稱 說明
NAME 命令的名稱
SYNOPSIS 命令的基本語法格式
DESCRIPTION 詳細說明語法格式對應的選項和引數的用法
EXAMPLES 如何使用命令的示例
OVERVIEW 概述
DEFAULTS 預設功能
OPTIONS 具體的可用選項
ENVIRONMENT 環境變數
SEE ALSO 相關的資料,通常是手冊頁

通過這些幫助資訊,就可以輕鬆的掌握各個命令的用法。

2.1.2 help命令

語法:help 命令

作用:獲取shell內建命令的幫助資訊

案例:

[root@heimatengyun ~]# help cd

在正式進入命令學習之前,再介紹幾個linux常用的快捷鍵

快捷鍵 作用
ctrl+l 清屏
ctrl+q 退出
ctrl+c 停止程序
上下鍵 查詢曾今執行過的命令
tab 命令補全,多用不僅提高效率還能防止敲錯

既然linux一切皆檔案,瞭解萬能的幫助命令後,我們就從目錄檔案命令開始學習。

2.2 目錄相關命令

目錄可以對檔案進行分類管理,因此在講解檔案命令之前先講解目錄相關命令。

2.2.1 pwd

語法:pwd

功能描述:顯示當前工作目錄的絕對路徑

案例:

[root@heimatengyun ~]# pwd
/root
2.2.2 ls

語法:ls [選項] [目錄或檔案]

功能描述:列出目錄下的檔案

選項:

​ -a(--all):顯示全部檔案,包括隱藏檔案(以.開頭的檔案)

-d:directory,列出目錄本身

​ -l:long長資料串列出,包含檔案的屬性和許可權等。每行列出的資訊依次為:檔案型別與許可權、連結數、檔案屬性、檔案屬組、檔案大小(byte)、建立或最近修改時間、名字

案例:

[root@heimatengyun test]# ls -al
total 12
drwxr-xr-x.  2 root root   37 Nov 24 10:43 .
dr-xr-x---. 16 root root 4096 Nov 24 00:02 ..
-rw-r--r--.  1 root root   26 Nov 23 20:40 test1.txt
-rw-r--r--.  1 root root   66 Nov 23 21:56 test.txt
2.2.3 cd

語法:cd [選項][目錄名稱]

功能描述:切換到指定目錄

案例:

​ cd 絕對路徑或相對路徑 (跳轉到指定目錄)

​ cd 或cd ~ (返回當前使用者家目錄)

​ cd - (返回上一次所在的目錄)

​ cd .. (返回當前目錄的上一級目錄)

2.2.4 mkdir

語法:mkdir [選項] 目錄名稱

功能描述:建立指定目錄

選項:

​ -p :parents,建立多層目錄

案例:

​ [root@heimatengyun ~]# mkdir test

​ [root@heimatengyun ~]# mkdir -p test1/test1

2.2.5 rmdir

語法: rmdir [選項] 目錄名稱

功能描述:刪除空目錄

選項:

​ -p:刪除多級目錄

案例:

​ [root@heimatengyun ~]# rmdir test

​ [root@heimatengyun ~]# rmdir -p test1/test1/ (如果不指定-p引數,則只刪除最後一級不為空的目錄)

2.2.6 cp

語法:cp 源目錄或檔案 目標目錄或檔案

功能描述:複製目錄或檔案

選項:

​ -r:recursive,遞迴複製整個資料夾

案例:

將test複製為test.txt,複製時重新命名

[root@heimatengyun ~]# cp test test.txt 

將所有test目錄內容複製到test1目錄(自動建立test1目錄)

[root@heimatengyun ~]# cp -r test test1  
2.2.7 mv

語法:mv [選項] 源 目標

功能描述:移動檔案或重新命名檔案

案例:

將test檔案重新命名為test.txt

[root@heimatengyun test]# mv test test.txt   

將test目錄及其裡邊所有內容移動到test2目錄,自動建立test2目錄(可以理解為將test資料夾重新命名為test2)

[root@heimatengyun ~]# mv test/ test2  
2.2.8 rm

語法:rm [選項] 檔案

功能描述:刪除檔案及目錄

選項:

​ -f:force強制執行

​ -r:recursive遞迴執行

案例:

遞迴刪除目錄及其下所有內容

 [root@heimatengyun ~]# rm -rf test2/  

2.3 檔案相關命令

linux一切皆檔案,在連線目錄相關命令後,本節學習檔案相關命令。

2.3.1 touch

語法:touch [選項] 檔名

功能描述:建立空檔案

案例:

 [root@heimatengyun test]# touch test.txt

echo

語法:echo 字串或變數

功能描述:輸出字串或變數值,還可以搭配從定向符將內容儲存到檔案

案例:

[root@heimatengyun test]# echo hello
hello
[root@heimatengyun test]# echo $SHELL
/bin/bash
[root@heimatengyun test]# echo linux >> test.txt 
2.3.2 cat

語法:cat [選項] 檔名

功能描述:檢視檔案內容,從第一行開始顯示

選項:

​ -A:列出特殊字元而非空白

​ -b:列出行號,空白行不算行號

​ -n:列出行號,空白行也會有行號

​ -v:列出一些看不出來的特殊字元

案例:

 [root@heimatengyun test]# cat test.txt 
 hello
 who are you
 
 where are you from
 [root@heimatengyun test]# cat -A test.txt 
 hello$
 who are you$
 $
 where are you from$
 [root@heimatengyun test]# cat -b test.txt 
      1  hello
      2  who are you
 
      3  where are you from
 [root@heimatengyun test]# cat -n test.txt 
      1  hello
      2  who are you
      3
      4  where are you from
2.3.3 more

語法:more [選項] 檔案

功能描述:檢視檔案內容,一頁一頁的顯示

使用說明:

​ 空格鍵(space):向下翻一頁

​ enter:向下翻一行

​ q:退出more,不在顯示檔案內容

​ ctrl+f:向下滾動一屏

​ ctrl+b:返回上一屏

​ =:輸出當前行的行號

​ :f:輸出檔名和當前行號

語法:head [選項] 檔案

功能描述:檢視檔案內容,只看頭幾行

選項:

​ -n:檢視頭n行

案例:

​ [root@heimatengyun test]# head -n 2 test.txt

2.3.5 tail

語法:tail [選項] 檔案

功能描述:檢視檔案內容,只檢視檔案末尾幾行

選項:

​ -n:末尾幾行

​ -f:follow輸出檔案修改的內容,用於追蹤檔案修改

案例:

​ [root@heimatengyun test]# tail -n 2 test.txt

2.3.6 wc

語法:wc [選項] 文字

功能描述:統計指定文字的行數、字數、位元組數

選項:

​ -l:lines顯示行數

​ -w:顯示單詞數

​ -c:顯示位元組數

案例:

[root@heimatengyun test]# cat test.txt 
hello

who are you
where are you form?

wellcome
hahah
test
[root@heimatengyun test]# wc -l test.txt 
8 test.txt
[root@heimatengyun test]# wc -c test.txt 
60 test.txt
[root@heimatengyun test]# wc -w test.txt 
11 test.txt
2.3.7 stat

語法:stat [選項] 檔案

功能描述:檢視檔案的具體儲存資訊和時間等資訊

案例:

[root@heimatengyun test]# stat test.txt 
  File: ‘test.txt’
  Size: 60              Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 2160373     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-11-23 18:27:02.153101936 +0800
Modify: 2019-11-23 18:26:56.254259870 +0800
Change: 2019-11-23 18:26:56.254259870 +0800
 Birth: -
2.3.8 cut

語法:cut [選項] 檔案

功能描述:按列提取文字字元

選項:

​ -d:delimiter分隔符

​ -f:fields要提取的列

案例:

查詢系統所有使用者名稱

[root@heimatengyun test]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
...省略部分內容
2.3.9 diff

語法:diff [選項] 檔案1,檔案2

功能描述:比較多個文字的差異

選項:

​ --brief: 顯示比較檔案是否相同

​ -c:context標記顯示不同的內容

2.3.10 dd

語法:dd [引數或選項]

功能描述:按照指定大小或個數的資料庫來複制檔案或轉換檔案

引數:

​ if:輸入的檔名稱

​ of:輸出的檔名稱

​ count:設定要複製的塊的個數

​ bs:bytes檔案塊大小

案例:

建立指定大小為10M的檔案

[root@heimatengyun test]# dd if=/dev/zero of=10_file count=1 bs=10M
1+0 records in
1+0 records out
10485760 bytes (10 MB) copied, 0.0102506 s, 1.0 GB/s
[root@heimatengyun test]# ll
total 10248
-rw-r--r--. 1 root root 10485760 Nov 23 21:05 10_file
2.3.11 file

語法:file 檔名

功能描述:檢視檔案型別

案例:

[root@heimatengyun test]# file test.txt 
test.txt: ASCII text
2.3.12 wget

語法:wget [引數] [url地址]

功能:下載網路檔案

引數:

​ -b:background後臺下載

​ -P:directory-prefix下載到指定目錄

​ -t:tries 最大嘗試次數

​ -c:continue斷點續傳

​ -p:page-requisites下載頁面所有內容,包括圖片、視訊等

​ -r:recursive遞迴下載

案例:

下載百度logo圖片

[root@heimatengyun test]# wget https://www.baidu.com/img/bd_logo1.png
--2019-11-23 22:29:45--  https://www.baidu.com/img/bd_logo1.png
Resolving www.baidu.com (www.baidu.com)... 14.215.177.38, 14.215.177.39
Connecting to www.baidu.com (www.baidu.com)|14.215.177.38|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7877 (7.7K) [image/png]
Saving to: ‘bd_logo1.png’

100%[======================>] 7,877       --.-K/s   in 0.002s  

2019-11-23 22:29:45 (4.43 MB/s) - ‘bd_logo1.png’ saved [7877/7877]

2.4 查詢命令

有時候需要從大量檔案中找出需要的檔案或者從指定檔案中查詢特定內容,這就需要用到查詢相關的命令。

2.4.1 find

語法:find [搜尋範圍] [匹配條件]

功能描述:查詢檔案或目錄

引數說明

​ -name:按檔名稱查詢

​ -user:按檔案擁有者查詢

​ -size:根按檔案大小查詢檔案(+n大於,-n小於,n等於)

案例

在test目錄下查詢test1.txt檔案

[root@heimatengyun ~]# find test/ -name test1.txt
test/test1.txt

查詢test目錄下查詢使用者root的檔案

[root@heimatengyun ~]# find test/ -user root
test/
test/test.txt

在test目錄下查詢小於100M的檔案

[root@heimatengyun ~]# find test/ -size -102400
test/
test/test.txt
2.4.2 grep

語法:grep [引數] 查詢內容 原始檔

功能描述:在檔案內搜尋字串匹配的行並輸出

引數:

​ -c:count只輸出匹配行的計數

​ -n:line-number顯示匹配行及行號

案例:

[root@heimatengyun test]# grep -n who test.txt 
3:who are you
[root@heimatengyun test]# grep -c who test.txt 
1
2.4.3 which

語法:which [選項] 命令

功能描述:搜尋命令所在目錄及別名資訊

案例:

搜尋cd命令所在的目錄

[root@heimatengyun test]# which cd
/usr/bin/cd

2.5 壓縮解壓

為了便於傳輸或節省儲存空間有時候檔案是以壓縮包的形式存在,因此就需要了解壓縮與解壓相關命令。

2.5.1 tar

語法:tar [引數] 包名.tar.gz 待打包的內容

功能描述:打包目錄,壓縮後的檔案格式為.tar.gz

引數:

​ -c:create生成.tar打包檔案

​ -x:extract解包.tar檔案

​ -v:verbose顯示詳細資訊

​ -f:file指定壓縮後的檔名

​ -z:打包同時壓縮

​ -C:解壓到指定目錄

案例:

壓縮多個檔案,將test.txt和test1.txt壓縮為test.tar.gz

[root@heimatengyun test]# tar -zcvf test.tar.gz test.txt test1.txt 
test.txt
test1.txt
[root@heimatengyun test]# ll
total 10252
-rw-r--r--. 1 root root       26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root      210 Nov 23 23:57 test.tar.gz
-rw-r--r--. 1 root root       66 Nov 23 21:56 test.txt

壓縮目錄

[root@heimatengyun ~]# tar -zcvf test.tar.gz test/

解壓到當前目錄

[root@heimatengyun test]# tar -zxvf test.tar.gz 
2.5.2 zip和unzip

語法:

​ 壓縮:zip [引數] 包名.zip 待壓縮內容

​ 解壓:uzip 包名.zip

功能描述:壓縮檔案和目錄,windows和linux通用且可以壓縮目錄並保留原始檔

引數:

​ -r:recurse-paths遞迴壓縮目錄

案例:

壓縮test.txt或test1.txt為test.zip

[root@heimatengyun test]# zip test.zip test.txt test1.txt 
  adding: test.txt (deflated 15%)
  adding: test1.txt (stored 0%)

解壓test.zip

[root@heimatengyun test]# unzip test.zip 
Archive:  test.zip
  inflating: test.txt                
 extracting: test1.txt  
2.5.3 gzip和gunzip

語法:

​ 壓縮:gzip [引數] 檔案

​ 解壓:gzip [引數] 檔案.gz

功能描述:

​ 壓縮:壓縮檔案,只能將檔案壓縮為*.gz檔案。只能壓縮檔案不能壓縮目錄,壓縮解壓後不保留原來的檔案。對單個檔案壓縮

​ 解壓:解壓檔案

​ 案例:

壓縮檔案

[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
[root@heimatengyun test]# gzip test1.txt 
[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 54 Nov 23 20:40 test1.txt.gz
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt

解壓檔案

[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 54 Nov 23 20:40 test1.txt.gz
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
[root@heimatengyun test]# gunzip test1.txt.gz 
[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt

2.6 日期命令

日期相關命令用於設定或獲取系統日期。

2.6.1 date

語法:date [選項] [格式]

功能描述:顯示或設定時間

引數:

​ -s:set 以字串格式設定時間

格式:(注意區分大小寫)

​ +%Y:顯示當前年份

​ +%m:顯示當前月份

​ +%d:顯示當前是哪一天

​ +%H:顯示當前小時

​ +%M:顯示當前分鐘

​ +%S:顯示當前秒數

​ +%Y%m%d:顯示當前年月日

​ "+%Y-%m-%d %H:%M:%S":顯示當前年月日時分秒 (用引號括起來)

案例:

設定時間

[root@heimatengyun test]# date -s "2019-11-24 11:05:10"
Sun Nov 24 11:05:10 CST 2019

顯示時間

[root@heimatengyun test]# date
Sun Nov 24 11:02:21 CST 2019
[root@heimatengyun test]# date +%Y%m%d
20191124
[root@heimatengyun test]# date "+%Y-%m-%d %H:%M:%S"
2019-11-24 11:02:55

date檢視非當前時間(比如前一天,後一天、取下週週一等等)以及cal檢視日曆命令暫時不做討論,以後有機會在討論。

2.7 程序執行緒命令

任務都以程序或執行緒的形式存在,因此需要隨時關注系統的程序,檢視是否有異常程序以及各程序佔用系統資源的情況並使用不同的程序管理命令對程序管理和控制。

2.7.1 ps

語法:ps [選項]

功能描述:檢視系統中所有程序

引數:

​ -a:all 顯示現行終端機下的所有程式,包括其他使用者的程式(比如多克隆幾個會話執行不同命令,也會列出來)

​ -u:userlist 以使用者為主的格式來顯示程式狀況

​ -x: 顯示所有程式,不以終端機來區分 (前面講過終端有很多型別,不僅顯示當前終端)

案例:

[root@heimatengyun test]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       2966  0.0  0.1 116340  3192 pts/0    Ss   Nov22   0:03 -bash
...省略部分內容

每一項內容的解釋

含義
USER 程序是由哪個使用者產生的
PID 程序ID
%CPU 該程序佔用CPU的百分比,佔用越高,程序越耗費資源
%MEM 該程序佔用記憶體的百分比,佔用越高,程序越耗費資源
VSZ 佔用虛擬記憶體的大小,單位KB
RSS 佔用實際實體記憶體的大小,單位KB
TTY 表示該程序在哪個終端中執行,tty1-tty7代表本地控制檯終端(tty1-tty6是本地的字元介面終端,tty7是圖形終端),pts/0-255代表虛擬終端
STAT 程序狀態,常用狀態有:R(執行)、S(睡眠)、T(停止狀態)、s(包含子程序)、+(位於後臺)
START 程序啟動時間
TIME 程序執行時間,即佔用cpu的運算時間,不是系統時間
COMMAND 產生此程序的命令名
2.7.2 top

語法:top [選項]

功能描述:檢視系統健康狀態

引數:

​ -d 秒數:Delay-time,指定top命令每隔幾秒更新,預設是3秒。

​ -i:Idle-process,使top命令不顯示任何閒置或者僵死程序

​ -p:Monitor-PIDs ,通過指定監控程序ID來僅僅監控某個程序的狀態

​ -s:Secure-mode,使top在安全模式執行,去除互動命令所帶來的潛在危險

案例:

檢視非僵死程序,一秒鐘重新整理一次

[root@heimatengyun test]# top -i -d 1
top - 12:39:19 up 1 day, 14:31,  3 users,  load average: 0.04, 0.04, 0.05
Tasks: 395 total,   1 running, 391 sleeping,   3 stopped,   0 zombie
%Cpu(s):  0.0 us,  1.0 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   1870784 total,   720520 used,  1150264 free,      880 buffers
KiB Swap:  2097148 total,        0 used,  2097148 free.   238616 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND              
 29987 root      20   0  123936   1868   1160 R   2.0  0.1   0:08.32 top 
 ...省略部分內容

在此介面可以通過如下相應按鍵進行排序操作

操作鍵 說明
shift+n 以PID排序
shift+m 以記憶體排序
shift+p 以cpu使用率排序,預設選項
q 退出top

命令結果解釋

第一行:任務佇列資訊

內容 說明
12:20:42 當前系統時間
up 1 day, 14:12 系統執行時間
3 users 當前登入使用者數
load average: 0.08,0.01, 0.05 系統在之前1分鐘、5分鐘、15分鐘的平均負載,一般認為小於1時,負載較小,如果大於1說明系統已經超出負載

第二行:程序資訊

內容 說明
Tasks: 395 total 系統中的總程序數
1 running 正在執行的程序數
391 sleeping 睡眠的程序
3 stopped 正在停止的程序
0 zombie 殭屍程序,如果不是0,需要手工檢查殭屍程序

第三行:cpu資訊

內容 說明
%Cpu(s): 0.0 us 使用者模式佔用的cpu百分比
1.0 sy 系統模式佔用的cpu百分比
0.0 ni 改變過優先順序的使用者程序佔用的cpu百分比
99.0 id 空閒cpu的百分比
0.0 wa 等待輸入、輸出的程序佔用cpu的百分比
0.0 hi 硬中斷請求服務佔用的cpu百分比
0.0 si 軟中斷請求服務佔用的cpu百分比
0.0 st steal time虛擬世界百分比,當有虛擬機器時,虛擬cpu等待時機cpu的時間百分比

ps:如果伺服器有多個cpu,將顯示多行

第四行:實體記憶體資訊

內容 說明
KiB Mem: 1870784 total 實體記憶體的總量,單位KB
720520 used 已使用的實體記憶體數量
1150264 free 空閒的實體記憶體數量
880 buffers 作為緩衝的記憶體數量

第五行:交換分割槽資訊

記憶體 說明
KiB Swap: 2097148 total 交換分割槽(虛擬記憶體)的總大小
0 used 已經使用的交換分割槽的大小
2097148 free 空閒交換分割槽的大小
238616 cached Mem 作為快取的交換分割槽的大小

第六行:空行

第七行:表頭資訊

內容 說明
PID 程序id
USER 程序所有者
PR 程序優先順序
NI 負值表示高優先順序,正值表示低優先順序
VIRT 程序使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES
RES 程序使用的、未被換出的實體記憶體大小,單位kb。RES=CODE+DATA
SHR 共享記憶體大小,單位kb
S 程序狀態。D=不可中斷的睡眠狀態 R=執行 S=睡眠 T=跟蹤/停止 Z=殭屍程序
%CPU 上次更新到現在的CPU時間佔用百分比
%MEM 程序使用的實體記憶體百分比
TIME+ 程序使用的CPU時間總計,單位1/100秒
COMMAND 程序名稱(命令名/命令列)
2.7.3 pidof

語法:pidof [引數] 服務名稱

功能描述:查詢某個指定服務程序的pid值

案例:

檢視sshd服務的程序id

[root@heimatengyun test]# pidof sshd
2962 2247
2.7.4 pstree

語法:pstree [選項]

功能描述:檢視程序樹

選項:

​ -p:顯示程序的PID

案例:

[root@heimatengyun test]# pstree -p
systemd(1)─┬─ModemManager(948)─┬─{ModemManager}(1004)
           │                   └─{ModemManager}(1031)
           ├─NetworkManager(1123)─┬─{NetworkManager}(1284)
           │                      └─{NetworkManager}(1312)
           ...省略部分內容
2.7.5 kill

語法:kill [選項] 程序id

功能描述:終止某個指定pid的服務程序

選項:

​ -9:強迫程序立即停止

案例:

[root@heimatengyun test]# kill -9 20385
2.7.6 killall

語法:killall [選項] 服務名

功能描述:終止某個指定名稱的服務對應的所有程序

案例:

終止httpd服務的所有程序

[root@heimatengyun test]# killall httpd

2.8 系統狀態檢測命令

通過相關命令檢查系統狀態以及資源耗用情況,保證系統健康穩定執行。

2.8.1 ifconfig

語法:ifconfig [網路裝置] [引數]

功能描述:獲取網絡卡配置和網路狀態資訊

案例:

[root@heimatengyun test]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.78.100  netmask 255.255.255.0  broadcast 192.168.78.255
        inet6 fe80::20c:29ff:febc:5eef  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bc:5e:ef  txqueuelen 1000  (Ethernet)
        RX packets 143336  bytes 103106029 (98.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 92576  bytes 143399144 (136.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

主要檢視內容:網絡卡名稱(eno16777736 )、ip地址(inet之後)物理網絡卡地址即mac地址(ether)、TX和TX接收和傳送資料包的個數和累計流量

2.8.2 netstat

語法:netstat [引數]

功能描述:顯示整個系統目前網路情況,比如目前的連結、資料包傳遞資料、路由表內容等

案例:

[root@heimatengyun test]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0     96 192.168.78.100:ssh      192.168.78.1:59688      ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    13149    /run/systemd/shutdownd
...省略部分內容
2.8.3 uname

語法:uname [選項]

功能描述:檢視系統核心和系統版本等資訊

引數:

​ -a:all顯示系統完整資訊

​ -s:kernel-name系統核心名稱

​ -n:nodename節點名稱

​ -r:kernel-release核心發行版

​ -v:kernel-version核心版本

​ -m:machine硬體名稱

​ -i:hardware-platform硬體平臺

​ -p:processor處理器型別

​ -o:operating-system作業系統名稱

案例:

[root@heimatengyun test]# uname
Linux
[root@heimatengyun test]# uname -a
Linux heimatengyun 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

顯示資訊依次為:核心名稱(Linux)、主機名(heimatengyun)、核心發行版(3.10.0-123.el7.x86_64)、核心版本(#1 SMP Mon Jun 30 12:09:22 UTC 2014)、硬體名稱(x86_64)、硬體平臺(x86_64)、處理器型別(x86_64)及作業系統名稱(GNU/Linux)。

如果要檢視單籤系統版本的詳細資訊,通過檢視/etc/redhat-release檔案

[root@heimatengyun test]# cat /etc/redhat-release 
CentOS Linux release 7.0.1406 (Core)
2.8.4 uptime

語法:uptime [選項]

功能描述:檢視系統的負載資訊,可以顯示當前系統時間、系統已執行時間、啟用終端數量以及平均負載值等資訊。平均負載值指系統在最近1分鐘、5分鐘、15分鐘內的壓力情況,負載值越低越好,儘量不要長期超過1,生產環境不要超過5.

案例:

[root@heimatengyun test]# uptime
 21:30:44 up 1 day, 23:23,  3 users,  load average: 0.00, 0.01, 0.05
2.8.5 free

語法:free [選項]

功能描述:顯示當前系統中記憶體的使用資訊

選項:

​ -m:megabytes以兆位元組顯示

​ -h:human帶單位輸出

案例:

[root@heimatengyun test]# free -h
             total       used       free     shared    buffers     cached
Mem:          1.8G       702M       1.1G       8.9M       880K       233M
-/+ buffers/cache:       468M       1.3G
Swap:         2.0G         0B       2.0G

欄位說明:total(記憶體總量)、used(已用量)、free(可用量)、shared(程序共享的記憶體量)、buffers(磁碟快取的記憶體量)、cached(快取的記憶體量)

2.8.5 who

語法:who [引數]

功能描述:檢視當前登入主機的使用者終端資訊

案例:

[root@heimatengyun test]# who
root     pts/0        2019-11-22 22:10 (192.168.78.1)
root     pts/1        2019-11-23 11:53 (192.168.78.1)
2.8.6 last

語法:last [引數]

功能描述:檢視所有的系統登入記錄。但是要注意,這些資訊是以日誌檔案儲存的,因此黑客可以很容易進行修改,所以不能單純以該命令來判斷是否有黑客入侵。

案例:

[root@heimatengyun test]# last
root     pts/2        192.168.78.1     Sun Nov 24 13:09 - 13:36  (00:26) 
root     pts/1        192.168.78.1     Sat Nov 23 11:53   still logged in 
... 省略部分內容
2.8.7 history

語法:history [引數]

功能描述:顯示歷史執行過的命令

選項:

​ -c:清除所有歷史記錄,但是.bash_history檔案內容不會刪除

案例:

[root@heimatengyun test]# history
    1  history
    2  ll
    3  ls
    4  history
[root@heimatengyun test]# !2
ll
total 8
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt

可以用“!編號”執行某一次曾經執行過的命令

預設可以檢視1000條歷史記錄,但可以在/etc/profile中修改HISTSIZE的值

歷史命令儲存在一個農戶家目錄的.bash_history檔案中(.開頭為隱藏檔案通過ls或ll -a列出),可以用cat命令檢視

2.9關機命令

linux一般用在伺服器上,很少遇到關機的情況,畢竟關機服務就會中斷,除非特殊情況不得已才會關閉。

正確的關機流程:sync>shutdown或reboot或halt

無論重啟還是關機,都需要先sync將記憶體資料同步到硬碟中,避免資料丟失

2.9.1 reboot

語法:reboot [ 選項]

功能描述:重啟系統,等同於shutdown -r now

案例:

[root@heimatengyun ~]# reboot
2.9.2 poweroff

語法:poweroff [選項]

功能描述:關閉系統

案例:

[root@heimatengyun ~]# poweroff
2.9.3 halt

語法:halt [選項]

功能描述:關閉系統,等同於shutdown -h now和poweroff

案例:

[root@heimatengyun ~]# halt
2.9.4 shutdown

語法:shutdown [選項] [關機時間] [提示內容]

功能描述:關機

選項:

​ -h:關機

​ -r:重啟

關機時間:

​ hh:mm:指定24小時制的小時和分鐘後關機

​ +m:m分鐘後關機(+1:預設值,1分鐘後關機; +0:now,立刻關機)

案例:

1分鐘後關機並提示所有已登入系統的使用者

[root@heimatengyun ~]# shutdown -h 1 "this server will shutdown after 1min"
this server will shutdown after 1min
The system is going down for power-off at Sun 2019-11-24 22:25:55 CST!

使用者及檔案相關許可權命令將在以後的文章中講解,還有很多其他的命令,由於篇幅所限不在此討論。下一篇文章文章將分享“linux入門系列6--軟體包管理之rpm和yum倉庫”