溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

計算機基礎知識—Linux操作系統

發布時間:2020-08-10 22:43:04 來源:ITPUB博客 閱讀:207 作者:aixiaode123 欄目:建站服務器

這一塊操作系統主要分為兩個部分,一個部分是書本上操作系統的知識,還有一部門是linux的相關知識:

linux相關知識

###(1) Linux中同步異步、阻塞非阻塞的區別(超級重要)

首先是同步異步、阻塞非阻塞的區別:

同步:所謂同步,就是在發出一個功能調用時,在沒有得到結果之前,該調用就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事。

例如普通B/S模式(同步):提交請求->等待服務器處理->處理完畢返回 這個期間客戶端瀏覽器不能干任何事

異步:異步的概念和同步相對。當一個異步過程調用發出后,調用者不能立刻得到結果。實際處理這個調用的部件在完成后,通過狀態、通知和回調來通知調用者。

例如 ajax請求(異步): 請求通過事件觸發->服務器處理(這是瀏覽器仍然可以作其他事情)->處理完畢

阻塞:阻塞調用是指調用結果返回之前,當前線程會被掛起(線程進入非可執行狀態,在這個狀態下,cpu不會給線程分配時間片,即線程暫停運行)。函數只有在得到結果之后才會返回。

有人也許會把阻塞調用和同步調用等同起來,實際上他是不同的。對于同步調用來說,很多時候當前線程還是激活的,只是從邏輯上當前函數沒有返回,它還會搶占cpu去執行其他邏輯,也會主動檢測io是否準備好。

非阻塞:非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前,該函數不會阻塞當前線程,而會立刻返回。

再簡單點理解就是:

1. 同步,就是我調用一個功能,該功能沒有結束前,我死等結果。

2. 異步,就是我調用一個功能,不需要知道該功能結果,該功能有結果后通知我(回調通知)

3. 阻塞,就是調用我(函數),我(函數)沒有接收完數據或者沒有得到結果之前,我不會返回。

4. 非阻塞,就是調用我(函數),我(函數)立即返回,通過select通知調用者

同步IO和異步IO的區別就在于:數據拷貝的時候進程是否阻塞

阻塞IO和非阻塞IO的區別就在于:應用程序的調用是否立即返回

綜上可知,同步和異步,阻塞和非阻塞,有些混用,其實它們完全不是一回事,而且它們修飾的對象也不相同。

linux中五種IO模型:

阻塞I/O(blocking I/O)

非阻塞I/O (nonblocking I/O)

I/O復用(select 和poll) (I/O multiplexing)

信號驅動I/O (signal driven I/O (SIGIO))

異步I/O (asynchronous I/O (the POSIX aio_functions))

*其中前4種都是同步,最后一種才是異步。

1. 阻塞I/O:

應用程序調用一個IO函數,導致應用程序阻塞,等待數據準備好。 如果數據沒有準備好,一直等待….數據準備好了,從內核拷貝到用戶空間,IO函數返回成功指示。

阻塞I/O模型圖:在調用recv()/recvfrom()函數時,發生在內核中等待數據和復制數據的過程。

當調用recv()函數時,系統首先查是否有準備好的數據。如果數據沒有準備好,那么系統就處于等待狀態。當數據準備好后,將數據從系統緩沖區復制到用戶空間,然后該函數返回。在套接應用程序中,當調用recv()函數時,未必用戶空間就已經存在數據,那么此時recv()函數就會處于等待狀態。

2. 非阻塞I/O

非阻塞IO通過進程反復調用IO函數(多次系統調用,并馬上返回);在數據拷貝的過程中,進程是阻塞的

我們把一個SOCKET接口設置為非阻塞就是告訴內核,當所請求的I/O操作無法完成時,不要將進程睡眠,而是返回一個錯誤。這樣我們的I/O操作函數將不斷的測試數據是否已經準備好,如果沒有準備好,繼續測試,直到數據準備好為止。在這個不斷測試的過程中,會大量的占用CPU的時間。

3. IO復用

