第八周作業

1、簡述systemd的新特性及unit常見類型分析,能夠實現編譯安裝的如nginx\apache實現通過systemd來管理
2、描述awk命令用法及示例(至少3例)
3、描述awk函數示例(至少3例)

1、簡述systemd的新特性及unit常見類型分析,能夠實現編譯安裝的如nginx\apache實現通過systemd來管理

  • Systemd
  • POST–>Boot Swqueue(bios)–>Bootloader(MBR)–>Kernel(ramdisk)–rootfs–>/sbin/init
  • init:
  • CentOS 5:SysV init
  • CentOS 6:Upstart
  • CentOS 7:Systemd
  • Systemd的新特性:
  • 系統引導時實現服務并行啟動;
  • 按需激活進程;
  • 系統狀態快照
  • 基于依賴關系定義服務控制邏輯
  • 核心概念:unit
  • unit由其相關配置文件星星標識,識別和配置;文件中主要包含了系統服務,監聽socket,保存的快照 以及其他init相關的信息;這些配置文件主要保存在:
  • /usr/lib/systemd/system
  • /run/systemd/system
  • /etc/systemd/system
  • unit的常見類型:
  • Service Unit:文件擴展名為.service,用于定義系統服務;
  • Target Unit:文件擴展名為.target,用于模擬實現運行級別;
  • Device Unit:文件擴展名為.device,用于定義內核識別的設備
  • Mount unit:.mount,定義文件系統掛載點;
  • Socket unit .socket,用于標識進程間通信用到的socket文件;
  • Snapshot unit:.snapshot,管理系統快照;
  • Swap Unit:.swap,用于標識swap設備;
  • Automount unit:.automount,文件系統自動掛載點設備;
  • Path unit:.path,用于定義文件系統中的文件或目錄;
  • 關鍵特性:
  • 基于socket的激活機制:socket與程序分離;
  • 基于bus的激活機制;
  • 基于device的激活機制
  • 基于path的激活機制
  • 系統快照:保存各Unit的當前狀態信息于持久存儲設備中;
  • 向后兼容sysv init腳本;
  • /etc/init.d/
  • 不兼容:
  • systemctl的命令時固定不變的;
  • 非由systemd啟動的服務,systemctl無法與之通信;
  • 管理系統服務:
  • centos 7:service類型的Unit文件;
  • control 他和systemd system andservice manager
  • systemctl [options…] command [name…]
  • 啟動:service name start==>systemctl start name.service
  • 停止:service name stop==>systemctl stop name.service
  • 重啟:service name restart==>systemctl restart name.service
  • 狀態:service name status==>systemctl status name.service
  • 條件式重啟:service name condrestart==>systemct try-restart name.service
  • 重載或重啟服務:systemctl reload-or-try-restart name.service
  • 查看某服務當前激活與否的狀態:systemctl is-active name.service
  • 查看所有已激活的服務:systemctl list-units –type service
  • 查看所有服務(已激活及未激活):chkconfig–list==>systemctl list-unit -t service -a
  • 設置服務開機自啟:chkconfig name on ==>systemctl enable name.service
  • 禁止服務開機自啟:chkconfig name off==>systemctl disable name.service
  • 查看某服務是否能開機自啟:chkconfig –list name==>systemctl is-enabled name.service
  • 禁止某服務設定為開機自啟:systemctl mask name.service
  • 取消上面的設定:systemctl unmask name.service
  • 查看服務的依賴關系:systemctl list-dependencies name.service
  • 管理target units:
  • 運行級別:
  • 0==>runlevel0.target,poweroff.target
  • 1==>runlevel1.target,rescue.target
  • 2==>runlevel2.target,multi-user.target
  • 3==>runlevel3.target,nulti-user.target
  • 4==>runlevel4.target.multi-user.target
  • 5==>runlevel5.target,graphical.target
  • 6==>runlevel6.target,reboot.target
  • 級別切換:init n==>systemctl isolate name.target
  • 查看級別:runlevel==>systemctl list-unit -t target
  • 查看所有級別:systemctl list-unit -t target -a
  • 獲取默認運行級別:systemctl get-default
  • 修改默認運行級別:systemctl set-default name.target
  • 切換至緊急救援模式:systemctl rescue
  • 切換至emergency模式:systemctl energency
  • 其他常用命令:
  • 關機:systemctl halt,systemctl poweroff
  • 重啟:systemctl reboot
  • 掛起:systemctl suspend
  • 快照:systemctl hibernate
  • 快照并掛起:systemctl hybrid-sleep
  • service unit file:
  • 文件通常由三部分組成:
  • [Unit]:定義與Unit類型無關的通用選項;用于提供unit的描述信息,Unit行為及依賴關系等;
  • [Service]:與特定類型相關的專用選項;此處為Service類型;
  • [Install]:定義由systemctl enable以及systemctl disable命令在實現服務啟用或禁用時用到的一些選項;
  • unit段的常用選項:
  • Description:描述信息;意義性描述;
  • After:定義unit的啟動次序;標識當前unit應該晚于那些unit啟動;其功能與被fore相反;
  • Requles:依賴到的其他units;強依賴,被依賴的units無法激活時,當前unit即無法激活;
  • Wants:一來到的其他units;弱依賴;
  • Conflicts:定義units間的沖突關系
  • service段的常用選項:
  • type:用于定義影響execStart及相關參數的功能的unit進程啟動類型;
  • 類型:
  • simple:
  • forking:
  • oneshot
  • dbus
  • notify
  • idle
  • enironmentFILE:環境配置文件
  • execstart:指明啟動unit要運行命令或腳本;execstartpre,execstartpost
  • execstop:指明停止unit要運行的命令或腳本;
  • restart:
  • install段的常用選項:
  • alias:
  • requiredBy:被那些units所以賴;
  • wantedBy:被那些units所以賴;
  • 注意:對于新創建的unit文件或修改了的unit文件,要通知systemd重載此配置文件;
  • systemctl daemon-reload
  • ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??練習:為當前系統的httpd服務提供一個Unit文件;
  • httpd.service
  • [Unit]
  • Description=The Apache HTTP Server
  • After=network.target remote-fs.target nss-lookup.target
  • [Service]
  • Type=notify
  • EnvironmentFile=/etc/sysconfig/httpd
  • ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
  • ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
  • ExecStop=/bin/kill -WINCH ${MAINPID}
  • KillSignal=SIGCONT
  • PrivateTmp=true
  • [Install]
  • WantedBy=multi-user.target
  • 編譯安裝的如nginx\apache實現通過systemd來管理

 

  • 安裝開發環境
  • [root@yinwei httpd]#yum install expat-devel
  • [root@yinwei httpd]#yum install Development Tools
  • [root@yinwei httpd]#yum install Server Platform Development
  • root@yinwei ~]#tar -xf httpd-2.4.33.tar.bz2
  • root@yinwei ~]#tar -xf apr-1.6.3.tar.gz
  • root@yinwei ~]#tar -xf apr-util-1.6.1.tar.gz
  • 安裝apr,apr-util
  • root@yinwei ~]# cd apr-1.6.3
  • root@yinwei ~]# ./configure 默認安裝
  • root@yinwei ~]# make && make install
  • root@yinwei ~]# cd apr-util-1.6.1
  • root@yinwei ~]# ./configure 默認安裝
  • root@yinwei ~]#make && make install
  • 安裝pcre
  • [root@yinwei ~]# unzip pcre-8.42.zip
  • [root@yinwei ~]# cd pcre-8.42
  • [root@yinwei pcre-8.42]# ./configure –prefix=/usr/local/pcre
  • [root@yinwei pcre-8.42]# make && make install
  • 安裝httpd
  • [root@yinwei httpd]#cd /httpd
  • [root@yinwei httpd]# ./configure –prefix=/usr/local/apache –with-pcre=/usr/local/pcre/ –with/usr/local/apr –with/usr/local/apr-util
  • [root@yinwei httpd]#make
  • [root@yinwei httpd]#make install
  • 配置httpd腳本
  • root@yinwei ~]#vim /usr/local/apache/conf/httpd.conf
  • root@yinwei ~]#添加 ServerName localhost:80
  • root@yinwei ~]#cd /etc/rc.d/init.d
  • root@yinwei ~]#vi httpd
  • #!/bin/bash# chkconfig: 12345 80 90function start_http(){

    /usr/local/apache2/bin/apachectl ?start

    }function stop_http()

    {

    ?/usr/local/apache2/bin/apachectl ?stop

    }case “$1” in

    start)

    ????start_http

    ;; ?

    stop)

    ????stop_http

    ;; ?

    restart)

    ????stop_http

    ????start_http

    ;;

    *) ???echo “Usage : start | stop | restart”

    ;;esac

    root@yinwei ~]#chmod ug+x /etc/init.d/httpd

    root@yinwei ~]#systemctl ?daemon-reload

    root@yinwei ~]#systemctl ?start ?httpd

    root@yinwei ~]#chkconfig –add httpd

