chown 命令用于修改文件或目录的所有者(owner)和所属组(group)。这是Linux系统中管理文件权限和所有权的重要命令。
chown [选项] 所有者[:组] 文件或目录
或者:
chown [选项] :组 文件或目录
或者使用UID和GID:
chown [选项] UID:GID 文件或目录
# 将文件file.txt的所有者改为alice
chown alice file.txt
# 使用UID修改文件所有者(假设alice的UID是1001)
chown 1001 file.txt
# 将文件file.txt的所有者改为alice,组改为developers
chown alice:developers file.txt
# 或者使用点号分隔(某些系统)
chown alice.developers file.txt
# 只修改文件的组(等同于chgrp命令)
chown :developers file.txt
# 或者
chown .developers file.txt
# 递归修改整个目录及其内容的所有者和组
chown -R alice:developers /project/
# 显示详细的修改过程
chown -v alice:developers file1.txt file2.txt
# 输出:ownership of 'file1.txt' retained as alice:developers
# 输出:ownership of 'file2.txt' retained as alice:developers
# 将file1.txt的所有者和组设置为与file2.txt相同
chown --reference=file2.txt file1.txt
# 部署网站文件,将所有者设为开发者,组设为Web服务器组
chown -R developer:www-data /var/www/html/
# 设置适当的权限
chmod -R 644 /var/www/html/
find /var/www/html/ -type d -exec chmod 755 {} \;
# 验证权限
ls -la /var/www/html/
# 输出:-rw-r--r-- 1 developer www-data 1024 Jan 10 10:00 index.html
# 输出:drwxr-xr-x 2 developer www-data 4096 Jan 10 10:00 css/
# 创建共享项目目录
mkdir /shared/project
chown -R project_owner:project_group /shared/project/
# 设置SGID位,使新创建的文件自动继承目录的组
chmod g+s /shared/project/
# 用户在此目录创建的文件会自动属于project_group组
cd /shared/project
touch new_file.txt
ls -l new_file.txt
# 输出:-rw-r--r-- 1 user project_group 0 Jan 10 10:00 new_file.txt
# 为FTP用户设置家目录权限
chown -R ftpuser:ftpgroup /home/ftpuser/
chmod -R 755 /home/ftpuser/public_html/
chmod -R 644 /home/ftpuser/public_html/*.html
# 确保上传目录可写
chown ftpuser:ftpgroup /home/ftpuser/uploads/
chmod 775 /home/ftpuser/uploads/
# 确保日志文件可以被相应服务写入
chown syslog:adm /var/log/syslog
chown apache:apache /var/log/httpd/access_log
# 设置日志轮转文件的所有权
chown root:root /etc/logrotate.d/
chown -R root:adm /var/log/
# 只有当文件当前属于alice用户时才修改为bob
chown --from=alice: bob file.txt
# 只有当文件当前属于alice用户和developers组时才修改
chown --from=alice:developers bob:staff file.txt
# 创建符号链接
ln -s /original/file.txt link.txt
# 默认情况下修改的是链接指向的文件
chown alice link.txt # 修改/original/file.txt的所有者
# 使用-h选项修改符号链接本身的所有者
chown -h alice link.txt # 修改link.txt的所有者
# 修改当前目录下所有.php文件的所有者
chown www-data *.php
# 递归修改所有.html和.css文件
find /var/www/ -name "*.html" -o -name "*.css" -exec chown www-data:www-data {} \;
# 修改30天前创建的文件
find /path/to/dir -type f -mtime +30 -exec chown backup:backup {} \;
-R选项时要特别小心,确保不会意外修改系统重要文件-h选项.和冒号:都可以用作分隔符