1. 程式人生 > >系統管理員應該知道的 20 條 Linux 命令

系統管理員應該知道的 20 條 Linux 命令

203755_92u8_2918182

在這個全新的工具和多樣化的開發環境井噴的大環境下,任何開發者和工程師都有必要學習一些基本的系統管理命令。特定的命令和工具包可幫助開發者組織、排查故障並優化他們的應用程式,而且當出現錯誤時,也可以為運維人員和系統管理員提供有價值的分類資訊。

無論你是新手開發者還是希望管理自己的應用程式,下面 20 條基本的系統管理命令都可以幫助您更好地瞭解您的應用程式。它們還可以幫助解決為什麼應用程式可在本地正常工作但不能在遠端主機上工作這類的系統故障。這些命令適用於 Linux 開發環境、容器和虛擬機器。

1. curl

curl 用於傳輸一個 URL。可以使用這條命令用於測試應用程式的端點或與上游服務端點的連線。curl 還可用於檢查你的應用程式是否能連線到其他服務,例如資料庫,或檢查您的服務是否處於健康的狀態。

舉個例子,假如你的應用程式丟擲一個 HTTP 500 錯誤,表示無法訪問 MongoDB 資料庫:

123 $curl-I-smyapplication:5000HTTP/1.0500INTERNAL SERVER ERROR

-I 選項用於顯示頭資訊,-s 選項表示使用靜默模式,不顯示錯誤和進度。檢查資料庫的端點是否正確:

123 $curl-I-sdatabase:27017HTTP/1.0200OK

那麼可能是什麼問題呢? 檢查您的應用程式是否可以訪問資料庫以外的其他位置:

123 $curl-I-shttps://opensource.comHTTP/1.1200OK

看起來這沒問題,現在嘗試訪問資料庫。您的應用程式正在使用資料庫的主機名,因此請先嚐試:

123 $curl database:27017curl:(6)Couldn't resolve host 'database'

這表示您的應用程式無法解析資料庫,因為資料庫的 URL 不可用或主機(容器或VM)沒有可用於解析主機名的域名伺服器。

2. python -m json.tool / jq

使用 curl 後,API 呼叫的輸出可讀性可能較差。有時候,你希望將生成的 JSON 資料格式化輸出以查詢特定的條目。Python 有一個內建的庫可幫助您實現這個需求。可以使用 python -m json.tool 來縮排和組織 JSON。要使用 Python 的 JSON 模組,需要使用管道機制,將 JSON 檔案的輸出作為輸入,寫入到 python -m json.tool 命令列。

12 $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) 選項將輸出內容和 Python 庫組合成管道。

12345678910111213141516171819202122 $cat test.json|python-mjson.tool{"properties":{"age":{"description":"Age in years","minimum":0,"type":"integer"},"firstName":{"type":"string"},"lastName":{"type":"string"}},"required":["firstName","lastName"],"title":"Person","type":"object"}

對於更高階的 JSON 解析,可以安裝 jq。j提供了一些從 JSON 輸入中提取特定值的選項。要像上面的 Python 模組一樣將 JSON 輸出格式化,只需將 jq 應用到輸出即可。

12345678910111213141516171819202122 $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"]}

3. ls

ls 用於列出目錄中的檔案,系統管理員和開發者會經常使用這個命令。在容器空間中,這條命令可以幫助確定容器映象中的目錄和檔案。除了查詢檔案,ls 還可以用於檢查許可權。下面的示例中,由於許可權問題,你不能執行 myapp。當你使用 ls -l 檢查許可權時,你會發現它的許可權在 -rw-r–r– 中沒有”x”,只有讀寫的許可權。

1234 $./myappbash:./myapp:Permission denied$ls-lmyapp-rw-r--r--.1root root33Jul2118:36myapp

4. tail

tail 顯示檔案的最後一部分內容。通常情況下,你不需要瀏覽每行日誌以進行故障排除。而是需要檢查日誌中對應用程式的最新請求的說明。例如,當你向 Apache HTTP 伺服器發起請求時,可以使用 tail 來檢查日誌中發生的情況。

205506_GAYc_2918182

使用 tail -f 來跟蹤日誌檔案並在發起請求時檢視它們。

-f 選項表示跟隨的意思,它可在日誌被寫入檔案時輸出它們。下面的示例具有每隔幾秒訪問端點的後臺指令碼,日誌會記錄請求。除了實時跟蹤日誌,還可以使用 tail 帶上 -n 選項來檢視檔案的最後 100 行。

1 $tail-n100/var/log/httpd/access_log

5. cat

cat 主要用於檢視檔案內容和合並檔案。你可能會使用 cat 來檢查依賴項檔案的內容,或確認已在本地構建的應用程式的版本。

