AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[symlink](unix)

Martin Hope
L. Cornelius Dol
Asked: 2025-01-15 09:53:31 +0800 CST

Linux 文件系统可以在解析符号链接之前解析相对路径吗?

  • 9

这里是新的 Linux 用户,刚刚从 Windows 10 过渡到 Fedora 41。对许多操作系统有丰富的经验,包括各种 *nix 和类 Unix 文件系统。

我有一个标准做法,即使用从测试文件夹到代码存储库的符号链接,以便在本地重新创建已部署的生产文件夹结构以进行测试,同时保持测试和代码存储库完全分离。我有许多像这样设置的项目用于本地测试。

例如,如下所示:

~/dev
  test
    a-project
      app => ../../code/a-project/src
        (cfg)
        (web)
      dta
        cfg
  code
    a-project
      src
        cfg
        web

这个问题的关键在于src/cfg文件夹(在生产环境中就是app/cfg文件夹)包含的文件具有对可选文件的相对引用,dta/cfg如果这些文件在生产环境中存在,则加载这些文件,这些文件应相对于文件夹。app/cfg因此,../../dta/cfg/Optional.json部署时会引用dta文件夹。PWD 是应用程序根目录(在测试环境中,这是~/dev/test/a-project并且软件中的所有路径都是相对于 PWD 指定的。这些路径在 Java 代码中使用 Java 的类进行操作File,因此这不是 shell 行为问题。

这在 Windows 上运行良好,因为文件系统将路径app/cfg/../../dta/cfg/Optional.json理解为其确切的含义,并首先解析相对引用,从而导致dta/cfg/Optional.json(前导app/cfg被以下消除../..)。

但是 Linux 显然首先解析符号链接( app/cfg/=>dev/code/project/src/)然后才应用相对路径段../../dta/cfg/Optional.json,导致找不到文件,因为该文件当然不在中~/dev/code/project/dta/cfg。

不管这在技术上是否正确,有没有什么方法可以让我在任何级别告诉 Linux 在解析符号链接之前解析相对路径段,以免发生这种意外和不可预测的行为?除了让我感到困惑和违反直觉之外,我有很多现有的代码,它们期望路径首先解析相对引用,即使用表观路径,而不是底层路径。

我的开发工作所用的文件系统是启用了大小写折叠的 ext4(来自 Windows,需要与使用 Mac 和 Windows 的其他开发人员保持兼容),我真的非常希望避免在将路径传递给操作系统之前对一堆 Java 类进行不稳定的侵入性更改以实现相对路径解析;因为它可能很脆弱,导致安全漏洞,而且它只需要用于我的测试,因为生产系统(Ubuntu Linux 服务器)不需要这些符号链接。

symlink
  • 1 个回答
  • 94 Views
Martin Hope
Seamus
Asked: 2023-12-17 16:06:43 +0800 CST

用新的手册页替换旧的手册页

  • 5

我刚刚libgpiod在我的 RPi 4B 上(从源代码)构建了当前版本(2.1 版)。. 的源 tarball 中包含六 (6) 个“命令行工具” libgpiod。在此make install过程中,这些工具及其新man页面被安装在/usr/lib/arm-linux-gnueabihf.

  • 手册页:./share/man/man1
  • 二进制exe工具:./bin

libgpiod我没有从系统中卸载现有的软件包。现在(直到我弄清楚是否保留版本 2.1,或者发布最新的软件包),我正在创建符号链接来/usr/bin指向/usr/lib/arm-linux-gnueabihf/bin. 但我不清楚如何处理manuals。我想看新的man页面;例如,当我进入时man gpioset,我想查看 中的手册页/usr/lib/arm-linux-gnueabihf/share/man/man1/gpioset.1。

由于 RPi OS 是 Debian 的衍生产品,因此我希望安装 IAW Debian 约定的手册(无论是什么)。我确实针对6 个命令行工具whereis之一的名称运行了 a ,并得到以下结果:

$ whereis gpioinfo
gpioinfo: /usr/bin/gpioinfo /usr/bin/gpioinfo.old /usr/share/man/man1/gpioinfo.1.gz

我找到了所有 6 本手册/usr/share/man/man1(作为“gzip”压缩文件)。我认为替换“新旧”手册页的一种方法是移动 ( ) 旧手册,并在其位置放置新手册的链接。但我希望有比这更优雅的东西- 也许是某个地方的“一行”,指向. 有这样的单行本吗?mv/usr/lib/arm-linux-gnueabihf/share/man/man1

有没有办法临时设置它- 直到新libgpiod软件包发布?

symlink
  • 1 个回答
  • 57 Views
Martin Hope
trentmsteel
Asked: 2023-10-12 21:58:34 +0800 CST

尝试使用 Cygwin 终端创建相同的文件夹结构和符号链接文件

  • 5

关注这篇文章 - 如何复制文件夹结构并建立文件的符号链接?

cp -al /src/dir /dest/dir    # hard-links to leaf-files

cp -as /src/dir /dest/dir    # symlinks to leaf-files

但是在将我安装的 Google 驱动器复制到本地磁盘上一次之后。我似乎已经完全停止工作了。鉴于我正在运行完全相同的命令,可能是什么问题

其工作视频:https://www.dropbox.com/scl/fi/0mitrqaefzcp7faplhv8z/symlink-server-Screen-Recording-2023-10-11-at-6.37.37-PM.mov ?rlkey=kbfxp4plnpps3wfxppty7233y&dl=0

它不起作用的视频: https://www.dropbox.com/scl/fi/ryowcu9c0cae2uit232gy/symlink-not-working-Screen-Recording-2023-10-11-at-11.32.41-PM.mov ?rlkey= n2e9pzpzqfpw28d0tu19dngbs&dl=0

symlink
  • 1 个回答
  • 26 Views
Martin Hope
Wolfhart
Asked: 2023-08-25 00:47:47 +0800 CST

如何复制符号链接而不从外部硬盘驱动器(NTFS)取消引用它们?

  • 5

我通过 NTFS 格式化的外部硬盘将文件从一台计算机移动到另一台计算机。我有一个名为“library”的文件夹,其中包含许多 PDF。该文件夹包含相当多的符号链接,因为某些 PDF(即书籍或文章)属于多个类别(即文件夹)。我面临的问题是,我无法将文件保存到我的新计算机上,并且符号链接完好无损(即,没有取消引用它们)。我能够使用命令将文件夹从旧计算机复制到外部硬盘驱动器,并且符号链接完好无损cp -a。但是,当我使用相同的命令将文件从硬盘驱动器复制到新计算机时,符号链接将被取消引用(即替换为它们引用的文件)。我也尝试过cp -r --preserve=all,结果相同。那么我需要使用哪个命令才能将符号链接从外部硬盘驱动器获取到我的新计算机上?换句话说,为什么cp -a在复制到外部硬盘驱动器时保留符号链接完整,而不是在另一个方向?我使用的是 Ubuntu 22.04,以防相关。

编辑:

我刚刚注意到,当我将硬盘驱动器连接到旧计算机(运行 Ubuntu 16.04)时,硬盘驱动器上的符号链接显示为链接并按原样工作(即,单击它们会打开引用的 PDF 文件) ),然而,当我将硬盘驱动器连接到新计算机(运行 Ubuntu 22.04)时,符号链接不会显示为链接(而是显示为 PDF 文件)并且不起作用(即,当单击它们时,文档查看器会发出错误消息File type unknown (application/octet-stream) is not supported;也就是说,文档查看器尝试将它们作为 PDF 文件打开,而不是点击链接)。为什么两个版本的 Ubuntu 会有不同的行为?

