Linux經常使用系統工做命令

2.3 經常使用系統工做命令

您如今閱讀的這本書是劉遄老師在經歷了十多年的運維學習以及數十期的培訓授課後總結而成的,您可能沒法在本節中找到某些以前見過的命令。但不用擔憂,之因此這樣安排,緣由是劉遄老師努力地將Linux命令與實戰相結合,真正讓讀者在實操中理解技術,而不是單純地把命令堆砌到書中讓讀者去硬背。html

劉遄老師用了近一年的時間把最經常使用的Linux命令進行彙總、概括、整理、分類後,把這些經常使用的命令合理安排到了後續章節中,而後採用以練代學的方式來加深讀者的理解和掌握。從數年的培訓成果反饋來看,這種方式至關有效,所以也相信這種方式確定適合您的學習。node

1.echo命令linux

echo命令用於在終端輸出字符串或變量提取後的值,格式爲「echo [字符串 | $變量]」。redis

例如,把指定字符串「Linuxprobe.com」輸出到終端屏幕的命令爲:vim

[root@linuxprobe ~]# echo Linuxprobe.Com

該命令會在終端屏幕上顯示以下信息:緩存

Linuxprobe.Com

下面,咱們使用$變量的方式提取變量SHELL的值,並將其輸出到屏幕上:bash

[root@linuxprobe ~]# echo $SHELL
/bin/bash

2.date命令服務器

date命令用於顯示及設置系統的時間或日期,格式爲「date [選項] [+指定的格式]」。網絡

只需在強大的date命令中輸入以「+」號開頭的參數,便可按照指定格式來輸出系統的時間或日期,這樣在平常工做時即可以把備份數據的命令與指定格式輸出的時間信息結合到一塊兒。例如,把打包後的文件自動按照「年-月-日」的格式打包成「backup-2017-9-1.tar.gz」,用戶只須要看一眼文件名稱就能大概瞭解到每一個文件的備份時間了。date命令中常見的參數格式及做用如表2-4所示。session

表2-4                                              date命令中的參數以及做用

參數 做用
%t 跳格[Tab鍵]
%H 小時(00~23)
%I 小時(00~12)
%M 分鐘(00~59)
%S 秒(00~59)
%j 今年中的第幾天

 

按照默認格式查看當前系統時間的date命令以下所示:

[root@linuxprobe ~]# date
Mon Aug 24 16:11:23 CST 2017

按照「年-月-日 小時:分鐘:秒」的格式查看當前系統時間的date命令以下所示:

[root@linuxprobe ~]# date "+%Y-%m-%d %H:%M:%S"
2017-08-24 16:29:12

將系統的當前時間設置爲2017年9月1日8點30分的date命令以下所示:

[root@linuxprobe ~]# date -s "20170901 8:30:00"
Fri Sep 1 08:30:00 CST 2017

再次使用date命令並按照默認的格式查看當前的系統時間,以下所示:

[root@linuxprobe ~]# date
Fri Sep 1 08:30:01 CST 2017

date命令中的參數%j可用來查看今天是當年中的第幾天。這個參數可以很好地區分備份時間的新舊,即數字越大,越靠近當前時間。該參數的使用方式以及顯示結果以下所示。

[root@linuxprobe ~]# date "+%j"
244

3.reboot命令

reboot命令用於重啓系統,其格式爲reboot。

因爲重啓計算機這種操做會涉及硬件資源的管理權限,所以默認只能使用root管理員來重啓,其命令以下:

[root@linuxprobe ~]# reboot

4.poweroff命令

poweroff命令用於關閉系統,其格式爲poweroff。

該命令與reboot命令相同,都會涉及硬件資源的管理權限,所以默認只有root管理員才能夠關閉電腦,其命令以下:

[root@linuxprobe ~]# poweroff

5.wget命令

wget命令用於在終端中下載網絡文件,格式爲「wget [參數] 下載地址」。

若是您沒有Linux系統的管理經驗,當前只需瞭解一下wget命令的參數以及做用,而後看一下下面的演示實驗便可,切記不要急於求成。後面章節將逐步講解Linux系統的配置管理方法,能夠等您掌握了網卡的配置方法後再來進行這個實驗操做。表2-5所示爲wget命令的參數以及參數的做用。

表2-5                                                wget命令的參數以及做用

參數 做用
-b 後臺下載模式
-P 下載到指定目錄
-t 最大嘗試次數
-c 斷點續傳
-p 下載頁面內全部資源,包括圖片、視頻等
-r 遞歸下載

 

嘗試使用wget命令從本書的配套站點中下載本書的最新pdf格式電子文檔,這個文件的完整路徑爲https://www.linuxprobe.com/docs/LinuxProbe.pdf,執行該命令後的下載效果以下:

[root@linuxprobe ~]# wget https://www.linuxprobe.com/docs/LinuxProbe.pdf
--2017-08-24 19:30:12 -- https://www.linuxprobe.com/docs/LinuxProbe.pdf
Resolving www.linuxprobe.com (www.linuxprobe.com)... 220.181.105.185
Connecting to www.linuxprobe.com (www.linuxprobe.com)|220.181.105.185|:80...connected.
HTTP request sent, awaiting response... 200 OK
Length: 45948568 (44M) [application/pdf]
Saving to: ‘LinuxProbe.pdf’
100%[===========================================>] 45,948,568 32.9MB/s in 1.3s
2017-08-24 19:30:14 (32.9 MB/s) - ‘LinuxProbe.pdf’ saved [45948568/45948568]

接下來,咱們使用wget命令遞歸下載www.linuxprobe.com網站內的全部頁面數據以及文件,下載完後會自動保存到當前路徑下一個名爲www.linuxprobe.com的目錄中。執行該操做的命令爲wget -r -p https://www.linuxprobe.com,該命令的執行結果以下。

