第六周笔记

进程显示工具 ps -ef(有些人喜欢用)
ps 带-不带-不一样
a 包括所有终端的进程
x 包括不连接的进程
u 显示进程所有者的信息
f 选项显示树进程 –forest
o 属性 选项显示定制的信息 pid,cmd,%cpu,%mem ps xo pid,cmd,%cpu,tty
L 显示支持的属性列表
k|–sort 属性 对属性排序,属性前加-表示倒叙ps xo pid,cmd,%cpu,tty k %cpu 按着cpu排序
ps xo pid,cmd,%cpu,%mem k -%mem按着内存倒叙

[root@localhost ~]#ps xo pid,cmd,euser,ruser
PID CMD EUSER RUSER 该用户运行的程序是S权限 用户继承root

2242 su root fanjiaxi

-C cmdlist 指定命令,多个命令用,分隔
-L 显示线程
-e: 显示所有进程,相当于-A
-f: 显示完整格式程序信息
-F: 显示更完整格式的进程信息
-H: 以进程层级格式显示进程相关信息
-u userlist 指定有效的用户ID或名称
-U userlist 指定真正的用户ID或名称
-g gid或groupname 指定有效的gid或组名称
-G gid或groupname 指定真正的gid或组名称
-p pid 显示指pid的进程
–ppid pid 显示属于pid的子进程
-M 显示SELinux信息,相当于Z

ps示例
查询你拥有的所有进程:
ps -x
显示指定用户名(RUID)或用户ID的进程:
ps -fU apache
ps -fu 48
显示指定用户名(EUID)或用户ID的进程:
ps -fu wang
ps -fu 1000
查看以root用户权限(实际和有效ID)运行的每个进程:
ps -U root -u root
列出某个组拥有的所有进程(实际组ID:RGID或名称):
ps -fG nginx
列出有效组名称(或会话)所拥有的所有进程:
ps -fg mysql
ps -fG 27
通过进程ID来显示所属的进程:
ps -fp 1234
以父进程ID来显示其下所有的进程,如显示父进程为1154的所有进程:
ps -f –ppid 1234
显示指定PID的多个进程:
ps -fp 1204,1239,1263
要按tty显示所属进程:
ps -ft pst/0
以进程树显示系统中的进程如何相互链接:
ps -e –forest
以进程树显示指定的进程
ps -f –forest -C sshd
ps -ef –forest | grep -v grep | grep sshd
要显示一个进程的所有线程,将显示LWP(轻量级进程)以及NLWP(轻量级进程数)列:
ps -fL -C nginx
要列出所有格式说明符:
ps L
查看进程的PID,PPID,用户名和命令:
ps -eo pid,ppid,user,cmd
自定义格式显示文件系统组,ni值开始时间和进程的时间:
ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime
使用其PID查找进程名称:
ps -p 1244 -o comm=
要以其名称选择特定进程,显示其所有子进程
ps -C sshd,bash
查找指定进程名所有的所属PID,在编写需要从std输出或文件读取PID的脚本时这个参数很有用:
ps -C httpd,sshd -o pid=
检查一个进程的执行时间
ps -eo comm,etime,user | grep nginx
查找占用最多内存和CPU的进程:
ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%mem | head 按内存排序 !!!!!!!!!!!!!!!!!
ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%cpu | head !!!!!!!!!!!!!!!!!!
显示安全信息:
ps -eM
ps –context
使用以下命令以用户定义的格式显示安全信息。
ps -eo euser,ruser,suser,fuser,f,comm,label
使用watch实用程序执行重复的输出以实现对就程进行实时的监视,如下面的命令显示每秒钟的监视:
watch -n 1 ‘ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%mem | head’

当脚本不加#!/bin/bash/是进程里显示的bash而不是f1.sh bash f1.sh运行脚本也看不到 一般给脚本加上执行权限才能在进程中看到
ps -C f1.sh -Cf2.sh o pid,cmd,%cpu,%mem 运行脚本时可以查看脚本信息 看脚本CPU内存的使用情况

优先级
ni : nice值
pri :priority 优先级
psr :process CPU编号
rtprio 实时优先级
ps xo pid,cmd,pri,ni,rtprio 看pid,cmd的pri优先级和nice优先级rtprio实时优先级
对应Centos优先级表
调优先级的命令 renice renice -n -10 2612 (-n nice的值 -10对应优先级表 2612进程编号)
pri的优先级是系统优先级反过来画

