一、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  # 显示匹配行前后内容
相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式