2023-07-29 第四周

一、 自定義寫(xiě)出10個(gè)定時(shí)任務(wù)的示例:比如每周三凌晨三點(diǎn)執(zhí)行date命令要求盡量的覆蓋各種場(chǎng)景

[11:07:55 root@rocky8 data]#crontab -e    #創(chuàng)建任務(wù)
crontab: installing new crontab
[11:32:22 root@rocky8 data]#crontab -l      #查看任務(wù)
#PATH變量補(bǔ)全
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#每周三凌晨三點(diǎn)執(zhí)行date命令寫(xiě)入a.txt
0  3  *  *  3 date >> /data/a.txt
#每三個(gè)小時(shí)執(zhí)行一次echo寫(xiě)到a.txt
0 */3 *  *  * echo "三個(gè)小時(shí)過(guò)去了" >> a.txt
#每小時(shí)的第一分鐘執(zhí)行一次echo寫(xiě)入到a.txt
1  *  *  *  * echo "每小時(shí)的第一分鐘" >> a.txt
#每個(gè)月的20到25號(hào)或者每周的周一周五執(zhí)行一次echo寫(xiě)入到a.txt
*  *  20-25  *  1,5 echo "這是每個(gè)月的20-25號(hào),或者是周一,周五" >> a.txt
#11月每天的6-12點(diǎn)之間每隔兩小時(shí)執(zhí)行/app/bin/test.sh
0  6-12/2 * 11 * /app/bin/test.sh
#在每天的5,7,9,11點(diǎn)整執(zhí)行
0  5,7,9,11 *  *  * /app/bin/test.sh

二、圖文并茂說(shuō)明Linux進(jìn)程和內(nèi)存概念

進(jìn)程

Process: 運(yùn)行中的程序的一個(gè)副本,是被載入內(nèi)存的一個(gè)指令集合,是資源分配的單位

  • 進(jìn)程ID(Process ID,PID)號(hào)碼被用來(lái)標(biāo)記各個(gè)進(jìn)程
  • UID、GID、和SELinux語(yǔ)境決定對(duì)文件系統(tǒng)的存取和訪問(wèn)權(quán)限
  • 通常從執(zhí)行進(jìn)程的用戶來(lái)繼承
  • 存在生命周期

進(jìn)程創(chuàng)建:

  • init:第一個(gè)進(jìn)程,從 CentOS7 以后為systemd
  • 進(jìn)程:都由其父進(jìn)程創(chuàng)建,fork(),父子關(guān)系,CoW:Copy On Write

進(jìn)程和線程的關(guān)系

進(jìn)程

進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集上的一次動(dòng)態(tài)執(zhí)行的過(guò)程,是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,是應(yīng)用程序運(yùn)行的載體。進(jìn)程是一種抽象的概念,從來(lái)沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)定義。
進(jìn)程的組成

進(jìn)程一般由程序、數(shù)據(jù)集合和進(jìn)程控制塊三部分組成。
程序用于描述進(jìn)程要完成的功能,是控制進(jìn)程執(zhí)行的指令集;數(shù)據(jù)集合是程序在執(zhí)行時(shí)所需要的數(shù)據(jù)和工作區(qū);程序控制塊(Program Control Block,簡(jiǎn)稱PCB),包含進(jìn)程的描述信息和控制信息,是進(jìn)程存在的唯一標(biāo)志。

進(jìn)程具有的特征:
動(dòng)態(tài)性:進(jìn)程是程序的一次執(zhí)行過(guò)程,是臨時(shí)的,有生命期的,是動(dòng)態(tài)產(chǎn)生,動(dòng)態(tài)消亡的;
并發(fā)性:任何進(jìn)程都可以同其他進(jìn)程一起并發(fā)執(zhí)行;
獨(dú)立性:進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位;
結(jié)構(gòu)性:進(jìn)程由程序、數(shù)據(jù)和進(jìn)程控制塊三部分組成。

線程

