1. 程式人生 > >馬哥教育第二十四至二十六天學習總結

馬哥教育第二十四至二十六天學習總結

進程管理 計劃任務 shell進階1

馬哥教育M28-24天、

1.使用nmcli創建bond, team ,bridge
bond
nmcli connection add con-name bond0 type bond ifname bond0 mode active-backup
nmcli connection add type bond-slave ifname eth2 master bond0
nmcli conncetion add type bond-slave ifname eth3 master bond0
nmcli connection up bond-slave-eth2
nmcli connection up bond-slave-eth3

cat /proc/net/bonding/bond0 查看bond狀態
lsmod |grep bonding

team
nmcli connection add con-name team0 type team ifname team0 config ‘{"runner":{"name":"activebackup"}}‘
nmcli connection add type team-slave ifname eth2 master team0
nmcli connection add type team-slave ifname eth3 master team0

nmcli connection modify team0 ipv4.addresses 8.8.8.9/24
teamdctl team0 state

bridge
nmcli connection add type bridge con-name br0-con ifname br0-con ifname ipv4.method manual ipv4.addresses 8.8.8.6/24
nmcli connection add type bridge-slave ifname eth2 master br0-con
nmcli connection add type bridge-slave ifname eth3 master br0-con

nmcli connection up br0-con
brctl show

hostname
ping x.x.x.x
ping -c1 只ping一個包
ping -w1 錯誤後僅重試1s
ping -s 60000 指定一個包大小
ping -f
思考:在禁Ping情況下,實際是icmp包協議被禁止,但是可以通過tcp協議方式去Ping不會關閉的某些端口如80,443等-- 實用工具:tnsping 工作在windows下(可以測試網絡穩定性和丟包率); hping3; nmap(只能實現一次全網所描,不能測試網絡穩定性和丟包率)

ftp lftp lftpget http:// ftp://

wget
-P 指定下載目錄,默認下載到運行程序的當前目錄
-O 指定文件名,默認與原文件名一致
--limit-rate=xx(K,M,G) 下載速度
-c 斷電續傳
-q 靜默下載

links
--dump 只看文字
--source 看源碼

curl

進程管理

root --> cat --> /etc/shadow

ps
BSD方式
a 所有用戶在所有終端上運行的前臺進程
x 當前用戶運行的所有進程(包括前臺進程和後臺daemon)
ax 所有用戶運行的所有進程
aux 所有用戶運行的所有進程,結果中顯示用戶名
f 顯示父子進程關系
-C 用進程名進行過濾

        axo 配合
        o  自定義輸出列
                 %cpu      %mem     pid    uid     gid    cmd     comm    tty(顯示終端名,如?,表示daemon後臺進程)        ruser  (命令發起人)      euser   命令的真正執行人        state   

         k    排序或--sort

VSZ:虛擬內存集,線性內存,表示操作系統承諾內存集
RSS:常駐內存集,實際分配內存

UNIX方式
-e 顯示所有進程
-f 顯示完整格式
-ef
-eF 以更完整格式顯示所有進程
-efH 顯示父子進程關系
-eo 自定義顯示結果:ps -eo %cpu,%mem,pid,nice,pri,stat,comm

nice值
            -20~19  數字越小,優先級越高
            renice  -n  #(-20~19)  pid
            nice  -n  #(-20~19)   -#   command
            查看方式    ps axo nice

pgrep
-u UID/USERNAME 基於執行程序的用戶名進行搜索
-U 實際發起者 (考慮命名有u+s權限,實際生效者可變)
-t 終端名
-P 查看子進程

pidof   進程名     查詢對應進程名的PID

uptime       top      htop(epel)
            [epel]
            name=centos69 epel
            baseurl=http://x.x.x.x/fedora-epel/$releasever/$basearch
    gpgcheck=0

