天天看點

(三)RHEL系統之紅帽RHEL 7系統之linux指令之一

上篇文章:紅帽RHEL 7系統之systemd初始化程序

此文章主要包含:執行幫助文檔指令; 常用系統工作指令; 系統狀态檢測指令; 工作目錄切換指令; 文本檔案編輯指令; 檔案目錄管理指令; 打包壓縮與搜尋指令。

計算機硬體是由運算器、控制器、存儲器、輸入/輸出裝置等共同組成的,而讓各種硬體裝置各司其職且又能協同運作的東西就是系統核心。Linux系統的核心負責完成對硬體資源的配置設定、排程等管理任務。

Shell(也稱為終端或殼)充當的是人與核心(硬體)之間的翻譯官,使用者把一些指令“告訴”終端,它就會調用相應的程式服務去完成某些工作。現在包括紅帽系統在内的許多主流Linux系統預設使用的終端是Bash(Bourne-Again

SHell)解釋器。主流Linux系統選擇Bash解釋器作為指令行終端主要有以下4項優勢。

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

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

具有強大的批處理腳本;

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

指令名稱 [指令參數] [指令對象]
           

注意,指令名稱、指令參數、指令對象之間請用空格鍵分隔。指令對象一般是指要處理的檔案、目錄、使用者等資源,而指令參數可以用長格式(完整的選項名稱),也可以用短格式(單個字母的縮寫),兩者分别用–與-作為字首 。

系統工作指令

1.echo指令

echo指令用于在終端輸出字元串或變量提取後的值,格式為“echo [字元串 | $變量]”。

[[email protected] wine]$ echo huislee
huislee
[[email protected] wine]$ echo $SHELL
/bin/bash

           

2.date指令

date指令用于顯示及設定系統的時間或日期,格式為“date [選項] [+指定的格式]”。

隻需在強大的date指令中輸入以“+”号開頭的參數,即可按照指定格式來輸出系統的時間或日期,這樣在日常工作時便可以把備份資料的指令與指定格式輸出的時間資訊結合到一起。例如,把打包後的檔案自動按照“年-月-日”的格式打包成“backup-2017-9-1.tar.gz”

date指令中的參數以及作用

參數 作用
%t 跳格[Tab鍵]
%H 小時(00~23)
%I 小時(00~12)
%M 分鐘(00~59)
%S 秒(00~59)
%j 今年中的第幾天
[[email protected] wine]$ date "+%Y-%m-%d %H:%M:%S"
2020-07-23 17:33:42
[[email protected] wine]$ date -s "20170901 8:30:00"
date: invalid date ‘ 20170901 8:30:00’
[[email protected] wine]$ date "+%j"
205
[[email protected] wine]$ date //預設格式檢視目前系統時間的date指令如下所示:
Thu Jul 23 17:34:03 CST 2020

           

按照“年-月-日 小時:分鐘:秒”的格式檢視目前系統時間的date指令如下所示: date “+%Y-%m-%d %H:%M:%S”

将系統的目前時間設定為2017年9月1日8點30分的date指令如下所示: date -s “20170901 8:30:00”

date指令中的參數%j可用來檢視今天是當年中的第幾天。這個參數能夠很好地區分備份時間的新舊,即數字越大,越靠近目前時間。該參數的使用方式以及顯示結果如下所示: date “+%j”

3.reboot指令

reboot指令用于重新開機系統,其格式為reboot。

由于重新開機計算機這種操作會涉及硬體資源的管理權限,是以預設隻能使用root管理者來重新開機.

4.poweroff指令

poweroff指令用于關閉系統,其格式為poweroff。

該指令與reboot指令相同,都會涉及硬體資源的管理權限,是以預設隻有root管理者才可以關閉電腦.

5.wget指令

wget指令用于在終端中下載下傳網絡檔案,格式為“wget [參數] 下載下傳位址”。

wget指令的參數以及作用

參數 作用
-b 背景下載下傳模式
-P 下載下傳到指定目錄
-t 最大嘗試次數
-c 斷點續傳
-p 下載下傳頁面内所有資源,包括圖檔、視訊等
-r 遞歸下載下傳

嘗試使用wget指令下載下傳最新《linux就該這樣學》pdf格式電子文檔,這個檔案的完整路徑為http://www.linuxprobe.com/docs/LinuxProbe.pdf,執行該指令後的下載下傳效果如下:

[[email protected] wine]$ wget http://www.linuxprobe.com/docs/LinuxProbe.pdf
--2020-07-23 17:42:08--  http://www.linuxprobe.com/docs/LinuxProbe.pdf

           

使用wget指令遞歸下載下傳www.linuxprobe.com網站内的所有頁面資料以及檔案,下載下傳完後會自動儲存到目前路徑下一個名為www.linuxprobe.com的目錄中。執行該操作的指令為wget -r -p http://www.linuxprobe.com,該指令的執行結果如下。

[[email protected] wine]$ wget -r -p http://www.linuxprobe.com
--2020-07-23 17:43:13--  http://www.linuxprobe.com/

           

6.ps指令

ps指令用于檢視系統中的程序狀态,格式為“ps [參數]”。

