如何在像“ln -s TARGET DIRECTORY”这样的目录中创建符号链接?

Posted

技术标签:

【中文标题】如何在像“ln -s TARGET DIRECTORY”这样的目录中创建符号链接?【英文标题】:How can I make a symbolic link inside a directory like `ln -s TARGET DIRECTORY` does? 【发布时间】:2016-06-15 20:46:00 【问题描述】:

我正在尝试使用 Perl 脚本在目录中创建软链接。

我可以使用ln/home/scripts 目录中创建指向/home/apuntes 的链接,如下所示:

ln -s /home/apuntes /home/scripts

但我不知道如何用 Perl 来做到这一点。我试过了

symlink("home/apuntes", "home/scripts");

但它没有创建链接并且没有错误。谁能帮帮我?

【问题讨论】:

PD:我不能使用系统调用 symlink("home/apuntes", "home/scripts") 与 shell 命令 ln -s /home/apuntes /home/scripts 不同,因为您的符号链接调用没有前导正斜杠。这是你的问题吗? 如果您还没有这样做,还请检查 $! 是否有错误。 我正在检查,它抛出:文件已经退出。 $!只有在出错后才有意义;如果符号链接返回 1 它不是 【参考方案1】:

Perl 的symlink 不支持像ln 那样传递目录而不是链接名称。您必须传递链接名称:

symlink('/home/apuntes', '/home/scripts/softlinkname');

【讨论】:

@ThisSuitIsBlack这不是 ln 和 perl 的符号链接之间的差异; ln 有 ln TARGET DIRECTORYln TARGET LINK_NAME 形式,但 symlink 只有后者。所以这是一个很好的答案,但问题缺乏实际想要的细节(并且 OP 说符号链接返回 1 他们可能是错误的)【参考方案2】:

你试过symlink('/home/apuntes', '/home/scripts')吗? (您的问题在 home 之前没有提到 /。)它应该可以工作,成功返回 1,失败返回 0(并设置 $!)。

但通常只有 root 对/home 有写访问权;你是否以 root 身份运行它?

这对我来说很好用:

sudo perl -wE'say symlink("/home/ysth","/home/xysth") || "Error: $!"'

第一次打印 1,第二次打印“错误:文件存在”。

运行sudo strace perl -wE'say symlink("/home/ysth","/home/xysth") || "Error: $!"' 给出(在很多其他东西之后):

symlink("/home/ysth", "/home/xysth")    = 0
write(1, "1\n", 21
)                      = 2

第二次运行:

symlink("/home/ysth", "/home/xysth")    = -1 EEXIST (File exists)
write(1, "Error: File exists\n", 19Error: File exists
)    = 19

当你尝试时会发生什么?

【讨论】:

是的,我以 root 身份运行它,我也尝试过 symlink('/home/apuntes', '/home/scripts') 它返回 1,并且不创建软链接跨度> 这是什么操作系统?也许尝试在 strace 下运行它,看看是否能告诉你什么? 更新了答案。并且您确定您的参数顺序正确(首先是现有文件,其次是新的符号链接名称)?【参考方案3】:

我最近遇到了类似的问题,但后来发现我在将方法传递给我的方法的参数中有一个前导空格,该方法使用相同的参数调用符号链接。查看这些小细节。我相信它会起作用的!

【讨论】:

【参考方案4】:

怎么样

system("ln -s /home/apuntes /home/scripts");

【讨论】:

问题是关于 Perl,而不是 Python。但是,即使您放弃了特定于 Python 的导入,当有一个执行相同操作的内置命令时,也没有理由使用 system 我不能使用系统调用:s

以上是关于如何在像“ln -s TARGET DIRECTORY”这样的目录中创建符号链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何在像 BBC 新闻应用一样的 UIScrollView 中添加“广告”?

在像 bittorrent 这样的点对点协议的情况下,NAT 遍历是如何工作的。

在像 bittorrent 这样的点对点协议的情况下,NAT 遍历是如何工作的。

如何在像 Java 这样的 Javascript 中创建 Bean 类?

如何在像producthunt这样的NodeJS中定义快速获取数据的路线?

如何在像“ln -s TARGET DIRECTORY”这样的目录中创建符号链接?