章節簡述:node

本章首先介紹系統內核和Shell終端的關係與做用,而後介紹Bash解釋器的4大優點並學習Linux命令的執行方法。經驗豐富的運維人員能夠經過合理地組合適當的命令與參數,來更精準地知足工做需求,迅速獲得本身想要的結果,還能夠儘量地下降系統資源消耗。linux

本書精挑細選出讀者有必要首先學習的數十個Linux命令,它們與系統工做、系統狀態、工做目錄、文件、目錄、打包壓縮與搜索等主題相關。經過把上述命令概括到本章中的各個小節,讓您能夠分門別類地逐個學習這些最基礎的Linux命令,爲從此學習更復雜的命令和服務作好必備知識鋪墊。redis

2.1 強大好用的SHELL

一般來說,計算機硬件是由運算器、控制器、存儲器、輸入/輸出設備等共同組成的,而讓各類硬件設備各司其職且又能協同運行的東西就是系統內核。Linux系統的內核負責完成對硬件資源的分配、調度等管理任務。因而可知,系統內核對計算機的正常運行來說是過重要了,所以通常不建議直接去編輯內核中的參數,而是讓用戶經過基於系統調用接口開發出的程序或服務來管理計算機,以知足平常工做的須要,如圖2-1所示。緩存

必須確定的是,Linux系統中有些圖形化工具(好比邏輯卷管理器[Logical Volume Manager,LVM])確實很是好用,極大地下降了運維人員操做出錯的機率,值得稱讚。可是,不少圖形化工具實際上是調用了腳原本完成相應的工做,每每只是爲了完成某種工做而設計的,缺少Linux命令原有的靈活性及可控性。再者,圖形化工具相較於Linux命令行界面會更加消耗系統資源,所以經驗豐富的運維人員甚至都不會給Linux系統安裝圖形界面,須要開始運維工做時直接經過命令行模式遠程鏈接過去,不得不說這樣作確實挺高效的。bash

圖2-1 用戶與Linux系統的交互服務器

Shell就是這樣的一個命令行工具。Shell(也稱爲終端或殼)充當的是人與內核(硬件)之間的翻譯官,用戶把一些命令「告訴」終端,它就會調用相應的程序服務去完成某些工做。如今包括紅帽系統在內的許多主流Linux系統默認使用的終端是Bash(Bourne-Again SHell)解釋器。主流Linux系統選擇Bash解釋器做爲命令行終端主要有如下4項優點,讀者能夠在從此的學習和生產工做中細細體會Linux系統命令行的美妙之處,真正從內心愛上它們。網絡

1:經過上下方向鍵來調取過往執行過的Linux命令;session

2:命令或參數僅需輸入前幾位就能夠用Tab鍵補全;

3:具備強大的批處理腳本;

4:具備實用的環境變量功能。

2.2 執行查看幫助命令

既然Linux系統中已經有了Bash這麼好用的「翻譯官」,那麼接下來就有必要好好學習下怎麼跟它溝通了。要想準確、高效地完成各類任務,僅依賴於命令自己是不夠的,還應該根據實際狀況來靈活調整各類命令的參數。好比,咱們切壽司時儘管能夠用菜刀,但米粒必定會撒得滿地都是,所以壽司刀上設計的用於透氣的圓孔就是爲了更好地適應場景而額外增長的參數。當您學完本書並具有必定的工做經驗以後,必定可以領悟Linux命令的奧祕。常見執行Linux命令的格式是這樣的:

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

注意,命令名稱、命令參數、命令對象之間請用空格鍵分隔。

命令對象通常是指要處理的文件、目錄、用戶等資源,而命令參數能夠用長格式(完整的選項名稱),也能夠用短格式(單個字母的縮寫),二者分別用--與-做爲前綴(示例請見表2-1)。Linux新手不會執行命令大可能是由於參數比較複雜,參數值須要隨不一樣的命令和需求狀況而發生改變。所以,要想靈活搭配各類參數,執行本身想要的功能,則須要長時間的經驗積累了。

表2-1 命令參數的長格式與短格式示例

長格式 man --help
短格式 man -h

有讀者如今可能會想:「Linux系統中有那麼多命令,我怎麼知道某個命令是幹嗎用的?在平常工做中遇到了一個不熟悉的Linux命令,我又怎樣才能知道它有哪些可用參數呢?」接下來,咱們就拿man這個命令做爲本書中第一個教給讀者去學習的Linux命令了。對於真正的零基礎讀者,您能夠經過圖2-二、圖2-三、圖2-4和圖2-5來學習如何在RHEL 7系統中執行Linux命令。

默認主機登陸界面只有咱們剛剛新建的普通用戶,所以在正式進入系統以前,咱們還須要先點擊「Not listed」選項來切換至root管理員身份,這是紅帽RHEL7系統爲了不用戶亂使用權限而採起的一項小措施。而若是咱們順手使用默認的linuxprobe用戶登陸到主機中,那麼接下來本章節中則會出現一部分命令會因權限不足而沒法執行,咱們須要足夠的權限才能完成接下來的實驗。而至於同窗們關心的root管理員和普通用戶之間的區別,生產環境時又該如何選擇的疑問,咱們將會在第5章節中慢慢講給你們。登陸界面切換至root管理員身份,如圖2-2所示。

圖2-2 選擇「未列出」選項,切換至root管理員身份。

第1步:在RHEL 7系統的桌面上單擊鼠標右鍵,在彈出的菜單中選擇Open in Terminal命令,這將打開一個Linux系統命令行終端,如圖2-3所示。

