查看进程
在Linux系统中,有多个命令可以用来查看进程
以下是一些常用的命令:
 ps命令:用于查看当前系统中的进程状态。
 基本用法:ps -ef,该命令会以完整格式显示所有进程的详细信息,包括用户ID、进程ID、父进程ID、启动时间、命令等。例如:
 ```
 UID        PID  PPID  C STIME TTY          TIME CMD
 root         1     0  0 Mar10 ?        00:00:02 /sbin/init
 root         2     0  0 Mar10 ?        00:00:00 [kthreadd]
 root         3     2  0 Mar10 ?        00:00:00 [rcu_gp]
 ```
常用选项:
`ps`命令是Linux系统中用于查看进程状态的常用工具,它有许多选项,以下是一些常见选项的详细解释:
 -a功能:显示所有终端上的进程,包括与终端无关的进程。
 
 -u功能:以用户为中心的格式显示进程信息,提供更详细的用户相关信息,如用户名、启动时间、CPU和内存使用百分比等。
   
 -x功能:显示没有控制终端的进程,常与`-a`或`-u`等选项结合使用,以查看更全面的进程列表。
    
 -e功能:显示所有进程,等同于`-a -x`的组合效果,会列出系统中的所有进程,包括内核线程等。
   
 -f功能:以完整格式显示进程信息,提供更详细的进程相关字段,如父进程ID(PPID)、进程启动命令等。
     
 -l功能:以长格式显示进程信息,提供更多关于进程的详细状态信息,如进程的优先级(PRI)、nice值等。
-f:显示完整格式的进程信息。
 -u:以用户为主的格式显示进程信息,会显示进程的所有者、启动时间、CPU和内存使用情况。
 -x:显示所有进程,包括没有控制终端的进程。
 top命令:实时动态地查看系统中各个进程的资源占用情况,是一个非常实用的性能分析工具。
 基本用法:直接输入`top`命令即可进入交互界面,界面中会实时更新进程的相关信息,包括CPU使用率、内存使用率、进程状态等。
 常用操作键
         - M:按照内存使用量对进程进行排序。
         - P:按照CPU使用率对进程进行排序。
         - T:按照累计执行时间对进程进行排序。
         - q:退出`top`命令。
 htop命令:htop是top命令的增强版,提供了更友好的界面和更丰富的功能。
基本用法:直接输入`htop`命令即可启动。它的界面类似于`top`,但可以更方便地查看和操作进程。例如,它支持鼠标操作,并且可以直接在界面中对进程进行杀除等操作。
 - 常用功能:
         - 可以通过方向键在进程列表中移动光标,选择不同的进程。
         - 按下`F9`键可以向选中的进程发送信号,例如SIGKILL(强制终止进程)等。
         - 按下`F2`键可以进入设置界面,对htop的显示格式、排序方式等进行自定义设置。
pgrep命令通过pgrep能对指定进程信息,
如下为示例:
[root@localhost ~]# pgrep    -l     "log"
 357 xfs-log/sda3
 609 xfs-log/sda1
 712 systemd-logind
 720 abrt-watch-log
 721 abrt-watch-log
 1091 rsyslogd
 [3]-  Killed                  vim aaa
 [4]+  Killed                  vim xxx
