您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Linux系統(tǒng)管理員常用命令有哪些的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
系統(tǒng)管理員(sysadmins)負(fù)責(zé)日常維護(hù)生產(chǎn)系統(tǒng)和服務(wù)。其中一個(gè)關(guān)鍵任務(wù)就是保證功能性服務(wù)能24小時(shí)工作。為了這個(gè),他們得很小心地計(jì)劃備份方式,災(zāi)難管理策略,定時(shí)維護(hù),安全審查,等等
無論你是新手開發(fā)者還是希望管理自己的應(yīng)用程序,下面 20 條基本的系統(tǒng)管理命令都可以幫助您更好地了解您的應(yīng)用程序。它們還可以幫助解決為什么應(yīng)用程序可在本地正常工作但不能在遠(yuǎn)程主機(jī)上工作這類的系統(tǒng)故障。這些命令適用于 Linux 開發(fā)環(huán)境、容器和虛擬機(jī)。
curl 用于傳輸一個(gè) URL??梢允褂眠@條命令用于測(cè)試應(yīng)用程序的端點(diǎn)或與上游服務(wù)端點(diǎn)的連接。curl 還可用于檢查你的應(yīng)用程序是否能連接到其他服務(wù),例如數(shù)據(jù)庫,或檢查您的服務(wù)是否處于健康的狀態(tài)。
舉個(gè)例子,假如你的應(yīng)用程序拋出一個(gè) HTTP 500 錯(cuò)誤,表示無法訪問 MongoDB 數(shù)據(jù)庫:
$ curl -I -s myapplication:5000 HTTP/1.0 500 INTERNAL SERVER ERROR
-I 選項(xiàng)用于顯示頭信息,-s 選項(xiàng)表示使用靜默模式,不顯示錯(cuò)誤和進(jìn)度。檢查數(shù)據(jù)庫的端點(diǎn)是否正確:
$ curl -I -s database:27017 HTTP/1.0 200 OK
那么可能是什么問題呢? 檢查您的應(yīng)用程序是否可以訪問數(shù)據(jù)庫以外的其他位置:
$ curl -I -s https://opensource.com HTTP/1.1 200 OK
看起來這沒問題,現(xiàn)在嘗試訪問數(shù)據(jù)庫。您的應(yīng)用程序正在使用數(shù)據(jù)庫的主機(jī)名,因此請(qǐng)先嘗試:
$ curl database:27017 curl: (6) Couldn't resolve host 'database'
這表示您的應(yīng)用程序無法解析數(shù)據(jù)庫,因?yàn)閿?shù)據(jù)庫的 URL 不可用或主機(jī)(容器或VM)沒有可用于解析主機(jī)名的域名服務(wù)器。
使用 curl 后,API 調(diào)用的輸出可讀性可能較差。有時(shí)候,你希望將生成的 JSON 數(shù)據(jù)格式化輸出以查找特定的條目。Python 有一個(gè)內(nèi)置的庫可幫助您實(shí)現(xiàn)這個(gè)需求??梢允褂?python -m json.tool 來縮進(jìn)和組織 JSON。要使用 Python 的 JSON 模塊,需要使用管道機(jī)制,將 JSON 文件的輸出作為輸入,寫入到 python -m json.tool 命令行。
$ cat test.json {"title":"Person","type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"age":{"description":"Age in years","type":"integer","minimum":0}},"required":["firstName","lastName"]}
要使用 Python 庫,使用 -m (module) 選項(xiàng)將輸出內(nèi)容和 Python 庫組合成管道。
$ cat test.json | python -m json.tool { "properties": { "age": { "description": "Age in years", "minimum": 0, "type": "integer" }, "firstName": { "type": "string" }, "lastName": { "type": "string" } }, "required": [ "firstName", "lastName" ], "title": "Person", "type": "object"}
對(duì)于更高級(jí)的 JSON 解析,可以安裝 jq。jq 提供了一些從 JSON 輸入中提取特定值的選項(xiàng)。要像上面的 Python 模塊一樣將 JSON 輸出格式化,只需將 jq 應(yīng)用到輸出即可。
$ cat test.json | jq { "title": "Person", "type": "object", "properties": { "firstName": { "type": "string" }, "lastName": { "type": "string" }, "age": { "description": "Age in years", "type": "integer", "minimum": 0 } }, "required": [ "firstName", "lastName" ] }
ls 用于列出目錄中的文件,系統(tǒng)管理員和開發(fā)者會(huì)經(jīng)常使用這個(gè)命令。在容器空間中,這條命令可以幫助確定容器鏡像中的目錄和文件。除了查找文件,ls 還可以用于檢查權(quán)限。下面的示例中,由于權(quán)限問題,你不能運(yùn)行 myapp。當(dāng)你使用 ls -l 檢查權(quán)限時(shí),你會(huì)發(fā)現(xiàn)它的權(quán)限在 -rw-r–r– 中沒有”x”,只有讀寫的權(quán)限。
$ ./myapp bash: ./myapp: Permission denied $ ls -l myapp -rw-r--r--. 1 root root 33 Jul 21 18:36 myapp
tail 顯示文件的最后一部分內(nèi)容。通常情況下,你不需要瀏覽每行日志以進(jìn)行故障排除。而是需要檢查日志中對(duì)應(yīng)用程序的最新請(qǐng)求的說明。例如,當(dāng)你向 Apache HTTP 服務(wù)器發(fā)起請(qǐng)求時(shí),可以使用 tail 來檢查日志中發(fā)生的情況。
使用 tail -f 來跟蹤日志文件并在發(fā)起請(qǐng)求時(shí)查看它們。
-f 選項(xiàng)表示跟隨的意思,它可在日志被寫入文件時(shí)輸出它們。下面的示例具有每隔幾秒訪問端點(diǎn)的后臺(tái)腳本,日志會(huì)記錄請(qǐng)求。除了實(shí)時(shí)跟蹤日志,還可以使用 tail 帶上 -n 選項(xiàng)來查看文件的最后 100 行。
$ tail -n 100 /var/log/httpd/access_log
cat 主要用于查看文件內(nèi)容和合并文件。你可能會(huì)使用 cat 來檢查依賴項(xiàng)文件的內(nèi)容,或確認(rèn)已在本地構(gòu)建的應(yīng)用程序的版本。
$ cat requirements.txt flask flask_pymongo
上面的示例檢查您的 Python Flask 應(yīng)用程序是否已將 Flask 列為依賴項(xiàng)。
grep 能使用特定模式匹配(包括正則表達(dá)式)搜索文本。如果你在另一條命令的輸出中尋找特定的模式,grep 會(huì)高亮顯示相關(guān)的行??墒褂眠@條命令來搜索日志文件以及特定的進(jìn)程等。如果想查看 Apache Tomcat 是否啟動(dòng),你可能會(huì)命令行的數(shù)量給淹沒。但講輸出的內(nèi)容和 grep 命令組合成管道,可以將表示服務(wù)器已啟動(dòng)的行獨(dú)立出來。
$ cat tomcat.log | grep org.apache.catalina.startup.Catalina.start 01-Jul-2017 18:03:47.542 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 681 ms
ps 用于查看進(jìn)程的各種狀態(tài)信息。使用該命令可確定正在運(yùn)行的應(yīng)用程序或確認(rèn)預(yù)期的進(jìn)程。例如,如果要檢查正在運(yùn)行的 Tomcat Web 服務(wù)器,可使用帶有選項(xiàng)的 ps 來獲取 Tomcat 的進(jìn)程 ID。
$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 2 18:55 ? 00:00:02 /docker-java-home/jre/bi root 59 0 0 18:55 pts/0 00:00:00 /bin/sh root 75 59 0 18:57 pts/0 00:00:00 ps -ef
為了更好的易讀性,可使用 grep 和 ps 組合成管道。
$ ps -ef | grep tomcat root 1 0 1 18:55 ? 00:00:02 /docker-java-home/jre/bi
env 用于列出所有環(huán)境變量及為其賦值。在故障排除期間,你可能會(huì)發(fā)現(xiàn)需要檢查是否有錯(cuò)誤的環(huán)境變量來阻止應(yīng)用程序啟動(dòng)。在下面的示例中,該命令用于檢查程序主機(jī)上設(shè)置的環(huán)境變量。
$ env PYTHON_PIP_VERSION=9.0.1 HOME=/root DB_NAME=testPATH=/usr/local/bin:/usr/local/sbin LANG=C.UTF-8 PYTHON_VERSION=3.4.6 PWD=/ DB_URI=mongodb://database:27017/test
請(qǐng)注意,該應(yīng)用程序正在使用 Python 3,并具有連接到 MongoDB 數(shù)據(jù)庫的環(huán)境變量。
top 用于顯示系統(tǒng)中各個(gè)進(jìn)程的信息和資源占用狀況,類似于 Windows 的任務(wù)管理器。使用該命令可確定哪些進(jìn)程正在運(yùn)行,以及它們消耗了多少的內(nèi)存和 CPU。一種常見的情況是當(dāng)你運(yùn)行一個(gè)應(yīng)用程序時(shí),它在一分鐘后掛掉。這時(shí),你首先檢查應(yīng)用程序的返回錯(cuò)誤,發(fā)現(xiàn)是一個(gè)內(nèi)存錯(cuò)誤。
$ tail myapp.log Traceback (most recent call last): MemoryError
你的應(yīng)用是否真的內(nèi)存不足?要確認(rèn)這個(gè)問題,可使用 top 來查看應(yīng)用程序消耗多少 CPU 和內(nèi)存。當(dāng)使用 top 命令后,您注意到一個(gè) Python 應(yīng)用程序使用了大部分的 CPU,其內(nèi)存使用量也迅速攀升。當(dāng)它運(yùn)行時(shí),如果進(jìn)程是你的應(yīng)用程序,則按”C”鍵來查看完整命令并進(jìn)行逆向工程。發(fā)現(xiàn)原來是你的內(nèi)存密集型應(yīng)用程序(memeater.py)。當(dāng)你的應(yīng)用程序已經(jīng)用盡內(nèi)存,系統(tǒng)會(huì)殺掉它并返回一個(gè)內(nèi)存不足(OOM)的錯(cuò)誤。
應(yīng)用程序的內(nèi)存和 CPU 使用量增加,最終因?yàn)閮?nèi)存不足而被殺掉。
通過按下”C”鍵,可以看到啟動(dòng)該應(yīng)用程序的完整命令
除了檢查應(yīng)用程序,還可以使用 top 來調(diào)試其他使用 CPU 或內(nèi)存的進(jìn)程。
netstat 用于顯示網(wǎng)絡(luò)狀態(tài)信息。該命令可顯示正在使用的網(wǎng)絡(luò)端口及其傳入連接。但是,netstat 在 Linux 中不能開箱即用。如果需要安裝它,需要在 net-tools 包中找到它。作為在本地進(jìn)行試驗(yàn)或?qū)?yīng)用程序推送到主機(jī)的開發(fā)者,可能會(huì)收到端口已被分配或地址已被使用的錯(cuò)誤。使用 netstat 得到協(xié)議、進(jìn)程和端口這些信息,下圖表明 Apache HTTP 服務(wù)器已經(jīng)在下面的主機(jī)上使用了 80 端口。
使用 netstat -tulpn 表明 Apache 已經(jīng)在這臺(tái)機(jī)器上使用了 80 端口。
如果 ip address 在你的主機(jī)上不能使用,必須使用 iproute2 包進(jìn)行安裝。i*p address 用于顯示應(yīng)用程序的主機(jī)接口和 IP 地址??墒褂?ip address* 來驗(yàn)證你的容器或主機(jī)的 IP 地址。例如,當(dāng)你的容器連接到兩個(gè)網(wǎng)絡(luò)時(shí),ip address 可顯示哪個(gè)接口連接到了哪個(gè)網(wǎng)絡(luò)。對(duì)于簡單的檢查,可以隨時(shí)使用 ip address 命令獲取主機(jī)的 IP 地址。下面的示例展示了在接口 eth0 上的 Web 層容器的 IP 地址為 172.17.0.2
使用 ip address 顯示 eth0 接口的 IP 地址為 172.17.0.2
lsof 用于列出當(dāng)前系統(tǒng)打開的文件(list open files)。在某些 Linux 系統(tǒng)中,可能需要使用 lsof 包來安裝lsof。在 Linux 中,幾乎任何和系統(tǒng)的交互都被視為一個(gè)文件。因此,如果你的應(yīng)用程序?qū)懭胛募虼_網(wǎng)絡(luò)連接,lsof 將會(huì)把這個(gè)交互映射為一個(gè)文件。與 netstat 類似,可使用 lsof 來檢查偵聽端口。例如,如果要檢查 80 端口是否正在被使用,可使用 lsof 來檢查哪個(gè)進(jìn)程正在使用它。下面的示例中,可以看到 httpd (Apache) 在 80 端口上偵聽。還可以使用 lsof 來檢查 httpd 的進(jìn)程ID,檢查 Web 服務(wù)器的二進(jìn)制文件所在位置(/usr/sbin/httpd)。
Lsof 表明了 httpd 在 80 端口上偵聽。檢查 httpd 的進(jìn)程ID還可以顯示所有需要運(yùn)行的文件httpd。
打開文件列表中的打開文件的名稱有助于確定進(jìn)程的來源,特別是 Apache。
可以使用 df 顯示空閑的磁盤空間(display free disk space)以排查磁盤空間問題。擋在容器管理器上運(yùn)行應(yīng)用程序時(shí),可能會(huì)收到一條錯(cuò)誤信息,提示容器主機(jī)上缺少可用空間。雖然磁盤空間應(yīng)該由系統(tǒng)管理程序來管理和優(yōu)化,你仍可以使用 df 找出目錄中的現(xiàn)有空間并確認(rèn)是否沒有空間。
Df 顯示每個(gè)文件系統(tǒng)的磁盤空間、絕對(duì)空間以及其可用性。
-h 選項(xiàng)表示以可讀性較高的方式來顯示信息,上面的例子表示這個(gè)主機(jī)具有大量的磁盤空間。
du 命令也是用于查看使用空間的,但是與 df 命令不同的是 du 命令是對(duì)文件和目錄磁盤使用的空間的查看,要獲取有關(guān)哪些文件在目錄中使用磁盤空間的更多詳細(xì)信息,可以使用 du 命令,和 df 命令還是有一些區(qū)別的。例如,你想了解那個(gè)日志文件占用 /var/log 目錄最多的空間,可以使用 du 命令加上 -h 選項(xiàng)和用于獲取總大小的 -s 選項(xiàng)。
$ du -sh /var/log/* 1.8M /var/log/anaconda 384K /var/log/audit 4.0K /var/log/boot.log 0 /var/log/chrony 4.0K /var/log/cron 4.0K /var/log/maillog 64K /var/log/messages
上面的示例中顯示了 /var/log 下的的最大目錄為 /var/log/audit。可以將 du 和 df 搭配使用,以確定在應(yīng)用程序的主機(jī)上使用的磁盤空間。
要檢查運(yùn)行應(yīng)用程序的用戶,可使用 id 命令來返回用戶身份。id 命令可以顯示真實(shí)有效的用戶ID(UID)和組ID(GID)。下面的示例使用 Vagrant 來測(cè)試應(yīng)用程序并隔離其開發(fā)環(huán)境。登錄進(jìn) Vagrant 盒子后,如果嘗試安裝 Apache HTTP Server(依賴關(guān)系),系統(tǒng)會(huì)提示你需要以 root 身份執(zhí)行該命令。要檢查你的用戶ID和組ID,使用 id 命令,會(huì)發(fā)現(xiàn)你正在”vagrant”組中以”vagrant”用戶身份運(yùn)行。
$ yum -y install httpd Loaded plugins: fastestmirror You need to be root to perform this command. $ id uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
要解決此問題,必須以超級(jí)用戶的身份運(yùn)行該命令,這將提供提升的權(quán)限。
chmod 命令用來變更文件或目錄的權(quán)限。當(dāng)你在主機(jī)上首次運(yùn)行應(yīng)用程序的二進(jìn)制文件時(shí),可能會(huì)收到錯(cuò)誤提示信息“拒絕訪問”。如 ls 的示例所示,可以用于檢查應(yīng)用程序二進(jìn)制文件的權(quán)限。
$ ls -l total 4 -rw-rw-r--. 1 vagrant vagrant 34 Jul 11 02:17 test.sh
這表明您沒有權(quán)限(沒有“x”)來運(yùn)行二進(jìn)制文件。**c**hmod 可以修改權(quán)限,使的用戶能夠運(yùn)行二進(jìn)制文件。
$ chmod +x test.sh [vagrant@localhost ~]$ ls -l total 4 -rwxrwxr-x. 1 vagrant vagrant 34 Jul 11 02:17 test.sh
如例子所示,這將更新權(quán)限,使其具有可執(zhí)行的權(quán)限。現(xiàn)在當(dāng)你嘗試執(zhí)行二進(jìn)制文件時(shí),應(yīng)用程序不會(huì)拋出拒絕訪問的錯(cuò)誤。當(dāng)將二進(jìn)制文件加載到容器時(shí),Chmod 可能很有用。它能保證容器具有合適的權(quán)限以執(zhí)行二進(jìn)制文件。
dig 命令是常用的域名查詢工具,可以用來測(cè)試域名系統(tǒng)工作是否正常。域名服務(wù)器(DNS)有助于將 URL 解析為一組應(yīng)用程序服務(wù)器。然而,你會(huì)發(fā)現(xiàn)有些 URL 不能被解析,這會(huì)導(dǎo)致應(yīng)用程序的連接問題。例如,假如你嘗試從應(yīng)用程序的主機(jī)訪問你的數(shù)據(jù)庫。你收到一個(gè)”不能解析”的錯(cuò)誤。要進(jìn)行故障排查,你嘗試使用 dig(DNS 查詢工具)或 nslookup(查詢 Internet 域名服務(wù)器)來確定應(yīng)用程序似乎無法解析數(shù)據(jù)的原因。
$ nslookup mydatabase Server: 10.0.2.3 Address: 10.0.2.3#53** server can't find mydatabase: NXDOMAIN
使用 nslookup 顯示無法解析 mydatabase。嘗試使用 dig 解決,但仍是相同的結(jié)果。
$ dig mydatabase ; > DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 > mydatabase ;; global options: +cmd ;; connection timed out; no servers could be reached
這些錯(cuò)誤可能是由許多不同的問題引起的。如果無法調(diào)試出根本原因,與系統(tǒng)管理員聯(lián)系以進(jìn)行更多的調(diào)查。對(duì)于本地測(cè)試,這些問題可能表示你的主機(jī)的域名服務(wù)器未正確配置。要使用這些命令,需要安裝 BIND Utilities 包**。**
iptables 用于阻止或允許 Linux 主機(jī)上的流量,用于 IP 包過濾器管理,類似于網(wǎng)絡(luò)防火墻。此工具可阻止某些應(yīng)用程序接收或發(fā)送請(qǐng)求。更具體地說,如果您的應(yīng)用程序難以訪問另一個(gè)端點(diǎn),可能已被 iptables 拒絕流量訪問該端點(diǎn)。例如,假設(shè)您的應(yīng)用程序的主機(jī)無法訪問 Opensource.com,您使用 curl 來測(cè)試連接。
$ curl -vvv opensource.com * About to connect() to opensource.com port 80 (#0)* Trying 54.204.39.132... * Connection timed out * Failed connect to opensource.com:80; Connection timed out * Closing connection 0 curl: (7) Failed connect to opensource.com:80; Connection timed out
連接超時(shí)。您懷疑某些東西可能會(huì)阻塞流量,因此您使用 -S 選項(xiàng)顯示 iptables 規(guī)則。
$ iptables -S -P INPUT DROP -P FORWARD DROP -P OUTPUT DROP -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -i eth0 -p udp -m udp --sport 53 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT -A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT
前三個(gè)規(guī)則顯示,默認(rèn)情況下流量已被丟棄。剩下的規(guī)則表示允許 SSH 和 DNS 流量。在這種情況下,如果需要允許流量到外部端點(diǎn)的規(guī)則,請(qǐng)跟上 sysadmin。如果這是用于本地開發(fā)或測(cè)試的主機(jī),可使用 iptables 命令來允許合適的流量。添加允許到主機(jī)的流量的規(guī)則時(shí)一定要謹(jǐn)慎。
通常會(huì)在企業(yè)管理的應(yīng)用程序主機(jī)上使用 SELinux(一個(gè) Linux 安全模塊)。SELinux 對(duì)主機(jī)上運(yùn)行的進(jìn)程提供最低權(quán)限的訪問,防止?jié)撛诘膼阂膺M(jìn)程訪問系統(tǒng)上的重要文件。某些情況下,應(yīng)用程序需要訪問特定文件,但可能會(huì)發(fā)生錯(cuò)誤。要檢查 SELinux 是否阻止了應(yīng)用程序,使用 tail 和 grep 在 /var/log/audit 日志記錄中查找”denied”(被拒絕)的信息。否則,使用 sestatus 來檢查是否啟動(dòng)了 SELinux。
$ sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Max kernel policy version: 28
上面的輸出表示應(yīng)用程序的主機(jī)已啟用 SELinux。在本地開發(fā)環(huán)境中,可以更新 SELinux 使得權(quán)限更寬松。
當(dāng)你使用大量的命令進(jìn)行測(cè)試和調(diào)試時(shí),可能會(huì)忘記有用的命令。每個(gè) shell 都有一個(gè) history 命令的變體。它可顯示自會(huì)話開始以來使用的命令的歷史記錄。可以使用 history 來記錄用來排除應(yīng)用程序故障的命令。history 命令用于顯示指定數(shù)目的指令命令,讀取歷史命令文件中的目錄到歷史命令緩沖區(qū)和將歷史命令緩沖區(qū)中的目錄寫入命令文件。
$ history 1 clear 2 df -h 3 du
如果希望執(zhí)行之前歷史記錄中的命令,但又不想重新輸入,該怎么辦?使用符號(hào) ! 即可,可以使用符號(hào) ! 執(zhí)行指定序號(hào)的歷史命令。例如,要執(zhí)行第 2 個(gè)歷史命令,則輸入**!**2,
在需要重新執(zhí)行的命令的指定編號(hào)前添加 ! 即可重新執(zhí)行
感謝各位的閱讀!關(guān)于“Linux系統(tǒng)管理員常用命令有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。