信息查看

`ls`/`ll` 当前目录下的文件查看

`tree` 查看目录结构

`file` 文件类型等信息查看

`stat` 文件元数据查看

`id` 查看当前用户信息

`who`/`w` 当前登录的用户信息

`ps` 查看当前系统进程

`ipcs` 查看IPC进程间通信机制信息

`top`进程监控

`df` 查看磁盘分区情况

`ls /dev/sd*`

`ip a` 查看网络信息

`ifconfig` 需要安装 `sudo apt install net-tools`

`which` 查看可执行文件的完整路径

内核相关

dd -数据烧录

dd 是 Linux/Unix 系统中一个功能强大的命令行工具,主要用于数据转换和复制。它可以在文件、设备(如硬盘、U盘)、管道之间直接读写数据,支持按指定块大小和数量进行操作,常用于备份、克隆、创建启动盘等场景。

基本语法

dd if=输入文件/设备 of=输出文件/设备 [选项]
  • if:指定输入源(input file),可以是普通文件、设备文件(如 /dev/sda)或管道
  • of:指定输出目标(output file),同上

常用选项

  • bs=<字节数>:设置块大小(block size),如 bs=4M 表示每块4兆字节
  • count=<块数>:指定复制的块数量,与 bs 结合控制总数据量(总大小=bs×count)
  • skip=<块数>:从输入源跳过指定块数后开始读取
  • seek=<块数>:在输出目标跳过指定块数后开始写入
  • status=progress:显示复制进度(部分版本支持)
  • conv=<转换参数>:数据转换选项,如 conv=fsync 强制写入磁盘,conv=noerror 忽略错误

实用示例

  1. 创建启动盘(将ISO镜像写入U盘)

    sudo dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress
    
    

    (注意:/dev/sdb 需替换为实际U盘设备名,操作前确保数据已备份)

  2. 备份磁盘分区

    sudo dd if=/dev/sda1 of=partition_backup.img bs=1G status=progress
    
    

    (将 /dev/sda1 分区完整备份为镜像文件)

  3. 从备份恢复分区

    sudo dd if=partition_backup.img of=/dev/sda1 bs=1G status=progress
    
    
  4. 创建指定大小的空文件(如1GB测试文件)

    dd if=/dev/zero of=testfile bs=1G count=1
    
    

    /dev/zero 是特殊设备,会生成无限的空字节)

  5. 克隆整个硬盘到另一个硬盘

    sudo dd if=/dev/sda of=/dev/sdb bs=4M status=progress
    
    

    (需确保目标硬盘容量不小于源硬盘)

  6. 擦除磁盘数据(用随机数据覆盖)

    sudo dd if=/dev/urandom of=/dev/sdb bs=1M status=progress
    
    

    /dev/urandom 生成随机数据,用于彻底清除数据)

