Linux相關知識練習03

Linux相關知識練習
每日幾題:

1. 基礎命令

telnet curl wget分別可以測試哪些協議的應用的連通性?free 命令各項指標的意義和聯繫,怎麼樣釋放cache?

命令 協議
telnet tcp/ip,telnet就是查看某個端口是否可訪問
curl http,Curl命令在linux操作系統中經常來測試網絡和url的聯通性,模擬正常的網絡訪問。支持HTTP、HTTPS、ftp等衆多協議,還支持POST、cookies、認證、從指定偏移處下載部分文件等功能
wget tcp/ip wget 是一個從網絡上自動下載文件的自由工具,支持通過 HTTP、HTTPS、FTP 三個最常見的 TCP/IP協議 下載,並可以使用 HTTP 代理

free 命令相對於top 提供了更簡潔的查看系統內存使用情況
在這裏插入圖片描述
在這裏插入圖片描述
buffer 與cache 的區別

兩者都是==RAM==中的數據。簡單來說,buffer是即將要被寫入磁盤的,cache是被從磁盤中讀出來的。
buffer是用於存儲速度不同步的設備或優先級不同的設備之間傳輸數據的區域。緩衝(buffers)是根據磁盤的讀寫設計的,把分散的寫操作集中進行,減少磁盤碎片和硬盤的反覆尋道,從而提高系統性能。

cache經常被用在磁盤的I/O請求上, 如果有多個進程都要訪問某個文件,於是該文件便被做成cache以方便下次被訪問,這樣可提供系統性能。緩存(cached)是把讀取過的數據保存起來,重新讀取時若命中(找到需要的數據)就不要去讀硬盤了,若沒有命中就讀硬盤。其中的數據會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往後排,直至從中刪除。

手動釋放緩存

/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做爲與kernel實體間進行通信的一種手段。

也就是說可以通過修改/proc中的文件,來對當前kernel的行爲做出調整。那麼我們可以通過調整/proc/sys/vm/drop_caches來釋放內存。操作如下:

/proc/sys/vm/drop_caches的值,默認爲0
手動執行sync命令(描述:sync 命令運行 sync 子例程。如果必須停止系統,則運行sync 命令以確保文件系統的完整性。sync 命令將所有未寫的系統緩衝區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件)

只是清理page cache
#> sync; echo 1 > /proc/sys/vm/drop_caches

清理dentries and inodes
#> sync; echo 2 > /proc/sys/vm/drop_caches
#> sync; echo 2 > /proc/sys/vm/drop_caches

清理PageCache, dentries and inodes
#> sync; echo 3 > /proc/sys/vm/drop_caches

特別注意: 在生產系統中,強烈建議不要使用echo 3 > /proc/sys/vm/drop_caches, 而是使用echo 1 > /proc/sys/vm/drop_caches。 echo 3 > /proc/sys/vm/drop_caches 可能造成運行系統的異常。

2. 腳本題

請寫一個腳本,實現以下功能。輸入一個字符串,判斷這個字符串是不是一個ip,如果是請輸出是A類,B類,還是C類,並將ip追加到一個ip_check_result.txt;如果不是請輸出不是ip。

#! /bin/bash
read -p "please input a ipaddress: " ipadd
var1=`echo $ipadd | awk -F'.' '{print $1}'`
var2=`echo $ipadd | awk -F'.' '{print $2}'`
var3=`echo $ipadd | awk -F'.' '{print $3}'`
var4=`echo $ipadd | awk -F'.' '{print $4}'`
for i in $var1 $var2 $var3 $var4

do
if [[ $i -lt 0 ]] || [[ $i -gt 255 ]] || [[ $i -eq null ]];then
  echo "The string $ipadd is a wrong ip!" && exit 0
fi
done
if [[ $var1 -gt 0 ]] && [[ $var1 -le 127 ]];then
  echo "Class A: $ipadd" && echo "Class A: $ipadd">>ip_check_result.txt
elif [[ $var1 -ge 128 ]] && [[ $var1 -lt 192 ]];then
  echo "Class B: $ipadd"&& echo "Class B: $ipadd" >>ip_check_result.txt