pstree
[root@localhost ~]# pstree
下面为结果示例
 systemd─┬─ModemManager───2*[{ModemManager}]
         ├─NetworkManager─┬─dhclient
         │                └─2*[{NetworkManager}]
         ├─VGAuthService
         ├─2*[abrt-watch-log]
         ├─abrtd
         ├─accounts-daemon───2*[{accounts-daemon}]
         ├─alsactl
         ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
         │                 └─3*[{at-spi-bus-laun}]
         ├─at-spi2-registr───2*[{at-spi2-registr}]
         ├─atd
         ├─auditd─┬─audispd─┬─sedispatch
         │        │         └─{audispd}
         │        └─{auditd}
         ├─avahi-daemon───avahi-daemon
         ├─boltd───2*[{boltd}]
         ├─chronyd
         ├─colord───2*[{colord}]
         ├─crond
         ├─cupsd
         ├─2*[dbus-daemon───{dbus-daemon}]
         ├─dbus-launch
         ├─dconf-service───2*[{dconf-service}]
         ├─dnsmasq───dnsmasq
         ├─evolution-addre─┬─evolution-addre───5*[{evolution-addre}]
         │                 └─4*[{evolution-addre}]
         ├─evolution-calen─┬─evolution-calen───8*[{evolution-calen}]
         │                 └─4*[{evolution-calen}]
         ├─evolution-sourc───3*[{evolution-sourc}]
         ├─fwupd───4*[{fwupd}]
         ├─gconfd-2
         ├─gdm─┬─X───9*[{X}]
         │     ├─gdm-session-wor─┬─gnome-session-b─┬─abrt-applet───2*[{abrt-applet}]
         │     │                 │                 ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
         │     │                 │                 │             │             ├─ibus-engine-sim───2*[{ibus-engine-sim}]
         │     │                 │                 │             │             └─2*[{ibus-daemon}]
         │     │                 │                 │             └─32*[{gnome-shell}]
         │     │                 │                 ├─gnome-software───3*[{gnome-software}]
         │     │                 │                 ├─gsd-a11y-settin───3*[{gsd-a11y-settin}]
         │     │                 │                 ├─gsd-account───3*[{gsd-account}]
         │     │                 │                 ├─gsd-clipboard───2*[{gsd-clipboard}]
         │     │                 │                 ├─gsd-color───3*[{gsd-color}]
         │     │                 │                 ├─gsd-datetime───3*[{gsd-datetime}]
         │     │                 │                 ├─gsd-disk-utilit───2*[{gsd-disk-utilit}]
         │     │                 │                 ├─gsd-housekeepin───3*[{gsd-housekeepin}]
         │     │                 │                 ├─gsd-keyboard───3*[{gsd-keyboard}]
         │     │                 │                 ├─gsd-media-keys───3*[{gsd-media-keys}]
         │     │                 │                 ├─gsd-mouse───3*[{gsd-mouse}]
         │     │                 │                 ├─gsd-power───3*[{gsd-power}]
         │     │                 │                 ├─gsd-print-notif───2*[{gsd-print-notif}]
         │     │                 │                 ├─gsd-rfkill───2*[{gsd-rfkill}]
         │     │                 │                 ├─gsd-screensaver───2*[{gsd-screensaver}]
         │     │                 │                 ├─gsd-sharing───3*[{gsd-sharing}]
         │     │                 │                 ├─gsd-smartcard───4*[{gsd-smartcard}]
         │     │                 │                 ├─gsd-sound───3*[{gsd-sound}]
         │     │                 │                 ├─gsd-wacom───2*[{gsd-wacom}]
         │     │                 │                 ├─gsd-xsettings───3*[{gsd-xsettings}]
         │     │                 │                 ├─nautilus-deskto───3*[{nautilus-deskto}]
         │     │                 │                 ├─seapplet
         │     │                 │                 ├─ssh-agent
         │     │                 │                 ├─tracker-extract───13*[{tracker-extract}]
         │     │                 │                 ├─tracker-miner-a───3*[{tracker-miner-a}]
         │     │                 │                 ├─tracker-miner-f───3*[{tracker-miner-f}]
         │     │                 │                 ├─tracker-miner-u───3*[{tracker-miner-u}]
         │     │                 │                 └─3*[{gnome-session-b}]
         │     │                 └─2*[{gdm-session-wor}]
         │     └─3*[{gdm}]
         ├─gnome-keyring-d───3*[{gnome-keyring-d}]
         ├─gnome-shell-cal───5*[{gnome-shell-cal}]
         ├─goa-daemon───3*[{goa-daemon}]
         ├─goa-identity-se───3*[{goa-identity-se}]
         ├─gsd-printer───2*[{gsd-printer}]
         ├─gssproxy───5*[{gssproxy}]
         ├─gvfs-afc-volume───3*[{gvfs-afc-volume}]
         ├─gvfs-goa-volume───2*[{gvfs-goa-volume}]
         ├─gvfs-gphoto2-vo───2*[{gvfs-gphoto2-vo}]
         ├─gvfs-mtp-volume───2*[{gvfs-mtp-volume}]
         ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]
         ├─gvfsd─┬─gvfsd-burn───2*[{gvfsd-burn}]
         │       ├─gvfsd-trash───2*[{gvfsd-trash}]
         │       └─2*[{gvfsd}]
         ├─gvfsd-fuse───5*[{gvfsd-fuse}]
         ├─gvfsd-metadata───2*[{gvfsd-metadata}]
         ├─ibus-portal───2*[{ibus-portal}]
         ├─ibus-x11───2*[{ibus-x11}]
         ├─imsettings-daem───3*[{imsettings-daem}]
         ├─irqbalance
         ├─ksmtuned───sleep
         ├─libvirtd───16*[{libvirtd}]
         ├─lsmd
         ├─lvmetad
         ├─master─┬─pickup
         │        └─qmgr
         ├─mission-control───3*[{mission-control}]
         ├─packagekitd───2*[{packagekitd}]
         ├─polkitd───6*[{polkitd}]
         ├─pulseaudio───2*[{pulseaudio}]
         ├─rngd
         ├─rpcbind
         ├─rsyslogd───2*[{rsyslogd}]
         ├─rtkit-daemon───2*[{rtkit-daemon}]
         ├─smartd
         ├─sshd───bash───su───bash───pstree
         ├─systemd-journal
         ├─systemd-logind
         ├─systemd-udevd
         ├─tracker-store───7*[{tracker-store}]
         ├─tuned───4*[{tuned}]
         ├─udisksd───4*[{udisksd}]
         ├─upowerd───2*[{upowerd}]
         ├─vmtoolsd───2*[{vmtoolsd}]
         ├─vmtoolsd───3*[{vmtoolsd}]
         ├─wpa_supplicant
         └─xdg-permission-───2*[{xdg-permission-}]
