我曾经用touch命令创建一个文件script,默认的权限是”rw-r- -r- -”,有的朋友就有可能问为什么是这种组合?其实,这正是umask命令捣的鬼。在linux上输入:umask,如图一所示:

图一.umask输出结果

可以看到输出结果时0022。那么这个和script刚创建时的权限有什么关系呢?下面来做一个简单的运算,就可以看出来了。一个文件可以被sxp用户、users组用户、其他不相干用户(第一篇中有介绍)读、写和执行的权限就是777(以八进制表示),以字符表示就是rwxrwxrwx(请参见第一篇)。而umask值是0022,第一个0不看,那就是022,它也是3列数字,第一列代表sxp对刚创建的文件所具有的权限;第二列数字代表users组用户对刚创建的文件所具有的权限;第三列数字代表其他不相干的用户对刚创建的文件所具有的权限。

再来分析,我在第一篇说过,r代表读权限,对应的数字是4,w代表写权限,对应的数字是2,x代表执行权限,对应的数字是1,那么umask值022(八进制写法)转换为字符表示的权限就可以写成

- - - -w- -w-(1)

为什么可以写成这样,在我的第一篇中都已讲过。那么权限777(八进制写法)转换为字符表示的权限就是rwxrwxrwx(2)

比较(1)与(2)对应的列,比如第一列和第一列比较等,从(2)中拿走(1)中对应的列的字母,比如(1)中头三列都是空,(2)中头三列不碰它,还是rwx;(1)中第二个三列有一个w,其他都是空,那么从(2)中就拿走w,此时(2)就变成rwxr-xrwx;(1)中最后一个三列有一个w,那么在(2)中同样拿走w,(2)变成rwxr-xr-x;这就是刚创建目录时,该目录所具有的权限。比如,我新创建一个目录wx,使用命令

mkdir wx

mkdir(后续文档会讲到此命令),结果如图二所示;

图二.新创建目录的权限

可以看到,新创建的目录wx的权限确实是rwxr-xr-x。

对于刚创建的文件的权限,从(2)中再拿走x位即可,就是从rwxr-xr-x中拿走x位,(2)变成rw-r- -r- -。为了验证,我删除原先的script命令,再重新创建它,命令是:touch script,如图三所示:

图三.新创建文件的权限

我说的没错吧,script权限确实是rw-r- -r--。

其实我上面所讲的如何根据022来计算出一个新创建的目录的权限或者是文件的权限的方法是一个普遍的方法。如果umask值不是0022,是0033,该如何计算呢?步骤是一样的,不看第一个0,就看剩下的033,这是一个八进制,3=2+1,因此033换算成以字符形式表示的权限位就是- - - -wx-wx,然后按照上面的步骤算一下就可以了。

umask在工作中较少用到,为什么要开这一篇,是应为我曾经遇到一个很奇怪的问题,就是和umask有关。我在script中写入内容如下:

#!/bin/sh

…..file(此处省去**字,哈哈,其实就是往file中写入一些数据库查询的sql语句,该动作也自动地创建了该文件)

chmod 555 file (给sxp用户、users组用户、其他用户赋予写和执行权限,因此这三种用户可以写和执行file文件)

su – wx –c file(意思是从sxp用户切换到wx用户,准备执行file文件)

我设置一个定时任务crontab,用以在指定的时间执行script脚本(此时script脚本我已经赋予执行权限),可是其中的file文件没有被执行。

如果我手动执行script,其中的file文件时可以被执行的。这个问题是不是很奇怪?其实都是umask在捣鬼。因为用定时任务执行script时,umask值是002,而我手动执行时,umask值是022.朋友可以算下,在script脚本中创建file文件时的权限,再加上chmod 555 file,最后,通过定时任务执行script脚本时,它的权限是-wx-wx-wx,在切换到wx用户后,由于wx是属于其他不相干的用户,因此wx用户的权限是-wx,可以看到wx没有r,也就是读权限。没有读权限,就算有x权限,wx用户也不可能执行file脚本的。

而手动执行script时,由于umask值是022,最终file权限是r-xr-xr-x,wx用户具备r,也就是读权限,且有x执行权限,因此是可以执行的。

shell_umask用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

随机推荐

  1. 图像滤镜艺术--Toaster滤镜

    原文:图像滤镜艺术--Toaster滤镜     根据Instagram CEO的说法,Toaster滤镜是Instagram所有滤镜中最复杂的滤镜,这个滤镜给人一种新奇的红色烘烤感,很能让人联想起这 ...

  2. Win8Metro(C#)数字图像处理--2.19图像水平镜像

    原文:Win8Metro(C#)数字图像处理--2.19图像水平镜像  [函数名称] 图像水平镜像函数MirrorXProcess(WriteableBitmap src) [函数代码]      ...

  3. 2018-4-25-- 2.在sublime3里安装git插件并连接GitHub

    1.配置全局参数 Git的主要配置包括用户名.邮箱的设置.以及生成SSH密钥公钥等. 首先运行一下的命令设置git提交代码时自己的用户信息. 2.在sublime3里使用时需要配置push.defau ...

  4. java的static类(静态内部类)(转载)

    转载自:http://www.jb51.net/article/74838.htm java中的类可以是static吗?答案是可以.在java中我们可以有静态实例变量.静态方法.静态块.类也可以是静态 ...

  5. Add-AppxProvisionedPackage

    原文: Add-AppxProvisionedPackage Adds an app package (.appx) that will install for each new user to a ...

  6. TIME WINAPI

    GetDynamicTimeZoneInformation https://msdn.microsoft.com/en-us/library/windows/desktop/ms724318(v=vs ...

  7. ASP.NET MVC控制器Controller中参数

    前述文章参见:ASP.NET MVC控制器Controller 绪论 之前的控制器返回的均为常量字符串,接下来展示如何获取请求传来的参数,而返回"动态"的字符串. 可以在操作方法B ...

  8. QML被系统缓存的原理是比较时间戳

    Gunnar Roth January 25, 2017 at 17:07 Afaik the cached qml file contains a checksum of the original ...

  9. windows Service 之调试过程(附加到进程里调试,而且启动时间不能超过30秒)

    最近第一次用C#写了一个windows service ,其实实现的内容比较简单.就是启动remoting 连接,但是调试相对初次写windws service 的我来说,比较烦.没有经验,而且没办法 ...

  10. SYN4201型 同步分频钟

    SYN4201型 同步分频钟 产品概述 SYN4201型同步分频钟是由西安同步电子科技有限公司精心设计.自行研发生产的一款高精度分频时钟,对输入的8路10MHz正弦信号分别进行同步分频处理,相应的输出 ...