zoukankan      html  css  js  c++  java
  • umask命令

    umask命令的一般格式:

    [1]umask [选项] [掩码]
    该命令用来设置限制新文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行,并自动设置掩码改变默认值,新的权限将会把旧的覆盖。
    选项及其含义如下。
    -S:显示当前的掩码。
    umask是从权限中“拿走”相应的位,且文件创建时不能赋予执行权限

    umask使用方法

    • A 什么是umask?
    当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久定义自己的umask值。
    你的系统管理员必须要为你设置一个合理的 umask值,以确保你创建的文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限。在已经登录之后,可以按照个人的偏好使用umask命 令来改变文件创建的缺省权限。相应的改变直到退出该shell或使用另外的umask命令之前一直有效。一般来说,umask命令是在/etc /profile文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的umask,可以在该文件中加入相应的条目。如果希望永久 性地设置自己的umask值,那么就把它放在自己$HOME目录下的.profile或.bash_profile或.bashrc文件中。
    • B 如何计算umask值
    umask 命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这一数字的最 大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来 说,umask中各个数字最大可以到7。
    该命令的一般形式为:
    umask nnn
    其中nnn为umask置000-777。
    让我们来看一些例子。
    计算出你的umask值:
    可以有几种计算umask值的方法,通过设置umask值,可以为新创建的文件和目录设置缺省权限。下表列出了与权限位相对应的umask值。
    在计算umask值时,可以针对各类用户分别在这张表中按照所需要的文件/目录创建缺省权限查找对应的umask值。
    例如,umask值002 所对应的文件和目录创建缺省权限分别为6 6 4和7 7 5。
    还有另外一种计算umask值的方法。我们只要记住umask是从权限中“拿走”相应的位即可。[2]
    umask值与权限
    umask 文件 目录
    0 6 7 600 710
    1 6 6 500 611
    2 4 5 421 532
    3 4 4 322 433
    4 2 3 243 354
    5 2 2 144 255
    6 0 1 065 176
    7 0 0 066 077
    例如,对于umask值0 0 2,相应的文件和目录缺省创建权限是什么呢?
    第一步,我们首先写下具有全部权限的模式,即777 (所有用户都具有读、写和执行权限)。
    第二步,在下面一行按照umask值写下相应的位,在本例中是0 0 2。
    第三步,在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。
    稍加练习就能够记住这种方法。
    第四步,对于文件来说,在创建时不能具有执行权限,只要拿掉相应的执行权限比特即可。
    这就是上面的例子, 其中u m a s k值为0 0 2:
    1) 文件的最大权限 rwx rwx rwx (777)
    2) umask值为0 0 2 --- --- -w-
    3) 目录权限 rwx rwx r-x (775) 这就是目录创建缺省权限
    4) 文件权限 rw- rw- r-- (664) 这就是文件创建缺省权限
    下面是另外一个例子,假设这次u m a s k值为0 2 2:
    1) 文件的最大权限 rwx rwx rwx (777)
    2 ) u m a s k值为0 2 2 --- -w- -w-
    3) 目录权限 rwx r-x r-x (755) 这就是目录创建缺省权限
    4) 文件权限 rw- r-- r-- (644) 这就是文件创建缺省权限
    • C 常用的umask值
    下表列出了一些umask值及它们所对应的目录和文件权限。
    常用的umask值及对应的文件和目录权限
    umask 值 目录 文件
    0 22 7 5 5 6 4 4
    0 27 7 5 0 6 4 0
    0 02 7 7 5 6 6 4
    0 06 7 7 1 6 6 0
    0 07 7 7 0 6 6 0
    • D umask命令
    如果想知道当前的umask 值,可以使用umask命令:
    $umask
    如果想要改变umask值,只要使用umask命令设置一个新的值即可:
    $ umask 002
    确认一下系统是否已经接受了新的u m a s k值:
    $umask
    002
    $touch testfile
    $ls -l testfile
    rw- rw- r--
    在使用umask命令之前一定要弄清楚到底希望具有什么样的文件/目录创建缺省权限。否则可能会得到一些非常奇怪的结果;例如,如果将umask值设置为6 0 0,那么所创建的文件/目录的缺省权限就是0 6 6!

    2Linux/Unix文件操作函数

    umask

    #include <sys/stat.h>
    mode_t umask(mode_t cmask);

    说明:

    其中cmask对应下面的9个位的“或”值:
    S_IRUSR 用户读
    S_IWUSR 用户写
    S_IXUSR 用户执行
    S_IRGRP 组读
    S_IWGRP 组写
    S_IXGRP 组执行
    S_IROTH 其他读
    S_IWOTH 其他写
    S_IXOTH 其他执行
    这9个位对应linux文件的权限位。
    umask函数为进程设置文件模式创建屏蔽字,并返回以前的值。在进程创建一个新文件或新目录的时候,就一定会使用文件模式创建屏蔽字节,对于文件模式创建屏蔽字中为1的位,在创建文件函数create的mode对应的位则被关闭。
    例如:
    #include <unistd.h>
    #include <sys/stat.h>
    #define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
    int main(void)
    {
    mode_t mask=umask(0);
    if(creat("foo",RWRWRW)<0)
    printf("create error for foo ");
    umask(S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
    if(creat("bar",RWRWRW)<0)
    printf("creat error for bar ");
    exit(0);
    }
    程序输出为:
    lijsf@ubuntu:~$ umask
    0002
    lijsf@ubuntu:~$ ./a.out
    lijsf@ubuntu:~$ ls -l foo bar
    -rw------- 1 lijsf lijsf 0 Apr 27 01:59 bar
    -rw-rw-rw- 1 lijsf lijsf 0 Apr 27 01:59 foo
    lijsf@ubuntu:~$ umask
    0002
    可见umask函数并比改变父进程的文件屏蔽字。第一个文件foo的权限都没有屏蔽,所以最终权限为RW-RW-RW-。相应的第二个文件bar的屏蔽字为S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH,即066,最终的bar的权限对应的应为RW-------。
    [1]
  • 相关阅读:
    codeforces 980A Links and Pearls
    zoj 3640 Help Me Escape
    sgu 495 Kids and Prizes
    poj 3071 Football
    hdu 3853 LOOPS
    hdu 4035 Maze
    hdu 4405 Aeroplane chess
    poj 2096 Collecting Bugs
    scu 4444 Travel
    zoj 3870 Team Formation
  • 原文地址:https://www.cnblogs.com/qjack/p/3490424.html
Copyright © 2011-2022 走看看