亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

10、進程管理,case和函數 學習筆記

發布時間:2020-06-12 17:12:29 來源:網絡 閱讀:362 作者:開源殿堂 欄目:網絡安全

ps:顯示系統當前進程狀態的命令

  ps a 所有與終端相關的進程

  ps x 所有與終端無關的進程

  ps u 以用戶為中心顯示進程相關信息

  

  VSZ:

  虛擬內存集,Virutal menmory Size

  

  RSS:

  常駐內存集

    

  STAT:     

  R:運行或可運行

  S:可中斷睡眠

  D:不可中斷睡眠

  T:停止

  Z:僵死

  s:session leader 有子進程

  +:前臺進程

  l:多線程進程

  N:低優先級進程

  <: 高優先級進程

  

  START:

  啟動時間

 

  TIME:

  累計占用的內存時間 

  

  COMMAND

  []表示內核線程



   ps [option]

     -e 顯示所有進程

     -f 以進程的長格式顯示

     -F 顯示額外信息

     -H 顯示進程的層次信息

     -o                 自定義要顯示的信息

ps axo pid,command


ps aux 常用組合

ps -ef 常用組合

ps -eFH 常用組合



pstree:顯示進程樹


pgrep: 

-U Username         僅顯示指定用戶的進程的進程的PID

-G Groupname                 僅顯示指定用戶組的進程的進程的PID 



pidof:顯示指定命令所啟動的pid

    pidof command

 

top:


top - 10:35:59 up 2 days, 16:26,  3 users,  load average: 0.00, 0.00, 0.00

系統當前時間 系統運行時長 登錄的用戶 平均負載:1分鐘,五分鐘,15分鐘


Tasks: 110 total,   1 running, 109 sleeping,   0 stopped,   0 zombie

總進程數 運行進程數 休眠進程數 停止進程數 僵死進程數


Cpu(s):  0.0%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

用戶空間占比 系統占比 nice占比 空閑占比 等待占比 硬中斷占比 軟中斷占比 被占用占比


Mem:   1918400k total,   406832k used,  1511568k free,   153868k buffers

Swap:  2097144k total,        0k used,  2097144k free,    90524k cached



  M: 按內存占用百分比大小排序

  P:按cpu占用百分比大小排序,默認

  T:按累計占有時長進行排序

  1:多CPU時按數字1可以分開顯示

  l: 是否顯示負載信息

  t:是否顯示cpu和進程的統計信息

  m:是否顯示內存和交互分區的信息

  q:退出

  k:kill,殺掉進程

  s:改變top刷新頻率



  常用選項:

     -d # :指定刷新時間間隔

     -n # :指定刷新的次數

     -b :以批次顯示top的刷新

          

htop

    u:選擇指定用戶的進程

    l: 顯示進程所打開的文件列表

    s:顯示進程執行的系統調用

    a:顯示進程的進程的cpu上

    #:快速將光標定位之指定的PID進程上

    quit


vmstst

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

 0  0      0  57460  54564 285520    0    0    30     5   21   14  0  0 99  1 

  procs

    r:運行或等待cpu時間片的進程的個數

    b:被阻塞(通常為等待I/O完成)的進程的長度

  memory

    swpd:從物理內存交互至swap中的數據量

    free:未使用的內存大小

    buffer:buffer空間大小,通常與緩存寫操作相關

    cache:cache空間大小,通常與緩存讀操作相關

  swap

    si:swap in 數據進入swap中的數據量,通常是速率。kb/s

    so:swap out 數據離開swap中的數據量,通常是速率。kb/s

  io:

    bi:block in:從塊設備讀入的數據量,通常是速率,kb/s

    bo:block out:保存至塊設備中的數據量,通常是速率,kb/s

   

    in:中斷發生頻率。每秒的中斷數

    cs:context switch 上下文切換,進程切換,通常是速率,kb/s

  cpu:

    us:用戶空間的使用率

    sy:內核空間的使用率

    id:空閑

    wa:等待的

    st:被偷走的

    

   使用格式

   vmstat [delay [counts]]

     -s:顯示內存統計數據




nice,renice


進程:nice

      用來手動調整進程優先級,默認nice為0.其默認優先級為120

      nice值取值范圍 :-20,19

      nice值對應優先級 :100,139

      

      nice:普通用戶只能調大此值


      對于尚未啟動的程序

nice -n # COMMAND 進程以#的nice值啟動


      對于運行中的進程:

renice # PID 調整指定PID的nice值


ps axo ni command pid 查看進程的nice值



進程間通信(IPC):

    信號:


    kill命令:可以實現向其他進程發送信息

     

