Linux bash에서 물결표의 의미 (홈 디렉토리 아님)


106

우선, 이것이 ~/홈 디렉토리 라는 것을 알고 있습니다. CD를 사용 ~하거나 ~/홈 디렉토리로 이동합니다.

그러나, cd ~X나를 특별한 장소로 데려가는 X것 같습니다.

내가 "치면 배쉬에서, cd ~"와 히트 탭을, 가능한 한 무리의 표시 ~X와 같은 옵션 ~mail~postgres~ssh. 해당 폴더로 이동하여 a를 수행하면 pwd이 폴더가 홈 디렉토리에 없다는 것을 알 수 있습니다. 그들은 사방에 있습니다.

별칭이 아닙니다. 확인했습니다. env.변수 가 아니 거나 $.

이러한 링크를 설정하는 것은 무엇이며 설정되는 위치를 어디에서 찾을 수 있습니까?


~ X는 단순히 리터럴 "~ X"를 반환하지만 ~는 $ HOME을 반환하고 ~ +는 $ PWD를 반환합니다. 셸 변수를 가져 오는 것 외에는 특별하지 않습니다. 즉, 값을 저장하거나 조회하는 명령을 실행하지 않습니다. 이미 정의되어 있습니다. ~-해보 셨나요? 나는 그것을 사용할 수 있다고 생각할 수 없지만 다시 쉘 변수 $ OLDPWD
SDsolar

답변:


71

" 물결 확장 " 이라는 Bash 기능 입니다. OS가 아닌 쉘의 기능입니다. 예를 들어 csh를 사용하면 다른 동작을 얻을 수 있습니다.

정보의 출처에 대한 질문에 답하기 위해 : 홈 디렉토리는 변수에서 가져 오며 $HOME(저장 한 내용에 관계없이) 다른 사용자의 집은 getpwent(). 이 기능은 일반적으로 NSS에 의해 제어됩니다 . 따라서 /etc/passwdNIS, LDAP 또는 SQL 데이터베이스와 같은 원하는 소스를 사용하여 정보를 검색하도록 구성 할 수 있지만 기본적으로 에서 가져옵니다.

물결표 확장은 홈 디렉토리 조회 이상입니다. 요약은 다음과 같습니다.

~              $HOME
~fred          (freds home dir)

~+             $PWD       (your current working directory)
~-             $OLDPWD    (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirs그리고 ~1, ~-1등과 함께 사용 pushd하고 popd.


참고로 물고기 는 일반 물결표 (~)를 제외하고는 지원하지 않습니다.

왜 그들이 생각해 냈 ~+습니까? 오히려 쓸모없는 것 같습니다.
cregox

3
~ +는. 그러나 ./file과 같은 것을 사용하려면 파일 시스템으로 이동하여. 위치가 있습니다-몇 번의 사이클이 걸립니다. ~ +를 사용하면 파일 시스템을 탐색 할 때 이미 정의 된 쉘 변수 $ PWD의 내용을 간단히 반환하여 작업을 저장합니다.
SDsolar

32

이들은 사용자의 홈 디렉토리입니다. cd ~(your username)예를 들어를 시도하십시오 .


1
그들은하지 심볼릭 링크, 서비스 계정 아래에 / 홈 홈 디렉토리가없는 것
아나 베츠

제 경우에는 최고의 답변입니다. 또한 내 특별한 경우에는 홈 폴더가 아닌 루트 디렉토리 / 폴더였습니다.
wlwl2

16

사용자의 홈 디렉토리 /etc/passwd입니까? postgres, sendmail, apache 등과 같은 서비스는 일반 사용자와 마찬가지로 홈 디렉토리가있는 시스템 사용자를 만듭니다.


2
실제로 그들이 ~ 사용자 이름이 지정된 사용자의 홈 디렉토리입니다
스티브 Weet

14

사용자입니다. 귀하의 확인 /etc/passwd.

cd ~username 해당 사용자의 홈 디렉토리로 이동합니다.


FTW. 찬성. 그것을 정리하는 TNX. 얼마나 많은 사이클과 아마도 서브 쉘이 그 사이클에 관여하는지 궁금합니다. 소규모 ISP와 같이 시스템에 3K 사용자가 있다고 상상해보십시오. Yikes.
SDsolar

9

내 컴퓨터에서 설정하는 방식 때문에 다음을 수행합니다.

cd ~             # /work1/jleffler
cd ~jleffler     # /u/jleffler

첫 번째는 환경 변수의 값에주의를 기울입니다 $HOME. 일부러 $HOMENFS 마운트 파일 시스템 대신 로컬 파일 시스템 으로 설정했습니다 . 두 번째는 암호 파일 (대략 NIS가 약간 복잡함)을 읽고 암호 파일에 내 홈 디렉토리가 있다고 표시 /u/jleffler되고 해당 디렉토리로 변경됨을 발견합니다.

성가신 점은 대부분의 소프트웨어가 위와 같이 동작한다는 것입니다 (그리고 쉘에 대한 POSIX 사양에는이 동작이 필요합니다). 암호 파일의 정보를 $ HOME의 현재 값으로 취급하는 소프트웨어를 사용하고 있습니다 (사용할 선택의 여지가별로 없습니다).

이것을 질문에 적용하면-다른 사람들이 지적했듯이 ' cd ~x'는 사용자 'x'의 홈 디렉토리로 이동하며 더 일반적으로 물결표 확장이 수행 될 때마다 ~x사용자 'x'의 홈 디렉토리를 의미합니다 (오류입니다. 사용자 'x'가 존재하지 않는 경우).


다음을 언급 할 가치가 있습니다.

cd ~-       # Change to previous directory ($OLDPWD)
cd ~+       # Change to current directory ($PWD)

~+현재 디렉토리로 이어지는 경로에서 심볼릭 링크를 이동하는 이상한 일을하지 않는 한 ' '에 대한 용도를 즉시 찾을 수 없습니다 .

다음을 수행 할 수도 있습니다.

cd -

이는 ~-.


1
About cd ~+: 당신은 잠재적으로 당신이 현재있는 디렉토리가 여전히 존재하는지 확인하기 위해 사용할 수 있습니다.
professorsloth


1

사용하는 경우 autofs확장은 실제로 /etc/auto.home(또는 배포판과 유사) 에서 올 수 있습니다 . 예를 들어, 내 /etc/auto.master모습은 다음과 같습니다.

/home2 auto.home --timeout 60

그리고 /etc/auto.home외모가 좋아 :

mgalgs -rw,noquota,intr space:/space/mgalgs

0

OpenDirectory / ActiveDirectory / LDAP 사용자가 홈 디렉토리에 "자동 마운트"된 것을 볼 수 있습니다.

* nix에서는 ~홈 디렉토리로 확인됩니다. 마찬가지로 ~X'사용자 X'로 해석됩니다.

디렉토리 자동 마운트와 유사하게 OpenDirectory / ActiveDirectory / LDAP는 대규모 / 기업 환경에서 사용자 디렉토리를 자동 마운트하는 데 사용됩니다. 이러한 사용자는 실제 사람이거나 다양한 기능을 제공하기 위해 만든 컴퓨터 계정 일 수 있습니다.

입력 ~Tab하면 컴퓨터의 사용자 목록이 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.