Joe*_*nar 9 command-line files directory symbolic-link
我有更新软件/opt/minergate-cli
。我已经改名目录minergate-cli
到minergate-old
与mv
命令,然后安装软件给予相同的目录名的新版本。
假设我有一个旧程序,现在有一个同名的新程序,即“minergate”,指向程序 minergate 的任何符号链接会发生什么?
他们是指向原来的程序minergate-old
,还是指向新程序的链接minergate.cli
?
符号链接不跟随它们指向的文件。如果你有link_file -> original_file
并且你做mv original_file original_file.backup
了,link_file
就会被打破
如果您重新创建原始文件名(这是 OP 所做的),符号链接将再次起作用
如果你必须 make link_file -> original_file.backup
,你必须删除link_file
并重新创建它,指向新的文件名
如果我们重命名文件,符号链接会发生什么?
一旦您将文件移动到符号链接指向的文件,符号链接就会被破坏,也就是悬空符号链接。如果你想指向新的文件名,你必须删除它并创建一个新的。
例如,让我们创建一个指向文件的符号链接:
$ ln -s testfile.txt mysymlink
$ ls -l mysymlink
lrwxrwxrwx 1 adm adm 12 Dec 8 13:28 mysymlink -> testfile.txt
Run Code Online (Sandbox Code Playgroud)
现在让我们重命名文件。你会看到符号链接仍然指向不再存在的路径名(这很重要,文件存在,路径名 - 不存在):
$ mv testfile.txt testfile.txt.bak
$ ls -l mysymlink
lrwxrwxrwx 1 xie xie 12 Dec 8 13:28 mysymlink -> testfile.txt
$ cat mysymlink
cat: mysymlink: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何修复损坏的符号链接?
如果您可以将文件重命名为原始路径名,符号链接将开始工作。
$ mv testfile.txt.bak testfile.txt $ cat mysymlink 一二三
如果重命名不是一种选择并且您可能无法重命名文件,请创建一个新的符号链接并删除旧的符号链接。
# break the symlink
$ mv testfile.txt testfile.txt.bak
$ cat mysymlink
cat: mysymlink: No such file or directory
# remove the old symlink
$ rm mysymlink
# create symlink with same filename but pointing to new pathname
$ ln -s testfile.txt.bak mysymlink
$ cat mysymlink
one two three
Run Code Online (Sandbox Code Playgroud)
OP 问题:链接是否已移至新程序
minergate.cli
?
如果在/opt/minergate-cli
安装新版本的应用程序时重新创建了符号链接目标,则符号链接将指向新文件。如果新文件具有不同的文件名,则符号链接将被破坏。如果文件名被移动,mv /opt/minergate-cli /opt/minergate.old
符号链接不会跟随文件名,就像在 OP 的示例中那样,因此/opt/minergate-cli
无论该文件是否存在,符号链接仍将继续指向。
符号链接只保存它指向的文件的名称。(提示,做ls -l symlink
并注意其文件大小)。如果您删除目标文件,然后创建一个同名的新文件,符号链接将继续工作,指的是新文件内容:
$ echo "first file" > file
$ ln -s file symlink
$ ls -l symlink
lrwxrwxrwx 1 jackman jackman 4 Oct 23 23:33 symlink -> file
# ...........................^=size ...................^^^^ target is 4 chars
$ cat symlink
first file
$ mv file file.old
$ echo "this is the second" > file
$ cat symlink
this is the second
Run Code Online (Sandbox Code Playgroud)
您可能会想到一个“硬”链接,它指的是目标文件的inode:
$ echo "first line" > file
$ ln file hardlink
$ ls -li hardlink file
1078415 -rw-r--r-- 2 jackman jackman 11 Oct 23 23:38 file
1078415 -rw-r--r-- 2 jackman jackman 11 Oct 23 23:38 hardlink
$ cat hardlink
first line
$ mv file file.old
$ echo "this is the new contents" > file
$ cat hardlink
first line
$ ls -li hardlink file file.old
1059446 -rw-r--r-- 1 jackman jackman 25 Oct 23 23:39 file
1078415 -rw-r--r-- 2 jackman jackman 11 Oct 23 23:38 file.old
1078415 -rw-r--r-- 2 jackman jackman 11 Oct 23 23:38 hardlink
Run Code Online (Sandbox Code Playgroud)
这hardlink
是与原始file
文件相同的文件。
归档时间: |
|
查看次数: |
10289 次 |
最近记录: |