ps指令的參數以及作用

參數 作用
-a 顯示所有程序(包括其他使用者的程序)
-u 使用者以及其他詳細資訊
-x 顯示沒有控制終端的程序

Linux系統中時刻運作着許多程序,如果能夠合理地管理它們,則可以優化系統的性能。在Linux系統中,有5種常見的程序狀态,分别為運作、中斷、不可中斷、僵死與停止,其各自含義如下所示。

R(運作):程序正在運作或在運作隊列中等待。

S(中斷):程序處于休眠中,當某個條件形成後或者接收到信号時,則脫離該 狀态。

D(不可中斷):程序不響應系統異步信号,即便用kill指令也不能将其中斷。

Z(僵死):程序已經終止,但程序描述符依然存在, 直到父程序調用wait4()系統函數後将程序釋放。

T(停止):程序收到停止信号後停止運作。

當執行ps aux指令後通常會看到如表所示的程序狀态

(三)RHEL系統之紅帽RHEL 7系統之linux指令之一

如前面所提到的,在Linux系統中的指令參數有長短格式之分,長格式和長格式之間不能合并,長格式和短格式之間也不能合并,但短格式和短格式之間是可以合并的,合并後僅保留一個-(減号)即可。另外ps指令可允許參數不加減号(-),是以可直接寫成ps aux的樣子。

7.top指令

top指令用于動态地監視程序活動與系統負載等資訊,其格式為top。

top指令相當強大,能夠動态地檢視系統運維狀态,完全将它看作Linux中的“強化版的Windows任務管理器”。

(三)RHEL系統之紅帽RHEL 7系統之linux指令之一

,top指令執行結果的前5行為系統整體的統計資訊,其所代表的含義如下。

第1行:系統時間、運作時間、登入終端數、系統負載(三個數值分别為1分鐘、5分鐘、15分鐘内的平均值,數值越小意味着負載越低)。

第2行:程序總數、運作中的程序數、睡眠中的程序數、停止的程序數、僵死的程序數。

第3行:使用者占用資源百分比、系統核心占用資源百分比、改變過優先級的程序資源百分比、空閑的資源百分比等。

注: 第3行中的資料均為CPU資料并以百分比格式顯示,例如“81.3 id”意味着有81.31%的CPU處理器資源處于空閑。
第4行:實體記憶體總量、記憶體使用量、記憶體空閑量、作為核心緩存的記憶體量。
第5行:虛拟記憶體總量、虛拟記憶體使用量、虛拟記憶體空閑量、已被提前加載的記憶體量。
           

8.pidof指令

pidof指令用于查詢某個指定服務程序的PID值,格式為“pidof [參數] [服務名稱]”。

每個程序的程序号碼值(PID)是唯一的,是以可以通過PID來區分不同的程序。例如,可以使用如下指令來查詢本機上sshd服務程式的PID:

[[email protected] wine]$ pidof sshd
1689

           

9.kill指令

kill指令用于終止某個指定PID的服務程序,格式為“kill [參數] [程序PID]”。

接下來,我們使用kill指令把上面用pidof指令查詢到的PID所代表的程序終止掉,其指令如下所示。這種操作的效果等同于強制停止sshd服務。

10.killall指令

killall指令用于終止某個指定名稱的服務所對應的全部程序,格式為:“killall [參數] [服務名稱]”。

通常來講,複雜軟體的服務程式會有多個程序協同為使用者提供服務,如果逐個去結束這些程序會比較麻煩,此時可以使用killall指令來批量結束某個服務程式帶有的全部程序。

[[email protected] wine] ~]# pidof httpd
13581 13580 13579 13578 13577 13576
[[email protected] wine] ~]# killall httpd
[[email protected] ~]# pidof httpd
           
如果我們在系統終端中執行一個指令後想立即停止它,可以同時按下Ctrl + C組合鍵(生産環境中比較常用的一個快捷鍵),這樣将立即終止該指令的程序。或者,如果有些指令在執行時不斷地在螢幕上輸出資訊,影響到後續指令的輸入,則可以在執行指令時在末尾添加上一個&符号,這樣指令将進入系統背景來執行。

系統狀态檢測指令

快速檢視Linux系統運作狀态的能力,接下來會逐個講解與網卡網絡、系統核心、系統負載、記憶體使用情況、目前啟用終端數量、曆史登入記錄、指令執行記錄以及救援診斷等相關指令的使用方法。這些指令都超級實用.

1.ifconfig指令

ifconfig指令用于擷取網卡配置與網絡狀态等資訊,格式為“ifconfig [網絡裝置] [參數]”。

使用ifconfig指令來檢視本機目前的網卡配置與網絡狀态等資訊時,其實主要檢視的就是網卡名稱、inet參數後面的IP位址、ether參數後面的網卡實體位址(又稱為MAC位址),以及RX、TX的接收資料包與發送資料包的個數及累計流量(即下面加粗的資訊内容):

