4. Linux基础操作(一):文件系统结构、常用命令与权限管理
说实话,很多刚转嵌入式Linux的朋友,第一关就卡在文件系统上。Windows用惯了,突然面对这种「一切皆文件」的哲学,确实有点懵。我当年第一次用ls命令时,看着满屏的绿字白字,心里想的是:这都什么玩意儿?
别急,这一章咱们就把Linux的「家底」翻个底朝天。你不需要背命令,跟着我走一遍,自然就记住了。
4.1 Linux文件系统结构:一棵倒挂的树
Linux的文件系统,说白了就是一棵倒着长的树。根是/,所有目录、文件、设备、甚至网络连接,都挂在这棵树上。你想想看,Windows有C盘、D盘,Linux只有一个/,其他都是它的子节点。
核心原则:在Linux里,没有盘符的概念。U盘插上去,你得手动把它「挂载」到某个目录下才能访问。我第一次用U盘时找了半天没找到,后来才明白——得先mount。
下面这张图,是我自己整理的嵌入式开发最常用的几个目录。你把这几个记住,日常开发基本够用。
我的小技巧:嵌入式开发中,你最常打交道的是 /etc(改配置)、/dev(操作硬件)、/home(放代码)。至于 /proc 和 /sys,调试驱动时会频繁用到。
4.2 常用命令:每天都要敲的「肌肉记忆」
命令这东西,光看没用,得敲。我建议你打开终端,跟着我下面的例子,一个一个试。敲完一遍,基本就记住了。
4.2.1 ls — 看看目录里有什么
ls 是 list 的缩写,就是列出目录内容。它有几个常用参数,我列在下面:
| 参数 | 作用 | 示例 |
|---|---|---|
-l |
长格式显示(权限、大小、时间) | ls -l |
-a |
显示隐藏文件(以.开头的文件) | ls -a |
-h |
人类可读的大小(K、M、G) | ls -lh |
-R |
递归显示子目录 | ls -R |
# 看看当前目录有什么
ls
# 长格式查看,我最常用的组合
ls -lh
# 查看隐藏文件(比如 .bashrc)
ls -la
注意:我曾经在调试一个驱动时,怎么都找不到设备节点。折腾了半天,才发现文件名前面有个点——是个隐藏文件。所以,遇到「找不到文件」的情况,先试试 ls -a。
4.2.2 cd — 在目录间跳来跳去
cd 是 change directory 的缩写。用法很简单:
# 进入 /etc 目录
cd /etc
# 返回上一级目录
cd ..
# 回到自己的家目录
cd ~
# 回到刚才的目录(这个我经常用)
cd -
嗯,这里要注意:cd .. 是两个点,不是三个。我见过有人敲 cd ...,然后一脸懵。
4.2.3 cp — 复制文件
复制文件,格式是 cp 源文件 目标位置。
# 复制文件
cp file1.txt file2.txt
# 复制目录(必须加 -r)
cp -r mydir/ /backup/
# 保留文件属性(时间戳、权限等)
cp -p file1.txt file2.txt
避坑指南:复制目录时,-r 参数是必须的。我刚开始学的时候,有一次想备份整个项目目录,忘了加 -r,结果只复制了一个空文件。项目差点丢了,吓得我赶紧学了 rsync。
4.2.4 mv — 移动或重命名
mv 有两个用途:移动文件,或者重命名。其实本质是一样的——改变文件路径。
# 重命名文件
mv oldname.txt newname.txt
# 移动文件到另一个目录
mv file.txt /home/user/docs/
# 移动并重命名
mv file.txt /home/user/docs/newfile.txt
4.2.5 rm — 删除文件(小心!)
Linux 没有回收站。删了就没了。真的没了。
# 删除文件
rm file.txt
# 强制删除(不提示)
rm -f file.txt
# 删除目录
rm -rf mydir/
血的教训:我曾经在服务器上执行 rm -rf /(注意那个斜杠),然后……嗯,系统直接挂了。千万别在生产环境乱敲 rm -rf,尤其是 root 用户。我建议你每次敲 rm 之前,先 ls 确认一下要删的是什么。
4.2.6 mkdir — 创建目录
# 创建单个目录
mkdir myproject
# 创建多级目录(-p 参数)
mkdir -p project/src/include
-p 参数很实用。你想啊,如果 project 目录不存在,直接 mkdir project/src 会报错。加上 -p,它会自动创建所有不存在的父目录。
4.3 文件权限管理:谁可以做什么
Linux 是多用户系统,所以权限管理很重要。你想想看,如果任何人都能删掉系统文件,那不乱套了?
每个文件都有三组权限:
- 所有者(owner):文件的主人
- 所属组(group):文件所属的用户组
- 其他人(others):既不是所有者,也不在组里的用户
每组权限又分三种操作:
| 权限 | 字母表示 | 数字表示 | 含义 |
|---|---|---|---|
| 读 | r | 4 | 可以查看文件内容 |
| 写 | w | 2 | 可以修改文件内容 |
| 执行 | x | 1 | 可以运行文件(脚本、程序) |
用 ls -l 查看时,你会看到类似这样的输出:
-rwxr-xr-- 1 root root 1234 Apr 10 10:00 myprogram
这串字符怎么读?我教你:
- 第一个字符
-表示普通文件(d是目录,l是链接) - 接着三个一组:
rwx(所有者权限)、r-x(组权限)、r--(其他人权限)
所以 -rwxr-xr-- 的意思是:所有者可以读写执行,组内用户可以读和执行,其他人只能读。
4.3.1 chmod — 修改权限
修改权限有两种方式:字母法和数字法。我推荐你用数字法,简洁明了。
# 数字法:给 myprogram 设置 755 权限
chmod 755 myprogram
# 字母法:给所有者加上执行权限
chmod u+x myprogram
# 给其他人去掉写权限
chmod o-w myprogram
数字怎么算?把权限对应的数字加起来:
- rwx = 4+2+1 = 7
- r-x = 4+0+1 = 5
- r-- = 4+0+0 = 4
所以 755 就是所有者 7,组 5,其他人 5。
我的习惯:可执行程序用 755,普通文件用 644,脚本文件用 755。这样既安全又方便。记住这三个数字,基本够用。
4.3.2 chown — 修改文件所有者
有时候你需要把文件的所有权转给另一个用户。比如,你用 root 创建了一个文件,想给普通用户用。
# 修改文件所有者为 user1
chown user1 myfile.txt
# 同时修改所有者和组
chown user1:group1 myfile.txt
# 递归修改目录下所有文件
chown -R user1:group1 mydir/
注意:chown 需要 root 权限。普通用户不能把自己的文件「送」给别人。这是安全机制,防止你乱扔文件。
4.4 本章小结
这一章的内容,说白了就是嵌入式Linux开发的「基本功」。文件系统结构是地图,常用命令是工具,权限管理是规则。这三样东西,你每天都会用到。
我建议你找个虚拟机或者开发板,把今天学的命令挨个敲一遍。别怕敲错,Linux 没那么容易坏。真搞坏了,重装系统也是一种学习嘛。
记住:命令敲多了,自然就熟了。下次遇到「Permission denied」或者「command not found」,你就知道该查什么了。