Shell/Bash在线运行

运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
打印等边三角形 发布于:2023-11-28 20:00 shell计算器 发布于:2023-11-22 17:22 重启执行docker 发布于:2023-11-21 10:57 测试数据局 发布于:2023-10-19 17:06 查询被封禁ip 发布于:2023-09-19 16:37 shell减法函数 发布于:2023-09-13 10:57 centos7测试tomcat服务是否正常运行 发布于:2023-09-13 10:25 shell-study 发布于:2023-09-06 15:06 just for shell script learn 发布于:2023-09-01 09:34 测试Shell参数传递 发布于:2023-08-24 11:27 对cdh6进行自动化安装 发布于:2023-08-23 10:10 安装zookeeper 发布于:2023-08-14 18:32 安装mongo 发布于:2023-08-11 17:40 容器安装mysql 发布于:2023-08-04 15:19 最后的最后把它搞定 发布于:2023-08-03 14:32 shell测试 发布于:2023-08-01 16:07 Shell 代码验证 发布于:2023-07-24 15:25 shell测试程序 发布于:2023-07-23 22:31 在 bash 中运行简单正确的 C 发布于:2023-07-23 10:55 shell函数5-4 while循环 发布于:2023-07-20 10:56 shell的demo 发布于:2023-07-17 23:14 # linux 初学者 发布于:2023-08-24 15:02 shell 在线脚本 1 发布于:2023-07-12 22:16 简单的计算器实现 发布于:2023-07-11 17:17 手机号码正则验证 发布于:2023-08-07 16:20 指定关闭或打开端口号 发布于:2023-07-07 16:14 #!/bin/bash a="hello,world,nice,to,meet,you" #要将$a分割开,先存储旧的分隔符 OLD_IFS="$IFS" #设置分隔符 IFS="," #如下会自动分隔 arr=($a) #恢复原来的分隔符 IFS="$OLD_IFS" function func1(){ echo $@ } #遍历数组 for s in ${arr[@]} do func1 "$s" done echo "完成" 发布于:2023-07-04 14:17 批量增加用户打印 发布于:2023-06-12 13:41 ##10num求最值平均值 发布于:2023-06-12 16:12 测试Jenkins 发布于:2023-06-07 14:02 九九乘法表 发布于:2023-06-07 10:37 case判断 发布于:2023-06-07 10:13 这是一个测试代码 发布于:2023-06-07 09:25 测试shell 发布于:2023-05-29 18:53 ## shell流程控制语句 发布于:2023-05-29 14:46 shell函数 发布于:2023-05-29 11:32 prinf格式化 发布于:2023-05-29 11:15 Break语句 发布于:2023-05-29 11:11 ## echo输出命令 发布于:2023-05-29 10:23 ## 字符串运算符 发布于:2023-05-26 15:55 ## 获取数组的所有元素 ## 获取数组的长度 发布于:2023-05-26 15:19 ## 读取数组 ## 关联数组 发布于:2023-05-26 15:10 编写shell脚本,输出0 - 500 这几个数字中,是7倍数的数字,比如7, 14, 21....,不包括0 发布于:2023-05-25 16:04 计算1-100之间的所有奇数和 发布于:2023-05-25 14:10 # shell多行注释 发布于:2023-05-25 11:59 # Shell数组 ## 定义数组 ## 读取数组 ## 获取数组的长度 发布于:2023-05-25 11:57 # Shell字符串 ## 拼接字符串 ## 提取子字符串 ## 查找子字符串 发布于:2023-05-25 11:49 删除变量简介 发布于:2023-05-25 11:31 Shell变量1 发布于:2023-05-25 11:27 脚本二温茂 发布于:2023-05-25 15:52 [更多]
显示目录

umask 命令-文件/目录赋予初始权限



umask 命令

使用 umask 默认权限来给所有新建的文件和目录赋予初始权限的。

直接通过 umask 命令:

[root@localhost ~]# umask
0022
#root用户默认是0022,普通用户默认是 0002