kill -l 或 man 7 signal 可以查看可以向進程發送的所有信息

       

    kill -SIGNAL PID 殺死指定進程(SINGAL可以使數字代號也可以是信號名稱)

        1) SIGHUP 讓程序重讀配置文件,而不用重啟程序

        2) SIGINT 中斷信號。Ctrl+c即發送此信號  

        9) SIGKILL 殺死進程

        15) SIGTERM 終止進程,比較優雅(默認)

        

    killall -SIGNAL 進程名         殺死指定程序的所有進程



Linux的作業控制

    前臺作業:占據著一個終端

    后臺作業:作業執行時不占據終端,作業啟動后就釋放終端


    非守護進程類的程序,啟動以后都在前臺工作

          如果已經啟動:前臺-->后臺。ctrl+z把前臺作業送往后臺,作業被”停止“

 如果尚未啟動:COMMAND &


 退出當前會話,作業也會終止,因為作業與當前終端相關,如果把作業送往后臺后,不期望作業隨終止結束而停止

            nohup COMMAND &

           

  如何讓送往后臺的作業繼續執行:

   fg [[%]作業號碼]:將作業調回前臺繼續進行

   bg [[%]作業號碼]:讓作業在后臺繼續進行

       默認的為最后一個進入后臺的任務

              kill %作業號碼:終止作業   

  查看作業號:

      jobs


pmap pid 查看進程的內存占用情況


00007fb60640d000      4K    rw---  /sbin/init

起始地址              空間  權限    



bash腳本編程:之case語句


case語句的語法格式:

case expression in

pattern1)

suite1 

;;

pattern2)

suite2

;;

...

patternn)

suiten

;;

*)

other_suite

;;

esac



case中各pattern可以使用模式:

a|b a或者b

* 匹配任意長度的任意字符;

? 匹配任意單個字符;

[-] 范圍匹配




練習:寫一個腳本,接受如此格式

script.sh {start|stop|restart|status}

1、如是start,那么創建/var/lock/subsys/script.sh,顯示啟動成功;

2、如果參數是stop,則刪除/var/lock/subsys/script.sh,顯示停止成功

3、如果restart,則刪除,再創建,顯示成功;

4、如果status, 如果文件存在,則顯示running,否則,顯示stopped


#!/bin/bash

#

myService=`basename $0`

lockFile="/var/lock/subsys/$myService"


[ $# -lt 1 ] && echo "Usage: $myService {start|stop|restart|status}" && exit 4


case $1 in

'start')

        touch $lockFile

        echo "Starting $myService OK"

        ;;

'stop')

        rm -f $lockFile

        echo "Stopping $myService OK"

        ;;

'restart')

        rm -f $lockFile

        touch $lockFile

        echo "Restarting $myService OK"

        ;;

'status')

        if [ -f $lockFile ]; then

                echo "$myService is running"

        else

                echo "$myService is stopped"

        fi

        ;;

*)

        echo "Usage: $myService {start|stop|restart|status}"

        exit 3

        ;;

esac




練習:寫一個腳本,能對/etc/目錄進行打包備份,備份位置為/backup/etc-日期.后綴

1、顯示如下菜單給用戶:

xz) xz compress

gzip) gzip compress

bip2) bzip2 compress

2、根據用戶指定的壓縮工具使用tar打包壓縮;

3、默認為xz;輸入錯誤則需要用戶重新輸入;


#!/bin/bash

#

[ -d /backup ] || mkdir /backup


cat << EOF

Plz choose a compress tool:


xz) xz compress

gzip) gzip compress

bip2) bzip2 compress

EOF


while true; do

  read -p "Your option: " option

  option=${option:-xz}


  case $option in

  xz)

    compressTool='J'

    suffix='xz'

    break ;;

  gzip)

    compressTool='z'

    suffix='gz'

    break ;;

  bzip2)

    compressTool='j'

    suffix='bz2'

    break ;;

  *)

    echo "wrong option." ;;

  esac

done