进程管理
将拷贝文件放后台
[root@localhost ~]# cp  /root/xxx  /root/a/b/c/abcd/abc &
 [1] 6258
查询目标进程
[root@localhost ~]# pgrep -l "sshd"
[root@localhost ~]# killall -9 vim
后台开启文件编辑器,命令后接&,下方为输出结果
[root@localhost ~]# vim    aaa  &
 [1] 6522
 [root@localhost ~]# vim    xxx  &
 [2] 6523
[1]+ Stopped vim aaa
杀死目标进程
kill     -9/-15     进程ID
 [root@localhost ~]# kill     -9     6523
[2]+ Stopped vim xxx
确认终止的进程信息:
jobs -l
确认目标用户的进程相关信息阻止用户进程,-U指定用户,-t指定终端
[root@localhost ~]# pgrep -l -U "kackli"
[root@localhost ~]#pkill -9 -U "hackli" 强制终止用户hackli的进程
[root@localhost ~]# pgrep -l -U "kackli" 确认目标已被进程已被终止
计划任务管理
一次性任务设置
at命令
在CentOS 7中,可以使用at命令来
使用at命令设置一次性任务
 基本语法:at [选项] [时间]
 常用选项:
     - f:指定包含任务命令的脚本文件。
     -l:列出待执行的任务队列。
     -d:删除指定的任务。
 时间指定方式:
     可以使用绝对时间,如HH:MM(例如10:30表示上午10点30分),如果不指定日期,默认是当天。如果要指定日期,可以使用`YYYY-MM-DD HH:MM`的格式。
     也可以使用相对时间,如now + 10 minutes表示10分钟后,now + 1 hour表示1小时后等。
 4. 示例
 在指定时间执行命令:假设要在今天的14:30执行一个命令,将当前目录下的所有文件列表输出到file_list.txt文件中,可以这样做:
 at 14:30
 warning: commands will be executed using /bin/sh
 at> ls -l > file_list.txt
 at> <EOT>
 ```
 在输入at 14:30并回车后,会进入at命令的输入模式,
提示warning: commands will be executed (警告命令将被执行)
using /bin/sh,此时输入要执行的命令ls -l > file_list.txt,
然后按Ctrl + D组合键(即输入<EOT>)表示命令输入结束。
 使用相对时间执行任务:比如要在30分钟后执行一个脚本test.sh,可以这样写:
 at now + 30 minutes
 at> /bin/bash /path/to/test.sh
 at> <EOT>
 ```
 查看任务队列:可以使用`at -l`命令查看当前待执行的任务队列,例如:
 
 at -l
 1       2025-03-12 14:30 a root
 2       2025-03-12 15:00 a root
 ```
 这里显示了两个任务,任务1将在2025年3月12日14:30执行,任务2将在2025年3月12日15:00执行,a表示任务的所有者是root。
 删除任务:如果要删除任务队列中的某个任务,可以使用at -d [任务编号],
例如要删除上面的任务1,可以这样做:
 
 at -d 1
 ```