[root@linuxprobe ~]# wget -r -p https://www.linuxprobe.com
--2017-08-24 19:31:41-- https://www.linuxprobe.com/
Resolving www.linuxprobe.com... 106.185.25.197
Connecting to www.linuxprobe.com|106.185.25.197|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'www.linuxprobe.com/index.html'
………………省略下載過程………………

6.ps命令

ps命令用於查看系統中的進程狀態,格式爲「ps [參數]」。

估計讀者在第一次執行這個命令時都要驚呆一下—怎麼會有這麼多輸出值,這可怎麼看得過來?其實,劉遄老師一般會將ps命令與第3章的管道符技術搭配使用,用來抓取與某個指定服務進程相對應的PID號碼。ps命令的常見參數以及做用如表2-6所示。

表2-6                                                  ps命令的參數以及做用

參數 做用
-a 顯示全部進程(包括其餘用戶的進程)
-u 用戶以及其餘詳細信息
-x 顯示沒有控制終端的進程

 

Linux系統中時刻運行着許多進程,若是可以合理地管理它們,則能夠優化系統的性能。在Linux系統中,有5種常見的進程狀態,分別爲運行、中斷、不可中斷、僵死與中止,其各自含義以下所示。

R(運行):進程正在運行或在運行隊列中等待。

S(中斷):進程處於休眠中,當某個條件造成後或者接收到信號時,則脫離該   狀態。

D(不可中斷):進程不響應系統異步信號,即使用kill命令也不能將其中斷。

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

T(中止):進程收到中止信號後中止運行。

當執行ps aux命令後一般會看到如表2-7所示的進程狀態,表2-7中只是列舉了部分輸出值,並且正常的輸出值中不包括中文註釋。

表2-7                                                             進程狀態

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
進程的全部者 進程ID號 運算器佔用率 內存佔用率 虛擬內存使用量(單位是KB) 佔用的固定內存量(單位是KB) 所在終端 進程狀態 被啓動的時間 實際使用CPU的時間 命令名稱與參數
root 1 0.0 0.4 53684 7628 ? Ss 07:22 0:02 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S 07:22 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 07:22 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 07:22 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 07:22 0:00 [migration/0]
  ……………… 省略部分輸出信息 ………………

 

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

7.top命令

top命令用於動態地監視進程活動與系統負載等信息,其格式爲top。

top命令至關強大,可以動態地查看系統運維狀態,徹底將它看做Linux中的「強化版的Windows任務管理器」。top命令的運行界面如圖2-6所示。

第2章 新手必須掌握的Linux命令。第2章 新手必須掌握的Linux命令。

圖2-6  top命令的運行界面

在圖2-6中,top命令執行結果的前5行爲系統總體的統計信息,其所表明的含義以下。

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

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

第3行:用戶佔用資源百分比、系統內核佔用資源百分比、改變過優先級的進程資源百分比、空閒的資源百分比等。其中數據均爲CPU數據並以百分比格式顯示,例如「97.1 id」意味着有97.1%的CPU處理器資源處於空閒。

第4行:物理內存總量、內存使用量、內存空閒量、做爲內核緩存的內存量。

第5行:虛擬內存總量、虛擬內存使用量、虛擬內存空閒量、已被提早加載的內存量。

8.pidof命令

pidof命令用於查詢某個指定服務進程的PID值,格式爲「pidof [參數] [服務名稱]」。

每一個進程的進程號碼值(PID)是惟一的,所以能夠經過PID來區分不一樣的進程。例如,可使用以下命令來查詢本機上sshd服務程序的PID:

[root@linuxprobe ~]# pidof sshd
2156

9.kill命令

kill命令用於終止某個指定PID的服務進程,格式爲「kill [參數] [進程PID]」。

接下來,咱們使用kill命令把上面用pidof命令查詢到的PID所表明的進程終止掉,其命令以下所示。這種操做的效果等同於強制中止sshd服務。

[root@linuxprobe ~]# kill 2156

10.killall命令

killall命令用於終止某個指定名稱的服務所對應的所有進程,格式爲:「killall [參數] [服務名稱]」。

一般來說,複雜軟件的服務程序會有多個進程協同爲用戶提供服務,若是逐個去結束這些進程會比較麻煩,此時可使用killall命令來批量結束某個服務程序帶有的所有進程。下面以httpd服務程序爲例,來結束其所有進程。因爲RHEL7系統默認沒有安裝httpd服務程序,所以你們此時只需看操做過程和輸出結果便可,等學習了相關內容以後再來實踐。

[root@linuxprobe ~]# pidof httpd
13581 13580 13579 13578 13577 13576
[root@linuxprobe ~]# killall httpd
[root@linuxprobe ~]# pidof httpd
[root@linuxprobe ~]# 

若是咱們在系統終端中執行一個命令後想當即中止它,能夠同時按下Ctrl + C組合鍵(生產環境中比較經常使用的一個快捷鍵),這樣將當即終止該命令的進程。或者,若是有些命令在執行時不斷地在屏幕上輸出信息,影響到後續命令的輸入,則能夠在執行命令時在末尾添加上一個&符號,這樣命令將進入系統後臺來執行。

不少同窗在報名劉遄老師培訓課程時會提到本身的英語基礎很差,其實大可沒必要擔憂,由於我們的書籍、培訓課程甚至紅帽考題都是中文的。而接下來您也就會發現,原來一直使用的是Linux命令,而毫不是純粹的英語單詞,即使它們的拼寫100%相同,最終用處確定也是不同的。所以在學習Linux系統技術的這件事上,您跟英語達人絕對都是站在同一塊兒跑線上的,更況且還正確的選擇了一本適合您的Linux教材,放心開始學習吧!

