Answers:
chmod g+s .;
该命令在当前目录上设置组ID(setgid),写为.
。
这意味着在当前目录内创建的所有新文件和子目录都将继承目录的组ID,而不是创建文件的用户的主要组ID。这也将传递给在当前目录中创建的新子目录。
g+s
影响文件的组ID,但不影响所有者ID。
请注意,这仅适用于新创建的文件。setgid设置不影响被 移动 (mv
)到目录中的文件。复制的文件cp -p
也不受影响。
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;
在这种情况下,无论deux
属于哪个组,它都属于组,canard
但un
属于创建它的用户组。
不同于c
或perl
,如果在同一命令行上有另一个shell命令,则只需在shell命令后跟一个分号。因此,请考虑以下命令行:
chgrp canard .; chmod g+s .;
最终的分号是多余的,可以删除:
chgrp canard .; chmod g+s .
此外,如果我们将两个命令放在单独的行上,则不需要其余的分号:
chgrp canard .
chmod g+s .
cp -p
覆盖setgid设置的原因。
cp -p
覆盖setgid设置?在每个存在的Unix实现上?POSIX说,未指定在cp -p下复制用户ID或组ID失败是否会导致诊断消息!但是,在这种情况下,分别需要清除S_SUID和S_SGID位(即,如果文件是setuid bob,但是bob的所有权无法被复制,从而文件由janet拥有,则不要使其成为setuid珍妮特(janet。)
cp -p
覆盖setgid设置?” 根据POSIX规范,这就是应该执行的操作。在我使用过的所有Unix系统上都这样做。您已经引用了规范中有关在无法复制组ID时应采取的保护措施的部分。我从来没有遇到过这种“不能”的情况,对吗?
您可以使用chmod命令更改文件权限。在Unix中,访问权限类和访问类型都指定了文件权限,该权限确定谁可以对文件进行不同类型的访问。访问类别是一组用户,并且可以为每个类别分配特定的访问类型
选项g + s如下:
g-文件组中其他用户拥有的权限
s-在执行时设置用户或组ID
这是一个示例用法:
chmod =rwx,g+s filename
(允许所有人读取,写入和执行特定文件并打开设置的组ID)
要设置/修改文件的权限,您需要使用chmod程序。当然,只有文件的所有者可以使用chmod来更改文件的权限。chmod具有以下语法:chmod [options]模式文件“模式”部分指定作为参数的文件的新权限。一个模式指定应更改哪些用户的权限,然后指定应更改哪些访问类型。举例来说:chmod ax socktest.pl
这意味着应清除所有用户的执行位(-)。(所有者,组和世界其他地方)权限以字母开头,该字母指定更改应影响哪些用户,这可以是以下任意一种:
u the owner user
g the owner group
o others (neither u, nor g)
a all users
随后是一条更改指令,该指令由+(设置位)或-(清除位)以及与应更改的位相对应的字母组成。让我们看一些例子:
$ ls -l socktest.pl
-rwxr-xr-x 1 nick users 1874 Jan 19 10:23 socktest.pl*
$ chmod a-x socktest.pl
$ ls -l socktest.pl
-rw-r--r-- 1 nick users 1874 Jan 19 10:23 socktest.pl
$ chmod g+w socktest.pl
$ ls -l socktest.pl
-rw-rw-r-- 1 nick users 1874 Jan 19 10:23 socktest.pl
$ chmod ug+x socktest.pl
$ ls -l socktest.pl
-rwxrwxr-- 1 nick users 1874 Jan 19 10:23 socktest.pl*
$ chmod ug-wx socktest.pl
$ ls -l socktest.pl
-r--r--r-- 1 nick users 1874 Jan 19 10:23 socktest.pl
奇怪的数字...您可能遇到过chmod 755 somefile之类的事情,当然您会怀疑这是什么。事实是,您可以使用一个数字一次更改文件的整个权限模式,例如本示例中的数字。每个模式都有一个对应的代码号,正如我们将要看到的,有一种非常简单的方法来找出与任何模式对应的数字。模式编号上的三个数字中的每个数字都对应于三个许可三元组之一。(u,g和o)三元组中的每个许可位都对应一个值:r为4,w为2,x为1。如果允许位,则将此值添加到允许三元组的编号中。如果清除,则不添加任何内容。(有些人可能会注意到,实际上,
您的三元组:
rwx => 4 + 2 + 1 =
7
g的三元组:
r-x => 4 + 0 + 1 =
5
o的三元组:
r-x => 4 + 0 + 1 =
5
这使得:
755
因此,755是一种简短的说法,“我不介意其他人是否读取或运行此文件,但只有我应该能够对其进行修改”,而777则表示“每个人都可以完全访问此文件”
ls命令的结果将取决于umask。
g + s将sgid设置为文件。请点击这里关于SUID SGID更多深层次信息
因此,如果您的umask例如为022,则结果将类似于:
-rw-r--r-- 1 romeo canard 0 Jan 31 20:58 deux
-rw-r-Sr-- 1 romeo UsersGrp 0 Jan 31 20:58 un
在Linux中,ext的默认安装选项之一?fs是“讨厌” | sysvgroups”。因此,第一次触摸un会创建一个组ID等于创建过程的fsgid的文件,其中fsgid = egid。
chmod g + s。,使后续的文件/目录创建从父文件夹继承组ID,如果创建的东西是目录,它也将g + s设置为其父目录。
在这里触摸deux,创建带有deux和group canard的deux。
如果mount选项为'grpid |,则语义会更改。在这种情况下,bsdgroups的创建新文件/目录将从其父文件夹继承组ID,即使没有为父文件本身设置g + s。
cp
实际上,被复制(例如,通过复制)的文件是新创建的。如果他们没有继承组权限,则复制程序正在玩游戏,例如复制到临时文件,然后将其移动到目标目录。