[[email protected] wine]$ ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:bf:00:4f  txqueuelen 1000  (Ethernet)
        RX packets 1912  bytes 176722 (172.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 4450  bytes 360396 (351.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4450  bytes 360396 (351.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

           

2.uname指令

uname指令用于檢視系統核心與系統版本等資訊,格式為“uname [-a]”。

在使用uname指令時,一般會固定搭配上-a參數來完整地檢視目前系統的核心名稱、主機名、核心發行版本、節點名、系統時間、硬體名稱、硬體平台、處理器類型以及作業系統名稱等資訊。

[[email protected] wine]$ uname -a
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
           

要檢視目前系統版本的詳細資訊,則需要檢視redhat-release檔案,其指令以及相應的結果如下:

[[email protected] wine]$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.0 (Maipo)
           

3.uptime指令

uptime用于檢視系統的負載資訊,格式為uptime。

uptime指令真的很棒,它可以顯示目前系統時間、系統已運作時間、啟用終端數量以及平均負載值等資訊。平均負載值指的是系統在最近1分鐘、5分鐘、15分鐘内的壓力情況(下面加粗的資訊部分);負載值越低越好,盡量不要長期超過1,在生産環境中不要超過5。

[[email protected] wine]$ uptime
 17:58:41 up 1 day,  3:13,  3 users,  load average: 0.20, 0.12, 0.07
           

4.free指令

free用于顯示目前系統中記憶體的使用量資訊,格式為“free [-h]”。

為了保證Linux系統不會因資源耗盡而突然當機,運維人員需要時刻關注記憶體的使用量。在使用free指令時,可以結合使用-h參數以更人性化的方式輸出目前記憶體的實時使用量資訊。表2-8所示為在劉遄老師的電腦上執行free -h指令之後的輸出資訊。需要注意的是,輸出資訊中的中文注釋是作者自行添加的内容,實際輸出時沒有相應的參數解釋。

[[email protected] wine]$ free -h
             total       used       free     shared    buffers     cached
Mem:          1.8G       995M       831M        10M       884K       280M
-/+ buffers/cache:       714M       1.1G
Swap:         2.0G         0B       2.0G
           
(三)RHEL系統之紅帽RHEL 7系統之linux指令之一

5.who指令

who用于檢視目前登入主機的使用者終端資訊,格式為“who [參數]”。

這三個簡單的字母可以快速顯示出所有正在登入本機的使用者的名稱以及他們正在開啟的終端資訊。

[[email protected] wine]$ who
huislee  :0           2020-07-20 14:17 (:0)
huislee  pts/0        2020-07-20 14:17 (:0)
huislee  tty5         2020-07-20 14:31
//登入的使用者名	 終端裝置  	登入到系統的時間
           

6.last指令

last指令用于檢視所有系統的登入記錄,格式為“last [參數]”。

使用last指令可以檢視本機的登入記錄。但是,由于這些資訊都是以日志檔案的形式儲存在系統中,是以黑客可以很容易地對内容進行篡改。千萬不要單純以該指令的輸出資訊而判斷系統有無被惡意入侵!

[[email protected] wine]$ last
huislee  tty5                          Mon Jul 20 14:31   still logged in   
huislee  pts/0        :0               Mon Jul 20 14:17   still logged in   
huislee  :0           :0               Mon Jul 20 14:17   still logged in   
(unknown :0           :0               Mon Jul 20 14:16 - 14:17  (00:00)    
reboot   system boot  3.10.0-123.el7.x Mon Jul 20 22:16 - 15:47 (3+17:31)   
huislee  pts/0        :0               Fri Jul 17 17:22 - crash (3+04:54)   
huislee  :0           :0               Fri Jul 17 17:21 - crash (3+04:54)   
(unknown :0           :0               Fri Jul 17 17:21 - 17:21  (00:00)    
reboot   system boot  3.10.0-123.el7.x Sat Jul 18 01:21 - 15:47 (6+14:26)   
huislee  pts/0        :0               Fri Jul 17 14:45 - crash  (10:36)    
huislee  :0           :0               Fri Jul 17 09:57 - crash  (15:23)    
(unknown :0           :0               Fri Jul 17 09:45 - 09:57  (00:11)    
reboot   system boot  3.10.0-123.el7.x Fri Jul 17 17:45 - 15:47 (6+22:02)   
(unknown :0           :0               Thu Jul 16 08:49 - crash (1+08:55)   
reboot   system boot  3.10.0-123.el7.x Thu Jul 16 16:49 - 15:47 (7+22:57) 
………………省略部分登入資訊………………
           

7.history指令

history指令用于顯示曆史執行過的指令,格式為“history [-c]”。

history指令應該是作者最喜歡的指令。執行history指令能顯示出目前使用者在本地計算機中執行過的最近1000條指令記錄。如果覺得1000不夠用,還可以自定義/etc/profile檔案中的HISTSIZE變量值。在使用history指令時,如果使用-c參數則會清空所有的指令曆史記錄。還可以使用“!編碼數字”的方式來重複執行某一次的指令。

[[email protected] wine]$ history
    1  cat /etc/redhat-release
    2  sudo passwd
    3  man fork
    4  ps
    5  ps a
    6  ps au
    7  ps aux
    ......
           
[[email protected] wine]$ !5
ps a
   PID TTY      STAT   TIME COMMAND
  1132 tty1     Ss+    1:05 /usr/bin/Xorg :0 -background none -verbose -auth /run/gd
  3567 pts/0    Ss     0:00 /bin/bash
  3855 tty5     Ss+    0:00 -bash
 26501 pts/0    R+     0:00 ps a

           

曆史指令會被儲存到使用者家目錄中的.bash_history檔案中。Linux系統中以點(.)開頭的檔案均代表隐藏檔案,這些檔案大多數為系統服務檔案,可以用cat指令檢視其檔案内容。

[[email protected] wine]$ cat ~/.bash_history 
cat /etc/redhat-release
sudo passwd

           

要清空目前使用者在本機上執行的Linux指令曆史記錄資訊,可執行如下指令:

[[email protected] wine]$ history -c
[[email protected] wine]$ history 
    1  history
           

8.sosreport指令

sosreport指令用于收集系統配置及架構資訊并輸出診斷文檔,格式為sosreport。

當Linux系統出現故障需要聯系技術支援人員時,大多數時候都要先使用這個指令來簡單收集系統的運作狀态和服務配置資訊,以便讓技術支援人員能夠遠端解決一些小問題,亦或讓他們能提前了解某些複雜問題。在下面的輸出資訊中,以下加粗斜體部分是收集好的資料壓縮檔案以及校驗碼,将其發送給技術支援人員即可:

/var/tmp/sosreport-linuxprobe.com-20170905230631.tar.xz

The checksum is: 79436cdf791327040efde48c452c6322

# sosreport
sosreport (version 3.0)
This command will collect diagnostic and configuration information from
this Red Hat Enterprise Linux system and installed applications.

An archive containing the collected information will be generated in
/var/tmp and may be provided to a Red Hat support representative.
Any information provided to Red Hat will be treated in accordance with
the published support policies at:
https://access.redhat.com/support/
The generated archive may contain data considered sensitive and its
content should be reviewed by the originating organization before being
passed to any third party.

No changes will be made to system configuration.
Press ENTER to continue, or CTRL-C to quit. 此處敲擊回車來确認收集資訊

Please enter your first initial and last name [linuxprobe.com]: 此處敲擊回車來确認主機編号
Please enter the case number that you are generating this report for: 此處敲擊回車來确認主機編号

Running plugins. Please wait ...
Running 70/70: yum...
Creating compressed archive...
Your sosreport has been generated and saved in:

/var/tmp/sosreport-linuxprobe.com-20170905230631.tar.xz
The checksum is: 79436cdf791327040efde48c452c6322
Please send this file to your support representative.
           

工作目錄切換指令

工作目錄指的是使用者目前在系統中所處的位置。

1.pwd指令

pwd指令用于顯示使用者目前所處的工作目錄,格式為“pwd [選項]”。

[[email protected] wine]$ pwd
/home/huislee/tools/wine
           

2.cd指令

cd指令用于切換工作路徑,格式為“cd [目錄名稱]”。

這個指令應該是最常用的一個Linux指令了。可以通過cd指令迅速、靈活地切換到不同的工作目錄。除了常見的切換目錄方式,還可以使用“cd -”指令傳回到上一次所處的目錄,使用“cd…”指令進入上級目錄,以及使用“cd ~”指令切換到目前使用者的家目錄,亦或使用“cd ~username”切換到其他使用者的家目錄。

3.ls指令

ls指令用于顯示目錄中的檔案資訊,格式為“ls [選項] [檔案] ”。

所處的工作目錄不同,目前工作目錄下的檔案肯定也不同。使用ls指令的“-a”參數看到全部檔案(包括隐藏檔案),使用“-l”參數可以檢視檔案的屬性、大小等詳細資訊。如果想要檢視目錄屬性資訊,則需要額外添加一個-d參數。

[[email protected] wine]$ ls -ld
drwxrwxr-x. 2 huislee huislee 6 Jul 23 11:55 .
           

文本檔案編輯指令

Linux系統中“一切都是檔案”,而對服務程式進行配置自然也就是編輯程式的配置檔案。

1.cat指令

cat指令用于檢視純文字檔案(内容較少的),格式為“cat [選項] [檔案]”。

Linux系統中有多個用于檢視文本内容的指令,每個指令都有自己的特點,比如這個cat指令就是用于檢視内容較少的純文字檔案的。如果在檢視文本内容時還想順便顯示行号的話,不妨在cat指令後面追加一個-n參數:

[[email protected] ~]$ cat -n test.txt 
     1	hello world
     2	soft
     3	huislee
     ………………省略部分輸出資訊………………
           

2.more指令

more指令用于檢視純文字檔案(内容較多的),格式為“more [選項]檔案”。對于長篇的文本内容,推薦使用more指令來檢視。more指令會在最下面使用百分比的形式來提示您已經閱讀了多少内容。您還可以使用空格鍵或Enter鍵向下翻頁:

[[email protected] ~]$ more a.html 
<!DOCTYPE html>
<html lang="en">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>聯網配置</title>
<head>
<style type="text/css">
        .text1{margin-top:80px;
        margin-bottom:5px;
        }

   </style>

</head>
<body background="picture.jpg">

<form action="/cgi-bin/test.cgi" target="_blank">
<div style="text-align:center;"> 波特率:<INPUT TYPE="text" NAME="">
  <br>
</div>
</span></div><br>
<div style="text-align:center;">資料位:<INPUT TYPE="text" NAME="" ></div><br>
<div style="text-align:center;">停止位:<INPUT TYPE="text" NAME="" ></div><br>
<div style="text-align:center;">校驗位:<INPUT TYPE="text" NAME="" ></div><br>
--More--(64%)

           

3.head指令

head指令用于檢視純文字文檔的前N行,格式為“head [選項] [檔案]”。

[[email protected] ~]$ head -10 a.html 
<!DOCTYPE html>
<html lang="en">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>聯網配置</title>
<head>
<style type="text/css">
        .text1{margin-top:80px;
        margin-bottom:5px;
        }

[[email protected] ~]$ 

           

4.tail指令

tail指令用于檢視純文字文檔的後N行或持續重新整理内容,格式為“tail [選項] [檔案]”。

我們可能還會遇到另外一種情況,比如需要檢視文本内容的最後20行,這時就需要用到tail指令了。tail指令的操作方法與head指令非常相似,隻需要執行“tail -n 20 檔案名”指令就可以達到這樣的效果。tail指令最強悍的功能是可以持續重新整理一個檔案的内容,當想要實時檢視最新日志檔案時,這特别有用,此時的指令格式為“tail -f 檔案名”:

[[email protected] ~]# tail -f /var/log/messages
May  4 07:56:38 localhost gnome-session: Window manager warning: Log level 16: 
STACK_OP_ADD: window 0x1e00001 already in stack
May  4 07:56:38 localhost gnome-session: Window manager warning: Log level 16: 
STACK_OP_ADD: window 0x1e00001 already in stack
May  4 07:56:38  localhost  vmusr[12982]: [ warning] [Gtk] gtk_disable_setlocale()
must be called before gtk_init()
May  4 07:56:50 localhost systemd-logind: Removed session c1.
Aug  1 01:05:31 localhost systemd: Time has been changed
Aug  1 01:05:31 localhost systemd: Started LSB: Bring up/down networking.
Aug  1 01:08:56 localhost dbus-daemon: dbus[1124]: [system] Activating service 
name='com.redhat.SubscriptionManager' (using servicehelper)
Aug  1 01:08:56 localhost dbus[1124]: [system] Activating service name='com.
redhat.SubscriptionManager' (using servicehelper)
Aug  1 01:08:57 localhost dbus-daemon: dbus[1124]: [system] Successfully activated
service 'com.redhat.SubscriptionManager'
           

5.tr指令

tr指令用于替換文本檔案中的字元,格式為“tr [原始字元] [目标字元]”。

快速地替換文本中的一些詞彙,又或者把整個文本内容都進行替換.這時,就可以先使用cat指令讀取待處理的文本,然後通過管道符,把這些文本内容傳遞給tr指令進行替換操作即可。例如,把某個文本内容中的英文全部替換為大寫:

[[email protected] ~]$ cat anaconda-ks.cfg | tr [a-z] [A-Z]
#VERSION=RHEL7
# SYSTEM AUTHORIZATION INFORMATION
AUTH --ENABLESHADOW --PASSALGO=SHA512

# USE CDROM INSTALLATION MEDIA
CDROM
# RUN THE SETUP AGENT ON FIRST BOOT
FIRSTBOOT --ENABLE
IGNOREDISK --ONLY-USE=SDA
# KEYBOARD LAYOUTS
KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'
           

6.wc指令

wc指令用于統計指定文本的行數、字數、位元組數,格式為“wc [參數] 文本”。Linux系統中的wc指令用于統計文本的行數、字數、位元組數等。

參數 作用
-l 隻顯示行數
-w 隻顯示單詞數
-c 隻顯示位元組數

在Linux系統中,passwd是用于儲存系統賬戶資訊的檔案,要統計目前系統中有多少個使用者,可以使用下面的指令來進行查詢:

[[email protected] ~]$ wc -l /etc/passwd
38 /etc/passwd
           

7.stat指令

stat指令用于檢視檔案的具體存儲資訊和時間等資訊,格式為“stat 檔案名稱”。

stat指令可以用于檢視檔案的存儲資訊和時間等資訊,指令stat anaconda-ks.cfg會顯示出檔案的三種時間狀态(已加粗):Access、Modify、Change。這三種時間的差別将在下面的touch指令中詳細詳解:

[[email protected] ~]$ stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1213 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 68912908 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2017-07-14 01:46:18.721255659 -0400
Modify: 2017-05-04 15:44:36.916027026 -0400
Change: 2017-05-04 15:44:36.916027026 -0400
Birth: -
           

8.cut指令

cut指令用于按“列”提取文本字元,格式為“cut [參數] 文本”。

在Linux系統中,如何準确地提取出最想要的資料,這也是我們應該重點學習的内容。一般而言,按基于“行”的方式來提取資料是比較簡單的,隻需要設定好要搜尋的關鍵詞即可。但是如果按列搜尋,不僅要使用-f參數來設定需要看的列數,還需要使用-d參數來設定間隔符号。passwd在儲存使用者資料資訊時,使用者資訊的每一項值之間是采用冒号來間隔的,接下來我們使用下述指令嘗試提取出passwd檔案中的使用者名資訊,即提取以冒号(:)為間隔符号的第一列内容:

[[email protected] ~]$ sudo head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[[email protected] ~]$ sudo cut -d: -f1 /etc/passwd  //f後面為數字1
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
dbus
polkitd
unbound
colord
usbmuxd
avahi
avahi-autoipd
libstoragemgmt
saslauth
qemu
rpc
rpcuser
nfsnobody
rtkit
radvd
ntp
chrony
abrt
pulse
gdm
gnome-initial-setup
postfix
sshd
tcpdump
huislee
[[email protected] ~]$ 

           

9.diff指令

diff指令用于比較多個文本檔案的差異,格式為“diff [參數] 檔案”。

在使用diff指令時,不僅可以使用–brief參數來确認兩個檔案是否不同,還可以使用-c參數來詳細比較出多個檔案的差異之處,這絕對是判斷檔案是否被篡改的有力神器。例如,先使用cat指令分别檢視diff_A.txt和diff_B.txt檔案的内容,然後進行比較:

[[email protected] ~]$  cat diff_A.txt
Welcome to linuxprobe.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[[email protected] ~]# cat diff_B.txt
Welcome tooo linuxprobe.com

Red Hat certified
Free Linux LeSSonS
.....
Professional guidance
Linux Course
           

接下來使用diff --brief指令顯示比較後的結果,判斷檔案是否相同:

[[email protected] ~]$  diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ
           

最後使用帶有-c參數的diff指令來描述檔案内容具體的不同:

[[email protected] ~]$  diff -c diff_A.txt diff_B.txt
*** diff_A.txt 2017-08-30 18:07:45.230864626 +0800
--- diff_B.txt 2017-08-30 18:08:52.203860389 +0800
***************
*** 1,5 ****
! Welcome to linuxprobe.com
Red Hat certified
! Free Linux Lessons
Professional guidance
Linux Course
--- 1,7 ----
! Welcome tooo linuxprobe.com
!
Red Hat certified
! Free Linux LeSSonS
! .....
Professional guidance
Linux Course
           

檔案目錄管理指令

檔案的建立、修改、複制、剪切、更名與删除等操作。

1.touch指令

touch指令用于建立空白檔案或設定檔案的時間,格式為“touch [選項] [檔案]”。

在建立空白的文本檔案方面,這個touch指令相當簡捷,簡捷到沒有必要鋪開去講。比如,touch linuxprobe指令可以建立出一個名為linuxprobe的空白文本檔案。對touch指令來講,有難度的操作主要是展現在設定檔案内容的修改時間(mtime)、檔案權限或屬性的更改時間(ctime)與檔案的讀取時間(atime)上面。

touch指令的參數及其作用

參數 作用
-a 僅修改“讀取時間”(atime)
-m 僅修改“修改時間”(mtime
-d 同時修改atime與mtime

接下來,我們先使用ls指令檢視一個檔案的修改時間,然後修改這個檔案,最後再通過touch指令把修改後的檔案時間設定成修改之前的時間(很多黑客就是這樣做的呢):

[[email protected] ~]$ ls -l a.html 
-rw-rw-r--. 1 huislee huislee 1126 Jul 24 16:44 a.html
[[email protected] ~]$ echo "Visit the LinuxProbe.com to learn linux skill" >> a.html 
[[email protected] ~]$ ls -l a.html 
-rw-rw-r--. 1 huislee huislee 1178 Jul 24 16:44 a.html
[[email protected] ~]$ touch -d "2020-01-01 01:01" a.html 
[[email protected] ~]$ ls -l a.html 
-rw-rw-r--. 1 huislee huislee 1178 Jan  1  2020 a.html
           

2.mkdir指令

mkdir指令用于建立空白的目錄,格式為“mkdir [選項] 目錄”。

在Linux系統中,檔案夾是最常見的檔案類型之一。除了能建立單個空白目錄外,mkdir指令還可以結合-p參數來遞歸建立出具有嵌套疊層關系的檔案目錄。

3.cp指令

cp指令用于複制檔案或目錄,格式為“cp [選項] 源檔案 目标檔案”。

大家對檔案複制操作應該不陌生,在Linux系統中,複制操作具體分為3種情況:

如果目标檔案是目錄,則會把源檔案複制到該目錄中;

如果目标檔案也是普通檔案,則會詢問是否要覆寫它;

如果目标檔案不存在,則執行正常的複制操作。

參數 作用
-p 保留原始檔案的屬性
-d 若對象為“連結檔案”,則保留該“連結檔案”的屬性
-r 遞歸持續複制(用于目錄)
-i 若目标檔案存在則詢問是否覆寫
-a 相當于-pdr(p、d、r為上述參數)

4.mv指令

mv指令用于剪切檔案或将檔案重命名,格式為“mv [選項] 源檔案 [目标路徑|目标檔案名]”。

剪切操作不同于複制操作,因為它會預設把源檔案删除掉,隻保留剪切後的檔案。如果在同一個目錄中對一個檔案進行剪切操作,其實也就是對其進行重命名。

5.rm指令

rm指令用于删除檔案或目錄,格式為“rm [選項] 檔案”。

在Linux系統中删除檔案時,系統會預設向您詢問是否要執行删除操作,如果不想總是看到這種反複的确認資訊,可在rm指令後跟上-f參數來強制删除。另外,想要删除一個目錄,需要在rm指令後面一個-r參數才可以,否則删除不掉。

6.dd指令

dd指令用于按照指定大小和個數的資料塊來複制檔案或轉換檔案,格式為“dd [參數]”。

dd指令是一個比較重要而且比較有特色的一個指令,它能夠讓使用者按照指定大小和個數的資料塊來複制檔案的内容。當然如果願意的話,還可以在複制過程中轉換其中的資料。Linux系統中有一個名為/dev/zero的裝置檔案,每次在課堂上解釋它時都充滿哲學理論的色彩。因為這個檔案不會占用系統存儲空間,但卻可以提供無窮無盡的資料,是以可以使用它作為dd指令的輸入檔案,來生成一個指定大小的檔案。

參數 作用
if 輸入的檔案名稱
of 輸出的檔案名稱
bs 設定每個“塊”的大小
count 設定要複制“塊”的個數

例如我們可以用dd指令從/dev/zero裝置檔案中取出一個大小為560MB的資料塊,然後儲存成名為560_file的檔案。

[[email protected] ~]$ dd if=/dev/zero of=560_file count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB) copied, 27.1755 s, 21.6 MB/s
           

dd指令的功能也絕不僅限于複制檔案這麼簡單。如果您想把光驅裝置中的CD光牒制作成iso格式的鏡像檔案,在Windows系統中需要借助于第三方軟體才能做到,但在Linux系統中可以直接使用dd指令來壓制出CD光牒鏡像檔案,将它變成一個可立即使用的iso鏡像:

//來源于《Linux就該這樣學》書中
[[email protected] ~]# dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-LinuxProbe.Com.iso
7311360+0 records in
7311360+0 records out
3743416320 bytes (3.7 GB) copied, 370.758 s, 10.1 MB/s
           

注:bs與count都是用來指定容量的大小,隻要能滿足需求,可随意組合搭配方式。

7.file指令

file指令用于檢視檔案的類型,格式為“file 檔案名”。

在Linux系統中,由于文本、目錄、裝置等所有這些一切都統稱為檔案,而我們又不能單憑字尾就知道具體的檔案類型,這時就需要使用file指令來檢視檔案類型了。

[[email protected] ~]$ file a.html 
a.html: HTML document, UTF-8 Unicode text
[[email protected] ~]$ file test.txt 
test.txt: ASCII text
           

打包壓縮與搜尋指令

1.tar指令

tar指令用于對檔案進行打包壓縮或解壓,格式為“tar [選項] [檔案]”。

在Linux系統中,常見的檔案格式比較多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式。

(三)RHEL系統之紅帽RHEL 7系統之linux指令之一

首先,-c參數用于建立壓縮檔案,-x參數用于解壓檔案,是以這兩個參數不能同時使用。其次,-z參數指定使用Gzip格式來壓縮或解壓檔案,-j參數指定使用bzip2格式來壓縮或解壓檔案。使用者使用時則是根據檔案的字尾來決定應使用何種格式參數進行解壓。在執行某些壓縮或解壓操作時,可能需要花費數個小時,如果螢幕一直沒有輸出,您一方面不好判斷打包的進度情況,另一方面也會懷疑電腦當機了,是以非常推薦使用-v參數向使用者不斷顯示壓縮或解壓的過程。-C參數用于指定要解壓到哪個指定的目錄。-f參數特别重要,它必須放到參數的最後一位,代表要壓縮或解壓的軟體包名稱。劉遄老師一般使用“tar -czvf 壓縮包名稱.tar.gz 要打包的目錄”指令把指定的檔案進行打包壓縮;相應的解壓指令為“tar -xzvf 壓縮包名稱.tar.gz”。

先使用tar指令把/etc目錄通過gzip格式進行打包壓縮,并把檔案命名為etc.tar.gz:

[[email protected] ~]$  tar -czvf etc.tar.gz /etc
tar: Removing leading '/' from member names
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/fonts/
/etc/fonts/conf.d/
/etc/fonts/conf.d/65-0-madan.conf
/etc/fonts/conf.d/59-liberation-sans.conf
/etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
/etc/fonts/conf.d/59-liberation-mono.conf
/etc/fonts/conf.d/66-sil-nuosu.conf
………………省略部分壓縮過程資訊………………
           

将打包後的壓縮封包件指定解壓到/root/etc目錄中(先使用mkdir指令來建立/root/etc目錄):

[[email protected] ~]# mkdir /root/etc
[[email protected] ~]# tar xzvf etc.tar.gz -C /root/etc
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/fonts/
etc/fonts/conf.d/
etc/fonts/conf.d/65-0-madan.conf
etc/fonts/conf.d/59-liberation-sans.conf
etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
etc/fonts/conf.d/59-liberation-mono.conf
etc/fonts/conf.d/66-sil-nuosu.conf
etc/fonts/conf.d/65-1-vlgothic-gothic.conf
etc/fonts/conf.d/65-0-lohit-bengali.conf
etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf
………………省略部分解壓過程資訊………………
           

2.grep指令

grep指令用于在文本中執行關鍵詞搜尋,并顯示比對的結果,格式為“grep [選項] [檔案]”。

參數 作用
-b 将可執行檔案(binary)當作文本檔案(text)來搜尋
-c 僅顯示找到的行數
-i 忽略大小寫
-n 顯示行号
-v 反向選擇—僅列出沒有“關鍵詞”的行

grep指令是用途最廣泛的文本搜尋比對工具,雖然有很多參數,但是大多數基本上都用不到。

最常用的參數:-n參數用來顯示搜尋到資訊的行号;-v參數用于反選資訊(即沒有包含關鍵詞的所有資訊行)。這兩個參數幾乎能完成您日後80%的工作需要,至于其他上百個參數,即使以後在工作期間遇到了,再使用man grep指令查詢也來得及。

在Linux系統中,/etc/passwd檔案是儲存着所有的使用者資訊,而一旦使用者的登入終端被設定成/sbin/nologin,則不再允許登入系統,是以可以使用grep指令來查找出目前系統中不允許登入系統的所有使用者資訊:

[[email protected] ~]# grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
………………省略部分輸出過程資訊………………
           

3.find指令

find指令用于按照指定條件來查找檔案,格式為“find [查找路徑] 尋找條件 操作”。

本書中曾經多次提到“Linux系統中的一切都是檔案”,接下來就要見證這句話的分量了。在Linux系統中,搜尋工作一般都是通過find指令來完成的,它可以使用不同的檔案特性作為尋找條件(如檔案名、大小、修改時間、權限等資訊),一旦比對成功則預設将資訊顯示到螢幕上。

(三)RHEL系統之紅帽RHEL 7系統之linux指令之一

這裡需要重點講解一下-exec參數重要的作用。這個參數用于把find指令搜尋到的結果交由緊随其後的指令作進一步處理,它十分類似于管道符技術,并且由于find指令對參數的特殊要求,是以雖然exec是長格式形式,但依然隻需要一個減号(-)。

根據檔案系統層次标準(Filesystem Hierarchy Standard)協定,Linux系統中的配置檔案會儲存到/etc目錄中。如果要想擷取到該目錄中所有以host開頭的檔案清單,可以執行如下指令:

[[email protected] ~]$ find /etc -name "host*" -print
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
/etc/avahi/hosts
find: ‘/etc/audit’: Permission denied
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
find: ‘/etc/selinux/targeted/modules/active’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/audisp’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
/etc/hostname
           

如果要在整個系統中搜尋權限中包括SUID權限的所有檔案,隻需使用-4000即可:

[[email protected] ~]$ sudo find / -perm -4000 -print
[sudo] password for huislee: 
/usr/bin/fusermount
/usr/bin/su
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/mount
/usr/bin/umount
………………省略部分輸出資訊………………
           

進階實驗:在整個檔案系統中找出所有歸屬于linuxprobe使用者的檔案并複制到/root/findresults目錄。

該實驗的重點是“-exec {} ;”參數,其中的{}表示find指令搜尋出的每一個檔案,并且指令的結尾必須是“;”。完成該實驗的具體指令如下:

[[email protected] ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ ;

比較合并指令:diff patch

使用在::更新檔版本釋出,bug修複。

[[email protected] ~]$ cp a.c b.c
[[email protected] ~]$ echo "hello world" >>a.c
[[email protected] ~]$ diff a.c b.c 
4d3
< hello world
[[email protected] ~]$ diff a.c b.c -y
abc								abc

hello								hello
hello world						      <
[[email protected] ~]$ diff a.c b.c -u
--- a.c	2020-08-28 11:01:16.466255492 +0800
+++ b.c	2020-08-28 11:01:11.157257323 +0800
@@ -1,4 +1,3 @@
 abc
 
 hello
-hello world
[[email protected] ~]$ 
[[email protected] ~]$ diff -Nu a.c b.c > dif.patch
[[email protected] ~]$ cat dif.patch 
--- a.c	2020-08-28 11:01:16.466255492 +0800
+++ b.c	2020-08-28 11:01:11.157257323 +0800
@@ -1,4 +1,3 @@
 abc
 
 hello
-hello world
[[email protected] ~]$ patch -p0 < dif.patch 
patching file a.c
[[email protected] ~]$ cat a.c 
abc

hello
[[email protected] ~]$ cat b.c 
abc

hello
[[email protected] ~]$ 

           
(三)RHEL系統之紅帽RHEL 7系統之linux指令之一

繼續閱讀