umask 默认权限确实由 4 个八进制数组成,但第 1 个数代表的是文件所具有的特殊权限(SetUID、SetGID、Sticky BIT),此部分内容放到后续章节中讲解,现在先不讨论。也就是说,后 3 位数字 "022" 才是本节真正要用到的 umask 权限值,将其转变为字母形式为 ----w--w-。

注意:虽然 umask 默认权限是用来设定文件或目录的初始权限,但并不是直接将 umask 默认权限作为文件或目录的初始权限,还要对其进行 "再加工"。

文件和目录的真正初始权限,可通过以下的计算得到: 文件(或目录)的初始权限 = 文件(或目录)的最大默认权限 - umask权限

如果按照官方的标准算法,需要将 umask 默认权限使用二进制并经过逻辑与和逻辑非运算后,才能得到最终文件或目录的初始权限,计算过程比较复杂,且容易出错,因此本节给大家介绍了更简单的计算方式。

显然,如果想最终得到文件或目录的初始权限值,我们还需要了解文件和目录的最大默认权限值。在 Linux 系统中,文件和目录的最大默认权限是不一样的:

  • 对文件来讲,其可拥有的最大默认权限是 666,即 rw-rw-rw-。也就是说,使用文件的任何用户都没有执行(x)权限。原因很简单,执行权限是文件的最高权限,赋予时绝对要慎重,因此绝不能在新建文件的时候就默认赋予,只能通过用户手工赋予。

  • 对目录来讲,其可拥有的最大默认权限是 777,即 rwxrwxrwx。

接下来,利用字母权限的方式计算文件或目录的初始权限。以 umask 值为 022 为例,分别计算新建文件和目录的初始权限: 文件的最大默认权限是 666,换算成字母就是 "-rw-rw-rw-",umask 的值是 022,换算成字母为 "-----w--w-"。把两个字母权限相减,得到 (-rw-rw-rw-) - (-----w--w-) = (-rw-r--r--),这就是新建文件的初始权限。测试一下:

[root@localhost ~]# umask
0022
#默认umask的值是0022
[root@localhost ~]# touch file  <--新建file空文件
[root@localhost ~]# ll -d file
-rw-r--r--. 1 root root 0 Apr 18 02:36 file

目录的默认权限最大可以是 777,换算成字母就是 "drwxrwxrwx",umask 的值是 022,也就是 "-----w--w-"。把两个字母权限相减,得到的就是新建目录的默认权限,即 (drwxrwxrwx) - (-----w--w-) = (drwxr-xr-x)。我们再来测试一下:

[root@localhost ~]# umask
0022
[root@localhost ~]# mkdir catalog  <--新建catalog目录
[root@localhost ~]# ll -d catalog
drwxr-xr-x. 2 root root 4096 Apr 18 02:36 catalog

最大默认权限中和 umask 权限公共的部分,通过减法运算会被遮盖掉,最终剩下的“最大默认权限”,才是最终赋予文件或目录的初始权限。

umask默认权限的修改方法

umask 权限值可以通过如下命令直接修改:

[root@localhost ~]# umask 002
[root@localhost ~]# umask
0002
[root@localhost ~]# umask 033
[root@localhost ~]# umask
0033

不过,这种方式修改的 umask 只是临时有效,一旦重启或重新登陆系统,就会失效。如果想让修改永久生效,则需要修改对应的环境变量配置文件 /etc/profile。例如:

[root@localhost ~]# vim /etc/profile
...省略部分内容...
if [ $UID -gt 199]&&[ "'id -gn'" = "'id -un'" ]; then
    umask 002
    #如果UID大于199(普通用户),则使用此umask值
else
    umask 022
    #如果UID小于199(超级用户),则使用此umask值
fi
…省略部分内容…

这是一段 Shell 脚本程序,不懂也没关系,只要知道,普通用户的 umask 由 if 语句的第一段定义,而超级用户 root 的 umask 值由 else 语句定义即可。 修改此文件,则 umask 值就会永久生效。

由JSRUN为你提供的Shell/Bash在线运行、在线编译工具
        JSRUN提供的Shell/Bash 在线运行,Shell/Bash 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。