在早期的操作系統(tǒng)中并沒(méi)有線程的概念,進(jìn)程是能擁有資源和獨(dú)立運(yùn)行的最小單位,也是程序執(zhí)行的最小單
位。任務(wù)調(diào)度采用的是時(shí)間片輪轉(zhuǎn)的搶占式調(diào)度方式,而進(jìn)程是任務(wù)調(diào)度的最小單位,每個(gè)進(jìn)程有各自獨(dú)立的一塊內(nèi)存,使得各個(gè)進(jìn)程之間內(nèi)存地址相互隔離。
后來(lái),隨著計(jì)算機(jī)的發(fā)展,對(duì)CPU的要求越來(lái)越高,進(jìn)程之間的切換開(kāi)銷(xiāo)較大,已經(jīng)無(wú)法滿足越來(lái)越復(fù)雜的程序的要求了。于是就發(fā)明了線程。
線程是程序執(zhí)行中一個(gè)單一的順序控制流程,是程序執(zhí)行流的最小單元,是處理器調(diào)度和分派的基本單位。一個(gè)進(jìn)程可以有一個(gè)或多個(gè)線程,各個(gè)線程之間共享程序的內(nèi)存空間(也就是所在進(jìn)程的內(nèi)存空間)。一個(gè)標(biāo)準(zhǔn)的線程由線程ID、當(dāng)前指令指針(PC)、寄存器和堆棧組成。而進(jìn)程由內(nèi)存空間(代碼、數(shù)據(jù)、進(jìn)程空間、打開(kāi)的文件)和一個(gè)或多個(gè)線程組成。

進(jìn)程和線程的區(qū)別

線程是程序執(zhí)行的最小單位,而進(jìn)程是操作系統(tǒng)分配資源的最小單位;
一個(gè)進(jìn)程由一個(gè)或多個(gè)線程組成,線程是一個(gè)進(jìn)程中代碼的不同執(zhí)行路線;
進(jìn)程之間相互獨(dú)立,但同一進(jìn)程下的各個(gè)線程之間共享程序的內(nèi)存空間(包括代碼段、數(shù)據(jù)集、堆等)及一些進(jìn)
程級(jí)的資源(如打開(kāi)文件和信號(hào)),某進(jìn)程內(nèi)的線程在其它進(jìn)程不可見(jiàn);
調(diào)度和切換:線程上下文切換比進(jìn)程上下文切換要快得多。

查看進(jìn)程樹(shù)

[11:49:15 root@rocky8 data]#pstree -p
systemd(1)─┬─NetworkManager(1003)─┬─{NetworkManager}(1025)    #帶{}的是線程 不帶的是進(jìn)程
           │                      └─{NetworkManager}(1027)
           ├─VGAuthService(997)
           ├─agetty(1314)
           ├─atd(1306)
           ├─auditd(975)───{auditd}(976)
           ├─automount(1262)─┬─{automount}(1309)
           │                 ├─{automount}(1310)
           │                 ├─{automount}(1311)
           │                 ├─{automount}(1323)
           │                 └─{automount}(1326)
           ├─chronyd(1009)
           ├─crond(1300)
           ├─dbus-daemon(1002)
           ├─irqbalance(1001)───{irqbalance}(1004)
           ├─polkitd(1000)─┬─{polkitd}(1070)
           │               ├─{polkitd}(1071)
           │               ├─{polkitd}(1087)
           │               ├─{polkitd}(1088)
           │               └─{polkitd}(1247)
           ├─rsyslogd(1135)─┬─{rsyslogd}(1229)
           │                └─{rsyslogd}(1237)
           ├─sshd(1031)─┬─sshd(1709)───sshd(1711)───bash(1712)───pstree(2055)
           │            └─sshd(1783)───sshd(1785)───bash(1786)
           ├─sssd(999)─┬─sssd_be(1038)
           │           └─sssd_nss(1103)
           ├─systemd(1659)───(sd-pam)(1661)
           ├─systemd-journal(840)
           ├─systemd-logind(1246)
           ├─systemd-udevd(880)
           ├─tuned(1032)─┬─{tuned}(1637)
           │             ├─{tuned}(1645)
           │             ├─{tuned}(1646)
           │             └─{tuned}(1647)
           └─vmtoolsd(998)─┬─{vmtoolsd}(1020)
                           ├─{vmtoolsd}(1021)
                           └─{vmtoolsd}(1081)

用戶和內(nèi)核空間

三、圖文并茂說(shuō)明Linux啟動(dòng)流程

POST--GRUB1階段MBR446--GRUB1.5MBR之后的空間(提供grub2文件所有分區(qū)的文件系統(tǒng))--GRUB2階段(grub.conf)--kernel(initramfs.img)--根分區(qū)--/sbin/init--/etc/inittab--/etc/rc.sysinit--/etc/rc.d/rc--/etc/rcN.d/K,S(/etc/init.d/)--/etc/rc.local--login登錄

