我在../new-path/
目录中有文件。
lrwxrwxrwx 1 root root 32 Sep 6 19:43 test1.conf -> ../new-path1/test1.conf
当我用 Vim 编辑它时,使用sudo vim test1.conf
Vim 对话框下显示的。
"test1.conf" [Permissions Denied]
我如何使用 Vim 在符号链接上编辑它。我对符号链接真的是新手。
笔记
我确实尝试过这个帖子,它当然会删除文件/文件夹和符号链接,但我只需要将符号链接作为独立文件删除,而无需删除它或取消链接,因为我没有备份任何东西。
编辑1
lsattr $(readlink -f test1.conf) 的输出
--------------e---- ./test2.conf
--------------e---- ./default-ssl.conf
lsattr: Operation not supported While reading flags on ./test1.conf
编辑2
输出ls -l ../new-path1/test1.conf
lrwxrwxrwx 1 root root 32 Sep 10 14:13 ../new-path1/test1.conf -> ../new-path1/test1.conf
感谢任何人的建议,希望任何人都可以帮助我。
答案1
你的符号链接
test1.conf -> ../new-path1/test1.conf
是无效链接。它指向一个不存在的目录。你说下面有一个文件,../new-path/
但链接指向的../new-path1
却不是这个文件。修复链接:
ln -fs ../new-path/test1.conf test1.conf
编辑后,很明显你创建了自引用符号链接
从../new-path1/test1.conf
到../new-path1/test1.conf
,即目录中new-path1
存在一个test1.conf
指向其自身的符号链接。因此,test1.conf
指向 的符号链接test1.conf
是指向 的符号链接test1.conf
……:
pduck@host> ls -L ../new-path/test1.conf
ls: cannot access '../new-path/test1.conf': Too many levels of symbolic links
删除该符号链接(rm test1.conf
)并重新创建它并使其指向现有文件。
答案2
什么是(软)符号链接(简称 symlink)?
符号链接是指向硬盘上其他位置的文件的指针。符号链接用于简化文件操作。在 Windows 中,有相似的指针称为快捷方式,用于桌面,这样您无需单击文件夹即可启动程序。相反,您可以在桌面上放置一个指向位于系统其他位置的文件夹中的程序的快捷方式。
符号链接在 Linux 上的作用相同,但它适用于控制台/系统,与图形本身无关。因此,Linux 文件系统上的程序和用户可以创建这些指针,以更高效的方式查找文件。
如何创建符号链接?它如何工作?
我在我的主文件夹中,将创建一个测试文件夹和一个测试文件。
pwd
/home/simmel
创建文件夹和文件
mkdir testfolder
touch testfolder/testfile
列出它将显示
ls -la testfolder
total 40
drwxr-xr-x 2 simmel simmel 4096 Sep 11 16:19 .
drwxr-xr-x 88 simmel simmel 24576 Sep 11 16:22 ..
-rw-r--r-- 1 simmel simmel 0 Sep 11 16:19 testfile
现在我将在主文件夹中创建一个指向测试文件夹的符号链接
pwd
/home/simmel
ln -s testfolder/testfile
ls -la testfile
lrwxrwxrwx 1 simmel simmel 19 Sep 11 16:24 testfile -> testfolder/testfile
如果您在访问符号链接的文件时遇到问题,请务必查看文件或文件夹本身,而不是符号链接。
符号链接上的 ls -la 表示每个人都具有 rwx 权限,但这根本不是事实!您需要查看文件夹内的文件(见上文),其中明确指出
ls -la testfolder
total 40
drwxr-xr-x 2 simmel simmel 4096 Sep 11 16:19 .
drwxr-xr-x 88 simmel simmel 24576 Sep 11 16:22 ..
-rw-r--r-- 1 simmel simmel 0 Sep 11 16:19 testfile
这意味着,用户 simmel 可以完全访问该文件夹(读取、写入、执行),组 simmel 只能读取和执行,系统上的其他任何人都可以。如果我更改文件或文件夹的权限或所有权,情况就会有所不同。因此,假设我们执行的操作类似于将文件交给 root。
sudo chown root:root testfolder/testfile
ls -la
total 40
drwxr-xr-x 2 simmel simmel 4096 Sep 11 16:19 .
drwxr-xr-x 88 simmel simmel 24576 Sep 11 16:29 ..
-rw-r--r-- 1 root root 0 Sep 11 16:19 testfile
如您所见,该文件现在归 root 所有,并且只能由 root 进行更改,但用户 simmel 仍然可以读取它。让我们看看符号链接说了什么,它有什么变化吗?
ls -la testfile
lrwxrwxrwx 1 simmel simmel 19 Sep 11 16:24 testfile -> testfolder/testfile
不,还是一样。所以不要依赖于查看符号链接本身,而要仔细查看目标。
在 Ubuntu 中,符号链接的权限根本不重要(例如在 BSD 中则不同)。
符号链接指向文件夹和/或文件。要获取符号链接文件夹/文件的权限,您需要修改文件夹/文件本身的权限。
换句话说,如果您决定更改符号链接的所有权或模式,您将把所有权或模式更改为文件夹/文件本身。
你的文件怎么了?
说实话,我只能猜测会发生什么。PerlDuck 的建议是你或其他人不小心这样做了
ln -s testfile testfile
这将是指向自身的符号链接。这是一个死链接,因为它不指向文件系统上其他地方的文件,而是指向自身。如果您使用彩色终端,您甚至会在终端中看到红色,表明此链接已完全断开。
但是,要创建这样的死链接,同一目录中不能有同名文件。这是行不通的。
所以我仍然希望,你的文件没有丢失,尝试找到它。
做
sudo find / -name test1.conf
也许你很幸运,它还在那里。
如果找不到它,您的文件可能会永远丢失,您必须创建一个新的文件。