運行虛擬機中的RHEL7系統,並在桌面上敲擊右鍵後點擊「Open in Terminal」,這樣就成功的打開了一個終端。

圖2-3 在Linux系統上打開命令行終端

第2步:在命令行終端中輸入man man命令來查看man命令自身的幫助信息,如圖2-4所示。

查看man幫助文檔

圖2-4 查看man命令的幫助信息

第3步:敲擊回車鍵後便可看到如圖2-5所示的幫助信息。man命令的幫助信息界面

圖2-5 man命令的幫助信息

在man命令幫助信息的界面中,所包含的經常使用操做按鍵及其用途如表2-2所示。

表2-2 man命令中經常使用按鍵以及用途

按鍵 用處
空格鍵 向下翻一頁
PaGe down 向下翻一頁
PaGe up 向上翻一頁
home 直接前往首頁
end 直接前往尾頁
/ 從上至下搜索某個關鍵詞,如「/linux」
? 從下至上搜索某個關鍵詞,如「?linux」
n 定位到下一個搜索到的關鍵詞
N 定位到上一個搜索到的關鍵詞
q 退出幫助文檔

通常來說,使用man命令查看到的幫助內容信息都會很長不少,若是讀者不瞭解幫助文檔信息的目錄結構和操做方法,乍一看到這麼多信息可能會感到至關困惑。man命令的幫助信息的結構如表2-3所示。

表2-3 man命令幫助信息的結構以及意義

結構名稱 表明意義
NAME 命令的名稱
SYNOPSIS 參數的大體使用方法
DESCRIPTION 介紹說明
EXAMPLES 演示(附帶簡單說明)
OVERVIEW 概述
DEFAULTS 默認的功能
OPTIONS 具體的可用選項(帶介紹)
ENVIRONMENT 環境變量
FILES 用到的文件
SEE ALSO 相關的資料
HISTORY 維護歷史與聯繫方式

2.3 經常使用系統工做命令

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

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

1.echo命令

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

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

[root@linuxprobe ~]# echo Linuxprobe.Com

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

Linuxprobe.Com

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

[root@linuxprobe ~]# echo $SHELL         (SHELL區分大小寫)
/bin/bash

2.date命令

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

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

表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所示。

top命令

圖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組合鍵(生產環境中比較經常使用的一個快捷鍵),這樣將當即終止該命令的進程。或者,若是有些命令在執行時不斷地在屏幕上輸出信息,影響到後續命令的輸入,則能夠在執行命令時在末尾添加上一個&符號,這樣命令將進入系統後臺來執行。

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)

: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
………………省略部分輸出信息………………

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。

[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命令              (修改不了ctime)

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
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/ \;

本章節的複習做業(答案就在問題的下一行哦,用鼠標選中便可看到的~)

1.在RHEL 7系統及衆多的Linux系統中,最常使用的Shell終端是什麼?

答:Bash(Bourne-Again SHell)解釋器。

2.執行Linux系統命令時,添加參數的目的是什麼?

答:爲了讓Linux系統命令可以更貼合用戶的實際需求進行工做。

3.Linux系統命令、命令參數及命令對象之間,廣泛應該使用什麼來間隔?

答:應該使用一個或多個空格進行間隔。

4.請寫出用echo命令把SHELL變量值輸出到屏幕終端的命令。

答:echo $SHELL。

5.簡述Linux系統中5種進程的名稱及含義。

答:在Linux系統中,有下面5種進程名稱。

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

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

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

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

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

6.請嘗試使用Linux系統命令關閉PID爲5529的服務進程。

答:執行kill 5529命令便可;若知道服務的名稱,則可使用killall命令進行關閉。

7.使用ifconfig命令查看網絡狀態信息時,須要重點查看的4項信息分別是什麼?

答:這4項重要信息分別是網卡名稱、IP地址、網卡物理地址以及RX/TX的收發流量數據大小。

8.使用uptime命令查看系統負載時,對應的負載數值若是是0.9一、0.5六、0.32,那麼最近15分鐘內負載壓力最大的是哪一個時間段?

答:經過負載數值能夠看出,最近1分鐘內的負載壓力是最大的。

9.使用history命令查看歷史命令的執行記錄時,命令前面的數字除了排序外還有什麼用處?

答:還能夠用「!數字」的命令格式重複執行某一次的命令記錄,從而避免了重複輸入較長命令的麻煩。

10.若想查看的文件具備較長的內容,那麼使用cat、more、head、tail中的哪一個命令最合適?

答:文件內容較長,使用more命令;反之使用cat命令。

11.在使用mkdir命令建立有嵌套關係的目錄時,應該加上什麼參數呢?

答:應該加上-p遞歸迭代參數,從而自動化建立有嵌套關係的目錄。

12.在使用rm命令刪除文件或目錄時,可以使用哪一個參數來避免二次確認呢?

答:可以使用-f參數,這樣便可無需二次確認。

13.如有一個名爲backup.tar.gz的壓縮包文件,那麼解壓的命令應該是什麼?

答:應該用tar命令進行解壓,執行tar -xzvf backup.tar.gz命令便可。

14.使用grep命令對某個文件進行關鍵詞搜索時,若想要進行文件內容反選,應使用什麼參數?

答:可以使用-v參數來進行匹配內容的反向選擇,即顯示出不包含某個關鍵詞的行。

本文原創地址:https://www.linuxprobe.com/chapter-02.html