第八周《簡(jiǎn)述systemd的新特性及......》

一日丹、簡(jiǎn)述systemd的新特性及unit常見(jiàn)類型分析,能夠?qū)崿F(xiàn)編譯安裝的如nginx\apache實(shí)現(xiàn)通過(guò)systemd來(lái)管理

Systemd概述

1.systemd是一種新的linux系統(tǒng)服務(wù)管理器逢防,用于替換init系統(tǒng)芦岂,能夠管理系統(tǒng)啟動(dòng)過(guò)程和系統(tǒng)服務(wù)寒锚,一旦啟動(dòng)起來(lái),就將監(jiān)管整個(gè)系統(tǒng)乓旗。在centos7系統(tǒng)中府蛇,PID1被systemd所占用;
2.systemd可以并行地啟動(dòng)系統(tǒng)服務(wù)進(jìn)程屿愚,并且最初僅啟動(dòng)確實(shí)被依賴的服務(wù)汇跨,極大減少了系統(tǒng)的引導(dǎo)時(shí)間,這也就是為什么centos7系統(tǒng)啟動(dòng)速度比centos6快許多的原因妆距;
3.systemctl 是 systemd 的主命令穷遂,用于管理系統(tǒng)及服務(wù)

systemd的新特性:
  • 在系統(tǒng)引導(dǎo)時(shí)實(shí)現(xiàn)服務(wù)并行啟動(dòng);
  • 能按需激活進(jìn)程娱据;
  • 能做系統(tǒng)狀態(tài)快照蚪黑;
  • 基于依賴關(guān)系定義服務(wù)控制邏輯;
關(guān)鍵特性:(了解systemd的工作)
  • 基于socket的激活機(jī)制:socket與程序分離中剩;
  • 基于bus的激活機(jī)制忌穿;
  • 基于設(shè)備device的激活機(jī)制: 能監(jiān)控內(nèi)核輸出的硬件信息,當(dāng)設(shè)備插入時(shí)一旦發(fā)現(xiàn)就創(chuàng)建設(shè)備文件结啼,再自動(dòng)掛載至某掛載點(diǎn)掠剑,如果掛載點(diǎn)不存在還能自動(dòng)創(chuàng)建
  • 基于path的激活機(jī)制: 系統(tǒng)可監(jiān)控某目錄或文件是否存在,如果文件在了立即就能激活一個(gè)服務(wù)或進(jìn)程郊愧;例如某服務(wù)運(yùn)行中突然崩潰朴译,崩潰時(shí)能創(chuàng)建一個(gè)log或lock文件井佑;一旦發(fā)現(xiàn)這個(gè)lock文件立即激活一個(gè)程序如發(fā)送報(bào)告
  • 系統(tǒng)快照:能保存各unit的當(dāng)前狀態(tài)信息于持久存儲(chǔ)設(shè)備中; 因?yàn)閟ystemd的所有管理都是通過(guò)unit實(shí)現(xiàn)的眠寿,回滾時(shí)使用
  • 向后兼容sysv init腳本:所以放在/etc/init.d/服務(wù)腳本也一樣能靠systemd來(lái)啟動(dòng)
不兼容:
  • systemctl的命令是固定不變的躬翁;
    不能自定義命令,舊版能自定義如start澜公、stop等命令姆另,在腳本中可隨意定義命令使用喇肋;而systemctl的命令是固定不變的
  • 非由systemd啟動(dòng)的服務(wù)坟乾,systemctl無(wú)法與之通信,無(wú)法控制此服務(wù)蝶防;
    例如啟動(dòng)web進(jìn)程httpd甚侣,直接在命令行鍵入httpd也能啟動(dòng),這種服務(wù)在CentOS 5和6上使用servcie httpd stop有時(shí)也能停掉服務(wù)间学,但是systemd就不行殷费,但可自定義unit腳本來(lái)實(shí)現(xiàn)

systemd核心概念:unit

unit由其相關(guān)配置文件進(jìn)行標(biāo)識(shí)、識(shí)別和配置低葫;文件中主要包含了系統(tǒng)服務(wù)详羡、監(jiān)聽(tīng)的socket、保存的快照以及其他與init相關(guān)的信息嘿悬;這些配置文件主要保存在:

/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system
  • unit的常見(jiàn)類型
