Linux 系统管理与进程调度——从开机到任务自动化全记录
目录
2.1 Systemd 用“target”重新定义了 7 个运行级别:
前言
在数字化浪潮席卷全球的今天,Linux 已成为互联网、云计算、大数据乃至人工智能时代不可替代的基石。无论是承载着亿万访问量的网站后台,还是支撑着弹性伸缩的容器集群,亦或潜伏于掌中手机的安卓系统,其内核皆闪烁着开源社区的智慧光芒。然而,再强大的系统也离不开严谨的管理:启动时的一连串精密步骤决定了它能否顺利醒来;运行中的万千进程需要被持续监控、调度与回收;周期性的备份、巡检、清理更需悄无声息地按计划完成。面对命令行黑屏,很多初学者望而生畏,却不知其中蕴藏着高效、可复现、可远程的运维艺术。本章节将以系统管理员的视角,带你走完一条完整的“管理闭环”:从按下电源键到登录提示符出现,拆解每一步幕后故事;从第一条进程的诞生到成千上万的任务在后台井然有序,剖析 ps、top、kill、crontab 等命令如何像手术刀般精确;从 date、cal、history 的日常小工具,到 scp、rsync、ssh 构建的远程自动化管道,点滴汇聚成可复制的生产力。愿这段旅程让你在字符跃动的终端里,找到掌控系统的自信与乐趣。
一、 系统是如何启动的?
1.1按下电源键后,Linux 依次经历 5 个阶段:
-
开机自检(POST)——硬件自检,找到第一块可启动设备;
-
MBR 引导——读入硬盘 0 扇区的 512 字节,交给 GRUB;
-
GRUB 菜单——显示启动项,加载
/boot/grub2/grub.cfg; -
内核装载——把 vmlinuz 与 initramfs 解压到内存,驱动硬件;
-
systemd 登场——取代传统 init,并行拉起服务,最终到达登录界面。
1.2 GRUB2 与 GRUB 的区别
GRUB2 的优点:
-
支持多种文件系统。
-
模块化设计,允许动态加载需要的模块,从而缩小核心镜像的体积。
-
配置文件不同,GRUB2 使用
/boot/grub2/grub.cfg,而 GRUB 使用/boot/grub/grub.conf。 -
总结:GRUB2 增强了功能,支持更多的文件系统和自动化配置,同时提高了系统的灵活性和扩展性。
1.3 Systemd 服务管理
1 Systemd 的优点
-
并行启动服务:与传统的 SysVinit 相比,Systemd 支持并行启动多个服务,从而加速系统启动过程。
-
按需启动服务:Systemd 可以按需启动服务,避免了启动不必要的服务,提高了系统的效率。
-
总结:Systemd 改善了系统的启动速度和服务管理效率,解决了 SysVinit 启动慢和脚本复杂的问题。
2 运行级别与 Systemd 目标
在 Linux 系统中,运行级别(runlevel)定义了系统的运行状态。Systemd 通过目标(target)来代替传统的运行级别。以下是常见的运行级别与对应的 Systemd 目标:

