4. Linux基础操作(一):文件系统结构、常用命令与权限管理

说实话,很多刚转嵌入式Linux的朋友,第一关就卡在文件系统上。Windows用惯了,突然面对这种「一切皆文件」的哲学,确实有点懵。我当年第一次用ls命令时,看着满屏的绿字白字,心里想的是:这都什么玩意儿?

别急,这一章咱们就把Linux的「家底」翻个底朝天。你不需要背命令,跟着我走一遍,自然就记住了。

4.1 Linux文件系统结构:一棵倒挂的树

Linux的文件系统,说白了就是一棵倒着长的树。根是/,所有目录、文件、设备、甚至网络连接,都挂在这棵树上。你想想看,Windows有C盘、D盘,Linux只有一个/,其他都是它的子节点。

核心原则:在Linux里,没有盘符的概念。U盘插上去,你得手动把它「挂载」到某个目录下才能访问。我第一次用U盘时找了半天没找到,后来才明白——得先mount。

下面这张图,是我自己整理的嵌入式开发最常用的几个目录。你把这几个记住,日常开发基本够用。

嵌入式Linux常用文件系统结构 / (根) /bin /sbin /etc /home /dev /etc/init.d /etc/network /home/root /home/user 各目录说明: • /bin — 用户常用命令(ls, cp, mv 都在这里) • /sbin — 系统管理命令(需要root权限) • /etc — 系统配置文件(网络、启动脚本等) • /home — 用户家目录(每个用户一个文件夹) • /dev — 设备文件(串口、GPIO、LED 都在这里) • /proc — 虚拟文件系统,存放内核和进程信息 • /sys — 另一个虚拟文件系统,用于访问硬件设备

我的小技巧:嵌入式开发中,你最常打交道的是 /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」,你就知道该查什么了。