主要是select和epoll;對一個IO端口,兩次調用,兩次返回,比阻塞IO并沒有什么優越性;關鍵是能實現同時對多個IO端口進行監聽; I/O復用模型會用到select、poll、epoll函數,這幾個函數也會使進程阻塞,但是和阻塞I/O所不同的的,這兩個函數可以同時阻塞多個I/O操作。而且可以同時對多個讀操作,多個寫操作的I/O函數進行檢測,直到有數據可讀或可寫時,才真正調用I/O操作函數。

IO復用模型會用到select、poll、epoll函數,這幾個函數也會使進程阻塞,但是和阻塞I/O所不同的是,這兩個函數可以同時阻塞多個I/O操作。而且可以同時對多個讀操作、多個寫操作的I/O函數進行檢測,直到有數據可讀或者可寫時(注意不是全部數據可讀或者可寫),才真正的調用I/O操作函數。

4. 信號驅動IO

首先我們允許套接口進行信號驅動I/O,并安裝一個信號處理函數,進程繼續運行并不阻塞。當數據準備好時,進程會收到一個SIGIO信號,可以在信號處理函數中調用I/O操作函數處理數據。

5. 異步IO

當一個異步過程調用發出后,調用者不能立刻得到結果。實際處理這個調用的部件在完成后,通過狀態、通知和回調來通知調用者的輸入輸出操作

6. 總結比較下五種IO模型:

(2) 文件系統的理解(EXT4,XFS,BTRFS)

1.Ext4 文件系統

ext4 還有一些明顯的限制。最大文件大小是 16 tebibytes(大概是 17.6 terabytes),這比普通用戶當前能買到的硬盤還要大的多。使用 ext4 能創建的最大卷/分區是 1 exbibyte(大概是 1,152,921.5 terabytes)。通過使用多種技巧, ext4 比 ext3 有很大的速度提升。類似一些最先進的文件系統,它是一個日志文件系統,意味著它會對文件在磁盤中的位置以及任何其它對磁盤的更改做記錄??v觀它的所有功能,它還不支持透明壓縮、重復數據刪除或者透明加密。技術上支持了快照,但該功能還處于實驗性階段。

2.XFS 文件系統

XFS 文件系統是擴展文件系統(extent file system)的一個擴展。XFS 是 64 位高性能日志文件系統。對 XFS 的支持大概在 2002 年合并到了 Linux 內核,到了 2009 年,紅帽企業版 Linux 5.4 也支持了 XFS 文件系統。對于 64 位文件系統,XFS 支持最大文件系統大小為 8 exbibytes。XFS 文件系統有一些缺陷,例如它不能壓縮,刪除大量文件時性能低下。目前RHEL 7.0 文件系統默認使用 XFS。

3.trfs 文件系統

btrfs 有很多不同的叫法,例如 Better FS、Butter FS 或者 B-Tree FS。它是一個幾乎完全從頭開發的文件系統。btrfs 出現的原因是它的開發者起初希望擴展文件系統的功能使得它包括快照、池化(pooling)、校驗以及其它一些功能。雖然和 ext4 無關,它也希望能保留 ext4 中能使消費者和企業受益的功能,并整合額外的能使每個人,尤其是企業受益的功能。對于使用大型軟件以及大規模數據庫的企業,讓多種不同的硬盤看起來一致的文件系統能使他們受益并且使數據整合變得更加簡單。刪除重復數據能降低數據實際使用的空間,當需要鏡像一個單一而巨大的文件系統時使用 btrfs 也能使數據鏡像變得簡單。

用戶當然可以繼續選擇創建多個分區從而無需鏡像任何東西??紤]到這種情況,btrfs 能橫跨多種硬盤,和 ext4 相比,它能支持 16 倍以上的磁盤空間。btrfs 文件系統一個分區最大是 16 exbibytes,最大的文件大小也是 16 exbibytes。

(3) 文件處理grep,awk,sed這三個命令必知必會

1.grep、sed和awk都是文本處理工具,雖然都是文本處理工具單卻都有各自的優缺點,一種文本處理命令是不能被另一個完全替換的,否則也不會出現三個文本處理命令了。只不過,相比較而言,sed和awk功能更強大而已,且已獨立成一種語言來介紹。

2.grep:文本過濾器,如果僅僅是過濾文本,可使用grep,其效率要比其他的高很多;

