리눅스 실행파일?

익명 사용자의 이미지

웹서버를 구축하기위해서
자바를 썬에서 다운로드 받아
설치를 하였습니다.

리눅스초보자라서 /bin/java 파일을
실행하려고 하니, java 파일이 실행파일이
없다고 해서, 다른 실행파일이
./java로 실행하니 되더라구요.

근데, 실행파일 java와 ./java는 어떤
차이점이 있는가요?

익명 사용자의 이미지

안녕하세요...

리눅스는 기본적으로 내부보안을 위해서 명확한 패스가 잡히지 않은 현재
디렉에 있는 실행파일을 실행 할 수 없게 해 놨습니다.
한 예를 들어...
어떤 악의를 가진 사용자가...
아래의 코드를 /tmp에 넣어 두었다 가정을 해보면...

[rm의 소스]
$ cat rm
/usr/bin/rm -rf /
^D
$ chmod +x rm

라는 스크립트에 실행 권한을 줬다.

[상황1] $ java
그리고 root가 /tmp에서 파일을 보고 삭제할게 있어서 아래의 명령어를
실행 시켰다.
# rm [filename] ==> /usr/bin/rm -rf /
이렇게 되면은 root는 자신도 모르는 사이에 자신의 시스템을 파괴하는
행위가 되니다.

[상황2] $ ./java
같은 상황에서...
# rm [filename] ==> rm [filename]

위 둘의 차이가 이제 느껴지는지요?

./java에서 .은 현재 디렉토리를 의미합니다.
그러니 이건 현재디렉토리의 java라는 실행 파일을 싱행 시키라는 의미
가 됩니다.
그러나 java는 환경변수 중의 PATH 에 들어 있는 패스에서 java라는 프
로그램을 찾아서 실행을 시키는 것입니다.

답변이 길어서 이해가 잘 가실려나...-_-a

_ 信