使用 coreutils install 安装符号链接

install symbolic links with coreutils install

我构建了一个库,我想使用 coreutils install 将该库安装到 /usr/local/lib。构建结果如下所示:

libfoo.so -> libfoo.so.1
libfoo.so.1 -> libfoo.so.1.1
libfoo.so.1.1

我想保留符号链接和 install 文件 /usr/local/lib。但是,如果我 运行

install libfoo* /usr/local/lib

符号链接已解析,/usr/local/lib 如下所示:

libfoo.so
libfoo.so.1
libfoo.so.1.1

换句话说,这些都是真实文件,没有符号链接。

install 的联机帮助页不包含任何有关解析符号链接的信息。如何 install 符号链接?

我也想知道这个。在 looking at the source code 之后,install 似乎非常积极地在安装时解析链接。这是它传递给 cp 的一些默认值;相关的以后不会被覆盖。

cp_option_init (struct cp_options *x)
{
  cp_options_default (x);
  x->copy_as_regular = true;
  x->reflink_mode = REFLINK_NEVER;
  x->dereference = DEREF_ALWAYS;
  x->hard_link = false;
  x->preserve_links = false;
  x->preserve_mode = false;
  x->symbolic_link = false;
(...)

解决方法是使用 cp + chmod.

请注意,install 实用程序始终取消引用符号链接。

请看我的问题here

要在复制文件的同时保留所有内容(符号链接、硬链接、模式等),您可以使用 cp -a

你也可以使用tar:

tar c -C source_dir file1 ... fileN | tar xv -C dest_dir

请注意,cp -atar 都将保留用户和组,并且这些文件在目的地可能必须由 root:root 所有。之后您可能需要添加一个 chown。