3.sed:Stream EDitor,流編輯器,默認只處理模式空間,不處理原數據,如果你處理的數據是針對行進行處理的,可以使用sed;

4.awk:報告生成器,格式化以后顯示。如果對處理的數據需要生成報告之類的信息,或者你處理的數據是按列進行處理的,最好使用awk。

(4) IO復用的三種方法(select,poll,epoll)深入理解,包括三者區別,內部原理實現?

1. IO復用的了解:

select,poll,epoll都是IO多路復用的機制。I/O多路復用就通過一種機制,可以監視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進行相應的讀寫操作。但select,poll,epoll本質上都是同步I/O,因為他們都需要在讀寫事件就緒后自己負責進行讀寫,也就是說這個讀寫過程是阻塞的,而異步I/O則無需自己負責進行讀寫,異步I/O的實現會負責把數據從內核拷貝到用戶空間。

此時需知道兩個概念:

所謂阻塞方式block,顧名思義,就是進程或是線程執行到這些函數時必須等待某個事件的發生,如果事件沒有發生,進程或線程就被阻塞,函數不能立即返回。

所謂非阻塞方式non-block,就是進程或線程執行此函數時不必非要等待事件的發生,一旦執行肯定返回,以返回值的不同來反映函數的執行情況,如果事件發生則與阻塞方式相同,若事件沒有發生,則返回一個代碼來告知事件未發生,而進程或線程繼續執行,所以效率較高。

2. select 分析

select()的機制中提供一fd_set的數據結構,實際上是一long類型的數組, 每一個數組元素都能與一打開的文件句柄(不管是Socket句柄,還是其他 文件或命名管道或設備句柄)建立聯系,建立聯系的工作由程序員完成, 當調用select()時,由內核根據IO狀態修改fd_set的內容,由此來通知執行了select()的進程哪一Socket或文件可讀或可寫。主要用于Socket通信當中。

select使用:它能夠監視我們需要監視的文件描述符的變化情況——讀寫或是異常。準備就緒的描述符數,若超時則返回0,若出錯則返回-1。

1.如果一個發現I/O有輸入,讀取的過程中,另外一個也有了輸入,這時候不會產生任何反應.這就需要你的程序語句去用到select函數的時候才知道有數據輸入。

2.程序去select的時候,如果沒有數據輸入,程序會一直等待(阻塞時),直到有數據為止,也就是程序中無需循環和sleep。

函數分析:

#include <sys/types.h>

#include <sys/times.h>

#include <sys/select.h>

int select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval * timeout)

1

2

3

4

函數返回結果:當readfds或writefds中映象的文件可讀或可寫或超時,本次select()就結束返回。程序員利用一組系統提供的宏在select()結束時便可判斷哪一文件可讀或可寫,對Socket編程特別有用的就是readfds。

注:不同的timeval設置使select()表現出超時結束、無超時阻塞和輪詢三種特性(timeval可精確至百萬分之一秒)。

select詳細執行步驟:

(1)使用copy_from_user從用戶空間拷貝fd_set到內核空間

(2)注冊回調函數__pollwait

(3)遍歷所有fd,調用其對應的poll方法(對于socket,這個poll方法是sock_poll,sock_poll根據情況會調用到tcp_poll,udp_poll或者datagram_poll)

(4)以tcp_poll為例,其核心實現就是__pollwait,也就是上面注冊的回調函數。

(5)__pollwait的主要工作就是把current(當前進程)掛到設備的等待隊列中,不同的設備有不同的等待隊列,對于tcp_poll來說,其等待隊列是sk->sk_sleep(注意把進程掛到等待隊列中并不代表進程已經睡眠了)。在設備收到一條消息(網絡設備)或填寫完文件數據(磁盤設備)后,會喚醒設備等待隊列上睡眠的進程,這時current便被喚醒了。

(6)poll方法返回時會返回一個描述讀寫操作是否就緒的mask掩碼,根據這個mask掩碼給fd_set賦值。

(7)如果遍歷完所有的fd,還沒有返回一個可讀寫的mask掩碼,則會調用schedule_timeout是調用select的進程(也就是current)進入睡眠。當設備驅動發生自身資源可讀寫后,會喚醒其等待隊列上睡眠的進程。如果超過一定的超時時間(schedule_timeout指定),還是沒人喚醒,則調用select的進程會重新被喚醒獲得CPU,進而重新遍歷fd,判斷有沒有就緒的fd。

