IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

umask补习班

火丁笔记 2010-12-12 22:30:00 累计浏览 2,970 次
本机暂存

    说起来umask是个很常见的命令,用于创建文件或目录时设置权限掩码,通常是0022:

shell> umask0022

    注:0022等价于022,0022中第一个0用于sticky-bit,本文不做讨论,有兴趣的请自查。

    为了稍后演示的方便性,先在Windows上用7-zip创建两个文件:

foo.zip(包括:目录foo_dir,文件foo_file)bar.tar(包括:目录bar_dir,文件bar_file)

    当然,你可以不用Windows,我之所以这样做,只是为了稍后抖个包袱而已。

    把这两个文件上传到Linux上,然后让我学着导演的口吻喊一嗓子:Action!

操作foo.zip

shell> unzip foo.zip

    此时查看目录和文件的权限,分别是:

foo_dir:755(drwxr-xr-x)foo_file:644(-rw-r-r-)

    这是因为目录的基准权限是777,文件的基准权限是666,由于umask缺省是022,所以:

目录:777 - 022 = 755文件:666 - 022 = 644

操作bar.tar

shell> tar xf bar.tar

    这次有点不同,我们要运行两次tar命令。

    第一次:以root身份运行tar命令,然后查看目录和文件的权限,分别是:

bar_dir:777(drwxrwxrwx)bar_file:777(-rwxrwxrwx)

    第二次:以非root身份运行tar命令,然后查看目录和文件的权限,分别是:

bar_dir:755(drwxr-xr-x)bar_file:755(-rwxr-xr-x)

    注意:每次运行tar命令前,记得删除上次运行tar命令产生的目录及文件,以免受影响。

    两次的结果有些差异,在man tar中能查到一些有用的描述信息:

    -p, -same-permissions, -preserve-permissions

    extract all protection information

    -no-same-permissions

    apply user’s umask when extracting files instead of recorded permissions

    使用tar命令时,对于root而言,缺省:extract all protection information,对于非root而言,缺省:apply user’s umask when extracting files instead of recorded permissions。

    我们先前使用Windows创建文件,然后上传到了Linux上,所以文件和目录的初始权限即为777,当我们使用root身份运行tar命令时,就保留了这个权限。而当我们以非root身份运行tar命令时,虽然会应用umask,但tar有点特殊,它使用目录和文件本身的权限作为基准权限,而不是777(目录)和666(文件),所以最终的权限变成了755(777 - 022)。

    顺便再介绍一下如何方便的修改目录或文件的权限:

shell> find /path -type d | xargs chmod 755shell> find /path -type f | xargs chmod 644

    收工!有兴趣的可以继续阅读All About the umask and Permissions

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. Bash的模式和配置文件加载 (累计阅读 24,405)
  2. 28个Unix/Linux的命令行神器 (累计阅读 16,789)
  3. 调试工具之GDB (累计阅读 14,828)
  4. 我常用的主机监控shell脚本 (累计阅读 13,429)
  5. 100个常用的linux命令 (累计阅读 11,604)
  6. Linux命令行里的“瑞士军刀” (累计阅读 11,584)
  7. 每个程序员都应该知道的8个Linux命令 (累计阅读 10,742)
  8. colortail,让 tail 命令绚丽起来 (累计阅读 10,258)
  9. 最受欢迎的10个 Linux 单行命令 (累计阅读 10,128)
  10. linux下搜索find命令详解 (累计阅读 9,456)