0

我創建了1.2 M的共享對象併爲該SO創建了4個軟鏈接。 所有環節的尺寸是20B和主要的大小,以便爲1.2M無法在Linux中以共享庫的原始大小複製共享庫的軟鏈接

20   May 23 10:56 libAbc.so -> libAbc.so.2.0.11.0 
20   May 23 10:56 libAbc.so.1 -> libAbc.so.2.0.11.0 
20   May 23 10:56 libAbc.so.1.0 -> libAbc.so.2.0.11.0 
1.2M  May 23 10:56 libAbc.so.2.0.11.0 

雖然我試圖將所有這些文件複製到用cp另一個文件夾,鏈接的大小等於主文件。

1.2M May 24 08:07 libABC.so 
1.2M May 24 08:07 libABC.so.1 
1.2M May 24 08:07 libABC.so.1.0 
1.2M May 24 08:07 libABC.so.2.0.11.0 

我也用

cp -s libAgent.so* src/ 

這也是一個錯誤

cp: `src/libAgent.so': can make relative symbolic links only in current directory 

爲什麼不能建立軟鏈接與他們的原始尺寸複製(20B)

回答

1
失敗

複製軟鏈接通常複製軟鏈接引用的文件,並且不復制軟鏈接。

如果您希望使用cp複製軟鏈接作爲新的軟鏈接,指定-a選項cp

cp -a libAbc.so* /path/to/another/folder 

信息cp說:

`-a' 
`--archive' 
    Preserve as much as possible of the structure and attributes of the 
    original files in the copy (but do not attempt to preserve internal 
    directory structure; i.e., `ls -U' may list the entries in a copied 
    directory in a different order). Equivalent to `-dpR'. 

,關鍵是要選擇用於複製鏈接命令的「檔案」選項。 rsync是Maxim Egorushkin指出的有效替代方案,如果該命令包含適當的命令行參數,則rsync可以複製擴展屬性和ACL。

rsync -aAX libAbc.so* /path/to/another/folder 

rsync手冊頁說:

-a, --archive    archive mode; equals -rlptgoD (no -H,-A,-X) 
    --no-OPTION    turn off an implied OPTION (e.g. --no-D) 
-A, --acls     preserve ACLs (implies -p) 
-X, --xattrs    preserve extended attributes 

在OP的使用情況下,不需要-A-X

需要注意的是,如果軟鏈接是相對鏈接,將其複製到新位置可能會使鏈接失效,因爲它不指向絕對路徑。

例如:

$ ls -al /usr/lib/rpmpopt 
lrwxrwxrwx 1 root root 19 2012-05-02 12:40 /usr/lib/rpmpopt -> rpm/rpmpopt-4.4.2.3 

cp -a /usr/lib/rpmpopt ${HOME}/tmprsync -av /usr/lib/rpmpopt ${HOME}/tmp我的機器上都創造了損壞的鏈接rpmpopt -> rpm/rpmpopt-4.4.2.3因爲我的本地副本沒有子文件夾中。在決定拷貝什麼時需要考慮這個事實。

此鏈接被打破,因爲$ {HOME}/TMP /轉速不存在:

$ ls -nl ${HOME}/tmp/rpmpopt 
lrwxrwxrwx 1 505 700 19 2016-05-24 10:04 /home/kbulgrien/tmp/rpmpopt -> rpm/rpmpopt-4.4.2.3 
+0

@kulgrien即沒 cp -s libAbc.so src/ cp:'src/libAbc.so':只能在當前目錄下做相對符號鏈接 – user2256825

+0

順便說一句,我同意Maxim Egorushkin關於使用'rsync'。 – kbulgrien

+0

答案不再提示'cp -s'。 – kbulgrien

1

rsync是容易出錯小於cp

rsync -av libAgent.so* src/ 
+0

請注意,rsync很容易出現相同的問題,即新位置的軟鏈接無法保證正常工作。 I.E.我的機器上的'rsync -av/usr/lib/rpmpopt $ {HOME}/tmp'創建一箇中斷的鏈接'rpmpopt - > rpm/rpmpopt-4.4.2.3',因爲我的本地副本沒有* rpm *子文件夾。在決定拷貝什麼時需要考慮這個事實。 – kbulgrien

+0

@kbulgrien這是真的,但對於複製符號鏈接僅指向該目錄內的目錄的用例而言,這種方式非常有效。另外還有'--safe-links'和'--copy-unsafe-links'命令行選項。 –

+0

是的,的確,'rsync -a'解決了OP的用例,所以請原諒nitpick,但我相信'-L' aka'--safe-links'或者'--copy-unsafe-links'會使引用文件的副本,而不是符號鏈接。 (Kudo的建議rsync,順便說一句)。 – kbulgrien