(8)把fd_set從內核空間拷貝到用戶空間。

從以上工作流程可得到select特點:

a.所監視的每種事件描述符個數有上限;

printf("%d\n",sizeof(fd_set));

1

我的linux系統所能關心事件應為128字節*8=1024個描述符

b.調用前后輪詢;

使用select函數,必須使用輔助數組保存關心的描述符,因為select函數中描述符集是輸入輸出型參數,故在調用前應輪詢數組重置描述符集,調用后得輪詢描述符集判斷關心事件是否就緒。

c.系統與用戶數據拷貝:使用copy_from_user從用戶空間拷貝fd_set到內核空間。

d.調用前需重置(描述符集是輸入輸出型參數)。

3. poll分析

poll的實現和select非常相似,只是描述fd集合的方式不同,poll使用pollfd結構而不是select的fd_set結構,其他的都差不多。

#include <poll.h>

int poll(struct pollfd fds[], nfds_t nfds, int timeout);

1

2

監視描述符事件選項:

fds:是一個struct pollfd結構類型的數組,用于存放需要檢測其狀態的Socket描述符;每當調用這個函數之后,系統不會清空這個數組,操作起來比較方便;特別是對于socket連接比較多的情況下,在一定程度上可以提高處理的效率;這一點與select()函數不同,調用select()函數之后,select()函數會清空它所檢測的socket描述符集合,導致每次調用select()之前都必須把socket描述符重新加入到待檢測的集合中;因此,select()函數適合于只檢測一個socket描述符的情況,而poll()函數適合于大量socket描述符的情況;與select()十分相似,當返回正值時,代表滿足響應事件的文件描述符的個數,如果返回0則代表在規定時間內沒有事件發生。如發現返回為負則應該立即查看 errno,因為這代表有錯誤發生。

注:如果沒有事件發生,revents會被清空。

poll特點:

監視描述符個數無上限;最大描述符+1,個數由fds數組決定。

2.監視事件與返回后事件狀態反生分離,調用前后不需重置。

3.調用后輪詢檢測監視事件是否發生。

4.系統與用戶數據拷貝:使用copy_from_user從用戶空間拷貝fds到內核空間

4. epoll分析

epoll是linux內核為處理大批量文件描述符而作了改進的poll,是Linux下多路復用IO接口select/poll的增強版本,它能顯著提高程序在大量并發連接中中只有少量活躍的情況下的系統CPU利用率。另一點原因就是獲取事件的時候,它無須遍歷整個被偵聽的描述符集,只要遍歷那些被內核IO事件異步喚醒而加入Ready隊列的描述符集合就行了。epoll除了提供select/poll那種IO事件的水平觸發(Level Triggered)外,還提供了邊緣觸發(Edge Triggered),這就使得用戶空間程序有可能緩存IO狀態,減少epoll_wait/epoll_pwait的調用,提高應用程序效率。

epoll特點:

1.epoll和select和poll的調用接口上的不同。

select和poll都只提供了一個函數——select或者poll函數。而epoll提供了三個函數,epoll_create,epoll_ctl和epoll_wait,epoll_create是創建一個epoll句柄;epoll_ctl是注冊要監聽的事件類型;epoll_wait則是等待事件的產生。

2.使用mmap加速內核與用戶空間的消息傳遞。

對于select和poll函數的系統與內核每次調用時的數據拷貝:epoll是通過內核與用戶空間mmap同一塊內存實現的,在epoll_ctl函數中:每次注冊新的事件到epoll句柄中時(在epoll_ctl中指定EPOLL_CTL_ADD),會把所有的fd拷貝進內核,而不是在epoll_wait的時候重復拷貝。epoll保證了每個fd在整個過程中只會拷貝一次。

3.調用后不需輪詢判斷描述符事件是否就緒。

