3、Linux基础命令(上):文件管理命令(ls, cd, cp, mv, rm)、目录结构、路径概念
说实话,很多刚接触嵌入式Linux的朋友,第一关就卡在命令行上。我当年刚转行做嵌入式时,面对黑乎乎的终端也是一脸懵。但你别怕,文件管理命令是Linux最基础、最常用的操作,就像Windows里的鼠标双击一样自然。今天我就带你把这些命令彻底搞明白。
3.1 Linux目录结构:从根开始
Linux的目录结构和Windows完全不同。Windows有C盘、D盘,而Linux只有一个根目录,用 / 表示。所有文件、设备、挂载点都从根出发。
我刚开始用Linux时,总想找“我的电脑”在哪。后来才明白,Linux的哲学就是“一切皆文件”。连硬件设备都被映射成文件,放在 /dev 目录下。
核心目录速查表
| 目录 | 用途 | 我的经验 |
|---|---|---|
/ |
根目录,一切从这里开始 | 别乱删东西,否则系统会崩 |
/bin |
存放常用命令(ls、cp等) | 嵌入式系统里这个目录很小 |
/sbin |
系统管理命令(fdisk、ifconfig等) | 普通用户用不了,得加sudo |
/etc |
配置文件存放处 | 我调网络时天天泡在这里 |
/dev |
设备文件(串口、USB等) | 嵌入式开发最常打交道的目录 |
/home |
用户主目录 | 你的代码、项目都放这 |
/opt |
第三方软件安装目录 | 交叉编译工具链我习惯放这 |
/tmp |
临时文件,重启就清空 | 别放重要数据 |
你想想看,为什么嵌入式Linux的根文件系统要这么设计?说白了就是为了模块化。每个目录各司其职,系统启动时按需挂载。我在做ARM开发板移植时,就经常要裁剪 /usr 和 /lib 目录,把不需要的库删掉,让系统跑得更快。
3.2 路径概念:绝对 vs 相对
路径就是文件的位置。Linux里只有两种路径:绝对路径和相对路径。
绝对路径:从根 / 开始写,比如 /home/pi/project/main.c。不管你在哪,这个路径都指向同一个文件。
相对路径:从当前目录开始写,用 . 表示当前目录,.. 表示上级目录。比如你在 /home/pi 下,想进入 project 目录,直接 cd project 就行。
我的小技巧:写脚本时尽量用绝对路径,避免因为当前目录不同而出错。但在命令行里操作,用相对路径更省事。我习惯先 pwd 看一下自己在哪,再决定用哪种路径。
3.3 ls:查看文件列表
ls 是 list 的缩写,用来列出目录内容。它是我用得最多的命令,没有之一。
# 基本用法
ls # 列出当前目录
ls /home # 列出指定目录
ls -l # 详细列表(权限、大小、时间)
ls -a # 显示隐藏文件(以.开头的文件)
ls -lh # 人性化显示大小(K、M、G)
ls -lt # 按时间排序
ls -lS # 按大小排序
我记得有一次调试嵌入式设备,发现磁盘空间不够了。用 ls -lhS 按大小排序,一眼就看出是日志文件撑爆了。嗯,这就是经验。
常用组合:ls -la 几乎是我每次登录服务器后的第一件事。看看有没有异常文件,心里有个底。
3.4 cd:切换目录
cd 是 change directory 的缩写。没有它,你寸步难行。
cd /home/pi # 进入指定目录
cd .. # 返回上级目录
cd ~ # 回到用户主目录
cd - # 回到上一个目录(超实用!)
cd / # 回到根目录
注意:cd 和 cd ~ 效果一样,都是回主目录。但 cd - 这个用法很多人不知道,我在两个目录间来回切换时全靠它,省了不少打字时间。
3.5 cp:复制文件或目录
cp 是 copy 的缩写。复制文件很简单,但复制目录时有个坑。
# 复制文件
cp file1.txt file2.txt # 复制并重命名
cp file1.txt /home/pi/ # 复制到指定目录
# 复制目录(必须加 -r)
cp -r dir1 dir2 # 递归复制整个目录
cp -a dir1 dir2 # 保留所有属性(权限、时间戳)
# 常用选项
cp -i file1 file2 # 覆盖前提示(防止误操作)
cp -v file1 file2 # 显示复制过程
我曾经在复制整个项目目录时忘了加 -r,结果只复制了个空目录,代码全丢了。还好有版本控制,不然就惨了。所以复制目录时,-r 一定要带上。
3.6 mv:移动或重命名
mv 是 move 的缩写。它既能移动文件,也能重命名。
# 重命名
mv oldname.txt newname.txt # 文件改名
# 移动
mv file.txt /home/pi/docs/ # 移动到其他目录
mv dir1 dir2 # 移动整个目录(不需要 -r)
# 常用选项
mv -i file1 file2 # 覆盖前提示
mv -v file1 file2 # 显示移动过程
你发现没?mv 移动目录不需要 -r,而 cp 需要。这是很多新手容易搞混的地方。我刚开始也记不住,后来干脆记住:mv 是“搬家”,东西直接搬走;cp 是“复印”,得告诉它要复印整本还是只复印一页。
3.7 rm:删除文件或目录
rm 是 remove 的缩写。这个命令要特别小心,因为Linux没有回收站。
# 删除文件
rm file.txt # 删除单个文件
rm file1.txt file2.txt # 删除多个文件
# 删除目录
rm -r dir1 # 递归删除目录
rm -rf dir1 # 强制删除(不提示,慎用!)
# 安全选项
rm -i file.txt # 删除前逐一确认
血的教训:我曾经在服务器上执行 rm -rf / 命令,还好系统有保护机制没让删。但 rm -rf /home 是真的会删掉的!所以我现在每次用 rm -rf 前,都会先 ls 确认一下路径对不对。
3.8 实战:文件管理组合拳
光讲命令没意思,咱们来点实际的。假设你要在嵌入式开发板上部署一个新程序:
# 1. 先看看当前目录结构
ls -la
# 2. 进入项目目录
cd /home/pi/myproject
# 3. 复制编译好的程序到目标目录
cp myapp /opt/bin/
# 4. 备份旧的配置文件
mv /etc/myapp.conf /etc/myapp.conf.bak
# 5. 复制新的配置文件
cp myapp.conf /etc/
# 6. 清理临时文件
rm -rf /tmp/build_temp
# 7. 确认部署结果
ls -lh /opt/bin/myapp
这一套组合拳打下来,部署工作基本就完成了。我在实际项目中,每天都要重复这样的操作几十次。熟练了之后,闭着眼睛都能敲出来。
我的习惯:给常用命令设置别名。比如在 .bashrc 里加上 alias ll='ls -la',这样每次敲 ll 就能看到详细信息,省时省力。
好了,文件管理命令就讲到这里。这些命令看着简单,但用好了能极大提升效率。你想想看,在嵌入式开发中,经常要在宿主机和目标板之间传文件、备份配置、清理日志,这些操作都离不开 ls、cd、cp、mv、rm。多练练,形成肌肉记忆,后面学起来就轻松多了。