symlink
  • 1 个回答
  • 30 Views
Martin Hope
anonuser01
Asked: 2023-05-30 23:02:34 +0800 CST

删除混合了符号链接和子目录的目录是否安全?

  • 5

我有一个目录,dir. 在里面dir,有符号链接和常规子目录。我想删除dir并创建一个dir指向另一个目录的符号链接。

如果我只是这样做rm -rf dir,我相信这应该删除其中的所有子目录和符号链接dir,但是当其中有符号链接时这样做安全吗dir?

symlink
  • 1 个回答
  • 17 Views
Martin Hope
Jérôme MEVEL
Asked: 2023-05-02 17:12:00 +0800 CST

在 pg_hba.conf 文件上创建符号链接后 PostgreSQL 不工作

  • 5

我正在尝试在/var/lib/pgsql/data/pg_hba.conf(Fedora 上的默认路径)上创建一个指向位于其他地方的真实文件的符号链接,例如/var/lib/pgsql/data/pg_hba.conf -> /home/pg_hba.conf(此示例的命令:)sudo ln -sf /home/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf。

我将/home/pg_hba.conf权限 ( -rw-------)、所有者 ( postgres) 和组 ( postgres) 设置为与原始文件一样/var/lib/pgsql/data/pg_hba.conf,我什至尝试过chmod 777。当我切换到用户postgres和我cat /var/lib/pgsql/data/pg_hba.conf(现在是一个符号链接)时,它成功地打印了文件的内容/home/pg_hba.conf。

但是,当我尝试应用更改时,sudo systemctl restart postgresql出现以下错误

postgresql.service 的作业失败,因为控制进程退出并显示错误代码。