對于select和poll函數每次調用后輪詢檢測事件是否發生:epoll的解決方案不像select或poll一樣每次都把current輪流加入fd對應的設備等待隊列中,而只在epoll_ctl時把current掛一遍(這一遍必不可少)并為每個fd指定一個回調函數,當設備就緒,喚醒等待隊列上的等待者時,就會調用這個回調函數,而這個回調函數會把就緒的fd加入一個就緒鏈表)。epoll_wait的工作實際上就是在這個就緒鏈表中查看有沒有就緒的fd(利用schedule_timeout()實現睡一會,判斷一會的效果)。

4.監視描述符沒有個數上限。

epoll沒有這個限制,它所支持的FD上限是最大可以打開文件的數目,這個數字一般遠大于2048,注:在1GB內存的機器上大約是10萬左右,具體數目可以cat /proc/sys/fs/file-max察看,一般來說這個數目和系統內存關系很大。

5.IO效率不隨FD數目增加而線性下降。

傳統的select/poll另一個致命弱點就是當你擁有一個很大的socket集合,不過由于網絡延時,任一時間只有部分的socket是“活躍”的,但是select/poll每次調用都會線性掃描全部的集合,導致效率呈現線性下降。但是epoll不存在這個問題,它只會對“活躍”的socket進行操作—這是因為在內核實現中epoll是根據每個fd上面的callback函數實現的。只有“活躍”的socket才會主動的去調用 callback函數,其他idle狀態socket則不會。

拓展:系統維護一顆紅黑樹(平衡搜索二叉樹:穩定)存儲監視描述符,和一張鏈表存儲就緒的描述符。當每次注冊或修改,刪除新的文件描述符到epoll句柄中時,就會增加一個描述符到這課紅黑樹中(增刪改查簡單),當返回時檢測鏈表上是否有節點,有節點則拷貝到用戶傳給它的那個描述符數組中。

epoll對于select和poll相比,顯著優點是:

(1)select,poll實現需要自己不斷輪詢所有fd集合,直到設備就緒,期間可能要睡眠和喚醒多次交替。而epoll其實也需要調用epoll_wait不斷輪詢就緒鏈表,期間也可能多次睡眠和喚醒交替,但是它是設備就緒時,調用回調函數,把就緒fd放入就緒鏈表中,并喚醒在epoll_wait中進入睡眠的進程。雖然都要睡眠和交替,但是select和poll在“醒著”的時候要遍歷整個fd集合,而epoll在“醒著”的時候只要判斷一下就緒鏈表是否為空就行了,這節省了大量的CPU時間。這就是回調機制帶來的性能提升。

(2)select,poll每次調用都要把fd集合從用戶態往內核態拷貝一次,并且要把current往設備等待隊列中掛一次,而epoll只要一次拷貝,而且把current往等待隊列上掛也只掛一次(在epoll_wait的開始,注意這里的等待隊列并不是設備等待隊列,只是一個epoll內部定義的等待隊列)。這也能節省不少的開銷。

####5. 總結:

poll和epoll適用于關心描述符個數多的應用程序。其中epoll對于每次只有很少描述符就緒很有優勢(采用回調機制監測描述符就緒)。

綜上:epoll是上面三個函數中效率最高的。

(5) Epoll的ET模式和LT模式(ET的非阻塞)

LT(level triggered)是缺省的工作方式,并且同時支持block和no-block socket.在這種做法中,內核告訴你一個文件描述符是否就緒了,然后你可以對這個就緒的fd進行IO操作。如果你不作任何操作,內核還是會繼續通知你的,所以,這種模式編程出錯誤可能性要小一點。傳統的select/poll都是這種模型的代表.

ET(edge-triggered)是高速工作方式,只支持no-block socket。在這種模式下,當描述符從未就緒變為就緒時,內核通過epoll告訴你。然后它會假設你知道文件描述符已經就緒,并且不會再為那個文件描述符發送更多的就緒通知,直到你做了某些操作導致那個文件描述符不再為就緒狀態了(比如,你在發送,接收或者接收請求,或者發送接收的數據少于一定量時導致了一個EWOULDBLOCK 錯誤)。

(6) 查詢進程占用CPU的命令(注意要了解到used,buf,cache代表意義)

很常見TOP命令,里面的參數分析如下:

used:已經使用物理內存的大小

total:總的物理內存

free:空閑的物理內存

buffers:用于內核緩存的內存大小

