zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Linux从入门到入土②(系统管理、正则表达式)

2023-02-18 15:41:10 时间

@TOC

系统管理

Linux 中的进程和服务

计算机中,一个正在执行的程序或命令,被叫做“进程”(process)。

启动之后一只存在、常驻内存的进程,一般被称作“服务”(service)。

windows电脑中的服务:

在这里插入图片描述

这里有几个注意点:

  • 在linux中,每一个程序都有自己的一个进程,每一个进程有一个id号(PID)
  • 每一个进程,都有一个父进程!
  • 进程可以有两种存在方式:前台、后台
  • 一般的服务都是后台运行的,基本的程序都是前台运行的

我们整个系统运行的时候可能需要很多后台的服务来支撑,这些服务往往都是在系统一启动的时候就开始了,直到系统关闭的时候才会被终止,所有的这些服务,我们称作系统服务,而具体执行这些服务的进程,我们往往把他们叫做守护进程(deamon).

我们可以发现Linux中的很多服务是以d结尾的,说明当成的进程是守护进程。

在Linux里面系统服务和守护进程可以当成一个东西

Service服务管理(CentOS 6 版本-了解)

基本语法

service 服务名 start | stop |· restart | status

使用

首先我们查看一下服务:

ls /etc/init.d/服务名 
在这里插入图片描述

(1)查看网络服务的状态

[root@hadoop100 桌面]#service network status 

(2)停止网络服务

[root@hadoop100 桌面]#service network stop

(3)启动网络服务

[root@hadoop100 桌面]#service network start

(4)重启网络服务

[root@hadoop100 桌面]#service network restart

systemctl服务管理(CentOS 7 版本-重点掌握)

基本语法

systemctl start | stop | restart | status 服务名

我们还是来查看一下服务:

这回的位置不一样

ls /usr/lib/systemd/system
在这里插入图片描述

我们可以明显的感觉到服务的数量变多了

使用

(1)查看防火墙服务的状态

[root@hadoop100 桌面]# systemctl status firewalld

(2)停止防火墙服务

[root@hadoop100 桌面]# systemctl stop firewalld

(3)启动防火墙服务

[root@hadoop100 桌面]# systemctl start firewalld

(4)重启防火墙服务

[root@hadoop100 桌面]# systemctl restart firewalled

chkconfig 设置后台服务的自启配置(CentOS 6 版本)

基本语法

chkconfig (功能描述:查看所有服务器自启配置)
chkconfig 服务名 off (功能描述:关掉指定服务的自动启动)
chkconfig 服务名 on (功能描述:开启指定服务的自动启动)
chkconfig 服务名 --list (功能描述:查看服务开机启动状态)

使用

(1)开启/关闭 network(网络)服务的自动启动

[root@hadoop100 桌面]#chkconfig network on
[root@hadoop100 桌面]#chkconfig network off

(2)开启/关闭 network 服务指定级别的自动启动

[root@hadoop100 桌面]#chkconfig --level 指定级别 network on
[root@hadoop100 桌面]#chkconfig --level 指定级别 network of

systemctl 设置后台服务的自启配置

基本语法

systemctl list-unit-files (功能描述:查看服务开机启动状态)
systemctl disable service_name (功能描述:关掉指定服务的自动启动)
systemctl enable service_name (功能描述:开启指定服务的自动启动)

例如:

在这里插入图片描述
在这里插入图片描述

static代表我现在不能确定这个服务是否启动还是不启动,因为当前服务可能与其他服务相关联,他可能依赖于其他服务。

使用

(1)开启/关闭 iptables(防火墙)服务的自动启动

[root@hadoop100 桌面]# systemctl enable firewalld.service
[root@hadoop100 桌面]# systemctl disable firewalld.service

正则表达式

正则表达式是处理字符串的方法,他是==以行为单位==来进行字符串处理的行为,通过一些特殊符号的辅助,可以让使用者轻易的达到搜索/删除/取代某特定字符串的处理程序

正则表达是一种表示方法,工具程序支持这种表示方法,则可以用正则表达式来进行字符串的处理。例如:vi、grep、awk、sed等

用途:分析日志、简单的垃圾邮件过滤、软件(系统)配置等等

正则表达式拥有不同的规范,POSIX规范,Perl规范,Python规范等,Shell中的grep、egrep都使用POSIX规范。POSIX规范包括:

  1. 基本的正则表达式(Basic Regular Expression 又叫BasicRegEx 简称BREs)
  2. 扩 展 的 正 则 表 达 式 ( Extended Regular Expression 又 叫Extended RegEx 简称EREs)

基本正则表达式

基本正则表达式常用字符:

在这里插入图片描述

==POSIX字符==

