上一篇文章“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:輸出文件名和當前行號
2.3.4 head
語法: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倉庫”。