Linux運維周作業(yè)四(7.1-7.7)

1. 使用while read line和/etc/passwd,計算用戶id總和。

2. 總結(jié)索引數(shù)組和關(guān)聯(lián)數(shù)組,字符串處理,高級變量使用及示例。

索引數(shù)組:

引用特定的數(shù)組元素

${ARRAY_NAME[INDEX]}

注:如果省略[INDEX]表示引用下標(biāo)為0的元素

引用數(shù)組所有元素

${ARRAY_NAME[*]}

${ARRAY_NAME[@]}

數(shù)組個數(shù)

${#ARRAY_NAME[*]}

數(shù)組下標(biāo)

${!ARRAY_NAME[*]}

關(guān)聯(lián)數(shù)組:

注意:關(guān)聯(lián)數(shù)組必須先聲明再調(diào)用

declare -A ARRAY_NAME

ARRAY_NAME=([idx_name1]='val1' [idx_name2]='val2‘...)

基于偏移量取字符串


基于模式取字符串

      ${var#*word}:刪除從開頭到第一個word之間所有的字符(懶惰模式)

      ${var##*word}:刪除從開頭到最后一個word之間所有的字符(貪婪模式)

      ${var%word*}:刪除從結(jié)尾到第一個word之間所有的字符

      ${var%%word*}:刪除從結(jié)尾到最后一個word之間所有的字符

查找替換

      ${var/pattern/substr}:查找變量var中第一次被pattern匹配的字符串,并替換為substr

      ${var//pattern/substr}:查找變量var中所有被pattern匹配的字符串,并替換為substr

      ${var/#pattern/substr}:查找變量var中行首被pattern匹配的字符串,并替換為substr

      ${var/%pattern/substr}:查找變量var中行尾被pattern匹配的字符串,并替換substr

小寫轉(zhuǎn)換成大寫:

大寫轉(zhuǎn)換成小寫:

高級變量用法:

eval會執(zhí)行兩次,第一個替換變量,第二次執(zhí)行命令

變量值傳遞

3. 求10個隨機數(shù)的最大值與最小值。

4. 使用遞歸調(diào)用,完成階乘算法實現(xiàn)。

3. 解析進程和線程的區(qū)別?

進程是操作系統(tǒng)分配資源的最小單位

線程是程序執(zhí)行的CPU調(diào)度的最小單位

一個進程由一個或多個線程組成,線程是一個進程中代碼的不同執(zhí)行路線;

進程之間相互獨立,但同一進程下的各個線程之間共享程序的內(nèi)存空間(包括代碼段、數(shù)據(jù)集、堆等)及一些進程級的資源(如打開文件和信號),某進程內(nèi)的線程在其它進程不可見;

調(diào)度和切換:線程上下文切換比進程上下文切換要快得多。

4. 解析進程的結(jié)構(gòu)。

內(nèi)核把進程存放在叫做任務(wù)隊列(task list)的雙向循環(huán)鏈表中

鏈表中的每一項都是類型為task_struct,稱為進程控制塊(Processing Control Block),PCB中包含一

個具體進程的所有信息

進程控制塊PCB包含信息:

進程id、用戶id和組id

程序計數(shù)器

進程的狀態(tài)(有就緒、運行、阻塞)

進程切換時需要保存和恢復(fù)的CPU寄存器的值

描述虛擬地址空間的信息

描述控制終端的信息

當(dāng)前工作目錄

文件描述符表,包含很多指向file結(jié)構(gòu)體的指針

進程可以使用的資源上限(ulimit –a命令可以查看)

輸入輸出狀態(tài):配置進程使用I/O設(shè)備

5. 解析磁盤中的代碼如何在計算機上運行的?

每個進程都包括5種不同的數(shù)據(jù)段

代碼段:用來存放可執(zhí)行文件的操作指令,也就是說是它是可執(zhí)行程序在內(nèi)存中的鏡像。代碼段需

要防止在運行時被非法修改,所以只準(zhǔn)許讀取操作,而不允許寫入(修改)操作——它是不可寫的

數(shù)據(jù)段:用來存放可執(zhí)行文件中已初始化全局變量,換句話說就是存放程序靜態(tài)分配的變量和全局

變量BSS段:Block Started by Symbol”的縮寫,意為“以符號開始的塊,BSS段包含了程序中未初始化的

全局變量,在內(nèi)存中 bss段全部置零

堆(heap):存放數(shù)組和對象,堆是用于存放進程運行中被動態(tài)分配的內(nèi)存段,它的大小并不固

定,可動態(tài)擴張或縮減。當(dāng)進程調(diào)用malloc等函數(shù)分配內(nèi)存時,新分配的內(nèi)存就被動態(tài)添加到堆上

(堆被擴張);當(dāng)利用free等函數(shù)釋放內(nèi)存時,被釋放的內(nèi)存從堆中被剔除(堆被縮減)

棧(stack):棧是用戶存放程序臨時創(chuàng)建的局部變量,也就是說我們函數(shù)括弧“{}”中定義的變量

(但不包括static聲明的變量,static意味著在數(shù)據(jù)段中存放變量)。除此以外,在函數(shù)被調(diào)用時,

其參數(shù)也會被壓入發(fā)起調(diào)用的進程棧中,并且待到調(diào)用結(jié)束后,函數(shù)的返回值也會被存放回棧中。

由于棧的后進先出特點,所以棧特別方便用來保存/恢復(fù)調(diào)用現(xiàn)場。可以把堆??闯梢粋€寄存、交

換臨時數(shù)據(jù)的內(nèi)存區(qū)

喝多了吐就是棧

吃多了拉就是隊列

6. 總結(jié)OOM原理,及處理方法。

OOM 即 Out Of Memory,“內(nèi)存用完了”,在情況在java程序中比較常見。系統(tǒng)會選一個進程將之殺死,

在日志messages中看到類似下面的提示

Jul 10 10:20:30 kernel: Out of memory: Kill process 9527 (java) score 88 or sacrifice child

當(dāng)JVM因為沒有足夠的內(nèi)存來為對象分配空間并且垃圾回收器也已經(jīng)沒有空間可回收時,就會拋出這個

error,因為這個問題已經(jīng)嚴(yán)重到不足以被應(yīng)用處理)。

原因:

給應(yīng)用分配內(nèi)存太少:比如虛擬機本身可使用的內(nèi)存(一般通過啟動時的VM參數(shù)指定)太少。

應(yīng)用用的太多,并且用完沒釋放,浪費了。此時就會造成內(nèi)存泄露或者內(nèi)存溢出。

使用的解決辦法:

1,限制java進程的max heap,并且降低java程序的worker數(shù)量,從而降低內(nèi)存使用

2,給系統(tǒng)增加swap空間

7. 結(jié)合進程管理命令,說明進程各種狀態(tài)。

進程的基本狀態(tài)

創(chuàng)建狀態(tài):進程在創(chuàng)建時需要申請一個空白PCB(process control block進程控制塊),向其中填寫

控制和管理進程的信息,完成資源分配。如果創(chuàng)建工作無法完成,比如資源無法滿足,就無法被調(diào)

度運行,把此時進程所處狀態(tài)稱為創(chuàng)建狀態(tài)

就緒狀態(tài):進程已準(zhǔn)備好,已分配到所需資源,只要分配到CPU就能夠立即運行

執(zhí)行狀態(tài):進程處于就緒狀態(tài)被調(diào)度后,進程進入執(zhí)行狀態(tài)

阻塞狀態(tài):正在執(zhí)行的進程由于某些事件(I/O請求,申請緩存區(qū)失?。┒鴷簳r無法運行,進程受

到阻塞。在滿足請求時進入就緒狀態(tài)等待系統(tǒng)調(diào)用

終止?fàn)顟B(tài):進程結(jié)束,或出現(xiàn)錯誤,或被系統(tǒng)終止,進入終止?fàn)顟B(tài)。無法再執(zhí)行

狀態(tài)之間轉(zhuǎn)換六種情況

運行——>就緒:1,主要是進程占用CPU的時間過長,而系統(tǒng)分配給該進程占用CPU的時間是有限的;

2,在采用搶先式優(yōu)先級調(diào)度算法的系統(tǒng)中,當(dāng)有更高優(yōu)先級的進程要運行時,該進程就被迫讓出CPU,

該進程便由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)

就緒——>運行:運行的進程的時間片用完,調(diào)度就轉(zhuǎn)到就緒隊列中選擇合適的進程分配CPU

運行——>阻塞:正在執(zhí)行的進程因發(fā)生某等待事件而無法執(zhí)行,則進程由執(zhí)行狀態(tài)變?yōu)樽枞麪顟B(tài),如發(fā)

生了I/O請求

阻塞——>就緒:進程所等待的事件已經(jīng)發(fā)生,就進入就緒隊列

以下兩種狀態(tài)是不可能發(fā)生的:

阻塞——>運行:即使給阻塞進程分配CPU,也無法執(zhí)行,操作系統(tǒng)在進行調(diào)度時不會從阻塞隊列進行挑

選,而是從就緒隊列中選取

0 – Heuristic overcommit handling. 這是缺省值,它允許overcommit,但過于明目張膽的

overcommit會被拒絕,比如malloc一次性申請的內(nèi)存大小就超過了系統(tǒng)總內(nèi)存。Heuristic的意思是“試探

式的”,內(nèi)核利用某種算法猜測你的內(nèi)存申請是否合理,它認(rèn)為不合理就會拒絕overcommit。

1 – Always overcommit. 允許overcommit,對內(nèi)存申請來者不拒。內(nèi)核執(zhí)行無內(nèi)存過量使用處理。使

用這個設(shè)置會增大內(nèi)存超載的可能性,但也可以增強大量使用內(nèi)存任務(wù)的性能。

2 – Don’t overcommit. 禁止overcommit。 內(nèi)存拒絕等于或者大于總可用 swap 大小以及

overcommit_ratio 指定的物理 RAM 比例的內(nèi)存請求。如果希望減小內(nèi)存過度使用的風(fēng)險,這個設(shè)置就是

最好的。就緒——>阻塞:就緒態(tài)根本就沒有執(zhí)行,談不上進入阻塞態(tài)

進程更多的狀態(tài):

運行態(tài):running

就緒態(tài):ready

睡眠態(tài):分為兩種,可中斷:interruptable,不可中斷:uninterruptable

停止態(tài):stopped,暫停于內(nèi)存,但不會被調(diào)度,除非手動啟動

僵死態(tài):zombie,僵尸態(tài),結(jié)束進程,父進程結(jié)束前,子進程不關(guān)閉,殺死父進程可以關(guān)閉僵死

態(tài)的子進程

8. 說明IPC通信和RPC通信實現(xiàn)的方式。

同一主機

不同主機

9. 通過mkfifo, cat, 來解釋秒殺的并發(fā)問題,如何通過隊列解決的?最好結(jié)合圖形。說明消息隊列的作用?

利用管道文件實現(xiàn) IPC

#在另一個終端可以從文件中讀取數(shù)據(jù)

10. 總結(jié)Linux,前臺和后臺作業(yè)的區(qū)別,并說明如何在前臺和后臺中進行狀態(tài)轉(zhuǎn)換。

Linux的作業(yè)控制

前臺作業(yè):通過終端啟動,且啟動后一直占據(jù)終端

后臺作業(yè):可通過終端啟動,但啟動后即轉(zhuǎn)入后臺運行(釋放終端)

讓作業(yè)運行于后臺

運行中的作業(yè): Ctrl+z

尚未啟動的作業(yè): COMMAND &

后臺作業(yè)雖然被送往后臺運行,但其依然與終端相關(guān);退出終端,將關(guān)閉后臺作業(yè)。如果希望送往后臺

后,剝離與終端的關(guān)系

nohup COMMAND &>/dev/null &

screen;COMMAND

tmux;COMMAND

查看當(dāng)前終端所有作業(yè):[root@rocky8 2024-07-01]# jobs

作業(yè)控制:

fg [[%]JOB_NUM]:把指定的后臺作業(yè)調(diào)回前臺

bg [[%]JOB_NUM]:讓送往后臺的作業(yè)在后臺繼續(xù)運行

kill [%JOB_NUM]: 終止指定的作業(yè)

11. 總結(jié)內(nèi)核設(shè)計流派及特點。

單內(nèi)核設(shè)計:把所有功能模塊集成于同一個程序(Linux),支持模塊化如進程調(diào)度,內(nèi)存管理,文件系統(tǒng),硬件驅(qū)動等,支持模塊的動態(tài)裝載和卸載

微內(nèi)核設(shè)計:每種功能模塊使用一個單獨子系統(tǒng)實現(xiàn)(Windows),把一些應(yīng)用放到了用戶空間,服務(wù)與服務(wù)之間隔離,單個服務(wù)故障或者被攻擊,也不會導(dǎo)致操作系統(tǒng)掛掉

12. 總結(jié)rocky 啟動流程,grub工作流程

1. 加載BIOS的硬件信息,獲取第一個啟動設(shè)備2. 讀取第一個啟動設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動信息

3. 加載核心操作系統(tǒng)的核心信息,核心開始解壓縮,并嘗試驅(qū)動所有的硬件設(shè)備

4. 核心執(zhí)行init程序,并獲取默認(rèn)的運行信息

5. init程序執(zhí)行/etc/rc.d/rc.sysinit文件,重新掛載根文件系統(tǒng)

6. 啟動核心的外掛模塊

7. init執(zhí)行運行的各個批處理文件(scripts)

8. init執(zhí)行/etc/rc.d/rc.local

9. 執(zhí)行/bin/login程序,等待用戶登錄

10. 登錄之后開始以Shell控制主機

GRUB 啟動階段

primary boot loader :

1st stage:MBR的前446個字節(jié)

1.5 stage:MBR 之后的扇區(qū),讓stage1中的bootloader能識別stage2所在的分區(qū)上的文件系統(tǒng)

secondary boot loader :2nd stage,分區(qū)文件/boot/grub/

13. 手寫chkconfig服務(wù)腳本,可以實現(xiàn)服務(wù)的開始,停止,重啟。

啟動服務(wù)
停止服務(wù)
重啟服務(wù)

14. 總結(jié)systemd服務(wù)配置文件

systemd服務(wù)配置文件由三部分組成

    [Unit]:定義與Unit類型相關(guān)的通用選項,用于提供unit描述消息,unit行為,依賴關(guān)系

    [Service]:與特定類型相關(guān)的專用選項

    [Install]:定義由systemclt enable/disable命令在實現(xiàn)服務(wù)開機啟動或不啟動時用到的一些選項

    Unit段常用選項

      Description:描述信息

      After:定義unit的啟動次序,表示當(dāng)前unit應(yīng)該晚于哪些unit啟動

      Requires:依賴到的其他units,被依賴的units無法激活時,當(dāng)前unit也無法激活

      Wants:依賴到的其他units

      Conflicts:定義units間的沖突關(guān)系

    Service段常用選項

      Type:定義影響ExecStart及相關(guān)參數(shù)的功能的unit進程啟動類型

      ExecStart:指明啟動unit要運行命令或腳本的絕對路徑

      ExecStop:指明停止unit要運行的命令或腳本

    Install段常用選項

      Alias:別名,可使用systemctl command Alias.service

      RequiredBy:被哪些units所依賴

      WantedBy:被哪些units所依賴

      Also:安裝被服務(wù)的時候還要安裝別的相關(guān)服務(wù)

15. 總結(jié)system啟動流程

POST加電自檢

  Bootloader,grub2啟動引導(dǎo)程序:/etc/grub.d,/etc/default/grub,/boot/grub2/grub.cfg

  解壓initramfs文件,加載驅(qū)動模塊,掛載根文件系統(tǒng)

  加載虛擬根中的內(nèi)核

  虛擬根的內(nèi)核初始化,運行第一個進程systemd

  執(zhí)行initrd.target所有單元

  從initramfs根文件系統(tǒng)切換到磁盤根目錄

  systemd執(zhí)行默認(rèn)target配置,配置文件/etc/systemd/system/defaul.target

  systemd執(zhí)行sysinit.target初始化系統(tǒng)及basic.target準(zhǔn)備操作系統(tǒng)

  systemd啟動multi-user.target下的本機與服務(wù)器服務(wù)

  systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.local

  systemd執(zhí)行multi-user.target下的getty.target及登錄服務(wù)

  systemd執(zhí)行g(shù)raphical需要的服務(wù)

16. 總結(jié)awk工作原理,awk命令,選項,示例。

 awk工作原理

 第一步:執(zhí)行BEGIN{action}語句

 第二步:從文件或標(biāo)準(zhǔn)輸入中讀取一行,然后執(zhí)行pattern{action}語句,與sed一樣逐行掃描處理,從第一行到最后一行重復(fù)這個過程,知道全部被讀取完畢

 第三步:文件讀取完畢后,執(zhí)行END{action}語句

 格式:awk [選項] ‘program’ [var=X] filename

 選項:

 -F:指定輸入的字段分隔符,默認(rèn)為若干個連續(xù)空白符

17. 總結(jié)awk的數(shù)組,函數(shù)。

awk數(shù)組為關(guān)聯(lián)數(shù)組

  關(guān)聯(lián)下標(biāo)可以為任意字符串,字符串要使用雙引號

  如果某數(shù)組元素不存在,在引用時,awk會自動創(chuàng)建此元素,并將其值初始化為空串

  awk函數(shù)分為內(nèi)置函數(shù)和自定義函數(shù)

    數(shù)值處理

      rand():返回1和0之間隨機數(shù)

      srand():配置rand函數(shù),生成隨機數(shù)種子

      int():返回整數(shù)

    字符串處理

      length(X):返回指定字符串長度

      sub(r,s,x):對x字符串搜索r表示模式匹配的內(nèi)容,并將第一個匹配內(nèi)容替換為s

      gsub(r,s,x):對x字符串搜索r,并將匹配的所有內(nèi)容替換為s

      split(s,array,r):對r為分隔符,切割字符串s,并將切割后的結(jié)果保存至array數(shù)組

    自定義函數(shù)

      格式

      function? name(形參){

        命令

        return var

????????????????????????}

18. 總結(jié)ca管理相關(guān)的工具,根據(jù)使用場景總結(jié)示例。

創(chuàng)建CA相關(guān)文件

    mkdir -p /etc/pki/CA/{certs,netwcerts,crl,private}

    touch /etc/pki/CA/index.txt

    echo 01 > /etc/pki/CA/serial

  生成CA私鑰

    (umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem

  生成CA自簽名證書

    openssl req -new -x509 -key /etc/pki/CA/cakey.pem -out /etc/pki/CA/cacert.pem -days Num

  生成用戶私鑰

    (umask 066;openssl genrsa -out filename)

  生成用戶證書請求文件

    openssl req -new -in filename -out filename

  頒發(fā)用戶證書

    openssl ca -in filename -out filename -days Num

  查看證書信息

    openssl x509 -in filename -noout -text

  吊銷證書

    echo 01 > /etc/pki/CA/crlnumber

    openssl ca -revoke /etc/pki/CA/newcerts/Num.pem

    openssl ca gencrl -out /etc/pki/CA/crl.pem

19. 總結(jié)對稱加密和非對稱加密算法和用openssl簽發(fā)證書步驟

對稱加密算法

    加密和解密使用同一個密鑰

    特性:

      加密、解密使用同一個密鑰,效率高

      將原始數(shù)據(jù)分割成固定大小的塊,逐個進行加密

    缺陷:

      密鑰多

      密鑰分發(fā)

      數(shù)據(jù)來源無法確認(rèn)

    常用對稱加密算法:

      DES,3DES,AES

非對稱加密算法

    密鑰成對出現(xiàn)

    公鑰:公開給所有人

    私鑰:自己留存,保證私密性

    特點:用公鑰加密,只能使用與之匹配的私鑰解密,反之亦然

    缺陷:

      密鑰長,算法復(fù)雜

      加密解密效率低

    常見算法:

      RSA,DSA

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容