有关详细信息,请参阅“systemctl status postgresql.service”和“journalctl -xeu postgresql.service”。

我检查了日志,但没有其他有用的信息。

只有当我将我的符号链接指向同一目录 ( /var/lib/pgsql/data/) 中的一个文件时,它才有效,这完全没用 (ex: /var/lib/pgsql/data/pg_hba.conf -> /var/lib/pgsql/data/pg_hba.conf.bak)

如果我指向其他任何地方它都不起作用,即使在/var/lib/pgsql其中实际上是用户的主目录postgres!

我是 Linux 的新手,所以我尝试用我的文件创建一个符号链接~/.bashrc只是为了尝试(例如:)~./bashrc -> /home/.bashrc我echo "TEST!"在这个文件中写了一个并应用了新的配置. ~/.bashrc并且它工作得很好,我的TEST!已成功打印出来.

那么与 PostgreSQL 有什么关系呢?如何修复此错误并在pg_hba.conf文件上保留符号链接?

谢谢你的回答

symlink
  • 1 个回答
  • 36 Views
Martin Hope
David
Asked: 2023-04-19 21:57:12 +0800 CST

符号链接创建嵌套符号链接

  • 5

我为另一个团队的某个人编写了一个符号链接脚本,让其在我无权访问的目录中运行,这似乎导致了一些意想不到的事情。

destination_path=/path/to/dest/
source_path=/path/to/src

for dir in first second
do
    # replace existing symlink
    for subdir in {1000..1020}
    do 
        ln -sf $source_path/$dir/$subdir $destination_path/$dir/$subdir
    done
done

在脚本运行之前path/to/dest/$dir包含1000, 1001, ..., 1020链接到一组不同目录的符号链接。我的脚本旨在用指向的符号链接替换这些符号链接/path/to/src/$dir/$subdir,但它似乎没有这样做,而是在现有符号链接中创建了符号链接。

因此,例如,/path/to/dest/$dir/1000曾经是一个符号链接,在运行我的脚本后/path/to/dest/$dir/1000仍然指向同一个地方,但在/path/to/dest/$dir/1000,有一个符号链接1000指向$source_path/$dir/$subdir/1000。

我的脚本不应该发生这种情况,对吗?我尝试使用模拟的目标目录结构在本地重现此问题,但我无法重现此问题。

编辑:经过进一步研究,我似乎应该使用而ln -sfn不仅仅是ln -sf? 解决这个问题最简单的方法是什么?

symlink
  • 1 个回答
  • 24 Views
Martin Hope
Fred
Asked: 2023-03-28 02:29:51 +0800 CST

库符号链接是否用于加载库?

  • 7

有人告诉我这个,“我知道在加载库时 linux 上不使用符号链接。”

但是,这对我来说似乎不正确。当我在 Linux 中闲逛时,我经常不得不修复损坏的符号链接。

我可以找到有关符号链接、它们如何工作以及如何创建的信息。

我可以找到有关共享库和静态库及其工作方式的信息。

但是我找不到任何描述加载库时如何使用符号链接的库加载过程的文档。特别是当有多个版本的库时。

有人可以指点我描述如何使用符号链接在 Linux 中加载库的文档吗?

更新

经过一些研究,我相信这个人暗示.so加载库时不使用符号链接。

symlink
  • 2 个回答
  • 150 Views
Martin Hope
0xKnR
Asked: 2023-02-25 08:51:30 +0800 CST

符号链接 .desktop 文件压缩文件

  • 5

我正在尝试安装我的大学所需的应用程序。每当我尝试从原始文件夹符号链接 .desktop 文件时,它都会以某种方式压缩它,然后将其放入我想放置 .desktop 的 .local/share/applications 文件中。我怎么知道它是压缩的?它在终端中是红色的。

这是原始文件夹中的图片: zotero图片

这是目标 (.local/share/applications) 文件夹中的图片:zotero图片红色

问题是我无法从操作系统的菜单中打开应用程序。该文件未出现在菜单中。

symlink
  • 1 个回答
  • 36 Views
Martin Hope
CrazyDuck
Asked: 2022-12-31 04:16:37 +0800 CST

创建符号链接而不会出现错误“太多符号链接”

  • 6

如果我想创建符号链接,这种情况经常发生:我收到错误消息Too many symbolic links。这是什么意思,为什么我只能在我想创建符号链接的目录中解决这个错误?

例如:

cd /foo/bar
/foo/bar: sudo ln -s /some/dir /foo/bar

这行得通。

这给了我错误:

cd ~
~: sudo ln -s /some/dir /foo/bar
symlink
  • 2 个回答
  • 65 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve