Linux的systemd特性及gawk使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux的systemd特性及gawk使用相关的知识,希望对你有一定的参考价值。
-
1、 简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginxapache实现通过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服务
安装软件
[[email protected] ~]# yum install -y pcre pcre-devel openssl-devel
[[email protected] ~]# useradd nginx
[[email protected] ~]# passwd nginx
[[email protected] ~]# tar -vzxf nginx-1.13.3.tar.gz -C /usr/local
[[email protected] ~]# cd nginx-1.13.3/
[[email protected] 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
[[email protected] nginx-1.13.3]# make && make install
编辑文件,实现systemd管理
[[email protected] 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
最后重启并关闭
[[email protected] nginx-1.13.3]# /usr/local/nginx/sbin/nginx
[[email protected] nginx-1.13.3]# /usr/local/nginx/sbin -s reload
[[email protected] 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中直接定义
示例:
[[email protected] ~]# 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
[[email protected] ~]# 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) 不会自动换行,需要显式给出换行控制符,
(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
示例:
[[email protected] ~]# awk -F: ‘{$3>=1000?usertype="Common User":usertype="Sysadmin or SysUser";printf "%15s:%-s
",$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{}:仅在文本处理完成之后执行一次;
示例:
定义一个数组,里面有三个元素,循环打印里面的元素各一次
[[email protected] ~]# awk ‘BEGIN{weekday["mon"]="Monday";weekday["tue"]="Tuesday";weekday["wen"]="Wensday";for(i in weekday)print weekday[i]}‘
Wensday
Tuesday
Monday
显示fstab文件中每个文件系统类型出现的次数,UUID开头的行的第三个字段表示挂载的文件系统类型
[[email protected] ~]# 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所表示的数组中;
示例:
[[email protected] ~]# 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
[[email protected] ~]# 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
以上是关于Linux的systemd特性及gawk使用的主要内容,如果未能解决你的问题,请参考以下文章