shell第4章进程和服务
2018-10-11 本文已影响12人
Chaweys
Linux中的进程:
进程:已经启动的可执行程序的运行实力
1、PID: 进程的ID(每一个新进程都有一个唯一的PID)
2、PPID:父进程ID(有可能多个子进程公用一个该父进程)
3、任何一个进程都可以创建一个子进程
4、在redhat 7以上,所有进程的父进程:systemd
ps命令
参数:
-aux列出所有进程 , ps -aux [ps aux:显示用户u代表user]
-ax 列出所有进程, ps -ax[ps ax]
-ef 列出所有进程, ps -ef
-l 列出和当前用户有关的进程 ps -l
-u 接用户,查看某一用户的进程状态ps -u hudechao
top可以查看实时的进程状态
使用ps -l查看到:(或ps -aux)
4 S 0 3606 3601 0 80 0 - 29010 wait pts/0 00:00:00 bash
0 R 0 3868 3606 0 80 0 - 37233 - pts/0 00:00:00 ps
进程的各状态:
运行中:
R:该进程正在运行或等待运行
睡眠:
S:正在休眠但是可以被唤醒
D:正在休眠,而且不可以被唤醒,该进程被中断,可能会导致设备的异常状态
K:正在休眠,而且不可以被唤醒,该进程可以被中断
已停止:
T:进程被停止,但是可以通过其他进程来进行恢复
T:正在被调试的进程
僵停:
Z:子进程在退出时向父进程发出信号,除PID外,所有资源全部释放
X:父进程获取了子进程的结构,子进程可以完全释放,该状态进程中是看不到的
进程优先级:
<高优先级
n低优先级
s包含子进程
+位于后台的进程组
ps -aux参数解释:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 13:07 0:00 [kthreadd]
1、%CPU:占用的CPU使用率
2、%MEM:占用的记忆体使用率
3、VSZ:占用的虚拟记忆体大小
4、RSS:占用的记忆体大小
5、TTY:终端的次要装置号码(minor device number of tty)
6、STAT:该进程的状态
7、START:进程开始时间
8、TIME:执行的时间
9、COMMAND:所执行的指令
Linux中的会话和作业:
进程:Linux自身运行的独立的程序
交互进程:由一个shell启动的进程,可以在前台运行,也可以在后台运行
批处理进程:是一个进程序列,和终端没有联系
监控进程(守护进程):Linux系统启动时,启动的进程,并且在后台运行
作业:一个正在执行的进程,而且作业可以包含一个或多个进程。
作业控制:控制正在运行的进程的行为。如:挂起一个进程,等一会在执行。这样用户可以在多个作业之间切换【换句话说:可以在多个正在执行的进程之间切换】
&:and符号可以跟在任何命令的后面,作用:可以让命令在后台执行
jobs:可以查看正在后台运行的作业状态:
jobs -l:除了列出作业,同时列出PID
jobs -r:列出仅仅在后台运行的作业
jobs -s:列出仅仅在后台暂停的作业
sleep 10000延迟多少秒
ctrl + c:中断
ctrl + z:挂起
fg + %作业编号:将后台的命令调到前台来继续执行,不能再放回后台了 【fg 1】
bg +%作业编号:将后台暂停的命令继续执行【bg 2】
ps -j:显示当前作业进程信息
PGID:线程组ID号
SID: 会话ID号
中断进程:
信号:传递给linux进程的操作
kill -l显示可以传递给linux进程的所有的信号
常用:
kill -9 PID强制 杀死一个进程
kill -15 PID正常的方式终止一个进程
kill -2同ctrl+c的操作是一样的
Linux中的控制服务和守护进程:
systemd:是所有进程父进程(Linux内核3.0以上版本)
systemctl:用户管理各种类型的systemd对象,这些对象称为:单元
常用的单元:.service(服务单元).socket(套接字).path(路径单元)
ssh:是一个协议 sshd:是一个进程
systemctl status sshd.service查看后显示中有几个关键字:
[root@localhost ~]# systemctl status sshd.service
sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since六 2018-06-16 13:07:30 CST; 1h 9min ago
loaded:单元配置文件已处理
enabled:开机自启动、或【disabled:开机不自启】、或【static:无法启动,但可以通过某一个已经启动的单元来启动】
active (running):正在运行、或【active (exited):配置成功】、或【active (waiting)运行中,但正在等待事件】、或【inactive:不在运行】
systemctl status sshd.service
start:在系统中启动一项服务
stop:等待程序需要处理完毕后再stop
restart:直接关闭程序,在开启【即重启】
reload:重新加载配置文件,进程暂停,然后把配置文件加载进去后,继续执行后续操作;进程的PID不会发生改变
enable:设置开机自启
disable:关闭开机自启
status:查看某一单元的状态
备注:红帽5,6版本中:
Service sshd status
Chkconfig ssh on/off开机自动启动/关闭自启
Linux中的日志:
大多数日志由四个部分组成
1、记录在日志的时间
2、发送该日志的主机
3、发送该日志消息的程序或进程
4、发送的实际消息
Jun 16 14:50:01 localhost systemd: Started Session 14 of user root.
Jun 16 14:50:01 localhost systemd: Starting Session 14 of user root.
日志监控:
tail -f /var/log/
显示最后10行,如果有新的内容加入,那么会继续输出
tail -200f /var/log/
显示最后200行,如果有新的内容加入,那么会继续输出
Linux中的打包和压缩:
打包程序:【即压缩】
tar
-c:创建文档
-t:列出存档内容
-x:提取存档
-f :(filename)要操作的存档的文件名
-v:详细信息
注意:
1、创建之前请检查有木有重名文件(它会覆盖且不提示)
2、要使tar可以打包选定的文件,执行tar 命令的用户必须要能够读取这些文件
注:linux中文件的后缀名没有任何意义,只不过加上后缀名是为了给我们人看,能够清楚分析出是什么文件
tar -cf a.tar /111【创建文件并命名为a的压缩文件,将目录111打包】
tar -tf a.tar【列出打包文件里的内容】
tar -tvf a.tar【列出打包文件里的内容并显示详细信息】
注:tar后的参数一般都要带上 f 指明要操作的压缩包的文件名
tar支持三种不同压缩方式:
gzip: 压缩速度最快,历史最久,应用最广泛;
bzip2:压缩成的存档文件小,可用性不如gzip;
xz: 最新的方式,提供最佳的压缩率。
实际3中方式都会用到,所以创建不一样格式的压缩文件就有自己的选项;
z用于gzip压缩:filename.tar.gzip 如:tar -zcf b.tar.gz 111/
j用于bzip2压缩:filename.tar.bz2 如:tar -jcf b.tar.bz2 111/
J用于xz压缩:filename.tar.xz 如:tar -Jcf b.tar.xz 111/
解压缩:
tar -xf a.tar【解压缩就是用参数 x 】
tar -xzf a.tar【解压缩就是用参数 x;参数z会显示解压缩过程中具体详细信息 】
Linux中的计划作业:
周期性计划作业——cron
cron:是一个进程。可以让linux周期性的执行某一命令
crontab是一个命令,可以设置Linux周期性的执行某一命令。
-u设置某个用户的周期性工作——root权限;
-e编辑crontab的工作内容
-l查看crontab的工作内容
-r移除所有的crontab的工作内容,若紧要移除一项,请用-e去编辑
例如:crontab -eu hudechao【参数e要加载前面】
crontab的格式:
一行代表一个任务
minute hour day month week command
minute:表示分钟,可以是从0-59之间的任何整数
hour: 表示小时,可以是从0-23之间的任何整数
day: 表示日期,可以是从1-31之间的任何整数
month: 表示月份,可以是从1-12之间的任何整数
week: 表示星期几,可以是从0-7之间的任何整数,这里的0或7代表星期日
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件
特殊字符含义:
*(星号)代表任何任何时刻都接受的意思,*代表的是任何时候
,(逗号)代表分隔字段意思,
例如:15,30,45 * * * * command代表的是每月每日每小时的15分,30分,45分的时候执行命令
-(减号)代表一段时间范围内,
例如:10 7-10 * * * command代表的是每月每日的7点到10点的10分整时执行命令
/n n代表数字,也就是每隔n单位间隔
例如:*/5 * * * * command代表每月每日每时每隔5分钟执行一次【间隔的时候前面在斜杠前面要加上*】
crontab的配置举例:
例如:每天晚上22点钟执行go to sleep
crontab -eu hudechao
* 22 * * * go to sleep
可查看日志信息有无执行:/var/log/cron
crontab的配置文件:
/etc/crontab配置文件:
当使用者使用crontab这个命令来创建工作任务之后,该项工作就会被记录到/var/spool/cron里面,而且是以用户名来命名文件。
如:hudechao用户使用crontab后,工作文件会被记录到/var/spool/cron/hudechao中,另外,cron运行的每一项工作都会被记录到日志/var/log/cron文件中。
crond服务每分钟检测一次,所以cron会每分钟去读取一次/etc/crontab与/var/spool/cron里面的数据内容,因此,只要编辑完/etc/crontab文件,cron的配置就会自动来执行。
如果修改完crontab或者添加crontab没有马上执行,可以使用systemctl restart crond.service重启。
*/1 * * * * date >>/home/software/abc
Linux中的输入输出重定向:
>file标准输出重定向到文件——覆盖
>>file标准输出重定向到文件——追加
2> file标准错误重定向到文件——覆盖
2>>file标准错误重定向到文件——追加
2>/dev/null标准错误重定向到回收站
&>file标准输出和标准错误重定向到文件——覆盖
>>file 2>&1标准输出和标准错误重定向到文件——追加
管道符:
字符|就是管道符
1、承上启下:把上一个指令的输出作为下一个指令的输入来执行
2、搭配grep 字符实现过滤功能。
如:
ll /etc/ | more
ps -aux | cron
ps -aux | cron >>abc
正则表达式和通配符:
在linux中,有通配符和正则表达式,这是两个不同的概念。
通配符:它是由shell解析,并且一般用于匹配文件名。如:ls
正则表达式:是一个字符匹配标准,可以匹配文本中的内容,一些命令工具按此标准实现字符匹配,常用于支持正则表达式的工具,如grep,sed等等。一般用于匹配文件中的内容。
常用的通配符:
*匹配任意多个字符
?匹配任意一个字符
[ ]方括号,匹配方括号中出现的任意一个字符
[! ]方括号中加感叹号,不匹配方括号中出现的任意一个字符
常用的正则表达式:
字符匹配:
.点,匹配任意单个字符 如:c.t 匹配c和t之间有一个字符的
*匹配其前面一个字符出现的任意次数 ,如 c* 匹配文件中c字符出现的任意次
?匹配其前面的字符1次或0次,如 c? 匹配文件中c字符只出现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 ]
如:cat 123 | grep [[:upper:]]【外层也要带上方括号】
查找和替换:
grep只能用于查找文件中的内容
sed可以查找,然后替换或者插入想要的内容
a新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
d删除,因为是删除,所以d后面通常不接任何东西
i插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)
p列印,即将某个选择的资料印出。通常p连同参数sed
s取代,可以直接进行取代的工作。
如:sed '2,5d' 123【删除文件123的第2-5行】
sed '2a 3333' 123【在文件123的地二行的下一行插入3333】
sed '$i 456' 123【在文件123的行尾的上一行插入456,$匹配到文件的行尾(正则)】
sed 's/cat/dog/' 123【左边的cat引用dog,即把cat替换成dog】
【注:上面这些操作都不会对源文件进行修改】
【注:如果要对源文件进行修改,要使用-i参数 【慎用】】
sed -i 's/cat/dog/' 123
查找语句find
需求:找出/var目录下大于5M的文件,并且将它们拷贝到/home/software目录中
语法:find [路径] [命令参数] [表达式]
参数:
-name "文件名" 查找指定名称文件
-user用户名 查找指定用户拥有的文件
-group组名 查找指定组拥有的文件
-mtime n查找在N天前被修改过的文件 +n:N天前find /var -mtime +3;-n:N天内
-atime n查找在N天前被访问过的文件
-type d/f/b/l/p查找指定类型的文件
-empty查找为空的文件
-size按容量大小查找
-perm mode查找指定属性的文件
-exec command {} \查找指定的文件并执行指定的命令command ;
find /var -size +2M -exec ls -l {} \;
find /var -size +5M -exec cp -r {} /home/softare \;【查找/var目录下大于5M的文件并拷贝至/home/softare目录下】
-newer文件名 查找比指定文件新的文件