tar ${compressTool}cf /backup/etc-`date +%F-%H-%M-%S`.tar.$suffix /etc/*


練習:寫一個腳本,完成如下功能

說明:此腳本能夠為指定網卡創建別名,指定地址;使用格式:mkethalias.sh -v|--verbose -i|--interface ethX

1、-i選項用于指定網卡;

2、如果網卡存在:在命令行,請用戶指定一個別名;

3、讓用戶指定IP和掩碼;

4、用戶可以同時使用-v或--verbose選項:如果使用了,則在配置完成后,顯示配置結果;否則,則不予顯示;


#!/bin/bash

#

debug=0


while [ $# -ge 1 ]; do

  case $1 in

  -i|--interface)

    ethcard="$2"

    shift 2 ;;

  -v|--verbose)

    debug=1

    shift

    ;;

  *)

    echo "Wrong options or arguments."

    echo "Usage: `basename $0` [-v|--verbose] -i|--interface Interface"

    shift $#

    ;;

  esac

done


# echo "Interface: $ethcard , Verbose Flag: $debug "


! ifconfig $ethcard &> /dev/null && echo "No this interface..." && exit 3


read -p "Enter an alias: " ethAlias


read -p "Enter IP: " ipAddr


read -p "Mask: " netMask


ifconfig $ethAlias $ipAddr netmask $netMask


[ $debug -eq 1 ] && ifconfig $ethAlias



bash腳本編程之函數


可被調用:函數有函數名

函數出現的地方,會自動被替換成函數定義的代碼


函數定義



語法:

FuncName() {

函數體

}


function FuncName {

函數體

}



函數有兩種返回值:

正常返回的數據:

函數中的打印語句,如echo或print

函數中命令的執行結果

執行狀態返回值:

取決于函數中執行的最后一條語句

自定義:return N


函數可以接受參數:

在函數體可以使用類似腳本調用位置參數一樣的參數

$1, $2, ...

$#

$*, $@



練習:寫一個腳本,完成如下功能

1、顯示如下菜單

disk) show disk info

mem) show memory info

cpu) show cpuinfo

2、顯示用戶選定的內容;


#!/bin/bash

#

ShowMenu() {

cat << EOF

disk) show disk info

mem) show memory info

cpu) show cpuinfo

EOF

}


main() {

ShowMenu

read -p "Plz choose an option: " option

case $option in

disk)

  df -h

  ;;

mem)

  free -m

  ;;

cpu)

 cat /proc/cpuinfo

 ;;

*)

 echo "Wrong option"

esac

}


main


如果在函數中使用變量:變量作用域

在函數中使用了在主程序中聲明的變量,重新賦值會直接修改主程序中的變量;

如果不期望函數與主程序中的變量沖突,函數中使用變量都用local修飾;即使用局部變量;

在函數中使用了在主程序中沒有聲明的變量,在函數執行結束后即被撤消,無論是否使用local修飾符;



如果想把腳本的全部位置參數,統統傳遞給腳本中某函數使用,怎么辦?

使用$*傳遞




練習:寫一個腳本,判定172.16.0.0網絡內有哪些主機在線,在線的用綠色顯示,不在線的用紅色顯示;要求,編程中使用函數;


#!/bin/bash


Ping(){

        ipAddr=172.16.$1.$2

        ping -c 1 -w 1 $ipAddr >> /dev/null

        if [ $? -eq 0 ];then

                echo -e "\033[32m$ipAddr\033[0m"

        else

                echo -e "\033[31m$ipAddr\033[0m"

        fi

}



for i in `seq 0 255`;do

        for j in `seq 1 254`;do

                Ping $i $j

        done

done



練習:寫一個腳本,完成如下功能(使用函數):

1、提示用戶輸入一個可執行命令;

2、獲取這個命令所依賴的所有庫文件(使用ldd命令);

3、復制命令至/mnt/sysroot/對應的目錄中

解釋:假設,如果復制的是cat命令,其可執行程序的路徑是/bin/cat,那么就要將/bin/cat復制到/mnt/sysroot/bin/目錄中,如果復制的是useradd命令,而useradd的可執行文件路徑為/usr/sbin/useradd,那么就要將其復制到/mnt/sysroot/usr/sbin/目錄中;

4、復制各庫文件至/mnt/sysroot/對應的目錄中,其要求命令;


#!/bin/bash

#

target=/mnt/sysroot


clearCmd() {

  if which $cmd &> /dev/null; then

        cmdPath=`which --skip-alias $cmd`

  else

        echo "No such command"

        return 5

  fi

}


cmdCopy() {

        cmdDir=`dirname $1`

        [ -d ${target}${cmdDir} ] || mkdir -p ${target}${cmdDir}

        [ -f ${target}${1} ] || cp $1 ${target}${cmdDir}

}


libCopy() {

        for lib in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`; do

                libDir=`dirname $lib`

                [ -d ${target}${libDir} ] || mkdir -p ${target}${libDir}

                [ -f ${target}${lib} ] || cp $lib ${target}${libDir}

        done

}


while true; do

  read -p "Enter a command: " cmd

  if [ "$cmd" == 'quit' ] ;then

        echo "quit"

        exit 0

  fi

  clearCmd $cmd

  [ $? -eq 5 ] && continue


  cmdCopy $cmdPath

  libCopy $cmdPath

done


向AI問一下細節

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

AI

湾仔区| 邳州市| 宁远县| 无极县| 桓台县| 福建省| 尚志市| 永宁县| 巫溪县| 临邑县| 调兵山市| 婺源县| 中方县| 呼和浩特市| 麦盖提县| 汉寿县| 黔东| 剑阁县| 景东| 抚远县| 林州市| 什邡市| 芦山县| 阿拉尔市| 凉城县| 白城市| 巢湖市| 濮阳县| 巩义市| 安国市| 新和县| 普安县| 上思县| 铜山县| 甘肃省| 兴业县| 荣成市| 会宁县| 偃师市| 紫阳县| 阿城市|