首页 > 系统相关 >在 Linux 上查找特定文件的所有链接

在 Linux 上查找特定文件的所有链接

时间:2023-01-15 11:07:18浏览次数:37  
标签:11 file1 tpoint 查找 Linux test home 链接


概述

在本教程中,我们将学习如何在 Linux 上查找特定文件的所有链接。我们将使用命令 lsof 列出任何进程打开的所有文件,然后 grep 仅过滤掉那些链接到目标文件的文件。

什么是链接?

Unix/Linux 系统中的链接是两个不同文件或目录之间的关联。创建链接时,它会为原始文件或目录创建新名称。您可以通过链接文件的别名访问链接文件,而不是直接访问原始文件。例如,如果创建一个名为“test”的符号链接,指向 /home/user/Desktop/file1.txt,则可以使用 test 而不是 Desktop/file1.txt 访问该文件。

设置

我们有一个 dir1 文件夹和一个 file1.txt 文档。我们使用 ln 命令从不同的文件夹创建了几个符号链接,指向文本文档和文件夹。


[tpoint@server1:~/test]$ ls -lrth
total 12K
-rw-r--r-- 1 tpoint tpoint11 Jun 11 16:50 file1.txt
drwxr-xr-x 4 tpoint tpoint4.0K Jun 11 16:50 dir1
[tpoint@server1:/tmp]$ ln -s ~tpoint/test/file1.txt filelink
[tpoint@server1:/tmp]$ ln -s ~tpoint/test/dir1 dirlink
[tpoint@server1:/tmp]$ ls -lrth
total 49M
lrwxrwxrwx 1 tpoint tpoint28 Jun 11 16:52 filelink -> /home/tpoint/test/file1.txt
lrwxrwxrwx 1 tpoint tpoint28 Jun 11 16:52 dirlink -> /home/tpoint/test/dir1
...


我们希望标识映射到 file1.txt 或 dir1 的所有链接。

您可以使用几种不同的方法来实现这一目标。现在,我们将详细研究每一个。

使用 find 命令

查找选项允许您查找文档中的所有链接。现在让我们看看是否可以通过使用这两个过滤器找到任何有用的链接目标。

按确切文件名查找

要找到并跟踪所有名为 file1.txt 的超链接文件,我们将 −L 选项添加到 grep 命令 −


[tpoint@server1:~/test]$ find -L / -samefile file1.txt
/home/tpoint/test/file1.txt
/tmp/filelink
/opt/filelink2
/srv/filelink3
find: ‘/etc/polkit-1/localauthority’: Permission denied

使用 −samefile 开关,我们将文件名或文件夹路径添加到命令行。搜索在任何地方执行,使用根 (/) 作为工作目录。

伟大!成功了。现已找到所有 file1.txt 链接。

我们可以使用重定向将错误消息(例如权限被拒绝)发送到 /dev/null。


[tpoint@server1:~/test]$ find -L / -samefile file1.txt 2> /dev/null
/home/tpoint/test/file1.txt
/tmp/filelink
/opt/filelink2
/srv/filelink3


按索引节点编号查找

在 Linux 文件系统(如 ext4)上工作时,它使用 inode 存储有关文件的信息。我们通过列出文件在内存中的位置(in-odes)来列出目录中的文件。每个 in−ode 都有多个链接,可以是符号链接,也可以是硬链接。我们可以通过查看文件的 inode 来判断文件是否已被修改。


[tpoint@server1:~/test]$ stat file1.txt
File: file1.txt
Size: 11 Blocks: 8 IO Block: 4096 regular file
Device: 810h/2064d Inode: 94804 Links: 1


此文件1.txt存储在索引节点编号94804处。

让我们使用带有“−inum”选项的“find”命令,该选项指的是我们要删除的文件的索引节点。


[tpoint@server1:~/test]$ find -L / -inum 94804 2> /dev/null
/home/tpoint/test/file1.txt
/tmp/filelink
/opt/filelink2
/srv/filelink3


已找到 file1.text 的所有链接。

通过递归方法查找

