有没有办法找到所有没有指向的符号链接?
find ./ -type l
Run Code Online (Sandbox Code Playgroud)
会给我所有的符号链接,但不区分去某处的链接和不去某处的链接。
我目前正在做:
find ./ -type l -exec file {} \; | grep broken
Run Code Online (Sandbox Code Playgroud)
但我想知道存在哪些替代解决方案。

你能告诉我标红的区域是什么吗?
如果我想更改/media/files/tb-prod/files为其他路径,我该怎么做?
我在教科书中读到 Unix/Linux 不允许硬链接到目录,但允许软链接。是不是因为,当我们有循环,如果我们创建硬链接,一段时间后我们删除原始文件,它会指向一些垃圾值?
如果循环是不允许硬链接的唯一原因,那么为什么允许软链接到目录?
我想要 scp一个文件到服务器。该文件是一个符号链接,实际上我想做的是复制源文件。
我不想手动跟踪源文件的路径,因为它可以被替换。
我如何获得源文件的绝对路径,以便我可以scp使用它?
我正在尝试在我的主目录中创建一个符号链接,该链接指向我的外部 HDD 上的一个目录。
当我像这样指定它时它工作正常:
cd ~
ln -s /run/media/name/exhdd/Data/ Data
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试这样做时,它会创建一个错误的链接:
cd /run/media/name/exhdd
ln -s Data/ ~/Data
Run Code Online (Sandbox Code Playgroud)
这会创建一个我无法cd进入的链接。
当我尝试时,bash 抱怨:
bash: cd: Data: Too many levels of symbolic links
Run Code Online (Sandbox Code Playgroud)
当ls设置为显示彩色输出时,我家中的数据符号链接也显示为红色。
为什么会这样?如何以这种方式创建链接?(我想在另一个目录中的我的工作目录中创建一个目录的符号链接。)
ln将创建一个指向该目录内目标的符号链接。
但是,我遇到了同样的问题:
ln -s Data/ ~/
Run Code Online (Sandbox Code Playgroud) 我在创建软链接时遇到了一些问题。以下是原文件。
$ ls -l /etc/init.d/jboss
-rwxr-xr-x 1 askar admin 4972 Mar 11 2014 /etc/init.d/jboss
Run Code Online (Sandbox Code Playgroud)
链接创建失败,文件所有者的权限问题:
ln -sv jboss /etc/init.d/jboss1
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied
$ id
uid=689(askar) gid=500(admin) groups=500(admin)
Run Code Online (Sandbox Code Playgroud)
因此,我创建了具有 sudo 权限的链接:
$ sudo ln -sv jboss /etc/init.d/jboss1
`/etc/init.d/jboss1' -> `jboss'
$ ls -l /etc/init.d/jboss1
lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss
Run Code Online (Sandbox Code Playgroud)
接下来我尝试将软链接的所有权更改为原始用户。
$ sudo chown askar.admin /etc/init.d/jboss1
$ ls -l /etc/init.d/jboss1
lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss
Run Code Online (Sandbox Code Playgroud)
但是软链接的权限没有改变。 …
我想/path/to/data/folder/month/date/hour/minute/file删除数据并将其符号链接到/path/to/recent/file并在每次创建文件时自动执行此操作。
假设我不会提前知道是否/path/to/recent/file存在,我该如何创建它(如果它不存在)或替换它(如果它存在)?我确定我可以检查它是否存在,然后进行删除、符号链接,但我想知道是否有一个简单的命令可以在一个步骤中完成我想要的操作。
我将我的代码作为 sshfs 挂载在我的主目录中,但是层次结构很难记住,所以我在我的主目录中创建了一个指向该目录的符号链接。有没有办法当我 cd 到那个符号链接时,而不是 cd 到符号链接,它实际上会 cd 到那个目录?
如果问题不清楚,这里是我正在寻找的一个例子:
foo@foo:~$ ls -l
lrwxrwxrwx 1 foo foo 5 2012-11-14 08:20 foo -> bar/bar
foo@foo:~$ cd foo
foo@foo:~/bar/bar/$
Run Code Online (Sandbox Code Playgroud) 我可以做这个:
$ pwd
/home/beau
$ ln -s /home/beau/foo/bar.txt /home/beau/bar.txt
$ readlink -f bar.txt
/home/beau/foo/bar.txt
Run Code Online (Sandbox Code Playgroud)
但我希望能够做到这一点:
$ pwd
/home/beau
$ cd foo
$ ln -s bar.txt /home/beau/bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
Run Code Online (Sandbox Code Playgroud)
这可能吗?我可以以某种方式解析相对路径名并将其传递给ln?
我对符号链接的基本理解是作为一个特殊文件,一个包含另一个文件的字符串路径的文件。内核的 VFS 抽象了很多,但有什么理由说明符号链接似乎无法编辑吗?
换句话说:我可以编辑符号链接吗?如果没有,为什么不呢?
我确实理解有多种替换符号链接的方法(答案部分目前有两种替代方法),但是解释为什么替换似乎是处理符号链接的唯一方法会很有趣。为什么你不能改变他们指向的地方?
symlink ×10
bash ×2
directory ×2
filesystems ×2
ln ×2
cd-command ×1
files ×1
find ×1
hard-link ×1
linux ×1
permissions ×1
rhel ×1
scp ×1
shell ×1