馬哥教育M28-二十五天、
vmstat
r:可運行進程
b:處於不可中斷睡眠狀態的進程個數

        swpd:當前虛擬內存的已使用空間
  free  :物理內存的剩余空間,直至不夠用時,才會使用虛擬內存
        buffer/cache:用於緩存的內存總量
        si:  表示內存從swap讀入的總量
        so:表示從內存寫出到swap的總量
        bi:表示內存從硬盤讀入的總量
        bo:表示從內存寫出到硬盤的總量
        in: 每秒中斷的速率
        cs:進程切換速率
        us: 用戶空間時間
        sy:內核空間,系統空間
        id:空閑時間
        wa:等待時間
        st: 被虛擬機偷走的時間

        vmstat -s  詳細查看內存信息      vmstat 1   1
        iostat

pmap  pid (經常用來查看內存泄漏問題,進程單個程序占用內存大小異常或者查看文件描述符數量異常情況)
                pmap -x pid
                ls -l  /proc/pid/fd   |wc -l 

kill
-0 無作為,可以用來單純判斷進程是否運行 >dev/null;echo $?
-1 -HUP:強制進程重讀配置文件(在無需關閉進程前提下實用)
-2 -INT: 終止正在運行的進程,相當於ctrl+c
-3 -QUIT:相當於ctrl+\
-9 -KILL :強制正在運行的進程 (exit)
-18 恢復後臺睡眠進程
-19 暫停進程到後臺睡眠
-15 -TERM:終止正在運行的進程(默認)(先釋放資源再停止,可能阻塞信號)

killall 進程名

pkill
            -u  用戶名    殺死指定用戶所運行的所有進程
            pkill -t  pts/1   殺死指定終端上運行的所有進程

進程的前後臺
            ctrl+z  將運行在前臺的進程暫停,或kill -19  PID
            bg  將在當前終端上暫停的進程,放入後繼續運行,或kill -18 PID
            fg   將在當前終端上暫停的或在當前終端上後臺運行的進程,放入前臺繼續運行

使進程不再依附於終端在後臺運行(與終端剝離shell)
nohup command &>/dev/null
screen; screen -S ; screen -sl ;screen -r
(command&);(command&)

*並行運行多條命令:
vim all.sh
sh1&
sh2&
sh3&

            (sh1&);(sh2&)
                {sh1& sh2& sh3&}

馬哥M28-第二十六天、

at hh:mm 未來某一時間點運行一次的計劃任務
atq 或 at -l 列出指定隊列中等待運行的作業
at -c 隊列序號 查看指定序號隊列的詳細信息
atrm 隊列序號 或 at -d 隊列序號 刪除指定序號的隊列
echo wall 123 |at 20:00

at 20:00 << EOF

wall hello
EOF

at 20:00 -f at.txt

at的任務是否運行依賴於atd服務
centos : service atd start
centos : systemctl start atd.service

限制用戶不能使用at配置計劃任務
當僅/etc/at.deny存在時,寫入deny的用戶不能配置at
當/etc/at.allow存在時/etc/at
deny失效,只有寫在allow中的用戶才能配置at,當/etc/at.allow和/etc/at.deny都不存在時,僅有root才能配置at

cron
/etc/crontab 系統級計劃任務 (必須嚴格區別個人計劃任務)
00 07 1,15 * 3 root /root/naozhong.sh 僅能通過root定義,不過可以以普通用戶的身份去執行計劃任務中的命令。
日誌/var/log/crond

特殊的日期表達方式:
@reboot Run once after reboot
當下次啟動計算機時,啟動到crond服務時運行該計劃。
@yearly 0 0 1 1
@annually 0 0 1 1

@monthly 0 0 1
@weekly 0 0 0
@daily 0 0
@hourly 0
*

centos7:單用戶啟動
1.grub:linux16 最後加上空格rd.break 按ctrl+x
2.mout -o remout,rw /sysroot
3.vim /sysroot/etc/crontab
centos6:單用戶啟動解決循環重啟任務
1.grub: kernel 最後空格+1 先ESC加到主界面 再b啟動
2.vim /etc/crontab

/etc/crontab 是系統級計劃任務的主配置文件
--> /etc/cron.d 是系統計劃任務的擴展配置文件目錄,其中的所有都應該是按crond的格式編寫,每一個文件都會生效
--> /etc/cron.d/0hourly
01 root run-parts /etc/cron.hourly 又用run-parts命令,擴展到了/etc/cron.hourly目錄,其中的所有腳本均會在每小時的01分執行

