Linux操作系统的组成

Linux 操作系统的组成可以从多个角度进行划分,主要包括以下几个部分:内核 (Kernel)用户空间 (User Space)系统库 (System Libraries) 和 **系统工具 (System Tools)**。每个部分在操作系统中扮演着不同的角色,协调工作以提供完整的操作系统功能。

1. 内核 (Kernel)

内核是操作系统的核心部分,负责管理硬件资源、执行进程管理、文件管理、内存管理、网络管理等基础功能。它直接与硬件交互,提供高效且安全的操作环境。

1.1 内核的主要功能:

  • 进程管理:调度和管理进程的执行,包括进程的创建、终止、暂停和恢复。
  • 内存管理:管理系统内存,包括物理内存和虚拟内存。内核负责分配和回收内存。
  • 设备驱动:提供与硬件设备(如硬盘、网络适配器、显示器等)的接口,使得操作系统能够使用这些硬件设备。
  • 文件系统:管理文件的存储、读取、写入和访问控制。Linux 支持多种文件系统,如 ext4、Btrfs、XFS 等。
  • 网络管理:处理网络协议和数据包的发送、接收,以及网络设备的管理。
  • 安全与权限:实现用户权限管理、文件权限控制、安全防护等。

内核分为不同的层级:

  • 硬件抽象层(HAL):隐藏硬件的细节,提供硬件的统一接口。
  • 内核空间:处理核心操作,如进程调度、内存管理等。

2. 系统库 (System Libraries)

系统库是为程序提供系统服务的函数库,它们提供了操作系统核心功能的接口。通过系统库,程序员可以通过更高级的编程接口调用内核功能,而不需要直接与内核进行交互。

2.1 常见的系统库:

  • **C 库 (glibc)**:提供了大多数 Linux 系统调用的标准接口,是最常用的系统库。
  • **动态链接库 (Shared Libraries)**:如 libpthread.so(线程库)、libm.so(数学库)等,用于提供额外的功能。
  • X11 库:用于图形用户界面 (GUI) 操作。

通过系统库,应用程序可以更加方便地与内核进行通信,而不需要直接编写底层的系统调用代码。

3. 用户空间 (User Space)

用户空间是运行在内核之外的环境,其中运行着所有的用户应用程序。用户空间是操作系统的前端部分,主要包括常见的命令行工具、图形界面应用程序和后台服务。

3.1 用户空间的组成:

  • Shell:如 bash,用户通过 Shell 与操作系统交互。
  • 应用程序:如浏览器(Firefox)、办公软件(LibreOffice)、文本编辑器(Vim、Nano)等。
  • 图形界面环境:如 GNOME、KDE 等桌面环境。
  • 后台进程:如系统服务、守护进程(例如 sshdhttpd)。

用户空间的程序通过系统调用和内核通信,但这些程序无法直接访问硬件,而是通过内核提供的接口进行间接操作。

4. 系统工具 (System Tools)

系统工具通常由操作系统提供,用于系统管理和维护,包括配置、诊断、监控等。它们使得系统管理员可以方便地管理和配置系统。

4.1 常见的系统工具:

  • 文件管理工具:如 lscpmvrm 等,用于文件的操作和管理。
  • 进程管理工具:如 pstopkill 等,用于查看和控制进程。
  • 网络管理工具:如 ifconfigpingnetstatssh 等,用于网络配置和调试。
  • 磁盘管理工具:如 fdiskmountdfdu 等,用于磁盘分区、挂载和磁盘空间管理。

5. 设备驱动 (Device Drivers)

设备驱动程序是与硬件设备交互的代码,使得 Linux 系统能够识别和控制硬件设备。设备驱动程序通常分为以下几类:

  • 字符设备驱动:管理字符设备(如终端、串口设备、键盘等)。
  • 块设备驱动:管理块设备(如硬盘、USB 存储设备等)。
  • 网络设备驱动:管理网络适配器和网卡。
  • 输入设备驱动:管理鼠标、键盘等输入设备。

6. 系统调用 (System Calls)

系统调用是用户空间与内核之间的接口,应用程序通过系统调用向内核请求服务。系统调用包括文件操作、进程控制、内存管理等。

常见的系统调用包括:

  • **open()**:打开文件。
  • **read()**:读取文件。
  • **write()**:写入文件。
  • **close()**:关闭文件。
  • **fork()**:创建新进程。
  • **exec()**:执行程序。

7. 设备文件 (Device Files)

在 Linux 中,硬件设备被表示为文件,设备文件通常位于 /dev 目录。设备文件可以分为两类:

  • 字符设备文件:如 /dev/tty(终端设备)等,按字符读取和写入数据。
  • 块设备文件:如 /dev/sda(硬盘设备)等,按块读取和写入数据。

8. 文件系统 (File System)

文件系统用于组织和管理磁盘上的数据。Linux 支持多种文件系统格式,如:

  • ext4:常见的 Linux 文件系统。
  • XFS:高性能文件系统,常用于大规模存储。
  • Btrfs:先进的文件系统,支持快照和压缩等功能。
  • FATNTFS:常用于与 Windows 系统共享数据的文件系统。

9. 启动过程

