Articles of 符号链接

符号链接背后是什么?

UNIX / Linux系统如何在内部pipe理符号链接。 已知即使没有实际的目标文件(悬挂链接),也可能存在符号链接。 那么在内部代表一个符号链接是什么呢? 在Windows中,答案是reparse point 。 问题: 在UNIX / Linux中,答案是一个inode吗? 如果是,那么inode号码是否与目标和链接相同? 如果是的话,链接索引节点可以具有不同于目标索引节点(如果存在)的权限?

是否有任何通过fstat()检查文件是否是符号链接的POSIX方式?

有没有通过fstat(2) POSIX的方式来检查文件是否是一个符号链接? open(2)有标志O_NOFOLLOW可以检查,但是不是POSIX。 在fstat(2)有S_ISLNK ,这在man fstat说: The S_ISLNK() and S_ISSOCK() macros are not in POSIX.1-1996, but both are present in POSIX.1-2001; the former is from SVID 4, the latter from SUSv2. 编译将在我的机器上失败。 另外,在lstat(2)还有另外一个S_IFLNK ,但是它不能和fstat(2) (它将跟随所指向的文件的链接)。

复制具有指向复制文件的符号链接的目录(目录树内)

我想复制一个文件夹及其所有内容,包括子文件夹。 我在Ubuntu上使用C语言。 复制常规文件和文件夹到目前为止很简单,但复制链接的规范(现在是符号)是指它们应链接到复制的文件。 现在我只对目录树内的链接感兴趣。 (虽然我认为树之外的链接应该更容易 – 只需将完整path复制到新链接,并查明它们是否属于树中,尽pipesarnold给了我一个关于使用rsync来实现这一点的提示) 所以我有一个由readlink返回的绝对path: /home/giorgos/Desktop/folder/folder1/a.pdf 最坏的情况是: /home/giorgos/Desktop/folder/folder/folder/folder1/a.pdf 但我找不到一种方法来检索我的目录树的相对path。 如果我能find它,我可以用复制的目录名称replace它: /home/giorgos/Desktop/March/folder/myfolder/folder/folder1/a.pdf 我不能使用cp或system()函数或那种函数,解决scheme必须是低级的。 我可以使用C库加上GNU,但请发表一个答案,无论如何,我感兴趣。

如何将常规文件转换为Linux上的符号链接

我正在写一个(un)归档工具,它的devise方式是在它检查特殊属性之前首先从归档创build一个常规文件,并且可能会决定这个项目实际上是一个符号链接。 注意:在更多的人误解我想要做一个文件的符号链接之前 。 不,我将符号链接数据,即其path写入文件,然后我想告诉文件系统这是一个符号链接 我一直在OS X上进行开发,只需简单地设置Type和Creator代码就可以将常规文件转换为符号链接。 现在我想让这个代码在Linux上工作。 所以我喜欢在那里find类似的方式。 我知道创build符号链接的正常方法是调用symlink()函数,但是我想知道是否还有一种方法可以将常规文件更改为符号链接,就像在OSX的BSD系统中一样,这样我不必重构我的工作代码太多? 有lstat(),它返回st_mode最高位的文件types。 现在我想知道这个模式字段是否也有类似的setter函数。

遵循SVN中的符号链接

我有一个Linux目录(并不需要任何Windows结帐): /home/me/projects/project1 在这个项目中,我需要SVN(1.8.8)来遵循一个符号链接“link1”: /home/me/projects/project1/link1/<some_directories_and_files> 但SVN不会让我这样做,它只是添加link1而不是它的内容。 如果我尝试添加其内容,则会出现错误: svn add link1/* svn: E145001: Can't schedule an addition of '/home/me/projects/project1/link1/first_directory' below a not-directory node 我试图转换链接到硬链接,但我不能这样做: ln /path/to/my/linked/directory link1 ln: '/path/to/my/linked/directory': hard link not allowed for directory 任何想法? 你如何处理这种configuration? 我只需要从/home/me/projects/project1 svn commit一个简单的svn commit

符号链接给“权限被拒绝”…为根

我写了一个简单的脚本来自动创build一个符号链接。 #!/pseudo today = "/tmp/" + date("Ymd") exec("ln -sf " + today + " /tmp/today") 够简单; 得到今天的date,并作出符号链接。 最好在午夜之后用-f运行,所以它只是在原地更新它。 这工作得很好! …为我的用户。 xkeeper /tmp$ ls -ltr drwxrwxrwx xkeeper xkeeper 2014-10-21 lrwxrwxrwx xkeeper xkeeper today -> /tmp/2014-10-21/ xkeeper /tmp$ cd today xkeeper /tmp/today$ cd .. 注意,它工作正常,所有的权限是世界可读的,一切看起来不错。 但是,如果有人想使用这个链接(我们会说,根,但任何其他用户有这个问题),一些非常奇怪的事情发生: root /tmp# cd today bash: cd: today: Permission denied 为什么这是我完全丧失的。 我也试着用ln […]

在Linux中运行时如何在Java中创build符号链接?

在Linux中运行时如何在Java / JVM中创build符号链接? 除了使用Java本地接口(JNI)或者java.lang.Runtime.exec("/bin/ln -s /some/path symlink")什么方法吗? 创build一个符号链接是非常依赖于平台的,但是我主要关心在Linux上运行,如果在Windows中创build一个快捷方式,那么奖励就会很大。

如何移动相对符号链接?

我有很多相对的符号链接,我想移动到另一个目录。 如何在保留正确path的同时移动符号链接(具有相对PATH的链接)?

使用Python查找错误的符号链接

如果我在一个破损的symlink上调用os.stat() ,python会抛出一个OSErrorexception。 这使它find它们很有用。 但是, os.stat()可能会抛出类似的exception。 有没有更确切的方式来检测在Linux下与Python错误的symlinks ?

cd / bash在符号链接上的行为

假设我的文件夹中有〜/ a / b文件夹,文件夹b包含一个名为'symlink'的符号链接。 然后,我在bash中执行以下操作: hm@mach:~$ cd a/b/symlink hm@mach:~/a/b/symlink$ pwd -P /home/hm/a hm@mach:~/a/b/symlink$ cd .. hm@mach:~/a/b$ pwd -P /home/hm/a/b pwd -P打印当前工作目录,取消所有符号链接。 为什么工作目录/ home / hm / a / b在最后,而不是/ home / hm?