如何确定文件夹是否实际上是符号链接,以及如何修复损坏的符号链接?


28

如何知道我在Linux中是否有符号链接,某种快捷方式或文件夹?请看下面的截图。

Linux Shell中的符号链接

如您所见,该ls命令列出了一些对象,其中一些颜色为深蓝色,而另一些颜色为浅蓝色(青色)。这些青色的物体是什么?这些是实际的符号链接吗?

如您所见,我无法cd将其称为HDD。

root@dm500hd:/# cd hdd
-sh: cd: can't cd to hdd

我认为它必须重定向到,/media/hdd并且我注意到hdd文件夹丢失了。

有没有办法解决这个问题?

更新:这是ls -al命令的结果。

Linux Shell 2中的符号链接

如您所见hdd -> /media/hdd,它显示为红色。这是否意味着它已损坏或已自动安装,即连接了物理硬盘时?

更新:这是grep media /etc/auto*命令的结果。

Linux Shell 3中的符号链接

这些/etc/auto.master:/media/net/etc/auto.network条目做什么?

这是ls -Fal /media命令的结果。

Linux Shell 4中的符号链接

这有什么帮助吗?...

这是statfile命令的结果,以及/ usr和/ bin的清单。

Linux Shell 5中的符号链接

这对我有没有帮助?...对您有帮助吗?

顺便说一句,您应该知道这是带有BusyBox的基于Linux的STB,它是嵌入式系统。因此,并非所有命令都受支持。

更新:最后一个屏幕快照,显示/ sbin和/ usr / sbin中的文件和受支持的命令。

Linux Shell 6中的符号链接

更新:添加了新共享...

现在,我删除了该旧共享,并重新创建了一个与以前相同的名称,现在还添加了第二个共享。所以现在我有两个。

SHARES
remote share   local share
mydream        dream1
mydream2       dream2

LOCATIONS
remote        local
C:\mydream    /media/net/dream1
C:\mydream2   /media/net/dream2

录音放在/ media / net / dream1 / movie中。

另外,对于share dream2,我选择不在Mount Manager中将其安装为HDD替代品,因为我怀疑最多只能有一个HDD。它会记录在哪里?到两个地点?数据速率提高一倍?...我认为这是不可能的。

因此,出于这个原因,没有Dream2共享的名为子目录的电影。只有在创建时指定为HDD替换的硬盘才会获得电影子文件夹。

如果我cd从根硬盘到/media/net/dream1。如果我cd..(父)它可以追溯到root (/)

从根本上 ls -alhdd -> media/hddls -al hddhdd -> media/hddls -al media/media/net/dream1

另外,如果我cd/media另一个hdd符号链接。我以前没有注意到。我认为这是在安装共享时自动创建的。如果我cd要这个硬盘,那就去/media/net/dream1

一个符号链接hdd(/ hdd)指向另一个hdd符号链接(/ media / hdd),它又指向共享文件夹(/ media / net / dream1)?.....我头晕目眩...

在3.2.3版或至少3.2.0版的Enigma2映像之前不是这样。

编辑:通过将第二个共享设置为HDD替换,它成为用于记录的活动共享。同时,先前设置为替代HDD的共享将不再处于活动状态,即使该共享仍设置为“是”(充当HDD替代)。

如果首先将dream1用作HDD替换(“ yes”作为替换),然后将dream2设置为HDD替换,则它将成为用于记录的新共享。我仍然可以查看和查看存储在dream1中的视频文件,但无法再对其进行录制。如果我想回去使用dream1进行记录,我首先必须将dream2设置为“ no”(停止充当HDD的替代品),然后将dream1重置为“ yes”。

因此,不能同时记录两个份额。其中之一必须走。因此,它要么是dream1要么是dream2,而不是两者。尽管我应该提到,如果两个服务(电视频道)都在同一个转发器上,则可以录制多个服务(如果没有),则您会收到“无免费调谐器”消息。这是一个只有一个调谐器的机顶盒。


3
请不要粘贴文本截图。而是复制并粘贴文本,并使用pre或code标记或反引号保留缩进/格式。然后将文字缩小到显示所需内容的最低要求。顺便说一句,屏幕截图的一个问题是,当在高分辨率屏幕(例如1920x1200或2566x1440)上观看时,微小的字体甚至变得更小-甚至无法读取...像素是固定的,文本可以缩放。
cas 2012年

@CraigSanders桑德斯,您真是高...分辨率!;)认真地,我听到你了!我真的没有考虑过这方面。谢谢你的提示。下次我将尝试使用代码块。
萨米尔2012年

什么ls -al确实是显示了在长(-l)列表中的所有文件(-A)。是的,这为我提供了更多信息,但这是否有助于我识别符号链接?如果它的右边有一个箭头,那我怎么知道它是否是一个符号链接?另一个标识符显然是颜色代码,但是你们中有些人建议不要信任该颜色。
萨米尔2012年

这不再是问题。我通过Mount Manager插件(Dreambox,Enigma 2,版本3.2.3)安装了Windows CIFS共享,然后选择将其用作HDD的替代品。执行完此ls -al命令后,将显示hdd -> media/hdd。现在可以进行cdHDD链接了。但是有趣的是,它ls -al media显示了,hdd -> /media/net/mydream而实际上这就是我cd刻录硬盘的过程。“ mydream”是共享的名称。为什么我得到不同的结果?
萨米尔2012年