123 $cat requirements.txtflaskflask_pymongo

上面的示例檢查您的 Python Flask 應用程式是否已將 Flask 列為依賴項。

6. grep

grep 能使用特定模式匹配(包括正則表示式)搜尋文字。如果你在另一條命令的輸出中尋找特定的模式,grep 會高亮顯示相關的行。可使用這條命令來搜尋日誌檔案以及特定的程序等。如果想檢視 Apache Tomcat 是否啟動,你可能會命令列的數量給淹沒。但講輸出的內容和 grep 命令組合成管道,可以將表示伺服器已啟動的行獨立出來。

12 $cat tomcat.log|grep org.apache.catalina.startup.Catalina.start01-Jul-201718:03:47.542INFO[main]org.apache.catalina.startup.Catalina.start Server startup in681ms

7. ps

ps 用於檢視程序的各種狀態資訊。使用該命令可確定正在執行的應用程式或確認預期的程序。例如,如果要檢查正在執行的 Tomcat Web 伺服器,可使用帶有選項的 ps 來獲取 Tomcat 的程序 ID。

12345 $ps-efUID        PID  PPIDCSTIME TTY          TIME CMDroot10218:55?00:00:02/docker-java-home/jre/biroot590018:55pts/000:00:00/bin/shroot7559018:57pts/000:00:00ps-ef

為了更好的易讀性,可使用 grep ps 組合成管道。

12 $ps-ef|grep tomcatroot10118:55?00:00:02/docker-java-home/jre/bi

8. env

env 用於列出所有環境變數及為其賦值。在故障排除期間,你可能會發現需要檢查是否有錯誤的環境變數來阻止應用程式啟動。在下面的示例中,該命令用於檢查程式主機上設定的環境變數。

123456789 $envPYTHON_PIP_VERSION=9.0.1HOME=/rootDB_NAME=testPATH=/usr/local/bin:/usr/local/sbinLANG=C.UTF-8PYTHON_VERSION=3.4.6PWD=/DB_URI=mongodb://database:27017/test

請注意,該應用程式正在使用 Python 3,並具有連線到 MongoDB 資料庫的環境變數。

9. top

top 用於顯示系統中各個程序的資訊和資源佔用狀況,類似於 Windows 的工作管理員。使用該命令可確定哪些程序正在執行,以及它們消耗了多少的記憶體和 CPU。一種常見的情況是當你執行一個應用程式時,它在一分鐘後掛掉。這時,你首先檢查應用程式的返回錯誤,發現是一個記憶體錯誤。

123 $tail myapp.logTraceback(most recent call last):MemoryError

你的應用是否真的記憶體不足?要確認這個問題,可使用 top 來檢視應用程式消耗多少 CPU 和記憶體。當使用 top 命令後,您注意到一個 Python 應用程式使用了大部分的 CPU,其記憶體使用量也迅速攀升。當它執行時,如果程序是你的應用程式,則按”C”鍵來檢視完整命令並進行逆向工程。發現原來是你的記憶體密集型應用程式(memeater.py)。當你的應用程式已經用盡記憶體,系統會殺掉它並返回一個記憶體不足(OOM)的錯誤。

205506_GAYc_2918182

應用程式的記憶體和 CPU 使用量增加,最終因為記憶體不足而被殺掉。

205506_GAYc_2918182

通過按下”C”鍵,可以看到啟動該應用程式的完整命令

除了檢查應用程式,還可以使用 top 來除錯其他使用 CPU 或記憶體的程序。

10. netstat

netstat 用於顯示網路狀態資訊。該命令可顯示正在使用的網路埠及其傳入連線。但是,netstat 在 Linux 中不能開箱即用。如果需要安裝它,需要在 包中找到它。作為在本地進行試驗或將應用程式推送到主機的開發者,可能會收到埠已被分配或地址已被使用的錯誤。使用 netstat 得到協議、程序和埠這些資訊,下圖表明 Apache HTTP 伺服器已經在下面的主機上使用了 80 埠。

205506_GAYc_2918182

使用 netstat -tulpn 表明 Apache 已經在這臺機器上使用了 80 埠。

11. ip address

如果 ip address 在你的主機上不能使用,必須使用 包進行安裝。ip address 用於顯示應用程式的主機介面和 IP 地址。可使用 ip address 來驗證你的容器或主機的 IP 地址。例如,當你的容器連線到兩個網路時,ip address 可顯示哪個介面連線到了哪個網路。對於簡單的檢查,可以隨時使用 ip address 命令獲取主機的 IP 地址。下面的示例展示了在介面 eth0 上的 Web 層容器的 IP 地址為 172.17.0.2

205506_GAYc_2918182

使用 ip address 顯示 eth0 介面的 IP 地址為 172.17.0.2

12. lsof

