scp
서버에 파일을 보내고 싶습니다 . 파일은 심볼릭 링크이고 실제로 내가 원하는 것은 소스 파일을 복사하는 것입니다.
소스 파일 경로는 대체될 수 있으므로 수동으로 추적하고 싶지 않습니다.
소스 파일을 사용할 수 있도록 절대 경로를 얻으려면 어떻게 해야 합니까 scp
?
답변1
다음 줄을 시도해 보세요:
readlink -f `which command`
command
변수 에 있는 경우 $PATH
그렇지 않으면 알고 있는 경로를 지정해야 합니다.
답변2
Linux에서는 readlink
심볼릭 링크의 내용을 읽고 readlink -f
심볼릭 링크가 아닌 항목을 찾을 때까지 심볼릭 링크에서 심볼릭 링크, 심볼릭 링크로 추적합니다.
그러나 scp에는 이것이 필요하지 않습니다. scp는 항상 심볼릭 링크를 따릅니다(항상 파일 내용을 복사하고 메타데이터를 무시하지만 -p
가능한 경우 파일 시간과 모드를 유지합니다).
scp가 보존할 수 있는 메타데이터와 보존할 수 없는 메타데이터에 대해 불만이 있다면 rsync를 사용하는 것이 좋습니다. 옵션이 없으면 rsync는 메타데이터를 무시하고 파일 내용을 복사합니다. 일반적으로 사용되는 옵션은 -a
모든 일반 메타데이터(시간, 심볼릭 링크, 권한 및 소유권)를 보존하며 ACL 및 하드 링크와 같은 관련 없는 메타데이터를 보존하는 옵션도 있습니다.
답변3
ls
stat
명령의 사용을 비교 readlink
하고 파일 작업을 /etc/localtime
예로 들어 보겠습니다.
- 사용엘에스:
[flying@lempstacker ~]$ ls /etc/localtime /etc/localtime [flying@lempstacker ~]$ ls -l /etc/localtime lrwxrwxrwx. 1 root root 35 Aug 2 22:41 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
- 사용통계자료
[flying@lempstacker ~]$ stat /etc/localtime File: ‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’ Size: 35 Blocks: 0 IO Block: 4096 symbolic link Device: fd01h/64769d Inode: 272202388 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-11-23 09:00:59.999887800 +0800 Modify: 2016-08-02 22:41:26.090389904 +0800 Change: 2016-08-02 22:41:26.090389904 +0800 Birth: - [flying@lempstacker ~]$ stat -c "%N" /etc/localtime ‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’
- 사용링크 읽기
[flying@lempstacker ~]$ readlink /etc/localtime ../usr/share/zoneinfo/Asia/Shanghai [flying@lempstacker ~]$ readlink -f /etc/localtime /usr/share/zoneinfo/Asia/Shanghai
readlink -f
이 명령이 가장 적합한 것 같습니다 .
-f 매개변수 설명
~에서man readlink
:
-f
,--canonicalize
: 지정된 이름을 가진 모든 구성 요소의 모든 심볼릭 링크를 반복적으로 추적하여 정규화합니다. 마지막 구성 요소를 제외한 모든 구성 요소가 존재해야 합니다.
답변4
넌 할 수있어
readlink -f `which command`
아니면 Linux에서 이와 같은 것을 얻을 수 있습니다
stat `which command` | grep File
이를 스크립트에 추가하는 경우 오류가 있는지 확인하십시오. 심볼릭 링크가 존재하지 않는 경우 오류 메시지를 표시하지 않으려면 다음과 같은 것을 사용하십시오.
readlink -f "`which command`"