2、描述awk命令用法及示例(至少3例)

 

  • GNU awk
  • 文本處理三工具:grep,sed,awk
  • grep,egrep,ggrep:文本過濾工具;pattern
  • sed:行編輯器
  • awk:報告生成器,格式化文本輸出;
  • AWK:Aho,Weinbereger,Kernighan–>New AWK,NAWK
  • GNU awk,gawk
  • gawk – pattern scanning and processing language
  • 基本用法:gawk [options] ‘program’ FILE …
  • 語句之間用分號分隔
  • print,printf
  • 選項:
  • -F:指明輸入時用到的字段分隔符;
  • -V var=value:自定義變量;
  • 1.print
  • print item1,item2,…
  • 要點:
  • 逗號分隔符:
  • 輸出的各item可以是字符串,也可以時數值;當前記錄的字段,變量或awk的表達式:
  • 如省略item,相當于 print $0;
  • 2.變量-
  • 內建變量
  • FS:input field seperator,默認為空白字符;
  • OFS:output field seperator,默認為空白字符;
  • RS:input record seperator,輸入時的換行符;
  • ORS:output record seperator,輸出時的換行符;
  • NF:number of field,字段數量
  • {print NF}打印字段數量, {print $NF}打印最后一個字段
  • NR:number of record,行數
  • FILENAME:當前文件名;
  • ARGC:命令行參數的個數;
  • ARGV:命令行數組的元素…[]可以列出
  • 示例:awk ‘BEGIN{print ARGC}’
  • awk ‘BEGIN{print ARGV[1]}’
  • 自定義變量
  • -v var=value
  • 變量名區分字符大小寫;
  • 在program中直接定義
  • awk -v test=’hello gawk’ ‘{print test}’ /etc/fstab
  • awk -v test=’hello gawk’ ‘BEGIN{print test}’
  • awk ‘BEGIN{test=”hello gawk”;print test}’
  • printf命令
  • 格式化輸出:printf FORMAT,item1,item2,…
  • FORMAT必須給出;
  • 不會自動換行,需要顯式給出換行控制符,\n
  • FORMAT中需要分別為后面的每個item指定一個格式化符號;
  • 格式符號
  • %c:顯示字符的ASCII;
  • %d,%i:顯示十進制整數;
  • %e,%E:科學計數法數值顯示;
  • %f:顯示為浮點數;
  • %g,%G:以科學計數法或浮點形式顯示數值;
  • %s:顯示字符串
  • %u:無符號整數;
  • %%:顯示%自身;
  • 修飾符:
  • #[.#]:第一個數字顯示的寬度:第二個標識小數點后的精度;
  • %3.1f ?3個字符位置,小數點后一位顯示
  • -:左對齊
  • +:顯示數值的符號
  • 操作符
  • 算數操作符
  • x+y,x-y,x*y,x/y,x^y,x%y
  • -x:數前加-符號
  • +x:轉換為數值;
  • 字符串操作符:沒有符號的操作符,字符串連接
  • 賦值操作符
  • =,+=,-=,*=,/=,%= …..
  • 比較操作符:
  • >,>=,<,<=,==,!=
  • 模式匹配服:
  • ~:是否匹配
  • !~:是否不匹配
  • 邏輯操作符:
  • &&
  • ||
  • !
  • 函數調用:
  • function_name(argu1,argu2,…)
  • 條件表達式:
  • selection?if-true-expression:if-false-expression
  • 示例: awk -F: ‘{$3>=1000?usertype=”Common User”:usertype=”Sysadmin or SysUser”;printf “%15s:%-s\n”,$1,usertype}’ /etc/passwd
  • PATTERN
  • empty:空模式,匹配每一行;
  • /regular expression/:僅處理能夠被此處的模式匹配到的行;
  • relational expression:關系表達式:結果有真有假:結果為真才會被處理;真:結果為非零值,非空字符串;
  • line ranges:行范圍 /pat1/,/pat2/
  • 注意:不支持直接給出數字的格式
  • 示例: awk -F: ‘(NR>=2&&NR<=10){print $1}’ /etc/passwd
  • BEGIN/END模式
  • BEGIN{}:僅在開始處理文件中的文本之前執行一次:
  • END{}:僅在文本處理完成之后執行一次;
  • 常用的action
  • Expressions
  • Control statemments: if,while等
  • Compound statemments:
  • input statements
  • output statements
  • 控制語句
  • if(condition) {statments}
  • if(condition) {statments} else {statements}
  • while(condit) {statments}
  • do {statments} while (condition)
  • for(expr1;expr2;expr3) ?{statments}
  • break
  • continue
  • delete array[index]
  • delete array
  • exit
  • {statements}
  • 控制語句 if-else
  • 語法:if(condition) statement [else statement]
  • 示例:
  • awk -F: ‘{if($3>=1000) {printf “Common user:%s\n”,$1} else {printf “root or Sysuser:%s\n”,$1}}’ /etc/passwd
  • awk -F: ‘{if($NF==”/bin/bash”) print $1}’ /etc/passwd
  • awk ‘{if(NF>5) print $0}’ /etc/fstab
  • df -h | awk -F[%] ‘/^\/dev/{print $1}’ |awk ‘{if($NF>=20) print $1}’
  • 使用場景:對awk取得的整行或某個字段做條件判斷;
  • while循環
  • 語法:while(condition) statement
  • 條件”真”,進入循環:條件”假”,退出循環;
  • 使用場景:對一行內的多個字段逐一類似處理時使用;對數組中的各元素逐一處理時使用;
  • 示例:
  • awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i); i++}}’ /etc/grub2.cfg
  • awk ‘/^[[:space:]]*linux16/{i<=1;while(i<=NF) {if(length($i)>=7){print $i,length($i)};i++}}’ /etc/grub2.cfg
  • do-while循環
  • 語法:do statement while(condition)
  • 意義:至少執行一次循環體
  • for循環
  • 語法:for(expr1;expr2;expr3) statement
  • for(variable assignment;condition;iteration process) {for-body}
  • 示例:
  • awk ‘/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}’ /etc/grub2.cfg
  • 特殊用法:
  • 能夠遍歷數組中的元素:
  • 語法:for(var in array) {for-body}
  • switch語句:
  • swithc(expression) {case value1 or /regexp/:statement; case value2 or /regexp2/:statement; …}
  • default:statement
  • break和continue
  • break [n]
  • continue
  • next:提前結束對本行的處理而直接進入下一行;
  • 示例:
  • awk -F: ‘{if($3%2!=0) next;print $1,$3}’ /etc/passwd
  • array
  • 關聯數組:array[index-expression]
  • [index-expression]
  • 1.可使用任意字符串;
  • 2.如果某數組元素事先不存在,在引用時,awk會自動創建此元素,并將其值初始化為”空串”;
  • 若要判斷數組中是否存在某元素,要使用”index in array”格式進行;
  • weekdays[mon]=”Monday”
  • 若要遍歷數組中的每個元素,要使用for循環:
  • for(var in array) {for-body}
  • 示例:
  • awk ‘BEGIN{weekdays[“mon”]=”Monday”;weekdays[“tue”]=”Tuesday”;for(i in weekdays) {print weekdays[i]}}’
  • 注意:var會遍歷array的每個索引;
  • state[“LISTEN”]++
  • state[“ESTABLISHED”]++
  • 示例:
  • netstat -tan | awk ‘/^tpc\>/{state[$NF]++}END{for(i in state) {print i,state[i]}}’
  • awk ‘{ip[$1]++}END{for(i in ip) {print i,ip[i]}}’ /var/log/httpd/access_log
  • awk ‘/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}’ /etc/fstab
  • awk ‘{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count) {print i,count[i]}}’ /etc/fstab

