Linux中怎么看出文件是硬连接?

2024-12-14 13:21:30
推荐回答(5个)
回答1:

可以通过查询文件的硬链接数来判断,如果硬链接数大于1则说明文件是硬链接。

查看硬链接是可以使用命令“ls -l”,返回结果的第二列为硬链接数。

用法示例:

可以看到file1和file3的硬链接数都大于1,为硬链接。

值得注意的是,硬链接和源文件是无法区分的,两个文件具有相同的大小、创建时间等信息。

回答2:

使用

ls -l

即可.

示例:

$ touch file1       # 创建新文件 file1
$ touch file2       # 创建新文件 file2
$ ln file1 file3    # 为 file1 创建硬链接 file3
$ ls -l
total 0
-rw-r--r-- 2 root root 0 Aug 12 16:59 file1
-rw-r--r-- 1 root root 0 Aug 12 17:00 file2
-rw-r--r-- 2 root root 0 Aug 12 16:59 file3

结果的第二列数字就是指向该文件的硬链接数. 注意, 硬链接和原文件是无法区分的. 所以 file3 是 file1 的硬链接也可以看作 file1 是 file3 的硬链接. 所以该数字大于 2 即说明该文件是硬链接. 


补充说明:

1)  使用

ls -i    # 可以与 ls -l 一起使用, 即 ls -il

可以查看文件的 inode number

$ ls -il
total 0
267105 -rw-r--r-- 2 root root 0 Aug 12 16:59 file1
267106 -rw-r--r-- 1 root root 0 Aug 12 17:00 file2
267105 -rw-r--r-- 2 root root 0 Aug 12 16:59 file3

这时结果的第一列就是文件的 inode number, 可以看出由于 file1 和 file3 互为硬链接, 所以他们的 inode number 相同.


2) 如何找出所有硬链接到某个文件的文件?

首先使用

ls -i

查看文件的 inode number

然后使用

find -inum

查找所有指向该 inode 的文件

例子:

$ find . -inum 267105
./file3
./file1


3) 关于文件夹

文件夹没有硬链接, 只有符号链接


4) 关于 NTFS

微软的文件系统好像只有 NTFS 支持硬链接.

在 NTFS 文件系统上, 当该文件是长文件名(非8.3标准dos格式)时, 而且该文件在 Windows 上创建时, 硬链接数会自动增加 1. (在 NTFS 文件系统 ls -l, 你会发现长文件名文件的 "硬链接数"通常是 2). 当然如果你创建硬链接, 那个数字也会增加. 这个与 Windows 处理长文件名文件的方式有关, Windows 为了兼容性, 会为每个长文件名文件创建一个8.3格式短文件名的硬链接. 这时虽然某个文件可能有2个硬链接, 但 Linux知道他们其实只是一个文件的不同名字, 在用户空间会把它们当作是一个文件, 你用 ls 或是 find 也只能找到1个文件, 你删除了1个就两个都没有了, 不能算是真正的硬链接. 所以在 NFTS 文件系统下, 该方法可能效果并不好. 不过在 Linux 下处理 NTFS 硬链接应该本来就是 Linux 的非典型应用了....

回答3:

文件没有硬链接的. 目录才有, 而且都是系统自动创建的.

回答4:

[root@python test]# echo "你咋这么帅呢" >> lianjie.txt
[root@python test]# ln lianjie.txt lianjie_ying.txt 
[root@python test]# ln -s lianjie.txt lianjie_ruan.txt 
[root@python test]# file lianjie*
lianjie_ruan.txt: symbolic link to `lianjie.txt'
lianjie.txt:      UTF-8 Unicode text
lianjie_ying.txt: UTF-8 Unicode text
[root@python test]# ls -li lianjie*
652826 lrwxrwxrwx 1 root root 11 Jan 25 19:45 lianjie_ruan.txt -> lianjie.txt
652824 -rw-r--r-- 2 root root 19 Jan 25 19:45 lianjie.txt
652824 -rw-r--r-- 2 root root 19 Jan 25 19:45 lianjie_ying.txt
[root@python test]# rm -rf lianjie.txt 
[root@python test]# ls -li lianjie*
652826 lrwxrwxrwx 1 root root 11 Jan 25 19:45 lianjie_ruan.txt -> lianjie.txt
652824 -rw-r--r-- 1 root root 19 Jan 25 19:45 lianjie_ying.txt
[root@python test]# cat lianjie_ying.txt 
你咋这么帅呢
[root@python test]# cat lianjie_ruan.txt 
cat: lianjie_ruan.txt: No such file or directory
[root@python test]#

呃,能看出很多区别吧,自己总结去……

回答5:

第一种:
alias ll="ls -l | sed '1iFile_Permissions Owner Group Size Modified_Time Name'"

然后以后用ll

第二种,装一个ls增强工具 exa
exa -bghHliS