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 目录,把不需要的库删掉,让系统跑得更快。

Linux 目录结构树 / bin sbin etc dev home opt tmp usr 更多目录...

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。多练练,形成肌肉记忆,后面学起来就轻松多了。

可可精品资料库