3、描述awk函數示例(至少3例)

awk ‘/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}’ /etc/grub2.cfg

netstat -tan | awk ‘/^tcp\>/{split($5,ip,”1″);count[ip[1]]++}END{for(i in count) {print i,count[i]}}’

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101948

(0)
墨武墨武
上一篇 2018-06-29 09:31
下一篇 2018-06-29

相關推薦

  • 4.8整理

    根據教學順序整理

    Linux筆記 2018-04-08
  • 文件管理與bash特性

      1.Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。2.bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。3.請使用命令行展開功能來完成以下練習:(1). 創建/tmp目錄下的:a_c, a_d, b_c, b_d(2). 創建/tmp/mylinux目錄下的:mylinux/├── bin├─…

    2018-06-26
  • Linux基礎知識(1)

    N31
    第一周

    Linux筆記 2018-06-23
  • 如何刪除大文件并立馬釋放磁盤空間

    我們先用df ?-h發現磁盤空間快滿了,圖1 我們馬上有rm -f /boot/bigfile刪除大文件,發現磁盤并沒有釋放空間 圖2 那我們用這個命令ls /boot來看看到底有沒有刪除 ?圖3 發現確實已經刪掉了,那怎么辦了,我這里有個簡單明了的方法,我們用大于號> /boot/bigfile把文件清空然后再用rm -f /boot/bigfile…

    2018-03-31
  • liunx常用命令

    【1】創建文件和文件夾

    2018-04-03
  • Work Tow

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 linux上一切皆文件 (1)文件管理命令:cat、tac、head、tail、more、less等 cat:查看文件內容,一次性輸出所有內容 ?? ? ? ? ? ? ? ? ? -n :輸出所有行編號 ?? ? ? ? ? ? ? ? ? -b 對非空輸出行號 例如:cat /…

    2018-07-15
欧美性久久久久