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。”​

附:命令全称的意义

  1. 帮助理解命令功能:如scp(Secure Copy)明确表示“安全复制”。
  2. 避免死记硬背:通过全称联想作用(如chmod→Change Mode→修改权限模式)。
  3. 面试加分项:解释命令时提到全称,展现知识深度。

掌握这些命令及其全称,能更系统化地应对嵌入式开发中的各类需求!

2、GDB常见的调试命令?什么是条件断点?

GDB调试命令详解(嵌入式开发版)

一、具体回答(技术细节)

1. GDB常用命令

命令 作用 示例
gdb <program> 启动GDB调试程序 gdb ./main.elf
break <location> 设置断点(函数名/行号/地址) break mainbreak *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
查变量用print,看调用栈backtrace
嵌入式加info reg,改内存用x。”

2. 条件断点速记

“条件断点break if,变量满足才暂停。”
示例:break main.c:10 if x>5

附:嵌入式调试场景示例

  1. 硬件寄存器检查

    (gdb) x/4x 0x40021000  # 查看STM32的GPIO寄存器
    
  2. 死锁调试

    (gdb) thread apply all bt  # 查看所有线程堆栈
    
  3. 崩溃分析

    (gdb) bt full            # 显示完整调用栈和局部变量
    

掌握这些命令和技巧,能高效解决嵌入式开发中90%的调试问题!

3、多进程调试是什么?如何进行多进程调试?

一、多进程调试的详细解释

1. 多进程调试是什么?

在嵌入式或Linux系统中,多进程调试是指当一个程序通过fork()创建子进程后,如何对父进程和子进程进行分别或同步调试的过程。

  • 典型场景:
    • Web服务器(如Nginx)创建子进程处理请求。
    • 嵌入式系统守护进程(如设备监控服务)。

2. 为什么需要多进程调试?

问题 后果 调试需求
子进程行为异常 崩溃或逻辑错误 需要跟踪子进程的执行流程。
父子进程交互问题 死锁、数据不同步 同时观察父子进程的状态。
资源竞争 共享内存、文件描述符冲突 检查竞争条件的触发时机。

3. 多进程调试的三种方法

(1) Attach到子进程(手动附加)

适用场景:子进程长期运行(如守护进程)。 ​步骤​:

  1. 在代码中让子进程暂停(如sleep()或getchar())。

    if (fork() == 0) {  // 子进程
        printf("Child PID: %d\n", getpid());
        getchar();      // 暂停等待调试
        // ...子进程逻辑
    }
    
  2. 通过ps找到子进程PID:

    ps aux | grep <program_name>
    
  3. 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远程调试(嵌入式常用)

适用场景:目标板(嵌入式设备)运行程序,主机调试。 ​步骤​:

  1. 目标板启动gdbserver:

    gdbserver :1234 ./my_program  # 监听1234端口
    
  2. 主机连接:

    gdb-multiarch ./my_program
    (gdb) target remote <target_ip>:1234  # 连接到目标板
    
  3. 调试多进程:

    • 子进程会继承gdbserver连接,无需额外配置。

4. 多进程调试的注意事项

问题 解决方案
子进程过早退出 在子进程中插入sleep()或循环等待。
父子进程断点混淆 info inferiors查看进程列表。
共享资源冲突 检查文件描述符、共享内存的同步状态。

二、面试速记版

1. 一句话定义

“多进程调试就是解决fork()后父子进程的跟踪问题,方法有三:手动attach子进程、GDB设follow-forkgdbserver远程调试。”

2. 核心命令速记

场景 关键命令
手动附加子进程 gdb attach <PID>
自动跟踪子进程 set follow-fork-mode child
远程调试 gdbserver :1234 ./prog + target remote <ip>:1234

3. 高频问题

  • Q: 子进程崩溃如何调试? ​A: 用follow-fork-mode childattach到子进程,检查bt调用栈。
  • Q: 父子进程共享资源如何观察? ​A: 在GDB中切换进程(inferior <id>),分别打印变量值。

三、实际案例

调试子进程崩溃

# 1. 找到崩溃的子进程PID
ps aux | grep my_app

# 2. 附加调试
gdb attach 1234

# 3. 查看崩溃点
(gdb) bt
(gdb) print *shared_var  # 检查共享变量

掌握这些方法,能高效解决嵌入式多进程调试中的复杂问题!

#嵌入式软件开发##嵌入式软件开发面经#

搜集全网的面试题,对每个题目,先给具体的回答,再给言简意赅版本。 具体的回答方便理解,言简意赅版本方便背诵,快速冲刺面试!

全部评论

相关推荐

评论
1
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务