一 、学习阶段

在学习 CentOS Linux 或任何其他 Linux 发行版时,可以将学习划分为以下几个阶段,这些阶段按照逐渐增加的复杂性和深度,帮助你建立坚实的 Linux 技能:

  1. 入门阶段

    • 熟悉基本的 Linux 概念和术语,如文件系统、进程、权限等。
    • 学习基本的命令行操作,如文件和目录操作、文件查看、编辑、权限设置等。
    • 掌握基本的系统操作,如登录、关机、重启等。
  2. 系统管理阶段

    • 学习用户管理,包括添加、删除、修改用户账户,以及用户组管理。
    • 掌握文件系统管理,包括文件和目录权限、文件系统挂载、磁盘管理等。
    • 熟悉软件包管理,使用包管理工具(如 yumdnf)安装、更新、删除软件包。
  3. 网络管理阶段

    • 学习网络配置,包括设置静态 IP 地址、配置网络接口、管理网络服务等。
    • 掌握防火墙配置和管理,如使用 firewalld 管理防火墙规则。
    • 理解网络诊断工具的使用,如 pingtraceroutenetstat 等。
  4. 安全性管理阶段

    • 学习身份验证和授权,如密码管理、sudo 配置等。
    • 理解基本的安全措施,如更新系统、安装防病毒软件、配置防火墙等。
    • 学习日志管理,包括查看和分析系统日志文件。
  5. 高级主题阶段

    • 掌握系统备份和恢复策略,包括备份脚本编写、备份存储管理等。
    • 学习系统监控和性能优化,包括监控系统资源、识别性能瓶颈、调整内核参数等。
    • 理解虚拟化和容器化技术,如使用 KVM、Docker 等。

每个阶段都建立在前一个阶段的基础上,因此建议逐步学习并逐步深入。同时,建议在实践中应用所学知识,通过完成任务和解决问题来加深理解和掌握技能。

当然,以下是更进一步细化的大纲,列出了每个小章节中使用到的一些关键命令:

第一章:入门阶段

1.1 Linux 简介

1.1.1 Linux 的起源和发展历史

Linux 的起源和发展历史可以追溯到 1991 年,当时一位名叫 Linus Torvalds 的芬兰大学生创建了 Linux 内核,并将其作为自由开源软件发布。以下是 Linux 的起源和发展历史的简要概述:

1. 起源(1991 年)
  • 1991 年 8 月: Linus Torvalds 在赫尔辛基大学开始编写 Linux 内核,并在 9 月发布了第一个版本,这个版本仅包含基本的操作系统功能。
2. 发展初期(1991-1994 年)
  • 1992 年: Linux 开始在互联网上得到关注,不断有开发者加入,为内核增加新的功能和驱动程序。

  • 1993 年: Linux 发布了版本 1.0,这个版本包含了多用户、多任务和多线程支持,标志着 Linux 成为了一个完整的操作系统。

3. 商业化和普及(1994-2000 年)
  • 1994 年: Linux 发布了第一个商业发行版,即 Slackware,后来出现了诸如 Red Hat 和 Debian 等的其他发行版。

  • 1998 年: 成立了 Linux 核心开发社区 Linux Foundation(当时称为 Free Standards Group),以促进 Linux 的发展和标准化。

4. 互联网时代(2000 年至今)
  • 2001 年: IBM 宣布将投入 10 亿美元用于 Linux 的开发和支持,这是 Linux 在企业领域得到认可的重要里程碑。

  • 2005 年: 诞生了 CentOS,这是一个基于 Red Hat Enterprise Linux(RHEL)源代码构建的免费发行版,为企业和个人提供了一个稳定和可靠的选择。

  • 2011 年: Linux 内核迎来了 20 周年庆典,标志着 Linux 已经成为计算机领域的重要力量。

  • 2015 年: 微软宣布将 Windows Server 上运行的 Docker 容器移植到 Linux 上,并将其集成到 Windows 10 中。

  • 2020 年: Linux 内核的最新版本 5.8 发布,继续引入新的功能和改进,如支持更多硬件、增强的性能和安全性等。

Linux 作为一个免费、开源、稳定和可靠的操作系统,已经在各个领域得到了广泛的应用,包括服务器、超级计算机、嵌入式系统、移动设备等。其开放的生态系统和活跃的社区不断推动着 Linux 的发展,并为用户提供了更多选择和灵活性。

1.1.2 Linux 的优势和应用领域

Linux作为一种开源的Unix-like操作系统,在许多方面具有显著的优势,并被广泛应用于各个领域。以下是Linux的优势和应用领域的一些主要特点:

优势:
  1. 开源性: Linux是开源的操作系统,可以免费获取其源代码,用户可以根据自己的需求进行定制和修改,获得更高的灵活性和自由度。

  2. 稳定性: Linux内核稳定可靠,经过了长期的发展和测试,具有良好的稳定性和可靠性,适用于高负载和关键任务的环境。

  3. 安全性: Linux系统有着严格的权限管理机制和访问控制策略,以及强大的安全补丁和更新机制,能够有效保护系统免受恶意攻击和病毒感染。

  4. 多用户多任务: Linux支持多用户多任务的操作模式,能够同时运行多个程序和服务,并为每个用户提供独立的运行环境,提高了系统的利用率和效率。

  5. 兼容性: Linux系统支持多种硬件架构和设备,能够运行于各种计算机平台上,包括个人计算机、服务器、嵌入式设备等,具有良好的兼容性和扩展性。

  6. 灵活性: Linux系统提供了丰富的软件包管理工具和应用程序,用户可以根据自己的需求自由选择和安装所需的软件,满足不同场景下的需求。

  7. 社区支持: Linux拥有庞大的开源社区和活跃的开发者社区,用户可以通过社区获得技术支持、交流经验和分享资源,提高了系统的可维护性和可靠性。

应用领域:
  1. 服务器领域: Linux在服务器领域应用广泛,包括Web服务器、数据库服务器、文件服务器等,如Apache、MySQL、Nginx等,因其稳定性和安全性受到广泛青睐。

  2. 云计算: 大型云服务提供商如Amazon Web Services(AWS)、Microsoft Azure和Google Cloud Platform等基于Linux构建了自己的云计算平台,并提供各种云服务和解决方案。

  3. 嵌入式系统: Linux在嵌入式系统领域也有广泛应用,如智能手机、平板电脑、智能电视、智能家居等,通过定制和裁剪Linux内核,可以适应各种硬件平台和设备需求。

  4. 科学计算: Linux在科学计算和超级计算领域得到广泛应用,如气象预报、基因组学、地震模拟等领域,利用Linux集群进行高性能计算。

  5. 网络设备: Linux作为网络设备的操作系统也得到了广泛应用,如路由器、交换机、防火墙等网络设备,通过定制和开发Linux系统可以实现各种网络功能和服务。

总的来说,Linux具有开源、稳定、安全、灵活等优势,适用于各种场景和领域,是当今世界上最受欢迎和广泛应用的操作系统之一。

1.2 Linux 基础知识

1.2.1 linux系统架构和基础原理

Linux 系统架构是指 Linux 操作系统的整体组织结构和工作原理,它包括了硬件层、内核层和用户空间。下面是 Linux 系统架构的简要介绍:

1. 硬件层

在 Linux 系统架构中,硬件层是最底层的层级,包括了计算机硬件设备,如处理器、内存、硬盘、网卡等。Linux 操作系统能够运行在各种硬件架构上,包括 x86、x86-64、ARM、PowerPC 等,并且对各种硬件设备有着良好的支持。

2. 内核层

Linux 内核是 Linux 系统的核心部分,负责管理硬件资源,并提供了系统调用接口供用户空间程序调用。Linux 内核包含了许多模块,主要包括以下几个方面的功能:

  • 进程管理: 负责管理系统中的进程和线程,包括进程的创建、调度、终止等。
  • 内存管理: 负责管理系统的内存资源,包括内存分配、回收、虚拟内存管理等。
  • 文件系统: 提供了对文件和文件系统的管理,包括文件的创建、读写、删除等操作。
  • 设备驱动: 包含了各种硬件设备的驱动程序,用于与硬件设备进行通信和交互。
  • 网络协议栈: 实现了各种网络协议,用于网络通信和数据传输。
  • 系统调用接口: 提供了用户空间程序与内核之间的通信接口,包括文件操作、进程管理、网络通信等功能。
3. 用户空间

用户空间是 Linux 系统中用户程序运行的环境,包括了各种用户态的应用程序和服务。用户空间的程序通过系统调用接口与内核进行通信,使用内核提供的功能和资源。用户空间包括了以下几个主要部分:

  • Shell 和命令行工具: 提供了用户与系统交互的接口,用户可以通过 Shell 执行命令和操作系统资源。
  • 图形界面: 提供了图形化的用户界面,包括窗口管理器、桌面环境等。
  • 用户程序和服务: 包括各种用户应用程序、服务程序和系统工具,如文本编辑器、浏览器、数据库服务等。

总的来说,Linux 系统架构由硬件层、内核层和用户空间组成,它们共同协作,实现了 Linux 操作系统的各种功能和服务。

1.2.2 linux文件系统结构

Linux 文件系统结构是指 Linux 系统中文件和目录的组织结构,它以树形结构展现,包括了根目录、各级子目录和文件。下面是 Linux 文件系统结构的简要介绍:

1. 根目录(/)

根目录是 Linux 文件系统的最顶层目录,所有其他目录和文件都位于根目录下。根目录以斜杠(/)表示。

2. 常见的重要目录和文件:
  • /bin: 存放系统命令和可执行文件,如ls、cp、mv等。
  • /boot: 存放系统引导程序和内核镜像文件。
  • /dev: 存放设备文件,Linux 中一切设备都被视为文件。
  • /etc: 存放系统配置文件,如网络配置、用户账户配置等。
  • /home: 存放用户的家目录,每个用户都有一个独立的子目录。
  • /lib 和 /lib64: 存放系统共享库文件。
  • /media: 自动挂载的可移动媒体设备(如USB设备)的挂载点。
  • /mnt: 临时挂载点,用于手动挂载设备或分区。
  • /opt: 存放可选的应用程序软件包。
  • /proc: 虚拟文件系统,包含了内核和进程信息。
  • /root: 超级用户(root)的家目录。
  • /sbin: 存放系统管理员使用的系统管理程序和命令。
  • /srv: 存放服务数据目录,如Web服务器、FTP服务器等。
  • /sys: 虚拟文件系统,包含了内核的设备、模块和参数信息。
  • /tmp: 存放临时文件。
  • /usr: 存放用户程序和数据的目录,包括了大部分用户应用程序和文件。
  • /var: 存放经常变化的文件,如日志文件、缓存文件等。
3. 其他目录和文件:

除了上述常见的目录和文件外,Linux 文件系统还包含了许多其他的目录和文件,用于存放系统和用户数据,如用户创建的应用程序、服务的数据目录等。

总的来说,Linux 文件系统结构是一个树形结构,以根目录(/)为顶层,包含了各种子目录和文件,用于存放系统和用户的数据和程序文件。这种结构清晰明了,方便用户管理和操作文件和目录。

