使用coreutils install安装符号链接

时间:2016-02-22 18:05:01

标签: shared-libraries gnu-coreutils

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

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符号链接?

2 个答案:

答案 0 :(得分:2)

我也想知道这件事。在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

答案 1 :(得分:0)

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

请参阅我的问题here

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

您也可以使用tar:

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

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