2009-01-07 28 views

回答

8

在Perl中你可以使用readlink()功能找出一個符號鏈接的目標。

您也可以使用lstat()函數讀取符號鏈接的權限(而不是stat(),它將讀取符號鏈接指向的文件的詳細信息)。

實際上,如果沒有額外的幫助,就不能在新的符號鏈接上設置所有權,因爲Perl不會公開lchown()系統調用。爲此,您可以使用CPAN的Perl Lchown模塊。

假設有足夠的權限(注:未選中代碼)

use Lchown; 
my $old_link = 'path to the symlink'; 
my $new_link = 'path to the copy'; 

my $dst = readlink($old_link); 
my @stat = lstat($old_link); 

symlink $dst, $new_link; 
lchown $stat[4], $stat[5], $new_link; # set UID and GID from the lstat() results 

你並不需要擔心的符號鏈接的權限 - 他們總是顯示爲-rwxrwxrwx

+0

謝謝。我沒有注意到符號鏈接沒有真正的權限。我需要考慮我需要擁有者變化的程度。 – splintor 2009-01-07 13:30:23

+0

還指出,如果符號鏈接的內容是_relative_路徑,那麼如果$ old_link和$ new_link不在同一個目錄中,則可能需要重寫! – Alnitak 2009-01-07 13:49:17