Linux 文件系统结构遵循了一定的标准和约定,例如Filesystem Hierarchy Standard(FHS),这有助于不同的Linux发行版保持一致性,提高了软件和系统的兼容性和可移植性。

总的来说,Linux 文件系统结构是基于Unix传统和分层管理思想设计的,具有用户和系统分离、灵活可扩展、标准化兼容等特点,既能满足系统管理的需要,又方便用户管理和操作文件和目录,是一种经过实践验证的有效设计。

1.2.3 文件和目录操作命令

  1. ls:列出目录内容。
  2. tree:以树状结构显示文件和目录的层次结构
  3. cd:切换目录。
  4. pwd:显示当前工作目录的完整路径。
  5. mkdir:创建新目录。
  6. touch:创建新文件或更新已存在文件的时间戳。
  7. cp:复制文件或目录。
  8. mv:移动文件或目录,也可以用来重命名文件或目录。
  9. rm:删除文件或目录。
  10. rmdir:删除空目录。
  11. ln: 创建链接文件。
  12. stat

stat 是一个用于显示文件或文件系统的状态信息的命令行工具。它可以显示文件的详细信息,包括文件的权限、所有者、大小、修改时间等。

以下是 stat 命令的基本用法:

1
stat [OPTION]... FILE...

其中 FILE 是要检查状态的文件或目录的路径。

以下是一些常用的 stat 选项:

  • -c, --format=FORMAT:指定输出格式。
  • -f, --file-system:显示文件系统的状态而不是文件的状态。
  • -L, --dereference:对符号链接进行解引用,显示目标文件的状态。
  • -t, --terse:以紧凑的格式显示信息。

例如,要显示文件 example.txt 的详细状态信息,可以运行以下命令:

1
stat example.txt

这将显示 example.txt 文件的详细状态信息,包括权限、所有者、大小、修改时间等。

1.2.4 文件查看和编辑

  • cat:连接文件并显示内容
  • more:逐页显示文件内容
  • less:类似于 more,但更加强大
  • head:显示文件头部内容
  • tail:显示文件尾部内容
  • nano:基本文本编辑器
  • vim / vi:强大的文本编辑器

1.2.5 Linux 进程管理

进程是计算机中运行的程序的实例。在操作系统中,进程是系统分配资源的基本单位,每个进程都有自己的内存空间、代码、数据和资源,包括打开的文件、网络连接等。进程可以在操作系统中并发执行,多个进程之间相互独立,彼此不受影响。

每个进程都有一个唯一的标识符,称为进程 ID(PID),操作系统使用 PID 来管理和跟踪进程。进程可以处于不同的状态,包括运行、就绪、阻塞、终止等,这取决于进程所处的情况和操作系统的调度算法。

在多任务操作系统中,操作系统负责调度进程的执行,以便在系统资源上实现高效的共享和利用。进程的创建、调度、通信和终止都受到操作系统的管理。通过进程,操作系统实现了多任务和多用户的功能,使得多个程序可以同时运行并且相互隔离,提高了系统的稳定性和安全性。

在 Linux 和类 Unix 操作系统中,信号是用于与进程通信的一种机制,用于通知进程发生了某种事件。信号可以由内核、其他进程或操作系统发送给进程,进程可以通过注册信号处理器来捕获并处理这些信号。以下是一些常见的信号以及它们的含义:

  1. **SIGTERM (15)**:
    终止信号,通常用于请求进程正常终止。进程可以捕获这个信号并执行清理操作后退出。

  2. **SIGKILL (9)**:
    强制终止信号,无法被捕获或忽略。它会立即终止目标进程,不会给进程进行清理的机会。

  3. **SIGINT (2)**:
    中断信号,通常由用户按下 Ctrl+C 生成。用于终止进程的运行。

  4. **SIGHUP (1)**:
    挂起信号,通常在终端关闭时发送给终端关联的进程。有些守护进程会在收到 SIGHUP 信号时重新加载配置文件。

  5. SIGUSR1 (10) 和 **SIGUSR2 (12)**:
    用户定义的信号,可以由进程根据自己的需要使用。通常用于向进程发送自定义的通知。

  6. **SIGCHLD (17)**:
    子进程状态改变信号,父进程在子进程终止或停止时会收到这个信号。

  7. **SIGPIPE (13)**:
    管道破裂信号,当进程尝试向已关闭的管道写入数据时会收到这个信号。

  8. **SIGSEGV (11)**:
    段错误信号,当进程访问未分配的内存或非法内存时会收到这个信号。

  9. **SIGALRM (14)**:
    定时器信号,通常由 alarm() 函数设置的定时器到期时发送。

  10. **SIGTERM (24)**:
    实时定时器信号,与 SIGALRM 类似,但使用不同的编号。

这些是一些常见的信号,不同的操作系统可能会有一些额外的信号或者在编号上有所不同。对于特定的操作系统,你可以查看 man 7 signal 获取更详细的信号列表。

1. ps:显示当前运行的进程快照。

ps 命令用于显示当前系统中的进程信息。它的名称来自于 “process status”。ps 命令提供了多种选项,可以用于控制输出的格式和内容,以满足不同的需求。

以下是一些常见选项以及它们的含义:

  • **a**:显示所有进程,包括与终端无关的进程。
  • **u**:以用户为主的格式显示进程信息,包括用户、PID、CPU 占用率、内存占用等。
  • **x**:显示与当前用户相关的所有进程,而不仅仅是终端中运行的进程。
  • **e**:显示所有进程,包括系统进程。
  • **f**:显示进程之间的关系,以树状结构显示进程间的父子关系。
  • **-e**:显示所有进程。
  • **-u**:以用户为主的格式显示进程信息。
  • **-p**:根据给定的 PID 显示进程信息。
  • **-o**:自定义显示列,可以指定显示哪些字段。
  • **-C**:根据给定的命令名显示进程信息。
  • **--sort**:根据指定的字段排序显示结果。

例如,要显示当前用户的所有进程,可以使用以下命令:

1
ps aux

要显示所有进程的全面信息,可以使用:

1
ps -ef

要根据命令名显示进程信息,可以使用:

1
ps -C nginx

这些是 ps 命令的一些常用选项及其含义。通过组合不同的选项,可以实现对系统中运行的进程进行各种形式的监控和管理。

除了上述提到的常见用法和选项外,还有一些常见的 ps 命令用法和选项,包括:

  • **-l**:以长格式显示进程信息,包括更多的列。
  • **-ww**:用于防止输出被截断,通常与 -l-f 一起使用。
  • **-aux**:显示所有用户的所有进程信息,包括系统进程。
  • **-o**:自定义显示列,可以指定要显示的列和它们的顺序。
  • **-g**:按进程组显示信息。
  • **-t**:按终端显示信息,可以显示与指定终端相关的进程。
  • **-N**:只显示没有终端的进程。
  • **-n**:用数字而不是符号显示用户和组 ID。
  • **-C**:根据指定的命令名显示进程信息。
  • **-p**:根据给定的 PID 显示进程信息。
  • **-s**:显示会话首领(session leader)的信息。
  • **-L**:显示进程的轻量级线程信息。

这些选项可以帮助你更加灵活地查看和管理系统中的进程信息。你可以根据具体的需求选择合适的选项来使用 ps 命令。

ps -elf 中,每列参数的含义如下:

  1. F:显示进程的标志,通常用来标识进程的状态、调度优先级等。
  2. S:进程的状态,通常显示为进程的状态标识符,例如 S(sleeping,睡眠)、R(running,运行)、Z(zombie,僵尸)等。
  3. UID:进程的用户 ID。
  4. PID:进程的唯一标识符,即进程 ID。
  5. PPID:父进程的进程 ID。
  6. C:进程使用的 CPU 时间的百分比。
  7. PRI:进程的调度优先级。
  8. NI:进程的 nice 值,用于调整进程的优先级。
  9. ADDR:进程的内存地址。
  10. SZ:进程的内存大小,通常以页为单位
  11. WCHAN:进程正在等待的事件或资源的名称。
  12. STIME:进程启动的时间。
  13. TTY:控制进程的终端设备。
  14. TIME:进程使用 CPU 的累计时间。
  15. CMD:进程的命令名或完整路径。

这些参数提供了进程的详细信息,包括进程的用户、进程 ID、父进程 ID、CPU 占用情况、启动时间、控制终端等。通过观察这些参数,可以更全面地了解系统中运行的进程情况。

2. top:动态显示系统中各个进程的资源占用情况。

top 命令用于动态显示系统中各个进程的资源占用情况。当你在终端中运行 top 命令后,会出现一个实时更新的进程列表,显示了当前系统中运行的进程的相关信息。以下是 top 命令输出中的一些常见内容:

  1. PID:进程 ID,唯一标识一个进程。
  2. USER:启动进程的用户。
  3. PR:进程的优先级。
  4. NI:进程的 nice 值,用于调整进程的优先级。
  5. VIRT:进程使用的虚拟内存大小。
  6. RES:进程使用的实际物理内存大小(Resident Set Size)。
  7. SHR:进程使用的共享内存大小。
  8. S:进程的状态,如运行(R)、睡眠(S)、僵尸(Z)等。
  9. %CPU:进程使用的 CPU 占用率。
  10. %MEM:进程使用的内存占用率。
  11. **TIME+**:进程已运行的 CPU 时间。
  12. COMMAND:进程的命令名。

top 命令还提供了一些交互式的操作功能,例如可以通过键盘按键来改变排序方式、显示特定用户的进程、结束指定进程等。通常,按下键盘上的 q 键可以退出 top 命令。

总之,top 命令是一个非常有用的工具,可以让你实时了解系统中各个进程的运行情况,帮助你监控系统的性能和资源使用情况。

除了基本的进程列表和资源占用情况外,还有一些 top 命令中的补充知识点,包括:

  1. 交互式操作top 命令提供了一系列的交互式操作,可以通过按键来进行排序、过滤、刷新等操作,以便更好地查看系统状态。

  2. 显示汇总信息top 命令默认会显示全局的系统资源占用情况,也可以按键切换到显示汇总信息,包括系统总体资源使用情况以及平均负载等。

  3. 显示内存信息:除了显示进程的内存占用情况外,top 命令还可以显示系统的内存总量、空闲内存、缓存和交换分区等信息。

  4. 显示负载信息top 命令显示了系统的平均负载情况,这是一个反映系统负载状况的重要指标,可以帮助判断系统的性能状况。

  5. 定时刷新:通过 top 命令的参数设置,可以实现定时刷新的功能,例如可以设置每隔一定时间自动刷新显示内容,或者指定刷新的次数。

  6. 显示线程信息top 命令还可以显示线程(或任务)的信息,通过按下 H 键可以切换到显示线程模式。

  7. 查看帮助文档:如果需要查看更多 top 命令的用法和参数选项,可以通过按下 h 键来查看帮助文档。

这些补充知识点可以帮助用户更全面地了解系统的状态和 top 命令的功能,提高系统监控和管理的效率。