二、 服务与运行级别
2.1 Systemd 用“target”重新定义了 7 个运行级别:
| 级别 | 对应 target | 场景说明 |
|---|---|---|
| 0 | poweroff.target | 关机 |
| 1 | rescue.target | 单用户维护 |
| 2-4 | multi-user.target | 多用户文本模式 |
| 5 | graphical.target | 图形桌面 |
| 6 | reboot.target | 重启 |
-
0 系统停机模式,系统默认运行级别不能设置为0,否则不能正常启动,机器关的;
-
1 单用户模式,root权限,用于系统维护,禁止远程登录(只能通过实机进去),该模式的进入方式百度操作即可;就像windows下的安全模式登录;(进入单用户模式的时候root不需要密码就可以登录,所以在此模式下可以修改root密码)
-
2 多用户模式,没有NFS和网络支持;
-
3 完整的多用户文本模式,有NFS和网络,登录后进入控制台命令行模式。
-
4 系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电池用尽时,可以切换到这个模式来做一些设置;
-
5 图形化模式,登录后进入图形GUI模式,X windows系;
-
6 重启模式,默认运行级别不能设为6,否则不能正常启动。运行init6机器就会重启
init 0 # 关机
init 1 # 单用户模式,需要输入密码或者Ctrl+D退出
init 2 # 字符界面
init 3 # 字符界面
init 4 # 字符界面
init 5 # 视图界面
init 6 # 重启
2.2 设置与切换运行级别
-
查看当前默认目标:
systemctl get-default -
设置默认目标:
systemctl set-default multi-user.target -
切换到指定目标:
systemctl isolate graphical.target -
示例:切换到图形界面:
systemctl isolate graphical.target
2.3 服务管理
-
启用服务开机启动:
systemctl enable httpd.service -
查看服务的开机启动状态:
systemctl is-enabled httpd.service -
禁用服务开机启动:
systemctl disable httpd.service -
列出所有已启用的服务:
systemctl list-unit-files | grep enabled -
查看系统中所有已激活的服务:
systemctl list-units --type=service -
永久修改主机名:
hostnamectl set-hostname newname
2.4 进程管理
-
程序
就是磁盘里的静态文件(图中「程序 A」「程序 B」)。它们只是躺在磁盘里的一段代码和数据,没有被运行,不占用 CPU、内存。 -
进程
是把程序从磁盘加载到内存后的一次「运行实例」。图中「进程 1」「进程 2」等,各自拥有独立的内存空间、文件描述符等资源,是操作系统分配资源的最小单位。 -
线程
位于每个进程内部(如「线程 1、线程 2」在「进程 1」中)。线程共享所属进程的资源,仅拥有自己的栈和寄存器上下文,是操作系统调度的最小执行单元。 -
协程
图中没有直接画出,可以理解成「线程内部的更小执行片段」。协程由用户程序自行调度,切换只在用户态完成,内存占用更小,切换速度更快,不依赖操作系统调度器。

