chown · 转移主人

上游:ls(查看文件现在属于谁)· sudo(chown 几乎总是要 sudo)· chmod(权限已经设好,再设主人) 下游:systemctl(服务文件需要正确的主人) 参见:chmod(chmod 改权限,chown 改主人,两个是搭档)


一句话是什么

chown 把文件的主人从一个用户改成另一个用户—— 就像房产转让,这个文件以后归谁管。


为什么需要它

Linux 每个文件都有一个主人(owner):

$ ls -la ~/mc-server/bedrock_server
-rwxr-xr-x 1 aaron aaron 120M bedrock_server

            主人   所在组

大部分时候,你自己创建的文件,主人就是你自己。 但有几个场景需要改主人:

场景 1:用 sudo 创建的文件,主人会变成 root,你自己反而动不了:

sudo cp server.properties /etc/mc/
ls -la /etc/mc/server.properties
# -rw-r--r-- 1 root root  server.properties
# 主人是 root,aaron 无法编辑

场景 2:服务器程序需要用特定用户身份运行(安全隔离):

# Minecraft 服务器应该用 mc-user 运行,不是 root
sudo chown -R mc-user:mc-user ~/mc-server/

核心用法

公式

sudo chown [新主人]:[新组] 文件或目录

常用命令表

操作命令说明
改主人sudo chown aaron 文件改主人,组不变
同时改主人和组sudo chown aaron:aaron 文件主人和组都改
递归改目录sudo chown -R aaron:aaron 目录/目录及其所有内容
改回 rootsudo chown root:root 文件还给系统管理
只改组sudo chown :组名 文件主人不变,只改组

配合 chmod 使用

# 标准操作:先改主人,再设权限
sudo chown -R aaron:aaron ~/mc-server/
chmod -R 755 ~/mc-server/

Linux 笑话

有个新手第一次搭服务器,每次都用 sudo 运行所有程序, 包括 Minecraft 服务器。

几周之后,他的 /home/aaron/ 目录长这样:

$ ls -la ~/ | head
drwxr-xr-x  root  root   mc-server/
-rw-r--r--  root  root   server.log
-rw-------  root  root   我的笔记.txt

他自己的文件,他自己打不开了。

cat ~/我的笔记.txt
# Permission denied

全都是 root 的。他需要的命令是:

sudo chown -R aaron:aaron ~/

把整个家目录还给自己。

教训:只在真正需要的地方用 sudo, 不然文件的主人会变成 root,你自己变成了客人。


例题精讲

📗 初探 Starter — 看清楚文件的主人

任务:查看不同文件的主人,理解主人概念。

# 查看你自己的文件
ls -la ~/学习基地/
# aaron aaron ... (你自己的)
 
# 查看系统文件
ls -la /etc/hosts
# root root ... (系统的)
 
# 查看 /tmp 里的文件
ls -la /tmp/
# 各种用户都有
 
# 查看当前登录用户是谁
whoami
# aaron
 
# 查看自己属于哪些组
groups
# aaron sudo

你学到了什么:每个文件都有主人(owner)和所属组(group)。 系统文件属于 root,你的文件属于 aaron。


📘 应用 User — 修复 root 创建的文件

任务:用 sudo 复制一个文件之后,发现主人变成了 root,把它改回来。

# 模拟场景:用 sudo 创建一个文件
sudo bash -c 'echo "配置内容" > ~/练习/root-config.txt'
 
# 查看主人(变成 root 了)
ls -la ~/练习/root-config.txt
# -rw-r--r-- 1 root root  root-config.txt
 
# 尝试修改(会失败)
echo "修改" >> ~/练习/root-config.txt
# Permission denied
 
# 改回 aaron
sudo chown aaron:aaron ~/练习/root-config.txt
 
# 验证
ls -la ~/练习/root-config.txt
# -rw-r--r-- 1 aaron aaron  root-config.txt
 
# 现在可以修改了
echo "修改成功" >> ~/练习/root-config.txt

你学到了什么sudo 创建的文件归 root,用 chown 拿回来。


📙 管理 Admin — Minecraft 服务器权限完整设置

任务:给 mc-server 目录做完整的权限和主人设置。

# 假设服务器文件已经解压在 ~/mc-server/
 
# 第一步:查看当前状态
ls -la ~/mc-server/
 
# 第二步:确保整个目录属于 aaron
sudo chown -R aaron:aaron ~/mc-server/
 
# 第三步:设置目录权限(进入+读取+写入)
chmod 755 ~/mc-server/
 
# 第四步:设置主程序为可执行
chmod +x ~/mc-server/bedrock_server
 
# 第五步:配置文件只读(防止意外改动)
chmod 644 ~/mc-server/server.properties
chmod 644 ~/mc-server/whitelist.json
 
# 第六步:日志目录允许写入
chmod 755 ~/mc-server/logs/ 2>/dev/null || true
 
# 最终验证
ls -la ~/mc-server/
echo "主人确认:"
stat -c "%U:%G %n" ~/mc-server/bedrock_server

你学到了什么:生产环境权限设置是 chown + chmod 组合拳, 而不是单独用一个命令。


官方文档参考

man chown        # 完整手册
chown --help     # 快速选项列表

chown user:group 文件;只改主人省略冒号后部分,只改组用 :group。 在线:https://manpages.ubuntu.com/chown


节点链接

上游(先理解这些)

  • ls ← ls -la 看清文件的当前主人
  • sudo ← chown 几乎总是需要 sudo
  • chmod ← 权限对,主人对,才能正常使用文件

同层(权限体系的完整组合)

  • chmod ← 一个改主人,一个改权限,两者是搭档

下游(正确的主人才能做这些)

  • systemctl ← 系统服务需要特定用户运行
  • shell-script ← 脚本的主人决定了谁能编辑它

实战


节点版本:v1.0 · 2026-04-20 下一个节点建议:tarsystemctl