POSIX字符类是一个形如[:...:]特殊元序列(meta sequence),他可以用于匹配特定的字符范围。

例如:

  • [:alnum:] 匹配任意一个字母或数字字符
  • [:alpha:] 匹配任意一个字母字符(包括大小写字母)
  • [:blank:] 空格与制表符(横向和纵向)
  • [:digit:] 匹配任意一个数字字符
  • [:lower:] 匹配小写字母
  • [:upper:] 匹配大写字母
  • [:punct:] 匹配标点符号
  • [:space:] 匹配一个包括换行符、回车等在内的所有空白符
  • [:graph:] 匹配任何一个可以看得见的且可以打印的字符
  • [:xdigit:]任何一个十六进制数(即:0-9,a-f,A-F)
  • [:cntrl:] 任何一个控制字符(ASCII字符集中的前32个字符)
  • [:print:] 任何一个可以打印的字符

接下来我们就来看看几种使用方法:

==搜索指定字符串(以grep命令,搜索regular.txt文件为例)==

grep –n ‘the’ man_db.conf
在这里插入图片描述

==含有元字符的搜索 (以regular.txt为例)==

1.grep –n ‘t[ae]st’ regular.txt
2.grep –n ‘[^g]oo’ regular.txt
3.grep -n‘[^a-z]oo’ regular.txt
4.grep –n ‘[^[:lower:]]oo’ regular.txt
5.grep –n ‘[^[:digit:]]’ regular.txt

==指定开始、结尾字符串的搜索 (以grep命令,搜索regular.txt文件为例)==

1.grep –n ‘^the’ regular.txt
2.grep –n ‘^[a-z]’ regular.txt
3.grep -n‘^[[:lower:]]’ regular.txt
4. grep -n ‘^[[:alpha:]]’ regular.txt
5.grep –n‘\.$’ regular.txt
6. grep –n‘^$’ regular.txt
7. grep –v‘^$’ regular.txt | grep –v ‘^#’

==含 有 任 意 、 重 复 字 符 的 字 符 串 搜 索 ( 以 grep 命 令 , 搜 索regular.txt文件为例)==

  • .:一定有一个任意字符
  • *:重复前一个字符,0到多次
grep –n‘g..d’ regular.txt
grep –n ‘o*’ regular.txt
grep –n‘oo*’ regular.txt
grep –n ‘g*g’ regular.txt
grep –n ‘g.*g’ regular.txt

==给定字符范围的字符串搜索 (以grep命令,搜索regular.txt文件为例)==

‘{}’能够指定字符个数,但‘{}’在shell中有特殊意义,因此需要使用转移字符‘\’

grep –n ‘o\{2\}’ regular.txt
grep –n ‘o\{2,5\}’ regular.txt

总结:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

正则表达式与通配符的区别

**通配符是bash 操作接口的一个功能

正则表达式是一种字符串处理的表示方式。**

例如:

通配符中,*代表0~无限多个字符, 而正则中*标识重复前一个字符多次

通配符中,?表示任意一个字符, 正则中则用’.’表示

扩展正则表达式

==grep 仅支持基础正则表达式,如果要使用扩展正则表达式,一般使用egrep, 或 grep -E。==

在这里插入图片描述

例如:

标准正则:

grep -v'^$’ regular_express.txt l grep -v ‘^#’

用扩展正则表达式替换为:

egrep -v'^$|^#’regular_express.txt

总结:

在这里插入图片描述
在这里插入图片描述

附:Perl正则

在这里插入图片描述

sed工具

  • sed 命令是利用脚本来处理文本文件。
  • sed 可依照脚本的指令来处理、编辑文本文件。
  • sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

sed工作流程图:

在这里插入图片描述

语法规则:

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数:

  • -e\<script>或--expression=\<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处 理输入的文本文件。
  • -h或--help 显示帮助。
  • -n或--quiet或--silent 取消默认sed的输出(因为sed默认是输出所有),常与sed内置命令p一起使用
  • -V或--version 显示版本信息。
  • -r 表示支持正则拓展

script用单引号('')括起来,不过当我们的script里面要使用变量的时候需要双引号("")。

例如:

设置shell变量var的值为evening,用sed命令查找匹配var变量值的行:

在这里插入图片描述

==动作说明==

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除, d 后面通常不接任何东西;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g !
    • 格式一般如下:s/正则/替换内容/g
    • g表示全局匹配

==sed的匹配范围==:

在这里插入图片描述

==应用举例==

以行为单位新增/删除

[root@www ~]# nl passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown


nl passwd | sed '2,5d’
nl passwd | sed '2d'
nl passwd | sed '3,$d’
nl passwd | sed ‘2a hello world’ #第2行后
nl /etc/passwd | sed ‘2i drink tea’ #第2行前
nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?’ # 多行添加

