作为一名嵌入式开发者,熟练掌握Linux终端操作是必备技能。终端是我们与系统交互的主要界面,高效使用终端能极大提升开发效率。让我们从最基础的快捷键开始,逐步深入Linux命令世界。
在Linux环境下工作时,这些快捷键组合能让你事半功倍:
注意:在远程服务器上工作时,Ctrl+C/V的复制粘贴可能失效,此时需要用鼠标右键菜单或Shift+Insert进行粘贴。
当你打开终端,通常会看到类似这样的提示符:
code复制user@hostname:~$
这个提示符包含重要信息:
理解提示符能帮助你时刻掌握自己的工作环境,避免在错误的位置执行危险操作。
ls命令是使用频率最高的命令之一,它有几个实用参数:
bash复制ls -l # 详细列表显示(包含权限、所有者、大小等信息)
ls -a # 显示所有文件(包括隐藏文件,Linux中.开头的文件是隐藏文件)
ls -lh # 人类可读的文件大小显示(如K、M、G)
cd命令的几种典型用法:
bash复制cd /path/to/directory # 绝对路径跳转
cd ../relative/path # 相对路径跳转
cd ~ # 返回用户主目录
cd - # 返回上一个工作目录(非常实用!)
经验分享:使用"cd -"可以在两个目录间快速切换,这在比较两个目录内容时特别有用。我经常用它来对比新旧版本代码的差异。
mkdir创建目录时,有几个实用技巧:
bash复制mkdir -p parent/child # 自动创建父目录(如果不存在)
mkdir project{1..5} # 批量创建project1到project5目录
rmdir和rm的区别:
rmdir只能删除空目录rm -r可以递归删除非空目录(慎用!)rm -rf强制删除,没有任何提示(极度危险!)血的教训:永远不要在根目录(/)下使用rm -rf,也不要在重要项目目录中使用通配符rm *。我曾经不小心删除了整个项目备份,花了三天时间恢复。
touch命令除了创建文件,还有个重要用途:
bash复制touch existing_file # 更新文件时间戳,常用于触发构建系统重新编译
cp/mv命令的高级用法:
bash复制cp -a source dest # 归档复制(保留所有属性)
mv *.txt target/ # 使用通配符批量移动文件
提示:在移动大量文件时,可以先使用"ls *.txt"确认匹配的文件列表,再执行mv,避免误操作。
vi是Linux系统自带的强大文本编辑器,掌握它能让你在任何环境下都能编辑文件。基本工作流程:
vi filename 打开/创建文件i进入插入模式(底部显示-- INSERT --)Esc返回命令模式:wq保存并退出常用命令模式操作:
yy复制当前行,p粘贴dd删除当前行/pattern搜索文本,n下一个匹配项:set number显示行号(调试时非常有用)结合管道和grep等命令可以实现强大文本处理:
bash复制grep "error" log.txt | wc -l # 统计错误出现次数
sort data.txt | uniq -c # 排序并统计重复行
个人技巧:在查看长日志文件时,我常用
less +F file.log命令,它能实时跟踪文件末尾的新内容(类似tail -f),但还支持上下滚动查看历史内容。
典型的C程序编译执行过程:
hello.cgcc hello.c -o hello./hello常用GCC选项:
bash复制gcc -Wall -Wextra -o output input.c # 启用所有警告
gcc -g -o debug_prog source.c # 包含调试信息
使用gdb调试的基本步骤:
bash复制gcc -g -o test test.c # 编译时加入调试信息
gdb ./test # 启动调试
(gdb) break main # 在main函数设置断点
(gdb) run # 运行程序
(gdb) next # 单步执行
(gdb) print variable # 查看变量值
调试心得:在嵌入式开发中,经常遇到段错误(Segmentation fault)。使用
ulimit -c unlimited开启core dump,然后用gdb分析core文件能快速定位问题。
这些组合命令能解决日常开发中的大部分问题:
bash复制# 查找文件内容
grep -rn "keyword" /path/to/search
# 查看磁盘使用情况
df -h | grep -v tmpfs # 排除tmpfs文件系统
# 查找大文件
find / -type f -size +100M -exec ls -lh {} \;
# 查看进程占用资源
top -o %MEM # 按内存排序
问题1:执行脚本报"Permission denied"
chmod +x script.sh问题2:磁盘空间不足但找不到大文件
lsof | grep deleted 查看已被删除但仍在占用的文件问题3:网络连接问题
ping google.com测试连通性traceroute google.com查看路由路径在嵌入式开发中,我经常遇到交叉编译工具链的问题。一个实用的检查清单:
一个简单的备份脚本示例:
bash复制#!/bin/bash
# 备份脚本
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
tar -czf $BACKUP_DIR/backup_$DATE.tar.gz /path/to/backup
find $BACKUP_DIR -mtime +7 -delete # 删除7天前的备份
给脚本添加执行权限:chmod +x backup.sh
设置定时任务:crontab -e添加0 2 * * * /path/to/backup.sh
关键性能指标查看命令:
bash复制vmstat 1 # 查看系统整体状态
iostat -dx 1 # 磁盘I/O统计
sar -n DEV 1 # 网络流量监控
dmesg | tail -20 # 查看内核日志
在资源受限的嵌入式系统中,我常用free -m监控内存使用,用strace -p PID分析进程系统调用。
修改~/.bashrc可以个性化终端:
bash复制# 显示git分支(开发常用)
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
嵌入式开发中特别有用的工具:
screen/tmux:终端复用,防止SSH断开导致工作丢失rsync:高效文件同步,适合部署到开发板sshfs:通过SSH挂载远程目录strace/ltrace:系统调用/库调用跟踪在嵌入式Linux移植过程中,我总结了一个小技巧:使用buildroot或yocto构建系统时,先在小配置上测试通过,再逐步添加功能,能避免很多兼容性问题。