劉遄老師主講的Linux技術培訓課程介紹:https://www.linuxprobe.com/training

2.4 系統狀態檢測命令

做爲一名合格的運維人員,想要更快、更好地瞭解Linux服務器,必須具有快速查看Linux系統運行狀態的能力,所以接下來會逐個講解與網卡網絡、系統內核、系統負載、內存使用狀況、當前啓用終端數量、歷史登陸記錄、命令執行記錄以及救援診斷等相關命令的使用方法。這些命令都超級實用,還請讀者用心學習,加以掌握。

1.ifconfig命令

ifconfig命令用於獲取網卡配置與網絡狀態等信息,格式爲「ifconfig [網絡設備] [參數]」。

使用ifconfig命令來查看本機當前的網卡配置與網絡狀態等信息時,其實主要查看的就是網卡名稱、inet參數後面的IP地址、ether參數後面的網卡物理地址(又稱爲MAC地址),以及RX、TX的接收數據包與發送數據包的個數及累計流量(即下面加粗的信息內容):

[root@linuxprobe ~]# ifconfig
eno16777728: flags=4163  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::20c:29ff:fec4:a409  prefixlen 64  scopeid 0x20
        ether 00:0c:29:c4:a4:09  txqueuelen 1000  (Ethernet)
        RX packets 36  bytes 3176 (3.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38  bytes 4757 (4.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 0  (Local Loopback)
        RX packets 386  bytes 32780 (32.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 386  bytes 32780 (32.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.uname命令

uname命令用於查看系統內核與系統版本等信息,格式爲「uname [-a]」。

在使用uname命令時,通常會固定搭配上-a參數來完整地查看當前系統的內核名稱、主機名、內核發行版本、節點名、系統時間、硬件名稱、硬件平臺、處理器類型以及操做系統名稱等信息。

[root@linuxprobe ~]# uname -a
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux

順帶一提,若是要查看當前系統版本的詳細信息,則須要查看redhat-release文件,其命令以及相應的結果以下:

[root@linuxprobe ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)

3.uptime命令

uptime用於查看系統的負載信息,格式爲uptime。

uptime命令真的很棒,它能夠顯示當前系統時間、系統已運行時間、啓用終端數量以及平均負載值等信息。平均負載值指的是系統在最近1分鐘、5分鐘、15分鐘內的壓力狀況(下面加粗的信息部分);負載值越低越好,儘可能不要長期超過1,在生產環境中不要超過5。

[root@linuxprobe ~]# uptime
22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18

4.free命令

free用於顯示當前系統中內存的使用量信息,格式爲「free [-h]」。

爲了保證Linux系統不會因資源耗盡而忽然宕機,運維人員須要時刻關注內存的使用量。在使用free命令時,能夠結合使用-h參數以更人性化的方式輸出當前內存的實時使用量信息。表2-8所示爲在劉遄老師的電腦上執行free -h命令以後的輸出信息。須要注意的是,輸出信息中的中文註釋是做者自行添加的內容,實際輸出時沒有相應的參數解釋。

[root@linuxprobe ~]# free -h

表2-8                                            執行free -h命令後的輸出信息

  內存總量 已用量 可用量 進程共享的內存量 磁盤緩存的內存量 緩存的內存量
  total used free shared buffers cached
Mem: 1.8G 1.3G 542M 9.8M 1.6M 413M
-/+ buffers/cache:   869M 957M      
Swap: 2.0G 0B 2.0G      

 

5.who命令

who用於查看當前登入主機的用戶終端信息,格式爲「who [參數]」。

這三個簡單的字母能夠快速顯示出全部正在登陸本機的用戶的名稱以及他們正在開啓的終端信息。表2-9所示爲執行who命令後的結果。

[root@linuxprobe ~]# who

表2-9                                                   執行who命令的結果

登錄的用戶名 終端設備 登錄到系統的時間
root :0 2017-08-24 17:52 (:0)
root pts/0 2017-08-24 17:52 (:0)

 

6.last命令

last命令用於查看全部系統的登陸記錄,格式爲「last [參數]」。

使用last命令能夠查看本機的登陸記錄。可是,因爲這些信息都是以日誌文件的形式保存在系統中,所以黑客能夠很容易地對內容進行篡改。千萬不要單純以該命令的輸出信息而判斷系統有無被惡意入侵!

[root@linuxprobe ~]# last
root       pts/0       :0               Mon Aug  24 17:52   still  logged in
root       :0          :0               Mon Aug  24 17:52   still  logged in
(unknown   :0          :0               Mon Aug  24 17:50 - 17:52   (00:02)
reboot     system boot 3.10.0-123.el7.x Tue Aug  25 01:49 - 18:17   (-7:-32)
root       pts/0       :0               Mon Aug  24 15:40 - 08:54   (7+17:14)
root       pts/0       :0               Fri Jul  10 10:49 - 15:37   (45+04:47)
………………省略部分登陸信息………………

7.history命令

history命令用於顯示歷史執行過的命令,格式爲「history [-c]」。

history命令應該是做者最喜歡的命令。執行history命令能顯示出當前用戶在本地計算機中執行過的最近1000條命令記錄。若是以爲1000不夠用,還能夠自定義/etc/profile文件中的HISTSIZE變量值。在使用history命令時,若是使用-c參數則會清空全部的命令歷史記錄。還可使用「!編碼數字」的方式來重複執行某一次的命令。總之,history命令有不少有趣的玩法等待您去開發。

[root@linuxprobe ~]# history
1 tar xzvf VMwareTools-9.9.0-2304977.tar.gz
2 cd vmware-tools-distrib/
3 ls
4 ./vmware-install.pl -d
5 reboot
6 df -h
7 cd /run/media/
8 ls
9 cd root/
10 ls
11 cd VMware\ Tools/
12 ls
13 cp VMwareTools-9.9.0-2304977.tar.gz /home
14 cd /home
15 ls
16 tar xzvf VMwareTools-9.9.0-2304977.tar.gz
17 cd vmware-tools-distrib/
18 ls
19 ./vmware-install.pl -d
20 reboot
21 history
[root@linuxprobe ~]# !15
anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Pictures  Templates
Desktop          Downloads  Music                 Public    Videos

歷史命令會被保存到用戶家目錄中的.bash_history文件中。Linux系統中以點(.)開頭的文件均表明隱藏文件,這些文件大多數爲系統服務文件,能夠用cat命令查看其文件內容。

[root@linuxprobe ~]# cat ~/.bash_history

要清空當前用戶在本機上執行的Linux命令歷史記錄信息,可執行以下命令:

[root@linuxprobe ~]# history -c

8.sosreport命令

sosreport命令用於收集系統配置及架構信息並輸出診斷文檔,格式爲sosreport。

當Linux系統出現故障須要聯繫技術支持人員時,大多數時候都要先使用這個命令來簡單收集系統的運行狀態和服務配置信息,以便讓技術支持人員可以遠程解決一些小問題,亦或讓他們能提早了解某些複雜問題。在下面的輸出信息中,加粗的部分是收集好的資料壓縮文件以及校驗碼,將其發送給技術支持人員便可:

[root@linuxprobe ~]# 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.
2.5 工做目錄切換命令

工做目錄指的是用戶當前在系統中所處的位置。因爲工做目錄會牽涉系統存儲結構相關的知識,所以第6章將詳細講解這部份內容。讀者只需簡單瞭解一下這裏的操做實驗便可,若是不能徹底掌握也沒有關係,畢竟Linux系統的知識體系太過龐大,每一位初學人員都須要經歷這麼一段時期。

1.pwd命令

pwd命令用於顯示用戶當前所處的工做目錄,格式爲「pwd [選項]」。

[root@linuxprobe etc]# pwd
/etc

2.cd命令

cd命令用於切換工做路徑,格式爲「cd [目錄名稱]」。

這個命令應該是最經常使用的一個Linux命令了。能夠經過cd命令迅速、靈活地切換到不一樣的工做目錄。除了常見的切換目錄方式,還可使用「cd -」命令返回到上一次所處的目錄,使用「cd..」命令進入上級目錄,以及使用「cd ~」命令切換到當前用戶的家目錄,亦或使用「cd ~username」切換到其餘用戶的家目錄。例如,可使用「cd 路徑」的方式切換進/etc目錄中:

[root@linuxprobe ~]# cd /etc

一樣的道理,可以使用下述命令切換到/bin目錄中:

[root@linuxprobe etc]# cd /bin

此時,要返回到上一次的目錄(即/etc目錄),可執行以下命令:

[root@linuxprobe bin]# cd -
/etc
[root@linuxprobe etc]#

還能夠經過下面的命令快速切換到用戶的家目錄:

[root@linuxprobe etc]# cd ~
[root@linuxprobe ~]#

3.ls命令

ls命令用於顯示目錄中的文件信息,格式爲「ls [選項] [文件] 」。

所處的工做目錄不一樣,當前工做目錄下的文件確定也不一樣。使用ls命令的「-a」參數看到所有文件(包括隱藏文件),使用「-l」參數能夠查看文件的屬性、大小等詳細信息。將這兩個參數整合以後,再執行ls命令便可查看當前目錄中的全部文件並輸出這些文件的屬性信息:

[root@linuxprobe ~]# ls -al
total 60
dr-xr-x---. 14 root root 4096 May  4 07:56 .
drwxr-xr-x. 17 root root 4096 May  4 15:55 ..
-rw-------.  1 root root 1213 May  4 15:44 anaconda-ks.cfg
-rw-------.  1 root root  957 May  4 07:54 .bash_history
-rw-r--r--.  1 root root   18 Dec 28  2013 .bash_logout
-rw-r--r--.  1 root root  176 Dec 28  2013 .bash_profile
-rw-r--r--.  1 root root  176 Dec 28  2013 .bashrc
drwx------. 10 root root 4096 May  4 07:56 .cache
drwx------. 15 root root 4096 May  4 07:49 .config
-rw-r--r--.  1 root root  100 Dec 28  2013 .cshrc
drwx------.  3 root root   24 May  4 07:46 .dbus
drwxr-xr-x.  2 root root    6 May  4 07:49 Desktop
drwxr-xr-x.  2 root root    6 May  4 07:49 Documents
drwxr-xr-x.  2 root root    6 May  4 07:49 Downloads
-rw-------.  1 root root   16 May  4 07:49 .esd_auth
-rw-------.  1 root root  628 May  4 07:56 .ICEauthority
-rw-r--r--.  1 root root 1264 May  4 07:48 initial-setup-ks.cfg
drwx------.  3 root root   18 May  4 07:49 .local
drwxr-xr-x.  2 root root    6 May  4 07:49 Music
drwxr-xr-x.  2 root root    6 May  4 07:49 Pictures
drwxr-xr-x.  2 root root    6 May  4 07:49 Public
-rw-r--r--.  1 root root  129 Dec 28  2013 .tcshrc
drwxr-xr-x.  2 root root    6 May  4 07:49 Templates
drwxr-xr-x.  2 root root    6 May  4 07:49 Videos
-rw-------.  1 root root 1962 May  4 07:54 .viminfo

若是想要查看目錄屬性信息,則須要額外添加一個-d參數。例如,可以使用以下命令查看/etc目錄的權限與屬性信息:

[root@linuxprobe ~]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc
2.6 文本文件編輯命令

經過前面幾個小節的學習,讀者應該基本掌握了切換工做目錄及對文件的管理方法。Linux系統中「一切都是文件」,而對服務程序進行配置天然也就是編輯程序的配置文件。若是不能熟練地查閱系統或服務的配置文件,那之後工做時可就真的要尷尬了。本節將講解幾條用於查看文本文件內容的命令。至於編輯器使用起來比較複雜,所以將放到第4章與Shell腳本內容一塊兒講解。

1.cat命令

cat命令用於查看純文本文件(內容較少的),格式爲「cat [選項] [文件]」。

Linux系統中有多個用於查看文本內容的命令,每一個命令都有本身的特色,好比這個cat命令就是用於查看內容較少的純文本文件的。cat這個命令也很好記,由於cat在英語中是「貓」的意思,小貓咪是否是給您一種嬌小、可愛的感受呢?

若是在查看文本內容時還想順便顯示行號的話,不妨在cat命令後面追加一個-n參數:

[root@linuxprobe ~]# cat -n initial-setup-ks.cfg 
     1    #version=RHEL7
     2    # X Window System configuration information
     3    xconfig  --startxonboot
     4    
     5    # License agreement
     6    eula --agreed
     7    # System authorization information
     8    auth --enableshadow --passalgo=sha512
     9    # Use CDROM installation media
    10    cdrom
    11    # Run the Setup Agent on first boot
    12    firstboot --enable
    13    # Keyboard layouts
    14    keyboard --vckeymap=us --xlayouts='us'
    15    # System language
    16    lang en_US.UTF-8
………………省略部分輸出信息………………

cat命令詳解:https://www.linuxcool.com/cat

2.more命令

more命令用於查看純文本文件(內容較多的),格式爲「more [選項]文件」。

若是須要閱讀長篇小說或者很是長的配置文件,那麼「小貓咪」可就真的不適合了。由於一旦使用cat命令閱讀長篇的文本內容,信息就會在屏幕上快速翻滾,致使本身尚未來得及看到,內容就已經翻篇了。所以對於長篇的文本內容,推薦使用more命令來查看。more命令會在最下面使用百分比的形式來提示您已經閱讀了多少內容。您還可使用空格鍵或回車鍵向下翻頁:

[root@linuxprobe ~]# more initial-setup-ks.cfg 
#version=RHEL7
# X Window System configuration information
xconfig  --startxonboot

# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

ignoredisk --only-use=sda
# Network information
network  --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
network  --bootproto=dhcp --hostname=linuxprobe.com
--More--(43%)

3.head命令

head命令用於查看純文本文檔的前N行,格式爲「head [選項] [文件]」。

在閱讀文本內容時,誰也難以保證會按照從頭至尾的順序往下看完整個文件。若是隻想查看文本中前20行的內容,該怎麼辦呢?head命令能夠派上用場了:

[root@linuxprobe ~]# head -n 20  initial-setup-ks.cfg 
#version=RHEL7
# X Window System configuration information
xconfig  --startxonboot

# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

ignoredisk --only-use=sda
# Network information
network  --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
[root@linuxprobe ~]#

4.tail命令

tail命令用於查看純文本文檔的後N行或持續刷新內容,格式爲「tail [選項] [文件]」。

咱們可能還會遇到另一種狀況,好比須要查看文本內容的最後20行,這時就須要用到tail命令了。tail命令的操做方法與head命令很是類似,只須要執行「tail -n 20 文件名」命令就能夠達到這樣的效果。tail命令最強悍的功能是能夠持續刷新一個文件的內容,當想要實時查看最新日誌文件時,這特別有用,此時的命令格式爲「tail -f 文件名」:

[root@linuxprobe ~]# 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'
Aug  1 01:08:57 localhost dbus[1124]: [system] Successfully activated service 'com.redhat.SubscriptionManager'

5.tr命令

tr命令用於替換文本文件中的字符,格式爲「tr [原始字符] [目標字符]」。

在不少時候,咱們想要快速地替換文本中的一些詞彙,又或者把整個文本內容都進行替換,若是進行手工替換,不免工做量太大,尤爲是須要處理大批量的內容時,進行手工替換更是不現實。這時,就能夠先使用cat命令讀取待處理的文本,而後經過管道符(詳見第3章)把這些文本內容傳遞給tr命令進行替換操做便可。例如,把某個文本內容中的英文所有替換爲大寫:

[root@linuxprobe ~]# 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'
# SYSTEM LANGUAGE
LANG EN_US.UTF-8

# NETWORK INFORMATION
NETWORK --BOOTPROTO=DHCP --DEVICE=ENO16777728 --ONBOOT=OFF --IPV6=AUTO
NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN
# ROOT PASSWORD
ROOTPW --ISCRYPTED $6$PDJJF42G8C6PL069$II.PX/YFAQPO0ENW2PA7MOMKJLYOAE2ZJMZ2UZJ7BH3UO4OWTR1.WK/HXZ3XIGMZGJPCS/MGPYSSOI8HPCT8B/
# SYSTEM TIMEZONE
TIMEZONE AMERICA/NEW_YORK --ISUTC
USER --NAME=LINUXPROBE --PASSWORD=$6$A9V3INSTNBWEIR7D$JEGFYWBCDOOOKJ9SODECCDO.ZLF4OSH2AZ2SS2R05B6LZ2A0V2K.RJWSBALL2FEKQVGF640OA/TOK6J.7GUTO/ --ISCRYPTED --GECOS="LINUXPROBE"
# X WINDOW SYSTEM CONFIGURATION INFORMATION
XCONFIG --STARTXONBOOT
# SYSTEM BOOTLOADER CONFIGURATION
BOOTLOADER --LOCATION=MBR --BOOT-DRIVE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --NONE --INITLABEL 

%PACKAGES
@BASE
@CORE
@DESKTOP-DEBUGGING
@DIAL-UP
@FONTS
@GNOME-DESKTOP
@GUEST-AGENTS
@GUEST-DESKTOP-AGENTS
@INPUT-METHODS
@INTERNET-BROWSER
@MULTIMEDIA
@PRINT-CLIENT
@X11

%END

6.wc命令

wc命令用於統計指定文本的行數、字數、字節數,格式爲「wc [參數] 文本」。

每次我在課堂上講到這個命令時,總有同窗會聯想到一種公共設施,其實這二者毫無關聯。Linux系統中的wc命令用於統計文本的行數、字數、字節數等。若是爲了方便本身記住這個命令的做用,也能夠聯想到上廁所時好無聊,無聊到數完了手中的如廁讀物上有多少行字。wc的參數以及相應的做用如表2-10所示。

表2-10                                                   wc的參數以及做用

參數 做用
-l 只顯示行數
-w 只顯示單詞數
-c 只顯示字節數

 

在Linux系統中,passwd是用於保存系統帳戶信息的文件,要統計當前系統中有多少個用戶,可使用下面的命令來進行查詢,是否是很神奇:

[root@linuxprobe ~]# wc -l /etc/passwd
38 /etc/passwd

7.stat命令

stat命令用於查看文件的具體存儲信息和時間等信息,格式爲「stat 文件名稱」。

stat命令能夠用於查看文件的存儲信息和時間等信息,命令stat anaconda-ks.cfg會顯示出文件的三種時間狀態(已加粗):Access、Modify、Change。這三種時間的區別將在下面的touch命令中詳細詳解:

[root@linuxprobe ~]# 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文件中的用戶名信息,即提取以冒號(:)爲間隔符號的第一列內容:

[root@linuxprobe ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@linuxprobe ~]# cut -d: -f1 /etc/passwd
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
linuxprobe

9.diff命令

diff命令用於比較多個文本文件的差別,格式爲「diff [參數] 文件」。

在使用diff命令時,不只可使用--brief參數來確認兩個文件是否不一樣,還可使用-c參數來詳細比較出多個文件的差別之處,這絕對是判斷文件是否被篡改的有力神器。例如,先使用cat命令分別查看diff_A.txt和diff_B.txt文件的內容,而後進行比較:

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

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

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

[root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ

最後使用帶有-c參數的diff命令來描述文件內容具體的不一樣:

[root@linuxprobe ~]# 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
2.7 文件目錄管理命令

目前爲止,咱們學習Linux命令就像是在夯實地基,雖然表面上暫時還看不到成果,但其實你們的內功已經至關雄厚了。在Linux系統的平常運維工做中,還須要掌握對文件的建立、修改、複製、剪切、改名與刪除等操做。

1.touch命令

touch命令用於建立空白文件或設置文件的時間,格式爲「touch [選項] [文件]」。

在建立空白的文本文件方面,這個touch命令至關簡捷,簡捷到沒有必要鋪開去講。好比,touch linuxprobe命令能夠建立出一個名爲linuxprobe的空白文本文件。對touch命令來說,有難度的操做主要是體如今設置文件內容的修改時間(mtime)、文件權限或屬性的更改時間(ctime)與文件的讀取時間(atime)上面。touch命令的參數及其做用如表2-11所示。

表2-11                                             touch命令的參數及其做用

參數 做用
-a 僅修改「讀取時間」(atime)
-m 僅修改「修改時間」(mtime)
-d 同時修改atime與mtime

 

接下來,咱們先使用ls命令查看一個文件的修改時間,而後修改這個文件,最後再經過touch命令把修改後的文件時間設置成修改以前的時間(不少黑客就是這樣作的呢):

[root@linuxprobe ~]# ls -l anaconda-ks.cfg 
-rw-------. 1 root root 1213 May  4 15:44 anaconda-ks.cfg
[root@linuxprobe ~]# echo "Visit the LinuxProbe.com to learn linux skills" >> anaconda-ks.cfg
[root@linuxprobe ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1260 Aug  2 01:26 anaconda-ks.cfg
[root@linuxprobe ~]# touch -d "2017-05-04 15:44" anaconda-ks.cfg 
[root@linuxprobe ~]# ls -l anaconda-ks.cfg 
-rw-------. 1 root root 1260 May  4 15:44 anaconda-ks.cfg

2.mkdir命令

mkdir命令用於建立空白的目錄,格式爲「mkdir [選項] 目錄」。

在Linux系統中,文件夾是最多見的文件類型之一。除了能建立單個空白目錄外,mkdir命令還能夠結合-p參數來遞歸建立出具備嵌套疊層關係的文件目錄。

[root@linuxprobe ~]# mkdir linuxprobe
[root@linuxprobe ~]# cd linuxprobe
[root@linuxprobe linuxprobe]# mkdir -p a/b/c/d/e
[root@linuxprobe linuxprobe]# cd a
[root@linuxprobe a]# cd b
[root@linuxprobe b]#

3.cp命令

cp命令用於複製文件或目錄,格式爲「cp [選項] 源文件 目標文件」。你們對文件複製操做應該不陌生,在Linux系統中,複製操做具體分爲3種狀況:

若是目標文件是目錄,則會把源文件複製到該目錄中;

若是目標文件也是普通文件,則會詢問是否要覆蓋它;

若是目標文件不存在,則執行正常的複製操做。

cp命令的參數及其做用如表2-12所示。

表2-12                                               cp命令的參數及其做用

參數 做用
-p 保留原始文件的屬性
-d 若對象爲「連接文件」,則保留該「連接文件」的屬性
-r 遞歸持續複製(用於目錄)
-i 若目標文件存在則詢問是否覆蓋
-a 至關於-pdr(p、d、r爲上述參數)

 

接下來,使用touch建立一個名爲install.log的普通空白文件,而後將其複製爲一份名爲x.log的備份文件,最後再使用ls命令查看目錄中的文件:

[root@linuxprobe ~]# touch install.log
[root@linuxprobe ~]# cp install.log x.log
[root@linuxprobe ~]# ls
install.log x.log

4.mv命令

mv命令用於剪切文件或將文件重命名,格式爲「mv [選項] 源文件 [目標路徑|目標文件名]」。

剪切操做不一樣於複製操做,由於它會默認把源文件刪除掉,只保留剪切後的文件。若是在同一個目錄中對一個文件進行剪切操做,其實也就是對其進行重命名:

[root@linuxprobe ~]# mv x.log linux.log
[root@linuxprobe ~]# ls
install.log linux.log

5.rm命令

rm命令用於刪除文件或目錄,格式爲「rm [選項] 文件」。

在Linux系統中刪除文件時,系統會默認向您詢問是否要執行刪除操做,若是不想老是看到這種反覆的確認信息,可在rm命令後跟上-f參數來強制刪除。另外,想要刪除一個目錄,須要在rm命令後面加一個-r參數才能夠,不然刪除不掉。咱們來嘗試刪除前面建立的install.log和linux.log文件:

[root@linuxprobe ~]# rm install.log
rm: remove regular empty file ‘install.log’? y
[root@linuxprobe ~]# rm -f linux.log
[root@linuxprobe ~]# ls
[root@linuxprobe ~]#

6.dd命令

dd命令用於按照指定大小和個數的數據塊來複制文件或轉換文件,格式爲「dd [參數]」。

dd命令是一個比較重要並且比較有特點的一個命令,它可以讓用戶按照指定大小和個數的數據塊來複制文件的內容。固然若是願意的話,還能夠在複製過程當中轉換其中的數據。Linux系統中有一個名爲/dev/zero的設備文件,每次在課堂上解釋它時都充滿哲學理論的色彩。由於這個文件不會佔用系統存儲空間,但卻能夠提供無窮無盡的數據,所以可使用它做爲dd命令的輸入文件,來生成一個指定大小的文件。dd命令的參數及其做用如表2-13所示。

表2-13                                               dd命令的參數及其做用

參數 做用
if 輸入的文件名稱
of 輸出的文件名稱
bs 設置每一個「塊」的大小
count 設置要複製「塊」的個數

 

例如咱們能夠用dd命令從/dev/zero設備文件中取出一個大小爲560MB的數據塊,而後保存成名爲560_file的文件。在理解了這個命令後,之後就能隨意建立任意大小的文件了:

[root@linuxprobe ~]# 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命令的功能也毫不僅限於複製文件這麼簡單。若是您想把光驅設備中的光盤製做成iso格式的鏡像文件,在Windows系統中須要藉助於第三方軟件才能作到,但在Linux系統中能夠直接使用dd命令來壓制出光盤鏡像文件,將它變成一個可當即使用的iso鏡像:

[root@linuxprobe ~]# 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塊個數的關係,下面舉一個吃貨的例子進行解釋。假設小明的飯量(即需求)是一個固定的值,用來盛飯的勺子的大小即bs塊大小,而用勺子盛飯的次數即count塊個數。小明要想吃飽(知足需求),則須要在勺子大小(bs塊大小)與用勺子盛飯的次數(count塊個數)之間進行平衡。勺子越大,用勺子盛飯的次數就越少。由上可見,bs與count都是用來指定容量的大小,只要能知足需求,可隨意組合搭配方式。

7.file命令

file命令用於查看文件的類型,格式爲「file 文件名」。

在Linux系統中,因爲文本、目錄、設備等全部這些一切都統稱爲文件,而咱們又不能單憑後綴就知道具體的文件類型,這時就須要使用file命令來查看文件類型了。

[root@linuxprobe ~]# file anaconda-ks.cfg 
anaconda-ks.cfg: ASCII text
[root@linuxprobe ~]# file /dev/sda
/dev/sda: block special

出現問題?大膽提問!

因讀者們硬件不一樣或操做錯誤均可能致使實驗配置出錯,請耐心再仔細看看操做步驟吧,不要氣餒~

Linux技術交流請加A羣:560843(滿),B羣:340829(推薦),C羣:463590(推薦),點此查看全國羣

*本羣特點:經過口令驗證確保每個羣員都是《Linux就該這麼學》的讀者,答疑更有針對性,不按期免費領取定製禮品。

2.8 打包壓縮與搜索命令

在網絡上,人們愈來愈傾向於傳輸壓縮格式的文件,緣由是壓縮文件體積小,在網速相同的狀況下,傳輸時間短。下面將學習如何在Linux系統中對文件進行打包壓縮與解壓,以及讓用戶基於關鍵詞在文本文件中搜索相匹配的信息、在整個文件系統中基於指定的名稱或屬性搜索特定文件。本節雖然只有3條命令,可是其功能都比較複雜並且參數不少,所以放到了本章最後講解。

1.tar命令

tar命令用於對文件進行打包壓縮或解壓,格式爲「tar [選項] [文件]」。

在Linux系統中,常見的文件格式比較多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式,咱們不用擔憂格式太多而記不住,其實這些格式大部分都是由tar命令來生成的。劉遄老師將講解最重要的幾個參數,以方便你們理解。tar命令的參數及其做用如表2-14所示。

表2-14                                               tar命令的參數及其做用

參數 做用
-c 建立壓縮文件
-x 解開壓縮文件
-t 查看壓縮包內有哪些文件
-z 用Gzip壓縮或解壓
-j 用bzip2壓縮或解壓
-v 顯示壓縮或解壓的過程
-f 目標文件名
-p 保留原始的權限與屬性
-P 使用絕對路徑來壓縮
-C 指定解壓到的目錄

 

首先,-c參數用於建立壓縮文件,-x參數用於解壓文件,所以這兩個參數不能同時使用。其次,-z參數指定使用Gzip格式來壓縮或解壓文件,-j參數指定使用bzip2格式來壓縮或解壓文件。用戶使用時則是根據文件的後綴來決定應使用何種格式參數進行解壓。在執行某些壓縮或解壓操做時,可能須要花費數個小時,若是屏幕一直沒有輸出,您一方面很差判斷打包的進度狀況,另外一方面也會懷疑電腦死機了,所以很是推薦使用-v參數向用戶不斷顯示壓縮或解壓的過程。-C參數用於指定要解壓到哪一個指定的目錄。-f參數特別重要,它必須放到參數的最後一位,表明要壓縮或解壓的軟件包名稱。劉遄老師通常使用「tar -czvf 壓縮包名稱.tar.gz 要打包的目錄」命令把指定的文件進行打包壓縮;相應的解壓命令爲「tar -xzvf 壓縮包名稱.tar.gz」。下面咱們來逐個演示下打包壓縮與解壓的操做。先使用tar命令把/etc目錄經過gzip格式進行打包壓縮,並把文件命名爲etc.tar.gz:

[root@linuxprobe ~]# 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目錄):

[root@linuxprobe ~]# mkdir /root/etc
[root@linuxprobe ~]# 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 [選項] [文件]」。grep命令的參數及其做用如表2-15所示。

表2-15                                              grep命令的參數及其做用

參數 做用
-b 將可執行文件(binary)看成文本文件(text)來搜索
-c 僅顯示找到的行數
-i 忽略大小寫
-n 顯示行號
-v 反向選擇——僅列出沒有「關鍵詞」的行。

 

grep命令是用途最普遍的文本搜索匹配工具,雖然有不少參數,可是大多數基本上都用不到。劉遄老師在總結了近10年的運維工做和培訓教學的經驗後,提出的本書的寫做理念「去掉不實用」絕對不是信口開河。若是一名IT培訓講師的水平只能停留在「技術的搬運工」層面,而不能對優質技術知識進行提煉總結,那對他的學生來說絕非好事。咱們在這裏只講兩個最最經常使用的參數:-n參數用來顯示搜索到信息的行號;-v參數用於反選信息(即沒有包含關鍵詞的全部信息行)。這兩個參數幾乎能完成您往後80%的工做須要,至於其餘上百個參數,即便之後在工做期間遇到了,再使用man grep命令查詢也來得及。

在Linux系統中,/etc/passwd文件是保存着全部的用戶信息,而一旦用戶的登陸終端被設置成/sbin/nologin,則再也不容許登陸系統,所以可使用grep命令來查找出當前系統中不容許登陸系統的全部用戶信息:

[root@linuxprobe ~]# 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命令來完成的,它可使用不一樣的文件特性做爲尋找條件(如文件名、大小、修改時間、權限等信息),一旦匹配成功則默認將信息顯示到屏幕上。find命令的參數以及做用如表2-16所示。

表2-16                                             find命令中的參數以及做用

參數 做用
-name 匹配名稱
-perm 匹配權限(mode爲徹底匹配,-mode爲包含便可)
-user 匹配全部者
-group 匹配全部組
-mtime -n +n 匹配修改內容的時間(-n指n天之內,+n指n天之前)
-atime -n +n 匹配訪問文件的時間(-n指n天之內,+n指n天之前)
-ctime -n +n 匹配修改文件權限的時間(-n指n天之內,+n指n天之前)
-nouser 匹配無全部者的文件
-nogroup 匹配無全部組的文件
-newer f1 !f2 匹配比文件f1新但比f2舊的文件
--type b/d/c/p/l/f 匹配文件類型(後面的字幕字母依次表示塊設備、目錄、字符設備、管道、連接文件、文本文件)
-size 匹配文件的大小(+50KB爲查找超過50KB的文件,而-50KB爲查找小於50KB的文件)
-prune 忽略某個目錄
-exec …… {}\; 後面可跟用於進一步處理搜索結果的命令(下文會有演示)

 

這裏須要重點講解一下-exec參數重要的做用。這個參數用於把find命令搜索到的結果交由緊隨其後的命令做進一步處理,它十分相似於第3章將要講解的管道符技術,而且因爲find命令對參數的特殊要求,所以雖然exec是長格式形式,但依然只須要一個減號(-)。

根據文件系統層次標準(Filesystem Hierarchy Standard)協議,Linux系統中的配置文件會保存到/etc目錄中(詳見第6章)。若是要想獲取到該目錄中全部以host開頭的文件列表,能夠執行以下命令:

[root@linuxprobe ~]# find /etc -name "host*" -print
/etc/avahi/hosts
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/modules/active/modules/hostname.pp
/etc/hostname

若是要在整個系統中搜索權限中包括SUID權限的全部文件(詳見第5章),只需使用-4000便可:

[root@linuxprobe ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/su
/usr/bin/umount
/usr/bin/passwd
/usr/sbin/userhelper
/usr/sbin/usernetctl
………………省略部分輸出信息………………

進階實驗:在整個文件系統中找出全部歸屬於linuxprobe用戶的文件並複製到/root/findresults目錄。

該實驗的重點是「-exec {}   \;」參數,其中的{}表示find命令搜索出的每個文件,而且命令的結尾必須是「\;」。完成該實驗的具體命令以下:

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

相關文章
相關標籤/搜索