以下是一些 top 命令中常用的交互式操作按键及其功能:

  1. h:显示帮助文档
    按下 h 键可以显示 top 命令的帮助文档,其中包含了命令的各种选项及其说明。

  2. k:结束进程
    输入 k 键后,会提示输入要终止的进程的 PID,并且确认后会结束该进程。

  3. r:修改进程的优先级
    输入 r 键后,会提示输入要修改优先级的进程的 PID,然后输入新的优先级值即可。

  4. S:切换到累计模式
    输入 S 键后,top 命令会切换到累计模式,显示进程的累计 CPU 时间信息。

  5. q:退出 top 命令
    输入 q 键后,会退出 top 命令。

  6. 1:显示单核 CPU 信息
    输入 1 键后,top 命令会将 CPU 信息显示为每个核心的详细情况,而不是合并显示。

  7. c:切换显示命令完整路径
    输入 c 键后,top 命令会切换显示进程的完整命令路径,而不仅仅是命令名。

  8. H:显示线程列表
    输入 H 键后,top 命令会显示每个进程的线程列表。

  9. M:根据内存占用排序
    输入 M 键后,top 命令会根据内存占用排序进程列表。

  10. P:根据 CPU 占用排序
    输入 P 键后,top 命令会根据 CPU 占用排序进程列表。

这些按键提供了一些方便的操作,让用户可以更灵活地查看和管理系统中的进程。

3. htop:交互式的 top,更加用户友好。

htop 是一个交互式的进程查看器,类似于 top 命令,但提供了更多的功能和更友好的界面。以下是 htop 常用选项和用法:

  1. 启动 htop
    直接在终端中输入 htop 命令即可启动 htop。

  2. 查看进程列表
    启动 htop 后,会显示一个进程列表,其中包括进程 ID、用户、CPU 使用率、内存使用量等信息。

  3. 交互式操作
    使用键盘上的方向键可以在进程列表中上下移动,使用 PgUp 和 PgDn 键可以向上或向下滚动列表。还可以使用键盘上的数字键来切换排序方式。

  4. 杀死进程
    在 htop 中选中要杀死的进程,然后按下 F9 键,然后按 Enter 键确认。

  5. 切换显示方式

    • 按下 F2 键可以进入设置界面,可以在这里进行一些显示设置。
    • 按下 F3F4 键可以根据进程名或用户进行筛选显示。
    • 按下 F5 键可以刷新显示。
    • 按下 F6 键可以选择不同的排序方式。
    • 按下 F10 键可以退出 htop。
  6. 查看帮助文档
    在 htop 中按下 F1 键可以查看帮助文档,了解更多关于 htop 的使用方法和快捷键。

这些是 htop 的一些常用选项和用法,希望能帮助你更好地使用 htop 进行进程管理和监控。

4. kill:向进程发送信号,用于终止或操作进程。

kill 命令用于向进程发送信号,以控制和管理进程的行为。常见的使用情况是向进程发送终止信号,使其结束执行。kill 命令的基本语法如下:

1
kill [options] <PID>

其中 <PID> 是要发送信号的目标进程的进程 ID。

以下是一些常见的 kill 命令选项和用法:

  1. 终止进程
    发送终止信号给指定的进程。默认情况下,发送的是终止信号 SIGTERM(信号编号为 15),即软件终止信号,进程会优雅地退出。例如:

    1
    kill 1234
  2. 强制终止进程
    如果进程不响应终止信号,可以使用 -9-SIGKILL 选项发送强制终止信号 SIGKILL(信号编号为 9),直接终止进程。但要注意,这种方式不会给进程处理终止信号的机会,可能会导致数据丢失或不正常退出。例如:

    1
    kill -9 1234
  3. 发送其他信号
    除了终止信号外,还可以向进程发送其他信号,例如 SIGINT(中断信号,通常由 Ctrl+C 生成)、SIGHUP(挂起信号,通常由终端断开连接时发送)等。可以使用 -<SIGNAL>-s <SIGNAL> 选项指定要发送的信号。例如:

    1
    kill -INT 1234
  4. 向进程组发送信号
    如果需要向整个进程组发送信号,可以在进程 ID 前加上 -<SIGNAL>-s <SIGNAL> 选项。例如:

    1
    kill -TERM -1234
  5. 查看可用信号
    使用 kill -l 命令可以列出系统支持的所有信号名称及其对应的编号。例如:

    1
    kill -l

这些是 kill 命令的一些常见选项和用法。通过合理使用 kill 命令,可以有效地管理和控制系统中运行的进程。

除了上述提到的常见用法外,还有一些 kill 命令的其他常见用法,包括:

  1. 向一组进程发送信号
    使用 -<SIGNAL>-s <SIGNAL> 选项,并在进程 ID 之前加上 - 符号,可以向一组进程发送相同的信号。例如:

    1
    kill -TERM -1234 -5678
  2. 使用进程名杀死进程
    killall 命令可以根据进程名字(而不是进程 ID)杀死进程。例如:

    1
    killall firefox
  3. 按条件杀死进程
    pkill 命令可以根据进程的属性(如进程名、用户、终端等)杀死进程。例如:

    1
    pkill -u username
  4. 定时杀死进程
    使用 at 命令可以在指定的时间执行 kill 命令,从而定时终止进程。例如:

    1
    echo "kill -TERM 1234" | at 14:30
  5. 杀死一组相关进程
    使用 killtree 命令可以终止指定进程及其所有子进程。例如:

    1
    killtree 1234

这些是 kill 命令的一些常见用法,根据具体的需求,你可以选择合适的方式来终止进程。

除了上述提到的常见方法外,还有一些其他常用的方法来使用 kill 命令,包括:

  1. 使用进程名杀死进程的所有实例
    如果你想杀死具有特定名称的所有进程实例,而不仅仅是一个,你可以使用 pkill 命令,例如:

    1
    pkill firefox
  2. 杀死指定用户的所有进程
    如果你想终止特定用户运行的所有进程,你可以使用 pkill 命令并指定用户名,例如:

    1
    pkill -u username
  3. 向进程发送自定义信号
    除了标准的信号(如 SIGTERMSIGKILL 等),你也可以向进程发送自定义的信号。可以使用 kill -SIGkill -s 选项,例如:

    1
    kill -SIGUSR1 1234
  4. 通过进程名和用户组合条件终止进程
    使用 pkill 命令的 -u 选项和 -x 选项可以组合条件,以杀死指定用户运行的具有特定名称的进程,例如:

    1
    pkill -u username -x process_name
  5. 杀死所有用户的所有进程
    警告:使用这个命令会杀死系统中的所有进程,应慎重使用。

    1
    kill -9 -1

这些方法提供了更多灵活的方式来使用 kill 命令,以满足不同情况下的需求。

5. killall:根据进程名终止进程。

killall 是一个用于终止进程的命令,不同于 kill 命令需要使用进程 ID 来终止进程,killall 可以根据进程的名称来终止进程。其基本语法为:

1
killall [options] name...

其中 name 是要终止的进程的名称,可以指定多个进程名称。killall 将终止与指定名称匹配的所有进程。

以下是一些常用的 killall 命令选项:

  • **-e**:显示详细的错误信息。
  • **-i**:交互式模式,killall 会在终止进程之前请求确认。
  • **-q**:安静模式,不显示警告信息。
  • **-u**:指定用户名,只终止指定用户的进程。
  • **-g**:指定进程组名称,只终止指定进程组的进程。
  • **-l**:显示支持的信号列表。

例如,要终止所有名为 firefox 的进程,可以使用以下命令:

1
killall firefox

需要注意的是,killall 命令会立即终止与指定名称匹配的所有进程,因此请谨慎使用,以免意外终止其他进程。

除了上述提到的基本用法外,killall 命令还可以结合一些其他选项和用法来满足特定的需求,例如:

  1. 使用通配符匹配进程名
    可以使用通配符来匹配进程名,以便终止多个相关进程。例如,要终止所有以 java 开头的进程,可以使用通配符 *,如下所示:

    1
    killall java*
  2. 忽略特定的进程
    使用 -e 选项可以指定要忽略的进程名称,这在终止一组进程时很有用,但要保留其中一些进程。例如,要终止所有名为 firefox 的进程,但保留其中一个进程:

    1
    killall -e firefox
  3. 使用正则表达式匹配进程名
    使用 -r 选项可以使用正则表达式来匹配进程名,这使得可以更加灵活地选择要终止的进程。例如,要终止所有以 chrome 开头的进程,可以使用正则表达式匹配:

    1
    killall -r '^chrome'
  4. 终止指定用户的所有进程
    使用 -u 选项可以指定要终止的进程所属的用户。例如,要终止用户名为 user 的所有进程:

    1
    killall -u user

这些是 killall 命令的一些常见用法,通过合理使用选项和参数,可以满足不同场景下的终止进程的需求。

6. pkill:根据进程名或其他属性终止进程。

pkill,这是一个常见的用于终止进程的命令。

以下是 pkill 命令的一些常用选项和用法:

  1. 终止进程:

    1
    pkill process_name

    这会终止所有名称为 process_name 的进程。

  2. 发送信号终止进程:

    1
    pkill -SIGNAME process_name

    这会向所有名称为 process_name 的进程发送指定的信号。例如,使用 SIGTERM 信号:

    1
    pkill -SIGTERM process_name
  3. 终止特定用户的进程:

    1
    pkill -u username

    这会终止属于指定用户名 (username) 的所有进程。

  4. 终止由指定父进程号创建的进程:

    1
    pkill -P parent_pid

    这会终止指定父进程号 (parent_pid) 下的所有子进程。

  5. 终止具有特定命令行参数的进程:

    1
    pkill -f pattern

    这会终止命令行参数中包含指定模式 (pattern) 的所有进程。

  6. 交互式终止:

    1
    pkill -i process_name

    这会在终止进程之前询问用户是否确定终止。

  7. 显示匹配进程的信息而不终止:

    1
    pkill -l process_name

    这会列出匹配进程的进程号,而不终止它们。

7. pgrep:根据进程名或其他属性列出进程 ID。

pgrep 命令用于根据指定条件查找正在运行的进程,并输出它们的进程 ID(PID)。以下是关于 pgrep 命令的详细解释:

语法

1
pgrep [options] pattern

参数

  • pattern:用于匹配进程的模式。可以是进程名、命令行参数或正则表达式。

常用选项

  • -a:显示完整的命令行而不仅仅是进程 ID。
  • -l:显示进程名而不是进程 ID。
  • -n:仅显示第一个匹配进程的 PID。
  • -u username:根据用户名查找进程。
  • -g pgrp_id:根据进程组 ID 查找进程。
  • -f pattern:根据完整命令行查找进程。
  • -x:仅匹配完全匹配的进程名。
  • -d delimiter:使用指定的分隔符分隔多个 PID。
  • -o oldest|newest:按启动时间最早或最新的进程排序。

工作原理

  • pgrep 会扫描进程列表,匹配指定的模式,并输出匹配进程的 PID。

示例

  1. 查找名称为 nginx 的进程:

    1
    pgrep nginx
  2. 查找命令行包含 python 字符串的进程:

    1
    pgrep -f python
  3. 仅显示第一个匹配进程的 PID:

    1
    pgrep -n nginx
  4. 根据用户名查找进程:

    1
    pgrep -u username
  5. 显示进程名而不是进程 ID:

    1
    pgrep -l nginx

