1、ps命令:查看静态的进程统计信息
a:显示当前终端下的所有进程信息,包括其他用户的进程。与"x"选项结合时将显示系统中所有的进程信息。
u:使用以用户为主的格式输出进程信息。
x:显示当前用户在所有终端下的进程信息。
-e:显示系统内的所有进程信息。
-l:使用长格式显示进程信息。
-f:使用完整的格式显示进程信息。
以简单列表的形式显示出进程信息
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128244 6200 ? Ss 15:21 0:01 /usr/lib/syste
USER:启动该进程的用户账号的名称。
PID:该进程在系统中的数字ID号,在当前系统中是唯一的。
PPID:表示对应进程的父进程的PID号
%CPU: CPU占用的百分比。
%MEM:内存占用的百分比。
VSZ:占用虚拟内存(swap空间)的大小。
RSS:占用常驻内存(物理内存)的大小。
TTY:表明该进程在哪个终端上运行。"?"表示未知或不需要终端。
STAT:显示进程当前的状态,如S(休眠)、R(运行)、Z(僵死)、<(高优先级)、N(低优先级)、s(父进程)、+(前台进程)。对处于僵死状态的进程应该予以手动终止。
START:启动该进程的时间。
TIME:该进程占用的CPU时间。
COMMAND:启动该进程的命令的名称。
以长格式显示系统中的进程信息
[root@localhost ~]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 32061 ep_pol 15:21 ? 00:00:01 /us
显示当前用户会话中打开的进程
[root@localhost ~]# ps
PID TTY TIME CMD
10633 pts/0 00:00:00 bash
11964 pts/0 00:00:00 ps
过滤出包含"bash"的进程信息
[root@localhost ~]# ps aux | grep bash
root 872 0.0 0.0 115312 940 ? S 15:21 0:00 /bin/bash /usr/sbin/ksmtuned
root 8810 0.0 0.0 72468 776 ? Ss 15:21 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
root 10633 0.0 0.1 116876 3500 pts/0 Ss 15:22 0:00 bash
root 12027 0.0 0.0 112732 972 pts/0 S+ 16:01 0:00 grep --color=auto bash
2、top命令:查看进程动态信息
在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每三秒钟刷新一次,P键根据CPU占用情况对进程列表进行排序,或按M键根据内存占用情况进行排序,按N键根据启动时间进行排序,按h键可以获得top程序的在线帮助信息,按q键可以正常地退出top程序。
[root@localhost ~]# top
top - 16:02:08 up 40 min, 2 users, load average: 0.16, 0.05, 0.06
Tasks: 208 total, 1 running, 207 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.8 us, 1.0 sy, 0.0 ni, 98.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1863088 total, 105732 free, 730996 used, 1026360 buff/cache
KiB Swap: 2097148 total, 2094836 free, 2312 used. 941592 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2253 root 20 0 348688 59004 33972 S 2.7 3.2 0:05.66 X
系统任务(Tasks)信息:total,总进程数;running,正在运行的进程数;sleeping,休眠的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数。
CPU占用信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;wa,I/O等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。要了解空闲的CPU 百分比,主要看%id部分。
内存占用(Mem)信息:total,总内存空间;free,空闲内存;used,已用内存;buff/cache,物理内存和交换内存的缓冲区总和。
交换空间(Swap)占用:total,总交换空间;free,空闲交换空间;used,已用交换空间;avail Mem,可用物理空间。
3、pgrep命令:查询进程信息
查询进程名中包含"log"的进程及其PID号
查询由用户teacher在tty2终端上运行的进程及PD号
4、pstree命令:查看进程树
查看当前系统的进程树
列出由用户teacher打开的进程及子进程的树结构
1、改变进程的运行方式
挂起当前的进程:当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行)
查看后台的进程:使用jobs -l命令,同时显示该进程对应的PID号
将后台的进程恢复运行:使用bg(BackGround,后台)命令,可以将后台中暂停执行(如按Ctrl+Z组合键挂起)的任务恢复运行,继续在后台执行操作;而使用fg命令(ForeGround,前台),可以将后台任务重新恢复到 前台运行。
2、终止进程执行
使用kill命令终止进程
强制终止vim进程
将所有名为vim的进程都强行终止
终止由用户teacher启动的进程(包括登录Shell)
如果没有该服务需要提前安装并启用
[root@localhost ~]# yum -y install at
[root@localhost ~]# systemctl start atd
[root@localhost ~]# systemctl enable atd
[root@localhost ~]# systemctl status atd
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2020-05-12 15:22:13 CST; 45min ago
Main PID: 1153 (atd)
Tasks: 1
CGroup: /system.slice/atd.service
└─1153 /usr/sbin/atd -f
5月 12 15:22:13 localhost.localdomain systemd[1]: Started Job spooling tools.
生成一次性任务计划命令格式:at [option]… [TIME]
-d 作业编号:删除指定的待执行任务,相当于atrm
-l:显示待执行的任务的列表,相当于atq
-m:任务执行完成后向用户发送E-mail(默认)
-c 作业编号:显示指定作业的实际内容
TIME格式:
HH:MM 如14:30
HH:MM YYYY-MM-DD,如14:30 2015-10-07
HH:MM[am|pm] [Month] [Date],如02:30pm October 07
HH:MM[am|pm] + number [minutes|hours|days|weeks],如14:30 + 2 weeks
now + #UNIT,如now + 5minutes
noon,midnight,teatime,tomrrow
常用时间中英文对照
一月January —— Jan.
二月February —— Feb.
三月March —— Mar.
四月April —— Apr.
五月May —— May.
六月June —— Jun.
七月July —— Jul.
八月August—— Aug.
九月September —— Sept.
十月October —— Oct.
十一月November —— Nov.
十二月December—— Dec.
星期一:Monday, 英文缩写Mon。
星期二:Tuesday,英文缩写Tue。
星期三:Wednesday,英文缩写Wed。
星期四:Thursday,英文缩写Thur。
星期五:Friday,英文缩写Fri。
星期六:Saturday,英文缩写Sat。
星期日:Sunday,英文缩写Sun
在2020年6月20号晚上11点关机
[root@localhost ~]# at 23:00 2020-06-20
at> /usr/sbin/shutdown -h now //命令路径查询为which+命令
at> //ctrl+D保存并推出
job 1 at Sat Jun 20 23:00:00 2020
查看工作
[root@localhost ~]# at -l
1 Sat Jun 20 23:00:00 2020 a root
[root@localhost ~]# atq
1 Sat Jun 20 23:00:00 2020 a root
查看具体信息
[root@localhost ~]# at -c 1 | tail -5 //1为工作序号
}
${
SHELL:-/bin/sh} << 'marcinDELIMITER2a7561ad'
/usr/sbin/shutdown -h now
marcinDELIMITER2a7561ad
删除工作
[root@localhost ~]# at -d 1
[root@localhost ~]# atrm 1
压缩日志,并加上时间参数
[root@localhost ~]# date
2020年 05月 12日 星期二 16:22:22 CST
[root@localhost ~]# date +%F
2020-05-12
[root@localhost ~]# date "+%Y-%m-%d %H:%M:%S"
2020-05-12 16:22:48
[root@localhost ~]# tar -zcP -f log_$(date +%F).tar.gz /var/log/messages
在7月1号晚上,10点运行此脚本
[root@localhost ~]# at 22:00 2020-07-01
at> /usr/bin/bash /root/logbak.sh
at>
job 2 at Wed Jul 1 22:00:00 2020
为安全起见,我们通常需要编辑/etc/at.allow(白名单)或/etc/at.deny(黑名单)以允许或拒绝某些特定用户制定任务计划,这两个文件对at和batch命令都适用,这两个文件保留一个即可。
其所生成的任务计划是在系统空闲(CPU的工作负载小于0.8)时执行的,故batch命令后不能指定时间
查看CPU负载
[root@localhost ~]# uptime
16:29:43 up 1:08, 2 users, load average: 0.00, 0.01, 0.05
batch也是利用 at 来进行指令的下达,但是当CPU工作负载大时不会立即执行
[root@localhost ~]# batch
at> /usr/bin/echo Hello batch > /tmp/test.txt
at>
job 3 at Tue May 12 16:32:00 2020
1、用户周期性任务
系统通常自带cron服务程序和crontab命令,若没有,可使用如下命令安装:
[root@localhost ~]# yum -y install vixie-cron //cron服务程序包
[root@localhost ~]# yum -y install crontabs //crontab程序包
与at一样,我们也可以设置白名单(/etc/cron.allow)或黑名单(/etc/cron.deny)来限制使用crontab的用户,这两个文件保留一个即可。
使用crontab命令管理用户的计划任务:crontab [-u username] [-elr]
-e:编辑计划任务列表。
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。
-I:列表显示计划任务。
-r:删除计划任务列表。
编辑用户的计划任务列表
[root@localhost ~]# crontab -e
crontab计划任务的配置格式
分钟 | 小时 | 日期 | 月份 | 星期 | 执行的命令 |
---|---|---|---|---|---|
0〜59 | 0〜23 | 1〜31 | 1〜12 | 0〜7 | 命令或脚本 |
减号可以表示一个连续的时间范围,如"1-4"表示整数1、2、3、4。
逗号",":可以表示一个间隔的不连续范围,如"3, 4, 6, 8"。
斜杠符号"/":可以用来指定间隔频率,如在日期字段中的"*/3"表示每隔3天。
“ * ” 表示任何时刻都接受的意思,所有时间段位上不能同时为“ * ”
[root@localhost ~]# crontab -e
59 23 30 06 * echo "LOVE U 3000+" > /root/lover.txt //6月30号的23:59,写一封内容为“LOVE U 3000+”的信,写在了/home/’user‘/lover.txt中
查看任务
[root@localhost ~]# crontab -l
59 23 30 06 * echo "LOVE U 3000+" > /root/lover.txt
每1分钟需要执行一次打印当前时间的脚本test.sh,并追加在/tmp/time.txt文件中,
[root@localhost ~]# date "+%Y-%m-%d %H:%M:%S"
2020-05-12 17:56:01
[root@localhost ~]# vim time.sh
#!/bin/bash
echo `date "+%Y-%m-%d %H:%M:%S"` >> /tmp/time.txt
[root@localhost ~]# crontab -e
*/1 * * * * /usr/bin/bash /root/time.sh
crontab: installing new crontab
查看其他用户的计划任务
[root@localhost ~]# crontab -l -u root
删除任务
[root@localhost ~]# crontab -r //注意:这个命令会将所有的crontab数据内容都删掉,一般只需用crontab -e编辑即可
[root@localhost ~]# crontab -l
no crontab for root
2、系统周期性任务计划
编辑完 /etc/crontab 并储存后,cron 的设置就会自动执行(只限使用root用户操作)
[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