Linux 复习2
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 等桌面环境。
- 后台进程:如系统服务、守护进程(例如
sshd
、httpd
)。
用户空间的程序通过系统调用和内核通信,但这些程序无法直接访问硬件,而是通过内核提供的接口进行间接操作。
4. 系统工具 (System Tools)
系统工具通常由操作系统提供,用于系统管理和维护,包括配置、诊断、监控等。它们使得系统管理员可以方便地管理和配置系统。
4.1 常见的系统工具:
- 文件管理工具:如
ls
、cp
、mv
、rm
等,用于文件的操作和管理。 - 进程管理工具:如
ps
、top
、kill
等,用于查看和控制进程。 - 网络管理工具:如
ifconfig
、ping
、netstat
、ssh
等,用于网络配置和调试。 - 磁盘管理工具:如
fdisk
、mount
、df
、du
等,用于磁盘分区、挂载和磁盘空间管理。
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:先进的文件系统,支持快照和压缩等功能。
- FAT 和 NTFS:常用于与 Windows 系统共享数据的文件系统。
9. 启动过程
Linux 系统的启动过程涉及多个阶段:
- BIOS/UEFI 启动:硬件初始化,加载引导加载程序(GRUB)。
- 引导加载程序(GRUB):选择操作系统并加载内核。
- 内核启动:内核初始化硬件、加载驱动程序、挂载根文件系统。
- 初始化进程(
init
或systemd
):启动系统服务、守护进程、用户空间进程。
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 中,命令提示符是通过 CMD 或 PowerShell 窗口提供的。Windows 中的命令提示符通常如下所示:
1 | C:\Users\Username> |
- **C:**:当前驱动器(如 C 盘)。
- Users:当前路径下的文件夹。
- Username:当前用户的文件夹名。
- **
>
**:表示可以输入命令的提示符。
如果用户使用的是管理员权限,命令提示符通常会显示 Administrator
或 Administrator: 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 个标准运行级别,分别从 0 到 6。每个运行级别都有一个特定的用途,决定了系统启动哪些服务。
1.1 运行级别 0 - 关机 (Shutdown)
- 描述:运行级别 0 表示系统正在关机或正在关闭。此时,所有服务都会被停止,系统进入关闭状态。
- 特点:
- 停止所有进程。
- 关闭所有文件系统。
- 系统将会被完全关闭。
- 命令:
init 0
或shutdown
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 6
或reboot
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/
:普通用户的主目录。- 用户的个人文件和配置文件,如
Documents
、Downloads
、.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 | -rw-r--r-- 1 user user 4096 Oct 10 14:22 file1.txt |
- 解释:
- **
-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 -r
或 rm -rf
命令:递归删除目录
当需要删除非空目录时,使用 rm -r
或 rm -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. 结合 find
和 cp
命令进行文件查找和复制
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
递归复制目录。
- 例如,
**结合
find
和cp
**:通过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
来创建新分区。 - 输入分区类型(例如
primary
或logical
)。 - 输入文件系统类型(例如
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
文件系统,也可以根据需要选择其他文件系统(如xfs
、btrfs
等)。
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. 总结
磁盘分区是将物理磁盘划分为多个逻辑区域的过程,每个区域可以用作单独的文件系统。常见的分区工具包括 fdisk
、parted
和 gdisk
,可以选择合适的工具根据需要创建和管理分区。磁盘分区后需要格式化为文件系统,并根据需要进行挂载和设置开机自动挂载。
在进行磁盘分区时,务必小心,确保数据已经备份,因为磁盘分区操作会涉及到数据的改变,错误的操作可能会导致数据丢失。
文件与目录的读、写、执行权限的区别
在 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 中,用户管理通过一些核心配置文件来控制,包括 passwd
、shadow
、group
和 gshadow
等文件。理解这些配置文件的结构和字段含义对系统管理员来说非常重要,尤其是在用户和组管理中。
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 系统中,用户通常分为几种类型:
普通用户(Normal User):
- 普通用户拥有自己的权限,通常只能访问自己拥有的文件和资源。每个普通用户都属于一个或多个组,并且只能访问与他们权限相关的文件。
超级用户(Superuser / Root):
- root 用户是系统的管理员,拥有最高的权限。root 用户能够执行任何操作,包括修改系统设置、管理用户和组、删除文件等。
系统用户(System User):
- 系统用户通常用于运行后台服务和进程,拥有非常有限的权限。系统用户的 UID 通常小于 1000。系统用户的账户不用于直接登录。
管理员用户(Sudo User):
- 管理员用户通过
sudo
命令获得 root 权限,能够在不直接登录 root 用户的情况下执行管理任务。管理员用户通常属于sudo
组或wheel
组。
- 管理员用户通过
3. 总结
/etc/passwd
:存储用户的基本信息,如用户名、UID、GID、家目录和默认 shell。/etc/shadow
:存储用户的加密密码及与密码相关的安全设置。/etc/group
:存储组的信息,包括组名、GID 和组成员。/etc/gshadow
:存储组的密码和管理权限信息。
这些配置文件共同构成了 Linux 系统的用户管理体系,系统管理员需要了解它们的结构和用途,以便进行有效的用户和权限管理。
定时计划任务
在 Linux 中,定时计划任务是通过定时器来自动执行特定任务。常见的定时任务工具包括 cron
和 at
,它们可以帮助用户在指定的时间执行命令或脚本。
1. cron
定时任务
cron
是 Linux 中最常用的定时任务管理工具,它用于按预定的时间或周期执行任务。cron
的任务是由一个叫做 crontab 的文件控制的。
1.1 crontab
文件
crontab
是一个简单的文本文件,存储了定时任务的计划安排。每个用户(包括 root 用户)都可以有自己的 crontab
文件。
crontab
文件格式:
1 | * * * * * command_to_execute |
每一行代表一个任务,包含了任务的时间设置和需要执行的命令。
字段说明:
- 分钟(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
3at now + 1 hour
at> /path/to/cleanup.sh
at> Ctrl+DCtrl+D
用于结束输入并提交任务。
2.3 查看 at
队列中的任务
查看待执行的任务:
1 | atq |
2.4 取消 at
任务
取消指定任务,可以通过任务的 ID(在 atq
命令中查看)来删除任务:
1 | atrm TASK_ID |
例如,删除任务 ID 为 1 的任务:
1 | atrm 1 |
3. 计划任务的执行原理与 cron
和 at
的区别
3.1 cron
的执行原理
cron
是一个长期运行的守护进程,它定期检查crontab
文件和/etc/cron.d/
等目录中定义的任务。如果当前时间匹配某个定时任务的设定,它就会执行该任务。cron
是基于时间表来安排任务的,因此任务可以被设定为每天、每月或每周自动执行,支持灵活的时间设置。
3.2 at
的执行原理
at
用于一次性的任务调度,用户指定任务的执行时间,at
会在该时间点执行任务,任务执行后会被自动删除。at
适合用于那些只需执行一次的任务,而不是周期性任务。
4. 任务执行过程的记录与输出结果
4.1 记录
cron
和at
执行任务时会将任务的标准输出和标准错误信息记录在日志文件中。常见的日志文件有:- **
/var/log/cron
**:记录了cron
相关的日志,包括任务执行的时间、命令等。 /var/log/messages
或 **/var/log/syslog
**:有时也会包含有关cron
和at
的信息。
- **
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 | sudo apt-get install sysstat # Ubuntu/Debian 系统 |
用法:
1 | mpstat -P ALL 1 |
-P ALL
:显示所有 CPU 核心的利用率。1
:表示每 1 秒更新一次。
输出示例:
1 | Linux 5.8.0-53-generic (hostname) 12/31/2024 _x86_64_ (2 CPU) |
%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 | procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ |
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 | Linux 5.8.0-53-generic (hostname) 12/31/2024 _x86_64_ (2 CPU) |
5. htop
命令
htop
是 top
命令的增强版本,它提供了更直观的界面,显示了系统的各种资源占用情况,包括 CPU、内存、进程等。
安装:
1 | sudo apt-get install htop # Ubuntu/Debian |
用法:
1 | htop |
htop
会显示系统资源的实时使用情况,用户可以方便地查看各个 CPU 核心的利用率,并支持排序、过滤等功能。
6. dstat
命令
dstat
是一个全面的资源监控工具,显示的内容比 vmstat
更丰富,可以同时显示 CPU、磁盘、网络等信息。
安装:
1 | sudo apt-get install dstat # Ubuntu/Debian |
用法:
1 | dstat -c |
-c
选项用于显示 CPU 使用情况。
输出示例:
1 | ------cpu---- ------cpu----- ------cpu------ |
7. iostat
命令
iostat
是用来监控 CPU 使用情况和 I/O 性能的工具,能够显示 CPU 的使用情况和每个设备的 I/O 性能。
用法:
1 | iostat -c 1 |
-c
表示显示 CPU 使用情况。1
表示每 1 秒更新一次。
输出示例:
1 | Linux 5.8.0-53-generic (hostname) 12/31/2024 _x86_64_ (2 CPU) |
8. 总结
- **
top
**:实时监控 CPU 使用情况,适合动态查看资源占用。 - **
mpstat
**:显示各个 CPU 核心的使用情况,适合多核 CPU 环境。 - **
vmstat
**:显示系统的 CPU、内存、I/O 等资源占用情况,适合了解系统整体负载。 - **
sar
**:查看系统活动报告,适合查看历史 CPU 使用情况。 - **
htop
**:增强版top
,提供更直观的交互界面。 - **
dstat
**:显示多种
统计磁盘空间占用情况的命令,从inode和block两部分来进行分析磁盘利用情况
在 Linux 系统中,统计磁盘空间的占用情况是系统管理的常见任务之一。磁盘空间利用情况可以从两个角度进行分析:inode 和 block。我们通常使用以下命令来分析磁盘空间的使用情况。
1. df
命令
df
命令是最常用的查看磁盘空间利用情况的命令,它显示文件系统的磁盘空间使用情况,分为 block 和 inode 两种方式。
1.1 查看磁盘空间(以 block 为单位)
1 | df -h |
-h
选项表示以人类可读的格式显示,自动选择合适的单位(如 KB、MB、GB)。
示例输出:
1 | Filesystem Size Used Avail Use% Mounted on |
- Size:文件系统的总大小。
- Used:已用空间。
- Avail:可用空间。
- **Use%**:空间使用的百分比。
1.2 查看 inode 使用情况
inode 主要用于记录文件的元数据,每个文件都会占用一个 inode。因此,inode 的数量与文件系统中的文件和目录数目直接相关。可以使用 -i
选项来显示 inode 的使用情况。
1 | df -i |
示例输出:
1 | Filesystem Inodes IUsed IFree IUse% Mounted on |
- 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.1G /path/to/directory/subdir1 |
3. stat
命令
stat
命令用于显示文件或文件系统的详细信息,包括 inode 信息。
用法:
1 | stat /path/to/file_or_directory |
示例输出:
1 | File: /path/to/file |
- 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 | 12345678 file1.txt |
6. 综合磁盘利用情况分析
要全面了解磁盘的利用情况,可以结合 df
和 du
命令:
查看文件系统的磁盘使用情况:
1
df -h
查看指定目录的磁盘使用情况:
1
du -sh /path/to/directory
查看文件系统的 inode 使用情况:
1
df -i
查看目录下各子目录的磁盘使用情况:
1
du -h --max-depth=1 /path/to/directory
7. 总结
- block:
df
和du
命令都提供了磁盘空间的 block 使用情况。df
显示整体的磁盘空间使用情况,而du
更侧重于文件和目录的磁盘占用情况。 - inode:
df -i
用于查看文件系统中 inode 的使用情况,而stat
和ls -i
可以查看单个文件或目录的 inode 号。
通过这些命令,可以从不同的维度分析和监控磁盘空间的使用情况,帮助及时发现磁盘空间的潜在问题,避免磁盘空间耗尽或 inode 被耗尽的情况。
打包同时压缩文件命令tar的用法
在 Linux 系统中,tar
命令用于将多个文件或目录打包为一个归档文件,并可选择性地压缩。tar
可以与不同的压缩算法配合使用,如 gzip
、bzip2
、xz
等,来实现压缩功能。
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.txt
、file2.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. 压缩级别控制
gzip
、bzip2
和xz
都支持不同的压缩级别,但tar
本身没有直接控制压缩级别的选项。例如,使用
gzip
的-1
(最快)到-9
(最慢、最小)压缩级别:1
2tar -czvf archive.tar.gz --gzip -1 /path/to/directory # 使用最快的压缩
tar -czvf archive.tar.gz --gzip -9 /path/to/directory # 使用最强的压缩
10. 综合例子
将目录
data
打包并使用gzip
压缩:1
tar -czvf data.tar.gz data/
将目录
logs
打包并使用bzip2
压缩:1
tar -cjvf logs.tar.bz2 logs/
将文件
file1.txt
和file2.txt
打包并使用xz
压缩:1
tar -cJvf files.tar.xz file1.txt file2.txt
查看
.tar.gz
文件内容:1
tar -tvf archive.tar.gz
将文件
file1.txt
和file2.txt
打包并排除.log
文件:1
tar -czvf archive.tar.gz --exclude='*.log' file1.txt file2.txt
总结
tar
命令不仅可以打包文件,还可以结合压缩算法如gzip
、bzip2
、xz
来压缩文件。- 使用
-c
创建归档文件,-x
解包文件,-z
、-j
、-J
分别表示使用gzip
、bzip2
、xz
压缩。 - 可以使用
-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
命令
htop
是 top
命令的增强版,提供更友好的界面和更多的交互操作功能(需要安装)。
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 消息队列和共享内存
- 用于复杂的进程间通信,通常通过编程接口来实现。
总结
- 查看进程:
ps
、top
、htop
、pgrep
等命令用于查看当前系统中的进程。 - 终止进程:使用
kill
、killall
命令终止进程。 - 进程优先级管理:使用
nice
和renice
调整进程的优先级。 - 进程后台管理:
bg
、fg
和jobs
用于后台进程的管理。 - 进程资源限制:
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=4
,w=2
,x=1
,数字值是权限的和。- 例如,
7
表示rwx
,6
表示rw-
,5
表示r-x
,4
表示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
34 ./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
31.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
31.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
3500M /home/user/photos
200M /home/user/docs
1.2G /home/user/home/user
目录下的每个子目录的大小,以及总大小。
1.7 统计所有目录的总大小
- 查看整个文件系统的空间使用情况:输出:
1
du -sh /
这表示根目录占用了 20 GB 的空间。1
20G /
2. df
命令
df
(Disk Free)命令用于显示磁盘空间的使用情况,但它显示的是文件系统的整体使用情况,而非单个目录的使用情况。
2.1 基本用法
1 | df |
- 显示文件系统的磁盘使用情况,包括各文件系统的总空间、已用空间、可用空间和挂载点。
2.2 按人类可读的格式显示
1 | df -h |
-h
(human-readable) 选项让输出以易读的方式显示(KB、MB、GB)。
示例输出:
1 | Filesystem Size Used Avail Use% Mounted on |
Size
:文件系统的总大小。Used
:已使用的空间。Avail
:可用空间。Use%
:已用空间的百分比。Mounted on
:文件系统挂载点。
3. 分析磁盘空间占用的工具
3.1 ncdu
命令
ncdu
(NCurses Disk Usage)是一个基于 ncurses 的工具,用于交互式查看磁盘空间占用情况。它可以帮助你以图形化的界面(终端中)查看磁盘空间。
安装:
1
2sudo apt install ncdu # Debian/Ubuntu
sudo yum install ncdu # CentOS/RHEL使用:
1
ncdu /path/to/directory
运行
ncdu
后,你将看到一个交互式的界面,其中列出了目录和文件的大小,可以使用箭头键浏览和删除占用大量空间的文件。
4. find
命令结合 du
通过结合 find
和 du
命令,可以查找并计算某些特定类型文件的大小,例如查找某些大文件。
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
命令:交互式的磁盘使用分析工具,适合用于查看和管理磁盘空间。find
和du
结合:查找并统计特定类型的文件占用空间,适用于定位和清理大文件。
通过合理使用这些命令,您可以快速有效地查看和管理系统磁盘空间,优化系统性能和存储。
find命令的-exec动作和用管道连接两个命令的区别
在 Linux 中,find
命令用于查找文件和目录,-exec
是 find
命令的一个强大选项,用于对查找到的每个文件执行指定的命令。它与管道(|
)连接两个命令的方式有些不同,理解它们之间的区别非常重要。
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
文件,并统计这些文件的总大小,可以结合 find
和 du
命令:
1 | find /home/user -name "*.log" | du -ch |
find /home/user -name "*.log"
会输出所有.log
文件的路径。|
将这些路径传递给du -ch
,du
会计算这些文件的总大小,并显示结果。
2.3 管道的优点和适用场景:
- 管道是对多个命令的流式操作,适用于多个命令之间的数据传输,特别是在对输出进行处理、过滤或转换时。
- 管道不需要对每个文件单独执行命令,效率相对较高,特别是当你需要对查找到的文件进行集合操作时。
3. -exec
与管道连接的区别
3.1 操作对象的处理方式:
**
-exec
**:对每个匹配到的文件单独执行一次命令。这意味着find
每找到一个匹配的文件,就会启动一次命令(如rm
、cp
或其他)。- 例如:
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. 总结
-exec
是find
命令的一部分,用于对每个查找到的文件执行指定的命令,可以实现更加灵活的操作。- 管道(
|
)用于将一个命令的输出传递给下一个命令,适用于多个命令之间的数据流式处理。 - 使用
-exec
时,每个文件会被单独处理,而管道配合xargs
使用时,可以批量处理多个文件,通常效率更高。