한 PC에서 다른 PC로 일부 파일을 복사하려고하면서 혼란 스러웠습니다. 알아 냈지만 구문은 여전히 혼란 스럽습니다. 이것은 작동합니다 :
scp ~/Desktop/Volenteer.png jay@server.ip:~j0h/b
Volenteer.png
폴더에 넣 습니다 /home/j0h/b
. 그러나 이것은 작동하지 않습니다.
scp ~Desktop/Volenteer.png jay@server.ip:~j0h/b
또한 종료 상태 1 파일을 찾을 수 없으므로 실패합니다.
scp ~/Desktop/Volenteer.png jay@server.ip:~/j0h/b
이것처럼 :
scp ~Desktop/Volenteer.png jay@server.ip:~j0h/b
그래서 분명히 사이에 약간의 차이가 ~
와 ~/
차이 즉 존재한다/
$~/
bash: /home/j0h/: Is a directory
$ ~
bash: /home/j0h: Is a directory
그렇다면 왜 scp에서 ~
해결 ~/
됩니까? 그것은 추측입니다, 나는 그것이 일어나고 있음을 확인할 수 없습니다. 그러나 일관성이 없어 혼동되는 것 같습니다. 이것은 scp의 버그입니까? 아니면 내가 놓친 물결표에 대한 것이 있습니까?
답변
~
홈 디렉토리입니다.
~foo
는 user의 홈 디렉토리입니다 ( foo
이러한 사용자가 존재하는 경우). 또는 ~foo
해당 사용자가없는 경우 이름이 지정된 디렉토리 입니다.
따라서
scp ~Desktop/Volenteer.png jay@server.ip:~j0h/b
~Desktop
Desktop
그러한 사용자가 존재하고 (보통 존재하지 않는) 또는 단지 ~Desktop
(보통 존재하지 않는 경로 ) 경우 user의 홈 디렉토리로 확장됩니다 .
에서:
scp ~/Desktop/Volenteer.png jay@server.ip:~/j0h/b
~/j0h
라는 디렉토리로 확장됩니다 j0h
에 jay
, 다시 존재할 가능성이의 홈 디렉토리.
그것은 아니다 ~
및 ~/
곳의 차이가 발생하지만,에 ~
와 ~foo
.
또한 ~
디렉토리 히스토리 탐색에도 사용할 수 있습니다.
~-
이전 작업 디렉토리입니다 (예$OLDPWD
🙂~+
현재 작업 디렉토리입니다 (예$PWD
🙂
작업 중에 scp
디렉토리를 변경할 수 없으므로이 기능은 적용 할 수 없습니다 scp
.
그리고 당신이 사용하는 경우 pushd
와popd
디렉토리 스택을 유지하기 위해, 그리고 것 의 출력에서 볼 수 있듯이, 디렉토리 스택의 일 디렉토리 . 것 (두 경우 모두 0에서 계산) 끝에서 일 디렉토리. 예를 들면 다음과 같습니다.~N
~+N
N
dirs
~-N
N
$ for i in etc usr var tmp; do pushd /$i; done
/etc ~/.vim
/usr /etc ~/.vim
/var /usr /etc ~/.vim
/tmp /var /usr /etc ~/.vim
$ dirs
/tmp /var /usr /etc ~/.vim
그런 다음 다음을 사용하여 스택의 디렉토리에 액세스 할 수 있습니다.
/tmp /var /usr /etc ~/.vim
~0 ~1 ~2 ~3 ~4
~+0 ~+1 ~+2 ~+3 ~+4
~-4 ~-3 ~-2 ~-1 ~-0
~+ ~-
답변
Bash Tilde Expansion에 대한 GNU 문서를 읽어보십시오 (이 답변을 처음 반복하기 전에해야합니다).
~/Desktop
와 ~j0h
이유가 설명, 근본적으로 다른 일을하는 ~Desktop
작동하지 않습니다
-
평문
~
은 현재$HOME
환경 변수 로 대체 되며 로그인시 설정됩니다. 그래서 나를 위해~
해결/home/oli
하고로~/Desktop
읽습니다/home/oli/Desktop
. 여기에서 tilda가 가장 많이 사용되는 것을 볼 수 있습니다. -
~username
에서 설정 한대로 해당 사용자 의 홈으로 확인 됩니다/etc/passwd
. 따라서으로~oli
해결하고/home/oli
, 반드시~j0h
해결할 수는/home/j0h
없지만, homedir은 어디에나있을 수 있습니다. -
~not-a-username
해결되지 않습니다.Desktop
사용자가 아니기 때문에~Desktop
대체되지 않습니다. 문자 그대로 파일 또는 경로~Desktop
(여기에 존재하지 않음)로 사용됩니다.
말할 필요도없이, 이것은 모두 원격으로 발생합니다 ( scp
로컬 값으로 대체 된 경우 쓸모가 없습니다 ). 이것은 ~...
공백 이외의 것이 앞에 있으면 Bash가 대체하지 않기 때문에 작동합니다 .
답변
상징 ~
하는 단축키로 사용할 /home/user
에서 bash
그렇게하는 경우, ~/Desktop/Volenteer.png
그것은 속기이다 /home/user/Desktop/Volenteer.png
.
보시 /
다시피 항상 그렇듯이 파일 시스템 계층의 새로운 수준을 보여줍니다.
답변
~
$HOME
대부분의 c 쉘 파생 / 지원 POSIX 호환 쉘 에서 환경 변수의 줄임말입니다 . 가장 일반적인 용도 ~
는 자신의 홈 디렉토리 나 다른 사용자의 홈 디렉토리를 참조 할 때입니다.
cd ~ # ie shell, take me to my home folder
cd ~root # i.e. shell, take me to root's home folder
passwd (5) 데이터베이스를 사용하는 POSIX 시스템 (UNIX, Linux, OS X, BSD)에서 로컬 사용자의 홈 디렉토리를 찾으려면 다음 /etc/passwd
과 같이 awk를 실행하십시오 .
awk -F: '{ print $1,$(NF-1) }' /etc/passwd
각 로컬 사용자 및 홈 디렉토리가 나열됩니다.