@TOC
系统管理
Linux 中的进程和服务
计算机中,一个正在执行的程序或命令,被叫做“进程”(process)。
启动之后一只存在、常驻内存的进程,一般被称作“服务”(service)。
windows电脑中的服务:
在这里插入图片描述
这里有几个注意点:
- 在linux中,每一个程序都有自己的一个进程,每一个进程有一个id号(PID)
- 每一个进程,都有一个父进程!
- 进程可以有两种存在方式:前台、后台
- 一般的服务都是后台运行的,基本的程序都是前台运行的
我们整个系统运行的时候可能需要很多后台的服务来支撑,这些服务往往都是在系统一启动的时候就开始了,直到系统关闭的时候才会被终止,所有的这些服务,我们称作系统服务
,而具体执行这些服务的进程,我们往往把他们叫做守护进程(deamon)
.
我们可以发现Linux中的很多服务是以d结尾的,说明当成的进程是守护进程。
在Linux里面系统服务和守护进程可以当成一个东西
Service服务管理(CentOS 6 版本-了解)
基本语法
代码语言:c复制service 服务名 start | stop |· restart | status
使用
首先我们查看一下服务:
代码语言:c复制ls /etc/init.d/服务名
(1)查看网络服务的状态
代码语言:txt复制[root@hadoop100 桌面]#service network status
(2)停止网络服务
代码语言:txt复制[root@hadoop100 桌面]#service network stop
(3)启动网络服务
代码语言:txt复制[root@hadoop100 桌面]#service network start
(4)重启网络服务
代码语言:txt复制[root@hadoop100 桌面]#service network restart
systemctl服务管理(CentOS 7 版本-重点掌握)
基本语法
systemctl start | stop | restart | status 服务名
我们还是来查看一下服务:
这回的位置不一样
代码语言:c复制ls /usr/lib/systemd/system
我们可以明显的感觉到服务的数量变多了
使用
(1)查看防火墙服务的状态
代码语言:txt复制[root@hadoop100 桌面]# systemctl status firewalld
(2)停止防火墙服务
代码语言:txt复制[root@hadoop100 桌面]# systemctl stop firewalld
(3)启动防火墙服务
代码语言:txt复制[root@hadoop100 桌面]# systemctl start firewalld
(4)重启防火墙服务
代码语言:txt复制[root@hadoop100 桌面]# systemctl restart firewalled
chkconfig 设置后台服务的自启配置(CentOS 6 版本)
基本语法
代码语言:txt复制chkconfig (功能描述:查看所有服务器自启配置)
代码语言:txt复制chkconfig 服务名 off (功能描述:关掉指定服务的自动启动)
代码语言:txt复制chkconfig 服务名 on (功能描述:开启指定服务的自动启动)
代码语言:txt复制chkconfig 服务名 --list (功能描述:查看服务开机启动状态)
使用
(1)开启/关闭 network(网络)服务的自动启动
代码语言:txt复制[root@hadoop100 桌面]#chkconfig network on
[root@hadoop100 桌面]#chkconfig network off
(2)开启/关闭 network 服务指定级别的自动启动
代码语言:txt复制[root@hadoop100 桌面]#chkconfig --level 指定级别 network on
[root@hadoop100 桌面]#chkconfig --level 指定级别 network of
systemctl 设置后台服务的自启配置
基本语法
代码语言:txt复制systemctl list-unit-files (功能描述:查看服务开机启动状态)
代码语言:txt复制systemctl disable service_name (功能描述:关掉指定服务的自动启动)
代码语言:txt复制systemctl enable service_name (功能描述:开启指定服务的自动启动)
例如:
static代表我现在不能确定这个服务是否启动还是不启动,因为当前服务可能与其他服务相关联,他可能依赖于其他服务。
使用
(1)开启/关闭 iptables(防火墙)服务的自动启动
代码语言:txt复制[root@hadoop100 桌面]# systemctl enable firewalld.service
[root@hadoop100 桌面]# systemctl disable firewalld.service
正则表达式
正则表达式是处理字符串的方法,他是==以行为单位==来进行字符串处理的行为,通过一些特殊符号的辅助,可以让使用者轻易的达到搜索/删除/取代某特定字符串的处理程序
正则表达是一种表示方法,工具程序支持这种表示方法,则可以用正则表达式来进行字符串的处理。例如:vi、grep、awk、sed等
用途:分析日志、简单的垃圾邮件过滤、软件(系统)配置等等
正则表达式拥有不同的规范,POSIX规范,Perl规范,Python规范等,Shell中的grep、egrep都使用POSIX规范。POSIX规范包括:
- 基本的正则表达式(Basic Regular Expression 又叫BasicRegEx 简称BREs)
- 扩 展 的 正 则 表 达 式 ( 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文件为例)==
代码语言:shell复制grep –n ‘the’ man_db.conf
==含有元字符的搜索 (以regular.txt为例)==
代码语言:shell复制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文件为例)==
代码语言:text复制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中有特殊意义,因此需要使用转移字符‘’
。
代码语言:shell复制grep –n ‘o{2}’ regular.txt
grep –n ‘o{2,5}’ regular.txt
总结:
正则表达式与通配符的区别
**通配符是bash 操作接口的一个功能
正则表达式是一种字符串处理的表示方式。**
例如:
通配符中,*
代表0~无限多个字符, 而正则中*
标识重复前一个字符多次
通配符中,?
表示任意一个字符, 正则中则用’.’
表示
扩展正则表达式
==grep 仅支持基础正则表达式,如果要使用扩展正则表达式,一般使用egrep
, 或 grep -E
。==
例如:
标准正则:
代码语言:txt复制grep -v'^$’ regular_express.txt l grep -v ‘^#’
用扩展正则表达式替换为:
代码语言:txt复制egrep -v'^$|^#’regular_express.txt
总结:
附:Perl正则
sed工具
- sed 命令是利用脚本来处理文本文件。
- sed 可依照脚本的指令来处理、编辑文本文件。
- sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
sed工作流程图:
语法规则:
代码语言:text复制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的匹配范围==:
==应用举例==
以行为单位新增/删除
代码语言:shell复制[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 ?’ # 多行添加
以行为单位显示和替换
代码语言:shell复制nl passwd | sed ‘2,5c No 2-5 number’ #替换
nl passwd | sed ‘5,7p No 2-5 number’ #替换
以行为单位搜索并显示
代码语言:shell复制nl /etc/passwd | sed '/root/p’
1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/bin/
数据的搜索并删除
代码语言:shell复制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
数据的搜索并执行命令
代码语言:shell复制nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
1 root:x:0:0:root:/root:/bin/blueshell
数据的搜索并替换
代码语言:text复制nl /etc/passwd | sed -n ‘s/root/sroot/g'
直接修改内容(危险)
代码语言:text复制sed –i ‘s/.$/!/g’ regular.txt
awk工具
awk也是管道命令,==sed通常处理一行数据,awk处理一行中的每个字段,默认以空格或tab键分隔==。
使用方法:
代码语言:shell复制awk [option] ‘条件类型1 {动作1} 条件类型2 {动作2}…’ filename
注意:条件类型和动作一定用单引号括起来。
==动作里面的语法类似于C语言==
处理流程:
- 读入第一行,并将第一行的资料填入$0(整行),$1(一行的第一个字段),$2,…
- 依据“条件类型的限制”,判断是否需要进行后面的动作
- 完成所有动作
- 对后续行重复上面的步骤1~3,直到所有的数据都读完为止
常用内置变量:
- NF:每一行($0)拥有的字段总数
- NR:目前awk所处理的是第几行
- FS:目前的分隔字符,默认是空格
awk,必须外层单引号,内层双引号
内置变量$1 $2 ···都不得添加双引号,否则会识别为文本,尽量别加引号。
逻辑运算字符:
>
、<
、>=
、<=
、==
、!=
awk中的begin、end:
- BEGIN{ 执行前的语句 }
- END { 处理完所有的行后要执行的语句 }
例:
代码语言:text复制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语句:
代码语言:text复制if (condition)
{
action-1
action-1
.
.
action-n
}
awk中的for语句:
代码语言:text复制for (initialisation; condition; increment/decrement)
action
例:
代码语言:txt复制awk 'BEGIN { for (i = 1; i <= 5; i) print i }'
awk中的While语句:
代码语言:text复制while (condition)
action
例如:
代码语言:text复制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。
代码语言:text复制$ 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进入图形化模式