注意事项

  • pgrep 命令默认情况下使用基于正则表达式的模式匹配。
  • 可以通过组合选项来实现更精确的进程匹配和输出控制。
  • 可以将 pgrep 的输出传递给其他命令,如 kill,以实现终止匹配进程的操作。

pgrep 是一个强大的工具,可用于在命令行下快速查找和操作进程。

8. nice:设置进程的优先级。
9. renice:修改正在运行的进程的优先级。
10. jobs:显示当前 shell 的作业列表。

在 CentOS(以及其他 Unix-like 系统)中,jobs 命令用于显示当前 shell 会话中已启动的作业(即进程)状态。这些作业可以是在前台启动但被暂停的,或是在后台运行的。了解 jobs 命令及其相关操作对于管理多个同时运行的进程非常有用。

基本用法
  • **jobs**:不带任何参数的 jobs 命令会列出当前 shell 会话中的所有作业。
  • **jobs -l**:显示作业的进程 ID(PID)以及作业号。
  • **jobs -n**:仅显示自上次提示以来状态已发生变化的作业。
  • **jobs -p**:仅显示作业的进程 ID。
  • **jobs -r**:仅显示正在运行的作业。
  • **jobs -s**:仅显示已停止的作业。
作业控制
  • **Ctrl+Z**:将当前前台作业暂停并放到后台。此时可以使用 jobs 命令查看作业状态。
  • **bg [%jobnumber]**:将暂停的作业放到后台继续运行。如果不指定作业号,则默认操作最近暂停的作业。
  • **fg [%jobnumber]**:将后台作业放到前台继续运行。同样,如果不指定作业号,则默认操作最近暂停或后台运行的作业。
作业状态
  • **Running**:作业正在运行。
  • **Stopped**:作业已被暂停。这通常是因为收到了 SIGTSTP 信号(比如用户按下了 Ctrl+Z)。
  • **Done**:作业已完成执行。在某些 shell 中,完成的作业可能仍会出现在 jobs 列表中,直到你退出 shell 或使用 disown 命令将其从列表中移除。
注意事项
  • 作业号是 shell 分配的,用于在用户级别标识作业。每个 shell 会话都有自己的作业号空间。
  • 进程 ID(PID)是由系统分配的,用于在操作系统级别标识进程。同一个 PID 在不同时间可能对应不同的进程。
  • 当你在一个 shell 会话中启动多个作业时,可以使用 jobs 命令和作业号来管理它们。但是,如果你关闭了 shell 会话,所有与该会话关联的作业都会被终止。
  • 如果你希望即使在关闭 shell 会话后作业也能继续运行,可以使用 nohup 命令或 disown 内置命令来“脱离”作业与 shell 会话的关联。这样,即使你退出了 shell,作业也会在后台继续运行。

“disown”是一个在Unix和类Unix系统(比如Linux)中用于管理后台进程的命令。当你启动一个后台进程(通常通过在命令行后加上“&”来实现)时,该进程仍然与当前的shell会话相关联。这意味着如果你关闭终端或退出shell,这些后台进程也会被终止。然而,有时候你可能希望即使关闭终端或退出shell,某些后台进程也能继续运行。这就是“disown”命令的用武之地。

“disown”命令可以从当前shell的作业列表中移除指定的作业(即后台进程),从而断开该作业与当前shell会话的关联。一旦你使用“disown”命令移除了一个作业,该作业将不再受当前shell会话的控制,即使你关闭了终端或退出了shell,它也会继续运行。

以下是“disown”命令的一些常见用法和选项:

  1. 基本用法disown [jobspec]
    • jobspec是一个可选的参数,用于指定要移除的作业。它可以是作业号(由jobs命令显示)或进程ID(PID)。如果没有指定jobspec,则默认移除最近添加的作业。
  2. 移除多个作业:你可以一次性移除多个作业,只需在命令后依次列出它们的作业号或PID即可。例如:disown %1 %2 将移除作业1和作业2。
  3. 从作业列表中移除所有作业:如果你想一次性移除所有作业,可以使用通配符“%”。例如:disown % 将移除所有作业。
  4. 与“nohup”命令结合使用:“nohup”命令可以在你退出shell时防止命令被挂起(即忽略SIGHUP信号)。将“nohup”与“&”和“disown”结合使用,可以确保命令在你关闭终端后继续运行。例如:nohup command & disown 将启动一个命令,并立即将其从作业列表中移除。

需要注意的是,“disown”命令是bash等高级shell的特性,在某些简单的shell(如sh)中可能不可用。此外,“disown”只能移除你已经启动并仍在运行的作业;它不能用于已经退出或尚未启动的作业。如果你尝试移除一个不存在的作业,shell通常会显示一个错误消息。

11. fg:将作业移至前台运行。

fg 是 Unix 和类 Unix 系统中用于管理作业的命令之一,全称是 “foreground” 的缩写,意为“前台”。它的主要作用是将一个在后台暂停(stopped)的作业调回到前台继续运行。在详细解释 fg 命令之前,我们需要先了解什么是“作业”。

在 Unix 和类 Unix 系统中,作业(job)指的是在终端中运行的命令或命令序列。当你在终端中启动一个命令时,它就成为了一个作业。作业可以在前台运行,也可以在后台运行。前台作业是当前正在终端中执行,且与用户进行交互的作业。而后台作业则是在后台默默执行,不会占用终端的作业。

现在,我们来详细解释 fg 命令:

语法

fg 命令的基本语法如下:

1
fg [作业号]

其中,作业号 是一个可选参数,用于指定要调至前台的作业的标识。它可以是作业的数字编号(由 Shell 分配)或者是作业名(由用户指定)。如果省略了 作业号,则默认将最近的一个后台作业调至前台。

功能

fg 命令的主要功能是将后台暂停的作业切换到前台运行。当一个作业在后台运行时,它不会在终端上显示输出,而是在后台默默地执行。使用 fg 命令可以将其切换到前台,使其输出在终端上显示,并可以与其进行交互。

需要注意的是,如果作业在后台运行时被终止(例如使用 Ctrl+C 或其他方式),则无法使用 fg 命令将其调至前台。此外,如果有多个作业在后台运行,可以使用 jobs 命令查看它们的状态和标识号。

示例

假设你在终端中启动了一个长时间运行的命令(例如 sleep 100),然后立即将其放到后台运行:

1
sleep 100 &

此时,你可以使用 jobs 命令查看当前 shell 会话中的作业列表:

1
jobs

输出可能类似于:

1
[1]+  Stopped                 sleep 100

这里,[1] 是作业号,+ 表示这是最近的一个后台作业,并且它的状态是 Stopped(已停止)。要将这个作业切换到前台运行,可以使用 fg 命令并指定作业号:

1
fg %1

现在,sleep 100 命令将在前台运行,直到它完成或者再次被暂停。注意在作业号前需要加上 % 符号来引用作业。但是,在某些情况下(特别是当作业是最近的一个后台作业时),可以省略作业号和 % 符号直接运行 fg 命令。然而,为了避免混淆和错误操作其他作业,建议始终明确指定要调至前台的作业号。

12. bg:将作业移至后台运行。

bg 是 Unix 和类 Unix 系统(如 Linux)中的一个 shell 命令,它的全称是 “background” 的缩写,意为“后台”。该命令用于将已暂停的作业(进程)或在后台运行的作业放到后台继续执行。这允许用户在前台启动新的任务或继续其他工作,同时后台任务也在并行运行。

语法

bg 命令的基本语法如下:

1
bg [作业号]

其中,作业号 是一个可选参数,用于指定要放到后台继续执行的作业的标识。作业号通常由 shell 自动分配,并且可以通过 jobs 命令查看。如果省略了 作业号,则默认对最近暂停的作业执行 bg 命令。

功能
  1. 将暂停的作业放到后台继续执行:当你使用 Ctrl+Z 将一个前台作业暂停时,可以使用 bg 命令将其放到后台继续执行。这样,你就可以在前台启动新的作业或继续其他操作,而之前暂停的作业会在后台默默运行。
  2. 管理多个并行任务:通过结合使用 jobsfgbg 命令,你可以轻松地在多个任务之间切换,提高工作效率。
示例
  1. 启动一个长时间运行的命令(如 sleep 100),然后使用 Ctrl+Z 将其暂停:

    1
    2
    3
    sleep 100  
    # 按下 Ctrl+Z
    [1]+ Stopped sleep 100
  2. 使用 bg 命令将暂停的作业放到后台继续执行:

    1
    2
    bg %1  
    [1]+ sleep 100 &

    现在,sleep 100 命令将在后台运行,你可以在前台执行其他任务。

  3. 如果你想将后台作业再次调到前台,可以使用 fg 命令:

    1
    fg %1
注意事项
  • bg 命令只对当前 shell 会话有效。如果你关闭了终端或退出了 shell,所有与该会话关联的作业都会被终止,除非它们已经被 disown 命令从作业列表中移除或者使用了 nohup 命令来忽略挂起信号。
  • 如果指定的作业号不存在或作业已经在后台运行,bg 命令可能会显示错误消息或不做任何操作。
  • 在某些情况下,你可能需要使用 disown 命令来从当前 shell 的作业列表中移除作业,以确保即使关闭终端,作业也会继续运行。例如:disown %1 或者在启动作业时就使用 nohup 命令来避免作业与终端关联:nohup command &。这样做之后,你就不能使用 fgbg 来控制这个作业了,因为它已经从当前 shell 的作业列表中移除了。
13. nohup:以忽略 hangup 信号的方式运行命令,通常与 & 一起使用。

nohup 是 Unix 和类 Unix 系统(如 Linux)中的一个命令,它的名称来源于 “no hang up” 的缩写,意为“不挂断”。该命令用于在用户退出 shell 会话或关闭终端后,继续在后台运行指定的命令或程序。这非常有用,特别是当你需要长时间运行某个任务,但又不想保持终端会话开启时。

语法

nohup 命令的基本语法如下:

1
nohup COMMAND [ARG]... &
  • COMMAND 是你想要在后台运行的命令或程序。
  • [ARG]... 是传递给命令的任何参数。
  • & 符号用于将命令放到后台运行。
功能
  1. 忽略挂断信号:当你关闭终端或断开与远程服务器的连接时,通常会发送一个 SIGHUP(挂断)信号给所有与该终端关联的进程。nohup 命令会忽略这个信号,使得进程能够继续运行。
  2. 输出重定向:默认情况下,nohup 命令会将命令的标准输出和标准错误输出重定向到一个名为 nohup.out 的文件中(如果当前目录可写)。如果当前目录不可写,输出将被重定向到用户的主目录下的 nohup.out 文件中。你也可以自定义输出文件的位置。
  3. 后台运行:结合使用 & 符号,nohup 命令可以让进程在后台运行,这样你就可以继续在终端中执行其他任务。
示例
  1. 在后台运行一个命令,并将输出重定向到自定义文件:

    1
    nohup ./myscript.sh > output.log 2>&1 &

    这里,./myscript.sh 是要运行的脚本,> output.log 将标准输出重定向到 output.log 文件,2>&1 将标准错误输出也重定向到同一个文件。最后,& 符号将命令放到后台运行。

  2. 简单地在后台运行一个命令,使用默认的 nohup.out 文件:

    1
    nohup ./mylongrunningcommand &
