第四章:Linux基础之进程和服务

什么是进程?从用户的角度来看进程是程序的一次执行过程。从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。进程是资源分配的最小单位,每一个进程都有自己独立的地址空间与执行状态。像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程。

进程管理

进程:linux自身运行的独立程序
交互进程:有一个shell启动的进程,可以再前台运行,也可以在后台运行
批处理进程:是一个进程序列,和终端没有联系
守护进程(监控进程):linux系统启动时,启动并在后台运行的进程

1.PID:进程的ID(每一个新进程都有一个唯一的PID)
2.PPID:父进程的ID
3.任何一个进程都可以创建一个子进程
4.在redhat 7以上,所有的父进程:systemd;在redhat 5,6中,所有进程的父进程:init

top命令:查看实时的进程状态

[root@localhost ~]# top

ps命令:显示当前进程的状态
常用选项:
-aux:列出所有进程
-ef:列出所有进程(-aux格式不同)
-l:列出和当前用户有关的进程
-u:查看某一用户的进程状态

[root@localhost ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   3689   3656  0  80   0 - 51025 wait   pts/0    00:00:00 su
4 S     0   3698   3689  0  80   0 - 29035 wait   pts/0    00:00:00 bash
0 R     0   4150   3698  0  80   0 - 30315 -      pts/0    00:00:00 ps
[root@localhost ~]#

进程状态:

运行中:
R:该进程正在运行或等待运行
睡眠:
S:正在休眠但是可以被唤醒
D:正在休眠,而且不可以被唤醒,该进程被中断,可能会导致设备的异常状态
K:正在休眠,而且不可以被唤醒,该进程可以被中断
已停止:
T:进程被停止,但是可以通过其他进程来进行恢复(或者正在被调试的进程)
僵死:
Z:子进程在退出时向父进程发出信号,除PID外,所有资源全部释放
X:父进程获取子进程的结构,子进程可以完全释放,该状态进程中是看不到的

进程优先级:

<:高优先级
n:低优先级
s:包含子进程
+:位于后台的进程组

ps -aux参数解释:

%CPU:占用CPU使用率
%MEN:占用内存使用率
VSZ:占用的虚拟内存大小
RSS:占用的实际内存大小
TTY:终端的次要装置号码(minor device number of tty)
STAT:该进程的状态
START:进程开始时间
TIME:进程执行时间
COMMAND:所执行的命令

会话和作业

作业:一个正在执行的进程,而且作业可以包含一个或多个进程
作业控制:控制正在运行的进程的行为。如:挂起一个进程,等一会再执行。这样就可以在多个作业之间切换。

&:在命令后面使用该符号,可以让命令在后台执行

jobs:查看正在后台执行的作业

sleep 1000 延迟1000秒
ctrl+c:中断
ctrl+z:挂起

[root@localhost ~]# jobs
[root@localhost ~]# sleep 1000
^Z
[1]+  Stopped                 sleep 1000
[root@localhost ~]# sleep 2000 &
[2] 3252
[root@localhost ~]# jobs
[1]+  Stopped                 sleep 1000
[2]-  Running                 sleep 2000 &
[root@localhost ~]# jobs -l
[1]+  3238 Stopped                 sleep 1000
[2]-  3252 Running                 sleep 2000 &
[root@localhost ~]# 

fg命令:将后台的命令调到前台继续执行,不能再放到后台了(%作业编号)

[root@localhost ~]# jobs -l 
[1]+  3827  stop               sleep 10000
[2]-  3856  running            sleep 30000 &
[root@localhost ~]#  fg 2
sleep 30000
^Z                                     //ctrl+z 挂起进程
[2]+ stop               sleep 30000 
[root@localhost ~]# jobs
[1]-  stop               sleep 10000
[2]+  stop               sleep 30000

bg命令:将后台暂停的作业继续执行(%作业编号)

[root@localhost ~]#  bg 2
[2]+ sleep 30000 &
[root@localhost ~]# jobs
[1]+  stop                  sleep 10000
[2]-  running               sleep 30000 &
[root@localhost ~]#

ps -j:显示当前作业进程信息(TGID:线程组ID号 SID:会话ID号)

[root@localhost ~]# ps -j

kill命令:杀死进程
kill -l:显示可以传递给linux进程的所有信号
kill -9 PID:强制杀死一个进程
kill -15 PID:正常的方式终止一个进程
kill -2:ctrl+c中断进程操作一样

[root@localhost ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
[root@localhost ~]# ps -j
  PID  PGID   SID TTY          TIME CMD
 3207  3207  3207 pts/1    00:00:00 bash
 3238  3238  3207 pts/1    00:00:00 sleep
 3252  3252  3207 pts/1    00:00:00 sleep
 3370  3370  3207 pts/1    00:00:00 ps
[root@localhost ~]# jobs -l
[1]-  3238 Stopped                 sleep 1000
[2]+  3252 Stopped                 sleep 2000
[root@localhost ~]# kill -9 3252
[2]+  Killed                  sleep 2000
[root@localhost ~]# jobs
[1]+  Stopped                 sleep 1000
[root@localhost ~]# 

控制服务和守护进程

system:是所有进程的父进程(linux内核3.0以上版本)
systemctl:用户管理各种类型的systemd对象,这些对象称为:单元(常用单元:.service(服务单元).socket(套接字).path(路径单元))

ssh:是一个协议
sshd:是一个进程

systemctl status sshd.service显示中有几个关键字—红帽7

loaded:单元配置文件以处理
active(running):正在运行
active(exited):配置成功
active(waiting):运行中,但正在等待事件
inactive:不在运行
enable:开机自启动
disable:开机不启动
static:无法启动,但可以通过某一个已经启动的单元来启动

[root@localhost ~]# systemctl status sshd.service
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since Fri 2018-05-18 19:50:20 EDT; 1h 27min ago
  Process: 1293 ExecStartPre=/usr/sbin/sshd-keygen (code=exited, status=0/SUCCESS)
 Main PID: 1336 (sshd)
   CGroup: /system.slice/sshd.service
           └─1336 /usr/sbin/sshd -D

May 18 19:50:20 localhost systemd[1]: Started OpenSSH server daemon.
May 18 19:50:20 localhost sshd[1336]: Server listening on 0.0.0.0 port 22.
May 18 19:50:20 localhost sshd[1336]: Server listening on :: port 22.
[root@localhost ~]#

控制服务:


start:在系统中启动一项服务
stop:等待程序需处理完毕后再stop
restart:直接关闭程序再开启
reload:重新加载配置文件,进程暂停,然后把配置文件加载进去后,继续执行后续操作。(进程的PID不会发生改变)
enable:设置开机自启
disable:关闭开机自启
status:查看某一单元的状态

[root@localhost ~]# systemctl enable sshd
[root@localhost ~]#

备注:在红帽5,6中,Service sshd status:查看服务状态用 Chkconfig ssh on/off:开机自动启动

分析和存储日志

日志:用于系统审核和故障排除
在Redhat 7中,系统日志消息由两个服务(systemd-journald和rsyslogd)负责处理。

日志文件都保存在/var/log目录中:

/var/log/messages //大多数系统日志消息记录的日志
/var/log/secure //安全和身份验证的消息和错误日志
/var/log/maillog //与邮件服务器相关的日志
/var/log/cron //与定时执行任务相关的日志
/var/log/boot.log //记录和系统启动有关的日志

[root@localhost ~]# ll /var/log/
total 696
drwxr-xr-x. 2 root   root     4096 May 18 12:09 anaconda
drwxr-x---. 2 root   root       22 May 18 12:11 audit
-rw-r--r--. 1 root   root     9930 May 18 19:50 boot.log
-rw-------. 1 root   utmp        0 May 18 11:57 btmp
drwxr-xr-x. 2 chrony chrony      6 Feb  5  2014 chrony
-rw-r--r--. 1 root   root     2343 May 18 21:40 cron
drwxr-xr-x. 2 lp     sys        54 May 18 12:14 cups
-rw-r--r--. 1 root   root    31979 May 18 19:50 dmesg
-rw-r--r--. 1 root   root    32014 May 18 19:39 dmesg.old
drwx--x--x. 2 root   gdm        49 May 18 19:50 gdm
-rw-r--r--. 1 root   root   292292 May 18 19:50 lastlog
drwx------. 5 root   root       37 May 18 11:58 libvirt
-rw-------. 1 root   root      594 May 18 19:50 maillog
-rw-------. 1 root   root   319277 May 18 21:46 messages
drwxr-xr-x. 3 root   root       17 May 18 11:58 pluto
-rw-r--r--. 1 root   root        0 May 18 19:50 pm-powersave.log
drwx------. 2 root   root        6 Jan 26  2014 ppp
drwxr-xr-x. 2 root   root        6 Apr  2  2014 qemu-ga
drwxr-xr-x. 2 root   root       41 May 18 12:13 rhsm
drwxr-xr-x. 2 root   root       17 May 18 12:11 sa
drwx------. 3 root   root       16 May 18 11:58 samba
-rw-------. 1 root   root     5250 May 18 21:46 secure
drwx------. 2 root   root        6 Jan 27  2014 speech-dispatcher
-rw-------. 1 root   root        0 May 18 11:58 spooler
-rw-------. 1 root   root        0 May 18 11:56 tallylog
drwxr-xr-x. 2 root   root       22 May 18 12:11 tuned
-rw-rw-r--. 1 root   utmp     8832 May 18 19:53 wtmp
-rw-r--r--. 1 root   root    55616 May 18 20:08 Xorg.0.log
-rw-r--r--. 1 root   root    55551 May 18 19:39 Xorg.0.log.old
-rw-r--r--. 1 root   root    56080 May 18 12:14 Xorg.9.log
-rw-r--r--. 1 root   root    56080 May 18 12:13 Xorg.9.log.old
[root@localhost ~]# 

许多程序使用syslog协议将事件记录到系统,每一个日志都会根据消息类型和严重性分类:

编码 优先权 严重性
0 emerg 系统不可用
1 alert 必须立即采取措施
2 crit 严重
3 err 非严重错误
4 warning 警告
5 notice 正常但重要的事件
6 info 消息性事件
7 debug 调试级别消息

大多数日志由四个部分组成:

1.记录在日志的时间
2.发送该日志的主机
3.发送该日志消息的程序或进程
4.发送的实际消息

[root@localhost ~]# cat /var/log/messages
………….
………….
May 18 22:03:33 localhost dbus[685]: [system] Successfully activated service ‘org.freedesktop.hostname1′
May 18 22:03:33 localhost systemd: Started Hostname Service.
May 18 22:04:01 localhost fprintd: ** Message: No devices in use, exit
May 18 22:04:08 localhost dbus-daemon: dbus[685]: [system] Activating service name=’org.freedesktop.PackageKit’ (using servicehelper)
May 18 22:04:08 localhost dbus[685]: [system] Activating service name=’org.freedesktop.PackageKit’ (using servicehelper)
May 18 22:04:09 localhost dbus-daemon: dbus[685]: [system] Successfully activated service ‘org.freedesktop.PackageKit’
May 18 22:04:09 localhost dbus[685]: [system] Successfully activated service ‘org.freedesktop.PackageKit’
May 18 22:04:16 localhost kernel: e1000: enp0s3 NIC Link is Down
May 18 22:04:16 localhost NetworkManager[822]: (enp0s3): link disconnected (deferring action for 4 seconds)
May 18 22:04:18 localhost kernel: e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
May 18 22:04:18 localhost NetworkManager[822]: (enp0s3): link connected
[root@localhost ~]#

tail -f /var/log/secure :实时显示日志最后10行

[root@localhost ~]# tail -f /var/log/secure

打包和压缩

tar命令:打包

c:创建文档
t:列出存档内容
x:提取存档
f filename:要操作的存档的文件名
v:详细信息

注意:1.选项前不用加- 2.创建之前请检查有没有重名文件(覆盖且不提示) 3.要使tar可以打包选定的文件,执行tar命令的用户必须要能够读取这些文件

[root@localhost tmp]# tar cf a.tar /etc/     //打包/etc/
tar: Removing leading `/' from member names
[root@localhost tmp]# ll
total 29280
-rw-r--r--. 1 root root 29982720 May 18 22:55 a.tar
[root@localhost tmp]# tar tf a.tar       //列出存档内容
........
........
........
[root@localhost tmp]#

tar支持三种不同的压缩方式:

gzip:压缩速度最快,历史最久,应用最广泛
bzip2: 压缩成的存档文件小,可用性不如gzip
xz:最新的方式,提供最佳的压缩率

实际环境中3种情况都可能遇到,所以要创建不一样格式的归档文件就有自己的选项。

z用于gzip压缩:filename.tar.gz
j用于bzip2压缩:filename.tar.bz2
J用于xz压缩:filename.tar.xz

[root@localhost tmp]# ll -h
total 29M
-rw-r--r--. 1 root root 29M May 18 22:55 a.tar
[root@localhost tmp]# tar zcf a.tar.gz a.tar      //gzip压缩
[root@localhost tmp]# tar jcf a.tar.bz2 a.tar     //bzip2压缩
[root@localhost tmp]# tar Jcf a.tar.xz a.tar      //xz压缩
[root@localhost tmp]# ll -h
total 50M
-rw-r--r--. 1 root root  29M May 18 22:55 a.tar
-rw-r--r--. 1 root root 6.9M May 18 23:03 a.tar.bz2
-rw-r--r--. 1 root root 8.2M May 18 23:03 a.tar.gz
-rw-r--r--. 1 root root 5.6M May 18 23:04 a.tar.xz
[root@localhost tmp]# rm a.tar
rm: remove regular file ‘a.tar’? y
[root@localhost tmp]# tar xf a.tar.bz2 
[root@localhost tmp]# ll -h
total 50M
-rw-r--r--. 1 root root  29M May 18 22:55 a.tar
-rw-r--r--. 1 root root 6.9M May 18 23:03 a.tar.bz2
-rw-r--r--. 1 root root 8.2M May 18 23:03 a.tar.gz
-rw-r--r--. 1 root root 5.6M May 18 23:04 a.tar.xz
[root@localhost tmp]# rm a.tar
rm: remove regular file ‘a.tar’? y
[root@localhost tmp]# tar xf a.tar.bz2     //解压
[root@localhost tmp]# ll -h
total 50M
-rw-r--r--. 1 root root  29M May 18 22:55 a.tar
-rw-r--r--. 1 root root 6.9M May 18 23:03 a.tar.bz2
-rw-r--r--. 1 root root 8.2M May 18 23:03 a.tar.gz
-rw-r--r--. 1 root root 5.6M May 18 23:04 a.tar.xz
[root@localhost tmp]#

定时任务

cron:是一个进程。可以让linux周期性的执行某一个命令。

crontab命令:设置linux周期性的执行某一个命令

-u:设置某一个用户的周期性任务—root权限
-e:编辑crontab的工作内容
-l:查阅crontab的工作内容
-r:移除所有的crontab的工作内容,若仅要移除一项,请用-e去编辑

crontab基本格式 :

*  *  *  *  *  command
分  时  日  月  周  命令第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

crontab配置举例:

/1 * * * * command              //每1分钟执行一次
15,30,45 * * * * command        //每小时的15,30,45分钟执行
10,50 7-10 * * * command        //7点到10点的第10,50分钟执行
20,40 7-11 */1 * * command      //每隔一天的7点的第20和第40分钟执行
25,50 7-11 * * 1 command        //每隔一周的7点的第25和第50分钟执行
30 3 * * * command              //每天的3:30执行
30 3 1,10,20 * * command        //每月1,10,20日的3:30执行
30 3 * * 6,7 command            //每周六,周日的3:30执行
/15 9-16 * * * command          //每天9点到16点之间每隔15分钟执行

备注:
*:代表任何时候
,:代表分隔字段
-:代表一段时间范围内
/n:n代表数字,也就是每隔n单位间隔的意思

问:每个晚上10点,提示用户可以去睡觉了。

[root@localhost ~]# crontab -e -u linux00    //* */10 * * * go to sleep
crontab: installing new crontab
[root@localhost ~]# tail /var/log/cron        //查看任务日志文件
May 19 00:50:01 localhost CROND[1737]: (root) CMD (/usr/lib64/sa/sa1 1 1)
May 19 00:52:31 localhost crontab[1798]: (root) BEGIN EDIT (linux00)
May 19 00:56:11 localhost crontab[1798]: (root) REPLACE (linux00)
May 19 00:56:11 localhost crontab[1798]: (root) END EDIT (linux00)
May 19 00:56:35 localhost crontab[1844]: (root) BEGIN EDIT (linux00)
May 19 00:57:01 localhost CROND[1849]: (linux00) CMD (go to sleep)
May 19 00:57:20 localhost crontab[1844]: (root) REPLACE (linux00)
May 19 00:57:20 localhost crontab[1844]: (root) END EDIT (linux00)
May 19 00:58:01 localhost crond[705]: (linux00) RELOAD (/var/spool/cron/linux00)
May 19 00:58:02 localhost CROND[1871]: (linux00) CMD (go to sleep)
[root@localhost ~]# 

vim /etc/crontab:查看计划任务配置文件

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

第一行SHELL变量指定了系统要使用哪个shell,这里是bash
第二行PATH变量指定了系统执行命令的路径
第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户。

crontab配置原理

当使用者使用 crontab 这个命令来创建工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以帐号来作为判别的喔!举例来说, css使用 crontab 后, 他的工作会被纪录到 /var/spool/cron/css 中,但请注意,不要使用 vi 直接编辑该文件, 因为可能由于输入语法错误,会导致无法运行 cron 喔!另外, cron 运行的每一项工作都会被纪录到 /var/log/cron 这个登录档中.crond服务的最低侦测限制是分钟,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron 里面的数据内容 ,因此,只要你编辑完 /etc/crontab 这个文件,并且将他储存之后,那么 cron 的配置就自动的会来运行了,

如果你修改完的crontab或者添加的crontab没有马上的执行起来,那么你可以用 crontab restart crond来重启.

输入输出重定向

>file 标准输出重定向到文件(覆盖)
>>file 标准输出重定向到文件(追加)
2> 标准错误重定向到文件(覆盖)
2>> 标准错误重定向到文件(追加)
2>/dev/null 标准错误重定向到回收站
&>file 标准输出和标准错误重定向到文件(覆盖)
>>file 2>&1 标准输出和标准错误重定向到文件(追加)

[root@localhost tmp]# date > msg //覆盖
[root@localhost tmp]# cat msg
Tue May 29 21:57:26 EDT 2018
[root@localhost tmp]# date > msg //覆盖
[root@localhost tmp]# cat msg
Tue May 29 22:09:36 EDT 2018
[root@localhost tmp]# date >> msg //追加
[root@localhost tmp]# cat msg
Tue May 29 22:09:36 EDT 2018
Tue May 29 22:09:48 EDT 2018
[root@localhost tmp]# abc //错误命令
bash: abc: command not found…
[root@localhost tmp]# abc 2> msg //错误覆盖
[root@localhost tmp]# cat msg
bash: abc: command not found…
[root@localhost tmp]# abc 2>> msg //错误追加
[root@localhost tmp]# cat msg
bash: abc: command not found…
bash: abc: command not found…
[root@localhost tmp]# date &> msg //标准输出覆盖
[root@localhost tmp]# cat msg
Tue May 29 22:32:33 EDT 2018
[root@localhost tmp]# abc &> msg //错误输出覆盖
[root@localhost tmp]# cat msg
bash: abc: command not found…
[root@localhost tmp]# date >> msg 2>&1 //标准输出追加
[root@localhost tmp]# abc >> msg 2>&1 //错误输出追加
[root@localhost tmp]# cat msg
bash: abc: command not found…
Tue May 29 22:34:14 EDT 2018
bash: abc: command not found…
[root@localhost tmp]#

输入输出重定向配合计划任务:

[root@localhost tmp]# touch msg //创建msg文件
[root@localhost tmp]# crontab -e //编辑计划任务 (*/1 * * * * date>>/tmp/msg)
no crontab for root – using an empty one
crontab: installing new crontab
[root@localhost tmp]# systemctl restart crond.service //重启计划任务
[root@localhost tmp]# tail -f msg //实时查看msg文件
Tue May 29 22:56:01 EDT 2018
Tue May 29 22:57:01 EDT 2018
Tue May 29 22:58:01 EDT 2018
Tue May 29 22:59:01 EDT 2018
^C
[root@localhost tmp]#

管道符

|:管道符
管道符作用:1、承上启下,把上一个指令的输出作为下一个指令的输入来执行。 2、搭配grep命令实现过滤功能。

[root@localhost tmp]# ll /etc/ | more
[root@localhost tmp]# ps -aux | grep cron
root 4867 0.0 0.1 126300 1700 ? Ss 22:56 0:00 /usr/sbin/crond -n
root 5877 0.0 0.0 112640 980 pts/0 R+ 23:14 0:00 grep –color=auto cron
[root@localhost tmp]# ps -aux | grep cron > msg
[root@localhost tmp]# cat msg
root 4867 0.0 0.1 126300 1700 ? Ss 22:56 0:00 /usr/sbin/crond -n
root 5926 0.0 0.0 112640 976 pts/0 R+ 23:15 0:00 grep –color=auto cron
[root@localhost tmp]#

正则表达式和通配符

通配符:它是由shell解析,并且一般用于匹配文件名。如 ls命令

常用通配符:

*:匹配任意多个字符
?:匹配任意一个字符
[…]:匹配括号内任意一个字符
[!…]:不匹配括号内任意一个字符

正则表达式:是一个字符的匹配标准,可以匹配文本中的内容
一般命令工具按此标准实现字符匹配,常用于支持正则表达式的工具,如grep,sed等。一般匹配文件中的内容。

查看/etc/下面以pa开头的文件或目录:

[root@localhost etc]# ls pa*
passwd passwd-

pam.d: //下面列的是pam.d目录中所有的文件和目录
atd gdm-launch-environment pluto smartcard-auth su-l
chfn gdm-password polkit-1 smartcard-auth-ac system-auth
chsh gdm-pin postlogin smtp system-auth-ac
config-util gdm-smartcard postlogin-ac smtp.postfix systemd-user
crond liveinst ppp sshd vlock
cups login remote su vmtoolsd
fingerprint-auth other rhn_register subscription-manager xserver
fingerprint-auth-ac passwd runuser subscription-manager-gui
gdm-autologin password-auth runuser-l sudo
gdm-fingerprint password-auth-ac setup sudo-i
[root@localhost etc]# ls pass??
passwd
[root@localhost etc]# ls pass?
ls: cannot access pass?: No such file or directory
[root@localhost etc]# ls passw[abcd]
passwd
[root@localhost etc]# ls passw[!abce]
passwd
[root@localhost etc]#

正则表达式

字符匹配:

.:匹配任意单个字符
*:匹配其前面一个字符出现任意次
?:匹配其前面的字符1次或0次
+:匹配其前面一个字符出现至少一次(在扩展正则表达式中)

位置匹配:

^:锚定行首
$:锚定行尾
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词尾部出现
\B:非单词的开头或结尾
\:通常用于打开或关闭后续字符的特殊含义

分组():

(ab)*:匹配ab这个分组出现任意次
\1:应用第一个左括号以及与之对应的右括号所包括的所有内容,同理还有\2,\3

特殊子字符类:

[:alnum:] :任何字母和数字
[:alpha:] :任何字母
[:cntrl:] :控制字符,在ASCII表中对应八进制000 到 037, 和177(’DEL’)
[:digit:] :任何数字
[:graph:] :匹配打印字符,相当于[:alnum:] + [:punct:]
[:lower:] :小写字母
[:print:] :可打印字符,相当于[:alnum:],[:punct:],和space
[:punct:] :标点符号,’!”#$%&'()*+,-./:;<=>?@[\]^_'{|}~’
[:space:] :空白字符,tab、newline、vertical tab、form feed、carriage return、and space
[:upper:] :大写字母
[:xdigit:] :任何16进制的数字,相当于[0-9a-fA-F]

猜你喜欢

转载自blog.csdn.net/qq_33152031/article/details/84197169