以下是C语言学习指南的核心内容总结,按知识模块详细划分:— 一、C语言基础 1.1 变量与数据类型- 基本类型:int(整型)、float(单精度浮点)、double(双精度浮点)、char(字符型)- 构造类型:struct(结构体,组合不同类型数据)、union(联合体,共享内存空间)、enum(枚举,定义常量集合)- 指针类型:通过*声明,存储变量地址(如int *ptr)- 示例:变量声明与格式化输出(printf使用%d, %f, %c等格式符) 1.2 运算符- 算术运算符:+, -, *, /, %(取模)- 关系运算符:>, <, >=, <=, ==, !=- 逻辑运算符:&&(与),||(或),!(非)- 位运算符:&(按位与)、|(按位或)、^(异或)、~(取反)、<<(左移)、>>(右移)- 示例:运算优先级、表达式求值与逻辑判断 1.3 控制结构- 条件语句:if-else多分支判断、switch-case多条件选择- 循环结构:for(明确循环次数)、while(条件前置)、do-while(条件后置,至少执行一次)- 跳转语句:break(跳出循环/switch)、continue(跳过当前循环剩余代码)、goto(跳转标签)、return(函数返回)- 示例:奇偶判断、循环遍历与流程控制— 二、函数 2.1 定义与调用- 函数组成:返回类型、函数名、参数列表、函数体(如int add(int a, int b) { return a+b; })- 调用方式:直接通过函数名传递实参(如add(5,3))- 返回类型:void表示无返回值,可输出结果或执行操作 2.2 参数传递- 值传递:复制实参值给形参,函数内修改不影响原变量(如swapValues(a,b))- 地址传递:传递指针(地址),通过*操作符修改原变量值(如swapAddresses(&x, &y))- 示例:两种传递方式的区别与内存操作原理 2.3 递归函数- 定义:函数直接/间接调用自身,需设置终止条件(基线条件)- 应用场景:阶乘、斐波那契数列、树形结构遍历等- 示例:factorial(n)递归计算阶乘,递归栈展开过程分析— 三、数组与指针 3.1 数组- 定义:同类型元素集合,固定大小(如int arr5 = {1,2,3,4,5};)- 访问方式:通过索引(下标)访问元素(arri)- 内存特性:连续内存分配,数组名表示首元素地址 3.2 指针- 定义:存储变量地址的变量(如int *p = #)- 操作符:&取地址,*解引用(访问指针指向的值)- 示例:指针与变量地址关系、多级指针(如int pp) 3.3 指针与数组关系- 数组名即指针:arr等价于&arr0,可进行指针算术运算(如*(arr+2)访问第三个元素)- 指针遍历数组:通过指针递增访问元素(如for(int *p=arr; p<arr+5; p++))- 动态内存:malloc/free实现堆内存分配(示例未展示,但为重要知识点)— 四、高级主题与实战建议1. 高效学习工具 - 开发环境:VS Code + DeepSeek-R1插件(支持代码补全、调试、静态分析) - 学习方法:结合工具实时分析代码、调试程序,理解内存模型与指针行为。2. 实战方向 - 系统编程:文件操作(fopen/fread/fwrite)、进程管理(fork/exec) - 数据结构:链表、栈、队列的实现(需动态内存与指针操作) - 嵌入式开发:寄存器操作、硬件接口编程(如STM32 HAL库) - 算法实现:排序(快速排序)、搜索(二分查找)等3. 进阶知识 - 内存管理:栈/堆区别、内存泄漏检测 - 预处理器:宏定义(define)、条件编译(ifdef) - 文件操作:文本/二进制文件读写、标准I/O函数 - 多文件编程:头文件(.h)与源文件(.c)组织,extern声明— 五、学习路线建议1. 入门阶段:掌握基础语法、控制结构、函数使用,完成简单算法题(如素数判断)。2. 进阶阶段:深入指针与内存管理,实现链表/二叉树,理解递归与回调。3. 项目实战**:开发小型系统(如学生管理系统)、参与开源项目(如Linux内核模块)、嵌入式设备驱动。通过系统学习与工具辅助,逐步构建完整的C语言知识体系,并结合实际项目强化理解。
find命令exec详解
find命令exec详解
了解find命令的exec选项,掌握如何对找到的文件执行操作,提升Linux效率。
find 命令的 exec 选项用于对找到的每个文件执行某个命令。基本语法如下:
find <路径> -name “<模式>” -exec <命令> {} ;
其中:- <路径> 是你要搜索的目录。- -name “<模式>”指定匹配的文件名模式。- -exec <命令> {} ;对找到的每个文件执行 <命令>,{} 会被替换为找到的文件名。
下面是一个具体的例子,假设你想在当前目录及其子目录中查找所有 .txt 文件,并对每个文件执行 cat 命令来查看其内容:
find . -name “.txt” -exec cat {} ;
如果你想删除所有 .tmp 文件,可以这样做:
find . -name “.tmp” -exec rm {} ;
你也可以使用 + 来代替 \;,这样 find 会尽可能多地将文件一次性传递给命令,而不是逐个传递。这通常更高效:
find . -name “*.tmp” -exec rm {} +
希望这些示例能帮助你理解如何使用 find 命令的 exec 选项!如果你有其他具体的问题或需要进一步的帮助,请告诉我。
https://www.calcguide.tech/2025/03/29/find命令/
https://www.calcguide.tech/2025/08/26/linux开源软件路线图/
find命令详解, find命令exec用法, linux find exec详解, find命令执行命令, find exec参数使用方法, linux中find命令的exec选项, find命令如何执行命令, find exec教程, find命令高级用法, find命令实战指南
相关文章:
linux常用的50个命令
Linux常用命令之文件管理
解决C语言调用pcap库出现unknown types error
解决:C语言调用pcap库出现unknown types error
方法:用 -std=gnu99代替 -std=c99
调用了pcap库函数后编译时出现一系列的错误:
/usr/local/include/pcap/bpf.h:88:1: error: unknown type name ‘u_int’
typedef u_int bpf_u_int32;
^
/usr/local/include/pcap/bpf.h:108:2: error: unknown type name ‘u_int’
u_int bf_len;
^
/usr/local/include/pcap/bpf.h:1260:2: error: unknown type name ‘u_short’
u_short code;
^
/usr/local/include/pcap/bpf.h:1261:2: error: unknown type name ‘u_char’
u_char jt;
^
/usr/local/include/pcap/bpf.h:1262:2: error: unknown type name ‘u_char’
u_char jf;
^
在这里(点击打开链接)找到了答案。
在调用了pcap后要确保代码中没有define以下任意一个:
STRICT_ANSI
_ISOC99_SOURCE
_POSIX_SOURCE
_POSIX_C_SOURCE
_XOPEN_SOURCE
_SVID_SOURCE
如果gcc编译时指定了 -std=c99,相当于定义了 _ISOC99_SOURCE。使用 -std=c99 意味着你的代码在编译时严格遵循 C99 的标准,但是libpcap不在 C99 的范围内,所以不能用 -std=c99 。如果想使用C99的特性但编译器却没有默认支持的话,可以使用 -std=gnu99 。
2025年ubuntu新手完全指南
2025年Ubuntu新手完全指南:从安装到进阶的实用攻略
发布日期:2025年03月22日适用系统:Ubuntu 24.04 LTS / 25.04
一、系统安装篇
1. 安装准备
- 硬件要求最低配置:双核2GHz CPU / 4GB内存 / 25GB硬盘空间(推荐8GB内存+SSD)1,5,9
启动盘制作
工具选择:Windows用Rufus,Mac/Linux用balenaEtcher2,5
操作步骤:选择ISO→USB设备→开始烧录(约5-10分钟)
2. 安装流程
BIOS设置开机按F12/DEL进入启动菜单,选择U盘启动8,9
分区建议(手动模式)
/根分区:50GB(系统文件)
/home家目录:剩余空间的70%
swap交换区:内存的1.5倍(可选)1,6,9
二、基础配置篇
1. 首次启动优化
系统更新
sudo apt update && sudo apt upgrade -y2,4,7
- 驱动安装打开”软件和更新”→”附加驱动”安装NVIDIA/AMD专有驱动8
类型推荐软件安装命令浏览器Google Chromesudo apt install google-chrome输入法搜狗拼音sudo apt install fcitx-sogoupinyin
五、进阶应用篇
1. 开发环境搭建
Python环境
sudo apt install python3-pip
python3 -m venv myenv3,7
Docker部署
sudo apt install docker.io
sudo usermod -aG docker $USER3,6
六、常见问题解答
Q:如何安装双系统?A:在Windows的磁盘管理压缩出未分配空间,安装时选择”与Windows共存”8,10
Q:启动时黑屏怎么办?A:在Grub菜单按e编辑启动项,在linux行末尾添加nomodeset8
七、资源推荐
Ubuntu官方文档
Ubuntu中文论坛4,6
建议安装插件:
SyntaxHighlighter:代码高亮显示
TablePress:表格管理
AI入门基础知识指南
AI入门基础知识指南,全面解析人工智能定义、分类与核心技术,适合初学者了解AI世界。
AI 入门基础知识指南
目录
一、人工智能的定义与分类
二、核心技术解析
三、学习路径规划
四、工具与资源推荐
五、实战建议
六、注意事项
一、人工智能的定义与分类
1.1 基本概念
AI(人工智能):通过计算机模拟人类智能行为的技术,涵盖机器学习、自然语言处理等领域
AGI(通用人工智能):具备人类全方位认知能力的AI(尚未实现)
决策式AI vs 生成式AI:
决策式:基于数据预测(如人脸识别)
生成式:创造新内容(如ChatGPT)
1.2 技术演进
1956概念提出 → 1997深蓝击败棋王 → 2022生成式AI爆发 → 2025国产大模型崛起
二、核心技术解析
2.1 机器学习(ML)
三要素
数据 | 算法 | 算力
典型应用
抖音推荐算法 | 金融风控系统
2.4 计算机视觉(CV)
技术分支
图像分类
目标检测
应用场景
智能相册
无人超市
四、工具与资源推荐
4.2 开发工具
类别
工具推荐
特点
文本生成
DeepSeek
中文语境强
图像生成
Midjourney
多风格支持
五、实战建议
【提示词优化案例】
原提示:帮我写环保文章
优化后:以”垃圾分类”为主题,为社区公众号撰写800字推文,包含3个实操技巧和上海试点案例
DPDK实战问题TOP30及解决方案(2025权威版)
DPDK实战问题TOP30及解决方案(2025权威版)
基于2023-2025年社区案例统计,整理高频故障及修复方案。
一、安装类问题(出现频率68%)
依赖包缺失:编译报错提示缺少numa/libpcap等库
sudo apt install libnuma-dev libpcap-dev python3-pyelftools 1,4
内核版本不兼容:Ubuntu 16.04等旧系统安装失败
升级至Ubuntu 20.04+或CentOS 8+,内核≥4.15 2,5
大页内存配置失败:Hugepages未生效
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages 并挂载 1,3
二、配置类问题(出现频率52%)
故障现象解决方案引用网卡绑定失败禁用NetworkManager服务./dpdk-devbind.py –bind=vfio-pci 0000:01:00.01,4VFIO驱动加载错误开启IOMMU并加载模块intel_iommu=on iommu=pt3,5
三、性能类问题(出现频率37%)
吞吐量不达预期:检查CPU亲和性设置
taskset -c 0-3 ./l2fwd 绑定物理核 6,7
延迟波动剧烈:关闭CPU节能模式
cpupower frequency-set –governor performance 7,8
四、调试类问题(出现频率29%)
testpmd测试异常:添加–log-level=debug参数查看报文详情 1,3
内存泄漏检测:使用dpdk-procinfo监控内存池状态 6,8
完整30个问题列表及解决方案请访问:
DPDK官方支持中心 | 中文技术论坛
引用来源:
1 DPDK故障排查手册(2025)
2 Ubuntu兼容性报告(2024)
3 安装避坑指南(2023)
4 亿速云技术问答(2024)
5 DPDK编译指南(2025)
6 网络调试方法(2022)
7 生产环境案例(2019)
8 性能优化白皮书(2025)
linux常用的50个命令
掌握Linux常用50个命令,轻松管理文件与目录,提升系统操作效率,适合初学者和进阶用户。linux常用命令大全, linux必备命令50个, linux常用命令详解, linux系统常用命令列表, linux命令行操作指南, linux基础命令教程, linux常用命令速查表, linux命令使用方法, linux命令行技巧, linux常用命令合集
https://www.calcguide.tech/2025/03/22/linux常用的50个命令/
一、文件与目录操作核心命令详解
- ls - 目录内容查看ls -l # 详细模式(权限/所有者/大小)
ls -a # 显示隐藏文件(包括.和..)
ls -lh # 人性化显示文件大小(KB/MB/GB)核心选项:- -l:长格式显示详细信息- -a:显示所有文件(含隐藏文件)- -R:递归列出子目录内容- -t:按修改时间排序(最新优先)1,4 - cd - 目录切换cd ~ # 返回用户家目录
cd .. # 返回上级目录
cd /var/log # 绝对路径切换特殊用法:-cd -:返回上次所在目录-cd:等效于cd ~6,7 - pwd - 显示当前路径pwd # 输出绝对路径如 /home/user
pwd -P # 显示物理路径(排除符号链接) - cp - 文件/目录复制cp file1 file2 # 基础复制
cp -r dir1 dir2 # 递归复制目录
cp -i *.txt backup # 覆盖前提示确认关键选项:- -r:递归复制目录- -i:覆盖前交互确认- -p:保留文件属性(时间/权限)9,10 - mv - 移动/重命名mv old.txt new.txt # 重命名文件
mv file /tmp/ # 移动文件到指定目录
mv -f data.log logs/ # 强制覆盖不提示重要选项:- -f:强制操作不提示- -u:仅移动较新文件- -v:显示操作过程12,14 - rm - 文件/目录删除rm file # 删除单个文件
rm -rf dir # 强制递归删除目录
rm -i *.tmp # 删除前逐一确认危险选项:- -r:递归删除目录- -f:强制删除不提示(慎用!)- -v:显示删除详情15,17 - mkdir - 目录创建mkdir project # 创建单层目录
mkdir -p app/{src,logs} # 递归创建多级目录
mkdir -m 750 private # 指定目录权限核心选项:- -p:自动创建父目录- -m:设置权限(如750)- -v:显示创建过程21,22 - touch - 文件创建/时间修改touch newfile # 创建空文件
touch -t 202501010000 file # 设置时间戳
touch -r ref.txt target.txt # 同步参考文件时间常用选项:- -a:仅修改访问时间- -m:仅修改修改时间- -t:自定义时间格式23,25 - find - 文件搜索find /var -name “*.log” # 按名称搜索
find . -size +100M # 查找超过100MB的文件
find /tmp -mtime -7 # 查找7天内修改的文件高级选项:- -type:按文件类型过滤(f/d/l)- -exec:对结果执行命令(如删除)- -maxdepth:限制搜索深度18,20 - ln - 创建文件链接ln -s /opt/app/bin app_bin # 创建符号链接
ln file1 file2_hardlink # 创建硬链接区别说明:- 硬链接:共享inode,不可跨文件系统- 软链接:独立inode,可跨文件系统26,28 - tar - 文件打包压缩tar czvf backup.tar.gz dir/ # 创建gzip压缩包
tar xzvf backup.tar.gz -C /restore # 解压到指定目录
tar tf archive.tar # 查看包内文件列表常用参数:- c:创建压缩包- x:解压文件- z:使用gzip压缩- v:显示操作过程29,31 - tree - 目录树形展示tree # 显示当前目录结构
tree -L 2 # 限制显示层级深度
tree -d # 仅显示目录实用选项:- -a:显示隐藏文件- -I:过滤指定模式文件- -o:输出结果到文件
安全提示:1. 执行删除命令前先用ls确认路径172. 修改系统目录时建议搭配sudo提权153. 使用find的-exec参数时需测试命令安全性20
二、Linux系统监控核心命令详解
- top - 进程实时监控top -d 5 # 每5秒刷新
top -p PID # 跟踪指定进程核心功能:- 实时显示CPU、内存、进程状态1,2- 支持交互操作(按P/M/T键排序进程)常用选项:- -b:批处理模式- -n:指定刷新次数- -u:过滤指定用户进程交互命令:- Shift+M:按内存占用排序- k:终止进程- q:退出界面 - free - 内存使用分析free -h # 人性化显示(GB/MB)
free -s 10 # 每10秒自动刷新数据解读:- Total:总物理内存- Used:已用内存(含buff/cache)- Available:可用内存6,7重要选项:- -t:显示内存+交换空间总量- -l:显示高低内存统计- –si:使用1000进制计算单位 - df - 磁盘空间监控df -hT # 显示文件系统类型
df -i # 查看inode使用关键参数:- -a:显示所有文件系统(含虚拟文件系统)- -x:排除指定文件系统类型- –output:自定义输出字段(如source,fstype)典型场景:- 排查磁盘空间不足问题9- 检测NFS挂载状态 - du - 目录空间分析du -sh /var/log # 统计目录总大小
du -c .log # 显示多个文件总大小实用选项:- –max-depth=1:限制统计层级- –exclude=”.tmp”:排除特定文件- -a:显示所有文件详情高级技巧:- 结合sort排序:du -h | sort -hr - uptime - 系统运行状态uptime -p # 易读格式显示运行时间
uptime -s # 显示系统启动时间输出解读:- 当前时间、运行时长、登录用户数- 1/5/15分钟负载平均值15,17负载警戒值:- 单核CPU:1.0为满载临界点- 四核CPU:4.0为满载临界点 - uname - 系统信息查询uname -a # 显示全部信息
uname -r # 查看内核版本核心参数:- -m:硬件架构(x86_64/arm)- -o:操作系统名称- -v:内核构建时间典型应用:- 验证系统架构是否支持软件安装- 检查内核版本是否满足安全要求18,19 - lscpu - CPU架构解析lscpu -p # 显示处理器拓扑
lscpu -e=cpu,node # 显示NUMA节点信息重要信息:- 物理核心数(Core(s) per socket)- 逻辑处理器数(CPU(s))- 缓存层级(L1/L2/L3)- 支持的指令集(AVX/SSE)21,22性能分析:- 超线程状态:Thread(s) per core >1 - lsblk - 块设备管理lsblk -f # 显示文件系统信息
lsblk -t # 树形结构展示核心功能:- 显示设备挂载点(MOUNTPOINT)- 识别LVM逻辑卷(TYPE=lvm)- 查看设备UUID24,25组合用法:- lsblk -o NAME,SIZE,RO,TYPE,MOUNTPOINT
专家建议:1. 使用watch -n 5 free -h实现动态监控2. 结合grep过滤关键信息(如df | grep /dev/sda1)3. 定期检查/proc/meminfo获取更详细内存数据
四、网络诊断与连接测试
- ping - 网络连通性测试ping -c 4 baidu.com # 发送4个探测包
ping -I eth0 -s 1500 # 指定网卡和包大小核心选项:- -c:指定发送次数- -i:设置发包间隔(默认1秒)- -w:总执行超时时间- -s:自定义数据包大小(默认56字节)- -t:设置TTL生存时间2,3 - netstat - 网络状态查看netstat -tulnp # 查看所有监听端口及进程
netstat -s # 显示协议统计信息常用参数:- -t:仅显示TCP连接- -u:显示UDP连接- -l:列出监听状态- -p:显示进程信息- -r:显示路由表6,8 - ss - 套接字统计(netstat替代)ss -ta state established # 显示已建立的TCP连接
ss -ltp # 查看监听端口及进程优势特性:- 显示TCP内部状态(如syn-recv/time-wait)- 支持连接状态过滤- 性能比netstat快10倍9,11 - curl - 多协议数据传输curl -o file.zip https://url # 下载文件
curl -X POST -d @data.json API_URL # POST请求核心功能:- 支持HTTP/HTTPS/FTP等37种协议- 可设置请求头(-H)/超时(–max-time)- 文件上传(-F)和Cookie管理(-b)12,13 - wget - 非交互式下载wget -c -P /download URL # 断点续传并指定目录
wget –limit-rate=200k URL # 限速下载特色功能:- 递归下载整个网站(-r)- 后台下载(-b)- 支持FTP认证(–ftp-user)15,17 - ssh - 安全远程登录ssh user@192.168.1.1 -p 2222 # 指定端口连接
ssh -i key.pem ubuntu@ec2-host # 密钥认证登录高级用法:- 远程命令执行:ssh host “ls /tmp”- 端口转发:-L/-R 参数- 配置文件:~/.ssh/config20 - ifconfig - 接口配置查看ifconfig eth0 192.168.1.2 netmask 255.255.255.0 up
ifconfig eth0 promisc # 启用混杂模式主要功能:- 查看IP/掩码/MAC地址- 启用/禁用网卡(up/down)- 设置MTU值(-mtu)注意:推荐使用iproute2的ip命令替代21,22
五、用户权限 - chmod - 文件权限控制chmod 755 script.sh # 数字模式设置权限
chmod u+x,g-w,o=r file.txt # 符号模式组合调整核心功能:- 修改文件/目录的读(r=4)、写(w=2)、执行(x=1)权限- 支持递归操作(-R参数)和权限继承4,5特殊权限:- SUID(4):执行时继承所有者权限(如/usr/bin/passwd)- SGID(2):目录新建文件继承父目录组- Sticky Bit(1):仅所有者可删除目录文件(如/tmp) - chown - 所有权管理chown user:group data.log # 修改所有者和所属组
chown -R www:web /var/www # 递归修改目录所有权关键选项:- -R:递归操作目录及子文件- -v:显示详细操作过程- –reference:参照文件权限批量设置6,7安全限制:- 仅root用户或具备sudo权限者可执行 - sudo - 特权执行sudo apt update # 临时获取root权限
sudo -u postgres psql # 以指定用户身份执行配置要点:- 通过/etc/sudoers定义权限规则(需visudo编辑)- 支持用户/组别名、命令白名单、免密操作9,11日志审计:- 所有sudo操作记录在/var/log/auth.log - passwd - 密码管理passwd # 修改当前用户密码
passwd -l username # 锁定指定账户重要选项:- -d:删除用户密码- -e:强制下次登录修改密码- -S:查看密码状态(加密算法/过期时间)12,14安全策略:- 密码复杂度规则存储在/etc/security/pwquality.conf - useradd - 用户创建useradd -m -s /bin/bash dev # 创建用户并生成家目录
useradd -G docker,admin sysop # 指定附加组核心参数:- -u:指定UID- -g:设置主组(默认创建同名组)- -e:设置账户过期时间15,17配置文件:- /etc/default/useradd 定义默认shell、家目录等
安全操作建议:1. 使用visudo代替直接编辑/etc/sudoers防止语法错误92. 定期执行chkuser检查异常用户账户173. 生产环境建议禁用root直接登录,使用sudo提权11
六、文本过滤与搜索
- grep - 模式匹配搜索grep “error” app.log # 基础搜索
grep -r –include=”*.log” “404” /var # 递归搜索特定文件类型核心选项:- -i:忽略大小写2,5- -v:反向匹配(排除模式)3- -E:启用扩展正则表达式4- -A/-B/-C:显示匹配行前后内容4- -o:仅输出匹配部分4 - sed - 流式文本编辑sed ‘s/foo/bar/g’ file.txt # 全局替换
sed ‘/^#/d’ config.conf # 删除注释行核心功能:- 替换(s)、删除(d)、追加(a)、插入(i)等操作9,10- 支持正则表达式和地址范围匹配- 原地编辑文件(-i参数)11
七、结构化数据处理 - awk - 字段处理引擎awk -F: ‘{print $1,$7}’ /etc/passwd # 提取指定字段
awk ‘$3 > 1000 {sum+=$3} END{print sum}’ data.txt # 数值统计核心特性:- 自动分割字段(-F指定分隔符)8- 内置变量(NR/NF/FILENAME)7- 支持数学运算和数组操作6 - sort - 数据排序sort -n -k2 data.txt # 按第二列数值排序
sort -u -t’,’ -k3,3 users.csv # 去除重复行关键选项:- -n:数值排序22- -r:逆序输出- -k:指定排序列范围- -t:自定义分隔符20
八、文件内容查看 - cat - 文件连接输出cat -n server.log # 显示行号
cat file1 file2 > merged.txt # 文件合并实用技巧:- 与重定向配合创建文件- 查看二进制文件(-v参数)12- 显示不可见字符(-A参数)13 - less - 交互式浏览less -N +F app.log # 实时跟踪日志更新
less -p “ERROR” debug.log # 跳转到首个匹配项高级功能:- 反向搜索(?命令)- 书签标记(m标记)17- 多文件切换(:n/:p)16
九、日志处理专用 - tail - 尾部内容追踪tail -f -n100 access.log # 实时监控最后100行
tail -c 1G bigfile.log # 查看末尾1GB内容关键参数:- -f:持续跟踪文件变化19- –pid:关联进程监控18- -s:设置刷新间隔19 - uniq - 重复行处理sort file.txt | uniq -c # 统计重复次数
uniq -d -w10 codes.txt # 显示前10字符重复的行注意事项:- 需先排序后处理25- -c:显示出现次数20- -u:仅显示唯一行25
专家建议:1. 组合使用命令:grep过滤 → sed清洗 → awk分析 → sort/uniq统计12. 处理大文件时优先使用less代替cat防止内存溢出153. 日志分析黄金组合:tail -f | grep | awk 19
十、Linux进程管理核心命令详解
- ps - 进程状态查看ps aux # 显示所有进程详细信息(BSD风格)
ps -ef # 显示完整格式的进程树(UNIX风格)
ps -p 1234 # 查看指定PID的进程信息核心功能:- 实时快照显示进程状态(PID/CPU/内存等)- 支持多种输出格式(树状/线程/自定义字段)关键选项:- -e:显示所有进程(包括系统进程)- -f:显示完整格式(含父进程PPID)- -u:按用户过滤进程- –sort:按CPU或内存排序1,3典型应用:- 排查高负载进程:ps aux –sort=-%cpu | head - kill - 进程终止控制kill -15 1234 # 正常终止进程(SIGTERM)
kill -9 1234 # 强制终止无响应进程(SIGKILL)
killall nginx # 终止所有同名进程信号说明:- 1(SIGHUP):重载配置(如nginx -s reload)- 2(SIGINT):终端中断(等效Ctrl+C)- 9(SIGKILL):强制终止(无法被捕获)- 19(SIGSTOP):暂停进程(配合18继续)7,8高级技巧:- 批量终止:ps aux | grep ‘python’ | awk ‘{print $2}’ | xargs kill -9 - nohup - 守护进程运行nohup ./start.sh &> output.log & # 后台运行并重定向输出
nohup tail -f access.log & # 持续监控日志核心特性:- 忽略SIGHUP信号(终端断开仍运行)- 默认输出到nohup.out文件- 需配合&符号后台运行9,11安全建议:- 生产环境建议使用systemd管理长期服务 - bg - 后台作业控制Ctrl+Z # 暂停前台进程
bg %1 # 将1号作业放入后台运行
bg # 恢复最近暂停的作业使用场景:- 暂停耗时操作(如大文件压缩)后继续后台运行- 结合jobs命令查看作业列表12,14注意事项:- 后台作业仍与终端关联(需nohup实现完全脱离) - fg - 前台作业恢复fg %2 # 将2号作业调至前台
fg # 恢复最近后台作业核心功能:- 恢复交互式操作(如vim编辑)- 查看后台任务输出结果- 支持作业号/进程名匹配15,16组合用法:- jobs查看作业列表 → fg %n恢复指定作业
安全操作指南:1. 生产环境慎用kill -9,优先尝试SIGTERM进行优雅终止82. 使用nohup时建议显式指定输出文件(避免污染nohup.out)3. 批量操作前用ps/pgrep验证目标进程3,6
Linux软件管理核心命令详解
- apt - Debian系包管理sudo apt update && sudo apt upgrade # 更新+升级全系统
sudo apt install -y nginx=1.18.0 # 指定版本安装核心功能:- 管理.deb软件包(Ubuntu/Debian)- 自动处理依赖关系1,2常用选项:- purge:完全删除软件包及配置- autoremove:清理无用依赖- list –installed:查看已安装包配置文件:- /etc/apt/sources.list(软件源配置) - yum - RHEL系包管理yum install httpd –setopt=skip_missing_names_on_install=False # 强制依赖检查
yum history undo 15 # 回滚第15次操作核心特性:- 基于RPM包管理(CentOS/RHEL)- 支持事务回滚功能6,8关键命令:- check-update:检查可用更新- provides */vim:查找文件所属包- localinstall:安装本地rpm包 - rpm - 包安装器rpm -ivh –nodeps oracle-instantclient.rpm # 强制安装
rpm -qa | grep python3 # 查询已安装包核心参数:- -q:查询操作(结合-a查所有)- -e –test:模拟卸载- -V:验证包完整性9,10特殊用法:- rpmbuild –rebuild:从源码构建rpm- –root=/mnt:指定根目录(系统修复) - dnf - 新一代YUMdnf module enable postgresql:12 # 启用模块
dnf repoquery –requires httpd # 查看依赖改进特性:- 并行依赖解析(速度提升20%+)- 模块化软件管理12,14高级功能:- group install “开发工具”:安装包组- copr enable:启用第三方仓库- history rollback:事务回滚 - systemctl - 服务管理systemctl enable –now docker # 启用并立即启动
systemctl mask firewalld # 完全禁用服务核心功能:- 管理系统服务生命周期- 控制开机自启动15,16常用操作:- list-dependencies:查看服务依赖- isolate graphical.target:切换运行级别- edit nginx.service:修改服务配置
运维经验:1. 生产环境建议使用apt-mark hold锁定关键包版本22. 通过yum-plugin-versionlock防止意外升级63. systemd-analyze blame分析启动耗时服务17
归档压缩三剑客详解
- tar - 多格式归档工具tar -czvf backup.tar.gz /data # 创建gzip压缩包
tar -xvf archive.tar.xz -C /restore # 解压xz压缩包到指定目录核心功能:- 支持打包、压缩、解压一体化操作1,2- 处理多种压缩格式:.tar/.tar.gz/.tar.xz等3- 保留文件权限和目录结构4关键选项:- -c:创建归档文件- -x:解压归档文件- -z:使用gzip压缩/解压- -J:使用xz压缩/解压- -v:显示操作过程- -f:指定归档文件名- –exclude:排除指定文件3典型用法:- 增量备份:tar -czvf backup.tar.gz –listed-incremental=snapshot.file /data5- 排除日志文件:tar -czvf app.tar.gz –exclude=”*.log” /var/www3 - zip - 跨平台压缩工具zip -er secure.zip secret.doc # 创建加密压缩包
zip -r -s 2g split.zip large_dir/ # 拆分压缩大文件核心特性:- 生成.zip格式压缩包,兼容Windows系统6,7- 支持文件加密和拆分压缩6,7- 保留文件注释和时间戳8常用参数:- -r:递归处理目录- -e:设置压缩密码- -s:指定分卷大小(如2g=2GB)- -x:排除指定文件- -q:静默模式操作6应用场景:- 批量压缩图片:zip images.zip *.jpg *.png- 备份网站文件:zip -r site_backup.zip /var/www/html7 - unzip - 压缩包解压专家unzip -l archive.zip # 查看压缩包内容
unzip -o -d /target data.zip # 强制覆盖解压到指定目录核心能力:- 支持密码验证解压加密包9- 选择性解压特定文件10- 自动处理中文编码11关键选项:- -d:指定解压目录- -o:覆盖已有文件- -l:列出压缩包内容- -P:指定解压密码- -x:排除指定文件9典型操作:- 解压部分文件:unzip data.zip “*.csv” -d /reports- 修复损坏压缩包:unzip -F broken.zip -d recovered10
专家建议:1. 重要备份使用tar.xz格式(高压缩率),临时传输用zip格式(兼容性好)3,72. 解压前务必用tar -tf或unzip -l查看文件结构,防止”tar炸弹”攻击1,43. 加密敏感文件时优先使用AES-256加密算法(zip -e采用传统加密存在风险)7,9
十一、Linux磁盘管理双核心命令详解
- fdisk - 磁盘分区专家fdisk -l /dev/sda # 查看指定磁盘分区表
fdisk /dev/sdb # 进入交互式分区模式核心功能1,3:- 创建/删除主分区、扩展分区、逻辑分区- 修改分区类型(MBR/GPT)- 支持扇区级别的分区调整- 查看磁盘布局和分区信息交互模式命令2,4:- n:新建分区(支持主/扩展分区)- d:删除指定编号的分区- t:修改分区类型代码(如82=swap)- p:打印当前分区表- w:写入磁盘并退出- q:放弃更改退出典型用法:- 初始化新硬盘:fdisk /dev/sdb → n → p → [回车默认参数] → w- 创建swap分区:t → 82 → w- 查看分区类型列表:l命令 - lsblk - 块设备侦查兵lsblk -f -o NAME,FSTYPE,SIZE,MOUNTPOINT # 带文件系统信息
lsblk -d -e 7 # 排除指定设备核心功能6,7:- 显示树形设备层级关系- 展示磁盘/分区的物理路径- 显示文件系统类型和挂载点- 支持SCSI设备详细信息查询关键选项8:- -f:显示文件系统/LABEL/UUID- -m:显示设备权限信息- -p:显示完整设备路径- -t:显示拓扑结构- -e:排除指定设备号典型用法:- 快速查看所有存储设备:lsblk -a- 检查外置设备挂载:lsblk -f | grep -v ‘loop’- 获取SCSI设备详情:lsblk -S
操作安全建议5:1. 使用fdisk前务必通过lsblk确认目标设备2. 分区操作前建议执行partprobe -s更新内核分区表3. 大容量磁盘(>2TB)建议使用parted创建GPT分区
十二、日志分析双剑客
- journalctl - systemd日志分析引擎journalctl -u nginx –since “09:00” -p err # 查看指定服务错误日志
journalctl -k -b -1 # 检查上次启动的内核日志核心功能:- 查看系统/内核/服务日志(支持二进制日志存储)- 按时间/服务/优先级/用户等多维度过滤- 支持实时日志跟踪(-f)和分页浏览关键选项:- -u:按服务单元过滤(如docker.service)- -k:显示内核日志- -b:指定启动编号(-b -1为上次启动)- -p:按日志级别过滤(0=紧急 7=调试)- –disk-usage:显示日志占用空间- –vacuum-size=500M:清理日志保留指定空间 - tail - 文件尾部追踪专家tail -f -n100 /var/log/syslog # 实时监控最后100行
tail -c 100M large.log # 查看文件末尾100MB内容核心特性:- 实时监控文件追加内容(-f参数)- 支持按行(-n)/字节(-c)控制显示范围- 结合管道实现动态日志分析(如tail -f | grep error)高级技巧:- 多文件跟踪:tail -f app.log access.log- 中断重连:用-F替代-f自动重载文件- 反向查看:tail -r(需安装coreutils扩展)
十三、linux硬件信息 - lscpu - CPU架构分析器lscpu -e=CPU,CORE,SOCKET,CACHE # 显示核心拓扑和缓存信息
lscpu -p –extended # 可解析格式输出物理ID核心参数:- -e:自定义输出列(支持CPU/CORE/SOCKET等)- -p:解析友好格式输出- -y:显示物理ID而非逻辑ID- -c:仅显示在线CPU核心数典型输出内容:- 架构类型(x86_64/ARM)- 核心/线程/插槽数量- CPU频率范围(MHz)- 缓存层级结构(L1/L2/L3) - lspci - PCI设备探测器lspci -vv -s 00:1f.2 # 显示指定插槽设备详情
lspci -k # 显示驱动和内核模块关键功能:- 列出所有PCI/PCIe设备(包括USB控制器)- 显示设备厂商ID/设备ID/硬件版本- 支持十六进制配置空间查看(-x/-xxx)实用参数:- -t:树状拓扑显示- -nn:显示数字编码的厂商和设备ID- -d [vendor]:[device]:按ID过滤设备 - lsblk - 块设备拓扑大师lsblk -f -o NAME,FSTYPE,MOUNTPOINT # 显示文件系统及挂载点
lsblk -m # 查看设备权限信息核心特性:- 树形显示磁盘/分区/LVM/RAID关系- 支持文件系统类型/UUID/LABEL显示- 可查看设备物理路径和SCSI信息常用选项:- -d:仅显示磁盘不展示分区- -b:以字节显示精确容量- -i:禁用ASCII艺术线简化输出- -S:列出SCSI设备详细信息
专家建议:1. 日志分析黄金组合:journalctl -f -u service | grep ERROR1,42. 硬件排障流程:lspci→lsblk→lscpu 逐步确认硬件识别状态9,123. 生产环境日志管理:定期用journalctl –vacuum-time=7d清理日志3
sed/grep/awk全景解析
文本分析三剑客:sed/awk/grep 全景解析
一、前世今生与技术定位
■ grep:诞生于1974年UNIX V5系统1,4,源自ed编辑器中的”g/re/p”(全局正则表达式打印)操作,成为首个正则表达式搜索工具
■ sed:1977年由Lee E. McMahon开发4,基于ed编辑器思想实现流式编辑,适合非交互式批量文本修改
■ awk:1977年由Alfred Aho、Peter Weinberger和Brian Kernighan开发6,8,首创基于数据字段的编程模型,成为结构化数据处理标杆
二、核心功能与基础用法对比
工具核心能力典型命令示例
grep模式匹配/行级过滤grep -iRn “error” *.log
sed流式文本编辑sed ‘s/old/new/g; 5d’ file
awk字段处理/统计计算awk ‘{sum+=$3} END{print sum}’ data
三、高阶技巧与组合应用
grep进阶能力
■ 上下文控制:grep -C3 “panic” 显示匹配前后3行9
■ 多模式匹配:grep -E “error|warning” 支持扩展正则10
■ 二进制处理:grep -a “text” binary 强制解析二进制文件9sed黑魔法
■ 多行处理:sed ‘N; s/\n//‘ 合并相邻行1
■ 条件分支:/start/,/end/ s/old/new/ 范围替换4
■ 模式空间交换:h;n;G 实现行重排序1awk编程范式
■ 多维数组:awk ‘{cnt[$1]++} END{for(k in cnt) print k,cnt[k]}’ 分组统计7
■ 数学计算:awk ‘BEGIN{print log(10)}’ 内置数学函数8
■ 网络通信:awk ‘/GET/ {print | “curl -X POST”}’ 管道调用外部命令6
四、现代衍生产品
性能增强版
■ ack/ag/rg:支持.gitignore的快速递归搜索工具(基于grep思想)9
■ jq:JSON专用处理工具(awk的领域特化版)语言扩展版
■ perl:整合三剑客功能的全能脚本语言
■ miller:支持CSV/JSON的现代数据工具(awk精神延续)
黄金组合技巧:
- 日志分析流水线:grep “ERROR” | sed ‘s/.*[//‘ | awk ‘{print $1}’ | sort | uniq -c10
- 数据清洗三板斧:grep过滤无效行 → sed修正格式 → awk生成统计报表8
- 正则表达式最佳实践:优先使用PCRE标准(grep -P)处理复杂模式9
table {
border-collapse: collapse;
width: 100%;
margin: 20px 0;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
}
th {
background-color: #f8f9fa;
}
blockquote {
border-left: 3px solid #0073aa;
padding-left: 15px;
color: #666;
}
code {
background: #f6f7f8;
padding: 2px 5px;
border-radius: 3px;
}
引用说明
1 sed命令详解(吴易娃)
4 sed原理与高级用法(Linux社区)
6 awk编程指南(开发者社区)
7 awk高级技巧(技术博客)
8 grep实战手册(Worktile)
9 grep高级教程(开发者指南)
10 三剑客组合应用(技术总结)
从实验室到云宇宙:DPDK的进化之路
从实验室到云宇宙:DPDK的进化之路
2025年3月22日
一、网络革命的破局者
2009年,英特尔实验室的Venky Venkatesan团队面对一个严峻挑战:传统网络设备专用芯片(ASIC)虽性能强劲,但存在价格昂贵(单台设备百万级)、升级困难(硬件迭代周期2-3年)、生态封闭三大致命缺陷3,4。此时网络接口速率已突破10Gbps,而通用CPU主频仍停留在3GHz,硬件性能瓶颈日益凸显。
团队创造性地提出”用户态网络协议栈”构想,通过绕过操作系统内核、多核并行处理和零拷贝技术,使通用服务器获得专业设备级性能。这个颠覆性理念催生了DPDK的雏形,犹如给服务器装上了”网络涡轮增压器”3,7。
二、开源社区的崛起
2011年:6WIND等厂商首次提供商业支持,DPDK开始进入通信设备领域1,3
2013年:英特尔以BSD协议开源DPDK,同年成立dpdk.org社区,标志技术生态正式形成1,4
2015年:IBM中国研究院完成Power架构移植,Freescale中国团队实现ARM支持,打破x86垄断格局1,3
开源让DPDK从实验室技术蜕变为行业标准,思科、红帽、VMware等巨头从技术消费者转变为贡献者。至2020年,社区已汇集300+企业开发者,代码提交量年均增长40%1,6。
三、核心技术的魔法揭秘
技术原理性能提升用户态驱动绕过内核协议栈减少80%延迟轮询模式替代中断处理CPU利用率提升3倍大页内存2MB/1GB内存页TLB缺失减少90%
以零拷贝技术为例,传统网络数据需经历网卡→内核缓存→用户空间的两次复制,而DPDK通过DMA直接映射实现网卡→应用内存的直达通道,单此优化即可提升45%吞吐量5,8。
四、未来网络的基石
5G边缘计算:在华为5G基站中,DPDK实现μs级时延保障,支持百万级并发连接6,7
云原生网络:红帽将DPDK集成至OpenShift,容器网络性能提升7倍6,8
AI网络加速:结合NVIDIA DPU,实现AI训练数据吞吐量突破400Gbps6
正如Linux基金会专家所言:”DPDK重新定义了软件与硬件的边界,让网络创新不再受限于硅晶片的物理限制”8。
引用来源:1,3,4,5,6,7,8
DPDK进化之路, 从实验室到云宇宙DPDK, DPDK网络技术发展, DPDK在云计算中的应用, 网络革命的破局者DPDK, DPDK技术演进历程, DPDK从实验室到云宇宙, 2009年DPDK起源, DPDK未来发展趋势, 网络加速技术DPDKDPDK进化之路, 从实验室到云宇宙DPDK, DPDK网络技术发展, DPDK在云计算中的应用, 网络革命的破局者DPDK, DPDK技术演进历程, DPDK从实验室到云宇宙, 2009年DPDK起源, DPDK未来发展趋势, 网络加速技术DPDK
系统编程核心书籍深度解析
一、系统编程核心书籍深度解析
《Unix环境高级编程》(APUE)
核心价值:被誉为UNIX编程”圣经”,覆盖文件I/O、进程控制、信号处理等底层机制(参考《Unix网络编程》5)
技术亮点:包含400+系统调用详解,如进程创建(fork/exec)和文件描述符操作
第三版新增线程控制和IPv6支持,符合SUSv4标准实战场景:开发高性能服务端程序,如数据库中间件(参考《高性能MySQL》1)
《深入理解计算机系统》(CSAPP)
全栈视角:从汇编语言到缓存优化,揭示软硬件交互原理(参考《计算机组成与设计》2)
关键章节:数据表示:揭秘整数溢出和浮点精度陷阱
并发编程:信号量实现与线程池架构设计学习建议:配合缓冲区溢出攻击实验加深理解(参考《微服务设计》4)
二、网络编程权威指南详解
《Unix网络编程》(UNP)
核心架构:
对比select/poll/epoll等I/O模型差异
详解RPC实现原理与HTTP服务器构建方法工程价值:书中代码可直接用于构建高并发服务器(参考《Linux高性能服务器编程》5)
《TCP/IP详解 卷1》
协议解析:
逐层拆解以太网帧结构(参考《计算机网络:自顶向下方法》2)
Wireshark演示三次握手和滑动窗口机制学习路径:建议与《Beej’s Guide》搭配实践(参考《TCP/IP高效编程》5)
三、进阶学习路线规划
入门阶段(1-3个月)
搭建Linux虚拟机环境,使用gcc/gdb调试基础网络程序
基于Python Socket库实现简易聊天室(参考《Python编程:从入门到实践》4)
专家建议:初学者可先阅读《操作系统导论》虚拟化章节2,理解进程调度基本原理后再深入网络协议栈。
3. 架构师成长路径
研读《设计数据密集型应用》分布式章节[3](@ref)
参与Nginx/Redis等开源项目源码贡献(参考《Go语言设计与实现》[4](@ref))
四、配套工具与资源
开发调试工具集
协议分析:Wireshark抓包工具(参考《WireShark网络分析》[1](@ref))
性能优化:perf监控CPU缓存命中率,valgrind检测内存泄漏
延伸阅读推荐
《Beej's Guide》 - 免费Socket编程教程(参考《TCP/IP网络编程》[5](@ref))
CSAPP官网实验项目 - 涵盖缓冲区溢出等经典案例