/ # 根目录
├── bin # 基本命令程序
├── etc # 系统配置文件
├── home # 用户主目录
├── usr # 用户程序和数据
├── var # 可变数据(日志等)
├── tmp # 临时文件
└── ...
/home/user/file.txt./file.txt 或 ../parent/file.txt# 查看当前目录
pwd
# 切换目录
cd /path/to/directory
cd .. # 上级目录
cd ~ # 返回家目录
cd - # 返回上一个目录
# 列出目录内容
ls # 简单列表
ls -l # 详细列表
ls -a # 显示隐藏文件
ls -lh # 人类可读的文件大小
ls -lt # 按时间排序
# 创建目录
mkdir dirname
mkdir -p dir1/dir2/dir3 # 创建多级目录
# 删除目录
rmdir dirname # 删除空目录
rm -r dirname # 递归删除非空目录
# 创建文件
touch filename.txt
echo "content" > filename.txt
# 查看文件
cat filename.txt # 显示整个文件
less filename.txt # 分页查看
head -n 10 filename.txt # 查看前10行
tail -n 10 filename.txt # 查看后10行
tail -f filename.txt # 实时查看日志文件
# 复制文件
cp source.txt dest.txt
cp -r sourcedir/ destdir/ # 复制目录
# 移动/重命名文件
mv oldname.txt newname.txt
mv file.txt /target/directory/
# 删除文件
rm filename.txt
rm -i filename.txt # 删除前确认
rm -f filename.txt # 强制删除
-rwxr-xr-- 1 user group 1024 Jan 1 12:00 file.txt
↑ ↑↑↑↑↑↑↑↑
│ │└─其他用户权限
│ └───同组用户权限
└─────所有者权限
权限字符含义:
r = 读取 (4)w = 写入 (2)x = 执行 (1)- = 无权限 (0)rwx r-x r-- = 7 5 4
421 401 400
↓ ↓ ↓
7 5 4
常见权限组合:
755 = rwxr-xr-x (所有者完全权限,其他人读执行)644 = rw-r--r-- (所有者读写,其他人只读)777 = rwxrwxrwx (完全开放 - 不安全!)ls -l filename.txt
stat filename.txt
输出示例:
-rwxr-xr-- 1 alice staff 1024 Jan 1 12:00 script.sh
drwxr-xr-x 2 bob dev 4096 Jan 1 12:00 mydir/
# 符号模式
chmod u+x file.txt # 给所有者添加执行权限
chmod g-w file.txt # 移除同组用户的写权限
chmod o=r file.txt # 设置其他用户只读
chmod a+x file.txt # 所有人添加执行权限
chmod u=rwx,g=rx,o=r file.txt
# 数字模式
chmod 755 file.txt
chmod 644 file.txt
chmod 700 file.txt # 仅所有者完全访问
# 递归修改目录
chmod -R 755 directory/
b) chown - 修改所有者和组
# 修改所有者
chown username file.txt
# 修改组
chown :groupname file.txt
# 同时修改所有者和组
chown username:groupname file.txt
# 递归修改目录
chown -R username:groupname directory/
c) chgrp - 修改组(替代方案)
chgrp groupname file.txt
chgrp -R groupname directory/
# 设置SUID:用户执行文件时,以文件所有者的身份运行
chmod u+s /usr/bin/passwd
chmod 4755 /usr/bin/passwd
# 查看SUID(显示为 s 而不是 x)
ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root ...
# 设置SGID:目录中新创建的文件继承目录的组
chmod g+s directory/
chmod 2755 directory/
# 查看SGID
ls -ld directory/
# drwxr-sr-x 2 user group ...
# 设置粘滞位:只有文件所有者才能删除/tmp目录中的文件
chmod +t /tmp
chmod 1777 /tmp
# 查看粘滞位
ls -ld /tmp
# drwxrwxrwt 2 root root ...
umask # 显示当前掩码
umask -S # 符号格式显示
# 临时设置
umask 022
# 永久设置(添加到 ~/.bashrc 或 ~/.bash_profile)
echo "umask 022" >> ~/.bashrc
文件默认权限 = 666 - umask
目录默认权限 = 777 - umask
示例:umask 022
文件权限 = 666 - 022 = 644 (rw-r--r--)
目录权限 = 777 - 022 = 755 (rwxr-xr-x)
# 检查文件系统是否支持ACL
mount | grep acl
# 检查文件ACL
getfacl filename.txt
# 给特定用户添加权限
setfacl -m u:username:rwx file.txt
# 给特定组添加权限
setfacl -m g:groupname:rx file.txt
# 设置默认ACL(对新创建的文件有效)
setfacl -d -m u:username:rwx directory/
# 删除特定ACL条目
setfacl -x u:username file.txt
# 删除所有ACL条目
setfacl -b file.txt
# 1. 创建脚本
echo '#!/bin/bash' > backup.sh
echo 'echo "Backup completed"' >> backup.sh
# 2. 设置安全权限
chmod 750 backup.sh # 所有者完全,同组读执行,其他人无权限
chown root:admin backup.sh # 设置所有者和组
# 3. 设置SUID(如果需要以root运行)
chmod 4750 backup.sh
# 创建项目目录结构
mkdir -p project/{src,doc,bin,log}
# 设置目录权限
chmod 755 project/ # 所有人可进入
chmod 770 project/src/ # 团队成员可读写
chmod 750 project/bin/ # 团队成员可执行
chmod 777 project/log/ # 所有人可写日志
# 设置SGID使新文件继承组
chmod 2770 project/src/
# 所有.sh文件添加执行权限
find . -name "*.sh" -exec chmod +x {} \;
# 修改所有目录权限为755
find . -type d -exec chmod 755 {} \;
# 修改所有文件权限为644
find . -type f -exec chmod 644 {} \;
# 检查当前用户对文件的权限
[ -r file.txt ] && echo "可读"
[ -w file.txt ] && echo "可写"
[ -x file.txt ] && echo "可执行"
[ -d directory ] && echo "是目录"
whoami # 当前用户名
id # 用户ID和组信息
groups # 当前用户所属组
# 如果遇到权限问题:
# 1. 查看文件详细信息
ls -la file.txt
# 2. 检查用户所属组
id username
# 3. 测试权限
sudo -u otheruser ls file.txt
# 4. 检查父目录权限(需要目录的x权限才能访问)
ls -ld /path/to/parent/
# 5. 检查SELinux/AppArmor(如果启用)
getenforce # SELinux状态
sestatus # SELinux详细信息
这个教程涵盖了Unix/Linux系统中最常用的文件管理和权限设置操作。记住,正确的权限管理是系统安全的基础!