注意事项
  • 使用 nohup 命令启动的进程会在后台持续运行,直到它们自己终止或由于其他原因(如系统重启)被终止。
  • 如果 nohup.out 文件变得非常大,可能会占用大量磁盘空间。记得定期检查和管理这个文件。
  • 你可以使用 ps 命令和适当的选项来查看后台运行的进程的状态。例如,使用 ps -ef | grep COMMAND 可以查找名为 COMMAND 的进程的相关信息。如果需要终止该进程,可以使用 kill 命令发送适当的信号(如 SIGTERM 或 SIGKILL)来终止它。但是,请注意,由于 nohup 使进程忽略了 SIGHUP 信号,因此仅发送 SIGHUP 信号不会终止该进程。你需要发送其他类型的信号来终止它。然而,通常情况下,你不需要手动发送 SIGHUP 信号给使用 nohup 启动的进程,因为 nohup 已经帮你处理了这一点。如果你需要停止或杀死这样的进程,你应该使用其他信号(如 SIGTERM 或 SIGKILL),可以通过 kill 命令来发送这些信号。例如:kill -9 PID,其中 PID 是进程的标识符,-9 表示发送 SIGKILL 信号强制杀死进程。但在发送 SIGKILL 信号之前,建议先尝试 SIGTERM 信号(默认的 kill 信号)来优雅地终止进程,给它机会清理资源。如果进程没有响应 SIGTERM 信号,再考虑使用 SIGKILL 信号。
14. pstree:以树状图形式显示进程的层次结构。

pstree 是一个在 Unix 和类 Unix 系统(如 Linux)中常用的命令,用于以树状图的方式显示系统中的进程以及它们之间的关系。这个命令非常有用,因为它可以直观地展示哪个进程是父进程,哪个是子进程,帮助用户理解进程之间的派生关系。

语法

基本语法如下:

1
pstree [选项] [进程ID或用户名]
选项

pstree 命令支持多个选项,以下是一些常用的选项:

  • -a:显示每个程序的完整指令,包含路径、参数或是常驻服务的标示。
  • -c:当有多个相同名称的进程存在时,它们会被分别列出,而不会被折叠成一行显示。
  • -h:高亮显示当前运行的进程。
  • -H <进程ID>:高亮显示指定进程ID的进程及其子进程。
  • -l:使用长格式显示树状图。
  • -n:按照进程ID排序,而不是按照进程名称排序。
  • -p:显示每个进程的进程ID。
  • -u:显示每个进程的所属用户名。
  • -U:使用 UTF-8 字符绘制树状图(在某些终端上可能会有问题)。
示例
  1. 显示当前所有进程的层次关系树:

    1
    pstree
  2. 显示指定进程ID的层次关系树:

    1
    pstree 1234
  3. 显示指定用户名的所有进程的层次关系树:

    1
    pstree -u username
  4. 显示所有进程的层次关系树,并显示每个进程的进程ID:

    1
    pstree -p
  5. 显示所有进程的层次关系树,并显示每个进程的命令行参数:

    1
    pstree -a
  6. 显示所有进程的层次关系树,并按照进程ID排序:

    1
    pstree -n

通过 pstree 命令,用户可以很容易地了解系统进程的结构和关系,这在系统调试、性能分析以及进程管理等方面都是非常有用的。如果需要对 pstree 命令有更深入的了解,可以通过在终端输入 man pstree 来查看其手册页,获取更详细的信息和选项说明。

15. at:延时执行命令。

在CentOS中,at命令用于计划单次任务,即在指定时间执行某个命令或脚本。与cron不同,at不用于定期重复的任务,而是一次性任务。以下是at命令在CentOS中的详细解释和用法:

1. 安装 at

在CentOS中,at命令可能不是默认安装的。你可以使用以下命令来安装它:

1
sudo yum install at

安装完成后,你需要启动atd服务,并确保它在系统启动时自动启动:

1
2
sudo systemctl start atd  
sudo systemctl enable atd
2. at命令的基本语法
1
at [options] [time]
  • options:可选参数,如-f用于指定包含命令的文件,-l用于列出等待执行的任务等。
  • time:指定任务执行的时间。
3. 时间格式

at命令接受多种时间格式,包括:

  • HH:MM:24小时制的时间,如14:30
  • now + N minutes/hours/days/weeks:从现在开始的相对时间,如now + 30 minutes
  • 具体的日期和时间:如Jul 31 23:59
  • 今天、明天等词汇:如today 5pmtomorrow noon
4. 使用示例
1
2
# 计划一个任务在10分钟后执行:
echo 'echo "Hello, world!"' | at now + 10 minutes
1
2
3
4
# 计划一个任务在明天下午3点执行:
at 15:00 tomorrow
at> echo "Task is running" > /tmp/task.log
at> <Ctrl-D>

在上面的示例中,你需要在at>提示符下输入要执行的命令,然后按Ctrl-D结束输入。

除了基本的用法之外,at 命令还可以与其他选项和参数一起使用,以提供更多功能和控制。以下是一些常见的用法:

  1. 指定日期和时间:
    您可以使用日期和时间格式来明确指定任务执行的日期和时间,例如:

    1
    at 10:00 PM July 15
  2. 使用文件中的命令:
    您可以将命令存储在文件中,然后使用 -f 选项指定文件来执行任务,例如:

    1
    at now + 1 hour -f myscript.sh
  3. 指定用户:
    默认情况下,at 命令会将任务与当前登录用户关联。但是,您可以使用 -m 选项指定邮件地址,以便任务执行完成后通知指定的用户,例如:

    1
    at now + 1 hour -m user@example.com
  4. 重定向输出:
    您可以使用标准的输出重定向来捕获任务执行的输出,例如:

    1
    at now + 1 hour > output.log 2>&1
  5. 更复杂的时间规划:
    at 命令支持更复杂的时间规划,例如每天的特定时间执行任务。您可以结合使用 atcron 来实现更复杂的定时任务。

这些选项可以帮助您更灵活地使用 at 命令来安排和管理任务。

除了基本的用法外,还有一些其他用法可以增强 at 命令的功能和灵活性:

  1. 指定队列:
    at 命令可以将任务提交到不同的队列中,队列可以具有不同的优先级和资源限制。您可以使用 -q 选项指定队列,例如:

    1
    at now + 1 hour -q a myscript.sh
  2. 延迟执行时间:
    您可以在指定的时间点之后延迟一段时间再执行任务,而不是立即执行。这可以通过在时间值后面添加 + 和延迟时间来实现,例如:

    1
    at now + 1 hour + 30 minutes
  3. 取消所有任务:
    您可以使用 -r 选项取消所有待执行的任务,例如:

    1
    atrm $(atq -q a)
  4. 指定工作目录:
    您可以使用 -d 选项指定任务执行时所在的工作目录,例如:

    1
    at now + 1 hour -d /path/to/directory myscript.sh
  5. 一次性任务列表:
    使用 at -l 命令可以列出当前用户提交的所有一次性任务,包括它们的执行时间和任务编号。

  6. 查看任务详情:
    使用 at -c JOB_NUMBER 命令可以查看特定任务的详细信息,包括要执行的命令。

  7. 禁用邮件通知:
    如果不希望在任务执行完成后收到邮件通知,可以使用 -M 选项禁用通知,例如:

    1
    at now + 1 hour -M myscript.sh

这些高级用法可以让您更有效地使用 at 命令来管理任务并满足特定的需求。

5. at命令的常用选项
  • -l--list:列出用户的所有等待执行的at任务。
  • -r--remove:删除指定编号的at任务。需要配合任务编号使用,如atrm 3
  • -c:查看具体任务的内容,但不执行。需要配合任务编号使用,如at -c 3
  • -f--file:从指定文件中读取命令,而不是从标准输入。例如:at -f /path/to/script.sh now + 1 hour
  • -q--queue:指定队列名称,通常用于优先级控制。CentOS中可能不支持此选项。
  • -V--version:显示at命令的版本信息。
  • -h--help:显示帮助信息。
6. 注意事项
  • at命令默认以执行命令的用户身份运行任务。如果需要以其他用户身份运行,可以考虑使用sudo或在at命令中指定完整的命令路径和必要的环境变量。
  • 任务的输出通常会被发送到执行用户的邮箱中,除非你在命令中重定向了输出。
  • 如果系统中存在/etc/at.allow文件,则只有该文件中列出的用户才能使用at命令。如果不存在该文件,但存在/etc/at.deny文件,则列在at.deny文件中的用户不能使用at命令。如果两个文件都不存在,则通常只有root用户才能使用at命令。这是一种安全机制,用于控制哪些用户可以在系统上计划任务。在CentOS中,你可能需要自行创建这些文件来配置访问控制。但是,请注意,CentOS 7及更高版本可能默认允许所有用户使用at命令(如果没有配置特定的访问控制文件)。为了安全起见,建议检查并配置这些文件,以确保只有授权的用户能够使用at命令。
16. cron:周期性执行任务的守护进程。

当你在学习 CentOS(或其他类Unix系统)时,理解 cron 是很重要的,因为它是用于执行定期任务的标准工具之一。下面我将向你介绍 cron 的详解及用法:

1. 什么是 cron?

cron 是一个 Unix/Linux 系统中用于定期执行任务的守护进程。它能够按照预定义的时间表(称为 cron 表达式)执行命令或脚本。cron 会自动在后台运行,不需要人为干预。

2. cron 表达式

cron 表达式由五个字段组成,分别表示分钟、小时、日、月和星期。每个字段都可以是一个数字、一个范围或者一个通配符。cron 表达式的格式如下:

1
2
3
4
5
6
7
8
* * * * *
- - - - -
| | | | |
| | | | +----- 星期几 (0 - 7) (星期日为0或7)
| | | +------- 月份 (1 - 12)
| | +--------- 日 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)

例如,30 2 * * * 表示在每天的凌晨 2 点 30 分执行任务。

3. cron 命令用法

a. 编辑用户的 crontab 文件

1
crontab -e

这个命令会打开当前用户的 cron 配置文件。如果是第一次编辑,可能需要选择编辑器,并添加你的任务。

b. 列出当前用户的 crontab 任务

1
crontab -l

c. 删除当前用户的 crontab 任务

1
crontab -r

d. 在系统级别编辑 cron 任务(需要 root 权限)

1
sudo crontab -e
4. 示例

示例1:每天凌晨2点30分清理临时文件夹

1
30 2 * * * rm -rf /tmp/*

示例2:每周一的上午10点备份数据库

1
0 10 * * 1 mysqldump -u username -ppassword database_name > /path/to/backup.sql

示例3:每隔5分钟运行一次脚本

1
*/5 * * * * /path/to/script.sh
5. 特殊字符

除了数字表示的时间之外,还可以使用一些特殊字符:

  • *:匹配任意值
  • /:指定步长
  • -:指定范围
  • ,:分隔多个值
  • @reboot:在系统启动时执行一次