at工作原理
 at命令会将用户提交的任务及其执行时间等信息记录在/var/spool/at目录下的文件中。atd服务会定期检查这个目录,当到达任务指定的执行时间时,atd服务会读取任务文件,并按照其中的指令执行相应的任务。任务执行时,会在后台运行,不会影响当前终端的操作。
周期性任务设置
crontab命令
 作用:用于设置和管理用户的计划任务。
简单来说,就是可以让系统在指定的时间自动执行你设定的命令或脚本。
格式:crontab    -u|-e|-l|-r
 参数说明:
 -u user:指定要操作的用户,如果不写,默认是当前用户。
 -e:编辑用户的crontab文件,也就是用来设置计划任务的具体内容。
 -l:列出用户的crontab文件中的计划任务。
 -r:删除用户的crontab文件,也就删除了该用户所有的计划任务。
 计划任务的时间设置格式:分 时 日 月 周 命令。
示例:0 2 * * * /usr/bin/backup.sh
表示每天凌晨 2 点执行/usr/bin/backup.sh这个脚本
 
 编辑当前用户的计划任务:crontab -e
示例:
30 8 * * 1-5 /usr/bin/sendmail user@example.com < /home/user/mail.txt
表示每周一到周五的早上 8 点 30 分,发送/home/user/mail.txt内容到user@example.com
 列出当前用户的计划任务:crontab -l,会显示当前用户设置的所有计划任务
 删除当前用户的计划任务:crontab -r,执行后当前用户的所有计划任务都被删除
下面分别介绍五个字段的含义:
| 字段位置 | 名称字段 | 取值范围 | 特殊字符 | 
| 第 1 个 | 分钟(Minute) | 0 - 59 | *、/、 -、 , | 
| 第 2 个 | 小时(Hour) | 0 - 23 | *、/、-、, | 
| 第 3 个 | 日期(Day of month | 1 - 31 | *、/、 -、 ,、 ?、 L、 W | 
| 第 4 个 | 月份(Month) | 1 - 12 或 jan, feb, mar, ..., dec | *、 /、 -、 , | 
| 第 5 个 | 星期(Day of week) | 0 - 7(0 和 7 都代表星期日)或 sun, mon, tue, ..., sat | *、 /、 -、 、,、 ?、 L、 # | 
特殊字符含义
 *(星号):表示该字段的所有可能取值。例如,在分钟字段使用 * 表示每分钟。
 /(斜杠):用于指定时间间隔。例如,*/5 表示每隔 5 个单位执行一次,如在分钟字段使用 */5 表示每 5 分钟执行一次。
 -(连字符):用于指定一个范围。例如,1-5 表示从 1 到 5 的取值范围,如在小时字段使用 1-5 表示从凌晨 1 点到凌晨 5 点。
 ,(逗号):用于指定多个取值。例如,1,3,5 表示取值为 1、3 和 5,如在星期字段使用 1,3,5 表示星期一、星期三和星期五。
 ?(问号):仅用于日期和星期字段,当一个字段已经有明确的值时,另一个字段可以使用 ? 来表示不指定。例如,若要在每月 10 号执行任务,星期字段就可以用 ?。
 L(最后):仅用于日期和星期字段,表示该字段的最后一个值。例如,在日期字段使用 L 表示该月的最后一天;在星期字段使用 L 表示该月的最后一个星期几。
 W(工作日):仅用于日期字段,表示离指定日期最近的工作日。例如,15W 表示离该月 15 号最近的工作日。
 #(序号):仅用于星期字段,表示该月的第几个星期几。例如,6#3 表示该月的第三个星期五(6 代表星期五)。
示例:
 每分钟执行一次任务:
 * * * * * /usr/bin/backup.sh
 每天凌晨 2 点执行任务:
 0 2 * * * /usr/bin/cleanup.sh
 每周六和周日的 10 点 30 分执行任务:
 30 10 * * 0,6 /usr/bin/archive.sh
 每月 1 号和 15 号的 14 点执行任务:
 0 14 1,15 * * /usr/bin/update.sh
 每 3 小时执行一次任务:
 0 */3 * * * /usr/bin/check_status.sh