一、Linux 基础入门

1、主分区、扩展分区和逻辑分区

主分区(Primary Partition)

主分区就是包含操作系统启动所必需的文件和数据的硬盘分区,要在硬盘上安装操作系统,则该硬盘必须要有一个主分区,而且其分区的数量可以是1~3个。主分区可以直接被操作系统识别和使用,通常用于安装引导程序或系统文件。

扩展分区(Extended Partition)

扩展分区是为了突破主分区数量限制而设计的特殊分区类型。一块硬盘只能有一个扩展分区,它不能直接存储数据,而是作为逻辑分区的容器。扩展分区本身不占用分区号(如sda1sda2),但会占用一个主分区名额(即最多3个主分区+1个扩展分区)。

逻辑分区(Logical Partition)

逻辑分区必须建立在扩展分区内部,数量理论上无限制(实际受系统或工具约束)。逻辑分区的编号从5开始(如sda5sda6),即使主分区未占满1-4的编号。逻辑分区用于存储数据或安装非引导操作系统。

关键区别

  • 数量限制:主分区≤4,扩展分区≤1,逻辑分区无硬性限制。
  • 功能:主分区和逻辑分区可直接存储数据,扩展分区仅为逻辑分区提供空间。
  • 引导能力:大多数系统需从主分区引导,逻辑分区通常不能作为启动分区。

查询分区信息的命令

lsblk

