目录

前言

一、 系统是如何启动的?

1.1按下电源键后,Linux 依次经历 5 个阶段:

1.2 GRUB2 与 GRUB 的区别

1.3 Systemd 服务管理

1 Systemd 的优点

2 运行级别与 Systemd 目标

二、 服务与运行级别

2.1 Systemd 用“target”重新定义了 7 个运行级别:

2.2 设置与切换运行级别

2.3 服务管理

2.4 进程管理

2.5 ps 命令

2.6 top 命令

2.7. pgrep命令查询进程信息

2.8.pstree命令以树形结构列出进程信息

三、进程调试实战

7.1 Ctrl+Z组合键

7.2 job命令

7.3.终止进程的运行

Ctrl+C组合键

kill 命令

killall 命令

pkill 命令

pkill 命令

7.4 一次性任务:at 命令

7.5 周期性任务:cron 命令

cron 服务管理

四、命令

4.1. date

功能:

详细案例:

4.2. history

功能:

 4.3. scp

五、总结


前言

       在数字化浪潮席卷全球的今天,Linux 已成为互联网、云计算、大数据乃至人工智能时代不可替代的基石。无论是承载着亿万访问量的网站后台,还是支撑着弹性伸缩的容器集群,亦或潜伏于掌中手机的安卓系统,其内核皆闪烁着开源社区的智慧光芒。然而,再强大的系统也离不开严谨的管理:启动时的一连串精密步骤决定了它能否顺利醒来;运行中的万千进程需要被持续监控、调度与回收;周期性的备份、巡检、清理更需悄无声息地按计划完成。面对命令行黑屏,很多初学者望而生畏,却不知其中蕴藏着高效、可复现、可远程的运维艺术。本章节将以系统管理员的视角,带你走完一条完整的“管理闭环”:从按下电源键到登录提示符出现,拆解每一步幕后故事;从第一条进程的诞生到成千上万的任务在后台井然有序,剖析 ps、top、kill、crontab 等命令如何像手术刀般精确;从 date、cal、history 的日常小工具,到 scp、rsync、ssh 构建的远程自动化管道,点滴汇聚成可复制的生产力。愿这段旅程让你在字符跃动的终端里,找到掌控系统的自信与乐趣。

一、 系统是如何启动的?

1.1按下电源键后,Linux 依次经历 5 个阶段

  1. 开机自检(POST)——硬件自检,找到第一块可启动设备;

  2. MBR 引导——读入硬盘 0 扇区的 512 字节,交给 GRUB;

  3. GRUB 菜单——显示启动项,加载 /boot/grub2/grub.cfg

  4. 内核装载——把 vmlinuz 与 initramfs 解压到内存,驱动硬件;

  5. 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 vim

    2.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等高频命令。通过大量实例,读者可快速完成服务启停、资源监控、自动化运维,实现系统稳定、安全、低耗。

更多推荐