監(jiān)控運維命令詳解
需要關注持續(xù)更新的朋友可以關注下面的鏈接:
[運維相關合集地址](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI5MjY4OTQ2Nw==&action=getalbum&album_id=2961710361051660289&scene=173&from_msgid=2247484158&from_itemidx=1&count=3&nolastread=1#wechat_redirect)
# 監(jiān)控類命令
## watch命令
`watch`命令是一個用于在命令行界面下執(zhí)行指定命令或腳本,并周期性地顯示其輸出結(jié)果的實用程序。它可以幫助你監(jiān)視命令的實時輸出,以便持續(xù)跟蹤命令的執(zhí)行情況。
`watch`命令的常見語法如下:
```shell
watch [選項] 命令
```
其支持的選項如下:
+ `-n`:指定刷新間隔,即執(zhí)行命令的時間間隔。例如,`watch -n 5`表示每隔5秒執(zhí)行一次命令,默認值為2秒。
+ `-d`:高亮顯示輸出結(jié)果中發(fā)生變化的部分。這可以幫助你快速注意到輸出結(jié)果的變化。
+ `-t`:在輸出結(jié)果的頂部顯示當前時間。
+ `-c`:清除屏幕上的輸出結(jié)果,每次刷新時都會清除屏幕并顯示最新的輸出。
+ `-b`:以批處理模式運行`watch`命令,即不接受輸入并將其輸出寫入文件。這在將`watch`命令與其他命令或腳本結(jié)合使用時很有用。
+ `--color`:強制顯示輸出結(jié)果的顏色。這對于支持顏色的命令或腳本很有用。
通過使用`watch`命令,你可以方便地監(jiān)視系統(tǒng)狀態(tài)、實時查看日志文件的變化、觀察進程的運行情況等。它在調(diào)試和監(jiān)控系統(tǒng)時非常有用,以及在需要持續(xù)追蹤某些命令輸出的情況下使用。
### 后面跟雙引號
如果連接的命令比較長,可以使用雙引號括起來的方式
例如:
```shell
watch -n 5 -d "ps -aux | grep java"
```
## ps命令
`ps`命令是一個用于查看當前正在運行的進程信息的實用程序。它提供了多種用法和選項,以下是一些常見的用法:
1. 顯示當前用戶的所有進程:
? ?```
? ?ps
? ?```
2. 顯示所有進程的詳細信息:
? ?```
? ?ps -ef
? ?```
3. 顯示當前用戶的所有進程及其層次結(jié)構(gòu)(樹狀顯示):
? ?```
? ?ps -ef --forest
? ?```
4. 以樹狀結(jié)構(gòu)顯示指定進程及其子進程:
? ?```
? ?ps -f --forest -p <PID>
? ?```
5. 顯示所有進程的信息,包括進程的狀態(tài)、占用的CPU和內(nèi)存等:
? ?```
? ?ps aux
? ?```
6. 僅顯示當前用戶的進程,并以用戶為單位進行分組:
? ?```
? ?ps ux
? ?```
7. 以持續(xù)更新的方式顯示進程信息:
? ?```
? ?ps -ef --forest --forest
? ?```
8. 查找指定進程名的進程:
? ?```
? ?ps -ef | grep <進程名>
? ?```
9. 查看指定用戶的進程:
? ?```
? ?ps -u <用戶名>
? ?```
## pstree命令
`pstree`命令是一個用于以樹狀結(jié)構(gòu)顯示進程層次關系的實用程序。它以可讀性較好的方式顯示進程之間的父子關系,幫助用戶更好地理解和分析系統(tǒng)中的進程結(jié)構(gòu)。
`pstree`命令通常在Linux和Unix系統(tǒng)中預裝,無需額外安裝。你可以直接在終端中使用該命令。下面是使用`pstree`命令的基本語法:
```shell
pstree [選項]
```
一般情況下,你可以直接運行`pstree`命令來顯示當前用戶的所有進程及其層次關系。它會以樹狀結(jié)構(gòu)的形式輸出進程層次,并標示進程之間的父子關系。
`pstree`命令還提供一些選項來定制其行為,例如:
- `-p`:顯示進程的PID(進程ID)。
- `-u`:顯示進程的所有者。
- `-h`:高亮顯示當前進程及其祖先進程。
- `-a`:顯示進程的命令行參數(shù)。
你可以組合使用這些選項來滿足你的需求,例如:`pstree -p -h`會顯示進程的PID,并以高亮方式突出顯示當前進程及其祖先進程。
需要注意的是,`pstree`命令可能需要以超級用戶(root)權(quán)限運行,以顯示所有進程的完整層次結(jié)構(gòu)。你可以使用`sudo pstree`命令來獲取完整的進程層次信息。
## free 命令
`free`命令用于顯示系統(tǒng)的內(nèi)存使用情況和交換空間(swap)情況。下面是`free`命令的詳細用法:
```
free [選項]
```
常用的選項包括:
- `-h`:以人類可讀的方式顯示內(nèi)存大小,使用K、M、G等單位。
- `-b`:以字節(jié)(Bytes)為單位顯示內(nèi)存大小。
- `-k`:以千字節(jié)(Kilobytes)為單位顯示內(nèi)存大?。J選項)。
- `-m`:以兆字節(jié)(Megabytes)為單位顯示內(nèi)存大小。
- `-g`:以吉字節(jié)(Gigabytes)為單位顯示內(nèi)存大小。
- `-s <間隔秒數(shù)>`:連續(xù)顯示內(nèi)存使用情況,并指定刷新間隔。
- `-c <次數(shù)>`:指定連續(xù)顯示內(nèi)存使用情況的次數(shù)。
以下是一些常用的示例:
1. 顯示內(nèi)存和交換空間的使用情況:
? ?```
? ?free
? ?```
2. 以人類可讀的方式顯示內(nèi)存和交換空間的使用情況:
? ?```
? ?free -h
? ?```
3. 每隔5秒連續(xù)顯示內(nèi)存和交換空間的使用情況:
? ?```
? ?free -s 5
? ?```
4. 顯示內(nèi)存和交換空間的詳細信息,包括內(nèi)存總量、已用內(nèi)存、空閑內(nèi)存等:
? ?```
? ?free -b
? ?```
`free`命令的輸出結(jié)果包括以下字段:
- `total`:總內(nèi)存量。
- `used`:已使用的內(nèi)存量。
- `free`:可用的內(nèi)存量。
- `shared`:被共享的內(nèi)存量。
- `buffers`:被緩沖的內(nèi)存量。
- `cached`:被緩存的內(nèi)存量。
- `Swap`:交換空間的總量、已使用量和空閑量。
這些字段描述了系統(tǒng)內(nèi)存的不同方面和用途。以下是這些字段之間的關系:
- `total`:表示系統(tǒng)中的總內(nèi)存量,包括物理內(nèi)存和交換空間。
- `used`:表示已被系統(tǒng)和進程使用的內(nèi)存量,包括正在使用的物理內(nèi)存和交換空間。
- `free`:表示當前未被使用的內(nèi)存量,包括未被系統(tǒng)和進程使用的物理內(nèi)存和交換空間。
- `shared`:表示被多個進程共享的內(nèi)存量。這包括通過共享內(nèi)存機制分配的內(nèi)存,例如共享庫、共享內(nèi)存段等。
- `buffers`:表示被內(nèi)核用于緩沖數(shù)據(jù)的內(nèi)存量。這些緩沖區(qū)用于加速磁盤讀寫操作,以提高系統(tǒng)性能。
- `cached`:表示被內(nèi)核緩存的文件數(shù)據(jù)的內(nèi)存量。當文件被讀取時,內(nèi)核會將數(shù)據(jù)緩存到內(nèi)存中,以便更快地響應后續(xù)讀取請求。
- `Swap`:表示交換空間的相關信息,包括總交換空間量、已使用的交換空間量和可用的交換空間量。交換空間用于在物理內(nèi)存不足時暫時存儲和交換出不常用的內(nèi)存頁。
總體上,`used` 包括了 `shared`、`buffers`、`cached` 和實際被進程使用的內(nèi)存。而 `free` 則表示未被系統(tǒng)和進程使用的內(nèi)存,包括未被緩沖和緩存的空閑內(nèi)存。
需要注意的是,這些值是基于當前時刻的快照,內(nèi)存使用情況是動態(tài)變化的,因此在不同時間查詢時,這些值可能會有所不同。
## df命令、du命令和fdisk命令
這三個命令都是查看硬盤使用情況的命令
### df命令
`df`命令用于顯示文件系統(tǒng)的磁盤空間使用情況。它提供了多種選項,用于定制輸出的格式和內(nèi)容。以下是一些常用的選項:
- `-h`:以人類可讀的方式顯示磁盤空間大小,使用K、M、G等單位。
- `-k`:以千字節(jié)(Kilobytes)為單位顯示磁盤空間大小。
- `-m`:以兆字節(jié)(Megabytes)為單位顯示磁盤空間大小。
- `-g`:以吉字節(jié)(Gigabytes)為單位顯示磁盤空間大小。
- `-i`:顯示inode的使用情況(文件系統(tǒng)索引節(jié)點)。
- `-T`:顯示文件系統(tǒng)的類型。
- `-t <文件系統(tǒng)類型>`:只顯示指定類型的文件系統(tǒng)。
- `-x <文件系統(tǒng)類型>`:排除指定類型的文件系統(tǒng)。
- `--total`:在最后一行顯示總計的磁盤使用情況。
- `--exclude-type <文件系統(tǒng)類型>`:排除指定類型的文件系統(tǒng)。
- `--help`:顯示`df`命令的幫助信息。
可以使用這些選項的組合來滿足特定的需求。例如:
- 顯示人類可讀的磁盤空間使用情況,并排除特定類型的文件系統(tǒng):
? ```
? df -h -x <文件系統(tǒng)類型>
? ```
- 顯示inode的使用情況,并在最后一行顯示總計的磁盤使用情況:
? ```
? df -i --total
? ```
請注意,`<文件系統(tǒng)類型>`是指文件系統(tǒng)的標識,如ext4、ntfs、vfat等。你可以通過`df --help`命令獲取完整的選項列表和用法說明。
### du命令
`du`命令用于顯示目錄或文件的磁盤空間使用情況。它可以幫助你確定文件和目錄所占用的磁盤空間大小。以下是一些常用的`du`命令選項:
- `-h`:以人類可讀的方式顯示磁盤空間大小,使用K、M、G等單位。
- `-k`:以千字節(jié)(Kilobytes)為單位顯示磁盤空間大?。J選項)。
- `-m`:以兆字節(jié)(Megabytes)為單位顯示磁盤空間大小。
- `-g`:以吉字節(jié)(Gigabytes)為單位顯示磁盤空間大小。
- `-s`:只顯示總計的磁盤空間使用情況,而不顯示每個文件和目錄的詳細信息。
- `-c`:在最后一行顯示總計的磁盤空間使用情況。
- `-a`:顯示所有文件和目錄的磁盤空間使用情況,而不僅限于目錄的總計。
- `--exclude=<模式>`:排除符合指定模式的文件或目錄。
- `--max-depth=<層級>`:限制顯示的層級深度。
你可以使用這些選項的組合來滿足不同的需求。以下是一些示例:
- 顯示目錄或文件的磁盤空間使用情況,并以人類可讀的方式顯示大小:
? ```
? du -h <目錄或文件>
? ```
- 只顯示目錄的總計磁盤空間使用情況:
? ```
? du -sh <目錄>
? ```
- 顯示所有文件和目錄的磁盤空間使用情況,包括子目錄的詳細信息:
? ```
? du -a <目錄>
? ```
- 顯示指定層級深度的磁盤空間使用情況:
? ```
? du --max-depth=2 <目錄>
? ```
請注意,`<目錄或文件>`是指要查看磁盤空間使用情況的目錄路徑或文件路徑。你可以通過`du --help`命令獲取完整的選項列表和用法說明。
### fdisk命令
`fdisk`命令是一個用于查看和管理磁盤分區(qū)的命令行工具。它可以幫助你查看磁盤的分區(qū)信息、創(chuàng)建新的分區(qū)、刪除分區(qū)等。以下是一些常用的 `fdisk` 命令選項:
- `-l`:列出系統(tǒng)中的所有磁盤和分區(qū)的信息。
? ```
? fdisk -l
? ```
- `/dev/<磁盤設備名>`:指定要操作的磁盤設備,例如 `/dev/sda`。
? ```
? fdisk /dev/sda
? ```
- `n`:創(chuàng)建一個新的分區(qū)。
- `d`:刪除一個分區(qū)。
- `p`:顯示分區(qū)表的信息。
- `w`:將所做的更改寫入磁盤并退出 `fdisk`。
- `q`:不保存更改并退出 `fdisk`。
請注意,使用 `fdisk` 命令進行分區(qū)操作需要以超級用戶(root)權(quán)限運行。此外,對磁盤進行分區(qū)操作是一個潛在的危險操作,請確保在進行分區(qū)操作之前備份重要的數(shù)據(jù)。
以下是一個簡單的分區(qū)操作示例:
1. 列出系統(tǒng)中的所有磁盤和分區(qū)信息:
? ?```
? ?fdisk -l
? ?```
2. 選擇要操作的磁盤設備,例如 `/dev/sda`:
? ?```
? ?fdisk /dev/sda
? ?```
3. 在 `fdisk` 的交互式界面中,使用命令 `n` 創(chuàng)建一個新的分區(qū),然后按照提示進行分區(qū)類型、起始位置和大小的設置。
4. 使用命令 `p` 顯示分區(qū)表信息,確認分區(qū)已創(chuàng)建。
5. 使用命令 `w` 將更改寫入磁盤并退出 `fdisk`。
## 查看cpu情況
### top命令
>Tasks: 292 total,? ?1 running, 291 sleeping,? ?0 stopped,? ?0 zombie
%Cpu(s):? 0.7 us,? 0.8 sy,? 0.0 ni, 98.5 id,? 0.0 wa,? 0.0 hi,? 0.0 si,? 0.0 st
MiB Mem :? 31662.0 total,? ?4555.1 free,? 26599.6 used,? ? 507.3 buff/cache
MiB Swap:? ? 975.0 total,? ? 113.4 free,? ? 861.6 used.? ?4554.9 avail Mem?
? ? PID USER? ? ? PR? NI? ? VIRT? ? RES? ? SHR S? %CPU? %MEM? ? ?TIME+ COMMAND? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
1692815 root? ? ? 20? ?0? ?17.7g? ?1.5g? 20264 S? ?6.3? ?4.7? ?5:53.00 java
以上是top命令的一個結(jié)果,我們來簡單解讀一下:
1. 第一行:顯示了任務(進程)的總數(shù)和狀態(tài)信息。
? ?- `Tasks: 292 total`:系統(tǒng)中的任務總數(shù)。
? ?- `1 running`:正在運行的任務數(shù)。
? ?- `291 sleeping`:睡眠(等待)的任務數(shù)。
? ?- `0 stopped`:停止的任務數(shù)。
? ?- `0 zombie`:僵尸(已結(jié)束但未被父進程回收)任務數(shù)。
2. 第二行:顯示了 CPU 的使用情況。
? ?- `%Cpu(s)`:CPU 使用率的統(tǒng)計信息。
? ?- `0.7 us`:用戶空間占用 CPU 的百分比。
? ?- `0.8 sy`:系統(tǒng)內(nèi)核占用 CPU 的百分比。
? ?- `0.0 ni`:用戶進程以調(diào)整優(yōu)先級方式占用 CPU 的百分比。
? ?- `98.5 id`:CPU 空閑的百分比。
? ?- `0.0 wa`:等待磁盤 I/O 的百分比。
? ?- `0.0 hi`:硬件中斷(高優(yōu)先級)占用 CPU 的百分比。
? ?- `0.0 si`:軟件中斷(低優(yōu)先級)占用 CPU 的百分比。
? ?- `0.0 st`:被虛擬化偷取的 CPU 時間的百分比。
3. 第三行:顯示了內(nèi)存的使用情況。
? ?- `MiB Mem`:物理內(nèi)存的統(tǒng)計信息。
? ?- `31662.0 total`:總的物理內(nèi)存大小。
? ?- `4555.1 free`:可用的物理內(nèi)存大小。
? ?- `26599.6 used`:已使用的物理內(nèi)存大小。
? ?- `507.3 buff/cache`:用于緩存的物理內(nèi)存大小。
4. 第四行:顯示了交換空間(Swap)的使用情況。
? ?- `MiB Swap`:交換空間的統(tǒng)計信息。
? ?- `975.0 total`:總的交換空間大小。
? ?- `113.4 free`:可用的交換空間大小。
? ?- `861.6 used`:已使用的交換空間大小。
? ?- `4554.9 avail Mem`:可用于新進程的內(nèi)存大小。
5. 接下來的行:顯示了每個任務(進程)的詳細信息。
? ?- `PID`:任務的進程ID。
? ?- `USER`:任務的所有者。
? ?- `PR`:任務的優(yōu)先級。
? ?- `NI`:任務的優(yōu)先級調(diào)整值。
? ?- `VIRT`:任務占用的虛擬內(nèi)存大小。
? ?- `RES`:任務占用的物理內(nèi)存大小。
? ?- `SHR`:任務共享的內(nèi)存大小。
? ?- `S`:任務的狀態(tài)(R:運行,S:睡眠,Z:僵尸等)。
? ?- `%CPU`:任務占用的CPU使用率。
? ?- `%MEM
`:任務占用的內(nèi)存百分比。
? ?- `TIME+`:任務已運行的總時間。
? ?- `COMMAND`:任務的命令名稱。
以上是對top命令結(jié)果的詳細解釋,它提供了關于系統(tǒng)任務、CPU、內(nèi)存和進程的重要信息。
`top`命令有許多選項可以用于定制輸出和控制顯示的內(nèi)容。以下是一些常用的`top`命令選項:
- `-d <秒數(shù)>`:指定更新顯示的時間間隔。
- `-n <次數(shù)>`:指定顯示信息的刷新次數(shù)后退出`top`。
- `-b`:以批處理模式運行`top`,將結(jié)果輸出到標準輸出而不是交互式界面。
- `-c`:顯示命令的完整路徑而不僅僅是命令名稱。
- `-i`:忽略或顯示空閑的進程。
- `-s <字段>`:以指定的字段進行排序,例如`-s %CPU`按照CPU使用率排序。
- `-u <用戶名>`:僅顯示屬于指定用戶的進程。
- `-p <進程ID>`:僅顯示指定進程ID的信息。
- `-H`:以線程的方式顯示進程的信息。
- `1`:切換到顯示每個CPU核心的詳細信息。
- `t`:切換到顯示進程和CPU的信息。
### mpstat命令
下面是該命令的一次結(jié)果
>Linux 5.10.0-15-amd64 (debian-2) 06/07/2023 _x86_64_ (16 CPU)
03:01:22 PM? CPU? ? %usr? ?%nice? ? %sys %iowait? ? %irq? ?%soft? %steal? %guest? %gnice? ?%idle
03:01:22 PM? all? ? 0.22? ? 0.00? ? 0.19? ? 0.00? ? 0.00? ? 0.00? ? 0.00? ? 0.00? ? 0.00? ?99.59
簡單解讀一下
- `03:01:22 PM`:報告生成的時間。
下面是每一列的含義:
- `CPU`:顯示 CPU 的標識。
- `%usr`:用戶空間程序使用 CPU 的百分比。
- `%nice`:以調(diào)整優(yōu)先級方式運行的用戶進程使用 CPU 的百分比。
- `%sys`:內(nèi)核空間程序使用 CPU 的百分比。
- `%iowait`:等待 I/O 完成而處于空閑狀態(tài)的 CPU 百分比。
- `%irq`:服務硬件中斷請求的 CPU 百分比。
- `%soft`:服務軟件中斷請求的 CPU 百分比。
- `%steal`:被其他虛擬化實例“偷取”的 CPU 百分比。
- `%guest`:運行虛擬化客戶機的 CPU 百分比。
- `%gnice`:以調(diào)整優(yōu)先級方式運行的虛擬化客戶機的 CPU 百分比。
- `%idle`:處于空閑狀態(tài)的 CPU 百分比。
對于示例中的數(shù)據(jù)行:
- `all`:表示所有 CPU 的統(tǒng)計數(shù)據(jù),表示所有 CPU 的平均值。
- `%usr`:用戶空間程序使用 CPU 的百分比為 0.22%。
- `%nice`:以調(diào)整優(yōu)先級方式運行的用戶進程使用 CPU 的百分比為 0%。
- `%sys`:內(nèi)核空間程序使用 CPU 的百分比為 0.19%。
- `%iowait`:等待 I/O 完成而處于空閑狀態(tài)的 CPU 百分比為 0%。
- `%irq`、`%soft`、`%steal`、`%guest`、`%gnice`:都是 0%,表示沒有相關的活動。
- `%idle`:處于空閑狀態(tài)的 CPU 百分比為 99.59%。
這些統(tǒng)計信息顯示了在報告生成的時間點上,系統(tǒng)中的 CPU 使用情況。
下面是一些常用的`mpstat`命令選項:
- `-P <CPU列表>`:指定要顯示統(tǒng)計信息的特定 CPU 列表。例如,`mpstat -P 0,2`將僅顯示CPU 0和CPU 2的統(tǒng)計信息。
- `-u`:顯示 CPU 使用率的統(tǒng)計信息。
- `-I <中斷類型>`:顯示指定類型的中斷信息。可用的中斷類型包括 `CPU`、`IRQ`、`NMI` 和 `SERR`。
- `-V`:顯示 `mpstat` 命令的版本信息。
- `-P ALL`:顯示每個 CPU 的統(tǒng)計信息。
- `-I ALL`:顯示所有中斷類型的統(tǒng)計信息。
- `-A`:顯示所有可用的統(tǒng)計信息。
- `-I SUM`:顯示中斷摘要的統(tǒng)計信息。
- `-I SUM -p ALL`:顯示中斷匯總信息,包括每個 CPU 的統(tǒng)計信息。
## 查看網(wǎng)絡情況
### netstat命令
`netstat`命令有多個選項,可以根據(jù)需要來顯示網(wǎng)絡連接、路由表和網(wǎng)絡統(tǒng)計信息。以下是一些常用的`netstat`命令選項:
- `-a`:顯示所有的網(wǎng)絡連接和監(jiān)聽端口。
- `-t`:僅顯示 TCP 協(xié)議相關的網(wǎng)絡連接。
- `-u`:僅顯示 UDP 協(xié)議相關的網(wǎng)絡連接。
- `-n`:以數(shù)字形式顯示 IP 地址和端口號,而不進行主機和服務名稱解析。
- `-p`:顯示與每個網(wǎng)絡連接關聯(lián)的進程/程序的PID和名稱。
- `-r`:顯示系統(tǒng)的路由表信息。
- `-s`:顯示網(wǎng)絡統(tǒng)計信息,如傳輸層統(tǒng)計和協(xié)議統(tǒng)計。
- `-l`:僅顯示監(jiān)聽狀態(tài)的網(wǎng)絡連接。
- `-e`:顯示擴展信息,如用戶、inode、計時器信息等。
- `-c`:連續(xù)顯示網(wǎng)絡連接信息,不斷刷新顯示。
- `-i`:顯示網(wǎng)絡接口的信息和統(tǒng)計。
下面是一個結(jié)果
>Proto RefCnt Flags? ? ? ?Type? ? ? ?State? ? ? ? ?I-Node? ?PID/Program name? ? ?Path
unix? 2? ? ? [ ]? ? ? ? ?DGRAM? ? ? ? ? ? ? ? ? ? 579005? ?26313/systemd? ? ? ? /run/user/0/systemd/notify
unix? 2? ? ? [ ACC ]? ? ?STREAM? ? ?LISTENING? ? ?13693? ? 1228/zabbix_server? ?/run/zabbix/zabbix_server_rtc.sock
逐行進行分析:
1. `unix? 2? ? ? [ ]? ? ? ? ?DGRAM? ? ? ? ? ? ? ? ? ? 579005? ?26313/systemd? ? ? ? /run/user/0/systemd/notify`
? ?- `Proto`:協(xié)議類型,這里是UNIX。
? ?- `RefCnt`:引用計數(shù),表示當前連接的引用數(shù)量。
? ?- `Flags`:標志位,這里為空。
? ?- `Type`:連接的類型,這里是DGRAM(數(shù)據(jù)報套接字)。
? ?- `State`:連接的狀態(tài),這里沒有顯示具體狀態(tài)。
? ?- `I-Node`:連接關聯(lián)的I-Node(索引節(jié)點)號。
? ?- `PID/Program name`:關聯(lián)的進程ID和程序名稱,這里是26313/systemd。
? ?- `Path`:連接關聯(lián)的路徑,這里是/run/user/0/systemd/notify。
2. `unix? 2? ? ? [ ACC ]? ? ?STREAM? ? ?LISTENING? ? ?13693? ? 1228/zabbix_server? ?/run/zabbix/zabbix_server_rtc.sock`
? ?- `Proto`:協(xié)議類型,這里是UNIX。
? ?- `RefCnt`:引用計數(shù),表示當前連接的引用數(shù)量。
? ?- `Flags`:標志位,這里是[ ACC ],表示連接處于"已接受"狀態(tài)。
? ?- `Type`:連接的類型,這里是STREAM(流套接字)。
? ?- `State`:連接的狀態(tài),這里是LISTENING(監(jiān)聽狀態(tài))。
? ?- `I-Node`:連接關聯(lián)的I-Node(索引節(jié)點)號。
? ?- `PID/Program name`:關聯(lián)的進程ID和程序名稱,這里是1228/zabbix_server。
? ?- `Path`:連接關聯(lián)的路徑,這里是/run/zabbix/zabbix_server_rtc.sock。
這些信息提供了關于網(wǎng)絡連接的詳細信息,包括連接類型、狀態(tài)、進程關聯(lián)和相關路徑。
### ss命令
`ss`命令是用于查看套接字(socket)信息的工具,具有比`netstat`更快速和更強大的功能。以下是一些常用的`ss`命令選項:
- `-t`:僅顯示 TCP 協(xié)議相關的套接字信息。
- `-u`:僅顯示 UDP 協(xié)議相關的套接字信息。
- `-w`:僅顯示 RAW 協(xié)議相關的套接字信息。
- `-x`:僅顯示 UNIX 域套接字信息。
- `-a`:顯示所有的套接字信息,包括監(jiān)聽和非監(jiān)聽狀態(tài)。
- `-l`:僅顯示監(jiān)聽狀態(tài)的套接字信息。
- `-o`:顯示計時器信息。
- `-e`:顯示詳細的套接字信息,包括用戶、inode、計時器等。
- `-i`:顯示網(wǎng)絡接口的信息和統(tǒng)計。
- `-p`:顯示與每個套接字關聯(lián)的進程/程序的PID和名稱。
- `-n`:以數(shù)字形式顯示 IP 地址和端口號,而不進行主機和服務名稱解析。
- `-r`:顯示路由表信息。
- `-s`:顯示網(wǎng)絡統(tǒng)計信息,如傳輸層統(tǒng)計和協(xié)議統(tǒng)計。
- `-4`:僅顯示 IPv4 套接字信息。
- `-6`:僅顯示 IPv6 套接字信息。
看看例子
>State? ? ? ? ? ? ? ? Recv-Q? ? ? ? ? ?Send-Q? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Local Address:Port? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Peer Address:Port? ? ? ? ? ? ? ? ?Process? ? ? ? ? ?
ESTAB? ? ? ? ? ? ? ? 0? ? ? ? ? ? ? ? 0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?20.20.40.232:ssh? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 10.110.0.9:23033? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
CLOSE-WAIT? ? ? ? ? ?32? ? ? ? ? ? ? ?0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?xxx.xxx.xxx.xxx:58836? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?xxx.xxx.xxx.xxx:https?
逐行分析為:
根據(jù)提供的`ss`命令結(jié)果,逐行進行分析:
1. `ESTAB? ? ? ? ? ? ? ? 0? ? ? ? ? ? ? ? 0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?20.20.40.232:ssh? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 10.110.0.9:23033`
? ?- `State`:套接字的狀態(tài),這里是ESTAB,表示連接已建立。
? ?- `Recv-Q`:接收隊列中的數(shù)據(jù)大小,這里是0。
? ?- `Send-Q`:發(fā)送隊列中的數(shù)據(jù)大小,這里是0。
? ?- `Local Address:Port`:本地地址和端口,這里是20.20.40.232:ssh。
? ?- `Peer Address:Port`:對等端(遠程主機)地址和端口,這里是10.110.0.9:23033。
2. `CLOSE-WAIT? ? ? ? ? ?32? ? ? ? ? ? ? ?0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?20.20.40.232:58836? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?xxx.xxx.xxx.xxx:https`
? ?- `State`:套接字的狀態(tài),這里是CLOSE-WAIT,表示本地端已關閉,但遠程端尚未關閉連接。
? ?- `Recv-Q`:接收隊列中的數(shù)據(jù)大小,這里是32。
? ?- `Send-Q`:發(fā)送隊列中的數(shù)據(jù)大小,這里是0。
? ?- `Local Address:Port`:本地地址和端口,這里是20.20.40.232:58836。
? ?- `Peer Address:Port`:對等端(遠程主機)地址和端口,這里是xxx.xxx.xxx.xxx:https。
這些信息提供了關于套接字的詳細信息,包括套接字狀態(tài)、數(shù)據(jù)隊列大小和本地/遠程地址與端口。
### traceroute命令
`traceroute`命令用于跟蹤數(shù)據(jù)包從本地主機到目標主機的路徑。它通過發(fā)送一系列的數(shù)據(jù)包,逐跳地測量和顯示每個跳點的延遲和路徑信息。以下是一些常用的`traceroute`命令選項:
- `-I`:使用ICMP Echo請求(類似于ping)進行跟蹤,默認使用UDP。
- `-T`:使用TCP SYN請求進行跟蹤。
- `-U`:使用UDP數(shù)據(jù)包進行跟蹤,默認使用UDP。
- `-n`:以數(shù)字形式顯示IP地址,而不進行主機名稱解析。
- `-q <次數(shù)>`:設置每個跳點發(fā)送的數(shù)據(jù)包數(shù)量。
- `-w <超時時間>`:設置等待響應的超時時間。
- `-m <跳數(shù)>`:設置跟蹤的最大跳數(shù)。
- `-p <端口號>`:指定使用的端口號。
- `-r`:忽略路由表,直接發(fā)送數(shù)據(jù)包到目標主機。
- `-s <源IP>`:設置源IP地址。
- `-z <等待時間>`:設置每個發(fā)送數(shù)據(jù)包之間的等待時間。
- `-f <生存時間>`:設置第一個TTL(生存時間)的值。
- `-l`:在最后一個跳點顯示主機名稱。
- `-a`:使用AS(自治系統(tǒng))號替代IP地址進行顯示。
- `-A`:顯示ASN(自治系統(tǒng)號)信息。
- `-w`:顯示每個跳點的時延信息。
`traceroute`命令的結(jié)果通常會顯示每個跳點的信息,包括跳點的序號、IP地址、主機名(如果可解析)、延遲和躍點數(shù)(TTL)。以下是`traceroute`命令可能顯示的一些常見結(jié)果:
1. 跳點的序號:每個跳點都會顯示一個序號,表示數(shù)據(jù)包通過的躍點數(shù)。序號從1開始遞增。
2. IP地址:每個跳點的IP地址將顯示出來。這是數(shù)據(jù)包到達該跳點的網(wǎng)絡設備的IP地址。
3. 主機名:如果IP地址可解析為主機名,則可能會顯示主機名。這需要進行反向DNS解析,因此不是每個跳點都會顯示主機名。
4. 延遲:每個跳點的延遲時間(通常以毫秒為單位)會顯示出來。它表示數(shù)據(jù)包從本地主機發(fā)送到該跳點并返回的往返時間。
5. 躍點數(shù)(TTL):躍點數(shù)表示數(shù)據(jù)包到達目標所經(jīng)過的跳點數(shù)量。每個數(shù)據(jù)包在經(jīng)過一個跳點后,躍點數(shù)會遞減,直到達到目標或躍點數(shù)為零。
6. 完成標志:當數(shù)據(jù)包到達目標主機時,會顯示一個完成標志,表示`traceroute`已經(jīng)到達目標并完成跟蹤。
需要注意的是,由于網(wǎng)絡環(huán)境的變化和路由策略的差異,不同跟蹤的結(jié)果可能會有所不同。
當`traceroute`命令的結(jié)果中,IP地址列顯示為星號(*)時,表示無法獲得該跳點的IP地址信息。這通常是因為網(wǎng)絡設備或防火墻配置的原因,導致無法獲取到該跳點的準確IP地址。這種情況下,`traceroute`無法確定經(jīng)過的網(wǎng)絡節(jié)點具體的IP地址。可能的原因包括:
1. 路由器或防火墻配置了規(guī)則,不允許`traceroute`請求通過,并且返回的ICMP回復中不包含IP地址信息。
2. 跳點設備的配置問題,導致無法返回準確的IP地址信息。
3. 路由器或防火墻對`traceroute`請求進行了過濾或屏蔽。
在這種情況下,`traceroute`仍然會顯示其他可用信息,如跳點的序號、延遲時間和躍點數(shù)(TTL),但無法提供具體的IP地址。
### telnet命令
`telnet`命令是一個用于遠程登錄或測試網(wǎng)絡連接的工具。以下是`telnet`命令的一些常見選項:
- `-l <username>`:指定要用于登錄的用戶名。
- `-p <port>`:指定要連接的目標端口號。
- `-4`:強制使用 IPv4 地址。
- `-6`:強制使用 IPv6 地址。
- `-a`:嘗試自動登錄(自動模式)。
- `-E`:在發(fā)送環(huán)境變量之前不等待遠程主機的確認。
- `-e <escape character>`:指定用于發(fā)送命令的轉(zhuǎn)義字符。
- `-k <realm>`:使用 Kerberos 5 認證,并指定領域。
- `-L`:啟用加密模式。
- `-r`:在連接建立后立即打開記錄文件。
- `-x`:使用加密傳輸模式。
- `-v`:顯示詳細的調(diào)試信息。
和traceroute類似
### ifconfig命令
`ifconfig`命令用于查看和配置網(wǎng)絡接口的信息,包括IP地址、網(wǎng)絡掩碼、MAC地址等。以下是一些常見的`ifconfig`命令選項:
- `<interface>`:指定要查看或配置的網(wǎng)絡接口名稱,如`eth0`、`wlan0`等。
- `up`:激活指定的網(wǎng)絡接口。
- `down`:停用指定的網(wǎng)絡接口。
- `promisc`:將指定的網(wǎng)絡接口設置為混雜模式,使其能夠捕獲經(jīng)過該接口的所有數(shù)據(jù)包。
- `hw <MAC address>`:設置指定網(wǎng)絡接口的物理地址(MAC地址)。
- `inet <IP address> [<netmask>]`:配置指定網(wǎng)絡接口的IPv4地址和可選的網(wǎng)絡掩碼。
- `inet6 <IPv6 address>/<prefix length>`:配置指定網(wǎng)絡接口的IPv6地址和前綴長度。
- `mtu <value>`:設置指定網(wǎng)絡接口的最大傳輸單元大小。
- `broadcast <IP address>`:設置指定網(wǎng)絡接口的廣播地址。
- `netmask <netmask>`:設置指定網(wǎng)絡接口的網(wǎng)絡掩碼。
- `metric <value>`:設置指定網(wǎng)絡接口的路由度量值。
- `txqueuelen <value>`:設置指定網(wǎng)絡接口的傳輸隊列長度。
這些只是`ifconfig`命令的一些常用選項,實際上還有更多選項和功能可用。為了獲取詳細的選項列表和用法說明,您可以在命令行中輸入`man ifconfig`以查看`ifconfig`命令的手冊頁。請注意,`ifconfig`在一些新的Linux發(fā)行版中已被`ip`命令所取代,因此建議盡量使用`ip`命令進行網(wǎng)絡接口的配置和管理。
來看一個例子
>eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>? mtu 1500
? ? ? ? inet 20.20.40.232? netmask 255.255.248.0? broadcast 20.20.47.255
? ? ? ? inet6 fe80::2eea:7fff:fe93:ef5e? prefixlen 64? scopeid 0x20<link>
? ? ? ? ether 2c:ea:7f:93:ef:5e? txqueuelen 1000? (Ethernet)
? ? ? ? RX packets 39320669? bytes 46025532065 (42.8 GiB)
? ? ? ? RX errors 0? dropped 0? overruns 0? frame 0
? ? ? ? TX packets 40037370? bytes 5499509583 (5.1 GiB)
? ? ? ? TX errors 0? dropped 0 overruns 0? carrier 0? collisions 0
? ? ? ? device interrupt 17??
lo: flags=73<UP,LOOPBACK,RUNNING>? mtu 65536
? ? ? ? inet 127.0.0.1? netmask 255.0.0.0
? ? ? ? inet6 ::1? prefixlen 128? scopeid 0x10<host>
? ? ? ? loop? txqueuelen 1000? (Local Loopback)
? ? ? ? RX packets 5399237? bytes 819904930 (781.9 MiB)
? ? ? ? RX errors 0? dropped 0? overruns 0? frame 0
? ? ? ? TX packets 5399237? bytes 819904930 (781.9 MiB)
? ? ? ? TX errors 0? dropped 0 overruns 0? carrier 0? collisions 0
根據(jù)提供的輸出,我們可以分析兩個網(wǎng)絡接口:`eno1`和`lo`。
1. `eno1`接口:
? ?- `flags=4163<UP,BROADCAST,RUNNING,MULTICAST>`:指示該接口處于啟用狀態(tài),可以進行廣播和多播通信。
? ?- `mtu 1500`:指定該接口的最大傳輸單元大小為1500字節(jié)。
? ?- `inet 20.20.40.232`:指定該接口的IPv4地址為20.20.40.232。
? ?- `netmask 255.255.248.0`:指定該接口的IPv4網(wǎng)絡掩碼為255.255.248.0。
? ?- `broadcast 20.20.47.255`:指定該接口的IPv4廣播地址為20.20.47.255。
? ?- `inet6 fe80::2eea:7fff:fe93:ef5e`:指定該接口的IPv6地址為fe80::2eea:7fff:fe93:ef5e。
? ?- `prefixlen 64`:指定該接口的IPv6前綴長度為64。
? ?- `ether 2c:ea:7f:93:ef:5e`:指定該接口的物理地址(MAC地址)為2c:ea:7f:93:ef:5e。
? ?- `txqueuelen 1000`:指定該接口的傳輸隊列長度為1000。
? ?- `RX packets`和`TX packets`:指示該接口接收和發(fā)送的數(shù)據(jù)包數(shù)量。
? ?- `bytes`:指示該接口接收和發(fā)送的總字節(jié)數(shù)。
? ?- `RX errors`和`TX errors`:指示該接口接收和發(fā)送的錯誤數(shù)據(jù)包數(shù)量。
? ?- `device interrupt 17`:指示該接口使用的設備中斷號為17。
2. `lo`接口:
? ?- `flags=73<UP,LOOPBACK,RUNNING>`:指示該接口處于啟用狀態(tài),并支持環(huán)回(loopback)通信。
? ?- `mtu 65536`:指定該接口的最大傳輸單元大小為65536字節(jié)。
? ?- `inet 127.0.0.1`:指定該接口的IPv4地址為127.0.0.1,即本地環(huán)回地址。
? ?- `netmask 255.0.0.0`:指定該接口的IPv4網(wǎng)絡掩碼為255.0.0.0。
? ?- `inet6 ::1`:指定該接口的IPv6地址為::1,即本地環(huán)回地址。
? ?- `prefixlen 128`:指定該接口的IPv6前綴長度為128。
? ?- `loop`:指示該接口是一個本地環(huán)回接口。
? ?- `txqueuelen 1000`:指定該接口的傳輸隊列長度為1000。
? ?- `RX packets`和`TX packets`:指示該接口接收和發(fā)送的數(shù)據(jù)包數(shù)量。
? ?- `bytes`:指示該接口接收和發(fā)送的總字節(jié)數(shù)。
? ?- `RX errors`和`TX errors`:指示該接口接收和發(fā)送的錯誤數(shù)據(jù)包數(shù)量。
綜上所述,`eno1`是一個活動的以太網(wǎng)接口,具有IPv4和IPv6地址,而`lo`是一個本地環(huán)回接口,用于在本地進行回環(huán)測試和通信。
## 殺死進程的kill命令
`kill`命令可以發(fā)送不同的信號給進程,以便控制其行為。以下是一些常見的`kill`命令信號及其對應的編號:
- **SIGTERM** (15):默認的終止信號,請求進程正常終止。
- **SIGHUP** (1):終端掛起信號,通常用于通知進程重新加載配置文件或重新啟動。
- **SIGINT** (2):終端中斷信號,通常由Ctrl+C鍵觸發(fā),用于中斷正在運行的進程。
- **SIGKILL** (9):強制終止信號,立即終止進程,無法捕獲或忽略。該信號無法被阻塞、處理或忽略,是一種"殺手锏"。
- **SIGSTOP** (19):停止信號,暫停進程的執(zhí)行。類似于Ctrl+Z鍵觸發(fā)的暫停操作。
- **SIGCONT** (18):繼續(xù)信號,恢復被暫停的進程的執(zhí)行。
除了上述常見的信號外,還有其他信號可供使用,具體的信號列表可以通過`kill -l`命令查看。該命令會列出系統(tǒng)支持的所有信號及其對應的編號。
例如,可以通過以下命令查看信號列表:
```shell
kill -l
```
### 殺死某個名稱的進程
ps -aux | grep 'python3 main.py' | awk '{print $2}' | xargs kill -9
### kill、pkill和killall命令
`kill`、`pkill`和`killall`命令都用于終止正在運行的進程,但它們在使用方式和作用范圍上有所不同。
1. `kill`命令:
? ?- 作用:向指定進程發(fā)送信號以終止它。
? ?- 語法:`kill [選項] <進程ID>`
? ?- 常用選項:
? ? ?- `-l`:列出所有可用的信號。
? ? ?- `-s <信號>`:指定要發(fā)送的信號。
? ?- 示例:`kill -9 1234`(發(fā)送強制終止信號9給進程ID為1234的進程)。
2. `pkill`命令:
? ?- 作用:根據(jù)進程名或其他屬性選擇并終止進程。
? ?- 語法:`pkill [選項] <進程名>`
? ?- 常用選項:
? ? ?- `-f`:使用進程的完整命令行匹配。
? ? ?- `-u <用戶名>`:根據(jù)用戶名選擇進程。
? ?- 示例:`pkill -f nginx`(終止所有包含"nginx"關鍵字的進程)。
3. `killall`命令:
? ?- 作用:根據(jù)進程名終止進程。
? ?- 語法:`killall [選項] <進程名>`
? ?- 常用選項:
? ? ?- `-e`:精確匹配進程名。
? ? ?- `-u <用戶名>`:根據(jù)用戶名選擇進程。
? ?- 示例:`killall -e firefox`(終止所有名為"firefox"的進程)。
需要注意的是,使用這些命令時要小心確認要終止的進程,以免意外關閉重要的進程。在使用強制終止信號(如9號信號)時,進程可能無法進行正常的清理操作,因此建議在必要時使用,并確保備份數(shù)據(jù)。