前两篇把文件和目录的常用操作梳理了一遍,这篇接着往下走,围绕大家问得最多的四块内容展开:用户与用户组、权限体系、打包压缩、进程与服务。我特意把这四块放在一起讲,是因为它们在日常操作里是强关联的——接手一台新服务器,你要先建用户、配权限,再部署代码、起服务,中间必然要跟压缩包打交道,最后还要确认进程是否正常跑起来。这正好是一条完整的运维链路,比孤立地记命令实用得多。
1. 用户与用户组:几个命令解决“多人共用一台机器”的权限问题
先说个我常被问到的点:在 Linux 下新建用户,到底该用 useradd 还是 adduser?网上答案五花八门,有人说这俩没区别,有人说必须用 adduser。实际上两者的关系很简单——adduser 是 CentOS 系(准确的说是 Red Hat 系)对 useradd 做的一个交互式封装,但 Debian/Ubuntu 系的 adduser 则是一个独立的 Perl 脚本,行为跟 useradd 很不一样。大多数生产环境脚本里,大家都直接写 useradd,因为它参数固定、行为可预期,这是我喜欢它的最重要原因。
1.1 useradd 的默认值与真实参数
很多刚接触 Linux 的人跑完 useradd 用户名 之后,就以为完事了,结果一 su 切换过去发现连主目录都没有,环境变量也怪怪的。这是因为 useradd 的默认行为刻意保持了精简——它不会自动创建 home 目录,也不会帮你复制 /etc/skel 下的骨架文件,更不会设置密码。
实际建用户,我至少会用上这几个参数:
bash复制useradd -m -d /home/zhangsan -s /bin/bash -G wheel zhangsan
-m:同时创建用户主目录,并把/etc/skel下的默认配置复制过去-d:指定主目录路径-s:指定登录 shell,默认可能是/bin/sh,没特殊需求我还是建议显式切到 bash-G:把用户加入附加组,比-g(指定主组)更常用,因为一个用户通常需要同时属于多个组
这里有个容易踩的坑:如果你用 useradd 建完用户后直接登录,会卡在密码验证。因为 useradd 默认不设置密码,用户处于锁定状态。必须再执行 passwd zhangsan 来设密码,或者在 useradd 后紧跟一句:
bash复制echo "zhangsan:初始密码" | chpasswd
另外,确认用户是否建好,不要靠猜。我习惯用 id zhangsan 看 uid/gid 和所属组,用 finger zhangsan(如果装了的话)看用户详细信息。注意 uid 会直接决定用户对文件的初始归属判断,后面在权限章节会用到。
1.2 用户组的增删改:groupadd / groupdel / usermod
用户组本身不复杂,核心命令就三个:
bash复制# 新建组
groupadd dev
# 把已有用户加入组(注意是 -aG,-a 表示追加,不加会覆盖原有附加组)
usermod -aG dev zhangsan
# 删除组
groupdel dev
提示:
usermod -G如果忘了-a,会把用户清出所有其他附加组,相当于“踢出了所有群”。在批量改权限的脚本里真的很容易翻车,务必记住追加是-aG而不是-G。
删除用户用 userdel,默认只删用户本身,主目录和邮件池都会留下。想连主目录一起清理,用 userdel -r 用户名。注意:如果用户还有进程在跑,userdel 会提示“user is currently used by process xxxx”,这时候要么先 kill 进程,要么用 -f 强制删除,但我一般不建议强删,容易留下幽灵文件。
1.3 用户切换与提权:su 和 sudo 的细节
多用户系统里,“用谁的身份执行命令”是每天都要面对的问题。最基本的:
bash复制su - zhangsan # 切换到 zhangsan 并加载其完整环境(注意 - 参数)
sudo command # 用 root 权限执行命令
sudo -i # 切换到 root 的完整登录环境
面试里常考 su 和 su - 的区别:前者只切换用户身份,不加载目标用户的环境变量;后者连 PATH、HOME 这些都会切换到目标用户。日常排障时我几乎只用 su -,因为有些工具依赖 PATH 里特定目录,少了 - 会出现“命令明明装了却找不到”的假象。
sudo 的配置集中在 /etc/sudoers,不推荐直接编辑,官方做法是用 visudo 命令修改——它会做语法检查,阻止你写出一份让 sudo 崩溃的配置。常用的给用户授权规则是:
bash复制# 给所有 wheel 组用户完整的 sudo 权限
%wheel ALL=(ALL) ALL
# 只允许用户执行特定命令
zhangsan ALL=(ALL) /bin/s
