1. 进程的启动方式
1.1 手工启动进程
由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否 需要占用当前的命令终端,手工启动又可以分为前台启动和后台启动。 进程在前台运行 (如执行“ls -l”命令)时,用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台启动运行。进程在后台运行时,用户可以继续在当前终端中输入其他命令,而无须等待该进程结束,适用于运行耗时较长的操作。
启动后台进程需要使用“&”操作符,将“&”操作符放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。例如,当使 用 cp 命令从光盘中制作镜像文件时,由于需要复制的数据较多,耗时较长,因此可结合“&” 符号将复制操作放到后台运行,以便用户可以继续执行其他命令操作
cp /dev/cdrom /home/cetos7.iso &
1.2 调度启动
在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任务更适合在相对空闲的时候(如夜间)进行。这时就需要用户事先进行调度安排,指 定任务运行的时间,当系统到达设定时间时会自动启动并完成指定的任务。调度启动的计划 任务进程均在后台运行,不会占用用户的命令终端。 进程的调度启动可以通过 at、crontab 命令进行设置,其中 at 命令用于设置一次性(如12:15 时重启网络服务)计划任务,crontab 命令用于设置周期性运行(如每周五 17:30 备份数据库)的计划任务。
2. 进程的前后台调度
2.1 Ctrl+Z组合键
当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,打包usr并且调入后台 ,可以按 Ctrl+Z 组合键将该下载任务调入后台并暂停执行
tar zcvf usr.tar.gz /usr
2.2 jobs 命令
jobs
命令用于查看当前会话中运行的后台任务。
常用选项:
jobs -l
:列出当前所有后台任务及其进程 ID。
查看当前终端会话中的后台任务。
fg 和 bg 命令
- fg:将后台任务带回前台执行。
- bg:将暂停的任务放回后台继续执行。
案例:
fg %1
将后台任务编号为 1 的任务带回前台。
bg %2
将后台任务编号为 2 的任务恢复在后台运行。
3.终止进程的运行
3.1 Ctrl+C组合键
中断正在执行的命令
3.2 kill 命令
kill
命令用于发送信号给进程,通常用来终止进程。
常用选项:
kill [PID]
:正常终止进程。kill -9 [PID]
:强制终止进程(不可恢复)。
案例:
kill 1234
终止 PID 为 1234 的进程。
kill -9 1234
强制终止 PID 为 1234 的进程。
3.3 killall 命令
killall
命令根据进程名称终止进程。
案例:
killall vim
终止所有名为 vim
的进程。
pkill 命令
pkill
命令根据进程属性(如用户名、终端等)终止进程。
案例:
pkill -u root
[root@localhost ~]# pkill -9 -U "hackli"
终止所有由 root
用户启动的进程。
4. 计划任务管理
计划任务用于自动执行系统中的任务。Linux 中常用的计划任务工具包括 at 和 cron。
4.1 一次性任务:at 命令
at
命令用于设置一次性任务,任务将在指定时间执行。
- 命令格式:
at [HH:MM] [yyyy-mm-dd]
at> [要执行的命令]
- 常用选项:
atq
:列出待执行的任务。atrm [任务编号]
:删除指定的任务。
案例:
at 16:30 2021-08-16
at> echo "Backup completed" > /tmp/backup.log
at> <EOT>
设置任务在指定时间执行,并将输出保存到 /tmp/backup.log
文件中。
4.2 周期性任务:cron 命令**
cron
用于设置定期执行的任务。用户可以通过 crontab
命令编辑和管理自己的计划任务。
- 命令格式:
* * * * * [command]
*
:每个字段的取值范围:分钟(0-59),小时(0-23),日期(1-31),月份(1-12),星期(0-6,0 为周日)。[command]
:要执行的命令。
常用命令:
crontab -e
:编辑当前用户的 cron 任务。crontab -l
:列出当前用户的 cron 任务。crontab -r
:删除当前用户的所有 cron 任务。
其他命令
设置用户的周期性计划任务列表主要通过 crontab 命令进行,结合不同的选项可以完成不同的计划任务管理操作。常用的选项如下。
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。
下面将分别讲解 crontab 命令相关选项的使用。crontab -u 用户名 #指定XX用户的cron服务
crontab -u zx -l #列出zx用户下的cron的详细内容
crontab -r #删除所有用户的cron内容,普通用户执行,只删除自己的cron内容
crontab -r -u zx #删除zx用户的cron内容
案例:
50 7 * * * /usr/bin/systemctl start sshd.service
50 22 * * * /usr/bin/systemctl stop sshd.service
每天的 7:50 启动 sshd
服务,22:50 停止 sshd
服务。
4.3 cron 服务管理
- 启动 cron 服务:
systemctl start crond
- 查看 cron 服务状态:
systemctl status crond
- 启用 cron 服务开机启动:
systemctl enable crond
总结与案例
- 进程管理:
- 使用
ps
查看系统中的进程。 - 使用
top
查看实时的进程和资源占用情况。 - 使用
kill
和killall
终止进程。
- 计划任务:
- 使用
at
设置一次性任务。 - 使用
cron
设置周期性任务,并通过crontab
管理任务。
案例总结
- 查看进程:
ps -aux | grep vim
查看 vim
进程的 CPU 和内存使用情况。
- 设置周期性任务:
crontab -e
30 2 * * * /usr/bin/rsync -av /data /backup
通过这些命令,您可以高效地管理 Linux 系统中的进程和计划任务,自动化管理日常操作和提高系统的效率。
5 其他命令
我们可以继续详细解析这些命令,提供更多的实例和解释,帮助您更好地掌握它们的使用。
1. date
功能:
date
命令用于显示当前的系统日期和时间,可以指定不同的输出格式,或用它来设置系统的日期和时间。
详细案例:
- 显示当前系统时间:
date
输出:Wed Aug 14 16:24:51 UTC 2025
- 自定义时间格式:
date "+%Y-%m-%d %H:%M:%S"
输出:2025-08-14 16:24:51
- 显示当前时间的时间戳(从1970年1月1日以来的秒数):
date +%s
输出:1692017091
- 设置系统时间:
sudo date +%Y-%m-%d -s "2025-08-14"
这会将系统日期设置为 2025年8月14日
。
2. cal
功能:
cal
命令用来显示当前月份或指定月份的日历。可以方便地查看日期。
详细案例:
- 查看当前月份的日历:
cal
输出(假设当前为2025年8月):
August 2025
Su Mo Tu We Th Fr Sa1 23 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
- 查看指定年份和月份的日历:
cal 12 2025
输出:查看2025年12月的日历。
- 显示一整年的日历:
cal -y 2025
输出:显示2025年全年日历。
3. history
功能:
history
命令用来查看当前用户的历史命令。这个命令可以帮助你快速找到之前运行的命令。
详细案例:
- 查看命令历史:
history
输出示例:
1 ls
2 cd /home/user
3 mkdir new_folder
4 history
- 查看历史命令中的特定条目:
history | grep "mkdir"
这会过滤出历史记录中所有包含 mkdir
的命令。
- 执行历史命令: 使用历史命令编号执行:
!2
这会执行编号为2的命令,即 cd /home/user
。
4. scp
功能:
scp
命令用于通过 SSH 协议在本地和远程服务器之间安全地复制文件或目录。它加密了数据传输,因此更加安全。
详细案例:
- 将本地文件复制到远程服务器:
scp file.txt user@remote:/path/to/destination/
这会将 file.txt
文件从本地复制到远程服务器的 /path/to/destination/
目录。
- 将本地目录复制到远程服务器:
scp -r /local/dir/ user@remote:/remote/dir/
这会将本地目录 /local/dir/
及其内容复制到远程目录 /remote/dir/
。
- 将远程文件复制到本地:
scp user@remote:/remote/path/to/file.txt /local/destination/
- 从远程服务器复制整个目录到本地:
scp -r user@remote:/remote/dir /local/dir/