4、Linux基础命令(下):文本编辑(vim/nano)、权限管理(chmod, chown)、用户管理
好,咱们接着聊。上一章我们把文件操作和网络命令过了一遍,这一章我带你搞定三个日常开发中绕不开的话题:文本编辑、权限管理和用户管理。说白了,这三样东西你玩不转,在嵌入式Linux开发里寸步难行。
我刚开始做嵌入式那会儿,最头疼的就是在终端里改配置文件。没有图形界面,全靠键盘。后来用熟了,反而觉得比鼠标点来点去快多了。你想想看,远程连上一块开发板,几秒钟改完配置重启服务,那种掌控感,确实爽。
4.1 文本编辑器:vim 与 nano
嵌入式Linux环境里,你大概率没有图形界面。所以,学会用终端文本编辑器是基本功。我个人习惯用 vim,但我也得承认,nano 对新手更友好。咱们两个都讲,你选一个先上手。
4.1.1 vim:编辑器之神
vim 的学习曲线确实陡。我第一次用 vim,想退出都退不出来,最后直接拔电源了。嗯,这里要注意,vim 有几种模式,你得先搞明白。
- 普通模式(Normal mode):刚打开 vim 就是这个模式。可以移动光标、复制粘贴、删除文本。
- 插入模式(Insert mode):按
i进入,这时候才能打字。按Esc回到普通模式。 - 命令模式(Command mode):在普通模式下按
:进入,可以保存退出、搜索替换。
核心操作速查
# 打开文件
vim myfile.txt
# 进入插入模式
i
# 保存并退出(在命令模式下)
:wq
# 强制退出不保存
:q!
# 撤销上一步操作(普通模式下)
u
# 复制当前行(普通模式下)
yy
# 粘贴(普通模式下)
p
我在项目中遇到过最尴尬的事:在客户现场调试,用 vim 改了一个关键配置文件,结果忘了保存就退出了。从那以后,我养成了一个习惯——改完文件立刻 :w 保存,不等到最后。
我的小技巧:如果你不小心按了 Ctrl+S 锁住了终端,别慌,按 Ctrl+Q 解锁。这个坑我踩过好几次。
4.1.2 nano:轻量级选择
如果你觉得 vim 太折腾,nano 是个好选择。它把所有操作提示都显示在屏幕底部,几乎不需要记忆。
# 打开文件
nano myfile.txt
# 保存:Ctrl+O
# 退出:Ctrl+X
# 搜索:Ctrl+W
# 复制一行:Alt+6
# 剪切一行:Ctrl+K
说白了,nano 就是「所见即所得」。你按什么键,它就做什么事。我一般用 nano 来快速修改配置文件,比如改个 IP 地址、换个端口号。但写代码的话,我还是用 vim,毕竟功能更强大。
4.2 权限管理:chmod 与 chown
Linux 是个多用户系统,权限管理是它的核心安全机制。你想想看,如果谁都能改系统文件,那不乱套了?
4.2.1 文件权限的基本概念
用 ls -l 查看文件,你会看到类似这样的输出:
-rwxr-xr-- 1 root root 1234 Apr 10 10:00 myapp
这串字符怎么读?我教你一个口诀:
| 位置 | 含义 |
|---|---|
| 第1位 | 文件类型(- 普通文件,d 目录,l 链接) |
| 第2-4位 | 文件所有者(owner)的权限 |
| 第5-7位 | 文件所属组(group)的权限 |
| 第8-10位 | 其他用户(others)的权限 |
每个权限位用 r(读)、w(写)、x(执行)表示。没有权限就是 -。
4.2.2 chmod:修改权限
chmod 有两种用法:符号模式和数字模式。我推荐你用数字模式,简洁明了。
数字权限速查表
| 数字 | 权限 | 二进制 |
|---|---|---|
| 7 | rwx(读写执行) | 111 |
| 6 | rw-(读写) | 110 |
| 5 | r-x(读执行) | 101 |
| 4 | r--(只读) | 100 |
| 0 | ---(无权限) | 000 |
# 给所有者所有权限,组和其他用户只读执行
chmod 755 myapp
# 给所有用户添加执行权限
chmod +x myapp
# 递归修改目录权限
chmod -R 755 /home/project
我曾经犯过一个低级错误:把一个关键脚本设成了 777(所有人都有全部权限)。结果被同事不小心改坏了,排查了半天。记住,权限要遵循「最小化原则」——只给够用的权限。
注意:永远不要对系统文件使用 chmod 777。这等于把家门钥匙挂在门外,谁都能进。
4.2.3 chown:修改文件所有者
chown 用来改变文件或目录的所属用户和组。这在多用户协作时特别有用。
# 修改文件所有者为 alice
chown alice myfile.txt
# 同时修改所有者和组
chown alice:developers myfile.txt
# 递归修改目录
chown -R alice:developers /home/project
我一般在部署嵌入式应用时,会把应用程序的所有权交给一个专用的运行用户,比如 appuser。这样即使程序有漏洞,攻击者也只能拿到普通用户权限,动不了系统核心。
4.3 用户管理
嵌入式Linux虽然通常只有一个用户(root),但在做产品开发时,你最好学会创建和管理用户。为什么呢?因为用 root 跑所有服务,风险太大了。
4.3.1 用户与组的基本概念
每个用户都有一个唯一的 UID(用户ID)。组是为了方便管理权限而存在的。一个用户可以属于多个组。
| 命令 | 作用 |
|---|---|
whoami |
查看当前用户名 |
id |
查看当前用户的 UID、GID 和所属组 |
cat /etc/passwd |
查看所有用户信息 |
cat /etc/group |
查看所有组信息 |
4.3.2 创建和管理用户
# 创建用户(同时会创建同名组和家目录)
useradd -m -s /bin/bash alice
# 设置密码
passwd alice
# 创建组
groupadd developers
# 将用户添加到组
usermod -aG developers alice
# 删除用户
userdel -r alice
这里有个细节:-m 参数会自动创建家目录,-s 指定登录 shell。我建议你创建用户时都加上这两个参数,否则用户可能连登录都登不了。
避坑指南:我曾经在批量创建用户时忘了加 -m,结果所有新用户都没有家目录,登录后直接进了根目录。排查了半天才发现是这个问题。
4.3.3 sudo:临时提权
普通用户想执行管理员命令怎么办?用 sudo。但前提是,这个用户必须在 /etc/sudoers 文件里被授权。
# 以 root 身份执行命令
sudo apt update
# 切换到 root 用户
sudo -i
# 编辑 sudoers 文件(推荐用 visudo,语法检查)
visudo
在嵌入式开发中,我通常只给少数几个开发人员 sudo 权限。其他人用普通用户就够了。你想想看,如果每个人都能 sudo rm -rf /,那后果不堪设想。
4.4 本章知识体系
下面这张图帮你理清这一章的核心逻辑:
这一章的内容就到这里。文本编辑、权限管理、用户管理,这三样东西你练熟了,嵌入式Linux开发的基本功就算打扎实了。别急,慢慢来,多敲几遍命令,肌肉记忆就形成了。
可可精品资料库