列出所有块设备信息,包括磁盘和分区。默认显示树状结构,清晰展示磁盘、分区及挂载点关系。常用选项:

  • -f:显示文件系统类型
  • -o:自定义输出列(如NAME,FSTYPE,SIZE,MOUNTPOINT

示例:

bash 复制代码
lsblk -f

fdisk -l

查看磁盘分区表及分区详细信息,需 root 权限。输出包含分区起始扇区、大小、类型等。适用于传统 MBR 分区表。

示例:

bash 复制代码
sudo fdisk -l

df -h

显示已挂载分区的磁盘空间使用情况(人类可读格式)。输出包含文件系统、总大小、已用空间及挂载点。

示例:

bash 复制代码
df -h

cat /proc/partitions

直接读取内核提供的分区信息,内容简洁但缺少细节。输出包含主设备号、次设备号、块数和分区名。

示例:

bash 复制代码
cat /proc/partitions

2、swap交换分区

swap分区是Linux系统中的虚拟内存空间,当物理内存(RAM)不足时,系统会将部分内存数据临时存储到swap分区,避免因内存耗尽导致程序崩溃。它适用于内存有限的场景,但频繁使用swap会降低性能(因磁盘速度远慢于内存)。

创建swap分区的方法

方法1:使用独立分区

  • 通过fdiskgdisk工具创建一个新分区,类型设置为Linux swap(代码82)。

  • 格式化分区为swap:

    bash 复制代码
    mkswap /dev/sdXN  # 替换为实际分区设备名
  • 启用swap:

    bash 复制代码
    swapon /dev/sdXN

方法2:使用swap文件

  • 生成指定大小的文件(如1GB):

    bash 复制代码
    dd if=/dev/zero of=/swapfile bs=1M count=1024
  • 设置权限并格式化:

    bash 复制代码
    chmod 600 /swapfile
    mkswap /swapfile
  • 启用swap文件:

    bash 复制代码
    swapon /swapfile

永久生效配置

编辑/etc/fstab文件,添加以下行(以swap文件为例):

plaintext 复制代码
/swapfile none swap sw 0 0

调整swap使用倾向

修改/proc/sys/vm/swappiness值(范围0-100,默认60)。数值越高,系统越倾向于使用swap:

bash 复制代码
echo 10 > /proc/sys/vm/swappiness  # 临时生效

永久生效需在/etc/sysctl.conf中添加:

plaintext 复制代码
vm.swappiness=10

查看swap状态

bash 复制代码
free -h       # 查看内存和swap使用情况
swapon --show # 显示当前启用的swap设备

删除swap分区或文件

  • 禁用swap:

    bash 复制代码
    swapoff /dev/sdXN  # 或 swapoff /swapfile
  • 删除文件或分区,并移除/etc/fstab中的对应条目。

注意:生产环境中建议根据实际内存负载调整swap大小,通常为RAM的1-2倍(内存较大时可减少比例)。

3、分区格式

Linux 系统支持多种分区格式,每种格式适用于不同场景。以下是常见的分区格式及其特点:

ext4
  • 特点:ext4 是 Linux 默认的文件系统,具有日志功能,支持大文件和大容量存储。
  • 适用场景 :适合大多数 Linux 系统分区,如根目录 //home
  • 优势:稳定性高,兼容性好,支持文件系统加密和快照。
XFS
  • 特点:高性能日志文件系统,特别适合处理大文件和高并发读写。
  • 适用场景:适用于需要高性能的场景,如数据库存储或大规模文件服务器。
  • 优势:支持动态扩展,延迟低,适合企业级应用。
Btrfs
  • 特点:支持写时复制(CoW)、快照、压缩和 RAID 功能。
  • 适用场景:适合需要高级功能的用户,如数据快照或存储池管理。
  • 优势:支持子卷管理,数据完整性高,适合长期存储。
swap
  • 特点:交换分区用于虚拟内存,当物理内存不足时使用磁盘空间作为扩展。
  • 适用场景:必须为 Linux 系统分配,尤其是在内存有限的机器上。
  • 优势:防止系统因内存不足而崩溃,提升多任务处理能力。
FAT32/NTFS
  • 特点:Windows 兼容文件系统,FAT32 支持小文件,NTFS 支持大文件。
  • 适用场景:用于与 Windows 系统共享数据的分区。
  • 优势:跨平台兼容性好,适合移动存储设备。

分区工具推荐

  • fdisk:命令行工具,适合手动分区。
  • GParted:图形化工具,操作直观。
  • parted:支持 GPT 分区表,适合大容量磁盘。

分区建议

  • 根分区 /:建议使用 ext4 或 XFS,容量至少 20GB。
  • /home 分区:建议单独分区,格式为 ext4 或 Btrfs。
  • swap 分区:容量通常为物理内存的 1-2 倍,但不超过 8GB。

通过合理选择分区格式和工具,可以优化 Linux 系统的性能和稳定性。

4、Linux 常用命令

文件和目录操作

ls:列出目录内容。
-l 显示详细信息,-a 显示隐藏文件。

cd:切换目录。
cd ~ 返回家目录,cd .. 返回上级目录。

pwd:显示当前工作目录路径。

mkdir:创建目录。
mkdir -p dir1/dir2 递归创建多级目录。

rm:删除文件或目录。
-r 递归删除目录,-f 强制删除。

cp:复制文件或目录。
-r 复制目录,-i 交互式确认覆盖。

mv:移动或重命名文件/目录。

touch:创建空文件或更新文件时间戳。

文件查看和编辑

cat:显示文件内容。
-n 显示行号。

lessmore:分页查看文件内容。

head:显示文件开头部分。
head -n 10 file 显示前10行。

tail:显示文件末尾部分。
tail -f file 实时追踪文件更新。

vimnano:文本编辑器。

权限管理

chmod:修改文件权限。
chmod 755 file 设置权限为 rwxr-xr-x

chown:修改文件所有者。
chown user:group file

chgrp:修改文件所属组。

系统信息

uname -a:显示系统信息(内核版本等)。

df -h:查看磁盘空间使用情况。

du -sh dir:查看目录占用空间。

free -h:查看内存使用情况。

tophtop:实时监控系统资源。

进程管理

ps:查看进程状态。
ps aux 显示所有进程。

kill:终止进程。
kill -9 PID 强制终止。

systemctl:管理系统服务。
systemctl start/stop/restart service

网络操作

ifconfigip addr:查看网络接口信息。

ping:测试网络连通性。

netstatss:查看网络连接状态。

wgetcurl:下载文件。

scp:远程复制文件。
scp file user@host:/path

压缩和解压

tar:打包或解压文件。
tar -czvf archive.tar.gz dir 压缩,tar -xzvf archive.tar.gz 解压。

zipunzip:处理 .zip 文件。

用户管理

useradduserdel:添加/删除用户。

passwd:修改用户密码。

susudo:切换用户或提权执行命令。

查找和过滤

find:查找文件。
find /path -name "*.txt"

grep:文本搜索。
grep "pattern" file

awksed:高级文本处理工具。

其他实用命令

history:查看命令历史记录。

alias:创建命令别名。

crontab -e:编辑定时任务。

ln -s source link:创建软链接。

date:显示或设置系统时间。

shutdown:关机或重启。
shutdown -h now 立即关机,shutdown -r now 立即重启。

5、状态查询命令

系统状态监控

tophtop:实时查看系统资源占用情况(CPU、内存、进程等)。htop 提供更友好的交互界面。

vmstat 1:每秒输出一次系统性能数据(进程、内存、交换区、IO、CPU等)。

free -h:查看内存和交换分区使用情况,-h 参数以人类可读格式显示。

df -h:显示磁盘空间使用情况,-h 参数以 GB/MB 为单位。

iostat -x 1:监控磁盘 I/O 和 CPU 使用情况,-x 显示扩展统计信息。

进程与服务排查

ps auxps -ef:列出所有进程的详细信息,包括 PID、CPU/内存占用等。

pstree -p:以树状结构显示进程关系,-p 显示 PID。

systemctl status <服务名>:查看系统服务的运行状态和日志。

journalctl -u <服务名>:查看指定服务的 systemd 日志,支持 -f 实时跟踪。

网络问题诊断

ping <IP或域名>:测试网络连通性和延迟。

traceroute <IP或域名>:追踪数据包路径,排查网络延迟或中断问题。

netstat -tulnpss -tulnp:查看监听的端口及对应进程,-p 显示进程信息。

tcpdump -i eth0 port 80:抓取指定网卡和端口的网络数据包,需 root 权限。

iftopnethogs:实时监控网络流量,nethogs 可按进程排序。

日志分析

tail -f /var/log/syslog:实时跟踪系统日志(Ubuntu/Debian)。

tail -f /var/log/messages:实时跟踪系统日志(RHEL/CentOS)。

grep "error" /var/log/nginx/error.log:在日志中筛选关键字。

dmesg | grep -i error:查看内核日志中的错误信息。

性能分析工具

strace -p <PID>:跟踪进程的系统调用,排查卡死或异常。

perf top:实时显示系统性能热点(需安装 perf 工具)。

sar -u 1 3:查看 CPU 使用率历史数据(需安装 sysstat)。

lsof -i :80:列出占用 80 端口的文件和进程信息。

硬件信息

lscpu:查看 CPU 架构和核心数。

lsblk:列出块设备(磁盘、分区)信息。

lspci -v:查看 PCI 设备详细信息(如显卡、网卡)。

dmidecode:获取 BIOS 和硬件主板信息(需 root 权限)。

6、使用 Valgrind 和 pstack 进行调试

Valgrind 是一个用于内存调试、内存泄漏检测和性能分析的工具,而 pstack 是一个用于打印正在运行的进程的堆栈跟踪的工具。结合使用这两个工具可以帮助开发者更高效地定位和解决问题。

Valgrind 的基本用法

Valgrind 主要用于检测内存泄漏、非法内存访问等问题。以下是常见的使用方法:

复制代码
valgrind --leak-check=full --show-leak-kinds=all ./your_program

--leak-check=full 选项会显示详细的泄漏信息,--show-leak-kinds=all 会展示所有类型的内存泄漏。

pstack 的基本用法

pstack 可以打印正在运行的进程的堆栈信息,适用于调试多线程程序或分析程序卡死的情况。使用方式如下:

复制代码
pstack <pid>

其中 <pid> 是目标进程的进程 ID。

结合 Valgrind 和 pstack 进行调试

当程序在 Valgrind 下运行时出现问题时,可以通过 pstack 获取当前堆栈信息,进一步分析问题所在。

启动程序时使用 Valgrind:

复制代码
valgrind --tool=memcheck ./your_program

在程序运行过程中,使用 ps 命令查找进程 ID:

复制代码
ps aux | grep your_program

获取到进程 ID 后,使用 pstack 打印堆栈信息:

复制代码
pstack <pid>
示例场景

假设程序在 Valgrind 下运行时出现段错误(Segmentation Fault),可以通过以下步骤定位问题:

  1. 使用 Valgrind 运行程序,记录错误信息。
  2. 在程序崩溃时,使用 pstack 获取堆栈信息。
  3. 结合 Valgrind 的输出和 pstack 的堆栈信息,分析问题根源。
注意事项
  • Valgrind 会显著降低程序运行速度,不适合用于性能测试。
  • pstack 需要目标进程处于运行状态,如果程序已经崩溃退出,则无法使用。
  • 在某些系统上,pstack 可能需要安装额外的调试工具包(如 gdb)。

通过合理使用 Valgrind 和 pstack,可以更高效地定位和解决程序中的内存问题和性能问题。

7、Shell脚本基础语法规范

Shell脚本通常以.sh为扩展名,但扩展名并非强制要求。脚本文件需要具备可执行权限才能运行。语法规范包括清晰的代码结构、适当的缩进以及一致的命名规则。

脚本文件格式

脚本文件通常以解释器声明开头,后跟脚本内容。文件格式应保持简洁,避免冗余代码。建议使用UTF-8编码以确保兼容性。

首行解释器声明(#!/bin/bash)

首行声明指定脚本使用的解释器路径。例如:

bash 复制代码
#!/bin/bash

这一行称为shebang,告诉系统使用/bin/bash来执行脚本。其他常见解释器包括#!/bin/sh#!/usr/bin/env bash

变量定义

变量定义时无需声明类型,直接赋值即可。变量名区分大小写,建议使用大写字母表示常量或环境变量。

自定义变量:

bash 复制代码
VAR_NAME="value"

系统环境变量:

bash 复制代码
echo $PATH

只读变量:

bash 复制代码
readonly VAR_NAME="value"

变量调用

调用变量时使用$符号:

bash 复制代码
echo $VAR_NAME

或使用花括号明确变量边界:

bash 复制代码
echo ${VAR_NAME}

字符串处理

字符串拼接:

bash 复制代码
STR1="Hello"
STR2="World"
RESULT="$STR1 $STR2"

字符串长度:

bash 复制代码
echo ${#STR1}

子字符串提取:

bash 复制代码
echo ${STR1:1:3}

注释规范

单行注释以#开头:

bash 复制代码
# This is a comment

多行注释可通过<<实现:

bash 复制代码
<<COMMENT
This is a
multi-line comment
COMMENT

脚本运行权限与执行方式

赋予脚本可执行权限:

bash 复制代码
chmod +x script.sh

执行脚本:

bash 复制代码
./script.sh

或通过解释器直接运行:

bash 复制代码
bash script.sh

if-else 条件判断

适用于根据条件执行不同分支的自动化任务。基础语法如下:

python 复制代码
if condition1:
    # 条件1成立时执行
elif condition2:
    # 条件2成立时执行
else:
    # 其他情况执行

示例:根据文件类型执行不同操作

python 复制代码
file_type = "csv"
if file_type == "csv":
    process_csv()
elif file_type == "json":
    process_json()
else:
    print("Unsupported format")

多条件判断

通过逻辑运算符(and/or/not)组合多个条件。

python 复制代码
if temperature > 30 and humidity < 70:
    start_cooling()
elif temperature < 10 or is_winter:
    start_heating()

for 循环遍历

适用于批量处理列表、字典等可迭代对象。

python 复制代码
for item in iterable:
    # 对每个item执行操作

示例:批量重命名文件

python 复制代码
files = ["file1.txt", "file2.log"]
for filename in files:
    new_name = filename.replace(".", "_backup.")
    rename_file(filename, new_name)

while 条件循环

在满足条件时重复执行,需注意避免无限循环。

python 复制代码
while condition:
    # 条件为True时持续执行

示例:监控进程直到完成

python 复制代码
while not process_completed():
    time.sleep(5)
    check_status()

脚本传参

通过 sys.argvargparse 模块接收外部参数,增强脚本灵活性。
基础传参示例

python 复制代码
import sys
script_name = sys.argv[0]  # 脚本名
first_arg = sys.argv[1]    # 第一个参数

进阶示例(argparse)

python 复制代码
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--input", help="Input file path")
args = parser.parse_args()
print(f"Processing {args.input}")

自动化任务逻辑设计

  1. 输入处理:通过传参或配置文件获取输入。
  2. 核心逻辑:结合条件判断与循环实现批量操作。
  3. 异常处理 :使用 try-except 捕获运行时错误。
python 复制代码
try:
    for task in task_list:
        execute_task(task)
except Exception as e:
    log_error(e)

8、crontab定时任务原理

crontab是Linux/Unix系统中基于时间的任务调度工具,通过守护进程crond实现。其原理是周期性读取配置文件(用户级/var/spool/cron/或系统级/etc/crontab),检查任务时间条件是否匹配当前时间,匹配则执行对应命令。

配置格式(分/时/日/月/周)

基本格式为:

复制代码
* * * * * command_to_execute

字段含义及取值范围:

  • 分钟(0-59)
  • 小时(0-23)
  • 日(1-31)
  • 月(1-12)
  • 周(0-7,0和7均代表周日)

特殊符号说明:

  • *:任意值
  • ,:分隔多个值(如1,3,5
  • -:范围(如1-5
  • /:间隔频率(如*/2表示每2单位)

常用定时场景配置

  1. 每天凌晨3点执行备份脚本

    0 3 * * * /path/to/backup.sh

  2. 每5分钟检查一次服务状态

    */5 * * * * /path/to/check_service.sh

  3. 每周一上午8点发送报告

    0 8 * * 1 /path/to/send_report.sh

任务启停与日志排查

  • 启停命令:
    • 编辑任务:crontab -e
    • 列出任务:crontab -l
    • 删除任务:crontab -r
  • 日志路径:
    • 系统日志:/var/log/cron(CentOS/RHEL)或/var/log/syslog(Ubuntu)
    • 查看执行记录:grep CRON /var/log/syslog

9、Linux开机自启基础原理

开机自启通过初始化系统实现(如systemdSysVinit)。流程分为:

  1. 内核加载完成后启动init进程(PID=1)。
  2. init读取配置文件(如/etc/inittab/etc/systemd/system),按运行级别(runlevel)或目标(target)启动服务。

局部自启脚本与系统服务自启差异

  1. 局部自启脚本

    • 位置:/etc/rc.local(需可执行权限)
    • 特点:简单但缺乏依赖管理,适合临时任务。
  2. 系统服务自启

    • 位置:/etc/systemd/system//usr/lib/systemd/system/
    • 特点:支持依赖关系、状态监控,通过systemctl enable service_name启用。

日志体系基础

Linux日志主要存储在/var/log/目录,关键日志文件:

  • 系统日志:/var/log/messages(CentOS)或/var/log/syslog(Ubuntu)
  • 认证日志:/var/log/auth.log
  • 应用日志:如/var/log/nginx/error.log

常用日志操作命令

  1. tail实时刷新查看日志
bash 复制代码
tail -f /var/log/syslog  # -f参数实时跟踪文件变化
  1. head查看日志头部
bash 复制代码
head -n 20 /var/log/nginx/access.log  # 显示前20行
  1. grep过滤错误日志
bash 复制代码
grep -i "error" /var/log/syslog  # -i忽略大小写
grep -A 3 -B 2 "critical" /var/log/app.log  # 显示匹配行前后内容
相关推荐
Deepoch1 小时前
面向工业现场自主运维:Deepoc 具身模型开发板的端侧智能升级路径
运维·人工智能·科技·巡检机器人·deepoc
菜菜艾2 小时前
自动化环境补丁更新系统
linux·运维·bash·运维开发
江上清风山间明月2 小时前
Nginx基于域名区分的多网站部署
运维·nginx·部署·php·多个网站
随风,奔跑2 小时前
Nginx
服务器·后端·nginx·web
HalvmånEver2 小时前
MySQL的索引
android·linux·数据库·学习·mysql
仰望星空的打工人2 小时前
cypht无法获取163、126邮件
服务器·网易邮箱大师
xhbh6663 小时前
Windows端口转发完全教程:netsh命令详解与实战案例
服务器·网络·ip·流量转发·端口流量转发
团象科技3 小时前
2026出海趋势观察:国际云服务器推荐重构企业全球化经营底盘
运维·服务器·重构
Elastic 中国社区官方博客3 小时前
Elastic 9.4:Workflows 正式发布、Agent Builder 更新,以及 Prometheus / PromQL 支持
运维·数据库·人工智能·elasticsearch·搜索引擎·信息可视化·prometheus