Perl中反引号中chmod的时间

问题描述 投票:-1回答:1

TL; DR-转到UPDATE以获取玩具示例。以下是我最初的问题,然后才可以通过一个小示例重现此问题,并进行了清晰编辑。

我不知道这里发生了什么。我正在拔头发,试图弄清楚为什么用Perl编写的测试始终失败。

我正在测试一个功能,该功能在打开输出日志文件失败时将关闭日志记录,因此不会抑制向STDERR的输出。为了测试它是否有效,我即时创建了一个文件并将其chmod设为不可写。代码的结果运行应将打开错误以及所有其他STDERR打印到STDERR输出。在运行测试之前,我正在反引号中执行chmod。

但是,正在发生的事是日志文件不断被写入而没有错误-因此测试失败。我通过在各个位置打印ls -halF的输出来开始进行完整性检查,以查看权限更改发生的位置。最初的chmod似乎可以正常工作:

`echo > file.log;chmod 444 file.log;ls -halF file.log`

在进行一些其他设置后,随后的ls -halF file.log确认了预期的权限,但是在我运行的实际测试代码中,很早的一行代码表明所有者具有写权限!

[我最终找到了解决该问题的方法-通过在反引号中使用perl chmod()方法而不是chmod,这使我认为正在发生一些异步操作-对我来说这没有任何意义。

我最终尝试这样做,因为在众多测试中,我偶尔会看到测试随机成功。因此,我编写了一个快速循环来一次又一次地执行相同的测试-发现它可能在30%的时间内随机成功!这就是让我认为此问题可能存在某种异步性的原因,我无法解释,因为我认为反引号实际上等待该过程完成,因为它返回了输出-那么这里发生了什么?我不明白。

为了完整性-实际的测试命令也在反引号中完成-它运行一个独立的脚本。

在下面的更新中,我显示了不同的情况,但是它演示了权限状态的随机性...

更新

确定。这是一个完整的小示例,演示了该问题。注意每种情况下第二行的不同输出...

deleteme1.pl

#!/usr/bin/perl
print(`echo '' > deleteme.log;chmod 444 deleteme.log`);
print("1: ",`ls -l deleteme.log`);
`chmod 777 deleteme.log;rm -f deleteme.log`;

deleteme2.pl

#!/usr/bin/perl
print(`echo '' > deleteme.log;chmod 444 deleteme.log`);
print("2: ",`ls -l deleteme.log`);
chmod 0777, "deleteme.log";
unlink("deleteme.log");

现在观察此重复循环的输出:

tcsh> foreach f ( `seq 1 30` )
perl deleteme1.pl
perl deleteme2.pl
end
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -rw-r--r--@ 1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -rw-r--r--@ 1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--@ 1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -rw-r--r--@ 1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--@ 1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
1: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log
2: -r--r--r--  1 robleach  staff  1 May 31 21:01 deleteme.log

请注意,所有者权限的差异始终来自deleteme1.pl。我认为@表示macOS上的扩展属性。这可能与它有关,但是在某些情况下存在xattr,但是没有权限差异...

而且我也怀疑问题可能与此有关:

>ls -1 t | wc -l
   46391

所以异步发生了什么-到底是什么?!它可能与SIP或csr(util)有关吗?

更新2

这是我的具体情况更真实的例子。

deleteme3.pl

此代表我的解决方法:

#!/usr/bin/perl
open(TLG,">deleteme.log");
print TLG '';
close(TLG);
chmod 0444, "deleteme.log";
if(open(TEST,">deleteme.log"))
  {print "3 opened\n"}
else
  {print "3 unable to open\n"}
chmod 0777, "deleteme.log";
unlink("deleteme.log");

deleteme4.pl

这说明了原始问题。

#!/usr/bin/perl
`echo '' > deleteme.log;chmod 444 deleteme.log`;
if(open(TEST,">deleteme.log"))
  {print "4 opened\n"}
else
  {print "4 unable to open\n"}
chmod 0777, "deleteme.log";
unlink("deleteme.log");

如上所述,我循环播放了这2个:

tcsh>foreach f ( `seq 1 1000` )
perl deleteme3.pl
perl deleteme4.pl
end

在1000次尝试中,始终为3 unable to open输出deleteme3.pldeleteme4.pl输出4次4 opened,其余为4 unable to open

显然,这并不能说明我在大多数情况下看到的频率,我的权限显示为所有者可写,但是我猜是我碰到了某种甜蜜的地方,在某些情况下我的文件权限遭到破坏。

[我很想看看是否有人可以在任何平台上重现这些结果,但是我在运行系统perl版本5.18.2的macOS Sierra(10.12.6)上。

perl asynchronous chmod
1个回答
0
投票

我找出了异步权限更改的罪魁祸首。我的问题中缺少一条重要的信息:我工作所在的目录在Dropbox(!)中。我不知道保管箱曾经修改过文件的权限,但显然可以。

运行Dropbox应用程序:

tcsh>foreach f ( `seq 1 50` )
foreach? perl deleteme1.pl
foreach? perl deleteme2.pl
foreach? end
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -rw-r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -rw-r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -rw-r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -rw-r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -rw-r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -rw-r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -rw-r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -rw-r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -rw-r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log
1: -r--r--r--@ 1 robleach  staff  1 Jun  2 12:09 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:09 deleteme.log

退出Dropbox后(仍在dropbox目录中:

>foreach f ( `seq 1 50` )
foreach? perl deleteme1.pl
foreach? perl deleteme2.pl
foreach? end
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
1: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log
2: -r--r--r--  1 robleach  staff  1 Jun  2 12:11 deleteme.log

我发现了这个原因是因为我怀疑SIP是罪魁祸首。我以恢复模式重新启动,并使用csrutil disable禁用了SIP。重新启动后,我运行了测试循环,并看到了随机更改权限的相同行为,但是在运行时,我从Dropbox收到一个对话框,提示“ Dropbox需要更改文件夹/Users/robleach/Dropbox的权限”。我单击OK,然后重新运行循环,随机权限问题不明显。

我在恢复中重新启动以重新启用SIP,然后再次重新启动(在SIP处于活动状态时),以确认不涉及SIP。我重新运行循环,再次看到随机权限问题。然后,我退出保管箱并重新运行循环。结果在上面。

我公开承认我应该考虑提及此问题的保管箱方面。而且我承认我的开发项目出于懒惰而在Dropbox中进行-因此,我不必记住要在两台不同的计算机上执行工作之间提交/完成未完成的更改。^但是我在Dropbox中拥有这个特定项目已有多年直到现在再也没有遇到任何问题(测试#757,即按预期执行了756个测试)。因此,我什至没有想到Dropbox可能是此问题的一个因素。我没有意识到同步对源设备上的文件(即文件的创建位置)进行了有效更改。

^我确定这构成了一个单独的元堆栈帖子,但是我敢肯定,我会在对此的评论和/或不赞成投票中听到很多建议-我要说-这是我的抱怨方向堆栈一直在朝着它发展,并且趋向于(当前)运行的方式。与其与OP合作以建议特定的补充/信息并集思广益,可能缺少的内容或前进的方向,这些帖子只是在没有此类合作帮助的情况下被投票和/或关闭。 (最小的示例(有帮助地提供了示例)没有提供任何提示让我想到Dropbox,也不应提供提示。)这导致操作环境必须由OP自行解决问题。我并不是说我的问题从一开始就是好的。不是。意见/不赞成票有效地帮助我改进了它。我只是说这个平台朝着阻碍协作和集体讨论的方向发展,这是回答问题过程的一部分。帮助人们弄清楚如何问一个好问题(并且现有的堆栈机制可以很好地做到这一点),这很好,但这样做的时候,我觉得必须以一种不会扼杀总计为:“鉴于您的问题,应检查x,y和z”的有用建议。没有正式的过程可以描述一种机制来涵盖所有不涉及协作的情况。对于潜在的回答者来说,简单地说“这不是一个好问题。这里没有足够的信息来回答它”太容易了。然后投票关闭它并继续前进。因此,没有一个笨拙的询问者获得“观察方向”建议的正式/专门途径。我确信人们会回答“嗯,这就是堆栈的用途-看看上面的文档是这样的。它不是要在这里做您想做的。”很好。这是对它的批评。但是,它过去更加协作,我认为当前的机制在减少协作帮助方面具有不良的副作用。过去,它具有较高程度的深思熟虑的探索性回答者,而这些回答者的动机更多是解决难题的动机,而不是重复获取的动机。而且我认为堆栈机制已经通过“ rep”方面演变为重视竞争性回答,并通过忽略,贬低周到的协作响应类型来实现。它创造了超过质量动态的数量(我在协作和头脑风暴的背景下说)。而且,获得更多协作响应的替代方法远不如堆叠(例如reddit),在堆叠中,您经常会得到不好的建议。

© www.soinside.com 2019 - 2024. All rights reserved.