unit單元 文件擴(kuò)展名 解釋說(shuō)明
Service unit .service 定義系統(tǒng)服務(wù)
Target unit .Target 用于模擬實(shí)現(xiàn)"運(yùn)行級(jí)別"
Device unit .device 定義內(nèi)核識(shí)別的設(shè)備
Mount unit .mount 定義文件系統(tǒng)掛載點(diǎn)
Socket unit .socket 標(biāo)識(shí)進(jìn)程間通信用到的socket文件
Snapshot unit .snapshot 管理系統(tǒng)快照
Swap unit .swap 標(biāo)識(shí)swap設(shè)備
Automount unit .automount 文件系統(tǒng)自動(dòng)掛載點(diǎn)設(shè)備
Path unit .path 定義文件系統(tǒng)中的一文件或目錄

CentOS 7管理系統(tǒng)服務(wù)service unit:

Control the systemd system and service manager
systemctl [OPTIONS...] COMMAND [NAME...]
動(dòng)作 CentOS 6 CentOS 7
啟動(dòng) service NAME start systemctl start NAME.service
停止 service NAME stop systemctl stop NAME.service
重啟 service NAME restart systemctl restart NAME.service
狀態(tài) service NAME status systemctl status NAME.service
條件式重啟 service NAME condrestart systemctl try-restart NAME.service
重載或重啟 systemctl reload-or-restart NAME.service
重載或條件式重啟 systemctl reload-or-try-restart NAME.service
查看某服務(wù)當(dāng)前激活與否的狀態(tài) systemctl is-active NAME.service
查看所有已激活的服務(wù) systemctl list-units --t service
查看所有服務(wù)(包含未激活) chkconfig --list systemctl list-units -t NAME.service -a
設(shè)置服務(wù)開(kāi)機(jī)自啟 chkconfig NAME on systemctl enable NAME.service
禁止服務(wù)開(kāi)機(jī)自啟 chkconfig NAME off systemctl disable NAME.service
查看某服務(wù)是否能開(kāi)機(jī)自啟 chkconfig --list NAME systemctl is-enabled NAME.service
禁止某服務(wù)設(shè)定為開(kāi)機(jī)自啟 systemctl mask NAME.service
取消此禁止 systemctl umask NAME.service
查看服務(wù)依賴關(guān)系 systemctl list-dependencies NAME.service

管理target units:

  • 運(yùn)行級(jí)別:
運(yùn)行級(jí)別 對(duì)應(yīng)別名 服務(wù)名
0 runlevel0.target poweroff.target
1 runlevel1.target rescue.target
2 runlevel2.target multi-user.target
3 runlevel3.target multi-user.target
4 runlevel4.target multi-user.target
5 runlevel5.target graphical.target
6 runlevel6.target reboot.target

service unit文件組織格式:

文件通常由三段組成:

[Unit]:主要定義與Unit類型無(wú)關(guān)的通用選項(xiàng)实柠;用于提供當(dāng)前unit的描述信息、unit行為及依賴關(guān)系善涨;
[Service]:與特定類型相關(guān)的專用選項(xiàng)窒盐;此處為service類型;
(UNIT-TYPE钢拧,類似是什么就為相對(duì)應(yīng)的名稱)
[Install]:定義由"systemctl enable"以及"systemctl disable"命令在實(shí)現(xiàn)服務(wù)啟用或禁用時(shí)用到的一些選項(xiàng)蟹漓;

