shell_umask用法
我曾经用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用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- iOS NSString追加字符串的方法
第一种: NSArray *array = [NSArray arrayWithObjects:@"Hello",@" ",@"world" ...
- 【shell】编译脚本
#!/bin/bash #设置环境变量 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME=${JAVA_HOME}/ ...
- DevExpress的xtraMessageBox汉化
原文:DevExpress的xtraMessageBox汉化 项目使用的界面库是DevExpress 相当好用,不过里面弹出对话框XtraMessageBox的按钮都是英文的, 可能会对用户造成困扰, ...
- 什么是.NET Native?
使用CoreRT将.NET Core发布为Native应用程序 - KAnts - 博客园 http://www.cnblogs.com/ants/p/8630332.html Microsoft . ...
- 程序员该如何过好他的整个职业生涯?(最重要的是你得一直往前走。拐点不是你的工资。想起很久前有个人说我“逻辑性”比较强)good
作者|池建强 编辑|小智 戳阅读原文,获得短信提醒,不错过下次InfoQ大咖说直播! 1 写在前面 加入极客邦的第一天就被拉到了「大咖说」的现场,这也是我始料未及的事情.从锤子科技正式离职之后,我 ...
- configure -help
http://www.360doc.com/content/14/1215/17/18578054_433158382.shtml http://blog.csdn.net/mociml/articl ...
- delphi 在多线程中使用 CreateOleObject 导致失败(一定要使用CoInitialize和CoUninitialize,举例查询WMI)
原帖地址 http://bbs.csdn.net/topics/390481350 解决办法 procedure DisplayVideoInfo; var wmi, objs, obj : OleV ...
- xe5 firemonkey关闭应用程序
在FMX中,由Activity替代了Form的概念,虽然TForm类仍然存在,但MainForm通过关闭函数无法结束程序,使用Application.Terminate均无效,调整为: uses ...
- Homebrew 1.0.0 发布,MacOS 上的包管理器,比如安装qt5keychain
神器,没有它不知道怎么用macos https://www.oschina.net/news/77367/homebrew-1-0-0 Mac OS X用户,qt5keychain可以使用homebr ...
- 文件夹管理工具(MVC+zTree+layer)
文件夹管理工具(MVC+zTree+layer)(附源码) 写在前 之前写了一篇关于 文件夹与文件的操作的文章 操作文件方法简单总结(File,Directory,StreamReader,St ...