crontab
crontab -e [-u username]
crontab -l
crontab -r 直接該用戶的crontab文件,所以所有計劃全刪除,如只需刪除某條,直接crontab -e 編輯刪除該行即可
crontab -i -r 功能同上,在刪除前詢問

限制用戶不能使用crontab配置計劃任務
當今當/etc/cron.deny
存在時(默認)寫入deny的用戶不能配置crontab,當/etc/cron.allow存在時/etc/cron.deny失效,只有寫在allow中的用戶才能配置crontab,當/etc/cron.allow以及/etc/cron.deny都不存在時,僅有root才能配置crontab

shell腳本編程進階

判斷某字符串是否為整數
num=1322; [[ "$num" =~ ^[0-9]+$ ]] && echo true
$score -ge 60 -a $score -lt 80
$score -ge 60 -o $score -lt 80

隨機生成16位包含數字、大小寫字母、符號的密碼
cat /dev/urandom |tr -dc ‘a-zA-Z0-9_\$\@#?.‘ |head -c 12

練習:寫一個彩票系統,判斷5個數字。
1 5 3 8 9 
輸入 第一個值。
輸入 第二個值。
輸入 第三個值。
輸入 第四個值。
輸入 第五個值。
每一步在輸入完,都會判斷,如果中了,則有輸出結果:
  第一次中輸出 : First blood
  第二次中輸出 : Double kill
  第三次中輸出 :Triple kill
  第四次中輸出 :Quadra Kill
  第五次中輸出 :Penta Kill 以及 ACE!
  一次也不中輸出: Defeat!

     1 #!/bin/bash
  2 # ------------------------------------------
  3 # Filename:    lucky_dog
  4 # Revision:    1.0
  5 # Date:        2018-03-16
  6 # Author:      Hodge 
  7 # Email:       [email protected]
  8 # ------------------------------------------
  9 # Copyright:   2018 Hodge
 10 # License:     GPL
 11 
 12 cnt=0
 13 #標記命中次數
 14 for i in `seq 1 5`
 15 do
 16     echo "第$i次判斷"
 17     read -p ‘please input your num:‘ num_by_usr
 18     num_judge=$[$RANDOM%3]
 19     echo " lucky_num is $num_judge"
 20     flag=1
 21     if [ $num_by_usr -eq $num_judge ]
 22     then
 23         cnt=$[$cnt+1]
 24         flag=0
 25         #若命中則下面輸出,不命中不輸出,防止不命中依然輸出
 26     fi
 27     if [ $flag -eq 0 ]
 28     then
 29         case "$cnt" in
 30             1)echo First blood;;
 31             2)echo Double kill;;
 32             3)echo Triple kill;;
 33             4)echo Quadra kill;;
 34             5)echo Penta kill ACE;;
 35         esac
 36     fi
 37 done
 38     if [ $cnt -eq 0 ]
 39     then
 40         echo "defeat"
 41     fi

作業:

使用?,利用for,顯示出一個等腰三角形。
1、判斷/var/目錄下所有文件的類型
2、添加10個用戶user1-user10,密碼為8位隨機字符
3、/etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;分別讀取每個文件,以K開頭的輸出為文件加stop,以S開頭的輸出為文件名加start,如K34filename stop S66filename start
4、編寫腳本,提示輸入正整數n的值,計算1+2+…+n的總和
5、計算100以內所有能被3整除的整數之和
6、編寫腳本,提示請輸入網絡地址,如192.168.0.0,判斷輸入的網段中主機在線狀態
7、打印九九乘法表
8、在/testdir目錄下創建10個html文件,文件名格式為數字N(從1到10)加隨機8個字母,如:1AbCdeFgH.html
9、打印等腰三角形

  1. 探測局域網內的主機
    172.18.250-254.X
    能ping通顯示並保存至/root/ip.log
    要求並行探測提高效率

馬哥教育第二十四至二十六天學習總結