各部分釋義:
  • [Unit] 段的常用選項(xiàng):
       Description:描述信息; 意義性描述源内;
       After:定義unit的啟動(dòng)次序葡粒,表示當(dāng)前unit應(yīng)該晚于哪些unit啟動(dòng);其功能與Before相反膜钓;
       Requies:依賴到的其它units嗽交;強(qiáng)依賴,被依賴的units無(wú)法激活時(shí)呻此,當(dāng)前unit即無(wú)法激活轮纫;
       Wants:依賴到的其它units;弱依賴焚鲜;
       Conflicts:定義units間的沖突關(guān)系
  • [Service] 段的常用選項(xiàng):
       Type:用于定義影響ExecStart及相關(guān)參數(shù)的功能的unit進(jìn)程啟動(dòng)類型掌唾,其類型有:
       simple:默認(rèn)值放前,執(zhí)行ExecStart指定的命令,啟動(dòng)主進(jìn)程
       forking:以 fork 方式從父進(jìn)程創(chuàng)建子進(jìn)程糯彬,創(chuàng)建后父進(jìn)程會(huì)立即退出
       oneshot:一次性進(jìn)程凭语,Systemd 會(huì)等當(dāng)前服務(wù)退出,再繼續(xù)往下執(zhí)行
       dbus:當(dāng)前服務(wù)通過(guò)D-Bus啟動(dòng)
       notify:當(dāng)前服務(wù)啟動(dòng)完畢撩扒,會(huì)通知systemd再繼續(xù)往下執(zhí)行
       idle:若有其他任務(wù)執(zhí)行完畢似扔,當(dāng)前服務(wù)才會(huì)運(yùn)行
       EnvironmentFile:環(huán)境配置文件;
       ExecStart:指明啟動(dòng)unit要運(yùn)行命令或腳本搓谆;
       ExecStartPre:在ExecStart之前運(yùn)行炒辉;
       ExecStartPost:在ExecStart之后運(yùn)行;
       ExecStop:指明停止unit要運(yùn)行的命令或腳本泉手;
       Restart:當(dāng)設(shè)定Restart=1時(shí)黔寇,則當(dāng)次daemon服務(wù)意外終止后,會(huì)再次自動(dòng)啟動(dòng)斩萌。
  • [Install] 段的常用選項(xiàng):
       Alias:別名缝裤,可使用systemctl command Alias.service;
       RequiredBy:被哪些units所依賴颊郎;
       WantedBy:被哪些units所依賴
  • 注意:對(duì)于新創(chuàng)建的unit文件或修改了的unit文件憋飞,要通知systemd重載此配置文件,通過(guò)命令 systemctl daemon-reload

編譯安裝nginx\apache,并通過(guò)systemd來(lái)管理

第一步--安裝nginx基礎(chǔ)依賴包并創(chuàng)建用戶

[root@wujunjie ~]# yum install pcre pcre-devel.x86_64 openssl-devel.x86_64 -y
[root@wujunjie ~]# useradd nginx
[root@wujunjie ~]# echo nginx|passwd --stdin nginx

第二步--下載nginx并編譯安裝

[root@wujunjie ~]#官網(wǎng)下載nginx包
[root@wujunjie tools]# tar -xf nginx-1.14.0.tar.gz
[root@wujunjie tools]# ls
nginx-1.14.0  nginx-1.14.0.tar.gz
[root@wujunjie tools]# cd nginx-1.14.0/
[root@wujunjie nginx-1.14.0]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx1.4/ --with-http_stub_status_module --with-http_ssl_module
[root@wujunjie nginx-1.14.0]# make && make install

第三步--編輯配置文件

[root@wujunjie ~]# cd /usr/lib/systemd/system
[root@wujunjie system]# vim nginx.service
[unit]
Description=nginx
After=network.target

[Service]
Type=forking 
ExecStart=/usr/local/nginx1.4/sbin/nginx 
ExecReload=/usr/local/nginx1.4/sbin/nginx -s reload
ExecStop=/usr/local/nginx1.4/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

第四步--最后重啟姆吭;關(guān)閉nginx

