嵌入式必学Shell命令精讲:进程、磁盘与网络操作实战
2026/7/14 4:10:41 网站建设 项目流程

嵌入式必学Shell命令精讲:进程、磁盘与网络操作实战

嵌入式设备资源有限,进程跑飞了要能快速定位,磁盘满了要能找到罪魁祸首,网络不通要能逐层排查。这套命令就是你的"听诊器"和"手术刀"。

一、进程管理命令

1.1 进程是什么?

简单说,进程就是运行中的程序。你写了一段C代码,编译生成可执行文件,它静静地躺在磁盘上只是个文件。当你执行它,操作系统把它加载到内存、分配CPU资源,它就变成了进程。每个进程有唯一的PID(Process ID)。

1.2 ps — 查看进程快照

ps命令拍摄进程的"照片",显示某一瞬间的进程状态。

# 最常用组合:查看当前用户的所有进程psaux# 查看特定进程psaux|greppython# 只看当前终端的进程ps-ef# 以树形结构显示进程父子关系psaxjf

ps aux输出各列含义:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 168 11 ? Ss 10:00 0:02 /sbin/init user 1234 2.5 1.3 500 26 pts/0 R+ 10:30 0:01 python3 app.py
含义
USER进程所有者
PID进程ID(杀进程就靠它)
%CPUCPU占用百分比
%MEM内存占用百分比
VSZ虚拟内存大小(KB)
RSS物理内存大小(KB)
STAT进程状态(R=运行,S=睡眠,Z=僵尸,D=不可中断睡眠)
COMMAND启动该进程的命令

1.3 top — 实时进程监控

top是动态版的ps,每隔几秒自动刷新,类似Windows的任务管理器。

top# 启动top

进入top界面后的常用交互操作:

按键功能
P按CPU占用排序
M按内存占用排序
k输入PID杀死进程
1显示各CPU核心详情
q退出
h帮助

top界面头部还有整体系统信息:负载均衡(load average)、总任务数、CPU使用率、内存使用情况等。

load average三个值分别表示1分钟、5分钟、15分钟的系统平均负载。单核CPU下,值超过1.0说明负载较高;4核CPU则4.0是警戒线。

1.4 htop — 更好用的top

sudoaptinstallhtophtop

htoptop的增强版,彩色界面、支持鼠标操作、直观的进度条,用过就回不去了。

1.5 kill — 终止进程

kill1234# 发送SIGTERM信号,优雅终止进程kill-91234# 发送SIGKILL信号,强制杀死进程kill-151234# SIGTERM(默认信号),允许进程清理资源killallpython3# 按进程名杀掉所有python3进程pkill-f"app.py"# 按命令行匹配杀进程

SIGTERM vs SIGKILL的区别

特性SIGTERM (15)SIGKILL (9)
能否被捕获能,进程可自定义处理不能,内核直接终止
资源清理有机会清理没有,立即终止
推荐程度首选最后手段

实战经验:先用kill PID(SIGTERM),给进程3-5秒清理时间。如果还活着,再上kill -9。直接kill -9可能导致临时文件残留、数据库未正常关闭等问题。

1.6 后台运行进程

# 末尾加&,让程序在后台运行python3 app.py&# nohup:终端关闭后进程不会被杀死nohuppython3 app.py&# 输出默认重定向到nohup.out文件# 指定输出文件nohuppython3 app.py>app.log2>&1&# 查看后台任务jobs# 查看当前终端的后台任务fg# 将最近的后台任务调到前台bg# 让暂停的任务在后台继续运行

二、磁盘管理命令

2.1 df — 查看磁盘使用情况

df# 查看所有挂载分区的使用情况df-h# 人性化显示(GB/MB)df-T# 显示文件系统类型df-i# 查看inode使用情况

输出示例:

Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 20G 28G 42% / tmpfs 2.0G 0 2.0G 0% /dev/shm

嵌入式场景:开发板经常遇到存储空间不足,df -h是排查第一步。Use%超过90%就要警惕了。

2.2 du — 查看目录大小

du-sh/home/user# 查看某个目录总大小(-s=summary,-h=human)du-sh*# 查看当前目录下每个子目录/文件大小du-h--max-depth=1/home/user# 只显示一级子目录大小du-sh*|sort-rh# 按大小排序,找出最占空间的目录

实际排查磁盘满的流程:

# 第一步:查看哪个分区满了df-h# 第二步:进入该分区根目录,找出最大的目录cd/sudodu-sh*|sort-rh|head-10# 第三步:进入最大的目录,继续排查cd/varsudodu-sh*|sort-rh|head-10# 通常会发现是/var/log日志文件太大sudorm/var/log/syslog.1# 删除旧日志# 或者用journalctl清理systemd日志sudojournalctl --vacuum-size=100M