nice -n -5 sleep 100 执行命令时指定优先级
值越大优先级越往后

搜索进程
pgerp 支持正则表达式!!!!!!!!!
-u uid 生效者
-U 真正发起运行命令者
-t 与制定终端相关的进程
[root@localhost ~]#pgrep -t pts/1
2145
2186
2187
2242
-l 显示进程名
[root@localhost ~]#pgrep -lt pts/1
2145 bash
2186 su
2187 bash
2242 su
-a 显示完整格式的进程名
-P 显示制定进程的子进程(大P)

pidof 可以显示某个运行程序的id
例 pidof bash
[root@localhost ~]#pidof bash
2187 2145 1360 669

uptime 查看系统的启用时间
[root@localhost ~]#uptime
17:01:47 up 3 min, 1 user, load average: 0.21, 0.54, 0.27
总时长 当前几个用户 一分钟之内的负载 负载值越小越好 一般不大于cup个数的两倍
通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题
如果linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用

top命令可以实时观察进程的使用情况 q退出
[root@localhost ~]#top
top – 17:11:41 up 13 min, 1 user, load average: 0.00, 0.08, 0.15
Tasks: 149 total, 1 running, 148 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.9 us, 20.8 sy, 0.0 ni, 77.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 999720 total, 388120 free, 281160 used, 330440 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 523524 avail Mem

us 用户空间的程序 sy 系统空间 ni 调整优先级的 id表示空闲 wa等待 hi si 硬中断软中断 st虚拟机占用的偷盗盗取的时间
首部信息显示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1 (数字)
memory信息:m命令
退出命令:q
修改刷新时间间隔:s
终止指定进程:k PID to signal/kill [default pid = 638] 3518 删除3518进程
保存文件:W 保存到家目录 .toprc文件

top
-d #: 指定刷新时间间隔,默认为3秒
-b: 全部显示所有进程
-n #: 刷新多少次后退出

htop 首先装htop包 界面比较好 可以用鼠标点
htop命令:EPEL源
选项:
-d #: 指定延迟时间;
-u UserName: 仅显示指定用户的进程
-s COLUME: 以指定字段进行排序
子命令:
s: 跟踪选定进程的系统调用
l: 显示选定进程打开的文件列表
a:将选定的进程绑定至某指定CPU核心
t: 显示进程树

free 查看内存使用情况
-b 以字节为单位
-m 以MB为单位
-g 以GB为单位
-h 易读格式
-o 不显示-/+buffers/cache行
-t 显示RAM + swap的总和
-s n 刷新间隔为n秒
-c n 刷新n次后即退出

vmstat命令 虚拟内存信息 加数字几秒更新一次 可以动态观察结果

iostat:统计CPU和设备IO信息 查看磁盘的信息
示例:iostat 1 10

pmap 进程对应的内存映射
pmap -x 显示详细格式的信息 pmap 1 可以详细的了解占用内存的使用空间 pmap -x 1 cat /proc/1/maps专业

glances 可以远程监控
glances -s -B 192.168.30.7 监控192.168.30.7 要监控的主机
glances -c 192.168.30.7 监控192.168.30.7主机的内存 从哪个主机看 ss -atl 查看是否被监控
-b: 以Byte为单位显示网卡数据速率
-d: 关闭磁盘I/O模块
-f /path/to/somefile: 设定输入文件位置
-o {HTML|CSV}:输出格式
-m: 禁用mount模块
-n: 禁用网络模块
-t #: 延迟时间间隔
-1:每个CPU的相关数据单独显示

dstat命令:系统资源统计,代替vmstat,iostat
dstat [-afv] [options..] [delay [count]]
-c: 显示cpu相关信息
-C #,#,…,total
-d: 显示disk相关信息
-D total,sda,sdb,…
-g:显示page相关统计数据
-m: 显示memory相关统计数据
-n: 显示network相关统计数据
-p: 显示process相关统计数据
-r: 显示io请求相关的统计数据

-s: 显示swapped相关的统计数据

–tcp
–udp
–unix
–raw
–socket
–ipc
–top-cpu:显示最占用CPU的进程
–top-io: 显示最占用io的进程
–top-mem: 显示最占用内存的进程
–top-latency: 显示延迟最大的进程

iotop
iotop是用来监管磁盘的
-P 查看指定的文件

