這是我不明白的東西。在Perl中,讓我們說我有一個文件(句柄)$file
然後將權限傳遞給perl的chmod和mkdir函數
my $mode = (stat $file)[2];
給出了文件的模式,可謂類型和權限。然後,在chmod的文檔中,建議在將模式從stat發送到chmod時掩蓋文件類型,例如,
my $perm = (stat $file)[2] & 07777;
chmod($perm | 0600, $file);
類似地,對於mkdir的文檔表明mkdir(FILENAME,MASK)
「創建了由FILENAME
指定的目錄中,由MASK
指定的權限(由作爲umask的修改)」。
好吧。這是我沒有得到的。在命令行上,我使用默認權限drwxr-xr-x(八進制0755)在我的主目錄中創建目錄臨時文件。然後
- Perl的統計告訴我,這個目錄的模式爲16877.
$perms = (stat 'temp')[2] & 07777;
返回493$perms = sprintf("%04o",(stat 'temp')[2] & 07777);
收益0755
我預計chmod(x,'temp')
與X =(1) (2)將temp/
上的權限更改爲棘手的問題。但是,所有三個給予drwxr-xr-x
(不可否認,(3)您必須做chmod(oct($perms),'temp);
)類似地,mkdir(temp,16877)
,mkdir(temp,493)
,mkdir(temp,0755)
都給予權限drwxr-xr-x
對temp/
。
所以,我的問題是:究竟發生了什麼? chmod和mkdir如何取得這三個不同的值並在temp/
上設置相同的權限?我意識到一個答案可能是「有多種方法可以做到這一點」,儘管如此,但我想了解這裏發生了什麼。另外,將權限值傳遞給這些函數的建議方式是什麼?謝謝!
我無法理解短語「chmod(x,'temp')with x =(1)and(2)」。你能澄清嗎? – msw 2012-02-08 03:54:31