Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux mkdir创建的目录上的奇怪权限(无执行)_Linux_Perl_Cron_Centos6 - Fatal编程技术网

Linux mkdir创建的目录上的奇怪权限(无执行)

Linux mkdir创建的目录上的奇怪权限(无执行),linux,perl,cron,centos6,Linux,Perl,Cron,Centos6,我有一个旧的Perl脚本。此脚本在CentOS 6.4上从cron运行。它创建了一个临时目录,并试图在那里解压文件 这是一段代码: $lg->li("Creating Directory... \n\t$unzip_dir"); mkdir ($unzip_dir, 0777) or my_die("mkdir $unzip_dir failed") unless (-e $unzip_dir && -d $unzip_dir); 但是,在执行之后,目录具有奇怪的权限:

我有一个旧的Perl脚本。此脚本在CentOS 6.4上从cron运行。它创建了一个临时目录,并试图在那里解压文件

这是一段代码:

$lg->li("Creating Directory... \n\t$unzip_dir");
mkdir ($unzip_dir, 0777) or my_die("mkdir $unzip_dir failed") unless (-e $unzip_dir && -d $unzip_dir);
但是,在执行之后,目录具有奇怪的权限:

drwxrwsr-x 42 buser     agroup  12K Dec 30 09:18 .
drwxrwsr-x  4 buser     agroup 4.0K Apr  6  2012 ..
drw-rwSr--  2 auser     agroup 4.0K Dec 28 11:51 tm_unpack_dir_1388412502.20184
用户auser的umask是0002


为什么新目录没有执行权限?你知道这是怎么发生的吗?

这意味着setuid和setgid位已经设置好了

setuid(set user id)是一个权限位,允许用户以其所有者的权限执行程序

setgid(set group id)是一个允许用户以组所有者的权限执行程序的位


这意味着setuid和setgid位已设置

setuid(set user id)是一个权限位,允许用户以其所有者的权限执行程序

setgid(set group id)是一个允许用户以组所有者的权限执行程序的位


我觉得你的代码很正确

在我的系统上确认:

perl -e 'mkdir("foo", 0777);'

drwxr-xr-x  2 user  user     512 Dec 30 10:48 foo
受您的影响。一个时髦的乌玛斯克人可以做时髦的事情

这对你有什么好处

perl -e 'printf("%04o\n", umask());'
我明白了:

0022

这就是为什么当我请求0777时,我的文件夹被创建为0755。

您的代码在我看来是正确的

在我的系统上确认:

perl -e 'mkdir("foo", 0777);'

drwxr-xr-x  2 user  user     512 Dec 30 10:48 foo
受您的影响。一个时髦的乌玛斯克人可以做时髦的事情

这对你有什么好处

perl -e 'printf("%04o\n", umask());'
我明白了:

0022

这就是为什么当我请求0777时,我的文件夹被创建为0755。

奇怪的权限是由父目录上的setgid位与不寻常的umask组合而成的:

查看父目录的权限,第一行:

drwxrwsr-x 42 buser     agroup  12K Dec 30 09:18 .
drw-rwSr--  2 auser     agroup 4.0K Dec 28 11:51 tm_unpack_dir_1388412502.20184
请注意,它有
rwxrwsr-x
,这意味着设置了setgid位。目录上的setgid位会导致使用与目录相同的组在目录中创建新文件。新目录

0113
的umask将导致您看到的奇怪权限。这是一个不寻常的umask,默认值为
0022
。umask在执行脚本的环境中设置,或者直接在脚本本身中设置

不要担心脚本中
mkdir
之后的
0777
mkdir$dir,0777
表示“创建$dir而不干扰当前umask”<代码>0777

直接在脚本中尝试:

umask 0022;
$lg->li("Creating Directory... \n\t$unzip_dir");
mkdir ($unzip_dir) or my_die("mkdir $unzip_dir failed") unless (-e $unzip_dir && -d $unzip_dir);
应引起:

drwxrwsr-x 42 buser     agroup  12K Dec 30 09:18 .
drwxr-sr-x  2 auser     agroup 4.0K Dec 28 11:51 tm_unpack_dir_1388412502.20184
新目录权限为
rwxr-sr-x
,这更正常。请注意,由于父目录的原因,setgid位仍处于设置状态