CentOS6的啟動(dòng)流程

  1. 加載BIOS的硬件信息,獲取第一個(gè)啟動(dòng)設(shè)備
  2. 讀取第一個(gè)啟動(dòng)設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動(dòng)信息
  3. 加載核心操作系統(tǒng)的核心信息,核心開(kāi)始解壓縮,并嘗試驅(qū)動(dòng)所有的硬件設(shè)備
  4. 核心執(zhí)行init程序,并獲取默認(rèn)的運(yùn)行信息
  5. init程序執(zhí)行/etc/rc.d/rc.sysinit文件,重新掛載根文件系統(tǒng)
  6. 啟動(dòng)核心的外掛模塊
  7. init執(zhí)行運(yùn)行的各個(gè)批處理文件(scripts)
  8. init執(zhí)行/etc/rc.d/rc.local
  9. 執(zhí)行/bin/login程序,等待用戶登錄
  10. 登錄之后開(kāi)始以Shell控制主

CentOS7之后的啟動(dòng)流程

  1. UEFi或BIOS初始化,運(yùn)行POST開(kāi)機(jī)自檢
  2. 選擇啟動(dòng)設(shè)備
  3. 引導(dǎo)裝載程序, centos7是grub2,加載裝載程序的配置文件:
    /etc/grub.d/
    /etc/default/grub
    /boot/grub2/grub.cfg
  4. 加載initramfs驅(qū)動(dòng)模塊
  5. 加載內(nèi)核選項(xiàng)
  6. 內(nèi)核初始化,centos7使用systemd代替init
  7. 執(zhí)行initrd.target所有單元,包括掛載/etc/fstab
  8. 從initramfs根文件系統(tǒng)切換到磁盤(pán)根目錄
  9. systemd執(zhí)行默認(rèn)target配置,配置文件/etc/systemd/system/default.target
  10. systemd執(zhí)行sysinit.target初始化系統(tǒng)及basic.target準(zhǔn)備操作系統(tǒng)
  11. systemd啟動(dòng)multi-user.target下的本機(jī)與服務(wù)器服務(wù)
  12. systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.local
  13. Systemd執(zhí)行multi-user.target下的getty.target及登錄服務(wù)
  14. systemd執(zhí)行g(shù)raphical需要的服務(wù)

四、 自定義一個(gè)systemd服務(wù)定時(shí)去其他服務(wù)器上檢查/tmp/下文件的個(gè)數(shù),如果發(fā)現(xiàn)數(shù)量有變化就記錄變化情況到文件中。

先對(duì)目標(biāo)服務(wù)器進(jìn)行key驗(yàn)證登錄然后再對(duì)目錄進(jìn)行數(shù)量統(tǒng)計(jì)

  1 #!/bin/bash
  2 ssh_login(){
  3 PASS=
  4 rpm -q expect &> /dev/null || yum -y install expect &> /dev/null
  5 if [ ! -e /root/.ssh/id_rsa ];then
  6    ssh-keygen  -t rsa -P "" -f /root/.ssh/id_rsa &> /dev/null
  7 echo "ssh key is created"
  8 fi
  9 while read IP ;do
 10 expect &> /dev/null <<EOF 
 11 set timeout 20
 12 spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$IP
 13 expect {
 14 "yes/no" { send "yes\n";exp_continue }
 15 "password" { send "$PASS\n" }
 16 }
 17 expect eof
 18 EOF
 19 echo $IP is ready
 20 done < /root/hosts.txt
 21 }
 22 
 23 check(){
 24 ssh 10.0.0.8 <<execute
 25 check_file(){
 26   i=0
 27   if [ i=0 ]; then
 28    NUM=`ls /tmp/ |wc -w`
 29    ll /tmp/ > `date "+%Y-%m-%d_%H:%M:%S"`.txt
 30   fi
 31   if [[ `ls /tmp/ |wc -w` != $NUM  ]]; then
 32     ll /tmp/ > `date "+%Y-%m-%d_%H:%M:%S"`.txt
 33     fi
 34 i=$i+1
 35 }
 36 check_file
 37 echo "完畢"
 38 exit
 39 execute
 40 }
 41 ssh_login
 42 check

編寫(xiě)和開(kāi)啟服務(wù)