[root@wujunjie ~]# systemctl daemon-reload   #重新載入
[root@wujunjie ~]# systemctl start nginx.service
啟動(dòng)后效果圖
[root@wujunjie ~]# systemctl reload nginx.service
[root@wujunjie ~]# systemctl stop nginx.service
關(guān)閉后效果圖

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

  • 簡(jiǎn)介
    awk是一個(gè)強(qiáng)大的文本分析工具,相當(dāng)于grep的查找猾编,sed的編輯瘤睹,awk在其對(duì)數(shù)據(jù)分析并生成報(bào)告時(shí),顯得尤為強(qiáng)大答倡。awk就是把文件逐行讀入轰传,以空格為默認(rèn)分隔符將每行切片,切開(kāi)的部分再進(jìn)行各種分析處理瘪撇。

  • 基本用法:
    gawk [options] 'program' FILE ...
    program: PATTERN{ACTION STATEMENTS}
    PATTERN:模式有多種获茬,有地址定界作用,不同于sed或grep里面的概念倔既;
    ACTION STATEMENTS:動(dòng)作語(yǔ)句恕曲,可有多個(gè)語(yǔ)句,但語(yǔ)句之間用分號(hào)分隔渤涌;可認(rèn)為是腳本里的調(diào)用命令佩谣,這不過(guò)用的是awk內(nèi)建命令;如:print, printf(格式化輸出)

  • 選項(xiàng):
    -F:指明輸入時(shí)用到的字段分隔符实蓬;
    -v VAR=VALUE: 自定義變量茸俭;

  • awk的基本處理機(jī)制
    一次從文件中讀取一行文本吊履,awk會(huì)對(duì)其自動(dòng)進(jìn)行切片,將每一行按字符串的分隔符進(jìn)行切割调鬓。如這一行是this is a test艇炎,它會(huì)默認(rèn)使用空白字符當(dāng)分隔符,不管空了幾個(gè)格腾窝,這樣這一行就會(huì)成四片缀踪,一片中保存一個(gè)單詞,而這四片在awk中可以使用一個(gè)變量來(lái)引用虹脯,這個(gè)變量相關(guān)于腳本中的位置參數(shù)$1,$2... ,$0表示這一整行驴娃。awk默認(rèn)使用空白當(dāng)分隔符,也可以指定分隔符归形。
    1托慨、print

          print item1, item2, ...
    
  • 要點(diǎn):
    (1) 逗號(hào)分隔符鼻由;
    (2) 輸出的各item可以字符串暇榴,也可以是數(shù)值;當(dāng)前記錄的字段蕉世、變量(1,2,..)或awk的表達(dá)式蔼紧;
    (3) 如省略item,相當(dāng)于print $0; 即$0代表一整行內(nèi)容狠轻,默認(rèn)顯示就為$0即整行內(nèi)容奸例;
    例:

    [root@wujunjie ~]# vim 12
    this is a,test 
    [root@wujunjie ~]# awk '{print $1,$2}' 12
    this is
    [root@wujunjie ~]# awk -F, '{print $1}' 12
    this is a
    [root@wujunjie ~]# awk '{print $0}' 12
    this is a,test
    

2、變量
2.1內(nèi)建變量

  • 常用內(nèi)置變量之記錄變量
    FS:input field seperator向楼,輸入分隔符查吊,默認(rèn)為空白字符;
    OFS:output field seperator湖蜕,輸出分隔符逻卖,默認(rèn)為空白字符;
    RS:input record seperator昭抒,輸入時(shí)的換行符评也;一行為一條record;默認(rèn)為行分隔符灭返;
    ORS:output record seperator盗迟,輸出時(shí)的換行符;一行為一條record熙含;默認(rèn)為行分隔符罚缕;

  • awk內(nèi)置變量之?dāng)?shù)據(jù)變量
    NF:number of field,字段數(shù)量怎静,即每行的字段數(shù)量邮弹;
    注意:{print NF}, {print $NF}的區(qū)別喂饥;
    NR:number of record, 行數(shù);即對(duì)文件中的行進(jìn)行編號(hào)肠鲫;
    FNR:各文件分別計(jì)數(shù)员帮;行數(shù);
    FILENAME:當(dāng)前文件名导饲;即顯示每行的文件名捞高;
    ARGC:命令行中參數(shù)的個(gè)數(shù);
    ARGV:數(shù)組渣锦,保存的是命令行中所給定的各參數(shù)硝岗;
    例:

    [root@wujunjie ~]# awk '{print NF}' /etc/issue
    1
    5
    0
    顯示issue文件中每一行有多少字段;
    [root@wujunjie ~]# awk '{print NR}' /etc/issue
    1
    2
    3
    統(tǒng)計(jì)行數(shù)袋毙,顯示行號(hào)型檀;
    [root@wujunjie ~]# awk '{print NR}' 12 /etc/issue
    1
    2
    3
    4
    顯示內(nèi)容:兩文件的總行數(shù);
    [root@wujunjie ~]# awk '{print FNR}' 12 /etc/issue
    1
    1
    2
    3
    顯示內(nèi)容:兩文件分別顯示行數(shù)听盖;
    

2.2自定義變量
(1) -v VAR=VALUE變量名區(qū)分字符大小寫胀溺;
(2) 在program中直接定義
注意:定義變量,同bash中一樣皆看,用時(shí)定義即可仓坞;

