제목에서 알 수 있듯이 * NIX 파일 시스템에는 어떤 차이가 있습니까? 예를 들어, ls file
및ls ./file
제목에서 알 수 있듯이 * NIX 파일 시스템에는 어떤 차이가 있습니까? 예를 들어, ls file
및ls ./file
답변:
나는 SmallLoanOf1M의 설명에 열중하지 않습니다. 기술적으로 정확하지만 질문의 사용법 예제와 일치하지 않는 방식으로 답변합니다.
예를 들어, "file"과 "./file"이라는 질문과의 차이점이 하나 있습니다.
셸에서 파싱 된 문자로 파일 이름을 지정하면 어떻게됩니까? 특히 명령에 의해 해석되는 문자가 실행 중입니다.
특히 "대시"문자 : "-". 그러나 다른 문자는 쉘에 의미가 있습니다.
예. 내 파일 이름은 "-dingle"입니다
파일을 나열하십시오.
ls -dingle
# ls -dingle
ls: invalid option -- 'e'
더 나쁜 것은 파일 이름이 " -rf rmbomb *
"인 경우 어떻게해야 합니까? 이제 제거해보십시오
rm "-rf rmbomb *"
나는 그 예를 실행하려고하지 않을 것이지만, 당신이 아이디어를 얻길 바랍니다.
그렇다면 대시로 시작되는 파일을 어떻게 나열합니까? ./
앞에서 사용하십시오 .
# ls ./-dingle
./-dingle
에 대한 Ditto rm
ls \-dingle
과 같습니다. 또는 ls \-rf\ rmbomb\ \*
. ./
이름 앞에 지정된 문자가 뒤에 나오는 문자를 이스케이프하지 않기 때문에 주어진 명령 세트가 최소한 일관성을 유지하는 좋은 방법이 될 수 있습니다 ./
.
rm "-rf rmbomb *"
만드는 대신 실제로 나쁜 일을하는 것처럼 들립니다 rm
. 파일 이름을 인용하는 것을 잊어 버린 경우에만 위험하므로 단어 분리가 발생합니다. ( 예를 들어, rm $file
대신 실행하는 셸 스크립트에서 rm "$file"
. 그러나이 경우 *
변수 확장의 내용에서 glob 확장이 발생하지 않으므로 확장되지 않습니다. 원하는 경우 eval
. 가 필요합니다 .) 어쨌든, 스크립트가 rm에 전달되기 전에 파일 이름을 쪼개면 파일 space -rf .
이나 무언가를 만들 것이므로 rm ./$i
도움이되지 않습니다.
rm: invalid option -- ' '
공백을 해석하려고 할 때부터 발생합니다 -rf
. (그리고 예, 나는 무언가를 간과하고 실제로 위험한 경우를 대비하여 빈 디렉토리에서 이것을 실행했습니다. : P)
IFS=''
과 -f
각각. 드문 예는 형식이 awk
있는 피연산자 (스크립트 인 첫 번째 피연산자 제외) foo=bar
를 실행 할당이지만 ./foo=bar
읽을 파일로 처리하는 것입니다.
예.
실행하여 file
명령 행에서, BASH는 그 이름의 파일을 사용자의 $ PATH 환경 변수를 검색합니다. 파일이 $ PATH 변수 내의 디렉토리에 있지 않으면 찾을 수 없습니다.
.
현재 디렉토리를 의미합니다. ./
수단 내에서 상대적 측면에서 현재 디렉토리. 디렉토리 에서 작업 /home/sheogorath/shivering/isles.img
하는 ./isles.img
동안 호출 할 때 와 같은 것을 말하는 것과 같습니다 /home/sheogorath/shivering/
.
따라서 일반적으로 "제자리"작업 디렉토리 내에서 파일을 실행하는 데 사용됩니다.
편집 :
귀하의 예 ls
에서 쉘에 의해 호출되고 경로 변수를 사용하여 발견됩니다. 인수는 작업 디렉토리에서 처리됩니다. 이것이의 기본값이므로 ls
, 현재 디렉토리를 가리키는 지정 file
과 명시 적 지정의 차이점은 없습니다 ./file
.
모든 명령이 작업 디렉토리에서 파일 경로를 허용하는 것은 아니며 일부는 디렉토리를 통해 구성을 통해 사전 정의 된 파일을 상태로 유지해야합니다. 파일을 인수로 허용하는 명령 중에서이 명령은 덜 일반적입니다
ls
이 있으며 원래 질문에서 언급 한 것처럼 명령 뒤에 오는 파일 이름 인수와 관련이 없습니다 . 그것은 상대 경로 (현재 작업 디렉토리에 상대적인) 즉 ../../dir/filename
, 절대 경로 를 재 호출하는 것보다 더 큰 차이점입니다./path/to/dir/filename
ls
그것들은 항상 같은 경로 일 것입니다. 하나는 다른 것보다 더 명확하게 지정되어 있습니다. 인수를 처리 할 때 모든 명령이 이러한 방식으로 작동하는 것은 아니지만 대부분의 경우 동작합니다.