注意事项

  • dd 操作具有危险性,若 of 指定错误(如误写系统盘)可能导致数据丢失,务必仔细核对设备名
  • 执行涉及磁盘的操作通常需要 root 权限(sudo
  • 大文件复制时,合理设置 bs 大小可提高效率(一般建议 4M~64M)
  • 中断操作可使用 Ctrl+C,但可能导致目标文件/设备不完整
  • 部分老旧系统的 dd 不支持 status=progress,可通过 watch -n 1 pkill -USR1 dd 查看进度

dd 被称为"磁盘毁灭者"(disk destroyer),因其强大的直接读写能力,使用时需格外谨慎,但同时也是系统管理和数据处理中不可或缺的工具。

lsmod-内核模块状态查看

`lsmod` 是 Linux 系统中用于显示当前已加载内核模块状态的命令。

它的作用是列出所有已加载到内核中的模块及其相关信息,包括:

- 模块名称(Module)
- 模块大小(Size)
- 正在使用该模块的进程数或其他模块数(Used by)

insmod -手动加载模块

insmod 是 Linux 系统中用于手动加载内核模块(kernel module)的命令。它可以将编译好的内核模块(通常是 .ko 格式的文件)加载到运行中的内核中,从而为系统添加新功能或驱动支持。

insmod /path/to/module.ko

特点说明

  1. 需要管理员权限:加载内核模块会影响系统内核,因此必须使用 root 用户或通过 sudo 执行
  2. 需指定完整路径:与 modprobe 不同,insmod 必须提供模块文件的完整路径
  3. 不自动处理依赖:如果要加载的模块依赖于其他模块,需要手动先加载依赖模块
  4. 模块格式:通常加载的是 .ko(Kernel Object)格式的编译好的模块文件

dmesg -查看内核启动信息

dmesg 是 Linux 系统中用于查看内核环形缓冲区(kernel ring buffer)内容的命令,主要用于显示系统启动信息和内核运行过程中产生的各种消息。

主要功能

  • 显示系统启动时的硬件检测信息
  • 展示内核模块加载 / 卸载的记录
  • 显示设备驱动相关的错误和警告
  • 记录系统运行中的重要事件(如磁盘挂载、网络接口状态变化等)

常用选项

  1. c:显示缓冲区内容后清空缓冲区
  2. w:持续监控并显示新的内核消息(类似实时日志)
  3. T:将时间戳转换为人类可读的本地时间格式
  4. L:使用彩色输出区分不同级别的消息
  5. H:以人类可读的格式显示(自动处理单位转换)

strace-进程调试和诊断工具

strace 是 Linux 系统中一款强大的调试和诊断工具,用于跟踪进程与内核之间的系统调用(system call)和信号传递。它能记录进程执行的每一个系统调用、传递的参数、返回值以及接收的信号,帮助开发者理解程序的底层行为。

基本用法

strace [选项] 命令/程序名

常用选项

  1. 跟踪指定进程

    strace -p 1234  # 跟踪PID为1234的进程
    
  2. 输出到文件

    strace -o output.txt ./myprogram  # 将跟踪结果保存到文件
    
  3. 统计系统调用次数

    strace -c ./myprogram  # 执行后显示各系统调用的统计信息(次数、耗时等)
    
  4. 跟踪特定系统调用

    strace -e open,read ./myprogram  # 只跟踪open和read系统调用
    strace -e trace=file ./myprogram  # 跟踪所有与文件操作相关的系统调用
    
  5. 显示时间信息

    strace -t ./myprogram  # 每条记录前显示时间(精确到秒)
    strace -tt ./myprogram # 精确到微秒
    strace -T ./myprogram # 显示每个系统调用的耗时
    
  6. 跟踪子进程

    strace -f ./myprogram  # 跟踪主进程及其创建的所有子进程
    

实用示例

  • 查看程序打开了哪些文件:

    strace -e open,openat,close ./myprogram
    
  • 分析程序的网络相关系统调用:

    strace -e socket,connect,sendto,recvfrom ./network_app
    
  • 调试程序为何卡住(查看最后执行的系统调用):

    strace -p 1234  #  attach到卡住的进程,观察是否在等待某个系统调用返回
    
  • 统计程序的系统调用开销:

    strace -c ./myprogram  # 执行后会显示各系统调用的调用次数、耗时占比等
    

应用场景

  • 诊断程序异常(如崩溃、卡顿、权限问题)
  • 分析程序的资源使用(文件、网络、内存等)
  • 理解程序的执行流程(尤其对没有源码的程序)
  • 调试系统调用相关的错误(如 Permission denied 原因)

注意事项

  • 跟踪进程会增加其运行开销,可能影响性能敏感程序的行为
  • 普通用户只能跟踪自己拥有的进程,跟踪系统进程需要 root 权限
  • 输出内容可能非常庞大,建议结合过滤选项(e)或输出到文件分析
  • 对于多线程程序,可使用 f 选项跟踪所有线程

strace 是排查程序底层问题的利器,尤其在没有源代码或需要分析程序与系统交互细节时非常有用。通过分析其输出,可以深入了解程序的行为模式和潜在问题。

taskset-查询进程 CPU 亲和性

taskset 是 Linux 系统中用于设置或查询进程进程的 CPU 亲和性(CPU affinity)的命令工具。CPU 亲和性允许将进程绑定到特定的 CPU 核心上运行,从而优化系统性能,尤其适用于多核心处理器环境。

基本功能

  • 查看进程当前绑定的 CPU 核心
  • 将进程绑定到一个或多个特定的 CPU 核心
  • 启动新进程时指定其运行的 CPU 核心

常用语法

# 查看进程的CPU亲和性
taskset -p <进程PID>

# 设置已有进程的CPU亲和性
taskset -p <CPU掩码> <进程PID>

# 启动新进程并指定CPU亲和性
taskset <CPU掩码> <命令/程序>

CPU 掩码说明

CPU 亲和性通过掩码(mask) 表示,每个 bit 代表一个 CPU 核心(从 0 开始计数):

  • 0x1(二进制 0001):绑定到 CPU 0
  • 0x2(二进制 0010):绑定到 CPU 1
  • 0x3(二进制 0011):绑定到 CPU 0 和 CPU 1
  • 0xf(二进制 1111):绑定到 CPU 0~3

也可以用 -c 选项直接指定核心编号(更直观):

  • taskset -c 0,1 <命令>:绑定到 CPU 0 和 1
  • taskset -c 2-4 <命令>:绑定到 CPU 2、3、4

实用示例

  1. 查看进程的 CPU 亲和性

    taskset -p 1234  # 查看PID为1234的进程绑定的CPU核心
    
  2. 将进程绑定到 CPU 0

    sudo taskset -p 0x1 1234  # 用掩码方式
    # 或
    sudo taskset -pc 0 1234   # 用-c选项更直观
    
  3. 将进程绑定到 CPU 1 和 2

    sudo taskset -pc 1,2 1234
    
  4. 启动程序时绑定到 CPU 3

    taskset -c 3 ./myprogram
    

应用场景

  • 性能优化:将关键进程绑定到独立 CPU 核心,避免与其他进程争夺资源
  • 实时系统:确保实时进程在固定 CPU 上运行,减少调度延迟
  • 多核调试:分析程序在特定核心上的运行行为
  • 负载均衡:手动分配进程到不同核心,避免单一核心过载

注意事项

  • 修改进程的 CPU 亲和性通常需要 root 权限(sudo
  • 绑定过多进程到同一核心可能导致性能下降,需合理分配
  • 对于多线程程序,可结合 pthread_setaffinity_np 函数在代码中设置线程亲和性

taskset 是多核系统性能调优的实用工具,通过合理设置 CPU 亲和性,可以显著提升关键应用的响应速度和稳定性。

objdump -二进制文件分析

objdump 是 Linux/Unix 系统中一款强大的二进制文件分析工具,主要用于查看目标文件(object file)、可执行文件、共享库等二进制文件的内部结构和信息。它常被用于底层开发、调试和逆向工程分析。

核心功能

  • 查看二进制文件的汇编代码(反汇编)
  • 分析文件的段(section)和节头(header)信息
  • 显示符号表(函数名、变量等)
  • 查看重定位表、动态链接信息等

常用选项及示例

  1. 反汇编可执行代码(最常用)

    objdump -d /bin/ls  # 对ls命令的可执行段进行反汇编
    
  2. 反汇编并显示源代码(需编译时带 - g 调试信息)

    objdump -S -g my_program  # 混合显示源代码和汇编代码
    
  3. 查看符号表

    objdump -t a.out  # 显示可执行文件的符号表
    objdump -T /lib64/libc.so.6  # 显示共享库的动态符号表
    
  4. 查看段头信息

    objdump -h a.out  # 显示各段的大小、偏移量等信息
    
  5. 显示全部头部信息

    objdump -x a.out  # 显示文件的所有头部信息(综合信息)
    
  6. 查看动态链接信息

    objdump -p /usr/bin/python3  # 显示动态库依赖等信息
    

  7. 以 Intel 格式反汇编(默认是 AT&T 格式)

    objdump -d -M intel my_program  # 生成Intel风格的汇编代码
    

nm二进制分析指令

Linux 系统中一个用于分析二进制文件(如可执行文件、目标文件 .o、静态库 .a、动态库 .so 等)的命令行工具,其核心功能是列出文件中的符号表(symbol table)信息

二进制文件中的 “符号” 指的是代码或数据的标识,包括:

  • 函数名(如 mainprintf
  • 全局变量名(如 g_var
  • 静态变量名(文件内可见的变量)
  • 外部引用的符号(如调用其他库中的函数)等。

nm 命令通过解析二进制文件的符号表,展示这些符号的地址、类型、名称等信息,常用于调试、分析程序链接问题或逆向工程。

mknod创建特殊文件

mknod 是 Linux 系统中用于创建特殊文件(设备文件)的命令,主要用于创建字符设备文件和块设备文件,这些文件通常位于 /dev 目录下,用于与硬件设备进行交互。

基本语法

mknod [选项] 文件名 类型 [主设备号 次设备号]

主要参数说明

  1. 类型:指定设备文件的类型
    • b:块设备文件(如硬盘、U 盘等,以块为单位读写)
    • c 或 u:字符设备文件(如键盘、鼠标、串口等,以字符为单位读写)
  2. 主设备号和次设备号
    • 主设备号:标识设备类型(如硬盘通常是 8)
    • 次设备号:标识同一类型中的具体设备
  3. 常用选项
    • m:指定创建文件的权限(类似 chmod 的权限表示法)

网络相关

netstat -查看网络状态

netstat 是 Linux/Unix 系统中用于查看网络状态的命令行工具,可显示网络连接、路由表、接口统计、伪装连接和多播成员等信息。它是网络调试和监控的常用工具。

基本用法

netstat [选项]

常用选项及功能

  1. 显示所有连接

    netstat -a  # 显示所有活跃的网络连接和监听端口
    
  2. 显示 TCP 连接

    netstat -t  # 仅显示TCP协议的连接
    
  3. 显示 UDP 连接

    netstat -u  # 仅显示UDP协议的连接
    
  4. 显示监听状态的端口

    netstat -l  # 只显示处于监听状态的端口
    
  5. 显示进程 ID 和程序名

    netstat -p  # 显示每个连接对应的进程ID和程序名称(需要root权限)
    
  6. 以数字形式显示地址和端口

    netstat -n  # 不进行DNS解析,直接显示IP地址和端口号,速度更快
    
  7. 显示路由表

    netstat -r  # 显示内核路由表,类似route命令
    
  8. 显示网络接口统计信息

    netstat -i  # 显示各网络接口的收发数据包统计
    

实用组合示例

  • 查看所有监听端口及对应的进程:

    sudo netstat -tulpn
    
    #(t-TCP, u-UDP, l- 监听,p- 进程,n- 数字形式)
    
  • 查看当前所有 TCP 连接:

    netstat -tan
    

  • 查看特定端口的连接情况(例如 80 端口):

    netstat -tuln | grep :80
    

注意事项

  • 在部分 Linux 发行版中,netstat 已被 ss 命令替代(ss 性能更好,推荐优先使用)
  • 完整的选项说明可通过 man netstat 查看
  • 某些选项(如 p)需要 root 权限才能显示完整信息

netstat 适合快速了解系统的网络连接状态、排查端口占用问题或分析网络流量走向。

tcpdump-数据包捕获和分析工具

tcpdump 是 Linux/Unix 系统中一款强大的网络数据包捕获和分析工具,常用于网络故障排查、流量分析和协议调试。它能够实时捕获网络接口上的数据包,并以人类可读的格式展示其内容。

基本用法

tcpdump [选项] [过滤条件]

常用选项

  1. 指定网络接口

    tcpdump -i eth0  # 捕获eth0接口的数据包
    tcpdump -i any   # 捕获所有接口的数据包
    
  2. 显示详细信息

    tcpdump -v   # 详细输出
    tcpdump -vv  # 更详细输出
    tcpdump -vvv # 最详细输出
    
  3. 保存捕获的数据包

    tcpdump -w capture.pcap  # 将数据包保存到文件(可用于Wireshark分析)
    
  4. 读取保存的数据包文件

    tcpdump -r capture.pcap  # 从文件中读取并分析数据包
    
  5. 限制捕获数量

    tcpdump -c 100  # 只捕获100个数据包
    
  6. 不进行域名解析

    tcpdump -n  # 显示IP地址而非域名
    tcpdump -nn # 显示IP地址和端口号(不解析服务名)
    

常用过滤条件示例

  1. 按协议过滤

    tcpdump tcp   # 只捕获TCP数据包
    tcpdump udp   # 只捕获UDP数据包
    tcpdump icmp  # 只捕获ICMP数据包(如ping)
    
  2. 按IP地址过滤

    tcpdump host 192.168.1.1   # 捕获与该IP相关的所有数据包
    tcpdump src 192.168.1.1    # 捕获源IP为该地址的数据包
    tcpdump dst 192.168.1.1    # 捕获目标IP为该地址的数据包
    
  3. 按端口过滤

    tcpdump port 80      # 捕获80端口的数据包(HTTP)
    tcpdump port 443     # 捕获443端口的数据包(HTTPS)
    tcpdump src port 22  # 捕获源端口为22的数据包(SSH)
    
  4. 组合条件过滤

    tcpdump tcp port 80 and host 192.168.1.1  # 捕获TCP协议、80端口且与该IP相关的数据包
    tcpdump not port 22                       # 捕获非22端口的数据包
    
  5. 捕获特定网络的数据包

    tcpdump net 192.168.1.0/24  # 捕获该网段内的所有数据包
    

实用场景

  • 诊断网络连接问题(如丢包、延迟)
  • 分析应用程序的网络交互
  • 检测异常流量或网络攻击
  • 学习和理解网络协议工作原理

注意事项

  • 通常需要 root 权限才能执行(sudo tcpdump
  • 大量数据包捕获可能影响系统性能
  • 复杂过滤规则可提高分析效率,减少无关数据
  • 保存的 .pcap 文件可导入 Wireshark 进行可视化分析

tcpdump 的过滤语法非常强大,支持多种逻辑组合和协议字段筛选,通过 man tcpdump 可查看完整的过滤规则说明。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