Linux的systemd特性及gawk使用

  • 1、 簡述systemd的新特性及unit常見類型分析,能夠實現編譯安裝的如nginx\apache實現通過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文件
編譯安裝nginx服務
安裝軟件

[root@node1 ~]# yum install -y pcre pcre-devel openssl-devel
[root@node1 ~]# useradd nginx
[root@node1 ~]# passwd nginx
[root@node1 ~]# tar -vzxf nginx-1.13.3.tar.gz -C /usr/local
[root@node1 ~]# cd nginx-1.13.3/
[root@node1 nginx-1.13.3]# ./configure \
> --group=nginx \
> --user=nginx \
> --prefix=/usr/local/nginx \
> --sbin-path=/usr/sbin/nginx \
> --conf-path=/etc/nginx/nginx.conf \
> --error-log-path=/var/log/nginx/error.log \
> --http-log-path=/var/log/nginx/access.log \
> --http-client-body-temp-path=/tmp/nginx/client_body \
> --http-proxy-temp-path=/tmp/nginx/proxy \
> --http-fastcgi-temp-path=/tmp/nginx/fastcgi \
> --pid-path=/var/lock/nginx \
> --with-http_stub_status_module \
> --with-http_ssl_module \
> --with-http_gzip_static_module \
> --with-pcre
[root@node1 nginx-1.13.3]# make && make install

編輯文件,實現systemd管理

[root@node1 nginx-1.13.3]# cat /usr/lib/systemd/system/nginx.service
[Unit]
Description=Nginx Service
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop

最後重啓並關閉

[root@node1 nginx-1.13.3]# /usr/local/nginx/sbin/nginx
[root@node1 nginx-1.13.3]# /usr/local/nginx/sbin -s reload
[root@node1 nginx-1.13.3]# /usr/local/nginx/sbin -s stop
  • 2、描述awk命令用法及示例(至少3例)

文本三劍客之awk
awk是一種報表生成器,與sed,grep都是文本處理工具,可以將編輯的文本進行格式化排版處理後以更加美觀的形式輸出,在linux上使用的awk是GNUawk即gawk,gawk是awk的套接字文件,二者相同。

gawk - pattern scanning and processing language

基本用法:gawk [options] 'program' FILE ...
          program: PATTERN{ACTION STATEMENTS}
    語句之間用分號分隔

選項:
    -F:指明輸入時用到的字段分隔符;
    -v var=value: 自定義變量
1、print
print item1, item2, ...

要點:
(1) 逗號分隔符;
(2) 輸出的各item可以字符串,也可以是數值;當前記錄的字段、變量或awk的表達式;
(3) 如省略item,相當於print $0;

2、變量

2.1 內建變量
            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, 行數;
            FNR:各文件分別計數;行數;

            FILENAME:當前文件名;

            ARGC:命令行參數的個數;
            ARGV:數組,保存的是命令行所給定的各參數;

    2.2 自定義變量
            (1) -v var=value

                變量名區分字符大小寫;

            (2) 在program中直接定義

示例:

[root@node1 ~]# awk -F ':' '{print $1,$3}' /etc/passwd
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 99
systemd-network 192
dbus 81
polkitd 999
postfix 89
sshd 74
chrony 998
user1 1001
hadoop 1006
bash 1007
testbash 1008
basher 1009
nologin 1010
centos 1011
fedoer 1012
nginx 1013

[root@node1 ~]# awk -v FS=':' -v OFS='#' '{print $1,$3,$7}' /etc/passwd
root#0#/bin/bash
bin#1#/sbin/nologin
daemon#2#/sbin/nologin
adm#3#/sbin/nologin
lp#4#/sbin/nologin
sync#5#/bin/sync
shutdown#6#/sbin/shutdown
halt#7#/sbin/halt
mail#8#/sbin/nologin
operator#11#/sbin/nologin
games#12#/sbin/nologin
ftp#14#/sbin/nologin
nobody#99#/sbin/nologin
systemd-network#192#/sbin/nologin
dbus#81#/sbin/nologin
polkitd#999#/sbin/nologin
postfix#89#/sbin/nologin
sshd#74#/sbin/nologin
chrony#998#/sbin/nologin
user1#1001#/bin/bash
hadoop#1006#/bin/bash
bash#1007#/bin/bash
testbash#1008#/bin/bash
basher#1009#/bin/bash
nologin#1010#/sbin/nologin
centos#1011#/bin/bash
fedoer#1012#/bin/bash
nginx#1013#/bin/bash

3、printf命令

        格式化輸出:printf FORMAT, item1, item2, ...

            (1) FORMAT必須給出; 
            (2) 不會自動換行,需要顯式給出換行控制符,\n
            (3) FORMAT中需要分別爲後面的每個item指定一個格式化符號;

            格式符:
                %c: 顯示字符的ASCII碼;
                %d, %i: 顯示十進制整數;
                %e, %E: 科學計數法數值顯示;
                %f:顯示爲浮點數;
                %g, %G:以科學計數法或浮點形式顯示數值;
                %s:顯示字符串;
                %u:無符號整數;
                %%: 顯示%自身;

            修飾符:
                #[.#]:第一個數字控制顯示的寬度;第二個#表示小數點後的精度;
                    %3.1f
                -: 左對齊
                +:顯示數值的符號