[root@wujunjie ~]# awk -v test='hello gawk' '{print test}' /etc/issue
hello gawk
hello gawk
hello gawk
文件此處沒(méi)什么用,只有一個(gè)顯示行數(shù)作用腰吟;即文件有12行顯示了每行顯示一次无埃,顯示了3行;

3毛雇、printf命令(格式化輸出命令)

printf FORMAT, item1, item2, ...

FORMAT是格式符嫉称,為每個(gè)item按位占一個(gè)位留一個(gè)特殊符號(hào),所以item最終會(huì)顯示在format指定格式符號(hào)的位置上灵疮;

  • 要點(diǎn):
    (1) FORMAT必須給出;
    (2) 在顯示多行文本時(shí)织阅,不會(huì)自動(dòng)換行,需要顯式給出換行控制符始藕,\n蒲稳;
    (3) FORMAT中需要分別為后面的每個(gè)item指定一個(gè)格式化符號(hào);
    格式符:
    %c: 顯示字符的ASCII碼伍派;
    %d, %i: 顯示十進(jìn)制整數(shù)江耀;decimal,integer诉植;
    %e, %E: 科學(xué)計(jì)數(shù)法數(shù)值顯示祥国;
    %f:顯示為浮點(diǎn)數(shù);
    %g, %G:以科學(xué)計(jì)數(shù)法或浮點(diǎn)形式顯示數(shù)值;
    %s:顯示字符串舌稀;
    %u:無(wú)符號(hào)整數(shù)啊犬;
    %%: 顯示%自身;
    例:

    [root@wujunjie ~]# head -3 /etc/passwd|awk -F: '{printf "%s\n",$1}'
    root
    bin
    daemon
    以字符串顯示每行的第1字段壁查;每字段一行觉至;
    [root@wujunjie ~]# head -3 /etc/passwd|awk -F: '{printf "username:%s\n",$1}' 
    username:root
    username:bin
    username:daemon
    顯示指定字符串即username:,同時(shí)以字符串顯示每行的第1字段睡腿;每字段一行语御;
    

修飾符:
#[.#]:第一個(gè)數(shù)字控制顯示的寬度;第二個(gè)#表示小數(shù)點(diǎn)后的精度席怪;默認(rèn)右對(duì)齊应闯;
%3.1f:3表示顯示3個(gè)字符的寬度;
-: 左對(duì)齊
+:顯示數(shù)值的符號(hào)
4挂捻、操作符
算術(shù)操作符:
x+y, x-y, x*y, x/y, x^y(x的y次方), x%y(取模)
-x:把整數(shù)轉(zhuǎn)為負(fù)數(shù)碉纺;
+x: 把字符串轉(zhuǎn)換為數(shù)值;
字符串操作符:
沒(méi)有符號(hào)的操作符刻撒,字符串連接(一般使用內(nèi)建函數(shù)進(jìn)行字符串切片)
賦值操作符:
=, +=, -=, *=, /=, %=, ^=(增強(qiáng)相賦值)
++, --(自增骨田、自減運(yùn)算)
比較操作符:
>, >=, <, <=, !=, ==(等值比較)
模式匹配符:
~:左側(cè)字符串是否能被右側(cè)模式匹配;
!~:左側(cè)字符串是否不能被右側(cè)模式匹配疫赎;
邏輯操作符:將多個(gè)操作連接起來(lái)盛撑;
&& 與運(yùn)算
|| 或運(yùn)算
! 非運(yùn)算
函數(shù)調(diào)用:(這才是規(guī)范使用方式)

function_name(argu1, argu2, ...)

條件表達(dá)式:

selector?if-true-expression:if-false-expression