6. 注意事项
  • cron 任务的执行环境可能与用户登录时的环境不同。确保你的任务能够在 cron 执行时正常工作。
  • 日志记录是很重要的。确保为你的任务指定输出日志文件,以便于调试和排查问题。

当涉及到 Linux 服务器管理时,cron 是一个非常重要的工具,它允许你在特定的时间间隔内自动执行任务。cron 是一个用于在预定时间执行命令的任务调度程序。它通常用于定期执行系统维护任务、备份操作、日志清理等。

这里是一些关于 cron 的基本用法和一些高级技巧:

1. 基本用法
  • 编辑 cron 表: 使用 crontab -e 命令来编辑当前用户的 cron 表。如果要编辑其他用户的 cron 表,可以使用 crontab -e -u username

  • 添加任务: 在 cron 表中添加任务的语法是 分钟 小时 日 月 周 任务。例如,如果你想在每天的凌晨 1 点运行一个脚本,你可以添加 0 1 * * * /path/to/script.sh 到你的 cron 表中。

  • 查看任务: 使用 crontab -l 命令查看当前用户的 cron 表中的任务列表。

2. 时间表达式
  • *: 通配符,表示任何时间,比如 * * * * * 表示每分钟都运行。
  • */n: 表示每隔 n 单位时间运行,比如 */5 * * * * 表示每隔 5 分钟运行一次。
  • 0-59, 0-23, 1-31, 1-12, 0-7(0 和 7 都表示星期日): 表示具体范围内的时间。
3. 示例
  • 每天执行备份任务:

    1
    0 1 * * * /path/to/backup_script.sh
  • 每周一清理日志文件:

    1
    0 0 * * 1 /path/to/log_cleanup.sh
4. 高级技巧
  • 使用标准输出和标准错误输出: 你可以重定向标准输出和标准错误输出到文件中,以便查看任务的输出情况,比如 0 1 * * * /path/to/script.sh > /path/to/output.log 2>&1

  • 环境变量的问题: cron 任务执行时的环境变量可能与你的交互 shell 中的环境变量不同。确保在 cron 任务中使用了绝对路径,或者在任务中设置所有必要的环境变量。

  • 避免冲突: 确保你的任务不会冲突。比如,不要在同时期望大量磁盘 I/O 或 CPU 使用率的任务同时运行。

  • 日志记录: 记录 cron 任务的运行情况以便排查问题。可以在任务中将输出记录到日志文件中,也可以设置邮件通知。

  • 使用系统级 cron: 有些任务可能需要在系统级别而不是用户级别执行,你可以编辑 /etc/crontab 或者在 /etc/cron.d/ 目录下创建文件来添加系统级别的 cron 任务。

这些是关于 cron 的基本用法和一些高级技巧。通过合理利用 cron,你可以使服务器自动化执行重复性的任务,提高效率,减少人工干预的需要。

17. systemctl:管理系统服务,包括启动、停止、重启服务等。

systemd是一个系统和服务管理器,用于初始化系统和管理系统进程。它已成为许多Linux发行版的标准初始化系统,取代了传统的init系统。systemd提供了一系列强大的功能,包括并行启动、按需激活服务、支持系统服务状态快照、定义程序之间的依赖关系等。

systemd的特性如下:

  1. 并行启动:在启动系统的过程中,systemd实现了并行启动,可以加快系统启动的速度。
  2. 按需激活:由systemd所管理的服务可以实现按需激活,当某个套接字第一次被用户访问时,systemd会立刻启动这个套接字所对应的进程,然后将这个套接字和这个启动的服务做绑定。
  3. 支持系统服务状态快照:systemd可以支持系统服务状态快照,用于记录系统服务在某个时间点的状态。
  4. 定义程序之间依赖关系:通过Unit文件,systemd可以定义不同程序或服务之间的依赖关系,确保它们按照正确的顺序启动或停止。

systemd使用Unit文件统一了各种不同系统资源配置格式,例如服务的启/停、定时任务、设备自动挂载、网络配置、虚拟内存配置等。Unit文件后缀名划分了不同的服务类型,其中service unit是服务类型的unit,其后缀是.service。

systemd的配置文件是Unit的核心,主要包含需要管理服务或程序、服务或程序需要监听的套接字、保存的系统快照以及其他和init相关的配置。Unit配置文件的位置通常位于/lib/systemd/system(本地配置的系统单元)、/run/systemd/system(运行时配置的系统单元)或/usr/lib/systemd/system(第三方软件的系统单元)。

在使用systemd时,可以使用systemctl命令来管理服务和查看系统状态。例如,可以使用systemctl list-units命令查看当前系统中全部已经被激活的unit,或者使用systemctl enable和systemctl disable命令来设置或禁止某个服务开机自启动。

总之,systemd是一个功能强大的系统和服务管理器,为Linux系统的初始化和进程管理提供了高效和灵活的方式。

systemd和service在Linux系统中都扮演着重要的角色,但它们之间存在明显的区别。

service是一个脚本命令,用于去/etc/init.d目录下执行相关程序以启动服务。它更多地是对init.d的一种实现方式,用于管理服务的启动、停止和重启等操作。在早期的Linux系统中,init.d是系统初始化时启动服务的主要方式,但这种方式存在启动时间长和启动脚本复杂的问题。

而systemd是Linux系统最新的初始化系统(init),旨在提高系统的启动速度,尽可能启动较少的进程,并尽可能实现更多进程的并发启动。systemd不仅是系统的第一个进程(PID=1),还负责管理系统的服务、系统资源等,这些不同的资源统称为Unit。systemd具有许多高级特性,如支持并行化任务、按需启动守护进程、利用Linux的cgroups监视进程、支持快照和系统恢复等。其配置文件Unit主要包含了服务或程序的管理信息,以及相关的依赖关系和启动设置。systemd对应的进程管理命令是systemctl,该命令可以用来管理服务的生命周期、查看系统状态等。

总的来说,systemd是一个更为先进和全面的系统和服务管理器,它解决了init.d的一些缺点,提供了更多的功能和更好的性能。而service则更侧重于对特定服务的操作,是init.d系统的一个实现方式。在现代的Linux系统中,systemd已经逐渐取代了init.d和service,成为主流的系统初始化和服务管理工具。

Systemd 是 Linux 系统中的一个系统和服务管理器,它负责启动、停止和管理系统中的服务、进程和守护程序。Systemd 采用并行启动、延迟启动和按需启动等策略,以提高系统的启动速度和效率。Systemd 使用单元(unit)来表示需要管理的对象,其中包括服务(service)、套接字(socket)、设备(device)、挂载点(mount)、自动挂载点(automount)、路径(path)、定时器(timer)等。

以下是 Systemd 服务的一些特点和常见操作:

  1. 服务类型:

    • Systemd 可以管理各种类型的服务,包括网络服务、文件服务、数据库服务等。
    • 每个服务都有一个对应的单元文件,用于描述该服务的配置和启动方式。
  2. 单元文件:

    • Systemd 使用单元文件来定义服务的配置和行为。
    • 单元文件通常存储在 /etc/systemd/system 目录或 /usr/lib/systemd/system 目录中。
    • 单元文件以 .service 为扩展名,例如 apache.servicesshd.service
  3. 服务管理:

    • 可以使用 systemctl 命令来启动、停止、重启、重载和查看服务状态。
    • 例如,启动 Apache 服务:sudo systemctl start apache2
  4. 服务依赖:

    • Systemd 支持定义服务之间的依赖关系,以确保服务按正确的顺序启动和停止。
    • 可以在单元文件中指定服务的依赖关系,例如 RequiresWantsAfter 等。
  5. 服务状态:

    • 可以使用 systemctl status 命令来查看服务的状态信息,包括是否正在运行、最后一次启动时间、日志信息等。
  6. 系统启动时自动启动服务:

    • 可以使用 systemctl enable 命令将服务设置为系统启动时自动启动。
    • 例如,设置 Apache 服务为系统启动时自动启动:sudo systemctl enable apache2
  7. 日志记录:

    • Systemd 使用 journald 来记录系统日志信息,可以使用 journalctl 命令查看日志。
    • 例如,查看 Apache 服务的日志:journalctl -u apache2
  8. 其他功能:

    • Systemd 还提供了诸如定时器、挂载点管理、设备管理等功能,以及对 cgroups 和命名空间的支持。

通过 Systemd,管理员可以方便地管理和监控系统中运行的服务,实现更高效、可靠的系统管理。

systemctl 是 Systemd 管理服务和单元的主要命令。它可以用于启动、停止、重启、重载、查看状态等操作。ys

  1. 服务管理:

    • start:启动一个服务。
    • stop:停止一个服务。
    • restart:重启一个服务。
    • reload:重新加载一个服务的配置。
    • enable:设置一个服务在系统启动时自动启动。
    • disable:取消一个服务在系统启动时自动启动。
    • status:查看一个服务的状态。
  2. 单元管理:

    • list-units:列出当前运行的所有单元。
    • list-unit-files:列出所有可用的单元文件。
    • show:显示单元的详细信息。
    • is-active:检查一个单元是否处于活动状态。
    • is-enabled:检查一个单元是否设置为系统启动时自动启动。
    • is-failed:检查一个单元是否启动失败。
  3. 日志管理:

    • status:查看单元的当前状态和日志。
    • journalctl:查看系统日志。
    • list-jobs:列出当前正在执行的作业。
  4. 系统管理:

    • reboot:重启系统。
    • poweroff:关闭系统。
    • default:设置系统的默认目标(运行级别)。
  5. 用户会话管理:

    • --user:针对当前用户的用户服务进行操作。
    • list-user-units:列出当前用户的所有单元。
    • status:查看用户会话的服务状态。
    • startstoprestartenabledisable:对用户会话中的服务进行操作。
  6. 其他功能:

    • daemon-reload:重新加载 Systemd 配置。
    • preset:根据预设文件设置启动状态。
    • maskunmask:禁用或启用一个单元。

以上是 systemctl 命令的主要分类和功能,它们涵盖了 Systemd 的主要管理操作,可以帮助管理员管理和控制系统中的各种服务和单元。

1
2
3
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
32
33
34
当您使用 `systemctl` 命令时,可以结合不同的参数来执行各种操作。以下是一些示例:

1. **服务操作参数示例:**
- 启动 Apache 服务:`sudo systemctl start apache2`
- 停止 MySQL 服务:`sudo systemctl stop mysql`
- 重启 Nginx 服务:`sudo systemctl restart nginx`
- 重新加载 SSH 服务配置:`sudo systemctl reload ssh`
- 设置 Tomcat 服务在系统启动时自动启用:`sudo systemctl enable tomcat`
- 取消自动启用 Redis 服务:`sudo systemctl disable redis`
- 查看 SSH 服务状态:`sudo systemctl status ssh`

2. **单元操作参数示例:**
- 列出所有正在运行的单元:`sudo systemctl list-units`
- 列出所有可用的单元文件:`sudo systemctl list-unit-files`
- 显示 Apache 服务的详细信息:`sudo systemctl show apache2`
- 检查 Nginx 服务是否处于活动状态:`sudo systemctl is-active nginx`
- 检查 MySQL 服务是否在系统启动时自动启用:`sudo systemctl is-enabled mysql`
- 检查是否有启动失败的服务:`sudo systemctl --failed`