kill
信号的数字标识 1,2,9

1无需关闭进程程序 从读配置文件 kill -1 加进程编号
2终止正在运行的进程 相当于Ctrl+c
3 相当于Ctrl+\ 退出
9 强制杀死正在运行的进程 (容易丢数据)
15 终止正在运行的进程 =killall
18 继续运行
19 后台休眠
18 继续运行
19 后台休眠 作业管理

pkill 支持正则表达式
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名(pgrep可用)
-a: 显示完整格式的进程名(pgrep可用)
-P pid: 显示指定进程的子进程

pkill -at pst/0 把所有pts/0的进程给杀掉 pkill -9 -t pts/2 踢人

作业管理
linux的作业控制
前台作业 :通过终端启动,且启动后一直占用终端
后台作业 :可通过终端启动,但启动后即转入后台运行(释放终端)
让作业运行于后台
(1) 运行中的作业: Ctrl+z 发19信号加程序 放到后台休眠 killall -19 ping
(2) 尚未启动的作业: COMMAND & 发18信号加程序 把休眠的运行 killall -18 ping
[root@localhost ~]#ping www.baidu.com &
作业控制:
fg [[%]JOB_NUM]:把指定的后台作业调回前台
bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
kill [%JOB_NUM]: 终止指定的作业

后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望
送往后台后,剥离与终端的关系
nohup COMMAND &>/dev/null & nohup也会有输出只不过不放在前台 放在nohup.out文件里了 cat 能查看
screen;COMMAND

jobs 查看后台运行的进程

并行执行写脚本 192.1 & = [root@localhost ~]# (192.1 &);(192.2 &);(192.3 &)
192.2 & [root@localhost ~]# { 192.1 & 192.2 & 192.3 & }
192.3 &

任务管理
让系统在未来的某时间点执行一次任务
at
batch :系统自行选择空闲时间去执行此处指定的任务
周期性执行某任务
cron

开启这个服务/usr/lib/systemd/system/atd.service 命令systemctl status atd 7
service atd status 6 确保是running

一次作业
at
at命令:at [option] TIME
常用选项:
-V 显示版本信息:
-l: 列出指定队列中等待运行的作业;相当于atq
-d: 删除指定的作业;相当于atrm
-c: 查看具体作业任务
-f /path/from/somefile:从指定的文件中读取任务
-m:当任务被完成之后,将给用户发送邮件,即使没有标准输出
注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户

配置时间文件 cat /etc/chrony.conf 7 里写 server 172.20.0.1 iburst
ntp.conf 6
[root@localhost ~]#systemctl enable chronyd 设置开机启动

[root@localhost ~]#systemctl status chronyd
● chronyd.service – NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:chronyd(8)
man:chrony.conf(5)
[root@localhost ~]#systemctl stastart status
[root@localhost ~]#systemctl start chronyd
[root@localhost ~]#systemctl status chronyd
● chronyd.service – NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running)

ntpdate 172.20.0.1
vim /etc/chrony.conf
systemctl enable chronyd(开机的时候自动启用)chkconfig ntp on
systemctl status chronyd 7 chkconfig ntpd on 6 启动at服务
systemctl start chronyd service ntpd stsrt
systemctl status chronyd service ntpd status

at 17:00
[root@localhost ~]#at 17:00
at> reboot
at> <EOT> (ctrl+d)
job 1 at Sat May 5 17:00:00 2018

放at任务的文件在 ls /var/spool/at/a00000 自动放入这个文件

at now +15 minutes 未来的15分钟执行的任务

02pm + 3 days 三天之后的两点
TIME:定义出什么时候进行 at 这项任务的时间
HH:MM [YYYY-mm-dd]
noon, midnight(午夜0点), teatime(4pm)
tomorrow
now+#{minutes,hours,days, OR weeks}

-V 显示版本信息:
-l: 列出指定队列中等待运行的作业;相当于atq
-d: 删除指定的作业;相当于atrm at -d 2 删除第二2任务 也可以删文件
-c: 查看具体作业任务
-f /path/from/somefile:从指定的文件中读取任务 把任务放在文件里 通过f调用 at -f ata.txt + 1minutes
-m:当任务被完成之后,将给用户发送邮件,即使没有标准输出 (强制发邮件)
支持文本重定向 at now + 2 minutes < at2.txt

任务里的标准输出终端上不显示 以邮件的方式发给你 在脚本里写任务 要把标准输出放到垃圾箱里