Linux 系统的启动过程涉及多个阶段:

  1. BIOS/UEFI 启动:硬件初始化,加载引导加载程序(GRUB)。
  2. 引导加载程序(GRUB):选择操作系统并加载内核。
  3. 内核启动:内核初始化硬件、加载驱动程序、挂载根文件系统。
  4. 初始化进程(initsystemd:启动系统服务、守护进程、用户空间进程。

10. 总结

Linux 操作系统的组成可以分为几个主要部分,每个部分都承担着特定的功能:

  • 内核:负责硬件资源管理、进程调度、文件系统等基础功能。
  • 系统库:为程序提供操作系统服务的接口。
  • 用户空间:运行用户应用程序和系统工具。
  • 设备驱动:与硬件设备交互,使操作系统能够识别和控制硬件。

这些组件密切协作,确保 Linux 系统能够高效、安全地运行各种应用程序并进行硬件管理。

Linux系统版本

Linux 系统的版本有多种不同的类型,通常根据发行版(distribution)来区分。不同的 Linux 发行版具有不同的功能、目标和用途。以下是一些常见的 Linux 系统版本的分类和概述:

1. Linux 内核版本

Linux 内核是 Linux 操作系统的核心,内核的版本发布遵循一定的命名规则,并且定期进行更新。Linux 内核版本号通常由三部分组成:

  • 主版本号:表示重大版本更新。
  • 次版本号:表示较小的功能更新或修复。
  • 修订号:表示安全补丁和错误修复。

例如,Linux 内核版本号 5.10.13 中:

  • 5:主版本号。
  • 10:次版本号。
  • 13:修订号。

内核的更新通常包括硬件支持的增强、新的功能、性能改进和bug修复。

1.1 常见的 Linux 内核版本(截至 2024 年):

  • 5.x 系列:这是目前最新的稳定内核系列。大多数现代 Linux 发行版(如 Ubuntu、Fedora、Debian)都使用这一版本系列。
  • 4.x 系列:虽然 4.x 系列的内核在很多方面已经过时,但一些老旧的 Linux 发行版仍然使用这一系列的内核。
  • 3.x 系列及以下:这些版本已经非常老旧,几乎不再被现代 Linux 发行版使用。

2. Linux 发行版 (Distributions)

Linux 发行版是由不同的 Linux 内核、系统软件和用户应用程序组成的完整操作系统。不同的发行版有不同的目标和应用场景,例如桌面用户、服务器环境、嵌入式设备等。

2.1 常见的 Linux 发行版:

以下是一些流行的 Linux 发行版,按应用场景和特点进行分类:

2.1.1 基于 Debian 的发行版
  • Ubuntu:最流行的桌面 Linux 发行版之一,也广泛用于服务器。Ubuntu 提供了简单的用户体验,广泛的社区支持,适合新手使用。
  • Linux Mint:基于 Ubuntu,提供了类似 Windows 的用户界面,适合桌面用户,特别是从 Windows 转向 Linux 的用户。
  • Debian:稳定性是 Debian 的最大特点,它是许多其他 Linux 发行版(如 Ubuntu)的基础,适用于那些需要稳定和长期支持的场景。
  • Kali Linux:基于 Debian,专注于网络安全和渗透测试,包含大量安全工具。
2.1.2 基于 Red Hat 的发行版
  • **Red Hat Enterprise Linux (RHEL)**:一个商业化的 Linux 发行版,专为企业环境设计,提供长期支持和商业支持服务。适用于大规模企业服务器。
  • CentOS:之前是 RHEL 的开源版本,但 CentOS Stream 已经不再是 RHEL 的完全副本,它现在更多地作为 RHEL 的“滚动更新”版本存在。
  • Fedora:由 Red Hat 赞助的社区驱动发行版,目标是提供最前沿的技术,适合开发者和那些希望体验最新功能的用户。
2.1.3 基于 Arch Linux 的发行版
  • Arch Linux:一个滚动发布的发行版,提供了最为纯粹和最少干预的 Linux 系统。用户需要更多的配置和管理,因此适合有经验的 Linux 用户。
  • Manjaro:基于 Arch Linux 的发行版,目标是提供更易用的安装和配置体验,适合桌面用户。
2.1.4 其他发行版
  • openSUSE:由 SUSE 提供的 Linux 发行版,分为 openSUSE Leap(稳定版本)和 openSUSE Tumbleweed(滚动发布版本),适合开发人员和企业使用。
  • Slackware:一个非常古老且稳定的 Linux 发行版,尽管用户界面和配置方式较为传统,但它非常适合喜欢精简系统的高级用户。

2.2 发行版的分类:

  • 桌面发行版:适用于普通用户和开发者,如 Ubuntu、Linux Mint、Fedora、elementary OS 等。
  • 服务器发行版:专为服务器环境设计,提供稳定性和长期支持,如 RHEL、CentOS、Ubuntu Server 等。
  • 安全相关发行版:如 Kali Linux、Tails 等,专注于渗透测试、匿名性和数据安全。
  • 轻量级发行版:适用于老旧硬件和资源受限的设备,如 Puppy Linux、Lubuntu、Xubuntu 等。
  • 嵌入式发行版:如 Yocto、OpenWRT 等,专为嵌入式设备设计。

3. Linux 发行版的版本管理

许多 Linux 发行版都有自己的版本管理系统和发布周期。以下是一些常见的发行版版本管理方式:

3.1 Ubuntu 的版本命名规则

Ubuntu 使用年份和月份的组合来命名版本。例如:

  • Ubuntu 20.04:表示发布于 2020 年 4 月。
  • Ubuntu 22.04 LTS:LTS 表示长期支持版本,通常会获得 5 年的更新和支持。

3.2 Fedora 的版本管理

Fedora 发布周期为大约每 6 个月一次,每个版本的代号都会有一个特定的名称(例如 Fedora 35、Fedora 36)。

3.3 Debian 的版本管理

Debian 是一个长期支持的发行版,每个版本的发布周期较长。Debian 的稳定版具有较长的支持周期,但它也有不稳定和测试版。

4. Linux 发行版的支持周期

  • 长期支持(LTS)版本:一些发行版(如 Ubuntu LTS、RHEL)提供长达 5 年或更长时间的支持,适合企业和长期使用。
  • 非 LTS 版本:这些版本的支持时间较短,通常为 9 个月到 1 年,适合需要使用最新软件和功能的用户。

5. 总结

Linux 操作系统的版本非常丰富,内核的版本与不同的发行版密切相关。选择合适的发行版时,通常需要考虑目标环境(桌面、服务器、安全等)、支持周期以及软件需求等因素。不同的 Linux 发行版提供了不同的功能和体验,能够满足各种用户的需求。

命令提示符的含义

命令提示符(Command Prompt)是操作系统中用于表示可以接受用户输入命令的地方。它通常以文本形式显示,等待用户输入命令。命令提示符是命令行界面(CLI)的一部分,允许用户通过键盘输入命令来执行各种操作,如文件管理、程序启动、系统配置等。

在不同的操作系统中,命令提示符的显示方式略有不同,通常包括以下几个部分:

1. Linux/Unix 系统中的命令提示符

在 Linux 和其他类 Unix 操作系统中,命令提示符通常由以下几部分组成:

  • 用户名:当前用户的名称。
  • 主机名:当前计算机的主机名。
  • 当前工作目录:用户当前所在的目录路径。
  • 特殊符号
    • **$**:表示普通用户的命令提示符。
    • **#**:表示超级用户(root)的命令提示符。

例如,常见的 Linux 命令提示符:

1
user@hostname:~$
  • **user**:当前用户的用户名。
  • **hostname**:当前计算机的主机名。
  • **~**:表示当前用户的主目录(如果在其他目录,则显示完整路径)。
  • **$**:表示当前用户是普通用户。

如果是超级用户(root),提示符通常为 #

1
root@hostname:/#

在命令提示符中,用户可以输入各种命令来执行任务,如 ls(列出文件)、cd(切换目录)、cp(复制文件)等。

2. Windows 系统中的命令提示符

在 Windows 中,命令提示符是通过 CMDPowerShell 窗口提供的。Windows 中的命令提示符通常如下所示:

1
C:\Users\Username>
  • **C:**:当前驱动器(如 C 盘)。
  • Users:当前路径下的文件夹。
  • Username:当前用户的文件夹名。
  • **>**:表示可以输入命令的提示符。

如果用户使用的是管理员权限,命令提示符通常会显示 AdministratorAdministrator: Command Prompt,并且以 C:\Windows\system32> 的格式显示。

在 Windows 系统中,用户可以使用命令行工具执行任务,例如 dir(列出文件)、cd(切换目录)、copy(复制文件)等。

3. 命令提示符的功能

命令提示符在操作系统中扮演了一个至关重要的角色,它的基本功能包括:

  • 执行命令:命令提示符允许用户直接输入命令,操作系统随后根据命令执行相应的任务。
  • 导航文件系统:用户可以通过命令提示符切换目录、创建、删除文件和目录。
  • 系统管理:通过命令提示符,用户可以进行进程管理、查看系统状态、配置系统等。
  • 脚本运行:在命令提示符中,用户可以执行批处理脚本(Windows)或 shell 脚本(Linux、macOS),实现自动化任务。

4. 常见的命令提示符格式

在 Linux 和 macOS 中,命令提示符的格式是高度可定制的,通常包括以下几个部分:

  • 用户名:通常通过 \u 显示。
  • 主机名:通常通过 \h\H 显示。
  • 当前路径:通常通过 \w\W 显示。

例如,常见的 Bash shell 提示符格式:

1
PS1='[\u@\h \w]\$ '

该设置表示:

  • **\u**:用户名。
  • **\h**:主机名。
  • **\w**:当前工作目录。
  • **\$**:普通用户显示 $,root 用户显示 #

在 Windows 中,命令提示符可以通过 PowerShell 或 cmd.exe 定制,但不像 Linux 那样灵活。常见的 PowerShell 提示符如下:

1
PS C:\Users\Username>

5. 命令提示符与Shell的关系

命令提示符是用户与操作系统进行交互的窗口,而 Shell 是一个程序,它解释用户输入的命令并将其传递给操作系统内核执行。常见的 Shell 包括:

  • Bash:最常用的 Linux 和 macOS Shell。
  • Zsh:一个增强版的 shell,功能丰富,具有更好的自动补全和主题支持。
  • PowerShell:Windows 下的命令行界面,功能更强大,支持对象操作。
  • CMD:Windows 的传统命令行界面。

6. 命令提示符的自定义

在许多操作系统中,用户可以自定义命令提示符的显示内容,通常可以通过修改配置文件来实现。

6.1 Linux 中的自定义提示符

在 Linux 中,可以通过修改 ~/.bashrc(对于 Bash shell)或 ~/.zshrc(对于 Zsh shell)文件中的 PS1 环境变量来自定义提示符。例如:

1
PS1='[\u@\h \W]\$ '
  • **\u**:用户名。
  • **\h**:主机名。
  • **\W**:当前目录的名称。
  • **\$**:普通用户为 $,root 用户为 #

6.2 Windows 中的自定义提示符

在 Windows 的 cmd.exe 中,可以通过 PROMPT 命令来修改命令提示符。例如,执行以下命令来更改提示符:

1
PROMPT $P$G
  • **$P**:显示当前路径。
  • **$G**:显示 > 字符。

7. 总结

命令提示符是操作系统提供给用户的交互界面,它可以显示当前的工作环境,并等待用户输入命令来执行各种任务。不同的操作系统有不同格式的命令提示符,用户可以根据需要自定义其显示内容。命令提示符是命令行界面(CLI)的核心,广泛应用于系统管理、开发和自动化任务中。

运行级别及其特点

在 Linux 和 Unix 系统中,运行级别(Runlevel)是操作系统在启动过程中的一种状态或模式,决定了系统启动后哪些服务和进程会被启动。不同的运行级别表示系统的不同运行状态,并且每个运行级别都有其特定的特点和用途。

System V 风格的初始化系统中,Linux 系统定义了多个运行级别,每个运行级别对应不同的服务配置。在现代的 Linux 系统中,许多发行版采用了 systemd 初始化系统,它通过目标单元(target unit)来替代传统的运行级别,但传统的运行级别概念仍然适用,并且可以通过一些命令查看和管理。

1. 传统的 Linux 运行级别(System V 风格)

在传统的 System V 初始化系统中,Linux 系统有 7 个标准运行级别,分别从 06。每个运行级别都有一个特定的用途,决定了系统启动哪些服务。

1.1 运行级别 0 - 关机 (Shutdown)

  • 描述:运行级别 0 表示系统正在关机或正在关闭。此时,所有服务都会被停止,系统进入关闭状态。
  • 特点
    • 停止所有进程。
    • 关闭所有文件系统。
    • 系统将会被完全关闭。
  • 命令init 0shutdown

1.2 运行级别 1 - 单用户模式 (Single User Mode)

  • 描述:运行级别 1 是单用户模式,也称为单用户维护模式。此时系统仅以 root 用户身份运行,其他用户无法登录。该模式主要用于系统维护、故障排除或修复。
  • 特点
    • 仅启动基本的系统服务,如根文件系统、init 进程等。
    • 仅允许 root 用户登录。
    • 不启动网络服务、图形界面等。
    • 适用于系统修复和维护。
  • 命令init 1

1.3 运行级别 2 - 多用户模式 (Multi-user Mode without NFS)

  • 描述:运行级别 2 是多用户模式,但不包括网络文件系统(NFS)等服务。与运行级别 3 相似,但它没有启用网络文件系统。
  • 特点
    • 允许多个用户同时登录。
    • 启动除 NFS 外的所有常规系统服务(如多用户、终端、打印服务等)。
    • 没有图形界面。
    • 适用于没有需要挂载远程文件系统的环境。
  • 命令init 2

1.4 运行级别 3 - 完整的多用户模式 (Multi-user Mode with Networking)

  • 描述:运行级别 3 是完全的多用户模式,系统启动所有常规服务,包括网络服务和多用户支持。这个级别没有图形界面(X server)。
  • 特点
    • 允许多个用户同时登录。
    • 启动网络服务(例如,网络连接、SSH 服务等)。
    • 启动所有系统服务,如打印服务、邮件服务等。
    • 不启动图形界面。
    • 适用于服务器环境。
  • 命令init 3

1.5 运行级别 4 - 自定义模式 (User-Defined)

  • 描述:运行级别 4 是一个未定义的运行级别,通常是保留给用户的,允许管理员自定义此级别的启动行为。在大多数发行版中,运行级别 4 并没有预定义的用途。
  • 特点
    • 没有默认用途,完全由系统管理员自定义。
    • 用户可以将其用作某些特定的需求,如测试模式等。
  • 命令init 4

1.6 运行级别 5 - 图形界面模式 (Graphical Mode)

  • 描述:运行级别 5 是图形用户界面(GUI)模式,系统将启动所有网络服务并加载图形桌面环境(如 X Window 系统、GNOME、KDE 等)。此模式常用于桌面计算机。
  • 特点
    • 启动图形界面(X Window、桌面环境)。
    • 启动所有网络服务、打印服务等。
    • 允许多个用户同时登录。
  • 命令init 5

1.7 运行级别 6 - 重启 (Reboot)

  • 描述:运行级别 6 用于重启系统,通常在系统需要重新启动或安装系统更新后使用。
  • 特点
    • 重新启动系统。
    • 所有进程和服务将被停止,并在重启时重新启动。
  • 命令init 6reboot

2. Systemd 中的运行级别和目标单元

现代 Linux 发行版大多使用 systemd 作为初始化系统,取代了传统的 init 和运行级别的概念。systemd 使用 目标单元(target units) 来替代运行级别。每个目标单元表示一个特定的系统状态,类似于传统的运行级别。

2.1 systemd 目标与传统运行级别的对应关系

传统运行级别 systemd 目标单元 描述
0 poweroff.target 关机
1 rescue.target 单用户模式
2 multi-user.target 多用户模式(无图形界面)
3 multi-user.target 完整的多用户模式(无图形界面)
4 multi-user.target 用户自定义目标(可以自定义用途)
5 graphical.target 图形界面模式(桌面环境)
6 reboot.target 重启

3. 常见命令

  • 查看当前的运行级别:

    1
    runlevel
  • 切换到不同的运行级别(传统的运行级别):

    1
    init <runlevel>
  • 查看当前的 systemd 目标:

    1
    systemctl get-default
  • 切换到不同的 systemd 目标:

    1
    systemctl isolate <target>

4. 总结

  • 运行级别在传统的 Linux 系统中决定了系统的工作状态,控制哪些服务和进程会启动。
  • 在现代的 systemd 系统中,传统的运行级别被 目标单元(target units) 所替代,提供了更灵活的系统管理。
  • 每个运行级别(或目标单元)都有其特定的用途,如关机、单用户模式、多用户模式、图形界面等。

目录树结构及各目录含义

Linux 系统的目录结构(或称文件系统结构)是一个树形结构,所有文件和目录都从根目录(/)开始。不同的目录包含系统的不同部分,负责存储系统文件、配置文件、用户文件、临时文件等。了解这些目录的作用对系统管理非常重要。

1. 根目录 (/)

  • 含义:根目录是整个文件系统的起点,所有其他目录都是从根目录派生出来的。它包含了系统启动和运行所必需的所有文件。
  • 常见内容:所有系统文件、配置文件、设备文件等。

2. /bin - 必需的二进制文件

  • 含义:存放系统启动和基本操作时需要的可执行文件(命令)。这些是系统在单用户模式下也需要的命令。
  • 常见内容
    • 基本的用户命令,如 ls(列出文件)、cp(复制文件)、cat(查看文件内容)。

3. /sbin - 系统二进制文件

  • 含义:存放系统管理员用的命令(通常需要管理员权限),这些命令通常用于系统维护和修复。
  • 常见内容
    • 系统级命令,如 ifconfig(网络配置)、reboot(重启系统)、fsck(文件系统检查)。

4. /etc - 配置文件

  • 含义:存放系统和应用程序的配置文件。大多数系统级配置文件都位于此目录下。
  • 常见内容
    • /etc/passwd:用户账户信息。
    • /etc/fstab:文件系统挂载信息。
    • /etc/network/:网络配置文件。
    • /etc/init.d/:系统服务启动脚本。

5. /dev - 设备文件

  • 含义:存放设备文件,用于与硬件设备进行交互,如硬盘、终端、打印机等。
  • 常见内容
    • /dev/sda:第一块硬盘。
    • /dev/null:空设备,用于丢弃输出。
    • /dev/tty1:第一个虚拟终端设备。

6. /proc - 进程信息

  • 含义:虚拟文件系统,提供关于当前运行的进程和内核的信息。这里的内容并不存储在磁盘上,而是由内核实时生成。
  • 常见内容
    • /proc/cpuinfo:CPU 信息。
    • /proc/meminfo:内存使用情况。
    • /proc/[pid]:进程 ID 为 pid 的进程信息。

7. /var - 可变数据文件

  • 含义:存放系统运行过程中变化的数据,如日志文件、邮件、打印队列等。
  • 常见内容
    • /var/log/:系统日志文件目录。
    • /var/spool/:邮件、打印队列等暂存目录。
    • /var/tmp/:临时文件,比 /tmp 持久。

8. /tmp - 临时文件

  • 含义:存放临时文件的目录。程序可以在此目录创建临时文件,这些文件在系统重启后通常会被清除。
  • 常见内容
    • 临时文件,如缓存、临时会话信息等。

9. /home - 用户主目录

  • 含义:每个用户的个人文件夹。普通用户的文档、配置文件等都存放在这里。
  • 常见内容
    • /home/user/:普通用户的主目录。
    • 用户的个人文件和配置文件,如 DocumentsDownloads.bashrc(Bash 配置文件)。

10. /lib - 必需的共享库

  • 含义:存放系统和应用程序运行所需的共享库文件。类似于 Windows 中的 DLL 文件。
  • 常见内容
    • 库文件,如 /lib/libc.so.6,是 Linux 系统上许多应用程序所依赖的基本共享库。

11. /lib64 - 64 位共享库

  • 含义:存放 64 位架构的共享库文件。在一些 Linux 系统中,64 位的库文件和 32 位的库文件分开存储,64 位的库文件通常存放在此目录。
  • 常见内容
    • 64 位系统库文件。

12. /opt - 可选应用程序

  • 含义:存放第三方应用程序及其文件。通常是用户手动安装的软件包。
  • 常见内容
    • 第三方应用程序,如 google-chrome/(Google Chrome 浏览器)等。

13. /mnt - 临时挂载点

  • 含义:用于临时挂载文件系统的目录。管理员可以将外部设备(如 USB 驱动器、光盘)挂载到此目录。
  • 常见内容
    • 挂载的临时文件系统,如 /mnt/usb

14. /media - 可移动介质

  • 含义:通常用于挂载可移动存储设备,如 CD、DVD、USB 驱动器等。
  • 常见内容
    • 挂载的外部存储设备,如 /media/cdrom

15. /usr - 用户相关程序和数据

  • 含义:存放应用程序、库文件、文档和其他用户级的文件。这个目录下的文件通常由操作系统的包管理工具安装。
  • 常见内容
    • /usr/bin/:用户级的可执行文件(大多数应用程序的二进制文件)。
    • /usr/lib/:共享库文件。
    • /usr/share/:共享的应用程序数据和文档。

16. /srv - 服务数据

  • 含义:存放提供给系统和网络服务的数据。该目录用于存放由系统提供的服务的数据,如 Web 服务器的文件。
  • 常见内容
    • /srv/http/:用于存放 Apache 或其他 Web 服务器的网页文件。

17. /root - 超级用户主目录

  • 含义:root 用户的个人主目录,通常是管理员账户的个人文件夹。
  • 常见内容
    • root 用户的个人文件和配置文件。

18. /lost+found - 损坏文件恢复

  • 含义:此目录存在于每个文件系统中(如 //home 等),用于存放被恢复的损坏文件。
  • 常见内容
    • 损坏文件的恢复部分,当文件系统发生异常关闭或崩溃时,fsck 工具可能会恢复文件并放入此目录。

总结

Linux 的目录结构是一个层次化的文件系统,设计上体现了不同文件和目录的功能性。每个目录都有其特定的作用:

  • 系统文件:/bin/sbin/lib/etc
  • 用户文件:/home
  • 临时文件:/tmp/var
  • 设备文件:/dev

理解各目录的作用有助于系统管理和故障排除,特别是在处理权限、存储空间和系统配置时。

列出目录中所有文件命令的用法

在 Linux 系统中,可以使用 ls 命令来列出目录中的文件。ls 命令是最常用的查看目录内容的命令,它提供了许多选项,允许用户以不同的方式显示目录中的文件和子目录。

1. 基本命令

1
ls
  • 功能:列出当前目录中的文件和子目录(不显示隐藏文件)。

2. 常用选项

2.1 -a 或 **--all**:显示所有文件(包括隐藏文件)

1
ls -a
  • 功能:列出目录中所有文件,包括以 . 开头的隐藏文件(如 .bashrc)。

2.2 **-l**:以长格式显示文件详情

1
ls -l
  • 功能:以详细格式列出目录中的文件和子目录,显示更多的文件信息,如权限、所有者、文件大小、修改时间等。

输出示例

1
2
-rw-r--r-- 1 user user  4096 Oct 10 14:22 file1.txt
drwxr-xr-x 2 user user 4096 Oct 10 14:22 dir1
  • 解释
    • **-rw-r--r--**:文件的权限。
    • **1**:硬链接数。
    • **user**:文件所有者。
    • **user**:文件所属的组。
    • **4096**:文件的大小(字节)。
    • **Oct 10 14:22**:文件的最后修改时间。
    • **file1.txt**:文件名。

2.3 **-h**:以人类可读的格式显示文件大小

1
ls -lh
  • 功能:以长格式显示文件,并将文件大小以人类可读的形式(如 KB、MB、GB)显示。

输出示例

1
-rw-r--r-- 1 user user 4.0K Oct 10 14:22 file1.txt

2.4 **-R**:递归列出目录中的所有文件及子目录

1
ls -R
  • 功能:列出当前目录以及所有子目录中的文件和文件夹。

2.5 **-S**:按文件大小排序

1
ls -S
  • 功能:按照文件大小的从大到小排序列出文件。

2.6 **-t**:按修改时间排序

1
ls -t
  • 功能:按文件的最后修改时间排序,默认按从新到旧排序。

2.7 **-r**:反转排序顺序

1
ls -r
  • 功能:反转排序顺序。配合其他选项使用,如 -t(按时间排序)或 -S(按大小排序)。

2.8 **-i**:显示文件的 inode 号码

1
ls -i
  • 功能:列出目录中的文件,并显示每个文件的 inode 号。

2.9 **-d**:仅列出目录本身,而非目录中的内容

1
ls -d */
  • 功能:仅列出目录,而不列出目录中的文件内容。

2.10 **--color**:使用颜色显示文件类型

1
ls --color=auto
  • 功能:根据文件类型使用不同的颜色显示文件,通常在支持颜色输出的终端中使用。

3. 综合使用

可以将多个选项组合使用,以满足特定需求。常见的组合包括:

3.1 列出所有文件(包括隐藏文件)并以长格式显示

1
ls -la
  • 功能:列出包括隐藏文件在内的所有文件,并以长格式显示详细信息。

3.2 按时间排序,显示文件的详细信息

1
ls -lt
  • 功能:按修改时间从最近到最旧排序,显示文件的详细信息。

3.3 递归列出所有文件并显示详细信息

1
ls -lR
  • 功能:递归列出当前目录和所有子目录中的文件,并以长格式显示详细信息。

3.4 按文件大小排序并显示详细信息

1
ls -lS
  • 功能:按文件大小从大到小排序,显示文件的详细信息。

4. 结合通配符使用

ls 命令还可以与通配符一起使用,列出匹配模式的文件。

4.1 列出所有以 .txt 结尾的文件

1
ls *.txt
  • 功能:列出所有以 .txt 结尾的文件。

4.2 列出所有以 a 开头的文件

1
ls a*
  • 功能:列出所有以 a 开头的文件或目录。

4.3 列出所有隐藏文件

1
ls -d .*
  • 功能:列出所有隐藏文件(以 . 开头的文件)。

5. 总结

  • ls 是查看目录内容的常用命令。
  • 通过组合不同的选项,可以自定义显示的内容和格式。
  • 使用通配符可以列出匹配特定模式的文件。

通过掌握 ls 命令的用法,你可以更高效地查看和管理文件系统中的内容。

删除文件、删除目录的命令

在 Linux 系统中,删除文件和目录可以使用 rm 命令。删除文件和目录的操作是不可恢复的,因此在执行这些命令时需要小心。

1. 删除文件命令

1.1 rm 命令:删除文件

1
rm <filename>
  • 功能:删除指定的文件。
  • 示例
    1
    rm file.txt
    这个命令将删除 file.txt 文件。

1.2 常用选项

  • **-f**(强制删除):强制删除文件,即使文件没有写权限,或者文件不存在。

    1
    rm -f file.txt

    如果文件不存在,它不会显示错误信息。

  • **-i**(交互式删除):在删除每个文件之前进行确认。

    1
    rm -i file.txt

    该命令会在删除文件前询问用户是否确认删除。

  • **-r**(递归删除):用于删除目录及其内容,包括所有子目录和文件。

    1
    rm -r mydir

    这将删除 mydir 目录及其所有内容。

  • **-rf**(强制递归删除):强制删除目录及其内容,包括只读文件,不会提示确认。

    1
    rm -rf mydir

    该命令会递归删除 mydir 目录及其中的所有文件和子目录,无论文件是否只读,也不提示用户确认。

  • **-v**(显示详细信息):删除时显示详细信息。

    1
    rm -v file.txt

    该命令会显示删除的每个文件。

2. 删除目录命令

2.1 rmdir 命令:删除空目录

1
rmdir <dirname>
  • 功能:删除一个空目录。若目录非空,rmdir 命令将无法删除该目录,并会返回错误信息。
  • 示例
    1
    rmdir mydir
    如果 mydir 目录为空,则会被删除。

2.2 rm -rrm -rf 命令:递归删除目录

当需要删除非空目录时,使用 rm -rrm -rf 来递归删除目录及其中的所有文件和子目录。

1
rm -r <dirname>
  • 功能:删除指定目录及其中的所有文件和子目录(不要求目录为空)。

  • 示例

    1
    rm -r mydir

    该命令将删除 mydir 目录及其所有内容。

  • **rm -rf**:在强制删除时,不会出现提示,直接删除目录及其中的所有文件。

    1
    rm -rf mydir

    该命令会强制删除 mydir 目录及其所有内容,即使有只读文件,也不会显示错误提示。

3. 总结

  • **rm**:删除文件,常用选项为 -f(强制删除)和 -i(交互式删除)。
  • **rmdir**:删除空目录,仅限删除空目录。
  • **rm -r**:递归删除目录及其内容,适用于删除非空目录。
  • **rm -rf**:强制递归删除目录及其所有文件,常用于删除系统中的大型目录。

注意:删除操作在大多数情况下是不可恢复的,执行删除命令时请特别小心。

查找文件并复制的命令

在 Linux 中,查找文件并复制文件通常是两个不同的操作,但它们可以结合起来使用。可以使用 find 命令来查找文件,然后使用 cp 命令来复制文件。下面是这两个命令的详细用法。

1. 查找文件命令:find

find 命令用于在指定目录及其子目录中查找符合条件的文件或目录。它具有非常强大的查找功能,可以根据文件名、文件大小、修改时间、权限等多种条件进行查找。

1.1 基本语法

1
find <path> <options> <expression>
  • **<path>**:查找的路径,可以是当前目录 . 或其他指定目录。
  • **<options>**:查找时的选项。
  • **<expression>**:查找的条件,如文件名、修改时间等。

1.2 常用选项和表达式

  • **-name**:根据文件名查找。

    1
    find /path/to/search -name "filename"

    查找 /path/to/search 目录下所有名为 filename 的文件。

  • **-type**:根据文件类型查找(例如:文件 f、目录 d)。

    1
    find /path/to/search -type f

    查找所有文件(不包括目录)。

    1
    find /path/to/search -type d

    查找所有目录。

  • **-size**:根据文件大小查找。

    1
    find /path/to/search -size +100M

    查找大于 100MB 的文件。

  • **-mtime**:根据修改时间查找,单位为天。

    1
    find /path/to/search -mtime -7

    查找过去 7 天内修改过的文件。

  • **-exec**:对找到的文件执行命令。

    1
    find /path/to/search -name "*.txt" -exec cat {} \;

    查找 .txt 文件,并执行 cat 命令输出其内容。

2. 复制文件命令:cp

cp 命令用于复制文件或目录。它的基本语法如下:

1
cp <source> <destination>
  • **<source>**:源文件或目录。
  • **<destination>**:目标文件或目录。

2.1 常用选项

  • **-r**:递归复制目录(必须使用此选项才能复制目录及其内容)。

    1
    cp -r /path/to/source_directory /path/to/destination_directory
  • **-i**:交互式复制,在覆盖文件时询问用户。

    1
    cp -i source.txt destination.txt
  • **-u**:仅当源文件比目标文件更新时才复制。

    1
    cp -u source.txt destination.txt
  • **-v**:详细模式,显示正在复制的文件。

    1
    cp -v source.txt destination.txt

3. 结合 findcp 命令进行文件查找和复制

3.1 使用 find 命令查找文件并复制到另一个目录

可以使用 find 命令查找符合条件的文件,并使用 -exec 选项来执行复制命令。

1
find /path/to/search -name "*.txt" -exec cp {} /path/to/destination/ \;
  • 功能:查找 /path/to/search 目录下所有扩展名为 .txt 的文件,并将它们复制到 /path/to/destination/ 目录中。

3.2 使用 find 命令查找文件并复制多个文件

可以将多个文件复制到目标目录:

1
find /path/to/search -name "*.txt" -exec cp {} /path/to/destination/ \;

3.3 使用 find 命令查找并复制目录及其内容

如果需要查找目录并复制其内容,可以使用 cp -r 命令来递归复制:

1
find /path/to/search -type d -name "mydir" -exec cp -r {} /path/to/destination/ \;
  • 功能:查找名为 mydir 的目录,并将其递归复制到 /path/to/destination/ 目录中。

4. 总结

  • find 命令:强大的文件查找工具,支持多种条件查找。

    • 例如,find /path/to/search -name "*.txt" 查找所有 .txt 文件。
    • 使用 -exec 可以对查找到的文件执行其他操作。
  • cp 命令:复制文件和目录,支持多个选项,如 -r 递归复制、-i 交互式复制等。

    • 例如,cp -r source_dir destination_dir 递归复制目录。
  • **结合 findcp**:通过 find 命令查找文件或目录,并结合 -exec 执行 cp 命令来复制它们。

例如,使用 find 查找所有 .txt 文件并复制它们:

1
find /path/to/search -name "*.txt" -exec cp {} /path/to/destination/ \;

这种方式非常适合需要批量查找和复制文件的场景。

磁盘分区的过程

在 Linux 系统中,磁盘分区是将一个物理磁盘划分成多个逻辑区域,每个区域可以被用作单独的文件系统或用于存储不同类型的数据。磁盘分区通常是在安装操作系统时进行,但也可以在运行中的系统上使用特定的工具进行分区和管理。

1. 磁盘分区的基本概念

  • 物理磁盘:硬盘、固态硬盘(SSD)等存储设备。
  • 分区:将物理磁盘划分成多个区域,称为分区。每个分区可以格式化为不同的文件系统,例如 ext4、xfs、btrfs 等。
  • 逻辑分区:在主分区的基础上,可以创建逻辑分区,适用于 MBR(Master Boot Record)分区表的磁盘。GPT(GUID Partition Table)分区表没有逻辑分区的限制。
  • 分区表:存储磁盘分区信息的数据结构,分为 MBR 和 GPT 两种类型。

2. 磁盘分区工具

Linux 提供了多个工具来进行磁盘分区,常用的工具包括:

  • **fdisk**:适用于 MBR 分区表的磁盘分区工具。
  • **gdisk**:适用于 GPT 分区表的磁盘分区工具。
  • **parted**:支持 MBR 和 GPT 的命令行磁盘分区工具,功能较为强大。
  • **gparted**:图形化的磁盘分区工具,基于 parted

3. 磁盘分区的步骤

3.1 查看磁盘信息

在进行磁盘分区之前,可以使用以下命令查看系统中所有磁盘的详细信息:

1
lsblk
  • lsblk 会列出所有可用的磁盘及其分区结构。
1
fdisk -l
  • fdisk -l 列出系统中所有的磁盘及分区信息,包括分区类型、大小、挂载点等。

3.2 使用 fdisk 创建分区(适用于 MBR 分区表)

3.2.1 启动 fdisk 工具
1
fdisk /dev/sda
  • /dev/sda 是要分区的磁盘,可以根据实际情况更改为你的磁盘(例如 /dev/sdb)。
  • 进入 fdisk 后,会显示类似以下的命令提示符:
1
Command (m for help):
3.2.2 查看现有分区

输入 p 命令查看当前磁盘的分区表。

1
Command (m for help): p
3.2.3 创建新分区
  • 输入 n 来创建新分区。
  • 选择分区类型(p 表示主分区,e 表示扩展分区)。
  • 输入分区号(例如 1、2、3 等)。
  • 设置分区的起始和结束位置(默认为全磁盘,按提示即可)。
1
Command (m for help): n
3.2.4 查看分区信息

输入 p 查看新的分区表。

1
Command (m for help): p
3.2.5 保存并退出

输入 w 保存更改并退出 fdisk

1
Command (m for help): w

3.3 使用 parted 创建分区(适用于 MBR 和 GPT)

3.3.1 启动 parted 工具
1
parted /dev/sda
  • /dev/sda 是要分区的磁盘,可以根据实际情况更改为你的磁盘。
3.3.2 查看分区信息

输入 print 查看当前磁盘分区信息。

1
(parted) print
3.3.3 创建新分区
  • 输入 mkpart 来创建新分区。
  • 输入分区类型(例如 primarylogical)。
  • 输入文件系统类型(例如 ext4)。
  • 设置起始和结束位置。
1
(parted) mkpart primary ext4 1MiB 50GiB
  • 上面的命令创建一个主分区,从磁盘的 1MB 开始,到 50GB 结束,格式为 ext4
3.3.4 保存并退出
1
(parted) quit

3.4 格式化分区

分区创建完成后,需要对新分区进行格式化。假设我们创建了 /dev/sda1 分区,可以使用以下命令进行格式化:

1
mkfs.ext4 /dev/sda1
  • 这里使用的是 ext4 文件系统,也可以根据需要选择其他文件系统(如 xfsbtrfs 等)。

3.5 挂载分区

在格式化完成后,需要将分区挂载到文件系统中。首先创建一个挂载点:

1
mkdir /mnt/mydisk

然后使用 mount 命令挂载分区:

1
mount /dev/sda1 /mnt/mydisk

3.6 设置开机自动挂载

为了让分区在每次启动时自动挂载,需要将分区信息添加到 /etc/fstab 文件中。

编辑 /etc/fstab 文件:

1
nano /etc/fstab

添加一行类似以下内容:

1
/dev/sda1    /mnt/mydisk    ext4    defaults    0    2

保存并退出。这样系统每次启动时就会自动挂载该分区。

4. 分区类型

Linux 支持多种分区类型。常见的分区类型包括:

  • **ext4**:Linux 系统常用的文件系统,性能好,稳定性高。
  • **swap**:交换分区,用于虚拟内存。
  • **ntfs**:Windows 使用的文件系统,Linux 也支持读取和写入。
  • **xfs**:高性能的文件系统,常用于大数据量的环境。
  • **btrfs**:现代的文件系统,支持快照、压缩等功能。

5. 总结

磁盘分区是将物理磁盘划分为多个逻辑区域的过程,每个区域可以用作单独的文件系统。常见的分区工具包括 fdiskpartedgdisk,可以选择合适的工具根据需要创建和管理分区。磁盘分区后需要格式化为文件系统,并根据需要进行挂载和设置开机自动挂载。

在进行磁盘分区时,务必小心,确保数据已经备份,因为磁盘分区操作会涉及到数据的改变,错误的操作可能会导致数据丢失。

文件与目录的读、写、执行权限的区别

在 Linux 中,文件和目录的读、写、执行权限具有不同的含义和作用。理解它们之间的区别对于管理文件系统的访问控制非常重要。

1. 文件权限

文件的权限决定了用户如何与文件进行交互。文件的权限通常包括读(r)、写(w)和执行(x)权限。

  • 读权限(r):允许读取文件内容。
  • 写权限(w):允许修改文件内容。
  • 执行权限(x):允许执行该文件(如果它是可执行文件)。

1.1 文件权限解释

  • r(读):如果用户对文件具有读权限,他们可以查看文件的内容。
  • w(写):如果用户对文件具有写权限,他们可以修改文件的内容。例如,可以使用文本编辑器编辑文件内容,或者通过命令将数据写入文件。
  • x(执行):如果文件具有执行权限,并且是可执行文件(如脚本或二进制程序),用户可以执行该文件。例如,运行一个脚本文件 ./script.sh

1.2 文件权限示例

对于文件 example.txt,可以使用以下命令来查看权限:

1
ls -l example.txt

输出示例:

1
-rw-r--r-- 1 user group  1234 Jan  1 12:00 example.txt
  • -rw-r--r--:表示文件的权限。
    • 第一位 - 表示这是一个文件(如果是目录,显示为 d)。
    • 接下来的 9 个字符代表文件的权限,分为 3 组:
      • 第一组 rw-:文件所有者的权限(r 读权限,w 写权限)。
      • 第二组 r--:文件所属组的权限(r 读权限)。
      • 第三组 r--:其他用户的权限(r 读权限)。
    • 这表示文件所有者可以读写文件,而其他用户只能读取文件。

2. 目录权限

目录的权限决定了用户如何与目录及其中的文件进行交互。与文件的权限有所不同,目录的权限具体如下:

  • 读权限(r):允许查看目录中的文件列表。
  • 写权限(w):允许在目录中创建、删除和重命名文件。
  • 执行权限(x):允许进入目录(即在该目录下执行 cd 命令)。

2.1 目录权限解释

  • r(读):如果用户对目录具有读权限,他们可以查看该目录中的文件列表。执行 ls 命令时,能够列出目录下的所有文件和子目录。
  • w(写):如果用户对目录具有写权限,他们可以在目录中创建、删除或重命名文件。例如,可以使用 touch 命令创建文件,或使用 rm 删除目录中的文件。
  • x(执行):如果用户对目录具有执行权限,他们可以进入该目录并访问目录中的文件。这意味着用户可以执行 cd 命令进入该目录,但不一定能列出目录中的内容。如果没有执行权限,无法进入目录,甚至无法访问该目录内的文件。

2.2 目录权限示例

对于目录 mydir,可以使用以下命令来查看权限:

1
ls -ld mydir

输出示例:

1
drwxr-xr-x 2 user group 4096 Jan  1 12:00 mydir
  • drwxr-xr-x:表示目录的权限。
    • 第一位 d 表示这是一个目录(如果是文件,则显示为 -)。
    • 接下来的 9 个字符代表目录的权限,分为 3 组:
      • 第一组 rwx:目录所有者的权限(r 读权限,w 写权限,x 执行权限)。表示所有者可以列出、创建、删除目录中的文件,并进入该目录。
      • 第二组 r-x:目录所属组的权限(r 读权限,x 执行权限)。表示组内成员可以查看目录内容,并进入该目录,但不能修改目录中的内容。
      • 第三组 r-x:其他用户的权限(r 读权限,x 执行权限)。表示其他用户可以查看目录内容,并进入该目录,但不能修改目录中的内容。

3. 总结:文件与目录的读、写、执行权限的区别

权限 文件作用 目录作用
r(读) 允许读取文件内容 允许列出目录中的文件
w(写) 允许修改文件内容 允许在目录中创建、删除和重命名文件
x(执行) 允许执行文件(如果是可执行文件) 允许进入目录,执行 cd 命令进入该目录

4. 权限示例

  • 文件权限示例

    • **rw-**:所有者可以读取和修改文件,其他人只能读取。
    • **r--**:所有者只能读取文件,无法修改。
    • **x**:如果文件是脚本或程序,具有执行权限的用户可以执行该文件。
  • 目录权限示例

    • **rwx**:所有者可以列出、修改(创建、删除)目录中的文件,并进入该目录。
    • **r-x**:用户可以查看目录中的文件并进入目录,但不能修改目录内容。
    • **--x**:用户可以进入目录,但无法列出其中的文件。

通过理解文件和目录权限的不同含义,你可以更好地控制 Linux 系统中文件和目录的访问权限,确保安全性和合理的访问控制。

用户管理相关配置文件的内容,用户类型有哪些?每个字段的含义?在 Linux 中,用户管理通过一些核心配置文件来控制,包括 passwdshadowgroupgshadow 等文件。理解这些配置文件的结构和字段含义对系统管理员来说非常重要,尤其是在用户和组管理中。

1. 常见用户管理配置文件

1.1 /etc/passwd

/etc/passwd 是最重要的用户信息文件,它存储了系统上所有用户的基本信息。

字段含义

每一行代表一个用户,字段之间由冒号(:)分隔。每一行的格式如下:

1
username:password:UID:GID:GECOS:home_directory:shell
  • **username**:用户名,标识用户的唯一标识符。
  • **password**:用户的密码字段。这个字段在现代 Linux 系统中通常为空,密码信息一般存储在 /etc/shadow 文件中。
  • **UID**:用户的唯一标识符(User ID)。每个用户都有一个唯一的数字 ID,系统管理员(root)的 UID 通常是 0。
  • **GID**:用户的主组 ID(Group ID)。表示用户所属的主要组。
  • **GECOS**:用户的额外信息字段,通常用于存储全名、电话号码等。
  • **home_directory**:用户的主目录路径,用户登录系统时默认进入的目录。
  • **shell**:用户登录后启动的 shell 类型,例如 /bin/bash/bin/zsh 等。
示例
1
johndoe:x:1001:1001:John Doe:/home/johndoe:/bin/bash
  • **johndoe**:用户名
  • **x**:密码字段(现在通常是一个占位符,密码存储在 /etc/shadow 文件中)
  • **1001**:用户的 UID
  • **1001**:用户的主组 ID(GID)
  • **John Doe**:GECOS 信息,通常存储用户的真实姓名
  • **/home/johndoe**:用户的主目录
  • **/bin/bash**:用户的默认 shell

1.2 /etc/shadow

/etc/shadow 文件存储用户的加密密码及与密码相关的信息。该文件是保护密码安全的地方,只有 root 用户可以访问。

字段含义

每一行代表一个用户的密码信息,字段由冒号(:)分隔。格式如下:

1
username:password:lastchg:min:max:warn:inactive:expire:reserved
  • **username**:用户名,对应于 /etc/passwd 中的用户名。
  • **password**:加密后的密码。如果字段是 *!,表示该账户已被锁定。
  • **lastchg**:密码最后一次修改的日期,表示自 1970 年 1 月 1 日以来的天数。
  • **min**:修改密码的最小天数,用户必须等待的天数才能再次修改密码。
  • **max**:密码的最大有效期,超过此天数后,密码将过期。
  • **warn**:密码过期前多少天开始警告用户。
  • **inactive**:密码过期后,账户在多少天内被禁用。
  • **expire**:账户的过期日期,表示自 1970 年 1 月 1 日以来的天数。如果为 0,表示账户没有过期。
  • **reserved**:保留字段,通常为空。
示例
1
johndoe:$6$J7T1UklC$....:18000:0:99999:7::::
  • **johndoe**:用户名
  • **$6$J7T1UklC$....**:加密后的密码(使用的是 SHA-512 加密算法)
  • **18000**:密码最后修改日期(从 1970 年 1 月 1 日起计算的天数)
  • **0**:最小密码修改天数(表示立即可以修改)
  • **99999**:密码最大有效期(表示密码永不过期)
  • **7**:过期前的警告天数
  • **::::**:保留字段为空

1.3 /etc/group

/etc/group 文件存储系统中的组信息,每个组由一行表示,字段由冒号(:)分隔。格式如下:

1
groupname:password:GID:user_list
  • **groupname**:组名。
  • **password**:组密码,通常为空(现代系统不再使用组密码)。
  • **GID**:组 ID(Group ID),用于唯一标识一个组。
  • **user_list**:该组的成员列表,列出了属于该组的用户,用逗号分隔。
示例
1
staff:x:1001:johndoe,alice
  • **staff**:组名
  • **x**:组密码(一般为空)
  • **1001**:组的 GID
  • **johndoe,alice**:属于该组的用户

1.4 /etc/gshadow

/etc/gshadow 文件存储与组相关的加密密码及一些其他安全设置。它通常由 root 用户进行管理。

字段含义

每一行代表一个组的安全信息,字段由冒号(:)分隔。格式如下:

1
groupname:password:admin_list:user_list
  • **groupname**:组名。
  • **password**:加密后的组密码,如果为空表示该组没有密码。
  • **admin_list**:管理员列表,列出有权修改该组的用户。
  • **user_list**:该组的成员列表。
示例
1
staff:!:root:johndoe,alice
  • **staff**:组名
  • **!**:组密码字段(! 表示该组没有密码)
  • **root**:管理员列表(root 用户可以管理该组)
  • **johndoe,alice**:属于该组的用户

2. 用户类型

在 Linux 系统中,用户通常分为几种类型:

  1. 普通用户(Normal User)

    • 普通用户拥有自己的权限,通常只能访问自己拥有的文件和资源。每个普通用户都属于一个或多个组,并且只能访问与他们权限相关的文件。
  2. 超级用户(Superuser / Root)

    • root 用户是系统的管理员,拥有最高的权限。root 用户能够执行任何操作,包括修改系统设置、管理用户和组、删除文件等。
  3. 系统用户(System User)

    • 系统用户通常用于运行后台服务和进程,拥有非常有限的权限。系统用户的 UID 通常小于 1000。系统用户的账户不用于直接登录。
  4. 管理员用户(Sudo User)

    • 管理员用户通过 sudo 命令获得 root 权限,能够在不直接登录 root 用户的情况下执行管理任务。管理员用户通常属于 sudo 组或 wheel 组。

3. 总结

  • /etc/passwd:存储用户的基本信息,如用户名、UID、GID、家目录和默认 shell。
  • /etc/shadow:存储用户的加密密码及与密码相关的安全设置。
  • /etc/group:存储组的信息,包括组名、GID 和组成员。
  • /etc/gshadow:存储组的密码和管理权限信息。

这些配置文件共同构成了 Linux 系统的用户管理体系,系统管理员需要了解它们的结构和用途,以便进行有效的用户和权限管理。

定时计划任务

在 Linux 中,定时计划任务是通过定时器来自动执行特定任务。常见的定时任务工具包括 cronat,它们可以帮助用户在指定的时间执行命令或脚本。

1. cron 定时任务

cron 是 Linux 中最常用的定时任务管理工具,它用于按预定的时间或周期执行任务。cron 的任务是由一个叫做 crontab 的文件控制的。

1.1 crontab 文件

crontab 是一个简单的文本文件,存储了定时任务的计划安排。每个用户(包括 root 用户)都可以有自己的 crontab 文件。

crontab 文件格式:
1
2
3
4
5
6
7
8
* * * * * command_to_execute
- - - - -
| | | | |
| | | | +---- 星期(0 - 7) (0 或 7 表示星期天)
| | | +------ 月份(1 - 12)
| | +-------- 月中的哪天(1 - 31)
| +---------- 小时(0 - 23)
+------------ 分钟(0 - 59)

每一行代表一个任务,包含了任务的时间设置和需要执行的命令。

字段说明:
  • 分钟(0 - 59):任务执行的分钟(0 至 59)。
  • 小时(0 - 23):任务执行的小时(0 至 23)。
  • 日期(1 - 31):任务执行的日期(1 至 31)。
  • 月份(1 - 12):任务执行的月份(1 至 12)。
  • 星期(0 - 7):任务执行的星期(0 或 7 表示星期日,1 至 6 表示星期一至星期六)。

特殊符号:

  • *****:表示“所有可能的值”,例如,* 在分钟字段中表示每一分钟都执行。
  • **,**:表示列出多个值,例如 1,2,3 表示 1、2、3 分钟。
  • **-**:表示一个范围,例如 1-5 表示从 1 到 5。
  • **/**:表示步长,例如 */5 表示每隔 5 分钟执行一次。
示例:
  • 每天中午 12:00 执行 backup.sh 脚本:

    1
    0 12 * * * /path/to/backup.sh
  • 每小时的第 15 分钟执行 task.sh

    1
    15 * * * * /path/to/task.sh
  • 每周一上午 9:00 执行 clean.sh

    1
    0 9 * * 1 /path/to/clean.sh
  • 每 5 分钟执行一次任务:

    1
    */5 * * * * /path/to/script.sh

1.2 查看和编辑 crontab 文件

  • **查看当前用户的 crontab**:

    1
    crontab -l
  • **编辑当前用户的 crontab**:

    1
    crontab -e

    编辑器会打开用户的 crontab 文件,用户可以在其中添加、修改或删除定时任务。

  • 删除当前用户的 crontab 文件

    1
    crontab -r

1.3 cron 服务

cron 作为一个后台服务运行,负责在指定时间执行任务。如果 cron 服务没有启动,可以使用以下命令启动:

1
sudo systemctl start cron

1
sudo service cron start

2. at 定时任务

at 命令用于执行单次定时任务。与 cron 不同,at 任务只会执行一次,不会周期性执行。at 是通过指定某个时间点来安排任务。

2.1 at 命令的基本使用

语法:
1
at TIME

TIME 可以是绝对时间(例如 2pm, 12:30)或相对时间(例如 now + 1 hour)。

  • **at now + 1 hour**:1 小时后执行任务。
  • **at 10:00**:今天的 10 点执行任务。
  • **at 2pm tomorrow**:明天下午 2 点执行任务。
2.2 示例:
  • 运行命令 echo "Hello, World!" 在今天 5:00 PM 执行:

    1
    echo "echo Hello, World!" | at 5pm
  • 运行脚本 cleanup.sh 在 1 小时后执行:

    1
    2
    3
    at now + 1 hour
    at> /path/to/cleanup.sh
    at> Ctrl+D

    Ctrl+D 用于结束输入并提交任务。

2.3 查看 at 队列中的任务

查看待执行的任务:

1
atq
2.4 取消 at 任务

取消指定任务,可以通过任务的 ID(在 atq 命令中查看)来删除任务:

1
atrm TASK_ID

例如,删除任务 ID 为 1 的任务:

1
atrm 1

3. 计划任务的执行原理与 cronat 的区别

3.1 cron 的执行原理

  • cron 是一个长期运行的守护进程,它定期检查 crontab 文件和 /etc/cron.d/ 等目录中定义的任务。如果当前时间匹配某个定时任务的设定,它就会执行该任务。
  • cron 是基于时间表来安排任务的,因此任务可以被设定为每天、每月或每周自动执行,支持灵活的时间设置。

3.2 at 的执行原理

  • at 用于一次性的任务调度,用户指定任务的执行时间,at 会在该时间点执行任务,任务执行后会被自动删除。
  • at 适合用于那些只需执行一次的任务,而不是周期性任务。

4. 任务执行过程的记录与输出结果

4.1 记录

  • cronat 执行任务时会将任务的标准输出和标准错误信息记录在日志文件中。常见的日志文件有:
    • **/var/log/cron**:记录了 cron 相关的日志,包括任务执行的时间、命令等。
    • /var/log/messages 或 **/var/log/syslog**:有时也会包含有关 cronat 的信息。

4.2 输出结果

  • 任务执行的输出(例如标准输出和标准错误)可以通过 >, >> 等符号进行重定向,输出到指定的文件中。例如:

    1
    0 12 * * * /path/to/script.sh > /path/to/logfile.log 2>&1

    上述命令将 script.sh 的输出和错误信息写入 logfile.log 文件。

5. 总结

  • **cron**:用于定期执行任务,适用于周期性任务(如每天、每周执行)。
  • **at**:用于执行一次性任务,适用于需要在特定时间执行的任务。
  • 日志和输出:任务执行的结果通常会记录在日志文件中,且可以通过重定向将输出保存到指定文件。

了解和使用这些定时任务工具能够帮助自动化系统管理任务,提高工作效率并减少人为干预。

监控CPU利用率的命令

在 Linux 系统中,监控 CPU 利用率是系统管理员日常工作的一部分,尤其是在性能调优和资源管理方面。以下是一些常用的命令,可以帮助你监控 CPU 利用率。

1. top 命令

top 是一个实时的系统监控工具,可以显示 CPU、内存、进程等使用情况。它是最常用的命令之一。

用法:

1
top
  • 运行 top 后,会显示一个动态更新的系统资源使用情况,包括 CPU 利用率、内存、负载等。
  • top 的输出中,CPU 利用率通常显示在 CPU(s) 行,格式类似于:
    1
    %us (user space), %sy (system space), %ni (nice), %id (idle), %wa (waiting), %hi (hardware interrupts), %si (software interrupts), %st (steal time)

例子:

1
top

此命令会启动 top 工具,显示各个 CPU 核心的利用率。

其他常用操作:

  • 1 键:显示每个 CPU 核心的使用情况。
  • q 键:退出 top

2. mpstat 命令(来自 sysstat 包)

mpstat(Multi-Processor Statistics)命令用于报告各个 CPU 核心的统计信息,包括 CPU 利用率。

安装 sysstat 包:

1
2
sudo apt-get install sysstat      # Ubuntu/Debian 系统
sudo yum install sysstat # CentOS/RHEL 系统

用法:

1
mpstat -P ALL 1
  • -P ALL:显示所有 CPU 核心的利用率。
  • 1:表示每 1 秒更新一次。

输出示例:

1
2
3
4
5
6
Linux 5.8.0-53-generic (hostname)  12/31/2024  _x86_64_  (2 CPU)

08:50:17 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
08:50:18 AM all 10.01 0.00 2.51 0.80 0.00 0.00 0.00 0.00 0.00 86.68
08:50:18 AM 0 12.35 0.00 3.44 1.04 0.00 0.00 0.00 0.00 0.00 83.17
08:50:18 AM 1 7.68 0.00 1.57 0.56 0.00 0.00 0.00 0.00 0.00 90.19
  • %usr:用户空间占用 CPU 的百分比。
  • %sys:系统空间占用 CPU 的百分比。
  • %iowait:CPU 等待 I/O 操作的时间。
  • %irq:硬件中断占用 CPU 的百分比。
  • %idle:CPU 空闲时间的百分比。

3. vmstat 命令

vmstat(Virtual Memory Statistics)命令提供了系统的虚拟内存、进程、CPU 等的统计信息。

用法:

1
vmstat 1
  • 1 表示每 1 秒刷新一次。

输出示例:

1
2
3
4
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 234772 94808 503420 0 0 4 7 67 106 2 0 98 0 0
1 0 0 234532 94808 503428 0 0 2 3 65 99 2 1 97 0 0
  • us:用户空间占用 CPU 时间的百分比。
  • sy:内核空间占用 CPU 时间的百分比。
  • id:CPU 空闲时间的百分比。
  • wa:CPU 等待 I/O 的时间百分比。

4. sar 命令(来自 sysstat 包)

sar(System Activity Report)命令提供关于 CPU 利用率的详细报告。它用于记录和查看历史系统活动。

用法:

1
sar -u 1 3
  • -u:显示 CPU 使用情况。
  • 1:每 1 秒采样一次。
  • 3:采样 3 次。

输出示例:

1
2
3
4
5
6
7
Linux 5.8.0-53-generic (hostname)  12/31/2024  _x86_64_  (2 CPU)

12:01:01 AM CPU %user %system %iowait %steal %idle
12:01:02 AM all 12.35 3.45 0.12 0.00 84.08
12:01:03 AM all 13.00 2.50 0.10 0.00 84.40
12:01:04 AM all 14.10 2.00 0.05 0.00 83.85
Average: all 13.15 2.65 0.09 0.00 84.11

5. htop 命令

htoptop 命令的增强版本,它提供了更直观的界面,显示了系统的各种资源占用情况,包括 CPU、内存、进程等。

安装:

1
2
sudo apt-get install htop       # Ubuntu/Debian
sudo yum install htop # CentOS/RHEL

用法:

1
htop

htop 会显示系统资源的实时使用情况,用户可以方便地查看各个 CPU 核心的利用率,并支持排序、过滤等功能。

6. dstat 命令

dstat 是一个全面的资源监控工具,显示的内容比 vmstat 更丰富,可以同时显示 CPU、磁盘、网络等信息。

安装:

1
2
sudo apt-get install dstat       # Ubuntu/Debian
sudo yum install dstat # CentOS/RHEL

用法:

1
dstat -c
  • -c 选项用于显示 CPU 使用情况。

输出示例:

1
2
3
4
------cpu---- ------cpu----- ------cpu------
usr sys idl wai usr sys idl wai usr sys idl wai
2 0 97 0 3 1 95 1 2 0 97 1
1 0 98 0 2 0 98 0 1 0 99 0

7. iostat 命令

iostat 是用来监控 CPU 使用情况和 I/O 性能的工具,能够显示 CPU 的使用情况和每个设备的 I/O 性能。

用法:

1
iostat -c 1
  • -c 表示显示 CPU 使用情况。
  • 1 表示每 1 秒更新一次。

输出示例:

1
2
3
4
Linux 5.8.0-53-generic (hostname)  12/31/2024  _x86_64_  (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
12.35 0.00 3.45 0.12 0.00 84.08

8. 总结

  • **top**:实时监控 CPU 使用情况,适合动态查看资源占用。
  • **mpstat**:显示各个 CPU 核心的使用情况,适合多核 CPU 环境。
  • **vmstat**:显示系统的 CPU、内存、I/O 等资源占用情况,适合了解系统整体负载。
  • **sar**:查看系统活动报告,适合查看历史 CPU 使用情况。
  • **htop**:增强版 top,提供更直观的交互界面。
  • **dstat**:显示多种

统计磁盘空间占用情况的命令,从inode和block两部分来进行分析磁盘利用情况

在 Linux 系统中,统计磁盘空间的占用情况是系统管理的常见任务之一。磁盘空间利用情况可以从两个角度进行分析:inodeblock。我们通常使用以下命令来分析磁盘空间的使用情况。

1. df 命令

df 命令是最常用的查看磁盘空间利用情况的命令,它显示文件系统的磁盘空间使用情况,分为 blockinode 两种方式。

1.1 查看磁盘空间(以 block 为单位)

1
df -h
  • -h 选项表示以人类可读的格式显示,自动选择合适的单位(如 KB、MB、GB)。

示例输出:

1
2
3
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1 50G 20G 30G 40% /
/dev/sdb1 100G 10G 90G 10% /mnt/data
  • Size:文件系统的总大小。
  • Used:已用空间。
  • Avail:可用空间。
  • **Use%**:空间使用的百分比。

1.2 查看 inode 使用情况

inode 主要用于记录文件的元数据,每个文件都会占用一个 inode。因此,inode 的数量与文件系统中的文件和目录数目直接相关。可以使用 -i 选项来显示 inode 的使用情况。

1
df -i

示例输出:

1
2
3
Filesystem     Inodes  IUsed   IFree IUse% Mounted on
/dev/sda1 3276800 500000 2776800 15% /
/dev/sdb1 6553600 100000 6453600 2% /mnt/data
  • Inodes:文件系统中可以使用的总 inode 数。
  • IUsed:已经使用的 inode 数。
  • IFree:剩余可用的 inode 数。
  • **IUse%**:inode 使用的百分比。

2. du 命令

du(Disk Usage)命令用于查看文件和目录的磁盘占用情况。它默认以 block 为单位报告磁盘空间使用情况。

2.1 查看当前目录下的磁盘使用情况

1
du -sh
  • -s:仅显示总计。
  • -h:以人类可读的方式显示(自动选择单位,KB、MB、GB 等)。

示例输出:

1
4.0K    .

2.2 查看指定目录的磁盘使用情况

1
du -sh /path/to/directory

示例输出:

1
15G     /path/to/directory

2.3 查看每个子目录的磁盘占用情况

1
du -h --max-depth=1 /path/to/directory
  • --max-depth=1:仅显示顶层子目录的磁盘占用情况。

示例输出:

1
2
3
4
2.1G    /path/to/directory/subdir1
3.5G /path/to/directory/subdir2
1.3G /path/to/directory/subdir3
15G /path/to/directory

3. stat 命令

stat 命令用于显示文件或文件系统的详细信息,包括 inode 信息。

用法:

1
stat /path/to/file_or_directory

示例输出:

1
2
3
4
5
6
7
  File: /path/to/file
Size: 1024 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 12345678 Links: 1
Access: 2024-12-31 12:00:00.000000000 +0000
Modify: 2024-12-31 12:00:00.000000000 +0000
Change: 2024-12-31 12:00:00.000000000 +0000
Birth: -
  • Inode:显示文件或目录的 inode 号。
  • Blocks:文件占用的块数。

4. find 命令结合 -inum 选项

通过 find 命令,可以根据 inode 查找指定的文件或目录。例如,如果你知道某个文件的 inode,可以使用以下命令来查找该文件:

1
find / -inum 12345678

这将列出所有 inode 为 12345678 的文件。

5. ls 命令

ls 命令也可以显示文件的 inode 信息。

用法:

1
ls -i /path/to/directory
  • -i:显示文件的 inode 号。

示例输出:

1
2
12345678 file1.txt
23456789 file2.txt

6. 综合磁盘利用情况分析

要全面了解磁盘的利用情况,可以结合 dfdu 命令:

  • 查看文件系统的磁盘使用情况:

    1
    df -h
  • 查看指定目录的磁盘使用情况:

    1
    du -sh /path/to/directory
  • 查看文件系统的 inode 使用情况:

    1
    df -i
  • 查看目录下各子目录的磁盘使用情况:

    1
    du -h --max-depth=1 /path/to/directory

7. 总结

  • blockdfdu 命令都提供了磁盘空间的 block 使用情况。df 显示整体的磁盘空间使用情况,而 du 更侧重于文件和目录的磁盘占用情况。
  • inodedf -i 用于查看文件系统中 inode 的使用情况,而 statls -i 可以查看单个文件或目录的 inode 号。

通过这些命令,可以从不同的维度分析和监控磁盘空间的使用情况,帮助及时发现磁盘空间的潜在问题,避免磁盘空间耗尽或 inode 被耗尽的情况。

打包同时压缩文件命令tar的用法

在 Linux 系统中,tar 命令用于将多个文件或目录打包为一个归档文件,并可选择性地压缩。tar 可以与不同的压缩算法配合使用,如 gzipbzip2xz 等,来实现压缩功能。

1. 基本语法

1
tar [选项] [归档文件] [要打包的文件或目录]

2. 常用选项

  • **-c**:创建新的归档文件。
  • **-x**:从归档文件中提取文件。
  • **-v**:在打包或提取过程中显示详细过程(verbose)。
  • **-f**:指定归档文件的文件名(此选项必须放在归档文件名之前)。
  • **-z**:使用 gzip 压缩。
  • **-j**:使用 bzip2 压缩。
  • **-J**:使用 xz 压缩。
  • **-t**:查看归档文件的内容。
  • **-C**:指定切换到某个目录后再操作(解包到指定目录)。

3. 打包并压缩文件

3.1 使用 gzip 压缩(.tar.gz.tgz

1
tar -czvf archive.tar.gz /path/to/directory
  • **-c**:创建归档文件。
  • **-z**:使用 gzip 压缩。
  • **-v**:显示详细过程(可选)。
  • **-f**:指定归档文件名 archive.tar.gz

示例:

1
tar -czvf myfiles.tar.gz /home/user/documents

此命令将 /home/user/documents 目录打包并压缩成 myfiles.tar.gz 文件。

3.2 使用 bzip2 压缩(.tar.bz2

1
tar -cjvf archive.tar.bz2 /path/to/directory
  • **-j**:使用 bzip2 压缩。

示例:

1
tar -cjvf myfiles.tar.bz2 /home/user/documents

此命令将 /home/user/documents 目录打包并压缩成 myfiles.tar.bz2 文件。

3.3 使用 xz 压缩(.tar.xz

1
tar -cJvf archive.tar.xz /path/to/directory
  • **-J**:使用 xz 压缩。

示例:

1
tar -cJvf myfiles.tar.xz /home/user/documents

此命令将 /home/user/documents 目录打包并压缩成 myfiles.tar.xz 文件。

4. 解包并解压文件

4.1 解压 .tar.gz 文件

1
tar -xzvf archive.tar.gz
  • **-x**:解包。
  • **-z**:解压 gzip 压缩格式。
  • **-v**:显示详细过程。
  • **-f**:指定归档文件名。

4.2 解压 .tar.bz2 文件

1
tar -xjvf archive.tar.bz2
  • **-j**:解压 bzip2 压缩格式。

4.3 解压 .tar.xz 文件

1
tar -xJvf archive.tar.xz
  • **-J**:解压 xz 压缩格式。

5. 查看归档文件内容

1
tar -tvf archive.tar.gz
  • **-t**:列出归档文件内容。
  • **-v**:显示详细过程(可选)。
  • **-f**:指定归档文件名。

示例:

1
tar -tvf myfiles.tar.gz

此命令列出 myfiles.tar.gz 文件中的内容。

6. 打包多个文件或目录

1
tar -czvf archive.tar.gz /path/to/file1 /path/to/file2 /path/to/dir
  • 可以将多个文件和目录一起打包。

示例:

1
tar -czvf archive.tar.gz file1.txt file2.txt /home/user/docs

此命令将 file1.txtfile2.txt/home/user/docs 目录一起打包压缩成 archive.tar.gz 文件。

7. 指定解压目录

解压时可以使用 -C 选项指定解压到某个目录。

1
tar -xzvf archive.tar.gz -C /path/to/destination

示例:

1
tar -xzvf myfiles.tar.gz -C /home/user/newfolder

此命令将 myfiles.tar.gz 解压到 /home/user/newfolder 目录中。

8. 使用 --exclude 排除文件或目录

可以在打包时排除某些文件或目录。

1
tar -czvf archive.tar.gz --exclude=/path/to/exclude /path/to/directory

示例:

1
tar -czvf archive.tar.gz --exclude=*.log /home/user/docs

此命令将 /home/user/docs 目录中的所有文件打包为 archive.tar.gz,但是排除了所有 .log 文件。

9. 压缩级别控制

  • gzipbzip2xz 都支持不同的压缩级别,但 tar 本身没有直接控制压缩级别的选项。

  • 例如,使用 gzip-1(最快)到 -9(最慢、最小)压缩级别:

    1
    2
    tar -czvf archive.tar.gz --gzip -1 /path/to/directory    # 使用最快的压缩
    tar -czvf archive.tar.gz --gzip -9 /path/to/directory # 使用最强的压缩

10. 综合例子

  1. 将目录 data 打包并使用 gzip 压缩

    1
    tar -czvf data.tar.gz data/
  2. 将目录 logs 打包并使用 bzip2 压缩

    1
    tar -cjvf logs.tar.bz2 logs/
  3. 将文件 file1.txtfile2.txt 打包并使用 xz 压缩

    1
    tar -cJvf files.tar.xz file1.txt file2.txt
  4. 查看 .tar.gz 文件内容

    1
    tar -tvf archive.tar.gz
  5. 将文件 file1.txtfile2.txt 打包并排除 .log 文件

    1
    tar -czvf archive.tar.gz --exclude='*.log' file1.txt file2.txt

总结

  • tar 命令不仅可以打包文件,还可以结合压缩算法如 gzipbzip2xz 来压缩文件。
  • 使用 -c 创建归档文件,-x 解包文件,-z-j-J 分别表示使用 gzipbzip2xz 压缩。
  • 可以使用 -v 查看详细过程,使用 -f 指定归档文件名,使用 -C 指定解压路径,使用 --exclude 排除某些文件或目录。

进程管理部分

在 Linux 系统中,进程管理是操作系统的重要功能之一。Linux 提供了一些强大的命令和工具来管理进程,包括查看进程、结束进程、监控进程资源使用等。以下是与 Linux 进程管理相关的主要内容及常用命令。

1. 查看进程

1.1 ps 命令

ps(Process Status)命令用于查看当前运行的进程。

  • 查看当前终端的进程

    1
    ps

    显示当前用户在当前终端会话中的进程。

  • 查看所有进程(包括其他用户的进程):

    1
    ps -ef
    • -e:显示所有进程。
    • -f:显示完整的格式(包括UID、PID、PPID等)。
  • 查看进程树(以树形结构显示进程间关系):

    1
    ps -ejH

    或:

    1
    ps axjf
  • 查看某个用户的进程

    1
    ps -u username
  • 查看指定进程的信息

    1
    ps -p <PID>

1.2 top 命令

top 命令是动态显示进程信息的工具,用于实时监控系统的进程和资源使用情况。

1
top
  • 显示进程列表、CPU 和内存的实时使用情况。
  • q 退出 top 命令。

常用快捷键:

  • **P**:按 CPU 使用率排序。
  • **M**:按内存使用排序。
  • **T**:按时间排序。
  • **k**:结束指定进程(输入进程 PID)。
  • **h**:查看帮助。

1.3 htop 命令

htoptop 命令的增强版,提供更友好的界面和更多的交互操作功能(需要安装)。

1
htop
  • 可以通过上下箭头选择进程,按 F9 终止进程,按 F10 退出。

2. 查找进程

2.1 pgrep 命令

pgrep 用于根据进程名称查找进程的 PID。

1
pgrep <process_name>
  • 例如,查找所有 nginx 进程:
    1
    pgrep nginx

2.2 pidof 命令

pidof 用于查找某个程序的进程 ID。

1
pidof <process_name>
  • 例如,查找 httpd 进程:
    1
    pidof httpd

3. 终止进程

3.1 kill 命令

kill 命令用于终止进程,可以发送不同的信号给进程。

  • 使用 PID 终止进程

    1
    kill <PID>
  • 强制终止进程(发送 SIGKILL 信号):

    1
    kill -9 <PID>
  • 发送其他信号

    • kill -15 <PID>:默认的终止信号 SIGTERM(优雅终止进程)。
    • kill -2 <PID>:发送 SIGINT 信号,类似按 Ctrl+C
    • kill -9 <PID>:发送 SIGKILL 信号,强制终止进程。

3.2 killall 命令

killall 用于通过进程名称终止所有匹配的进程。

  • 终止所有 nginx 进程

    1
    killall nginx
  • 强制终止所有 nginx 进程

    1
    killall -9 nginx

3.3 xkill 命令

xkill 是一种图形界面工具,允许用户通过点击窗口来终止进程。

1
xkill
  • 启动后,鼠标指针变成十字标志,点击要关闭的窗口即可终止相应进程。

4. 进程优先级管理(调度)

4.1 nice 命令

nice 命令用于启动一个进程并为其指定一个优先级(也称为 “nice value”),nice 值越小,优先级越高。

1
nice -n <nice_value> command
  • 默认的 nice 值是 0,范围为 -20(最高优先级)到 19(最低优先级)。

示例:

1
nice -n 10 my_program

此命令将以 nice 值为 10 启动 my_program

4.2 renice 命令

renice 命令用于修改一个正在运行的进程的优先级。

1
renice -n <nice_value> -p <PID>
  • -n <nice_value>:指定新的 nice 值。
  • -p <PID>:指定进程 ID。

示例:

1
renice -n -5 -p 1234

此命令将进程 1234 的优先级设置为 -5,即提高优先级。

5. 进程后台管理

5.1 将进程放入后台

通过在命令后添加 &,可以将一个进程放入后台运行。

1
command &

5.2 bg 命令

bg 命令用于将一个已暂停的进程恢复到后台继续运行。

1
bg %job_number

5.3 fg 命令

fg 命令用于将一个后台进程恢复到前台运行。

1
fg %job_number

5.4 jobs 命令

jobs 命令用于列出当前会话中的所有后台任务。

1
jobs

6. 进程资源限制

6.1 ulimit 命令

ulimit 命令用于查看或设置当前 shell 会话的资源限制。可以用来限制进程的资源使用,例如文件大小、进程数、内存等。

  • 查看当前资源限制

    1
    ulimit -a
  • 设置某个资源限制(例如,设置最大进程数为 500):

    1
    ulimit -u 500

7. 进程间通信

在 Linux 中,进程间通信(IPC)包括多种方法,如信号、管道、消息队列等。

7.1 信号(Signal)

  • 进程可以通过信号与其他进程进行通信,常见的信号有 SIGINT(中断),SIGTERM(终止),SIGKILL(强制终止)。
  • 通过 kill 命令向进程发送信号。

7.2 管道(Pipe)

  • 管道是用于将一个进程的输出作为另一个进程的输入的机制。
  • 使用管道符号 | 将命令连接起来,例如:
    1
    ps -ef | grep nginx

7.3 消息队列和共享内存

  • 用于复杂的进程间通信,通常通过编程接口来实现。

总结

  • 查看进程pstophtoppgrep 等命令用于查看当前系统中的进程。
  • 终止进程:使用 killkillall 命令终止进程。
  • 进程优先级管理:使用 nicerenice 调整进程的优先级。
  • 进程后台管理bgfgjobs 用于后台进程的管理。
  • 进程资源限制ulimit 用于查看和设置资源限制。

用户管理部分

在 Linux 系统中,用户管理是日常操作中非常重要的一部分。通过合理的用户管理,可以有效地控制系统的访问权限和资源使用。以下是与 Linux 用户管理相关的基本概念和常用命令。

1. 用户类型

Linux 系统中的用户可以分为几种类型:

  • 普通用户(Regular User)

    • 普通用户是最常见的用户类型,通常具有有限的权限,只能访问自己的文件和目录。
    • 普通用户不能执行需要管理员权限的操作,如安装软件、修改系统文件等。
  • 超级用户(Root 用户)

    • root 是系统管理员,具有最高权限。root 用户可以执行任何操作,包括对系统的任何文件进行读取、修改、删除等。
    • root 用户可以管理其他用户,并修改系统设置。
  • 系统用户(System User)

    • 系统用户通常是为了运行某些系统服务而创建的用户。例如,www-data 用户用于运行 Web 服务,mysql 用户用于运行 MySQL 数据库服务。
    • 系统用户通常没有登录系统的权限,且其默认的 shell 可能是 /sbin/nologin

2. 用户管理配置文件

在 Linux 系统中,用户的信息存储在几个关键的配置文件中:

  • **/etc/passwd**:存储系统中所有用户的信息,包括用户名、用户ID(UID)、组ID(GID)、用户描述、主目录和默认的 shell。每一行代表一个用户。

    格式:

    1
    username:password:UID:GID:GECOS:home_directory:shell

    例子:

    1
    john:x:1001:1001:John Doe:/home/john:/bin/bash
    • username:用户名。
    • password:用户的密码(通常是加密后的)。x 表示密码存储在 /etc/shadow 文件中。
    • UID:用户的唯一标识符(User ID)。
    • GID:用户的默认组 ID(Group ID)。
    • GECOS:用户的描述信息。
    • home_directory:用户的主目录。
    • shell:用户登录后的默认 shell。
  • **/etc/shadow**:存储用户的密码和密码过期信息。该文件对普通用户不可读,只有 root 用户可以访问。

    格式:

    1
    username:password:last_changed:minimum:maximum:warn:inactive:expire:

    例子:

    1
    john:$6$abcd1234$ijklmnopqwerty1234567...:17955:0:99999:7:::
    • username:用户名。
    • password:加密后的密码。
    • last_changed:密码最后一次修改的日期(从 1970-01-01 起的天数)。
    • minimum:密码的最小使用天数。
    • maximum:密码的最大使用天数。
    • warn:在密码过期前多少天开始警告。
    • inactive:密码过期后,账户的最大非活动天数。
    • expire:账户过期日期(从 1970-01-01 起的天数)。
  • **/etc/group**:存储系统中所有组的信息。

    格式:

    1
    groupname:password:GID:user_list

    例子:

    1
    admin:x:1000:john,alice
    • groupname:组名称。
    • password:组密码(通常为 x,表示密码存储在其他地方)。
    • GID:组的唯一标识符。
    • user_list:属于该组的用户列表。

3. 常用用户管理命令

3.1 useradd 命令

useradd 用于添加新用户。

1
useradd [options] username

常用选项:

  • -m:为用户创建主目录。
  • -d:指定用户的主目录。
  • -s:指定用户的登录 shell。
  • -G:将用户添加到其他组。

示例:

1
useradd -m -s /bin/bash -G sudo john

此命令会创建一个名为 john 的用户,并将其添加到 sudo 组,设置 /bin/bash 为默认 shell,并创建主目录 /home/john

3.2 usermod 命令

usermod 用于修改已存在的用户。

1
usermod [options] username

常用选项:

  • -d:修改用户的主目录。
  • -s:修改用户的登录 shell。
  • -G:修改用户所属的附加组。
  • -L:锁定用户账户。
  • -U:解锁用户账户。

示例:

1
usermod -s /bin/zsh john

此命令将 john 用户的登录 shell 改为 /bin/zsh

3.3 userdel 命令

userdel 用于删除用户。

1
userdel [options] username

常用选项:

  • -r:同时删除用户的主目录。

示例:

1
userdel -r john

此命令会删除 john 用户及其主目录 /home/john

3.4 groupadd 命令

groupadd 用于创建一个新组。

1
groupadd groupname

示例:

1
groupadd admins

此命令会创建一个名为 admins 的新组。

3.5 groupdel 命令

groupdel 用于删除组。

1
groupdel groupname

示例:

1
groupdel admins

此命令会删除 admins 组。

3.6 passwd 命令

passwd 用于修改用户的密码。

1
passwd username
  • 如果没有指定用户名,则修改当前用户的密码。
  • 如果指定用户名,则修改该用户的密码。

示例:

1
passwd john

此命令会修改 john 用户的密码。

3.7 chage 命令

chage 用于修改用户密码的过期信息。

1
chage [options] username

常用选项:

  • -l:显示用户的密码过期信息。
  • -M:设置密码的最大有效期。
  • -m:设置密码的最小有效期。
  • -W:设置密码过期前的警告天数。

示例:

1
chage -M 90 john

此命令将设置 john 用户密码的最大有效期为 90 天。

4. 权限管理

每个用户和组都有不同的权限。Linux 使用权限来控制用户对文件和目录的访问。

4.1 chown 命令

chown 用于修改文件或目录的所有者。

1
chown owner[:group] file
  • owner:新文件所有者。
  • group:新文件所属组(可选)。

示例:

1
chown john:admins /home/john/myfile

此命令将文件 /home/john/myfile 的所有者改为 john,并将所属组改为 admins

4.2 chmod 命令

chmod 用于修改文件或目录的权限。

1
chmod [options] mode file
  • mode:指定权限,可以是数字或符号表示。
  • 数字表示法:r=4w=2x=1,数字值是权限的和。
    • 例如,7 表示 rwx6 表示 rw-5 表示 r-x4 表示 r--
  • 符号表示法:+ 表示增加权限,- 表示删除权限,= 表示设置精确权限。

示例:

1
chmod 755 /home/john/myfile

此命令将文件 myfile 的权限设置为 rwxr-xr-x

5. 查看和修改当前用户

5.1 whoami 命令

显示当前登录用户的用户名。

1
whoami

5.2 id 命令

显示当前用户的 UID 和 GID 信息,以及所属的组。

1
id

总结

Linux 用户管理的基本操作包括用户的添加、修改、删除,以及组

统计目录占用磁盘空间大小命令的用法

在 Linux 系统中,统计目录占用磁盘空间的大小是常见的需求,尤其是在服务器或多用户环境中,了解哪些目录占用最多空间可以帮助管理员进行有效的资源管理。以下是一些常用命令和方法,用于统计和分析磁盘空间占用情况。

1. du 命令

du(Disk Usage)命令用于查看文件和目录的磁盘使用情况。它能够递归地显示每个子目录的大小。

1.1 基本用法

1
du [options] [directory]
  • 默认显示当前目录及其子目录的大小
    1
    du
    输出:
    1
    2
    3
    4       ./dir1
    8 ./dir1/subdir
    12 .
    上面的输出表示当前目录(.)的总占用空间为 12 KB。

1.2 显示指定目录的磁盘占用情况

1
du /path/to/directory
  • 递归显示某个目录下每个子目录和文件的大小
    1
    du /home/user

1.3 显示总计

  • 使用 -s 选项来显示指定目录的总占用空间(不显示子目录)
    1
    du -s /home/user
    输出:
    1
    1024    /home/user
    这表示 /home/user 目录的总占用空间为 1024 KB。

1.4 按人类可读的格式显示(自动转换单位)

  • 使用 -h(human-readable)选项,将结果以更易读的单位(如 KB、MB、GB)显示
    1
    du -h /home/user
    输出:
    1
    2
    3
    1.0M    /home/user
    4.0K /home/user/docs
    500K /home/user/images

1.5 显示目录的占用空间并按大小排序

  • 使用 -a 选项显示所有文件和目录的占用空间,并使用 sort 排序:

    1
    du -ah /path/to/directory | sort -rh

    这个命令会列出目录及其子目录、文件的占用空间,按大小从大到小排序。

    示例输出:

    1
    2
    3
    1.5G    /home/user/large_file
    200M /home/user/project
    100M /home/user/photos

1.6 查看目录总空间占用(深度限制)

  • 使用 --max-depth 选项来限制递归的深度,仅显示到指定层级的目录占用空间。--max-depth=1 只显示当前目录下的子目录大小,不递归进一步的子目录。
    1
    du -h --max-depth=1 /home/user
    输出:
    1
    2
    3
    500M    /home/user/photos
    200M /home/user/docs
    1.2G /home/user
    这表示 /home/user 目录下的每个子目录的大小,以及总大小。

1.7 统计所有目录的总大小

  • 查看整个文件系统的空间使用情况
    1
    du -sh /
    输出:
    1
    20G     /
    这表示根目录占用了 20 GB 的空间。

2. df 命令

df(Disk Free)命令用于显示磁盘空间的使用情况,但它显示的是文件系统的整体使用情况,而非单个目录的使用情况。

2.1 基本用法

1
df
  • 显示文件系统的磁盘使用情况,包括各文件系统的总空间、已用空间、可用空间和挂载点。

2.2 按人类可读的格式显示

1
df -h
  • -h(human-readable) 选项让输出以易读的方式显示(KB、MB、GB)。

示例输出:

1
2
3
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1 50G 25G 25G 50% /
/dev/sdb1 200G 120G 80G 60% /home
  • Size:文件系统的总大小。
  • Used:已使用的空间。
  • Avail:可用空间。
  • Use%:已用空间的百分比。
  • Mounted on:文件系统挂载点。

3. 分析磁盘空间占用的工具

3.1 ncdu 命令

ncdu(NCurses Disk Usage)是一个基于 ncurses 的工具,用于交互式查看磁盘空间占用情况。它可以帮助你以图形化的界面(终端中)查看磁盘空间。

  • 安装

    1
    2
    sudo apt install ncdu   # Debian/Ubuntu
    sudo yum install ncdu # CentOS/RHEL
  • 使用

    1
    ncdu /path/to/directory

    运行 ncdu 后,你将看到一个交互式的界面,其中列出了目录和文件的大小,可以使用箭头键浏览和删除占用大量空间的文件。


4. find 命令结合 du

通过结合 finddu 命令,可以查找并计算某些特定类型文件的大小,例如查找某些大文件。

4.1 查找大文件并统计其占用空间

1
find /path/to/directory -type f -exec du -h {} + | sort -rh | head -n 10
  • 解释
    • find:查找文件。
    • -type f:指定查找文件(不包括目录)。
    • -exec du -h {} +:对每个找到的文件执行 du -h 命令,并显示其大小。
    • sort -rh:按大小从大到小排序。
    • head -n 10:显示前 10 个最大的文件。

总结

  • du 命令:用于递归地显示目录及文件的磁盘占用情况,支持 -h(易读格式)、-s(总计)、--max-depth(限制递归深度)等选项。
  • df 命令:显示整个文件系统的空间使用情况,帮助查看磁盘分区的使用情况。
  • ncdu 命令:交互式的磁盘使用分析工具,适合用于查看和管理磁盘空间。
  • finddu 结合:查找并统计特定类型的文件占用空间,适用于定位和清理大文件。

通过合理使用这些命令,您可以快速有效地查看和管理系统磁盘空间,优化系统性能和存储。

find命令的-exec动作和用管道连接两个命令的区别

在 Linux 中,find 命令用于查找文件和目录,-execfind 命令的一个强大选项,用于对查找到的每个文件执行指定的命令。它与管道(|)连接两个命令的方式有些不同,理解它们之间的区别非常重要。

1. find 命令的 -exec 动作

-exec 选项允许你对 find 命令查找到的每个文件执行指定的操作或命令。它将会对每个匹配的文件执行指定的命令,并且你可以在命令中使用 {} 来代表当前查找到的文件或目录。

1.1 -exec 的基本语法

1
find /path/to/directory -name "pattern" -exec command {} \;
  • /path/to/directory:指定查找的目录。
  • -name "pattern":指定匹配文件名的模式(可以使用通配符)。
  • -exec command {} \;:对每个匹配的文件执行 command,其中 {} 会被替换为当前匹配到的文件或目录。最后需要使用 \; 来表示命令的结束。

1.2 示例:删除指定类型的文件

假设我们要删除 /home/user 目录下所有扩展名为 .log 的文件:

1
find /home/user -name "*.log" -exec rm {} \;

这个命令会查找 /home/user 目录下所有以 .log 结尾的文件,并逐个删除。

  • find 会递归查找所有子目录。
  • 对每个匹配的文件,-exec rm {} \; 会执行 rm 命令删除它。

1.3 效率注意:

-exec 的每次执行都是对单个文件或目录执行命令。对于每一个查找到的文件,find 都会调用一次命令,这可能会导致性能问题,特别是当查找到大量文件时。

为了优化性能,可以使用 + 代替 \;,这样 find 会将多个文件作为一组传递给命令,而不是对每个文件单独执行命令。

1
find /home/user -name "*.log" -exec rm {} +

这里,find 会将所有找到的 .log 文件一起传递给 rm 命令,一次性删除所有匹配的文件,避免了多次调用 rm 命令,从而提高效率。


2. 管道连接两个命令

管道(|)用于将一个命令的输出传递给另一个命令作为输入。它的关键特点是“流式处理”,即一个命令的输出流被直接传递给下一个命令,而不是像 -exec 那样对每个文件或项分别执行命令。

2.1 管道的基本语法

1
command1 | command2
  • command1 的输出会作为 command2 的输入。

2.2 示例:查找并统计文件大小

假设我们要查找 /home/user 目录下所有 .log 文件,并统计这些文件的总大小,可以结合 finddu 命令:

1
find /home/user -name "*.log" | du -ch
  • find /home/user -name "*.log" 会输出所有 .log 文件的路径。
  • | 将这些路径传递给 du -chdu 会计算这些文件的总大小,并显示结果。

2.3 管道的优点和适用场景:

  • 管道是对多个命令的流式操作,适用于多个命令之间的数据传输,特别是在对输出进行处理、过滤或转换时。
  • 管道不需要对每个文件单独执行命令,效率相对较高,特别是当你需要对查找到的文件进行集合操作时。

3. -exec 与管道连接的区别

3.1 操作对象的处理方式:

  • **-exec**:对每个匹配到的文件单独执行一次命令。这意味着 find 每找到一个匹配的文件,就会启动一次命令(如 rmcp 或其他)。

    • 例如:find /home/user -name "*.log" -exec rm {} \; 会对每个 .log 文件单独执行 rm 命令。
  • 管道:把多个命令连接起来,让一个命令的输出成为下一个命令的输入。管道可以传递多个文件作为输入给下一个命令进行批量处理,而不需要单独对每个文件执行命令。

    • 例如:find /home/user -name "*.log" | xargs rm 会将找到的所有 .log 文件作为参数传递给 rm 命令,进行批量删除。

3.2 性能差异:

  • **-exec**:如果使用 \;,对于每个匹配的文件都执行一次命令。这可能导致性能问题,特别是在文件数量非常多的情况下,因为每次都启动一个新进程。
  • 管道(与 xargs 配合):可以将多个文件作为一个批次传递给命令,从而减少进程的启动次数,效率更高。

3.3 使用场景:

  • **-exec**:适用于你希望对每个文件执行不同操作的情况,或不需要将多个文件合并成一个操作的情况。例如,你需要逐个删除文件,或者需要执行更复杂的命令。

  • 管道:适用于需要对多个文件批量处理的情况,尤其是处理多个文件时效率更高。例如,统计多个文件的大小或执行批量操作。


4. 示例对比:

示例 1:删除 .log 文件

  • 使用 -exec

    1
    find /home/user -name "*.log" -exec rm {} \;
  • 使用管道与 xargs

    1
    find /home/user -name "*.log" | xargs rm

区别:

  • 使用 -exec 时,每次找到一个 .log 文件,rm 命令都会被执行一次。
  • 使用 xargs 时,find 找到的所有 .log 文件会一次性传递给 rm,只启动一次 rm 命令,效率更高。

5. 总结

  • -execfind 命令的一部分,用于对每个查找到的文件执行指定的命令,可以实现更加灵活的操作。
  • 管道(|)用于将一个命令的输出传递给下一个命令,适用于多个命令之间的数据流式处理。
  • 使用 -exec 时,每个文件会被单独处理,而管道配合 xargs 使用时,可以批量处理多个文件,通常效率更高。