哦,您可能想知道为什么setgid位有时是小写的
's'
,有时是大写的
's'
。这取决于
可执行位
。小写
s
表示设置了
可执行位
,大写表示未设置:

$ mkdir foo
$ ls -l
drwxr-xr-x 2 johan johan 4096 Dec 30 17:22 foo
$ chmod g+s foo
$ ls -l 
drwxr-sr-x 2 johan johan 4096 Dec 30 17:22 foo
$ chmod g-x foo
$ ls -l 
drwxr-Sr-x 2 johan johan 4096 Dec 30 17:22 foo

奇怪的权限是由父目录上的setgid位与不寻常的umask组合而成的:

查看父目录的权限,第一行:

drwxrwsr-x 42 buser     agroup  12K Dec 30 09:18 .
drw-rwSr--  2 auser     agroup 4.0K Dec 28 11:51 tm_unpack_dir_1388412502.20184
请注意,它有
rwxrwsr-x
,这意味着设置了setgid位。目录上的setgid位会导致使用与目录相同的组在目录中创建新文件。新目录

0113
的umask将导致您看到的奇怪权限。这是一个不寻常的umask,默认值为
0022
。umask在执行脚本的环境中设置,或者直接在脚本本身中设置

不要担心脚本中
mkdir
之后的
0777
mkdir$dir,0777
表示“创建$dir而不干扰当前umask”<代码>0777

直接在脚本中尝试:

umask 0022;
$lg->li("Creating Directory... \n\t$unzip_dir");
mkdir ($unzip_dir) or my_die("mkdir $unzip_dir failed") unless (-e $unzip_dir && -d $unzip_dir);
应引起:

drwxrwsr-x 42 buser     agroup  12K Dec 30 09:18 .
drwxr-sr-x  2 auser     agroup 4.0K Dec 28 11:51 tm_unpack_dir_1388412502.20184
新目录权限为
rwxr-sr-x
,这更正常。请注意,由于父目录的原因,setgid位仍处于设置状态

哦,您可能想知道为什么setgid位有时是小写的
's'
,有时是大写的
's'
。这取决于
可执行位
。小写
s
表示设置了
可执行位
,大写表示未设置:

$ mkdir foo
$ ls -l
drwxr-xr-x 2 johan johan 4096 Dec 30 17:22 foo
$ chmod g+s foo
$ ls -l 
drwxr-sr-x 2 johan johan 4096 Dec 30 17:22 foo
$ chmod g-x foo
$ ls -l 
drwxr-Sr-x 2 johan johan 4096 Dec 30 17:22 foo

我已经调试了脚本并找到了问题的根源。 由我们的一个提交者发送给我们的tar.gz归档文件引起的问题。这些tar文件具有未设置执行权限的目录。我不知道他们是如何达到这样的结果的

还有一个问题-Gnu Tar没有阻止恢复文件和目录权限的密钥

因此,在使用错误的权限提取归档文件后,我必须递归地对归档文件中的所有文件和目录设置正确的权限


谢谢大家。

我已经调试了脚本并找到了问题的根源。 由我们的一个提交者发送给我们的tar.gz归档文件引起的问题。这些tar文件具有未设置执行权限的目录。我不知道他们是如何达到这样的结果的

还有一个问题-Gnu Tar没有阻止恢复文件和目录权限的密钥

因此,在使用错误的权限提取归档文件后,我必须递归地对归档文件中的所有文件和目录设置正确的权限


谢谢大家。

谁设置了这些位?函数mkdir($unzip_dir,0777)明确地将权限设置为0777。这个答案有误导性。问题是关于目录,而不是文件。目录的setuid和setgid由谁设置这些位?函数mkdir($unzip_dir,0777)明确地将权限设置为0777。这个答案有误导性。问题是关于目录,而不是文件。目录的setuid和setgid实际上有,此用户的umask是0002。实际上,此用户的umask是0002。该umask不会产生这些权限。你有没有试着打印umask?还请注意,可以通过调用
umask EXPR更改此进程的umask