初次登錄 Linux 服務(wù)器馬上要做的 9 件事
當(dāng)我在 Linux 上測試軟件時(這是我工作中的一個常規(guī)部分),我需要使用多臺運行 Linux 的不同架構(gòu)的服務(wù)器。我整備機器,安裝所需的軟件包,運行我的測試,收集結(jié)果,并將機器返回到倉庫中,以便其他人可以使用它進行測試。
由于我經(jīng)常這樣做(甚至一天多次),我初次登錄 Linux 服務(wù)器的前 10 分鐘內(nèi)的工作已經(jīng)成為每天的儀式。當(dāng)我初次登錄 Linux 服務(wù)器時,我會使用命令來收集我需要的信息來尋找某些東西。我將在本文中介紹我的過程,但請注意,在大多數(shù)情況下,我只給出命令名稱,所以你需要確定這些命令的具體選項,以獲得你需要的信息。閱讀命令的手冊頁是一個很好的起點。
1. 第一次接觸
當(dāng)我登錄到一臺服務(wù)器時,我做的第一件事就是檢查它是否擁有我將要運行的測試所需的操作系統(tǒng)、內(nèi)核和硬件架構(gòu)。我經(jīng)常會檢查一臺服務(wù)器已經(jīng)運行了多久。雖然這對測試系統(tǒng)來說并不重要,因為它會被多次重啟,但我還是發(fā)現(xiàn)這些信息很有幫助。
使用下面的命令來獲取這些信息。我主要使用 Red Hat Linux 進行測試,所以如果你使用其他 Linux 發(fā)行版,請在文件名中使用 *-release 而不是 redhat-release:
- cat /etc/redhat-release
- uname -a
- hostnamectl
- uptime
2. 有人登錄在上面嗎?
一旦我知道這臺機器符合我的測試需求,我需要確保沒有其他人同時登錄該系統(tǒng)運行他們自己的測試。雖然考慮到整備系統(tǒng)會幫我處理好這個問題,這種可能性很小,但偶爾檢查一下還是有好處的 —— 尤其是當(dāng)我第一次登錄服務(wù)器的時候。我還會檢查是否有其他用戶(除了 root)可以訪問系統(tǒng)。
使用下面的命令來查找這些信息。最后一條命令是查找 /etc/passwd 文件中具有 shell 訪問權(quán)限的用戶;它會跳過文件中沒有 shell 訪問權(quán)限或 shell 設(shè)置為 nologin 的其他服務(wù):
- who
- who -Hu
- grep sh$ /etc/passwd
3. 物理機還是虛擬機
現(xiàn)在我有了屬于自己的機器,我需要確定它是一臺物理機還是一臺虛擬機(VM)。如果是我自己整備的這臺機器,我可以確定這是我要求的東西。但是,如果你使用的是一臺不是你自己整備的機器,你應(yīng)該檢查該機器是物理機還是虛擬機。
使用以下命令來識別這些信息。如果是物理系統(tǒng),你會看到供應(yīng)商的名稱(如 HP、IBM 等)以及服務(wù)器的品牌和型號;而在虛擬機中,你應(yīng)該看到 KVM、VirtualBox 等,這取決于創(chuàng)建虛擬機時使用了什么虛擬化軟件:
- dmidecode -s system-manufacturer
- dmidecode -s system-product-name
- lshw -c system | grep product | head -1
- cat /sys/class/dmi/id/product_name
- cat /sys/class/dmi/id/sys_vendor
4. 硬件
因為我經(jīng)常測試連接到 Linux 機器的硬件,所以我通常使用物理服務(wù)器,而不是虛擬機。在物理機器上,我的下一步是確定服務(wù)器的硬件能力 —— 例如,運行的是什么類型的 CPU,它有多少個核心,啟用了哪些標(biāo)志,以及有多少內(nèi)存可用于運行測試。如果我正在運行網(wǎng)絡(luò)測試,我會檢查連接到服務(wù)器的以太網(wǎng)或其他網(wǎng)絡(luò)設(shè)備的類型和容量。
使用以下命令來顯示連接到 Linux 服務(wù)器的硬件。其中一些命令在新的操作系統(tǒng)版本中可能會被廢棄,但你仍然可以從 yum 存儲庫中安裝它們或切換到它們的等效新命令:
- lscpu or cat /proc/cpuinfo
- lsmem or cat /proc/meminfo
- ifconfig -a
- ethtool <devname>
- lshw
- lspci
- dmidecode
5. 已安裝的軟件
測試軟件總是需要安裝額外的依賴包、庫等。然而,在安裝任何東西之前,我都會檢查已經(jīng)安裝了什么(包括是什么版本),以及配置了哪些存儲庫,這樣我就知道軟件來自哪里,并可以調(diào)試任何軟件包安裝問題。
使用下面的命令來確定安裝了什么軟件:
- rpm -qa
- rpm -qa | grep <pkgname>
- rpm -qi <pkgname>
- yum repolist
- yum repoinfo
- yum install <pkgname>
- ls -l /etc/yum.repos.d/
6. 運行的進程和服務(wù)
檢查了安裝的軟件之后,自然就會檢查系統(tǒng)上有哪些進程在運行。當(dāng)在系統(tǒng)上運行性能測試時,這一點至關(guān)重要 —— 如果一個正在運行的進程、守護進程、測試軟件等占用了大部分 CPU/RAM,那么在運行測試之前停止該進程是有意義的。這也可以檢查測試所需的進程或守護進程是否已經(jīng)啟動并運行。例如,如果測試需要 httpd 運行,那么即使安裝了軟件包,啟動守護進程的服務(wù)也可能沒有運行。
使用以下命令來識別系統(tǒng)上正在運行的進程和已啟用的服務(wù):
- pstree -pa 1
- ps -ef
- ps auxf
- systemctl
7. 網(wǎng)絡(luò)連接
如今的機器網(wǎng)絡(luò)化程度很高,它們需要與網(wǎng)絡(luò)上的其他機器或服務(wù)進行通信。我會識別服務(wù)器上哪些端口是開放的,是否有到測試機器的任何網(wǎng)絡(luò)連接,是否啟用了防火墻,如果啟用了,是否屏蔽了任何端口,以及機器與哪些 DNS 服務(wù)器對話。
使用以下命令來識別網(wǎng)絡(luò)服務(wù)相關(guān)信息。如果一個過時的命令不可用,請從 yum 存儲庫中安裝它或使用等效的新命令:
- netstat -tulpn
- netstat -anp
- lsof -i
- ss
- iptables -L -n
- cat /etc/resolv.conf
8. 內(nèi)核
在進行系統(tǒng)測試時,我發(fā)現(xiàn)了解內(nèi)核相關(guān)的信息是很有幫助的,比如內(nèi)核版本和加載了哪些內(nèi)核模塊。我還會列出任何 可調(diào)整的內(nèi)核參數(shù) 以及它們的設(shè)置,并檢查啟動運行中的內(nèi)核時使用的選項。
使用以下命令來識別這些信息:
- uname -r
- cat /proc/cmdline
- lsmod
- modinfo <module>
- sysctl -a
- cat /boot/grub2/grub.cfg
9. 日志
現(xiàn)在,我已經(jīng)對服務(wù)器有了很好的了解,包括安裝了哪些軟件,運行了哪些進程。還有一件事我無法逃避,那就是日志文件 —— 我需要知道在哪里可以查看不斷更新的信息。
使用以下命令查看系統(tǒng)的日志:
- dmesg
- tail -f /var/log/messages
- journalctl
接下來的步驟
雖然命令和實用程序會發(fā)生變化,但它們所顯示的基本信息大致不變。在你專注于掌握哪些命令之前,你需要對你要尋找的信息以及它屬于什么類別有一個宏觀的看法。
由于 Linux 將大部分信息保存在文件中,這些命令基本上是從文件中讀取信息,并以一種易于理解的方式呈現(xiàn)出來。下一步的好做法是找出每個命令用來獲取信息顯示的文件。一個提示:尋找這些信息的方法是 strace 命令。