5、PATTERN(實(shí)現(xiàn)地址定界功能)
(1) empty:空模式捧搞,匹配每一行;
(2) /regular expression/:僅處理能夠被此處的(正則表達(dá)式)模式匹配到的行狮荔;前面加!表示對(duì)模式過(guò)濾的條件取反胎撇;
(3) relational expression: 關(guān)系(比較)表達(dá)式;結(jié)果有“真”有“假”殖氏;結(jié)果為“真”才會(huì)被處理晚树;
真:結(jié)果為非0值,非空字符串雅采;
假:0爵憎,空字符串;
(4) line ranges:行范圍婚瓜,
/pat1/,/pat2/:startline,endline表示地址定界宝鼓;
注意: 不支持直接給出數(shù)字的格式
~]# awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd
(5) BEGIN/END模式
BEGIN{program}: 僅在開(kāi)始處理文件中的文本之前執(zhí)行一次程序;顯示表頭巴刻;
END{program}:僅在文本處理完成之后命令結(jié)束之前執(zhí)行一次程序愚铡;
6、常用的action
(1) Expressions
(2) Control statements:if, while等;
(3) Compound statements:組合語(yǔ)句沥寥;
(4) input statements
(5) output statements
7碍舍、控制語(yǔ)句
if(condition) {statments}
if(condition) {statments} else {statements}
while(conditon) {statments}
do {statements} while(condition)
for(expr1;expr2;expr3) {statements}
break
continue
delete array[index]
delete array
exit
{ statements }
7.1 if-else語(yǔ)句,支持雙分支if語(yǔ)句邑雅,完成條件判斷片橡;
語(yǔ)法格式:if(condition) statement [else statement]
語(yǔ)句如果有多個(gè),需要用{}括起來(lái)淮野;如果有else語(yǔ)句锻全,各語(yǔ)句都要用{};
使用場(chǎng)景:對(duì)awk取得的整行或某個(gè)字段做條件判斷時(shí)使用录煤;
7.2 while循環(huán)
語(yǔ)法格式:while(condition) statement
條件“真”鳄厌,進(jìn)入循環(huán);條件“假”妈踊,退出循環(huán)了嚎;語(yǔ)句如果有多個(gè),需要用{}括起來(lái)廊营;
要根據(jù)初始條件判斷為真或假歪泳,如果為假,則一次都不會(huì)執(zhí)行露筒;
使用場(chǎng)景:對(duì)一行內(nèi)的多個(gè)字段逐一進(jìn)行類似處理時(shí)使用呐伞;或?qū)?shù)組中的各元素逐一處理時(shí)使用短纵;
7.3 do-while循環(huán)
語(yǔ)法:do statement while(condition)
7.4 for循環(huán)
語(yǔ)法格式:for(expr1;expr2;expr3) statement
expr1:控制變量初始化准潭;
expr2:條件判斷外恕;
expr3:控制變量的數(shù)值修正表達(dá)式忘苛;
for(variable assignment;condition;iteration process) {for-body}
即:for(變量賦值荸型;條件判斷表達(dá)式蔑祟;變量修正表達(dá)式) {循環(huán)體語(yǔ)句} 意義:無(wú)論條件真假绍豁,先執(zhí)行一次睹簇,即至少執(zhí)行一次循環(huán)體
7.5 switch語(yǔ)句(在awk中用的不多)
語(yǔ)法格式:
switch(expression) {case VALUE1 or /REGEXP1/: statement1; case VALUE2 or /REGEXP2/: statement2; ...; default: statement}
7.6 break和continue(不做詳細(xì)介紹掌眠,用到時(shí)再說(shuō))
break [n]:退出n層循環(huán)蕾盯;
continue:提前結(jié)束本輪循環(huán),直接進(jìn)入下一輪循環(huán)(即下一個(gè)字段)蓝丙;
7.7 next
在awk中能實(shí)現(xiàn)2重循環(huán)级遭,awk本身可對(duì)文件每行循環(huán),使用循環(huán)語(yǔ)句是為了遍歷一行中的每個(gè)字段渺尘,或數(shù)組中的每個(gè)元素挫鸽;
next同continue一樣,也是控制循環(huán)的沧烈,但是是控制awk的本身循環(huán)的掠兄;即提前結(jié)束對(duì)本行的處理而直接進(jìn)入下一行;
8、array數(shù)組
關(guān)聯(lián)數(shù)組:array[index-expression]
index-expression:索引表達(dá)式
(1) 可使用任意字符串蚂夕;字符串要使用雙引號(hào)迅诬;不能隨便使用單引號(hào);
(2) 如果某數(shù)組元素事先不存在婿牍,在引用時(shí)侈贷,awk會(huì)自動(dòng)創(chuàng)建此元素,并將其值初始化為“空”等脂;允許未經(jīng)聲明直接引用俏蛮;
若要判斷數(shù)組中是否存在某元素,要使用"index in array"格式進(jìn)行上遥;

