
嵌入式必学Shell命令精讲进程、磁盘与网络操作实战嵌入式设备资源有限进程跑飞了要能快速定位磁盘满了要能找到罪魁祸首网络不通要能逐层排查。这套命令就是你的听诊器和手术刀。一、进程管理命令1.1 进程是什么简单说进程就是运行中的程序。你写了一段C代码编译生成可执行文件它静静地躺在磁盘上只是个文件。当你执行它操作系统把它加载到内存、分配CPU资源它就变成了进程。每个进程有唯一的PIDProcess ID。1.2 ps — 查看进程快照ps命令拍摄进程的照片显示某一瞬间的进程状态。# 最常用组合查看当前用户的所有进程psaux# 查看特定进程psaux|greppython# 只看当前终端的进程ps-ef# 以树形结构显示进程父子关系psaxjfps 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虚拟内存大小KBRSS物理内存大小KBSTAT进程状态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 — 更好用的topsudoaptinstallhtophtophtop是top的增强版彩色界面、支持鼠标操作、直观的进度条用过就回不去了。1.5 kill — 终止进程kill1234# 发送SIGTERM信号优雅终止进程kill-91234# 发送SIGKILL信号强制杀死进程kill-151234# SIGTERM默认信号允许进程清理资源killallpython3# 按进程名杀掉所有python3进程pkill-fapp.py# 按命令行匹配杀进程SIGTERM vs SIGKILL的区别特性SIGTERM (15)SIGKILL (9)能否被捕获能进程可自定义处理不能内核直接终止资源清理有机会清理没有立即终止推荐程度首选最后手段实战经验先用kill PIDSIGTERM给进程3-5秒清理时间。如果还活着再上kill -9。直接kill -9可能导致临时文件残留、数据库未正常关闭等问题。1.6 后台运行进程# 末尾加让程序在后台运行python3 app.py# nohup终端关闭后进程不会被杀死nohuppython3 app.py# 输出默认重定向到nohup.out文件# 指定输出文件nohuppython3 app.pyapp.log21# 查看后台任务jobs# 查看当前终端的后台任务fg# 将最近的后台任务调到前台bg# 让暂停的任务在后台继续运行二、磁盘管理命令2.1 df — 查看磁盘使用情况df# 查看所有挂载分区的使用情况df-h# 人性化显示GB/MBdf-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# 查看某个目录总大小-ssummary-hhumandu-sh*# 查看当前目录下每个子目录/文件大小du-h--max-depth1/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-size100M2.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个包后停止-ccountping-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# ttcp, llistening, nnumeric, pprogramss-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/nginx3.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.bin3.5 scp — 远程文件传输# 从本机传到远程scpfile.tar.gz user192.168.1.100:/home/user/# 从远程传到本机scpuser192.168.1.100:/home/user/log.txt ./# 传目录-rscp-rproject/ user192.168.1.100:/home/user/# 指定端口-P大写scp-P2222file.txt user192.168.1.100:/tmp/3.6 nc — 网络调试利器ncnetcat被誉为网络工具中的瑞士军刀# 在开发板上监听端口等待接收文件nc-l8888received_file.bin# 在PC上发送文件到开发板nc192.168.1.1008888firmware.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 root192.168.1.100:/root/# 6. 开发板上运行chmodx hello ./hello# 7. 如果程序卡死PC上查看psaux|grephello# 找PIDkill-9PID# 强杀五、总结进程管理让你掌控系统运行状态磁盘排查帮你解决空间告警网络调试是嵌入式开发中PC与开发板协同的桥梁。这三组命令是日常开发中使用频率极高的工具建议结合实际开发板多做练习形成完整的调试思维链发现问题→定位问题→解决问题。