如果把「程序 → 进程 → 线程 → 协程」想像成一家快递公司的四级组织结构,一句话就能对上号:
| 概念 | 快递公司类比 | 本质 | 拥有资源 | 调度者 | 切换速度 |
|---|---|---|---|---|---|
| 程序 | 一本「快递操作手册」放在仓库 | 静态文件(指令 + 数据) | 硬盘空间 | 无 | 无 |
| 进程 | 公司新开的「分拣中心」 | 程序的一次运行实例 | 独立内存、文件描述符、端口等 | 操作系统 | 慢(内核级) |
| 线程 | 分拣中心里的「工人」 | 进程内的执行单元 | 共享进程资源,只私有栈和寄存器 | 操作系统 | 中(内核级) |
| 协程 | 工人手里的「电动螺丝刀」 | 用户态轻量级执行体 | 只私有栈,调度器也由用户程序提供 |
2.5 ps 命令
ps(process status)命令用于查看系统中当前运行的进程。它显示了与进程相关的信息,如进程 ID (PID)、用户、CPU 和内存使用率等。
常用选项:
-
ps -aux:显示所有进程,包括其他用户的进程。 -
ps -ef:以标准格式显示所有进程。 -
ps -aux | grep [进程名]:通过管道和grep命令过滤进程 -
[root@localhost ~]# ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.1 193956 7012 ? Ss 19:10 0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0.0 0.0 0 0 ? S 19:10 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? S< 19:10 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S 19:10 0:00 [ksoftirqd/0] root 7 0.0 0.0 0 0 ? S 19:10 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 19:10 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? S 19:10 0:03 [rcu_sched] ...(此处省略) [root@localhost ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 19:10 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 19:10 ? 00:00:00 [kthreadd] root 4 2 0 19:10 ? 00:00:00 [kworker/0:0H] root 6 2 0 19:10 ? 00:00:00 [ksoftirqd/0] root 7 2 0 19:10 ? 00:00:00 [migration/0] root 8 2 0 19:10 ? 00:00:00 [rcu_bh] root 9 2 0 19:10 ? 00:00:03 [rcu_sched] root 10 2 0 19:10 ? 00:00:00 [lru-add-drain] root 11 2 0 19:10 ? 00:00:00 [watchdog/0] root 12 2 0 19:10 ? 00:00:00 [watchdog/1] root 13 2 0 19:10 ? 00:00:00 [migration/1] ...(此处省略) [root@localhost ~]# ps -aux | grep vim root 4466 0.0 0.0 112824 976 pts/2 S+ 20:15 0:00 grep --color=auto vim2.6 top 命令
top命令用于动态显示 Linux 系统中运行的进程和资源使用情况,实时更新显示。 -
常用快捷键:
-
P:按 CPU 使用率排序。 -
M:按内存使用量排序。 -
T:按时间排序。 -
q:退出 top。 -
1 :查看当前有几个CPU
-
[root@localhost ~]# top
top - 20:22:44 up 1:12, 4 users, load average: 0.00, 0.01, 0.06
Tasks: 224 total, 1 running, 223 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.5 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 38.6/3861292 [||||||||||||||||||||||||||||||||||||||| ]
KiB Swap: 0.0/4063228 [ ]
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1811 mysql 20 0 1793252 395888 16484 S 2.0 10.3 1:22.08 mysqld
734 root 20 0 295564 5296 4036 S 1.0 0.1 0:15.58 vmtoolsd
2796 zard3 20 0 608632 25448 18796 S 0.7 0.7 0:13.83 vmtoolsd
415 root 20 0 0 0 0 S 0.3 0.0 0:04.51 xfsaild/dm-0
1486 root 20 0 92192 2236 1148 S 0.3 0.1 0:00.24 master
3697 root 20 0 160988 5640 4284 S 0.3 0.1 0:00.89 sshd
4464 root 20 0 0 0 0 S 0.3 0.0 0:00.38 kworker/0:0
2.7. pgrep命令查询进程信息
常用的参数
-
-l:选项可同时输出对应的进程名以及PID
-
-U:选项查询特定用户的进程
-
-t:选项查询在特定终端运行的进程
[root@localhost ~]# pgrep -l "log"
413 xfs-log/dm-0
605 xfs-log/sda1
760 abrt-watch-log
762 abrt-watch-log
768 systemd-logind
1110 rsyslogd
2.8.pstree命令以树形结构列出进程信息
pstree 命令默认情况下只显示各进程的名称, 结合以下常用的参数使用:
-
-p:选项使用时可以同时列出对应的PID号
-
-u:选项可以列出对应的用户名
-
-a:选项可以列出完整的命令信息
[root@localhost ~]# pstree -aup zard3
at-spi-bus-laun,2449
├─dbus-daemon,2454 --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
│ └─{dbus-daemon},2455
├─{at-spi-bus-laun},2450
├─{at-spi-bus-laun},2451
└─{at-spi-bus-laun},2453
at-spi2-registr,2457 --use-gnome-session
├─{at-spi2-registr},2462
└─{at-spi2-registr},2463
dbus-daemon,2310 --fork --print-pid 5 --print-address 7 --session
└─{dbus-daemon},2311
dbus-launch,2309 --sh-syntax --exit-with-session
dconf-service,2570
├─{dconf-service},2571
└─{dconf-service},2572
evolution-addre,2914
├─evolution-addre,2943 --factory all --bus-nameorg.gnome.evolution.dataserver.Subprocess.Backend.Addr
│ ├─{evolution-addre},2948
│ ├─{evolution-addre},2950
│ ├─{evolution-addre},2951
│ ├─{evolution-addre},2952
│ └─{evolution-addre},2964
├─{evolution-addre},2918
├─{evolution-addre},2919
├─{evolution-addre},2921
└─{evolution-addre},2922
evolution-calen,2866
├─evolution-calen,2887 --factory all --bus-nameorg.gnome.evolution.dataserver.Subprocess.Backend.Calenda
│ ├─{evolution-calen},2891
│ ├─{evolution-calen},2892
│ ├─{evolution-calen},2894
│ ├─{evolution-calen},2895
│ ├─{evolution-calen},2906
│ ├─{evolution-calen},2909
│ ├─{evolution-calen},2910
│ └─{evolution-calen},2916
├─{evolution-calen},2873
├─{evolution-calen},2876
├─{evolution-calen},2880
└─{evolution-calen},2881
evolution-sourc,2552
├─{evolution-sourc},2553
├─{evolution-sourc},2554
└─{evolution-sourc},2555
gnome-session-b,2300 --session gnome-classic
├─abrt-applet,2806
│ ├─{abrt-applet},2816
│ └─{abrt-applet},2817
├─gnome-shell,2488
│ ├─ibus-daemon,2522 --xim --panel disable
│ │ ├─ibus-dconf,2526
│ │ │ ├─{ibus-dconf},2529
│ │ │ ├─{ibus-dconf},2532
│ │ │ └─{ibus-dconf},2538
│ │ ├─ibus-engine-sim,2954
│ │ │ ├─{ibus-engine-sim},2956
│ │ │ └─{ibus-engine-sim},2960
│ │ ├─{ibus-daemon},2523
│ │ └─{ibus-daemon},2524
│ ├─{gnome-shell},2490
│ ├─{gnome-shell},2491
│ ├─{gnome-shell},2494
│ ├─{gnome-shell},2495
│ ├─{gnome-shell},2496
│ ├─{gnome-shell},2509
│ ├─{gnome-shell},2512
│ ├─{gnome-shell},2513
│ ├─{gnome-shell},2514
│ ├─{gnome-shell},2515
│ ├─{gnome-shell},2516
│ ├─{gnome-shell},2517
│ ├─{gnome-shell},2519
│ └─{gnome-shell},2520
├─gnome-software,2808 --gapplication-service
│ ├─{gnome-software},2831
│ ├─{gnome-software},2834
│ └─{gnome-software},2872
├─gsd-a11y-settin,2696
│ ├─{gsd-a11y-settin},2698
│ ├─{gsd-a11y-settin},2702
│ └─{gsd-a11y-settin},2729
├─gsd-account,2684
│ ├─{gsd-account},2688
│ ├─{gsd-account},2691
│ └─{gsd-account},2726
├─gsd-clipboard,2699
│ ├─{gsd-clipboard},2707
│ └─{gsd-clipboard},2709
├─gsd-color,2703
│ ├─{gsd-color},2714
│ ├─{gsd-color},2715
│ └─{gsd-color},2716
├─gsd-datetime,2704
│ ├─{gsd-datetime},2713
│ ├─{gsd-datetime},2718
│ └─{gsd-datetime},2725
├─gsd-disk-utilit,2797
│ ├─{gsd-disk-utilit},2800
│ └─{gsd-disk-utilit},2803
├─gsd-housekeepin,2705
│ ├─{gsd-housekeepin},2710
│ ├─{gsd-housekeepin},2712
│ └─{gsd-housekeepin},2750
├─gsd-keyboard,2708
│ ├─{gsd-keyboard},2742
│ ├─{gsd-keyboard},2743
│ └─{gsd-keyboard},2752
├─gsd-media-keys,2717
│ ├─{gsd-media-keys},2753
│ ├─{gsd-media-keys},2754
│ └─{gsd-media-keys},2765
├─gsd-mouse,2719
│ ├─{gsd-mouse},2720
│ ├─{gsd-mouse},2731
│ └─{gsd-mouse},2756
├─gsd-power,2655
│ ├─{gsd-power},2666
│ ├─{gsd-power},2669
│ └─{gsd-power},2739
├─gsd-print-notif,2657
│ ├─{gsd-print-notif},2663
│ └─{gsd-print-notif},2668
├─gsd-rfkill,2661
│ ├─{gsd-rfkill},2664
│ └─{gsd-rfkill},2670
├─gsd-screensaver,2665
│ ├─{gsd-screensaver},2671
│ └─{gsd-screensaver},2679
├─gsd-sharing,2673
│ ├─{gsd-sharing},2675
│ ├─{gsd-sharing},2676
│ └─{gsd-sharing},2677
├─gsd-smartcard,2682
│ ├─{gsd-smartcard},2685
│ ├─{gsd-smartcard},2686
│ ├─{gsd-smartcard},2724
│ └─{gsd-smartcard},2757
├─gsd-sound,2674
│ ├─{gsd-sound},2681
│ ├─{gsd-sound},2683
│ └─{gsd-sound},2721
├─gsd-wacom,2680
│ ├─{gsd-wacom},2700
│ └─{gsd-wacom},2701
├─gsd-xsettings,2678
│ ├─{gsd-xsettings},2689
│ ├─{gsd-xsettings},2690
│ └─{gsd-xsettings},2734
├─nautilus-deskto,2772 --force
│ ├─{nautilus-deskto},2780
│ ├─{nautilus-deskto},2781
│ └─{nautilus-deskto},2853
├─seapplet,2802
├─ssh-agent,2430 /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
├─tracker-extract,2820
│ ├─{tracker-extract},2843
│ ├─{tracker-extract},2847
│ ├─{tracker-extract},2848
│ ├─{tracker-extract},2927
│ ├─{tracker-extract},2928
│ ├─{tracker-extract},2929
│ ├─{tracker-extract},2930
│ ├─{tracker-extract},2931
│ ├─{tracker-extract},2932
│ ├─{tracker-extract},2933
│ ├─{tracker-extract},2934
│ ├─{tracker-extract},2935
│ └─{tracker-extract},2936
├─tracker-miner-a,2829
│ ├─{tracker-miner-a},2938
│ ├─{tracker-miner-a},2984
│ └─{tracker-miner-a},3007
├─tracker-miner-f,2833
│ ├─{tracker-miner-f},2844
│ ├─{tracker-miner-f},2845
│ └─{tracker-miner-f},2850
├─tracker-miner-u,2837
│ ├─{tracker-miner-u},2957
│ ├─{tracker-miner-u},2983
│ └─{tracker-miner-u},3006
├─{gnome-session-b},2458
├─{gnome-session-b},2459
└─{gnome-session-b},2473
gnome-keyring-d,2293 --daemonize --login
├─{gnome-keyring-d},2295
├─{gnome-keyring-d},2296
└─{gnome-keyring-d},2481
gnome-shell-cal,2547
├─{gnome-shell-cal},2548
├─{gnome-shell-cal},2550
├─{gnome-shell-cal},2559
├─{gnome-shell-cal},2560
└─{gnome-shell-cal},2855
gnome-terminal-,3306
├─bash,3313
│ └─su,3374,root - root
│ └─bash,3385
├─bash,3593
│ └─su,3638,root - root
│ └─bash,3647
├─gnome-pty-helpe,3312
├─{gnome-terminal-},3307
├─{gnome-terminal-},3308
└─{gnome-terminal-},3309
goa-daemon,2558
├─{goa-daemon},2573
├─{goa-daemon},2576
└─{goa-daemon},2577
goa-identity-se,2580
├─{goa-identity-se},2585
├─{goa-identity-se},2586
└─{goa-identity-se},2587
gsd-printer,2744
├─{gsd-printer},2774
└─{gsd-printer},2775
gvfs-afc-volume,2601
├─{gvfs-afc-volume},2602
├─{gvfs-afc-volume},2603
└─{gvfs-afc-volume},2607
gvfs-goa-volume,2626
├─{gvfs-goa-volume},2628
└─{gvfs-goa-volume},2629
gvfs-gphoto2-vo,2610
├─{gvfs-gphoto2-vo},2612
└─{gvfs-gphoto2-vo},2614
gvfs-mtp-volume,2618
├─{gvfs-mtp-volume},2620
└─{gvfs-mtp-volume},2622
gvfs-udisks2-vo,2596
├─{gvfs-udisks2-vo},2597
└─{gvfs-udisks2-vo},2598
gvfsd,2343
├─gvfsd-burn,2958 --spawner :1.4 /org/gtk/gvfs/exec_spaw/1
│ ├─{gvfsd-burn},2961
│ └─{gvfsd-burn},2965
├─gvfsd-dnssd,3287 --spawner :1.4 /org/gtk/gvfs/exec_spaw/4
│ ├─{gvfsd-dnssd},3288
│ └─{gvfsd-dnssd},3289
├─gvfsd-network,3268 --spawner :1.4 /org/gtk/gvfs/exec_spaw/2
│ ├─{gvfsd-network},3270
│ ├─{gvfsd-network},3271
│ └─{gvfsd-network},3274
├─gvfsd-trash,2784 --spawner :1.4 /org/gtk/gvfs/exec_spaw/0
│ ├─{gvfsd-trash},2786
│ └─{gvfsd-trash},2787
├─{gvfsd},2344
└─{gvfsd},2345
gvfsd-fuse,2348 /run/user/1000/gvfs -f -o big_writes
├─{gvfsd-fuse},2354
├─{gvfsd-fuse},2357
├─{gvfsd-fuse},2358
├─{gvfsd-fuse},2359
└─{gvfsd-fuse},2365
gvfsd-metadata,3042
├─{gvfsd-metadata},3044
└─{gvfsd-metadata},3045
ibus-portal,2531
├─{ibus-portal},2533
└─{ibus-portal},2535
ibus-x11,2528 --kill-daemon
├─{ibus-x11},2537
└─{ibus-x11},2539
imsettings-daem,2339
├─{imsettings-daem},2340
├─{imsettings-daem},2341
└─{imsettings-daem},2350
mission-control,2590
├─{mission-control},2591
├─{mission-control},2593
└─{mission-control},2594
pulseaudio,2500 --start --log-target=syslog
├─{pulseaudio},2503
└─{pulseaudio},2506
tracker-store,2854
├─{tracker-store},2859
├─{tracker-store},2860
├─{tracker-store},2861
├─{tracker-store},2868
├─{tracker-store},2869
├─{tracker-store},2870
└─{tracker-store},2871
vmtoolsd,2796 -n vmusr
├─{vmtoolsd},2862
├─{vmtoolsd},2864
└─{vmtoolsd},2941
xdg-permission-,2542
├─{xdg-permission-},2543
└─{xdg-permission-},2545
三、进程调试实战
7.1 Ctrl+Z组合键
当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,打包usr并且调入后台 ,可以按 Ctrl+Z 组合键将该下载任务调入后台并暂停执行
7.2 job命令
jobs 命令用于查看当前会话中运行的后台任务。
常用选项:
-
jobs -l:列出当前所有后台任务及其进程 ID。
[root@localhost ~]# tar czf ust.tar.gz /usr
tar: 从成员名中删除开头的“/”
tar: 从硬连接目标中删除开头的“/”
^Z
[1]+ 已停止 tar czf ust.tar.gz /usr
[root@localhost ~]# jobs
[1]+ 已停止 tar czf ust.tar.gz /usr
[root@localhost ~]# jobs -l
[1]+ 4720 停止 tar czf ust.tar.gz /usr
[root@localhost ~]# fg 1
tar czf ust.tar.gz /usr
7.3.终止进程的运行
Ctrl+C组合键
中断正在执行的命令
kill 命令
kill 命令用于发送信号给进程,通常用来终止进程。
常用选项:
-
kill [PID]:正常终止进程。 -
kill -9 [PID]:强制终止进程(不可恢复)。
# 获取PID的方式有两种 一个是jobs,一个是ps aux|grep tar
# 方法一
[root@localhost ~]# jobs -l
[1]+ 4720 停止 tar czf ust.tar.gz /usr
# 方法二
[root@localhost ~]# ps -aux|grep tar
zard3 2500 0.0 0.1 1285572 7380 ? S<l 19:20 0:01 /usr/bin/pulseaudio --start --log-target=syslog
root 4720 10.2 0.0 123808 1520 pts/2 T 20:34 0:21 tar czf ust.tar.gz /usr
root 4758 0.0 0.0 112828 976 pts/2 S+ 20:37 0:00 grep --color=auto tar
# 杀死进程
[root@localhost ~]# kill -9 4720
[1]+ 已杀死 tar czf ust.tar.gz /usr
killall 命令
killall 命令根据进程名称终止进程。
案例:
killall vim
终止所有名为 vim 的进程。
pkill 命令
pkill 命令根据进程属性(如用户名、终端等)终止进程。
案例:
[root@localhost ~]# pkill -9 vim
[1]+ 已杀死 vim local.repo
pkill 命令
pkill 命令根据进程属性(如用户名、终端等)终止进程。
[root@localhost ~]# pkill -9 -u test1
[root@localhost ~]# ps -aux|grep test1
root 4993 0.0 0.0 112824 980 pts/2 S+ 20:53 0:00 grep --color=auto test1
7.4 一次性任务:at 命令
at 命令用于设置一次性任务,任务将在指定时间执行。
-
命令格式:
at [HH:MM] [yyyy-mm-dd] at> [要执行的命令]
-
常用选项:
-
atq:列出待执行的任务。 -
atrm [任务编号]:删除指定的任务。
-
[root@localhost ~]# at 21:00 2025-8-16
at> init 0
at> <EOT>
job 19 at Sat Aug 16 21:00:00 2025
7.5 周期性任务:cron 命令
cron 用于设置定期执行的任务。用户可以通过 crontab 命令编辑和管理自己的计划任务。
* * * * * [command]
-
*:每个字段的取值范围:分钟(0-59),小时(0-23),日期(1-31),月份(1-12),星期(0-6,0 为周日)。 -
[command]:要执行的命令。
由于各字段的作用不同,其取值范围也不一样,如表 9-2 所示,当使用“*”时表示取值范围中的任意时间。crontab 任务配置记录中所设置的命令操作将在“分钟”+“小时”+“日期”+ “月份”+“星期”都满足的条件下执行。
表 9-2 crontab 计划任务的配置字段说明
分钟 取值为 0~59 的任意整数
小时 取值为 0~23 的任意整数
日期 取值为 1~31 的任意整数(日期在该月份中必须有效)
月份 取值为 1~12 的任意整数
星期 取值为 0~7 的任意整数,0 或 7 代表星期日
常用命令:
-
crontab -e:编辑当前用户的 cron 任务。 -
crontab -l:列出当前用户的 cron 任务。 -
crontab -r:删除当前用户的所有 cron 任务。
# crontab -e 创建命令
[root@localhost ~]# crontab -e
*/1 * * * * ls -lh /home/*
[root@localhost ~]# crontab -l # 列出当前的任务
*/1 * * * * ls -lh /home/*
[root@localhost ~]# tail -f /var/log/cron # 实时更新当前任务
Aug 17 08:17:01 localhost crond[1152]: (root) RELOAD (/var/spool/cron/root)
Aug 17 08:18:01 localhost CROND[2280]: (root) CMD (ls -lh /home/*)
Aug 17 08:18:04 localhost crontab[2266]: (root) REPLACE (root)
Aug 17 08:18:04 localhost crontab[2266]: (root) END EDIT (root)
Aug 17 08:18:11 localhost crontab[2297]: (root) LIST (root)
Aug 17 08:19:01 localhost crond[1152]: (root) RELOAD (/var/spool/cron/root)
Aug 17 08:19:02 localhost CROND[2308]: (root) CMD (ls -lh /home/*)
Aug 17 08:20:01 localhost CROND[2335]: (root) CMD (ls -lh /home/*)
Aug 17 08:20:01 localhost CROND[2334]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Aug 17 08:21:01 localhost CROND[2357]: (root) CMD (ls -lh /home/*)
tail -f /var/log/cron 最后查看一下
cron 服务管理
启动cron
systemctl start crond
查看 cron 服务状态
systemctl status crond
启用 cron 服务开机启动:
systemctl enable crond
[root@localhost ~]# crontab -e
crontab: installing new crontab
您在 /var/spool/mail/root 中有新邮件
[root@localhost ~]# crontab -l
30 8 * * * /usr/bin/systemctl start firewalld.service
31 8 * * * /usr/bin/systemctl stop firewalld.service
[root@localhost ~]# systemctl status firewalld.service # 8:29
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@localhost ~]# systemctl status firewalld.service #8:30
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since 日 2025-08-17 08:30:02 CST; 884ms ago
Docs: man:firewalld(1)
Main PID: 2595 (firewalld)
Tasks: 2
CGroup: /system.slice/firewalld.service
└─2595 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
8月 17 08:30:02 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
8月 17 08:30:02 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
8月 17 08:30:03 localhost.localdomain firewalld[2595]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure... now.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl status firewalld.service #8:31
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
四、命令
4.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日。
[root@localhost ~]# date +%Y-%y-%d-%H-%M-%S -s "2025-10-1"
2025-25-01-00-00-00
[root@localhost ~]# date -%s
date:无效选项 -- %
Try 'date --help' for more information.
[root@localhost ~]# date +%s
1759248022
[root@localhost ~]# date
2025年 10月 01日 星期三 00:00:41 CST
[root@localhost ~]# date +%Y-%M-%d-%H-%M-%S -s "2025-10-1"
2025-00-01-00-00-00
[root@localhost ~]# date +%Y-%m-%d-%H-%M-%S -s "2025-10-1"
2025-10-01-00-00-00
[root@localhost ~]# date
2025年 10月 01日 星期三 00:00:03 CST
4.2. history
功能:
history 命令用来查看当前用户的历史命令。这个命令可以帮助你快速找到之前运行的命令。
[root@localhost ~]# history
(略)
[root@localhost ~]# history |grep cal
121 vi local.repo
129 vim local.repo
160 ./configure --prefix=/usr/local/apache
161 vim /usr/local/apache/conf/httpd.conf
162 /usr/local/apache/bin/apachectl start
164 /usr/local/apache/bin/apachectl start
166 /usr/local/apache/bin/apachectl start
272 cal 10 2025
273 cal
315 vim local.repo
321 vim local.repo
341 cal
342 cal -2025-4
343 cal 4 2025
344 cal -y
346 history |grep cal
4.3. scp
功能:
scp 命令用于通过 SSH 协议在本地和远程服务器之间安全地复制文件或目录。它加密了数据传输,因此更加安全。
详细
[root@localhost ~]# scp 111.txt root@192.168.10.101:/opt
root@192.168.10.101's password:
111.txt
# 另一台服务器
[root@localhost opt]# ls
111.txt rh
五、总结
本章围绕Linux系统管理展开,先梳理BIOS→MBR→GRUB→内核→init的引导链,强调systemd并行启动、target替代运行级的优势;再讲进程与计划任务,演示ps/top、前后台调度、kill/at/crontab的实战;最后汇总date、cal、history、scp/rsync、ssh、nohup、reboot/shutdown、free等高频命令。通过大量实例,读者可快速完成服务启停、资源监控、自动化运维,实现系统稳定、安全、低耗。
更多推荐




所有评论(0)