쉘은 ././command-name을 어떻게 해석합니까?

쉘은 ././command-name을 어떻게 해석합니까?

hello2현재 작업 디렉터리에 이름이 이진 파일이 있습니다.

이를 실행하려면 이를 눌러야 ./hello2하며 출력이 표시됩니다.

그러나 다음 명령을 사용하면 ././hello2여전히 작동합니다 .

쉘이 이 명령을 어떻게 해석하는지 설명해 주시겠습니까?

답변1

명령을 실행할 때

$ ./hello2

hello2쉘은 디렉토리에서 파일을 찾습니다 ..현재의목차. 그런 다음 몇 가지 규칙에 따라 스크립트나 바이너리를 실행합니다(이 경우에는 흥미롭지 않습니다).

주문하다

$ ././hello2

또한 쉘이 파일을 실행하도록 합니다.

이는 .과 가 ./.동일한 디렉토리이기 때문입니다.

각 디렉토리에는 .디렉토리 항목이 있습니다. 이 항목은 디렉토리 자체에 해당합니다. 그래서 말하는 것은 말하는 것과 ./같습니다 .././././././

유일한 차이점은 시스템이 일부 추가 디렉토리 조회를 수행해야 할 수도 있다는 것입니다(셸이 똑똑하고 명백한 단순화를 확인하지 않는 한).


각 디렉토리에는 ..해당 디렉토리를 가리키는 항목 도 있습니다.부모목차.

alamin, 현재 디렉터리에서 호출하면 다음 명령도 파일을 실행합니다.

$ ../alamin/hello2

같은

$ ../alamin/./hello2

그리고

$ .././alamin/./hello2

루트 디렉터리는 /특별한 경우입니다. 해당 카탈로그 항목은 ..카탈로그 항목과 동일합니다. .이는 이를 "재정의"하는 데 사용할 수 없음을 의미합니다 /...

또한보십시오:폴더에 대한 링크 수가 실제 상태를 반영하지 않습니까?

답변2

예를 들어 명령 이름을 입력하면 시스템은 다음과 같은 hello파일을 에서 찾습니다 .PATH

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

시스템이 이러한 디렉토리에서 명령을 찾을 수 없으면 command not found오류 메시지가 표시됩니다.

명령을 앞에 추가하여 ./검색을 현재 디렉터리로 제한할 수 있습니다 .

각 디렉토리에는 .디렉토리 자체에 해당하는 항목이 있으므로 입력을 통해 수행하는 모든 작업은 ././hello여전히 ​​디렉토리 자체에서 명령을 찾는 것으로 제한됩니다(두 번).

노력하다 cd ./././././.

답변3

대답은 정확하지만 다른 것을 말씀 드리고 싶습니다. 다음 명령을 실행하십시오.

┌─[luvpreet@DHARI-Inspiron-3542] - [~/Desktop/drf-vogo] - [2017-09-01 08:57:42]
└─[0] ls -la
total 60
drwxrwxr-x 14 luvpreet luvpreet 4096 Aug 14 15:30 .
drwxr-xr-x 21 luvpreet luvpreet 4096 Sep  1 00:27 ..

처음 두 줄에는 ...

이제 이것은 .현재 있는 디렉토리에 대한 포인터입니다. ..상위 디렉토리에 대한 포인터입니다 .

당신이 이것을 할 때 cd ..,

monitoring-server@monitoring-server:~/kibana-project$ cd ..
monitoring-server@monitoring-server:~$ 

상위 디렉터리로 이동합니다.

당신이 이것을 할 때 cd .,

monitoring-server@monitoring-server:~/kibana-project$ cd .
monitoring-server@monitoring-server:~/kibana-project$ 

동일한 디렉토리에 남아 있습니다.

이제 는 상위 디렉터리의 파일을 ../testfile.txt가리킵니다 . 현재 디렉터리의 테스트 파일을 가리킵니다 testfile.txt../testfile.txt

따라서 ././././././././가능하면 같은 디렉토리에 보관하십시오.

../../../../상위 디렉터리까지 한 수준 위로 계속 됩니다 .

관련 정보