我创建了这个文件结构:
test/src
test/firefox
Run Code Online (Sandbox Code Playgroud)
当我运行此命令时:
ln -s test/src test/firefox
Run Code Online (Sandbox Code Playgroud)
我希望test/firefox/src创建一个指向的符号链接test/src,但是我收到了这个错误:
-bash: cd: src: Too many levels of symbolic links
Run Code Online (Sandbox Code Playgroud)
我正在尝试在我的主目录中创建一个符号链接,该链接指向我的外部 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)
但是软链接的权限没有改变。 …
我已经使用ln符号链接写了很多年了,但我仍然把参数的顺序弄错了。
这通常让我写:
ln -s a b
Run Code Online (Sandbox Code Playgroud)
然后看着输出提醒自己。
我总是想像a -> b我读它时的样子,但实际上恰恰相反b -> a。这感觉违反直觉,所以我发现我总是在怀疑自己。
有没有人有任何提示可以帮助我记住正确的顺序?
在Arch Linux的,如果我做ls -l的/sbin,我可以看到reboot,shutdown而且poweroff都是符号连接/usr/bin/systemctl。但是发出reboot,shutdown和systemctl命令显然并不都具有相同的行为。
是ls -l不是向我展示有关符号链接的完整信息?例如,我如何知道真正的符号链接reboot是什么?
> cd /tmp
> ln -s foo
> ls -alhF /tmp
lrwxrwxrwx 1 user user 3 Jul 29 14:00 foo -> foo
Run Code Online (Sandbox Code Playgroud)
这是一个错误ln还是有一个将文件符号链接到自身的用例?
这是与coreutils 8.21-1ubuntu5.1.
我正在尝试创建一堆符号链接,但我不明白为什么这是有效的
ln -s /Users/niels/something/foo ~/bin/foo_link
Run Code Online (Sandbox Code Playgroud)
而这
cd /Users/niels/something
ln -s foo ~/bin/foo_link
Run Code Online (Sandbox Code Playgroud)
不是。
我相信它与foo_link链接到 foo in/Users/niels/bin而不是/Users/niels/something
所以问题是,如何创建一个指向绝对路径的符号链接,而不实际输入它?
作为参考,我使用的是 Mac OS X 10.9 和 Zsh。
我创建了一个符号链接(昨天),如下所示:
sudo ln -s bin/python /usr/bin/prj-python
Run Code Online (Sandbox Code Playgroud)
当我运行时:
prj-python file.py
Run Code Online (Sandbox Code Playgroud)
我得到:
prj-python: command not found
Run Code Online (Sandbox Code Playgroud)
当我再次尝试创建链接时,我得到:
ln: 创建符号链接`/usr/bin/prj-python': 文件存在
为什么会这样?我的$PATH是:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/real/RealPlayer
我有2个问题。第一个用于-sf选项,第二个用于更具体的-f选项用法。
通过谷歌搜索,我找到了 command ln、 option-s和-f.
(从http://linux.about.com/od/commands/l/blcmdl1_ln.htm复制)
-s, --symbolic : make symbolic links instead of hard links
-f, --force : remove existing destination files
Run Code Online (Sandbox Code Playgroud)
我分别理解这些选项。但是,如何同时使用 this-s和-foptions 呢?-s用于创建链接文件,-f用于删除链接文件。为什么要使用这个合并选项?
为了更多地了解ln命令,我做了一些例子。
$ touch foo # create sample file
$ ln -s foo bar # make link to file
$ vim bar # check how link file works: foo file opened
$ ln -f …Run Code Online (Sandbox Code Playgroud) ln ×10
symlink ×7
linux ×2
shell ×2
arch-linux ×1
bash ×1
coreutils ×1
directory ×1
files ×1
filesystems ×1
ls ×1
mv ×1
permissions ×1
reboot ×1
rhel ×1
shell-script ×1