3. **日志操作参数示例:**
- 显示 Nginx 服务的状态和日志:`sudo systemctl status nginx`
- 查看系统日志:`sudo journalctl`
- 查看 Apache 服务的日志:`sudo journalctl -u apache2`

4. **系统操作参数示例:**
- 重启系统:`sudo systemctl reboot`
- 关闭系统:`sudo systemctl poweroff`
- 设置默认的运行级别为图形界面:`sudo systemctl set-default graphical.target`

5. **用户会话参数示例:**
- 列出当前用户的所有单元:`systemctl --user list-units`
- 查看用户会话的服务状态:`systemctl --user status`

这些示例涵盖了 `systemctl` 命令的常见用法,您可以根据实际需求结合不同的参数来执行相应的操作。

在Linux系统中,运行级别(也称为系统状态或多用户模式)是指系统在不同运行状态下的配置。不同的运行级别决定了系统启动时加载的服务和进程。通常,Linux系统有以下几个标准的运行级别:

  1. 0 - 关机状态(halt): 在该运行级别下,系统将停止所有服务并关闭系统,用于正常关机。

  2. 1 - 单用户模式(single): 在该运行级别下,系统只启动基本的服务,并进入单用户模式,用户无法远程登录,用于系统修复和维护。

  3. 2 - 多用户模式(无网络支持): 在该运行级别下,系统启动多用户环境,但不提供网络支持,用户可以登录并执行系统管理任务,但无法进行网络通信。

  4. 3 - 多用户模式(带网络支持): 在该运行级别下,系统启动多用户环境,并提供完整的网络支持,用户可以登录并执行系统管理任务,同时进行网络通信。

  5. 4 - 保留: 通常不使用。

  6. 5 - 图形化模式(带网络支持): 在该运行级别下,系统启动图形化环境,并提供完整的网络支持,用户可以通过图形用户界面(GUI)登录系统。

  7. 6 - 重启状态(reboot): 在该运行级别下,系统将重新启动,类似于运行级别0,但不会完全关机。

在不同的Linux发行版中,这些运行级别可能会有所不同,有些发行版可能会有自定义的运行级别。通常,通过修改默认的运行级别,可以设置系统的启动行为。

在Linux系统中,可以使用以下方法切换运行级别:

  1. 使用 systemctl 命令:

    • 在大多数现代Linux发行版中,可以使用 systemctl 命令来切换运行级别。例如,要切换到多用户模式(无网络支持)(运行级别2),可以执行以下命令:
      1
      sudo systemctl isolate multi-user.target
    • 要切换到图形化模式(带网络支持)(运行级别5),可以执行以下命令:
      1
      sudo systemctl isolate graphical.target
  2. 使用 telinit 命令:

    • telinit 命令用于通知 init 进程切换运行级别。例如,要切换到单用户模式(运行级别1),可以执行以下命令:
      1
      sudo telinit 1
  3. 使用 init 命令:

    • 在较早的Linux系统中,可以使用 init 命令来切换运行级别。例如,要切换到多用户模式(带网络支持)(运行级别3),可以执行以下命令:
      1
      sudo init 3

请注意,在切换运行级别时,系统会停止或启动相应的服务和进程。确保在切换运行级别之前保存所有未保存的工作,并确保您了解切换到新运行级别可能带来的影响。

在grub启动菜单,按e在编辑模式中,找到以 linux 开头的行,然后在行末尾添加以下参数(适用于大多数发行版):进入救援模式。

1
systemd.unit=rescue.target
18. service:管理系统服务的简化接口,也用于启动、停止、重启服务等。

在 Linux 系统中,service 命令用于管理系统服务。它通常用于启动、停止、重新启动和查询系统服务的状态。下面是一些 service 命令的常见用法和示例:

  1. 启动服务:

    1
    sudo service serviceName start

    例如,启动 Apache 服务:

    1
    sudo service apache2 start
  2. 停止服务:

    1
    sudo service serviceName stop

    例如,停止 Apache 服务:

    1
    sudo service apache2 stop
  3. 重新启动服务:

    1
    sudo service serviceName restart

    例如,重新启动 Apache 服务:

    1
    sudo service apache2 restart
  4. 查询服务状态:

    1
    sudo service serviceName status

    例如,查询 Apache 服务状态:

    1
    sudo service apache2 status
  5. 查看所有可用服务列表:

    1
    service --status-all

service 命令通常用于与 System V 初始化系统(例如 SysVinit)兼容的 Linux 发行版中。在这些系统中,服务通常以 /etc/init.d/ 目录中的脚本形式存在,而 service 命令会通过执行这些脚本来管理服务。

但在使用 Systemd 初始化系统的现代 Linux 发行版上,推荐使用 systemctl 命令来管理服务。systemctl 提供了更多功能和更强大的服务管理能力。例如,systemctl 允许用户对服务进行更精细的控制,包括启用/禁用服务、查看服务日志等。

总之,虽然 service 命令在一些系统上仍然有效,但在大多数现代 Linux 发行版中,推荐使用 systemctl 来管理服务。

这些命令用于查看、控制和管理系统中运行的进程。

1.2.6 用户和权限管理:useradd, userdel, usermod, groupadd, passwd, chage,id, groups, who , w,chsh,last,chmod, chown, su, sudo

**useradd **

创建新用户

以下是常用的 useradd 命令参数:

  1. -c, –comment COMMENT: 设置用户的注释字段,通常用来描述用户的信息或身份。

  2. -d, –home HOME_DIR: 指定用户的主目录。如果不指定,默认情况下会在 /home 目录下创建一个与用户名相同的目录。

  3. -g, –gid GROUP: 指定用户所属的初始组。默认情况下,新用户会被添加到与其用户名相同的用户组中。

  4. -G, –groups GROUP1[,GROUP2,…[,GROUPN]]]: 指定用户除了初始组外要加入的其他组。组名之间用逗号分隔。

  5. -m, –create-home: 创建用户时同时创建主目录。如果未指定该选项,则不会创建主目录。

  6. -s, –shell SHELL: 指定用户登录时使用的默认 shell。如果不指定,默认为系统的默认 shell。

  7. -u, –uid UID: 指定用户的用户 ID。如果不指定,默认系统会自动分配一个未被使用的用户 ID。

  8. -p, –password PASSWORD: 设置用户的密码。但是这种方式不安全,因为密码以明文形式传递给命令行。推荐的做法是创建用户后使用 passwd 命令来设置密码。

  9. 除了上述提到的常用参数外,useradd 命令还有一些其他选项,但在常规情况下不太常用。以下是一些其他可用的选项:

  10. -k, –skel SKEL_DIR: 指定用作用户家目录模板的目录。默认情况下,系统会使用 /etc/skel 目录中的文件来初始化新用户的家目录。

  11. -e, –expiredate EXPIRE_DATE: 设置用户账户的过期日期,格式为 YYYY-MM-DD。

  12. -f, –inactive INACTIVE: 设置用户账户的不活跃期限,单位为天。如果用户在指定的不活跃期限内未登录系统,其账户将被锁定。

  13. -o, –non-unique: 允许创建具有非唯一用户 ID 的用户。这个选项通常与 -u 选项一起使用,用于创建具有相同用户 ID 的用户。

    这些选项提供了一些额外的功能,但在常见的用户管理操作中并不经常用到。需要时,您可以查阅 useradd 命令的 man 手册了解更多详细信息。

这些参数可以帮助您根据需要灵活地创建新用户,并根据系统要求进行适当的配置。

userdel

以下是常用的 userdel 命令参数:

  1. -r, –remove: 删除用户的同时删除其主目录和邮箱目录。这个选项会彻底删除用户及其相关的文件。

  2. -f, –force: 强制删除用户,即使用户当前已登录系统或拥有运行的进程。这个选项会强制删除用户,不会提示任何警告。

  3. -r, –remove-all: 删除用户的主目录、邮箱目录以及邮件文件。

  4. -Z, –selinux-user(用户): 删除与用户关联的 SELinux 用户。

  5. -P, –preserve: 在删除用户之前不要删除用户的家目录。默认情况下,如果未使用 -r 选项,则会删除用户的家目录。

  6. -h, –help: 显示帮助信息并退出。

这些参数允许用户在删除用户时指定不同的选项,以满足不同的需求。需要谨慎使用 -r-f 选项,因为它们可能会导致数据丢失或系统不稳定。

usermod

以下是常用的 usermod 命令参数:

  1. -c, –comment COMMENT: 设置用户的注释字段,通常用来描述用户的信息或身份。

  2. -d, –home HOME_DIR: 修改用户的主目录路径。

  3. -g, –gid GROUP: 修改用户所属的主要组。

  4. -G, –groups GROUP1[,GROUP2,…[,GROUPN]]]: 修改用户的附加组。

  5. -a, –append: 将用户添加到附加组而不是替换。

  6. -s, –shell SHELL: 修改用户登录时使用的默认 shell。

  7. -L, –lock: 锁定用户账户,禁止其登录系统。

  8. -U, –unlock: 解锁用户账户,允许其登录系统。

  9. -e, –expiredate EXPIRE_DATE: 设置用户账户的过期日期。

  10. -p, –password PASSWORD: 设置用户的密码。不过,请注意,这种方式不太安全,因为密码以明文形式传递给命令行。推荐的做法是使用 passwd 命令来设置密码。

这些参数允许您在不删除用户的情况下修改用户的各种属性。使用 usermod 命令时,请确保您了解每个选项的含义,并谨慎操作,以避免意外的影响。

以下是一些使用 usermod 命令的示例:

  1. 修改用户的主目录路径:

    1
    usermod -d /new/home/dir username
  2. 修改用户的主要组:

    1
    usermod -g newgroup username
  3. 将用户添加到附加组:

    1
    usermod -a -G group1,group2 username
  4. 修改用户登录时使用的默认 shell:

    1
    usermod -s /bin/bash username
  5. 锁定用户账户:

    1
    usermod -L username
  6. 解锁用户账户:

    1
    usermod -U username
  7. 设置用户账户的过期日期:

    1
    2
    3
    usermod -e YYYY-MM-DD username
    # 日期为空时,取消账户过期限制
    usermod -e '' username
  8. 设置用户的密码(不推荐使用):

    1
    usermod -p password username

请注意,这些示例中的参数可以组合使用,以实现更复杂的用户管理操作。在执行 usermod 命令时,请确保您理解每个选项的含义,并根据需要进行适当的配置。

用户密码文件(/etc/passwd)是一个文本文件,用于存储系统上的用户账号信息。它包含了每个用户的基本信息,例如用户名、用户 ID、用户组 ID、用户的注释(通常是用户的全名或描述信息)、用户主目录路径和登录 shell 等。

每行代表一个用户的信息,字段之间使用冒号(:)分隔。以下是密码文件的格式:

1
username:password:UID:GID:comment:home_directory:shell
  1. username: 用户名,用于标识用户。
  2. password: 密码字段,通常是 ‘x’,表示密码已经加密并存储在 /etc/shadow 文件中。
  3. UID: 用户 ID,是一个唯一的数字标识符,用于识别用户。
  4. GID: 用户组 ID,指定用户所属的主要组的 ID。
  5. comment: 注释字段,通常包含用户的全名或其他描述性信息。
  6. home_directory: 用户的主目录路径,是用户在系统中的私有工作区域。
  7. shell: 登录 shell,是用户登录后默认启动的命令解释器。

此外,还有一个密码文件的附属文件,称为阴影密码文件(/etc/shadow)。阴影密码文件存储了用户的加密密码以及密码策略等安全相关信息。通常情况下,只有超级用户才能访问阴影密码文件,这样可以确保用户密码的安全性。

阴影密码文件(/etc/shadow)是用于存储用户密码的系统文件。与普通的用户密码文件(/etc/passwd)不同,阴影密码文件包含了加密后的用户密码以及密码策略等安全相关信息。阴影密码文件通常只允许超级用户访问,以保证用户密码的安全性。

阴影密码文件的格式如下:

1
username:password:lastchg:min:max:warn:inactive:expire:flag
  1. username: 用户名,用于标识用户。
  2. password: 加密后的用户密码。
  3. lastchg: 上次修改密码的日期(距离 1970 年 1 月 1 日的天数)。
  4. min: 密码的最短有效期,即密码被修改后需要等待的天数。
  5. max: 密码的最长有效期,即密码可以使用的最长天数。
  6. warn: 密码过期前的警告天数,即在密码过期前多少天提醒用户修改密码。
  7. inactive: 密码过期后多少天账户被锁定,如果设置为 0,则账户在密码过期后立即被锁定。
  8. expire: 密码过期的日期(距离 1970 年 1 月 1 日的天数)。
  9. flag: 用于标识密码的信息,通常不使用。

阴影密码文件的存在增强了系统密码的安全性,因为它将加密后的密码和其他安全相关信息分离存储,并限制了访问权限。这样可以减少潜在的安全风险,并提高系统的安全性。

1.3 命令行操作

  • 1.3.1 常用命令介绍和基本语法:man, help, whatis, info
  • 1.3.2 文件和目录操作:ls, cd, pwd, mkdir, rm, rmdir, cp, mv
  • 1.3.3 文本处理工具:cat, grep, sed, awk, cut, sort, uniq

第二章:系统管理阶段

2.1 用户和用户组管理

2.1.1 创建、修改和删除用户

2.1.2 用户组的管理和权限设置

2.2 文件系统管理

  • 2.2.1 磁盘和分区管理:fdisk, parted, lsblk, fdisk -l, df, du
  • 2.2.2 文件系统格式化和挂载:mkfs, mount, umount, fstab
  • 2.2.3 磁盘配额管理:quota

2.3 软件包管理

  • 2.3.1 软件包管理工具介绍:yum, dnf, rpm
  • 2.3.2 软件包的安装、更新和删除:yum install, dnf install, yum update, dnf update, yum remove, dnf remove
  • 2.3.3 软件源的配置和管理:yum-config-manager, dnf config-manager

第三章:网络管理阶段

3.1 网络配置

  • 3.1.1 配置静态和动态 IP 地址:ifconfig, ip, dhclient
  • 3.1.2 网络接口配置和管理:ifconfig, ip, nmcli
  • 3.1.3 路由配置和管理:route, ip route, traceroute

3.2 网络服务管理

  • 3.2.1 管理常见网络服务:systemctl, service
  • 3.2.2 配置防火墙和端口转发:firewalld, iptables, nc

3.3 网络故障排除

  • 3.3.1 使用基本网络诊断工具:ping, traceroute, netstat, ifconfig, ip
  • 3.3.2 分析网络连接和通信问题:tcpdump, wireshark, nmap

第四章:安全性管理阶段

4.1 身份验证和授权

  • 4.1.1 用户密码策略和安全注意事项:passwd, chage
  • 4.1.2 sudo 权限的配置和使用:visudo, sudo

4.2 安全措施实践

  • 4.2.1 系统更新和漏洞修复:yum update, dnf update
  • 4.2.2 防火墙设置和策略制定:firewalld, iptables
  • 4.2.3 安全日志的监控和分析:journalctl, tail, grep, awk

4.3 安全加固

  • 4.3.1 加密和密钥管理:openssl, ssh-keygen
  • 4.3.2 访问控制和文件权限管理:chmod, chown, setfacl

第五章:高级主题阶段

5.1 系统备份和恢复

  • 5.1.1 备份策略设计和备份工具选择:rsync, tar, cp, scp
  • 5.1.2 数据备份和完整系统备份:rsnapshot, duplicity, borgbackup
  • 5.1.3 备份恢复和灾难恢复计划:restore, rsync, tar

5.2 性能优化和调优

  • 5.2.1 系统监控工具和资源利用率分析:top, htop, vmstat, sar
  • 5.2.2 优化系统性能和调整内核参数:sysctl, tuned
  • 5.2.3 服务优化和响应时间优化:systemd-analyze, strace, perf

5.3

虚拟化和容器化

  • 5.3.1 虚拟化技术介绍和使用场景:KVM, VirtualBox, VMware
  • 5.3.2 容器化技术概述和 Docker 使用:docker, docker-compose
  • 5.3.3 虚拟化和容器化的管理和部署技巧:kubectl, docker swarm, kubernetes

以上列出了每个小章节中用到的一些关键命令,这些命令是学习 Linux 系统管理过程中非常重要的工具,可以帮助你理解并掌握各个主题的相关操作。

当然,以下是更全面的命令列表,包括了在 Linux 系统管理中常用的命令:

文件和目录操作

  • 文件操作:

    • ls:列出目录内容
    • cd:切换目录
    • pwd:显示当前工作目录
    • mkdir:创建目录
    • touch:创建空文件或更新文件时间戳
    • cp:复制文件或目录
    • mv:移动文件或目录
    • rm:删除文件或目录
    • ln:创建链接
  • 文件查看和编辑:

    • cat:连接文件并显示内容
    • more:逐页显示文件内容
    • less:类似于 more,但更加强大
    • head:显示文件头部内容
    • tail:显示文件尾部内容
    • nano:基本文本编辑器
    • vim / vi:强大的文本编辑器
  • 权限设置和管理:

    • chmod:修改文件或目录权限
    • chown:修改文件或目录的所有者
    • chgrp:修改文件或目录的所属组
    • umask:设置默认权限掩码

用户和用户组管理

  • 用户管理:

    • useradd:创建新用户
    • usermod:修改用户属性
    • userdel:删除用户
    • passwd:设置用户密码
    • chage:修改用户密码过期信息
  • 用户组管理:

    • groupadd:创建新用户组
    • groupmod:修改用户组属性
    • groupdel:删除用户组
    • gpasswd:管理用户组密码

系统信息查看和监控

  • 系统信息:

    • uname:显示系统信息
    • hostname:显示或设置主机名
    • uptime:显示系统运行时间和负载
    • dmesg:显示系统启动消息
  • 资源监控:

    • top:实时显示系统进程状态
    • htop:交互式进程查看器
    • free:显示系统内存使用情况
    • df:显示磁盘空间使用情况
    • du:显示目录或文件的磁盘使用情况

网络管理

  • 网络配置:

    • ifconfig / ip:查看和配置网络接口
    • route / ip route:查看和配置路由表
    • nmcli:NetworkManager 命令行工具
  • 网络诊断:

    • ping:测试网络连接
    • traceroute:追踪数据包路径
    • netstat:显示网络连接状态
    • tcpdump:抓取网络数据包

系统管理

  • 系统启动和关机:

    • reboot:重启系统
    • shutdown:关闭系统
    • halt:停止系统
    • poweroff:关闭电源
  • 日志管理:

    • journalctl:查看 systemd 日志
    • /var/log:系统日志文件目录

软件包管理

  • 软件包管理:

    • yum / dnf:CentOS/RHEL 包管理器
    • rpm:RPM 包管理器
    • apt:Debian/Ubuntu 包管理器
  • 软件包操作:

    • yum install / dnf install:安装软件包
    • yum update / dnf update:更新软件包
    • yum remove / dnf remove:卸载软件包

安全管理

  • 身份验证和授权:

    • sudo:以其他用户身份执行命令
    • visudo:编辑 sudo 配置文件
    • su:切换用户身份
  • 防火墙和安全配置:

    • firewalld:动态防火墙管理器
    • iptables:传统的 Linux 防火墙
  • 加密和安全传输:

    • ssh:安全 shell 连接
    • openssl:加密和解密工具
    • gpg:GNU Privacy Guard,用于加密和签名

以上命令是在 Linux 系统管理中经常使用到的一些命令,掌握这些命令可以帮助你有效地管理和维护 Linux 系统。

学习 CentOS Linux 作为发行版的 Linux,可以从基础到专家,再到云计算的学习路径如下:

基础阶段:

  1. Linux基础知识:

    • Linux系统架构和基本原理
    • 文件系统结构和文件操作命令
    • 基本的Shell命令和操作技巧
    • 用户和权限管理
  2. Shell脚本编程:

    • Shell脚本的基本语法和结构
    • 变量、条件语句、循环结构等基本概念
    • 文件操作、文本处理、正则表达式等实践技巧
    • 编写简单的Shell脚本解决实际问题
  3. 系统管理与维护:

    • 软件包管理:yum / dnf包管理器
    • 进程管理:ps、top、kill等命令
    • 系统服务管理:systemctl命令
    • 日志管理:journalctl命令

中级阶段:

  1. 网络与安全:

    • 网络配置和管理:ifconfig、ip命令
    • 防火墙配置:firewalld命令
    • SSH远程连接和安全配置
  2. 高级系统管理:

    • 磁盘管理:分区、挂载、文件系统格式化等操作
    • 内存管理:内存监控、交换空间配置等
    • 性能调优:系统性能分析和优化
  3. Shell脚本高级编程:

    • 函数、数组、文件操作等高级特性
    • 多线程、并发编程
    • 编写复杂的Shell脚本解决实际运维问题

专家阶段:

  1. 高级网络管理:

    • 路由器、交换机、网桥等网络设备管理
    • VPN、VLAN、负载均衡等网络技术
  2. 安全加固与审计:

    • SELinux安全策略配置
    • 安全审计与日志分析
    • 漏洞扫描与修复
  3. 自动化运维:

    • 配置管理工具:Ansible、Puppet、Chef等
    • 自动化部署与持续集成
    • 脚本编写与自动化任务调度

云计算阶段:

  1. 云平台基础:

    • 了解云计算概念和基本架构
    • 掌握常见云服务模型:IaaS、PaaS、SaaS
  2. 云平台管理:

    • 在云平台上部署和管理虚拟机
    • 存储管理:云存储、对象存储等
    • 网络管理:VPC、子网、路由表配置等
  3. 容器与容器编排:

    • Docker容器基础:镜像、容器、仓库等
    • Kubernetes容器编排:Pod、Service、Deployment等概念
    • 使用Kubernetes部署和管理容器化应用

以上学习路径是一个从基础到专家再到云计算的逐步深入的过程,帮助你系统地学习和掌握 CentOS Linux 下的各项技能,最终能够在云计算领域有所建树。