echo wall atjob | at now + 1 min

白名单黑名单 白名单需要自己建立 白名单里的全能用at剩下没写入的不能用 白名单的优先级高于黑名单
文件在 /etc/at.{allow,deny} 如多创建白名单之前这个计划有 则这个计划能继续执行
如果这两个文件全没了 只能root用

at写入脚本
#!/bin/bash
at 18:00 <<EOF
rm /data/* -rf 执行脚本
halt
EOF

周期性的计划任务 cron
cronie 主程序包
[root@localhost ~]#systemctl status crond 使用cron 确保服务是启用的

cat /etc/crontab 计划任务的配置文件 定义了计划文件的相关信息
# 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
54 15 * * * wang wall cron job 每天的15点54分 以wang的身份发广播

0 2 * * 1-5 root tar zcvf /data/etc.tar.gz /etc/ &> /dev/null工作日的每天夜里两点把etc下的所有文件大包到data下

*/10 每十分钟执行一次

@reboot root touch /data/cron.log (重启时才会执行)包括按电源

日志路径 cat /var/log/cron cron的日志文件 如过删除了carn计划任务 可在日志文件中恢复

普通用户想创建计划任务的命令
crontab
每个用户都有专用的cron任务文件: /var/spool/cron/USERNAME 写完之后 直接编辑不行 用crontab -e编辑

crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出所有任务
-e: 编辑任务 生成一个文件 在里面编辑*****
-r: 移除所有任务 普通用户编辑任务文件借助suid的命令
-i:同-r一同使用,以交互式模式移除指定任务
-u user: 仅root可运行,指定用户管理cron任务
控制用户执行计划任务:
/etc/cron.{allow,deny}

crontab -e -u wang 编辑指定的计划任务 如果不指定就是编辑自己的
-r 删除这个人的所有进程文件

7里的故障排错 6里面的
vim /sysroot/etc/crontab a 输入空格1
@reboot root reboot
linux16 加 rd.break
ctrl+x
mount -o remount,rw /sysroot
vim /sysroot/etc/crontab

run-parts /data 运行data下的所有程序

[root@localhost ~]#ll /etc/cron.*
-rw——-. 1 root root 0 Aug 3 2017 /etc/cron.deny

/etc/cron.d:
total 12
-rw-r–r–. 1 root root 128 Aug 3 2017 0hourly
-rw-r–r–. 1 root root 108 Jun 13 2017 raid-check
-rw——-. 1 root root 235 Aug 3 2017 sysstat

/etc/cron.daily: 每天
total 12
-rwx——. 1 root root 219 Aug 2 2017 logrotate
-rwxr-xr-x. 1 root root 618 Mar 18 2014 man-db.cron
-rwx——. 1 root root 208 Nov 5 2016 mlocate

/etc/cron.hourly: 每小时
total 8
-rwxr-xr-x. 1 root root 392 Aug 3 2017 0anacron
-rwxr-xr-x. 1 root root 191 Aug 4 2017 mcelog.cron

/etc/cron.monthly: 每个月
total 0

/etc/cron.weekly: 每个星期的
total 0

anacrontab
cat /etc/anacrontab 开机后检查关机前没有执行的任务 如果没执行开机执行

#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily 每天
7 25 cron.weekly nice run-parts /etc/cron.weekly 每周
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly 每月

CentOS6使用/etc/cron.daily/tmpwatch定时清除临时文件
CentOS7使用systemd-tmpfiles-setup服务实现

对于cron任务来讲,%有特殊用途;如果在命令中要使用%,则需要转义,将%
放置于单引号中,则可不用转义 用单引号把%的命令引起来相当于转义 太长的命令用脚本,调用.sh

脚本编程

过程式编程式语言
顺序执行
选择执行
循环执行

条件选择if语句
选择执行:
注意:if语句可嵌套 if: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]… [ else COMMANDS; ] fi

单分支
if 判断条件;then
条件为真的分支代码
fi

双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi

多分支
if 判断条件 1 ;then
条件为真的分支代码
elif 判断条件 2 ;then
条件为真的分支代码
elif 判断条件 3 ;then
条件为真的分支代码
else
以上条件都为假的分支代码
fi

case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;

*)
默认分支
;;
esac
case支持glob风格的通配符:
*: 任意长度任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符
a|b: a或b

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97609

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班