Linux基础命令方便介绍(四)
Linux是一个多用户多任务系统。它允许很多人同时登录同一台机器,或者让多个程序并行运行。
对于一些文件我们不希望别人能够随意访问或更改,需要对不同用户设置不同权限,Linux系统用账号体系来管理资源访问。
Linux的用户分三类:
- 超级用户 root
系统的上帝,权限最高,能改一切,也能删自己。 - 普通用户
干日常工作,能在自己家(主目录)里折腾,但不能动系统文件。 - 程序用户
一些系统服务(比如www-data、ftp)用来运行后台进程,不是给人登录用的。
而组(Group)就像一个团队,组里的每个成员都对该组关联的文件夹具有相同权限。
- 每个用户至少属于一个“基本组”(或叫私有组);
- 还可以加入多个“附加组”,用来共享文件或权限。
系统用两个数字标识这些身份:
- UID(User ID)用户标识号
- GID(Group ID)组标识号
当你执行一个命令时,Linux不会看你叫啥名字,而是通过对应UID和GID来查看。
一、用户与组管理相关命令
1. useradd — 添加用户
基本格式
useradd [选项] 用户名
常用选项(说明 + 示例)
-u UID:指定用户的 UID(User ID)。
示例:useradd -u 1500 alice-g 组名/GID:指定用户的初始(基本)组。
示例:useradd -g dev alice-G 组1,组2,...:指定附加组(逗号分隔,不带空格)。
示例:useradd -G sudo,docker alice-d HOME_DIR:指定用户主目录(不指定则默认在/home/目录下生成一个同名文件夹)。
示例:useradd -d /ftp/alice alice-m:创建用户主目录(/etc/skel的内容会被复制)。
示例:useradd -m alice-M:不创建主目录(当你希望手动管理主目录时用)。-s shell:指定登录 shell(如/bin/bash、/sbin/nologin)。
示例:useradd -s /sbin/nologin ftpuser-c "说明文字":用户描述(如真实姓名)。
示例:useradd -c "小明,开发组" xm-e YYYY-MM-DD(年-月-日):帐号过期日期(到期后不能登录)。
示例:useradd -e 2025-12-31 tempuser-f DAYS:密码过期后,多少天禁用账户(-1表示禁用此功能)。-r:创建系统账号(通常 UID 比较小,适用于服务账号)。
示例
useradd -m -s /bin/bash -G devops,git -c "李四" -e 2025-12-31 lisi
创建用户名为lisi的用户,家目录在默认的/home下,其shell登录为bash,附加组为devops,git,用户描述备注是"李四",账号在2025年12月31日过期。
2. passwd — 设置或更改密码
基本格式
passwd [选项] [用户名]
常用选项
- 不带用户名:修改当前用户密码(会提示输入旧密码)。
passwd 用户名:在root账号 修改指定用户的密码。-d 用户名:删除用户密码(允许无需密码登录,通常不安全)。-l 用户名:锁定账户(在/etc/shadow文件对应用户密码字段前加!或*)。-u 用户名:解锁账户。-S 用户名:显示账号状态(是否锁定、最后修改时间等)。--stdin(某些发行版):从标准输入读取密码(常用于脚本,谨慎使用)。
示例
passwd lisi # 交互式修改 lisi 的密码(root 可执行)
passwd -l baduser # 锁定 baduser
passwd -u baduser # 解锁 baduser
passwd -S lisi # 显示状态
3. usermod — 修改用户属性
基本格式
usermod [选项] 用户名
常用选项
-l 新用户名:更改用户名(慎用,需注意主目录、文件所有权)。-d 新主目录:更改主目录位置。通常配合-m一起使用。-m:同时移动旧主目录到新主目录(与-d联用)。-s SHELL:更改登录 shell。-u UID:更改 UID(注意文件所有权需调整)。-g 基本组:更改用户的初始组。-G 组1,组2,...:设置附加组列表(注意:默认会覆盖原附加组,非追加)。-a:与-G联用,追加附加组而不是覆盖(常见组合:usermod -aG docker user)。-e 日期:设置账号过期时间。-L:锁定密码(等同passwd -l)。-U:解锁密码。
示例
usermod -aG docker alice # 将 alice 追加到 docker 组(保留已有附加组)
usermod -d /home/newalice -m alice # 修改并移动主目录
4. userdel — 删除用户
基本格式
userdel [选项] 用户名
常用选项
-r:同时删除用户的主目录和邮件箱等。-f:强制删除(在某些系统上可用,谨慎)。
示例
userdel -r tempuser
5. groupadd / groupdel / gpasswd — 组管理
groupadd-创建组
groupadd [选项] 组名
常用选项
-g GID:指定组的 GID(Group ID)。-r:创建系统组(较小的 GID)。
示例
groupadd -g 1005 dev
groupdel-删除组
groupdel 组名
gpasswd — 管理组成员与组密码
gpasswd [选项] 组名
常用选项
-a 用户 组:向组中添加用户(等同把用户加入该组)。-d 用户 组:从组中删除用户。-M 用户1,用户2:直接设置组成员列表(覆盖)。-r:删除组密码(有些场景下用得少)。-A 管理员列表:设置组管理员。
示例
gpasswd -a alice dev
gpasswd -d alice dev
gpasswd -M alice,bob dev
6. 查询相关:id、groups、finger、who、w、users
id [用户名]:显示 UID、GID、附加组及其 ID。
示例:id alice→uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo)groups [用户名]:列出某用户所属的组(简单列表)。finger [用户名]:显示用户详细信息(部分系统默认未安装,需要finger包)。显示登录时间、主目录、Shell 等。who:列出当前登录用户(每个会话一行)。w:比who更详细,显示用户、登录终端、登录时间、活动和正在运行的命令。users:简洁列出当前登录用户的用户名(不包含其它信息)。
二、权限与所有权管理命令
这些命令直接决定文件/目录谁能做什么,是管理员的日常核心。
1. ls -l(查看权限格式回顾)
示例输出:
-rwxr-sr-- 1 alice dev 1234 2025-01-01 script.sh
解释:
- 以空格分不同列,第一列 10 个字符:文件类型 + 三组权限(属主、属组、其他)。
- 第二列链接数;第三列属主;第四列属组;随后是大小和时间。
2. chmod — 修改权限
基本格式
chmod [选项] 模式 文件...
两种表示法
符号表示法(更直观)
chmod [ugoa][+-=][rwx] 文件
u:属主(user)g:属组(group)o:其他(others)a:所有人(all,相当于 ugo)+:添加权限-:移除权限=:赋值(覆盖原有权限)r、w、x:读/写/执行
示例
chmod u+x script.sh # 给属主添加执行权限
chmod go-w file.txt # 移除属组和其他写权限
chmod a=r file.txt # 所有人只读
chmod g+s /data/project # 给目录设置 setgid,使新建文件继承目录组
数字(八进制)表示法
- 权限数字:
r=4、w=2、x=1。 - 三位分别代表属主、属组、其他。
例如755=7(rwx)5(r-x)5(r-x)。
示例
chmod 644 file.txt # -rw-r--r--
chmod 755 script.sh # rwxr-xr-x
3. chown — 修改属主和属组
基本格式
chown [选项] [属主][:属组] 文件
常用写法
chown 用户 文件:修改属主,属组保持不变。chown :组 文件:只改属组。chown 用户:组 文件:同时改属主和属组。-R:递归修改目录及其所有子项。--from=OLD_OWNER:OLD_GROUP:仅当当前属主属组匹配时才替换(用于安全批量变更)。
示例
chown alice:dev report.txt # 修改report.txt属主为alice,属组为dev
chown :dev /data/project -R # 修改/data目录及其子目录project属组为dev
chown -R www-data:www-data /var/www/html
4. umask — 默认权限掩码
基本概念
umask决定新创建文件/目录的默认权限。- 系统先设定“最大权限”(目录默认为
777,文件默认为666),再用umask去“减掉”对应位。 - 例如
umask 022:新目录默认权限 =777 - 022 = 755;新文件默认 =666 - 022 = 644。
常用操作
umask:显示当前 umask 值(通常以八进制显示)。umask 002:同组用户可写(常用于协作组)。umask 077:最严格,其他人无权限(个人隐私环境)。
示例
umask 022
mkdir newdir # 权限 755
touch newfile # 权限 644
5. 特殊权限位(setuid / setgid / sticky)
- setuid(u+s):可执行文件若设置 setuid,运行时以文件属主的身份执行(常用于需要临时提升权限的工具,如部分系统程序)。
- setgid(g+s):若设置在文件上,运行时以文件属组执行;若设置在目录上,新建文件/目录将继承该目录的组。很有用以便团队共享文件组。
- sticky(t):常见于
/tmp(权限1777),意味着目录内文件只能被属主或 root 删除,即使目录对其他人可写。
查看方式ls -l 中 s, S, t, T 的出现表示这些特殊位。
设置示例
chmod u+s /usr/bin/someprog # 对可执行文件设置 setuid(谨慎)
chmod g+s /data/shared # 对共享目录设置 setgid,便于组协作
chmod 1777 /tmp # sticky 位 + 全写(/tmp 标准)
四、实战示例与流程(将知识落地)
场景 A:为技术组建立共享目录
需求:技术组 dev 的成员可以读写共享目录,其他人无访问权;新建文件自动归 dev 组。
步骤:
groupadd dev # 若组不存在则创建
useradd -m -G dev alice
useradd -m -G dev bob
mkdir -p /data/dev_share
chown root:dev /data/dev_share
chmod 2770 /data/dev_share # 2 -> setgid, 7 -> rwx for owner(root), 7 for group(dev), 0 for others
说明:
2770:设置 setgid(2)使目录中新建文件继承dev组;770让属主和属组可读写执行,其他无权限。
场景 B:给脚本设置只允许属主执行
chown alice:alice /usr/local/bin/myscript.sh
chmod 700 /usr/local/bin/myscript.sh
说明:只有 alice 能读写并执行该脚本,其他人不能访问。
场景 C:备份 /etc 目录并保持属性
cp -a /etc /backup/etc_$(date +%F)
# 或者 rsync -a /etc /backup/etc_YYYY-MM-DD
说明:-a 归档可尽量保留权限、时间戳、符号链接等。
五、常见问题与安全建议(实用小贴士)
- 不要随意把用户加入
sudo或wheel组,只有可信任的管理员才能被授权。 - **谨慎使用
chmod -R和 **chown -R,递归可能意外修改大量文件。先用ls或find确认目标。 - 不要在生产系统上随意设置 setuid 程序,恶意或出错的 setuid 程序会引发安全漏洞。
- 避免在脚本中明文存放密码(如
passwd --stdin),脚本应尽量使用安全机制(比如 PAM、密钥或受限交互)。 - 常备一个普通用户执行日常任务,只有需要时才切换到
root(sudo)以降低误操作风险。 - 使用
umask 002可在协作组环境下方便组内共享;个人主目录建议umask 077。 - 在执行删除或重命名前,先用
ls、find或stat验证目标,尤其是rm -rf。
六、速查表(命令 + 常用选项一览)
- 用户管理:
useradd(-m -d -s -g -G -c -u -e)、usermod(-aG -d -m -s -u -g)、userdel(-r) - 密码:
passwd(-d -l -u -S) - 组管理:
groupadd(-g)、groupdel、gpasswd(-a -d -M) - 查询:
id、groups、finger、who、w、users - 文件/目录:
ls(-l -a -h -R -d)、pwd、cd、mkdir -p、touch、ln -s、cp -a -r -p、mv -i、rm -rf - 查找:
which、find(-name -type -size -mtime -exec -maxdepth) - 权限与所有权:
chmod(符号/数字、-R)、chown(-R)、umask - 特殊位:setuid、setgid、sticky(
u+s、g+s、t)
七、结语(给初学者的练习路径)
按这个进阶顺序练习,会让你很快上手并稳固记忆:
- 在虚拟机中创建几个普通用户,学习
useradd、passwd、usermod、userdel。 - 建立组并把用户加入/移出,练习
groupadd、gpasswd。 - 创建共享目录并用
chown+chmod 2770实现组内协作。 - 练习
find查找大文件并配合du分析磁盘占用。 - 反复练习
chmod的符号/数字表示法,理解 setuid/setgid/sticky 的场景。 - 阅读
/etc/passwd、/etc/shadow、/etc/group,理解这些文件的结构(但不要随意手动编辑shadow)。
浙公网安备 33010602011771号