2.3 mount/umount — 挂载与卸载

# 查看当前挂载信息mount# 挂载U盘sudomount/dev/sdb1 /mnt/usb# 挂载NFS共享(嵌入式开发常用)sudomount-tnfs192.168.1.100:/shared /mnt/nfs# 卸载sudoumount/mnt/usbsudoumount-l/mnt/usb# 懒卸载(如果设备忙,等不忙了自动卸载)

2.4 fdisk/lsblk — 磁盘分区信息

lsblk# 列出所有块设备(简洁直观)sudofdisk-l# 列出所有磁盘及分区信息(详细)

三、网络操作命令

3.1 ifconfig / ip — 查看和配置网络接口

# 查看所有网络接口ifconfig# 老命令,部分新系统已不预装ipaddr# 新命令,推荐使用ipa# 简写# 查看特定接口ifconfigeth0ipaddr show eth0# 临时配置IP地址sudoifconfigeth0192.168.1.100 netmask255.255.255.0sudoipaddradd192.168.1.100/24 dev eth0# 启用/禁用网卡sudoifconfigeth0 upsudoiplinkseteth0 upsudoiplinkseteth0 down

注意ifconfig配置的IP在重启后会丢失。永久配置需要修改/etc/netplan/配置文件或/etc/network/interfaces

3.2 ping — 测试网络连通性

ping192.168.1.1# 测试局域网网关ping8.8.8.8# 测试外网连通性ping-c4www.baidu.com# 发送4个包后停止(-c=count)ping-i0.5192.168.1.100# 每0.5秒发一次(默认1秒)

ping不通时的排查思路:

1. ping 127.0.0.1 → 网卡驱动是否正常 2. ping 本机IP → IP配置是否正确 3. ping 网关IP → 局域网是否连通 4. ping 8.8.8.8 → 外网是否连通 5. ping www.baidu.com → DNS是否正常

3.3 netstat / ss — 查看网络连接

# 查看所有监听端口netstat-tlnp# t=tcp, l=listening, n=numeric, p=programss-tlnp# 新命令,功能相同但更快# 查看所有连接(含已建立的)netstat-anss-an# 查看路由表netstat-rniproute

输出示例:

Proto Local Address Foreign Address State PID/Program tcp 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd tcp 0.0.0.0:80 0.0.0.0:* LISTEN 5678/nginx

3.4 curl / wget — 网络请求与下载

# 下载文件wgethttps://example.com/file.tar.gzwget-chttps://example.com/file.tar.gz# 断点续传# HTTP请求curlhttp://localhost:8080/api/status# GET请求curl-XPOST http://localhost:8080/api# POST请求curl-Ihttps://www.baidu.com# 只看响应头# 嵌入式场景:下载固件到开发板wgethttp://192.168.1.50:8000/firmware.bin-O/tmp/firmware.bin

3.5 scp — 远程文件传输

# 从本机传到远程scpfile.tar.gz user@192.168.1.100:/home/user/# 从远程传到本机scpuser@192.168.1.100:/home/user/log.txt ./# 传目录(-r)scp-rproject/ user@192.168.1.100:/home/user/# 指定端口(-P,大写)scp-P2222file.txt user@192.168.1.100:/tmp/

3.6 nc — 网络调试利器

nc(netcat)被誉为网络工具中的"瑞士军刀":

# 在开发板上监听端口,等待接收文件nc-l8888>received_file.bin# 在PC上发送文件到开发板nc192.168.1.1008888<firmware.bin# 测试端口是否开放nc-zv192.168.1.10022# 测试SSH端口

四、综合实战:开发板网络调试

场景:开发板通过网线连接PC,需要交叉编译程序并传到开发板运行。

# 1. PC上配置IPsudoifconfigeth0192.168.1.50 netmask255.255.255.0# 2. 开发板上配置IP(通过串口终端)ifconfigeth0192.168.1.100 netmask255.255.255.0# 3. 互ping测试ping192.168.1.100# PC上ping开发板ping192.168.1.50# 开发板上ping PC# 4. PC上交叉编译arm-linux-gnueabihf-gcc-ohello hello.c# 5. scp传到开发板scphello root@192.168.1.100:/root/# 6. 开发板上运行chmod+x hello ./hello# 7. 如果程序卡死,PC上查看psaux|grephello# 找PIDkill-9<PID># 强杀

五、总结

进程管理让你掌控系统运行状态,磁盘排查帮你解决空间告警,网络调试是嵌入式开发中PC与开发板协同的桥梁。这三组命令是日常开发中使用频率极高的工具,建议结合实际开发板多做练习,形成完整的调试思维链:发现问题→定位问题→解决问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询