我的猜测是,有某种机制(可能是udev规则)可以确保将/ hdd符号链接更新为指向已挂载的任何设备或共享,以便其他程序和脚本可以仅使用/ hdd(在测试该目录之后)它指向的是已安装的fs)。出于好奇,如果您挂载第二个驱动器或共享该怎么办?它是否建立了/ hde符号链接?还是dreambox限于一个录音目录?
cas 2012年

Answers:


29

您可以使用file,stat或ls。

文件:

file命令用于根据文件的类型(符号链接,目录,设备)或内容(文本,gzip,图像,tar,...,而不管其扩展名)对文件进行分类:

$文件/ dev / stdout
/ dev / stdout:指向“ / proc / self / fd / 1”的符号链接
$文件/ proc / self / fd / 1
/ proc / self / fd / 1:指向`/ dev / pts / 0'的符号链接
$文件/ dev / pts / 0
/ dev / pts / 0:特殊字符(136/0)
$文件/ etc / passwd
/ etc / passwd:ASCII文本

ls:

$ ls -al / dev / stdout
lrwxrwxrwx 1根根15 Jan 27 07:55 / dev / stdout-> / proc / self / fd / 1

统计:

stat命令可打印出文件元数据,例如权限,大小,块数等。

$ stat / dev / stdout
  文件:'/ dev / stdout'->'/ proc / self / fd / 1'
  大小:15块:0 IO块:4096符号链接
设备:5h / 5d索引节点:1212链接:1
访问:(0777 / lrwxrwxrwx)Uid:(0 / root)Gid:(0 / root)
访问:2014-01-27 11:22:47.971187828 -0200
修改:2014-01-27 07:55:13.996981285 -0200
变更:2014-01-27 07:55:13.996981285 -0200
 出生时间:-

什么是file hdd指什么?我不明白...
Samir 2012年

stat hdd给了我-sh: stat: not found
萨米尔

我认为您没有stat命令(或者它不在您的$ PATH中)。无论如何,file命令可以给您带来帮助...
filipenf 2012年

对于Mac终端上的bash,默认情况下,file命令遵循符号链接。如果要查看它是否是符号链接,请添加-h命令。没有遵循符号链接。
ClintM '16

7

重击:

if [[ -h dirname ]]; then
    echo "it's a symbolic link"
    if ! stat $(readlink dirname) &>/dev/null; then
        echo "link target does not exist"
    fi
fi

3

查看给定文件属于哪种实体的最简单方法是使用file命令。它具有清晰,合理的输出,而无需您记住ls分类器标记是什么,也无需依靠彩色输出,该输出可能因用户而异,并且因机器而异。例如:

mail ~ # file /test
/test: broken symbolic link to `/nonexist'
mail ~ # file /dev
/dev: directory
mail ~ # file /dev/fd
/dev/fd: symbolic link to `/proc/self/fd'

如果您在系统上找不到自己,则file可以使用stat命令来告诉您文件类型和指向的位置。要查明链接是否断开,您需要运行stat -L以取消引用链接,如果链接断开,则会出现错误。

至于问题的第二部分,该media目录通常由某种自动挂载程序管理。该/media/hdd条目可能被系统用于USB大容量存储设备,甚至可能正在等待正确类型的硬盘驱动器(ATA,SCSI和Xen块设备)。除非程序试图使用断开的链接,否则断开的链接不会造成任何伤害,并且媒体链接确实为您提供了方便。您可以放心地保留/hdd链接,也可以根据需要将其删除。


您是对的,看起来file不是这里的命令,它说的是-sh: file: not foundfile输入的时间。
萨米尔

听起来您的$ PATH有点受限制。尝试执行它,而不是直接:/usr/bin/file
joruffin

我从您的其他评论中看到您在机顶盒上。可能除了Busybox之外没有安装其他任何东西,并且Busybox不模拟该file命令,但是stat如果将其编译进来,则确实支持该命令。它仍然可能在$ PATH之外,或者位于/ sbin / stat或/ usr / sbin / stat。
joruffin 2012年

它似乎不支持filestat。我检查了您提到的路径(请参见上面的屏幕截图)。无论如何...您的意思是,在理想的Linux系统中,该file命令以及目标文件或文件夹的搜索路径会告诉我这是一种哪种实体?
萨米尔

2
至于Busybox中受支持的命令,您可以运行/usr/bin/busybox,即使没有安装命令,它也会显示它支持的所有命令。要使用busybox命令,可以运行/usr/bin/busybox <command> <parameters>。因此,如果它说它支持stat命令,则可以运行/usr/bin/busybox stat /hdd。为了易于使用,您可以使用要调用的命令的名称为Busybox创建符号链接。如果它支持stat命令,则可以使用轻松运行ln -s /usr/bin/busybox /usr/bin/stat
joruffin 2012年

1
  1. 是的青色是符号链接
  2. 要查看他们指向的位置: ls -Fal
  3. 输出量 ls -Fal /media

这大概是某种自动挂载点。

grep media /etc/auto* 可能会产生打击。


什么是自动挂载点?您的意思是……当我插入物理SATA磁盘驱动器时,它是否已安装到这一点?……这是Linux STB,它没有内置HDD,但背面确实具有eSATA端口。这可能专用于此目的。
萨米尔

@Sammy是的,/media是PnP设备的标准安装点。
Nils 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.