4、操作符

        算術操作符:
            x+y, x-y, x*y, x/y, x^y, x%y
            -x
            +x: 轉換爲數值;

        字符串操作符:沒有符號的操作符,字符串連接

        賦值操作符:
            =, +=, -=, *=, /=, %=, ^=
            ++, --

        比較操作符:
            >, >=, <, <=, !=, ==

        模式匹配符:
            ~:是否匹配
            !~:是否不匹配

        邏輯操作符:
            &&
            ||
            !

        函數調用:
            function_name(argu1, argu2, ...)

        條件表達式:
            selector?if-true-expression:if-false-expression

示例:

[root@node1 ~]# awk -F: '{$3>=1000?usertype="Common User":usertype="Sysadmin or SysUser";printf "%15s:%-s\n",$1,usertype}' /etc/passwd
           root:Sysadmin or SysUser
            bin:Sysadmin or SysUser
         daemon:Sysadmin or SysUser
            adm:Sysadmin or SysUser
             lp:Sysadmin or SysUser
           sync:Sysadmin or SysUser
       shutdown:Sysadmin or SysUser
           halt:Sysadmin or SysUser
           mail:Sysadmin or SysUser
       operator:Sysadmin or SysUser
          games:Sysadmin or SysUser
            ftp:Sysadmin or SysUser
         nobody:Sysadmin or SysUser
systemd-network:Sysadmin or SysUser
           dbus:Sysadmin or SysUser
        polkitd:Sysadmin or SysUser
        postfix:Sysadmin or SysUser
           sshd:Sysadmin or SysUser
         chrony:Sysadmin or SysUser
          user1:Common User
         hadoop:Common User
           bash:Common User
       testbash:Common User
         basher:Common User
        nologin:Common User
         centos:Common User
         fedoer:Common User
          nginx:Common User

5、PATTERN

        (1) empty:空模式,匹配每一行;
        (2) /regular expression/:僅處理能夠被此處的模式匹配到的行;
        (3) relational expression: 關係表達式;結果有“真”有“假”;結果爲“真”纔會被處理;
            真:結果爲非0值,非空字符串;
        (4) line ranges:行範圍,
            startline,endline:/pat1/,/pat2/

            注意: 不支持直接給出數字的格式
            ~]# awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd
        (5) BEGIN/END模式
            BEGIN{}: 僅在開始處理文件中的文本之前執行一次;
            END{}:僅在文本處理完成之後執行一次;

示例:
定義一個數組,裏面有三個元素,循環打印裏面的元素各一次

[root@node1 ~]# awk 'BEGIN{weekday["mon"]="Monday";weekday["tue"]="Tuesday";weekday["wen"]="Wensday";for(i in weekday)print weekday[i]}'
Wensday
Tuesday
Monday

顯示fstab文件中每個文件系統類型出現的次數,UUID開頭的行的第三個字段表示掛載的文件系統類型

[root@node1 ~]# awk '/^UUID\>/{fs[$3]++}END{for(i in fs)print i,fs[i]}' /etc/fstab
xfs 1
  • 3、描述awk函數示例(至少3例)

awk函數分爲內置函數與自定義函數

  • 內置函數

    數值處理:

    rand():返回0和1之間一個隨機數;

字符串處理:

length([s]):返回指定字符串的長度;
sub(r,s,[t]):以r表示的模式來查找t所表示的字符中的匹配的內容,並將其第一次出現替換爲s所表示的內容;
gsub(r,s,[t]):以r表示的模式來查找t所表示的字符中的匹配的內容,並將其所有出現均替換爲s所表示的內容;
split(s,a[,r]):以r爲分隔符切割字符s,並將切割後的結果保存至a所表示的數組中;

示例:

[root@node1 ~]#  netstat -tan | awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}'
192.168.10.1 1
0.0.0.0 2

[root@node1 ~]# awk '{for(i=1;i<=NF;i++)count[$i]++}END{for(i in count) print i,count[i]}' /etc/fstab
swap 2
fstab(5), 1
filesystems, 1
2018 1
on 1
/etc/fstab 1
5 1
/boot 1
more 1
mount(8) 1
UUID=38a2a3be-952e-4541-814b-77553d4e9204 1
pages 1
'/dev/disk' 1
21:24:35 1
Sep 1
/dev/mapper/centos-swap 1
blkid(8) 1
See 1
/dev/mapper/centos-root 1
for 1
and/or 1
anaconda 1
/ 1
findfs(8), 1
under 1
Created 1
0 6
info 1
Accessible 1
# 7
defaults 3
xfs 2
man 1
are 1
reference, 1
by 2
maintained 1
Wed 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章