umask命令操作演示

系统 Linux
umask是个很常见的命令,用在创建文件或目录时设置权限掩码。本文用Windows上创建的两个zip文件上传到Linux上,用这两个文件演示了umask命令的使用方法,包括查看目录和文件权限,使用不同的身份运行tar命令,修改目录和文件的权限等等。

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

shell> umask
0022

注: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

注:权限计算实际上是二进制位的与操作,参考All About the umask and Permissions。

操作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 755
shell> find /path -type f | xargs chmod 644

本次补习班下课!

原文:http://huoding.com/2010/12/11/26

【编辑推荐】

  1. 五大Linux简单命令解决系统性能问题
  2. 25个必须记住的SSH命令,你用过了吗?
  3. 分享十条nmap实用命令行技巧
责任编辑:yangsai 来源: huoding.com
相关推荐

2009-11-09 13:12:14

WCF事物操作

2023-03-02 07:37:53

2010-05-27 09:38:59

MySQL Grant

2010-07-16 17:03:35

SQL Server

2011-06-03 09:08:17

Windows 8视频

2009-06-20 13:37:18

iPhone OS 3iPhone OS

2010-05-28 14:51:47

MySQL数据库

2010-05-31 14:59:36

PHP + MySQL

2012-11-20 16:16:05

Windows

2017-03-06 16:45:36

Linux命令动画演示

2019-11-21 00:00:15

Linuxless命令

2013-12-23 11:01:14

命令Linux命令

2010-06-12 09:53:19

2011-07-28 09:28:37

2010-06-10 13:04:31

2010-05-27 18:30:56

MySQL 命令行导入

2010-07-14 09:41:26

SQL Server数

2010-06-02 13:22:18

MySQL定时任务

2009-12-09 17:07:56

Linux命令

2023-02-24 07:40:11

点赞
收藏

51CTO技术栈公众号