lsof 用於列出當前系統開啟的檔案(list open files)。在某些 Linux 系統中,可能需要使用 lsof 包來安裝lsof。在 Linux 中,幾乎任何和系統的互動都被視為一個檔案。因此,如果你的應用程式寫入檔案或代開網路連線,lsof 將會把這個互動對映為一個檔案。與 netstat 類似,可使用 lsof 來檢查偵聽埠。例如,如果要檢查 80 埠是否正在被使用,可使用 lsof 來檢查哪個程序正在使用它。下面的示例中,可以看到 httpd (Apache) 在 80 埠上偵聽。還可以使用 lsof 來檢查 httpd 的程序ID,檢查 Web 伺服器的二進位制檔案所在位置(/usr/sbin/httpd)。

205506_GAYc_2918182

Lsof 表明了 httpd 在 80 埠上偵聽。檢查 httpd 的程序ID還可以顯示所有需要執行的檔案httpd。

開啟檔案列表中的開啟檔案的名稱有助於確定程序的來源,特別是 Apache。

13. df

可以使用 df 顯示空閒的磁碟空間(display free disk space)以排查磁碟空間問題。擋在容器管理器上執行應用程式時,可能會收到一條錯誤資訊,提示容器主機上缺少可用空間。雖然磁碟空間應該由系統管理程式來管理和優化,你仍可以使用 df 找出目錄中的現有空間並確認是否沒有空間。

205506_GAYc_2918182

Df 顯示每個檔案系統的磁碟空間、絕對空間以及其可用性。

-h 選項表示以可讀性較高的方式來顯示資訊,上面的例子表示這個主機具有大量的磁碟空間。

14. du

du 命令也是用於檢視使用空間的,但是與 df 命令不同的是 du 命令是對檔案和目錄磁碟使用的空間的檢視,要獲取有關哪些檔案在目錄中使用磁碟空間的更多詳細資訊,可以使用 du 命令,和 df 命令還是有一些區別的。例如,你想了解那個日誌檔案佔用 /var/log 目錄最多的空間,可以使用 du 命令加上 -h 選項和用於獲取總大小的 -s 選項。

