실행화일은 어떤것이 있나요?

윈도우는 exe com bat…뭐 이런것들이 실행화일이라 생각하면 되는데…

우분투 리눅스에서는 어떤것이 실행화일 인가요?

확장자는 도스로 부터 유래한 것입니다.
초기에 파일명은 파일명8자리와 확장자3자리로 구성되어 있었죠. 이때의 파일 시스템은 FAT12, FAT16등으로 한계가 16비트였죠.
그러다 파일시스템이 확장되면서 Windows95 FAT32에서 긴파일명이 지원되기 시작하는데
XP에서도 명령프롬프트 열어서 16비트 프로그램을 실행하다 보면 C:\PROGRA~1 머 이런 식으로 폴더이름이 보입니다.
이것이 LFN(Long File Name)을 8.3형식으로 표현한것입니다.
FAT32라는건 32BIT 파일시스템이란것이고, NT및 2000, XP, VISTA, Windows7등에는 NTFS파일 시스템을 쓰고 있죠.
하지만 하위호환성을 고집하는 윈도우즈의 정책으로 인해 아직까지도 8.3형식의 파일명을 지원하고 있습니다.

도스시절에 명령줄 실행형식은 .BAT, .COM, .EXE형식이 있었죠, 윈도우즈로 넘어가면서 .CMD도 배치파일 실행형식에 포함되었습니다.
이 실행 파일 형식이라는 것은 COMMMAND.COM이 인식하는 실행 형식을 말하는 것이구요,
사실 윈도우즈에서도 실행파일확장자것이 따로 있지 않습니다. .VBS, .JS등도 실행가능하니까요.

ls -l 명령을 실행했을떄,
drwxr-x— 1 ubuntu users 4396 2011-06-18 23:19 .
-rwxr-xr-x 1 ubuntu users 1182 2009-11-28 16:49 mu
-rw-r–r-- 1 ubuntu users 3342873 2009-11-28 16:43 mucommander.jar
라고 나오면 drwxr-x— 요부분이 권한을 나타내고, ubuntu users는 소유자의 아이디및 그룹을 나타냅니다.
권한은 d는 파일유형(디렉토리) 다음에 나오는 3자리는 소유자권한, 그다음 3자리는 소유그룹권한, 다음3자리는 타유저권한입니다.
r은 읽기 w는 쓰기 x는 실행권한
man chmod해서 자세한 내용을 확인해 보세요.

도스에서 실행파일의 확장자는
.BAT(.CMD)파일은 COMMAND.COM(CMD.EXE)가 실행해주는 스크립트파일이고,
.COM은 기계어코드가 그대로 파일로 되어 있는 파일이며,
.EXE파일은 기계어코드 및 메모리에 적재하는 코드와 기타 정보들이 들어 있는 실행 파일이죠.

유닉스,리눅스는 8.3형식의 파일명이 아니라서, 확장자라는 것이 없습니다.
즉, 파일명으로 구분하는것이 아니라 파일의 내용에 따라 구분됩니다.

이진실행파일의 경우 보통은 xxxxx.bin이나 xxxx 형태로 이름짓는게 관례이며
기타 일반적으로 사용하는 스크립트의 경우 .sh(쉘스크립트), .pl(펄스크립트), .lua(루아스크립트), .python, .py(파이썬스크립트)
등으로 이름짖는게 관례입니다.

스크립트의 경우 쉘이 실행해 주게 되는데… 이때… 내용의 맨앞에
#!프로그램경로 파라미터 형식으로 적어주면…
쉘을 통해 프로그램을 실행시킬 수 있습니다.
예를 들면 a.sh이라는 파일에
#!/usr/bin/awk
BEGIN { RS=""; }
{ print $0; }
이렇게 적어주고
chmod u+x a.sh로 실행권한을 주고,
./a.sh이라고 명령을 내리면 쉘이 awk를 실행하여 awk스크립트를 실행하게 됩니다.

이진실행파일의 경우… 실행권한이 있다면, 로더가 실행하게 됩니다.
물론 이경우 이진파일형식은 리눅스실행정보와 기계어코드가 들어 있어야 실행이 가능합니다.

간단히 파일이 이진실행파일인지 알아보려면
file /bin/ls 의 예 처럼 명령을 내리면, 파일의 형식을 알아 보실 수 있습니다.

아이콘에 톱니바퀴가 그려져있는 것들이 실행파일이고, 따로 확장자는 없습니다. 실행권한을 부여받은 파일이 실행파일이 됩니다. 어떤 스크립트를 만들고 오른클릭 - 이 파일을 프로그램으로 실행 허용에 체크하시면 그 파일이 실행파일이 되는 것이죠.

실제로 볼 수 있는 의미있는 실행파일은 두 종류가 있습니다.

  1. 기계어로 된 파일
  2. (기계어로 변환해주는)해석기가 지정된 어떤 형태의 파일

