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",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- QLocalServer与QLocalSocket进程通讯
在Qt中,提供了多种IPC方法,作者所用的是QLocalServer和QLocalSocket.看起来好像和Socket搭上点边,实则底层是windows的name pipe.这应该是支持双工通信的. ...
- Qt SizePolicy 属性(每个控件都有一个合理的缺省sizePolicy。QWidget.size()默认返回值是(640, 480),QWidget.sizeHint()默认返回值是(-1, -1))
控件的sizePolicy说明控件在布局管理中的缩放方式.Qt提供的控件都有一个合理的缺省sizePolicy,但是这个缺省值有时不能适合 所有的布局,开发人员经常需要改变窗体上的某些控件的sizeP ...
- HTTP请求(GET与POST区别)和响应(get是从服务器上获取数据,post是向服务器传送数据,格式与举例都非常清楚)
HTTP有两部分组成:请求与响应,下面分别整理. 一.HTTP请求 1.HTTP请求格式: <request line> <headers> <blank line> ...
- 解决iconv函数无法转换某些中文的问题
原文: 解决iconv函数无法转换某些中文的问题 请先看以下代码,这个页面是GB2312编码的: $str = '陶喆';echo 'gb2312-'.$str;echo '<br />' ...
- SQLSERVER 数据库备份脚本-支持多库备份
原文:SQLSERVER 数据库备份脚本-支持多库备份 <pre name="code" class="sql">--变量定义 DECLARE @b ...
- UWP-磁贴初识
原文:UWP-磁贴初识 简单的磁贴内容实现,来自 Bob 的视频. 为一个按钮添加点击事件,来更新磁贴. private void ChangeTileContentButton_Click(obje ...
- How to Move SSL certificate from Apache to Tomcat
https://www.sslsupportdesk.com/how-to-move-ssl-certificate-from-apache-to-tomcat/ Apache uses x509 p ...
- 【数据结构】31、hashmap=》resize 扩容,不测不知道,一测吓一跳
来来来,今天就跟hashmap杠到底... 不要叫我杠精了,主要是还是被问到hashmap的时候,我并不能很清晰明了得告知这种数据结构到底是一个什么构造,里面细节并不了解 既然这样,我们就把他解析一波 ...
- ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程
在前面随笔介绍的<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>里面,介绍了如何改进和完善审计日志和登录日志的应用服务端和Winform客户端,由于篇幅限制,没有进 ...
- java.nio.Buffer源码阅读
Java 自从 JDK1.4 起,对各种 I/O 操作使用了 Buffer 和 Channel 技术.这种更接近于操作系统的的底层操作使得 I/O 操作速度得到大幅度提升,下面引用一段<Java ...