Linux常用命令及调试
1、linux常用命令速记
嵌入式开发常用Linux命令速查表(含全称)
(标⭐的是高频核心命令)
1. 文件与目录操作
命令(缩写) | 命令全称 | 作用 | 示例 |
---|---|---|---|
ls ⭐ |
List Directory | 列出目录内容 | ls -l (详细列表) |
cd ⭐ |
Change Directory | 切换目录 | cd /opt |
pwd |
Print Working Directory | 显示当前路径 | pwd |
cp ⭐ |
Copy | 复制文件/目录 | cp file1 file2 |
mv ⭐ |
Move | 移动/重命名文件 | mv old.txt new.txt |
rm ⭐ |
Remove | 删除文件 | rm -r dir (递归删除目录) |
mkdir |
Make Directory | 创建目录 | mkdir project |
find ⭐ |
- | 搜索文件 | find / -name "*.c" |
grep ⭐ |
Global Regular Expression Print | 文本搜索 | grep "error" log.txt |
2. 权限与用户管理
命令(缩写) | 命令全称 | 作用 | 示例 |
---|---|---|---|
chmod ⭐ |
Change Mode | 修改文件权限 | chmod 755 script.sh |
chown |
Change Owner | 修改文件所有者 | chown user:group file |
sudo ⭐ |
Superuser Do | 以root权限执行命令 | sudo apt install gcc |
passwd |
Password | 修改用户密码 | passwd |
3. 系统信息与监控
命令(缩写) | 命令全称 | 作用 | 示例 |
---|---|---|---|
ps ⭐ |
Process Status | 查看进程 | ps aux (显示所有进程) |
top ⭐ |
- | 实时监控系统资源 | top |
free |
- | 查看内存使用 | free -h (人类可读格式) |
df |
Disk Free | 查看磁盘空间 | df -h |
uname |
Unix Name | 查看系统信息 | uname -a (内核版本等) |
4. 网络与调试
命令(缩写) | 命令全称 | 作用 | 示例 |
---|---|---|---|
ifconfig ⭐ |
Interface Configuration | 查看/配置网络接口 | ifconfig eth0 |
ping ⭐ |
Packet Internet Groper | 测试网络连通性 | ping 192.168.1.1 |
netstat |
Network Statistics | 查看网络连接/端口 | netstat -tulnp |
ssh ⭐ |
Secure Shell | 远程登录 | ssh ********** |
scp ⭐ |
Secure Copy | 远程文件传输 | scp file.txt user@ip:/path |
strace ⭐ |
System Trace | 跟踪系统调用 | strace ./app |
5. 嵌入式开发专用
命令(缩写) | 命令全称 | 作用 | 示例 |
---|---|---|---|
file |
- | 查看文件类型 | file firmware.bin |
strings |
- | 提取二进制文件中的字符串 | strings firmware.bin |
objdump ⭐ |
Object Dump | 反汇编二进制文件 | objdump -d program.elf |
readelf |
Read ELF | 查看ELF文件信息 | readelf -a program.elf |
dd ⭐ |
Data Duplicator | 烧录镜像到SD卡 | dd if=image.img of=/dev/sdX |
mount ⭐ |
- | 挂载文件系统 | mount /dev/sda1 /mnt |
面试速记口诀
“查文件用
ls
find
grep
,调权限靠chmod
sudo
; 看进程ps
top
,连网络ping
ssh
; 嵌入式烧录dd
,调试必会strace
。”
附:命令全称的意义
- 帮助理解命令功能:如
scp
(Secure Copy)明确表示“安全复制”。 - 避免死记硬背:通过全称联想作用(如
chmod
→Change Mode→修改权限模式)。 - 面试加分项:解释命令时提到全称,展现知识深度。
掌握这些命令及其全称,能更系统化地应对嵌入式开发中的各类需求!
2、GDB常见的调试命令?什么是条件断点?
GDB调试命令详解(嵌入式开发版)
一、具体回答(技术细节)
1. GDB常用命令
命令 | 作用 | 示例 |
---|---|---|
gdb <program> |
启动GDB调试程序 | gdb ./main.elf |
break <location> ⭐ |
设置断点(函数名/行号/地址) | break main 或 break *0x8000 |
run ⭐ |
运行程序 | run arg1 arg2 |
next (n ) ⭐ |
单步执行(跳过函数) | n |
step (s ) ⭐ |
单步进入函数 | s |
continue (c ) ⭐ |
继续运行到下一个断点 | c |
print <var> (p ) ⭐ |
打印变量值 | p counter |
backtrace (bt ) ⭐ |
查看调用栈(定位崩溃点) | bt |
info registers |
查看寄存器值(嵌入式关键!) | info reg |
x/<format> <addr> |
检查内存内容(嵌入式常用) | x/10x 0x20000000 (16进制显示) |
disassemble |
反汇编当前函数 | disassemble main |
set var=<value> |
修改变量值 | set var=5 |
watch <var> |
设置数据断点(变量修改时触发) | watch counter |
2. 条件断点(Conditional Breakpoint)
定义
在满足特定条件时触发的断点,避免频繁中断。
用法
break <location> if <condition>
示例
break main.c:42 if counter == 5 # 当counter等于5时暂停
二、方便记忆的版本(面试背诵)
1. GDB命令速记口诀
“启GDB,设断点(
break
),跑程序(run
);
单步next
跳过函,step
进函继续continue
;
查变量用backtrace
;
嵌入式加info reg
,改内存用x
。”
2. 条件断点速记
“条件断点
break if
,变量满足才暂停。”
示例:break main.c:10 if x>5
附:嵌入式调试场景示例
-
硬件寄存器检查
(gdb) x/4x 0x40021000 # 查看STM32的GPIO寄存器
-
死锁调试
(gdb) thread apply all bt # 查看所有线程堆栈
-
崩溃分析
(gdb) bt full # 显示完整调用栈和局部变量
掌握这些命令和技巧,能高效解决嵌入式开发中90%的调试问题!
3、多进程调试是什么?如何进行多进程调试?
一、多进程调试的详细解释
1. 多进程调试是什么?
在嵌入式或Linux系统中,多进程调试是指当一个程序通过fork()
创建子进程后,如何对父进程和子进程进行分别或同步调试的过程。
- 典型场景:
- Web服务器(如Nginx)创建子进程处理请求。
- 嵌入式系统守护进程(如设备监控服务)。
2. 为什么需要多进程调试?
问题 | 后果 | 调试需求 |
---|---|---|
子进程行为异常 | 崩溃或逻辑错误 | 需要跟踪子进程的执行流程。 |
父子进程交互问题 | 死锁、数据不同步 | 同时观察父子进程的状态。 |
资源竞争 | 共享内存、文件描述符冲突 | 检查竞争条件的触发时机。 |
3. 多进程调试的三种方法
(1) Attach到子进程(手动附加)
适用场景:子进程长期运行(如守护进程)。 步骤:
-
在代码中让子进程暂停(如sleep()或getchar())。
if (fork() == 0) { // 子进程 printf("Child PID: %d\n", getpid()); getchar(); // 暂停等待调试 // ...子进程逻辑 }
-
通过ps找到子进程PID:
ps aux | grep <program_name>
-
GDB附加调试:
gdb attach <child_pid>
(2) GDB多进程模式(自动控制)
适用场景:需要动态切换调试目标(父子进程交替执行)。 命令:
(gdb) set follow-fork-mode child # 调试子进程(默认父进程继续运行)
(gdb) set follow-fork-mode parent # 调试父进程(默认子进程继续运行)
(gdb) set detach-on-fork off # 同时保留父子进程控制权(可切换调试)
示例:
(gdb) break main
(gdb) run
(gdb) set follow-fork-mode child # 接下来进入子进程调试
(3) gdbserver远程调试(嵌入式常用)
适用场景:目标板(嵌入式设备)运行程序,主机调试。 步骤:
-
目标板启动gdbserver:
gdbserver :1234 ./my_program # 监听1234端口
-
主机连接:
gdb-multiarch ./my_program (gdb) target remote <target_ip>:1234 # 连接到目标板
-
调试多进程:
- 子进程会继承
gdbserver
连接,无需额外配置。
- 子进程会继承
4. 多进程调试的注意事项
问题 | 解决方案 |
---|---|
子进程过早退出 | 在子进程中插入sleep() 或循环等待。 |
父子进程断点混淆 | 用info inferiors 查看进程列表。 |
共享资源冲突 | 检查文件描述符、共享内存的同步状态。 |
二、面试速记版
1. 一句话定义
“多进程调试就是解决
fork()
后父子进程的跟踪问题,方法有三:手动attach
子进程、GDB设follow-fork
、gdbserver
远程调试。”
2. 核心命令速记
场景 | 关键命令 |
---|---|
手动附加子进程 | gdb attach <PID> |
自动跟踪子进程 | set follow-fork-mode child |
远程调试 | gdbserver :1234 ./prog + target remote <ip>:1234 |
3. 高频问题
- Q: 子进程崩溃如何调试?
A: 用
follow-fork-mode child
或attach
到子进程,检查bt
调用栈。 - Q: 父子进程共享资源如何观察?
A: 在GDB中切换进程(
inferior <id>
),分别打印变量值。
三、实际案例
调试子进程崩溃
# 1. 找到崩溃的子进程PID
ps aux | grep my_app
# 2. 附加调试
gdb attach 1234
# 3. 查看崩溃点
(gdb) bt
(gdb) print *shared_var # 检查共享变量
掌握这些方法,能高效解决嵌入式多进程调试中的复杂问题!
#嵌入式软件开发##嵌入式软件开发面经#搜集全网的面试题,对每个题目,先给具体的回答,再给言简意赅版本。 具体的回答方便理解,言简意赅版本方便背诵,快速冲刺面试!