三搏屑、描述awk函數(shù)示例(至少3例)

  • 3.1內(nèi)置函數(shù)
    數(shù)值處理:
    rand():返回0和1之間一個(gè)隨機(jī)數(shù);在大多數(shù)awk實(shí)現(xiàn)中粉楚,包括gawk辣恋,每次運(yùn)行awk時(shí),rand()都會(huì)從相同的起始數(shù)字或種子開(kāi)始生成數(shù)字模软。因此伟骨,程序每次運(yùn)行時(shí)都會(huì)產(chǎn)生相同的結(jié)果。在一個(gè)AWK運(yùn)行中燃异,這些數(shù)字是隨機(jī)的携狭,但從運(yùn)行到運(yùn)行是可以預(yù)測(cè)的。這便于調(diào)試回俐,但如果希望程序每次使用時(shí)都執(zhí)行不同的操作逛腿,則必須將種子更改為每次運(yùn)行中不同的值。要做到這一點(diǎn)鲫剿,使用srand()

    例如:
    [root@wujunjie ~]# awk 'BEGIN{print rand()}'
    0.237788
    [root@wujunjie ~]# awk 'BEGIN{print rand()}'
    0.237788
    [root@wujunjie ~]# awk 'BEGIN{srand();print rand()}'
    0.343
    [root@wujunjie ~]# awk 'BEGIN{srand();print rand()}'
    0.0389058
    

字符串處理:
length([s]):返回指定字符串的長(zhǎng)度鳄逾;
sub(r,s,[t]):以r表示的模式來(lái)查找t所表示的字符中的匹配的內(nèi)容,并將其第一次出現(xiàn)替換為s所表示的內(nèi)容灵莲;

  例如:
  [root@wujunjie ~]# awk -F: '{sub(o,O,$1)}' /etc/passwd
  把每行的第1字段中,第一次出現(xiàn)的小寫o替換為大寫O殴俱;注意:僅替換每行一次出現(xiàn)的政冻;

gsub(r,s,[t]):以r表示的模式來(lái)查找t所表示的字符中的匹配的內(nèi)容,并將其所有出現(xiàn)的內(nèi)容均替換為s所表示的內(nèi)容线欲;
split(s,a[,r]):以r為分隔符切割字符s明场,并將切割后的結(jié)果保存至a所表示的數(shù)組中;數(shù)組元素從1開(kāi)始編號(hào)李丰;

  例如:
  [root@wujunjie ~]# netstat -tan | awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}'
  192.168.32.1 1
  0.0.0.0 6
  顯示來(lái)訪的主機(jī)地址連接的次數(shù)苦锨;
  • 3.2自定義函數(shù)
    可參考《sed和awk》
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舟舒,更是在濱河造成了極大的恐慌拉庶,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秃励,死亡現(xiàn)場(chǎng)離奇詭異氏仗,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)夺鲜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門皆尔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人币励,你說(shuō)我怎么就攤上這事慷蠕。” “怎么了食呻?”我有些...
    開(kāi)封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵流炕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我搁进,道長(zhǎng)浪感,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任饼问,我火速辦了婚禮影兽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘莱革。我一直安慰自己峻堰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布盅视。 她就那樣靜靜地躺著捐名,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闹击。 梳的紋絲不亂的頭發(fā)上镶蹋,一...
    開(kāi)封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音赏半,去河邊找鬼贺归。 笑死,一個(gè)胖子當(dāng)著我的面吹牛断箫,可吹牛的內(nèi)容都是我干的拂酣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼仲义,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼婶熬!你這毒婦竟也來(lái)了剑勾?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赵颅,失蹤者是張志新(化名)和其女友劉穎虽另,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體性含,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洲赵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了商蕴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叠萍。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖绪商,靈堂內(nèi)的尸體忽然破棺而出苛谷,到底是詐尸還是另有隱情,我是刑警寧澤格郁,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布腹殿,位于F島的核電站,受9級(jí)特大地震影響例书,放射性物質(zhì)發(fā)生泄漏锣尉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一决采、第九天 我趴在偏房一處隱蔽的房頂上張望自沧。 院中可真熱鬧,春花似錦树瞭、人聲如沸拇厢。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)孝偎。三九已至,卻和暖如春凉敲,著一層夾襖步出監(jiān)牢的瞬間衣盾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工爷抓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雨效,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓废赞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親叮姑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子唉地,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容