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
따라서 ././././././././
가능하면 같은 디렉토리에 보관하십시오.
../../../../
상위 디렉터리까지 한 수준 위로 계속 됩니다 .