−type 选项允许提供多个文件类型规范。如果我们将类型指定为“小L”,它将向我们显示给定目录中的所有软链接。


[tpoint@server1:~/test]$ find / -type l
/home/tpoint/test/dir1/certs/Buypass_Class_2_Root_CA.pem
/home/tpoint/test/dir1/certs/3fb36b73.0
/home/tpoint/test/dir1/certs/0f5dc4f3.0
...


然后我们可以附加 -ls 选项以显示每个链接的完整属性。


[tpoint@server1:~/test]$ find / -type l -ls 2> /dev/null | more
94809 0 lrwxrwxrwx 1 tpoint tpoint 23 Jun 11 17:11 /tmp/dirlink -> /home/tpoint/test/dir1
94805 0 lrwxrwxrwx 1 tpoint tpoint 28 Jun 11 16:52 /srv/filelink -> /home/tpoint/test/file1.txt
94808 0 lrwxrwxrwx 1 tpoint tpoint 28 Jun 11 17:00 /tmp/filelink2 -> /home/tpoint/test/file1.txt
94810 0 lrwxrwxrwx 1 tpoint tpoint 24 Jun 11 17:11 /srv/dirlink2 -> /home/tpoint/test/dir1/
...


最后,我们可以使用“grep”命令搜索与特定文件名模式(file1.txt或dir/dir1)匹配的文件。


[tpoint@server1:~/test]$ find / -type l -ls 2> /dev/null | grep dir1
94809 0 lrwxrwxrwx 1 tpoint tpoint 23 Jun 11 17:11 /tmp/dirlink -> /home/tpoint/test/dir1
94810 0 lrwxrwxrwx 1 tpoint tpoint 24 Jun 11 17:11 /srv/dirlink2 -> /home/tpoint/test/dir1/
...


结论

在这里,我们介绍了查找文件或目录的所有硬链接的不同方法,以及如何使用查找命令行参数来实现此目的。

标签:11,file1,tpoint,查找,Linux,test,home,链接
From: https://blog.51cto.com/10zhancom/6008351

相关文章

  • containerd.service containerd-1.6.8-linux-amd64.tar.gz cni-plugins-linux-amd64-v
    配置K8S时可能会用到#systemcd来管理containerd,这https://raw.githubusercontent.com/containerd/containerd/main/containerd.service链接会访问出问题。这里附containe......
  • 【LeeCode】704. 二分查找
    【题目描述】给定一个 ​​n​​ 个元素有序的(升序)整型数组 ​​nums​​ 和一个目标值 ​​target​​  ,写一个函数搜索 ​​nums​​ 中的 ​​target​​,如果......
  • vim查找和替换
    1.查找#在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。#Vim查找支持正......
  • Linux下Typora+Gitee+picgo图床环境搭建
    前言在Linux下写Markdown笔记的时候,像上传到github上,结果发现笔记里的图片都成了这个样子:![Screenshotfrom2023-01-1503-07-24](https://gitee.com/Marches7/piture-b......
  • LeetCode寻找两个正序数组的中位数(vector/二分查找 划分数组)
    原题解题目给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。约束......
  • 【linux】在linux上安装nodejs
    在linux上安装nodejs1.到官网上下载linux的源码包sourcecode(https://nodejs.org/en/download/)并上传2.使用解压命令解压tar-xvfnode-v10.14.1-linux-x64.tar.xz3.进入到......
  • 【linux】在linux上安装elasticsearch
    在linux上安装elasticSearch使用​​wget​​命令下载/下载好上传到服务器上wgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.tar.gz(安......
  • Linux中查看日志的常用命令
    grep#遍历查看当前目录下所有文件中包含xxx的语句grep-rxxx.#查询文件中包含xxx的语句grepxxxfile_name#查询多个文件中包含xxx的语句grepxxxfile1fi......
  • Linux学习-DAY3
    1.强大好用的SHELLShell就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括​​红帽​......
  • linux 快速查询指令的用法
    --help几乎所有的指令,都可以使用--help选项进行查询。给命令使用--help选项,就会直接出现一段说明命令的文字。>date--help用法:date[选项]...[+格式]或:date[-u|-......