cache:緩沖的交換空間的大小

buffers于cached區別:buffers指的是塊設備的讀寫緩沖區,cached指的是文件系統本身的頁面緩存。他們都是Linux系統底層的機制,為了加速對磁盤的訪問。

(7) linux的其他常見命令(kill,find,cp等等)

kill命令用來刪除執行中的程序或工作。kill可將指定的信息送至程序

kill 3268

1

find命令用來在指定目錄下查找文件。任何位于參數之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。并且將查找到的子目錄和文件全部進行顯示。

find /home -name "*.txt"

1

cp命令用來將一個或多個源文件或者目錄復制到指定的目的文件或目錄。它可以將單個源文件復制成一個指定文件名的具體的文件或一個已經存在的目錄下。cp命令還支持同時復制多個文件,當一次復制多個文件時,目標文件參數必須是一個已經存在的目錄,否則將出現錯誤。

cp file /usr/men/tmp/file1

1

(8) shell腳本用法

Shell是一種腳本語言,那么,就必須有解釋器來執行這些腳本。linux中最常見的解釋器就是bash。

腳本語言是不需要編譯的,是一種解釋型語言,可以直接通過解釋器解釋運行。

(9) 硬連接和軟連接的區別

硬連接指通過索引節點來進行連接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什么類型都給它分配一個編號,稱為索引節點號(Inode Index)。在Linux中,多個文件名指向同一索引節點是存在的。比如:A是B的硬鏈接(A和B都是文件名),則A的目錄項中的inode節點號與B的目錄項中的inode節點號相同,即一個inode節點對應兩個不同的文件名,兩個文件名指向同一個文件,A和B對文件系統來說是完全平等的。刪除其中任何一個都不會影響另外一個的訪問。

另外一種連接稱之為符號連接(Symbolic Link),也叫軟連接。軟鏈接文件有類似于Windows的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。比如:A是B的軟鏈接(A和B都是文件名),A的目錄項中的inode節點號與B的目錄項中的inode節點號不相同,A和B指向的是兩個不同的inode,繼而指向兩塊不同的數據塊。但是A的數據塊中存放的只是B的路徑名(可以根據這個找到B的目錄項)。A和B之間是“主從”關系,如果B被刪除了,A仍然存在(因為兩個是不同的文件),但指向的是一個無效的鏈接。

(10) 文件權限怎么看(rwx)

r:表示的是讀,4

w:表示的是寫,2,

x:表示的是執行,1

組合:通過4、2、1的組合,得到以下幾種權限: 0(沒有權限) 4(讀取權限) 5(4+1 | 讀取+執行) 6(4+2 | 讀取+寫入) 7(4+2+1 | 讀取+寫入+執行)

從左至右:

1-3位數字代表文件所有者的權限

4-6位數字代表同組用戶的權限

7-9數字代表其他用戶的權限

例如chmod 777 a,

(11) 文件的三種時間(mtime, atime,ctime),分別在什么時候會改變

一個文件也有三種時間,分別是:訪問時間atime、修改時間mtime、狀態時間ctime,分別為Access time、Modify time、Change time

訪問時間:對文件進行一次讀操作,它的訪問時間就會改變。例如像:cat、more等操作,但是像之前的state還有ls命令對atime是不會有影響的;

修改時間:文件的內容被最后一次修改的時間,我們經常用的ls -l命令顯示出來的文件時間就是這個時間,當用vim對文件進行編輯之后保存,它的mtime就會相應的改變;

狀態時間:當文件的狀態被改變的時候,狀態時間就會隨之改變,例如當使用chmod、chown等改變文件屬性的操作是會改變文件的ctime的。

(12) Linux監控網絡帶寬的命令,查看特定進程的占用網絡資源情況命令

監控總體帶寬使用――nload、bmon、slurm、bwm-ng、cbm、speedometer和netload

監控總體帶寬使用(批量式輸出)――vnstat、ifstat、dstat和collectl

每個套接字連接的帶寬使用――iftop、iptraf、tcptrack、pktstat、netwatch和trafshow

每個進程的帶寬使用――nethogs

————————————————

版權聲明:本文為CSDN博主「祚兒瘋」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/u012414189/article/details/83830848

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女