12345678 $du-sh/var/log/*1.8M/var/log/anaconda384K/var/log/audit

相關推薦

系統管理員應該知道20 Linux 命令

在這個全新的工具和多樣化的開發環境井噴的大環境下,任何開發者和工程師都有必要學習一些基本的系統管理命令。特定的命令和工具包可幫助開發者組織、排查故障並優化他們的應用程式,而且當出現錯誤時,也可以為運維人員和系統管理員提供有價值的分類資訊。 無論你是新手開發者還是希

檢視Linux系統架構型別的5常用命令

轉載地址:http://www.cnblogs.com/linuxprobe/p/5643668.html 導讀很多時候我們都需要檢視當前 Linux 系統是 32 位還是 64 位系統架構型別,本文中我將向大家推薦 5 條常用命令。無論你使用的是桌面版或是隻裝了文字介面的

新手指南: Linux 新手應該知道的 26 個命令

當你進入了 Linux 的世界,在下載、安裝 了某個 Linux 發行版,體驗了 Linux 桌面並安裝了一些你喜愛和需要的軟體之後,應該去了解下 Linux 真正的魅力所在:命令列。每一個 Linux 命令其實就是一個程式,藉助這些命令,我們可以辦到非常多的事情。下面將會為大家介紹一下幾個常

python學習- 打印最常用的10linux命令和查找目錄下重復的文件

python一、打印最常用的10條linux命令#!/usr/bin/python #coding=utf-8 import os from collections import Counter c = Counter() with open(os.path.expanduser('~/.bash_h

20Linux命令對服務器磁盤進行監控

.org image 磁盤性能測試 per 什麽 php 遇到 對數 org 監控Linux 服務器磁盤 服務器磁盤性能測試也是一個比較有意思的過程。首先我們要弄清楚磁盤儲存哪些內容,這裏推薦鳥哥的私房菜 我們不僅要推算出磁盤什麽時候被占滿,也要監控磁盤的讀寫速度。也就是我

懶人的python——一次執行多linux命令

今天在公司搞了半天EE2I,一直在敲相同的命令累死了。每次執行ee2i.sh temp命令後,都要到cd到某個目錄下執行下一個shell指令碼。做完一次後又要刪除臨時檔案。總之,重複工作很多,我的指甲都敲累了。所以晚上回到家就寫了個類似的python指令碼來自動化執行這些討厭

從新手到系統管理員(四):Linux Shell指令碼程式設計之數學(Part I)

本文由 [茶話匯] – [Qing] 編譯自 [Avishek Kumar] 轉載請註明出處 這部分主要討論數學相關的shell指令碼程式設計。 加法運算 新建一個檔案“Addition.sh”,輸入下面的內容並賦予其可執行的許可權。 [code language=”bash”] #!/bin/b

從新手到系統管理員(二):Linux新手學習Shell指令碼程式設計的五個例子

本文由 [茶話匯] – [Qing] 編譯自 [Avishek Kumar] 轉載請註明出處 例子一:繪製特殊圖形 [code language=”bash”] #!/bin/bash MAX_NO=0 echo -n "Enter Number between (5 to 9) : " re

看完這篇,你應該知道什麼是Linux了~

Linux上的檔案系統一般來說就是EXT2或EXT3,但這篇文章並不準備一上來就直接講它們,而希望結合Linux作業系統並從檔案系統建立的基礎——硬碟開始,一步步認識Linux的檔案系統。 1.機械硬碟的物理儲存機制 現代計算機大部分檔案儲存功能都是由機械硬碟這種裝置

測試人員常用的20Linux命令(附Linux視訊教程)

這幾天一直看到有粉絲向我要Linux的學習教程,這不今天就給大家找到了。需要的同學看文末獲取方式哦。 熟練的掌握和使用下面這些命令會提高大家測試工作的效率。 1. 命令: Find 搜尋指定目錄下的檔案,從開始於父目錄,然後搜尋子目錄。 注意: -name‘選

java開發需要知道的一些linux命令

java開發工程師,雖然在日常開發中與linux打交道的是運維工程師,但是作為開發人員,我們或多或少也會接觸一些, 特別是在一些小型創業公司,運維和開發並不是分的很獨立,我們開發人員或許同時擔任著運

每天一linux命令 學習-- cd和pwd命令

今天學的cd命令 其實不用學 語法和DOS基本一樣,引數方面 .表示當前目錄,../表示上級目錄 ~表示當前使用者根目錄,/表示系統根目錄 學了一個新引數 !$ 表示用上一條命令的引數作為cd的引數 例如:你上條執行的是pwd 那麼再執行cd !$ ,就等於執行了cd pw

你有一linux命令學習之解壓縮.tar .gz .xz .bz .zip

下載的包解壓還是壓縮本地的包,都要用到解壓縮命令。 1 .tar tar命令生成的壓縮包 1). 命令語法 tar [-xcfvzjJ] pathname.tar file 2).引數 -c

嵌入式開發應該掌握的一些Linux命令

dd  1.作用  dd命令用來複制檔案,並根據引數將資料轉換和格式化。  2.格式  dd [options]  3.[opitions]主要引數  bs=位元組:強迫 ibs=<位元組>;及obs=<位元組>;。  cbs=位元組:每次轉換指定的<位元組>

每天一linux命令---chgrp命令

change group 就是改變檔案或者資料夾所屬的群組 ll 命令顯示一下 跟在所有者後面的選項就是群組 具體有哪些群組 要看/etc/group 檔案: mysql:x:499---> mysql就是群組名 499就是群組代號 例如: 將test資料夾的所

震驚,當我運行了這Linux命令後,伺服器竟然... (Linux中的刪除命令

## 震驚,當我運行了這條Linux命令後,伺服器竟然... ### 0X00 寫在前面 大家都聽說過刪庫命令`rm -rf /*`,但是誰又真正實踐過呢?但作為一個程式設計師,不看看這條命令執行後會發生什麼,怎麼能甘心呢。今天就帶大家看看,伺服器運行了這條命令是什麼樣子。 (注意請勿隨意模仿!如果真的

Linux系統命令&術語之縮寫與全稱,你知道

Linux系統的命令和常用術語,相信大家已經是按照慣性思維在使用了,而且大家也都知道這些命令和術語幾乎都是以簡短的縮寫來呈現,其原因是什麼呢?這些縮寫的全稱及其含義是什麼呢?下面就給大家介紹下: 作業系統的構建有針對圖形化介面和命令列這兩類,前者的代表是Windows,使用滑鼠作為主輸入裝置,所以是

怎樣用linux命令知道系統是ubuntu還是redhat或者其它的系統

smp ldo gcc rip 適用於 fin 信息 etc centos 版本 1、第一種方法:# lsb_release -aLSB Version: :core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphic

系統管理員常用的Linux命令

網址 pan pytho agent hang 保存 時間 eth0 服務 整理Linux的一些基本系統管理命令作為備忘 =========================================================================

Linux系統管理員準備的Nmap命令的29個實用範例

server secure -s ttr eth have 主機 lighttpd 啟用 map即網絡映射器對Linux系統/網絡管理員來說是一個開源且非常通用的工具。Nmap用於在遠程機器上探測網絡,執行安全掃描,網絡審計和搜尋開放端口。它會掃描遠程在線主機,該主機的操作