以行为单位显示和替换

nl passwd | sed ‘2,5c No 2-5 number’ #替换
nl passwd | sed ‘5,7p No 2-5 number’ #替换

以行为单位搜索并显示

nl /etc/passwd | sed '/root/p’
1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/bin/

数据的搜索并删除

nl /etc/passwd | sed '/root/d'
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3 bin:x:2:2:bin:/bin:/bin/sh

数据的搜索并执行命令

nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
1 root:x:0:0:root:/root:/bin/blueshell

数据的搜索并替换

nl /etc/passwd | sed -n ‘s/root/sroot/g'

直接修改内容(危险)

sed –i ‘s/\.$/\!/g’ regular.txt

awk工具

awk也是管道命令,==sed通常处理一行数据,awk处理一行中的每个字段,默认以空格或tab键分隔==。

使用方法:

awk [option] ‘条件类型1 {动作1} 条件类型2 {动作2}…’ filename

注意:条件类型和动作一定用单引号括起来。

==动作里面的语法类似于C语言==

在这里插入图片描述

处理流程:

  1. 读入第一行,并将第一行的资料填入$0(整行),$1(一行的第一个字段),$2,…
  2. 依据“条件类型的限制”,判断是否需要进行后面的动作
  3. 完成所有动作
  4. 对后续行重复上面的步骤1~3,直到所有的数据都读完为止

常用内置变量:

  • NF:每一行($0)拥有的字段总数
  • NR:目前awk所处理的是第几行
  • FS:目前的分隔字符,默认是空格

awk,必须外层单引号,内层双引号

内置变量$1 $2 ···都不得添加双引号,否则会识别为文本,尽量别加引号。

在这里插入图片描述

逻辑运算字符:

><>=<===!=

在这里插入图片描述

awk中的begin、end:

  • BEGIN{ 执行前的语句 }
  • END { 处理完所有的行后要执行的语句 }

例:

cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}'
cat /etc/passwd | awk ‘BEGIN {FS=":"} $3<10 {print $1 "\t" $3}'

awk中的IF语句:

if (condition)
{
	action-1
	action-1
	.
	.
	action-n
}
在这里插入图片描述

awk中的for语句:

for (initialisation; condition; increment/decrement)
	action

例:

awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'

awk中的While语句:

while (condition)
	action

例如:

awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'

break 和 continue语句:

  • break结束循环,$ awk 'BEGIN { sum = 0; for (i = 0; i < 20; ++i) { sum += i; if (sum > 50) break; else print "Sum = ", sum } }' awk 'BEGIN {for (i = 1; i <= 20; ++i) {if (i % 2 == 0) print i ; else continue} }'
  • continue结束本次循环

exit

结束脚本程序的执行,该函数接受一个整数作为参数表示 AWK 进程结束状态。 如果没有提供该参数,其默认状态为 0。

$ awk 'BEGIN {
	sum = 0; for (i = 0; i < 20; ++i) {
	sum += i; if (sum > 50) exit(10); else print "Sum =", sum
   }
}'

附:Linux系统中文件颜色分别代表什么?

1、蓝色代表目录

2、白色代表一般性文件,如文本文件、配置文件、源码文件等

3、绿色代表可执行文件

4、黄色代表设备文件

5、红色代表压缩文件

6、红色代表闪烁代表连接文件有问题

7、灰色代表其他文件

8、浅蓝色代表链接文件

Linux 系统启动级别

Linux的启动分为五个阶段:

  • 内核的引导
  • 运行init
  • 系统初始化
  • 建立终端
  • 用户登陆系统

init程序的类型:

  • SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
  • Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
  • Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。
在这里插入图片描述

启动步骤:开机之后首先进入到BIOS的自检和启动过程,然后去引导分区里面去获取引导文件和linux内核中的一些内容进行整个系统的初始化,初始化完成之后进入init进程,它是用户级别主动启动的第一个进程,接下来他就会判断当前系统的运行级别,根据运行级别启动对应的系统服务。

我们可以看到Linux系统有七种运行级别,级别越高支持的功能就会越丰富。

级别6是一个重启的级别,与前面无关

NFS指网络文件系统

CentOS7 的运行级别简化为:

multi-user.target 等价于原运行级别 3(多用户有网,无图形界面)

graphical.target 等价于原运行级别 5(多用户有网,有图形界面)

查看当前运行级别:

systemctl get-default

修改当前运行级别

systemctl set-default TARGET.target

(这里 TARGET 取 multi-user 或者 graphical)

我们也可以在命令行使用:

  • init 3进入非图形化模式
  • init 5进入图形化模式