실행시 ./hello_shell.bash와 . hello_shell.bash의 차이, 그리고 퍼미션 문제

[url:3571km74]http://hipersayanx.blogspot.kr/2012/12/object-oriented-programming-in-bash.html[/url:3571km74]을 살펴보다 궁금증이 생겨 여쭙니다.

[code:3571km74]
#!/bin/bash

hello_shell.bash

echo Hello Shell!
[/code:3571km74]

hello_shell.bash 파일을 생성한 뒤 chmod -x hello_shell.bash 로 실행파일을 만들고

$ ./hello_shell.bash
-bash: ./hello_shell.bash: 허가거부

$ . hello_shell.bash
Hello Shell!

그러면 chmod 755 hello_shell.bash를 줘서 실행퍼미션을 지정하고

$ ./hello_shell.bash
Hello Shell!

  1. 실행방법에서 ./hello_shell.bash와 . hello_shell.bash의 퍼미션 차이가 왜 나는지?
  2. 두번째 실행방법은 왜 퍼미션 지정 없이도 실행이 되는것인지? 이것으로 인해 보안이슈가 생길 수 있는 것은 아닌지

가 궁금해서 여쭙니다.

[quote="loscane":fl0uj1t9]1. 실행방법에서 ./hello_shell.bash와 . hello_shell.bash의 퍼미션 차이가 왜 나는지?[/quote:fl0uj1t9]

[code:fl0uj1t9]$ ./hello_shell.bash[/code:fl0uj1t9]는 해당 스크립트를 실행시키겠다는 의미입니다. 왜 안되냐는 질문에 대해서는, 원래 그렇게 되어 있다고 밖에 대답 할 수 없겠네요. 유닉스 계열에서는 실행 권한이 없는 파일은 일반적으로 실행이 거부되게 됩니다.

[code:fl0uj1t9]$ . hello_shell.bash[/code:fl0uj1t9]는 해당 파일의 내용을 현재 쉘에서 실행한다는 의미입니다. 이 경우 자식 쉘이 생성되지 않고, 부모 쉘에서 실행되게 됩니다. 자세한 내용은 [code:fl0uj1t9]$ help source[/code:fl0uj1t9]을 확인해 보세요.

[quote="loscane":fl0uj1t9]2. 두번째 실행방법은 왜 퍼미션 지정 없이도 실행이 되는것인지? 이것으로 인해 보안이슈가 생길 수 있는 것은 아닌지[/quote:fl0uj1t9]
두번째 방법은 실행이 아니라, 읽어 오는 것입니다. 보안 이슈는 모르겠습니다. 허가 받지 않은 사용자가 터미널에 접근하여 명령을 내릴 수 있다면, 굳이 source 명령이 아니더라도 심각한 문제입니다.

[quote="별님":2s2qo1jg]는 해당 스크립트를 실행시키겠다는 의미입니다. 왜 안되냐는 질문에 대해서는, 원래 그렇게 되어 있다고 밖에 대답 할 수 없겠네요. 유닉스 계열에서는 실행 권한이 없는 파일은 일반적으로 실행이 거부되게 됩니다.

두번째 방법은 실행이 아니라, 읽어 오는 것입니다. 보안 이슈는 모르겠습니다. 허가 받지 않은 사용자가 터미널에 접근하여 명령을 내릴 수 있다면, 굳이 source 명령이 아니더라도 심각한 문제입니다.[/quote:2s2qo1jg]

저는 두번째도 실행인줄 알았습니다. 분명히 퍼미션이 잠져있어 실행이 안되야 정상인데 왜 . source.sh를 넣으니 작동이 되는지가 궁금했거든요. 답변 감사드립니다.

파이썬에서 객체지향으로 소스를 갈아엎던 중에, 쉘에서도 객체지향이 되지 않을까 궁금해 검색하다 위와 같은 명령어를 접하게 되었어요. 쉘이 객체지향이 되는 모습을 보면서 전 쉘에대해 아무것도 모른다는 것을 경험하였습니다. 파이썬을 파고드느라 쉘을 살필 여유가 없지만, 그래도 객체지향적 쉘프로그래밍은 너무나도 탐이 나네요. 하고있는 일좀 마무리 짓고, 올해 입학한 대학원 공부만 안정을 찾으면 시간을 가지고 찬찬히 살펴봐야겠습니다.

source 명령에 대해 살펴보고 궁금한 것을 더 여쭙고 싶으나 시간이 없어 감사글을 먼저 올립니다. 나중에 살피다가 궁금한 것이 있으면 그때 또 여쭤보겠습니다.

hello_shell.bash Shell Hello! So glad to set the execution permissions chmod 755 hello_shell.bash and $ ./hello_shell.bash Shell Hello! 1