하지만 유닉스 시스템은 보통 따로 실행파일을 구분하지 않습니다.
어떤 파일이라도 실행파일이 될 수 있습니다. 아무 의미 없는 파일(ex 그림파일)이라도 실행 시도를 할 수는 있지만 에러가 나겠죠.
그러므로 그냥 파일 이름만 봐서는 알 수 없습니다.

protochaos님 정말 감사합니다.
질문은 겨우2줄인데…
이렇게 자세히 답변해주셔서…


chmod u+x a.sh로 실행권한을 주고,

./a.sh이라고 명령을 내리면 쉘이 awk를 실행하여 awk스크립트를 실행하게 됩니다.
—이말은 위에서 실행권한을 가졌기 때문에 실행이된다는 거죠?
그러면 awk는 뭔가요?

/usr/bin/awk 파일은 이진실행파일형식으로 인터프리터의 한 종류입니다.
awk의 문법에 맞춰서 해당파일을 해석해서 실행해 줍니다.
이렇게 스크립트 형식을 해석해서 실행해주는 것들을 인터프리터(해석기)라고 부릅니다.
그리고, 기계어코드로 변환해주는 것들을 컴파일러라고 부르고, 컴파일 결과 이진실행형식의 파일이 만들어집니다.

프로그램을 실행한다는 것은 실행자가 있고, 실행대상이 있어야 하죠.
그리고 실행가능하다는 뜻은 실행대상이 실행자가 실행대상으로 인식할 수 있어야 한다는 말 입니다.
여기서 a.sh는 awk라는 실행자의 실행대상입니다.
그리고, awk도 역시 /bin/bash의 실행대상입니다.

이진실행파일의 경우 실행대상인 파일은 리눅스이진실행파일형식이어야 합니다.
그리고, 일반 스크립트파일일 경우 스크립트를 인터프리트할 수 있는 인터프리터가 인식할 수 있어야 하는거죠.

예를 들어
cd /라고 명령을 내리면, 어떤 넘이 이 명령을 인식해서 실행시켜주는 걸까요?
그것은 쉘이라는 넘입니다.
보통 우분투를 설치하면 bash가 기본 로그인쉘로 지정됩니다.
로그인하였을때 로그인쉘이 실행되고, 이넘이 모든 명령을 해석합니다.
cd는 실행파일이 아니고, bash내장명령입니다.
cd /라고 한다면… bash가 "cd /"라는 명령을 해석해서 현재디렉토리를 /로 이동 시켜 줍니다.

예를 들어 perl a.pl 이라고 명령을 내리면,
로그인쉘인 bash가 "perl a.pl"이라는 명령을 해석합니다.
이때 perl은 내장명령이 아니므로
perl 프로그램을 실행경로(PATH변수)에서 찾아서 실행해 줍니다.

예를들어 /etc/group은 스크립트파일도 이진실행파일 형식도 아닌, 보통의 데이터파일입니다.

/etc/group이라는 명령을 내린다면
bash가 명령을 해석해서 /etc/group을 실행하려고 할때 권한이 없다고 오류를 출력합니다.
sudo chmod u+x /etc/group이라고 하면, /etc/group의 소유자에게 실행권한을 부여한다는 명령이되고,
./etc/group이라고 명령을 내리면, 다시 권한이 없다고 오류가 출력됩니다.
이는 /etc/group의 소유자가 root이고, 사용자에게 실행권한이 없기 때문입니다.
sudo chmod +x /etc/group이라고 명령을 내리면, 모든 사용자에게 실행권한을 부여하는 명령입니다.
이후, /etc/group이라는 명령을 내리면… 오류가 쭈르륵 나올겁니다.
bash가 /etc/group파일을 해석해서 실행하는 과정에서 오류를 계속 출력하게 될겁니다.
sudo chmod -x /etc/group 이라고 한다면, 실행 권한을 없앱니다.

file /bin/ls라는 명령을 내리면
file이라는 파일을 PATH에서 찾아서 실행하면서 /bin/ls를 매개변수로 넘깁니다.
file이라는 명령은 해당파일의 형식을 출력해 줍니다.

실행결과
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
이런식으로 결과가 나오고,
이파일(/bin/ls)는 제 컴퓨터에서는 64비트 리눅스용 이진실행파일 입니다.

이제 좀 이해가 가시나요?

[quote="protochaos":2jjueaz6]확장자는 도스로 부터 유래한 것입니다.[/quote:2jjueaz6]
확장자는 DOS이전에 VMS에서 유래된걸로 알고 있습니다.
빌게이츠가 처음 DOS를 만들때 흉내낸 OS가 VMS라는 전설?을 들은적이 있습니다.
그리고 VMS는 현재도 나오고 있습니다.
파일을 편집하여 저장하면 파일에 넘버링이 되어 기존파일들이 보관되고
한 프로세서가 열고 있는 파일은 다른쪽에서는 읽지도 못하는 재미있는?(로그보려면 짜증나는) 시스템입니다.
뭐 사용하시는 분들은 보안에서는 최고라고 합니다만…접하기가 쉽지 않다는…

냅 감사합니다…

많은 도움이 됩니다.

15년전 정보처리기사 준비할때랑 비슷한 느낌입니다…