[16:44:04 root@rocky8 ~]#systemctl enable --now   test
[16:44:06 root@rocky8 ~]#systemctl status test
● test.service - check_file_num
   Loaded: loaded (/usr/lib/systemd/system/test.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Sun 2023-07-30 16:44:07 CST; 1s ago
  Process: 10367 ExecStart=/root/test.sh (code=exited, status=0/SUCCESS)
 Main PID: 10367 (code=exited, status=0/SUCCESS)

7月 30 16:44:06 rocky8.mazhuobo systemd[1]: Started check_file_num.
7月 30 16:44:07 rocky8.mazhuobo test.sh[10367]: 10.0.0.8 is ready
7月 30 16:44:07 rocky8.mazhuobo systemd[1]: test.service: Succeeded.

編寫(xiě)定時(shí)任務(wù)

#PATH變量補(bǔ)全
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#每10分鐘查看一下數(shù)量
*  */10  *  *  *  bash /root/test.sh

五、總結(jié)5個(gè)自我覺(jué)得比較有用的awk的使用場(chǎng)景,比如在什么情況下用awk處理文本效率最高,發(fā)散題,至少寫(xiě)1個(gè)。

1、用NR獲取IP地址

[17:38:06 root@rocky8 ~]#ifconfig eth0 | awk 'NR==2{print $2}'
10.0.0.8

2、用NF獲取磁盤(pán)利用率

[17:43:55 root@rocky8 ~]#df | awk -F"[ %]+" '/^\/dev/{print $(NF-1)}'
5
1
21

3、對(duì)數(shù)字進(jìn)行計(jì)算

[17:52:53 root@rocky8 ~]#cat abc.txt 
1 2 3 4 5
[17:52:59 root@rocky8 ~]#cat abc.txt |awk '{for(i=1;i<=NF;i++){sum+=i};print sum}'
15

4、制作表格

18:02:57 root@rocky8 ~]#awk -F: 'BEGIN{printf "--------------------------------------\n%-20s|%10s|\n--------------------------------------\n","username","uid"}{printf"%-20s|%10d|\n",$1,$3}' /etc/passwd
--------------------------------------
username            |       uid|
--------------------------------------
root                |         0|
bin                 |         1|
daemon              |         2|
adm                 |         3|
lp                  |         4|
sync                |         5|
shutdown            |         6|
halt                |         7|
mail                |         8|
operator            |        11|
games               |        12|
ftp                 |        14|
nobody              |     65534|
dbus                |        81|
systemd-coredump    |       999|
systemd-resolve     |       193|
tss                 |        59|
polkitd             |       998|
unbound             |       997|
sssd                |       996|
sshd                |        74|
ma                  |      1000|
postfix             |        89|
chrony              |       995|
tcpdump             |        72|

5、計(jì)算文件類(lèi)型的出現(xiàn)的次數(shù)

[18:13:02 root@rocky8 ~]#awk -F' +' '/^[^#]/{fs[$3]++}END{for(i in fs){print i,fs[i]}}' /etc/fstab 
swap 1
xfs 3
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一、自定義寫(xiě)出10個(gè)定時(shí)任務(wù)的示例: 比如每周三凌晨三點(diǎn)執(zhí)行data命令,要求盡量的覆蓋各種場(chǎng)景 [19:51:4...
    Linux全套學(xué)習(xí)閱讀 396評(píng)論 0 0
  • 一、Linux內(nèi)核的組成 相關(guān)概念: Linux系統(tǒng)的組成部分:內(nèi)核+根文件系統(tǒng)內(nèi)核功能包括進(jìn)程管理、內(nèi)存管理、網(wǎng)...
    華煉閱讀 552評(píng)論 0 0
  • linux資料總章2.1 1.0寫(xiě)的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,307評(píng)論 2 33
  • 一. 自定義寫(xiě)出10個(gè)定時(shí)任務(wù)的示例: 1.1查看crontab規(guī)則 1.2自定義任務(wù) -每月每天早上8點(diǎn)到晚上2...
    zzzed閱讀 169評(píng)論 0 0
  • 一、選擇題:(20 分,每題2 分) 1、下列哪個(gè)不屬于內(nèi)核的功能? ( A ) A 用戶管理B 內(nèi)存管理C 進(jìn)程...
    xinxin2019閱讀 873評(píng)論 0 0

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