elif [[ $var1 -ge 192 ]] && [[ $var1 -lt 224 ]];then
  echo "Class C: $ipadd" && echo "Class C: $ipadd">>ip_check_result.txt

fi                       

在這裏插入圖片描述

3. 概念題

進程和線程的區別,多進程之間通信方式,多進程和多線程應用的特點和優劣。

進程和線程的區別:
線程與進程的區別可以歸納爲以下4點:

地址空間和其它資源(如打開文件):進程間相互獨立,同一進程的各線程間共享。某進程內的線程在其它進程不可見。
通信:進程間通信IPC,線程間可以直接讀寫進程數據段(如全局變量)來進行通信——需要進程同步和互斥手段的輔助,以保證數據的一致性。
調度和切換:線程上下文切換比進程上下文切換要快得多。
在多線程操作系統中,進程不是一個可執行的實體。

在這裏插入圖片描述
進程間通信(IPC,InterProcess Communication)是指在不同進程之間傳播或交換信息。
IPC的方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket、Streams等。其中 Socket和Streams支持不同主機上的兩個進程IPC。

一、管道
管道,通常指無名管道,是 UNIX 系統IPC最古老的形式。

1、特點:

它是半雙工的(即數據只能在一個方向上流動),具有固定的讀端和寫端。

它只能用於具有親緣關係的進程之間的通信(也是父子進程或者兄弟進程之間)。

它可以看成是一種特殊的文件,對於它的讀寫也可以使用普通的read、write 等函數。但是它不是普通的文件,並不屬於其他任何文件系統,並且只存在於內存中

二、FIFO
FIFO,也稱爲命名管道,它是一種文件類型。

1、特點

FIFO可以在無關的進程之間交換數據,與無名管道不同。

FIFO有路徑名與之相關聯,它以一種特殊設備文件形式存在於文件系統中。

三、消息隊列
消息隊列,是消息的鏈接表,存放在內核中。一個消息隊列由一個標識符(即隊列ID)來標識。

1、特點

消息隊列是面向記錄的,其中的消息具有特定的格式以及特定的優先級。

消息隊列獨立於發送與接收進程。進程終止時,消息隊列及其內容並不會被刪除。

消息隊列可以實現消息的隨機查詢,消息不一定要以先進先出的次序讀取,也可以按消息的類型讀取。

四、信號量
信號量(semaphore)與已經介紹過的 IPC 結構不同,它是一個計數器。信號量用於實現進程間的互斥與同步,而不是用於存儲進程間通信數據。

1、特點

信號量用於進程間同步,若要在進程間傳遞數據需要結合共享內存。

信號量基於操作系統的 PV 操作,程序對信號量的操作都是原子操作。

每次對信號量的 PV 操作不僅限於對信號量值加 1 或減 1,而且可以加減任意正整數。
支持信號量組。

五、共享內存
共享內存(Shared Memory),指兩個或多個進程共享一個給定的存儲區。

1、特點

共享內存是最快的一種 IPC,因爲進程是直接對內存進行存取。

因爲多個進程可以同時操作,所以需要進行同步。

信號量+共享內存通常結合在一起使用,信號量用來同步對共享內存的訪問。

五種通訊方式總結

1.管道:速度慢,容量有限,只有父子進程能通訊    

2.FIFO:任何進程間都能通訊,但速度慢    

3.消息隊列:容量受到系統限制,且要注意第一次讀的時候,要考慮上一次沒有讀完數據的問題    

4.信號量:不能傳遞複雜消息,只能用來同步    

5.共享內存區:能夠很容易控制容量,速度快,但要保持同步,比如一個進程在寫的時候,另一個進程要注意讀寫的問題,相當於線程中的線程安全,當然,共享內存區同樣可以用作線程間通訊,不過沒這個必要,線程間本來就已經共享了同一進程內的一塊內存
多進程和多線程應用的特點和優劣:
方面 多進程 多線程
數據共享 數據私有,每個進程獨立佔有 共享進程的數據
內存 CPU 佔用內存多,cpu使用率較低 佔用內存少,cpu使用率較高
可靠性 進程間資源隔離,是私有的,所以可靠性高 在進程內運行,一個異常會導致整個進程異常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章