翻訳方式

コンパイルの例

このページではエディタとコマンドライン端末を使います。(端末から操作)と書いておきました。その欄のうち入力するのは $ が最初にある行だけです。端末の $ で終わっている行にテキストの $ 文字の後の部分を入力し、[Enter]キーを押すことでコンピュータから反応があります。詳しくは次の別ページの解説を見てください。

コマンドライン端末の使い方

C の例

有名なCのプログラム例を実際にコンパイルしてみます。まずはソースファイルを作ります。次のプログラムを書いてHello.cという名前で保存します。

#include <stdio.h>
 
int main(void)
{
  printf("Hello, World!\n");
  return 0;
}

コンパイルします。

$ gcc Hello.c -o Hello 

Helloという名前のファイルができています。

$ ls -l
-rwx------ 1 hoge hoge 6273 2009-05-06 20:00 Hello
-rw------- 1 hoge hoge   82 2009-05-06 20:00 Hello.c

実行します。

$ ./Hello
Hello, World!

この時実行されるのはHello.cではなくコンパイルして作成されたHelloです。

ファイルの内容を確認する

Hello.cを調べます。fileというコマンドで調べることができます。

$ file Hello.c
Hello.c: ASCII C program text

ASCIIで書かれたテキストファイルでCのプログラムだといっています。

テキストはcatコマンドで内容を表示できます。

$ cat Hello.c
#include <stdio.h>
 
int main(void)
{
  printf("Hello, World!\n");
  return 0;
}

ではコンパイルの結果作成されたHelloは

$ file Hello
Hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped

このファィルはcatコマンドで表示するとまともに読めません。odコマンドでコードを見ることができます。

$ od -tx1z Hello
0000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00  >.ELF............<
0000020 02 00 03 00 01 00 00 00 f0 82 04 08 34 00 00 00  >............4...<
0000040 34 0c 00 00 00 00 00 00 34 00 20 00 07 00 28 00  >4.......4. ...(.<
0000060 24 00 21 00 06 00 00 00 34 00 00 00 34 80 04 08  >$.!.....4...4...<
0000100 34 80 04 08 e0 00 00 00 e0 00 00 00 05 00 00 00  >4...............<
0000120 04 00 00 00 03 00 00 00 14 01 00 00 14 81 04 08  >................<
0000140 14 81 04 08 13 00 00 00 13 00 00 00 04 00 00 00  >................<
0000160 01 00 00 00 01 00 00 00 00 00 00 00 00 80 04 08  >................<
0000200 00 80 04 08 a4 04 00 00 a4 04 00 00 05 00 00 00  >................<
0000220 00 10 00 00 01 00 00 00 a4 04 00 00 a4 94 04 08  >................<
0000240 a4 94 04 08 08 01 00 00 10 01 00 00 06 00 00 00  >................<
0000260 00 10 00 00 02 00 00 00 b8 04 00 00 b8 94 04 08  >................<
0000300 b8 94 04 08 d0 00 00 00 d0 00 00 00 06 00 00 00  >................<
0000320 04 00 00 00 04 00 00 00 28 01 00 00 28 81 04 08  >........(...(...<
0000340 28 81 04 08 20 00 00 00 20 00 00 00 04 00 00 00  >(... ... .......<
0000360 04 00 00 00 51 e5 74 64 00 00 00 00 00 00 00 00  >....Q.td........<
0000400 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00  >................<
0000420 04 00 00 00 2f 6c 69 62 2f 6c 64 2d 6c 69 6e 75  >..../lib/ld-linu<
0000440 78 2e 73 6f 2e 32 00 00 04 00 00 00 10 00 00 00  >x.so.2..........<
0000460 01 00 00 00 47 4e 55 00 00 00 00 00 02 00 00 00  >....GNU.........<
0000500 06 00 00 00 08 00 00 00 03 00 00 00 05 00 00 00  >................<
0000520 01 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00  >................<
0000540 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00  >................<
0000560 02 00 00 00 04 00 00 00 01 00 00 00 05 00 00 00  >................<
0000600 00 20 00 20 00 00 00 00 04 00 00 00 ad 4b e3 c0  >. . .........K..<
0000620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0000640 01 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00  >............ ...<
0000660 2e 00 00 00 00 00 00 00 b9 01 00 00 12 00 00 00  >................<
0000700 29 00 00 00 00 00 00 00 cc 01 00 00 12 00 00 00  >)...............<
0000720 1a 00 00 00 8c 84 04 08 04 00 00 00 11 00 0f 00  >................<
0000740 00 5f 5f 67 6d 6f 6e 5f 73 74 61 72 74 5f 5f 00  >.__gmon_start__.<
0000760 6c 69 62 63 2e 73 6f 2e 36 00 5f 49 4f 5f 73 74  >libc.so.6._IO_st<
0001000 64 69 6e 5f 75 73 65 64 00 70 75 74 73 00 5f 5f  >din_used.puts.__<
0001020 6c 69 62 63 5f 73 74 61 72 74 5f 6d 61 69 6e 00  >libc_start_main.<
0001040 47 4c 49 42 43 5f 32 2e 30 00 00 00 00 00 02 00  >GLIBC_2.0.......<
0001060 02 00 01 00 01 00 01 00 10 00 00 00 10 00 00 00  >................<
0001100 00 00 00 00 10 69 69 0d 00 00 02 00 40 00 00 00  >.....ii.....@...<
0001120 00 00 00 00 88 95 04 08 06 01 00 00 98 95 04 08  >................<
0001140 07 01 00 00 9c 95 04 08 07 02 00 00 a0 95 04 08  >................<
0001160 07 03 00 00 55 89 e5 53 83 ec 04 e8 00 00 00 00  >....U..S........<
0001200 5b 81 c3 0c 13 00 00 8b 93 fc ff ff ff 85 d2 74  >[..............t<
0001220 05 e8 1e 00 00 00 e8 e5 00 00 00 e8 a0 01 00 00  >................<
0001240 58 5b c9 c3 ff 35 90 95 04 08 ff 25 94 95 04 08  >X[...5.....%....<
0001260 00 00 00 00 ff 25 98 95 04 08 68 00 00 00 00 e9  >.....%....h.....<
0001300 e0 ff ff ff ff 25 9c 95 04 08 68 08 00 00 00 e9  >.....%....h.....<
0001320 d0 ff ff ff ff 25 a0 95 04 08 68 10 00 00 00 e9  >.....%....h.....<
0001340 c0 ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0001360 31 ed 5e 89 e1 83 e4 f0 50 54 52 68 d0 83 04 08  >1.^.....PTRh....<
0001400 68 e0 83 04 08 51 56 68 a4 83 04 08 e8 b3 ff ff  >h....QVh........<
0001420 ff f4 90 90 90 90 90 90 90 90 90 90 90 90 90 90  >................<
0001440 55 89 e5 53 83 ec 04 80 3d ac 95 04 08 00 75 40  >U..S....=.....u@<
0001460 8b 15 b0 95 04 08 b8 b0 94 04 08 2d ac 94 04 08  >...........-....<
0001500 c1 f8 02 8d 58 ff 39 da 73 1f 8d b6 00 00 00 00  >....X.9.s.......<
0001520 8d 42 01 a3 b0 95 04 08 ff 14 85 ac 94 04 08 8b  >.B..............<
0001540 15 b0 95 04 08 39 da 72 e7 c6 05 ac 95 04 08 01  >.....9.r........<
0001560 83 c4 04 5b 5d c3 8d 76 00 8d bc 27 00 00 00 00  >...[]..v...'....<
0001600 55 89 e5 83 ec 08 a1 b4 94 04 08 85 c0 74 12 b8  >U............t..<
0001620 00 00 00 00 85 c0 74 09 c7 04 24 b4 94 04 08 ff  >......t...$.....<
0001640 d0 c9 c3 90 8d 4c 24 04 83 e4 f0 ff 71 fc 55 89  >.....L$.....q.U.<
0001660 e5 51 83 ec 04 c7 04 24 90 84 04 08 e8 13 ff ff  >.Q.....$........<
0001700 ff b8 00 00 00 00 83 c4 04 59 5d 8d 61 fc c3 90  >.........Y].a...<
0001720 55 89 e5 5d c3 8d 74 26 00 8d bc 27 00 00 00 00  >U..]..t&...'....<
0001740 55 89 e5 57 56 53 e8 4f 00 00 00 81 c3 a1 11 00  >U..WVS.O........<
0001760 00 83 ec 0c e8 7b fe ff ff 8d bb 18 ff ff ff 8d  >.....{..........<
0002000 83 18 ff ff ff 29 c7 c1 ff 02 85 ff 74 24 31 f6  >.....)......t$1.<
0002020 8b 45 10 89 44 24 08 8b 45 0c 89 44 24 04 8b 45  >.E..D$..E..D$..E<
0002040 08 89 04 24 ff 94 b3 18 ff ff ff 83 c6 01 39 fe  >...$..........9.<
0002060 72 de 83 c4 0c 5b 5e 5f 5d c3 8b 1c 24 c3 90 90  >r....[^_]...$...<
0002100 55 89 e5 53 83 ec 04 a1 a4 94 04 08 83 f8 ff 74  >U..S...........t<
0002120 13 bb a4 94 04 08 66 90 83 eb 04 ff d0 8b 03 83  >......f.........<
0002140 f8 ff 75 f4 83 c4 04 5b 5d c3 90 90 55 89 e5 53  >..u....[]...U..S<
0002160 83 ec 04 e8 00 00 00 00 5b 81 c3 14 11 00 00 e8  >........[.......<
0002200 9c fe ff ff 59 5b c9 c3 03 00 00 00 01 00 02 00  >....Y[..........<
0002220 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 00 00 00  >Hello, World!...<
0002240 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff  >................<
0002260 00 00 00 00 00 00 00 00 01 00 00 00 10 00 00 00  >................<
0002300 0c 00 00 00 74 82 04 08 0d 00 00 00 6c 84 04 08  >....t.......l...<
0002320 04 00 00 00 48 81 04 08 f5 fe ff 6f 70 81 04 08  >....H......op...<
0002340 05 00 00 00 e0 81 04 08 06 00 00 00 90 81 04 08  >................<
0002360 0a 00 00 00 4a 00 00 00 0b 00 00 00 10 00 00 00  >....J...........<
0002400 15 00 00 00 00 00 00 00 03 00 00 00 8c 95 04 08  >................<
0002420 02 00 00 00 18 00 00 00 14 00 00 00 11 00 00 00  >................<
0002440 17 00 00 00 5c 82 04 08 11 00 00 00 54 82 04 08  >....\.......T...<
0002460 12 00 00 00 08 00 00 00 13 00 00 00 08 00 00 00  >................<
0002500 fe ff ff 6f 34 82 04 08 ff ff ff 6f 01 00 00 00  >...o4......o....<
0002520 f0 ff ff 6f 2a 82 04 08 00 00 00 00 00 00 00 00  >...o*...........<
0002540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
*
0002600 00 00 00 00 00 00 00 00 00 00 00 00 b8 94 04 08  >................<
0002620 00 00 00 00 00 00 00 00 ba 82 04 08 ca 82 04 08  >................<
0002640 da 82 04 08 00 00 00 00 00 00 00 00 00 47 43 43  >.............GCC<
0002660 3a 20 28 44 65 62 69 61 6e 20 34 2e 33 2e 32 2d  >: (Debian 4.3.2-<
0002700 31 2e 31 29 20 34 2e 33 2e 32 00 00 47 43 43 3a  >1.1) 4.3.2..GCC:<
0002720 20 28 44 65 62 69 61 6e 20 34 2e 33 2e 32 2d 31  > (Debian 4.3.2-1<
0002740 2e 31 29 20 34 2e 33 2e 32 00 00 47 43 43 3a 20  >.1) 4.3.2..GCC: <
0002760 28 44 65 62 69 61 6e 20 34 2e 33 2e 32 2d 31 2e  >(Debian 4.3.2-1.<
0003000 31 29 20 34 2e 33 2e 32 00 00 47 43 43 3a 20 28  >1) 4.3.2..GCC: (<
0003020 44 65 62 69 61 6e 20 34 2e 33 2e 32 2d 31 2e 31  >Debian 4.3.2-1.1<
0003040 29 20 34 2e 33 2e 32 00 00 47 43 43 3a 20 28 44  >) 4.3.2..GCC: (D<
0003060 65 62 69 61 6e 20 34 2e 33 2e 32 2d 31 2e 31 29  >ebian 4.3.2-1.1)<
0003100 20 34 2e 33 2e 32 00 00 47 43 43 3a 20 28 44 65  > 4.3.2..GCC: (De<
0003120 62 69 61 6e 20 34 2e 33 2e 32 2d 31 2e 31 29 20  >bian 4.3.2-1.1) <
0003140 34 2e 33 2e 32 00 00 47 43 43 3a 20 28 44 65 62  >4.3.2..GCC: (Deb<
0003160 69 61 6e 20 34 2e 33 2e 32 2d 31 2e 31 29 20 34  >ian 4.3.2-1.1) 4<
0003200 2e 33 2e 32 00 00 00 00 24 00 00 00 02 00 8d 00  >.3.2....$.......<
0003220 00 00 04 00 00 00 00 00 74 82 04 08 22 00 00 00  >........t..."...<
0003240 6c 84 04 08 13 00 00 00 00 00 00 00 00 00 00 00  >l...............<
0003260 24 00 00 00 02 00 1a 01 00 00 04 00 00 00 00 00  >$...............<
0003300 a0 82 04 08 04 00 00 00 84 84 04 08 04 00 00 00  >................<
0003320 00 00 00 00 00 00 00 00 21 00 00 00 02 00 00 00  >........!.......<
0003340 00 00 8d 00 00 00 75 00 00 00 5f 49 4f 5f 73 74  >......u..._IO_st<
0003360 64 69 6e 5f 75 73 65 64 00 00 00 00 00 89 00 00  >din_used........<
0003400 00 02 00 00 00 00 00 04 01 00 00 00 00 01 8e 00  >................<
0003420 00 00 5d 00 00 00 14 83 04 08 14 83 04 08 00 00  >..].............<
0003440 00 00 02 01 08 4f 00 00 00 02 02 07 0c 00 00 00  >.....O..........<
0003460 02 04 07 42 00 00 00 02 04 07 3d 00 00 00 02 01  >...B......=.....<
0003500 06 51 00 00 00 02 02 05 1f 00 00 00 03 04 05 69  >.Q.............i<
0003520 6e 74 00 02 08 05 95 00 00 00 02 08 07 38 00 00  >nt...........8..<
0003540 00 02 04 05 9a 00 00 00 04 04 07 02 01 06 58 00  >..............X.<
0003560 00 00 05 29 00 00 00 01 19 87 00 00 00 01 05 03  >...)............<
0003600 8c 84 04 08 06 4f 00 00 00 00 89 00 00 00 02 00  >.....O..........<
0003620 4b 00 00 00 04 01 27 00 00 00 00 00 00 00 2f 62  >K.....'......./b<
0003640 75 69 6c 64 2f 62 75 69 6c 64 64 2f 67 6c 69 62  >uild/buildd/glib<
0003660 63 2d 32 2e 37 2f 62 75 69 6c 64 2d 74 72 65 65  >c-2.7/build-tree<
0003700 2f 69 33 38 36 2d 6c 69 62 63 2f 63 73 75 2f 63  >/i386-libc/csu/c<
0003720 72 74 69 2e 53 00 2f 62 75 69 6c 64 2f 62 75 69  >rti.S./build/bui<
0003740 6c 64 64 2f 67 6c 69 62 63 2d 32 2e 37 2f 62 75  >ldd/glibc-2.7/bu<
0003760 69 6c 64 2d 74 72 65 65 2f 67 6c 69 62 63 2d 32  >ild-tree/glibc-2<
0004000 2e 37 2f 63 73 75 00 47 4e 55 20 41 53 20 32 2e  >.7/csu.GNU AS 2.<
0004020 31 38 2e 30 00 01 80 61 00 00 00 02 00 5d 00 00  >18.0...a.....]..<
0004040 00 04 01 d1 00 00 00 20 00 00 00 2f 74 6d 70 2f  >....... .../tmp/<
0004060 63 63 31 50 54 50 37 67 2e 73 00 2f 62 75 69 6c  >cc1PTP7g.s./buil<
0004100 64 2f 62 75 69 6c 64 64 2f 67 6c 69 62 63 2d 32  >d/buildd/glibc-2<
0004120 2e 37 2f 62 75 69 6c 64 2d 74 72 65 65 2f 67 6c  >.7/build-tree/gl<
0004140 69 62 63 2d 32 2e 37 2f 63 73 75 00 47 4e 55 20  >ibc-2.7/csu.GNU <
0004160 41 53 20 32 2e 31 38 2e 30 00 01 80 01 11 01 25  >AS 2.18.0......%<
0004200 0e 13 0b 03 0e 1b 0e 11 01 12 01 10 06 00 00 02  >................<
0004220 24 00 0b 0b 3e 0b 03 0e 00 00 03 24 00 0b 0b 3e  >$...>......$...><
0004240 0b 03 08 00 00 04 24 00 0b 0b 3e 0b 00 00 05 34  >......$...>....4<
0004260 00 03 0e 3a 0b 3b 0b 49 13 3f 0c 02 0a 00 00 06  >...:.;.I.?......<
0004300 26 00 49 13 00 00 00 01 11 00 10 06 55 06 03 08  >&.I.........U...<
0004320 1b 08 25 08 13 05 00 00 00 01 11 00 10 06 55 06  >..%...........U.<
0004340 03 08 1b 08 25 08 13 05 00 00 00 23 00 00 00 02  >....%......#....<
0004360 00 1d 00 00 00 01 01 fb 0e 0d 00 01 01 01 01 00  >................<
0004400 00 00 01 00 00 01 00 69 6e 69 74 2e 63 00 00 00  >.......init.c...<
0004420 00 00 a6 00 00 00 02 00 6f 00 00 00 01 01 fb 0e  >........o.......<
0004440 0d 00 01 01 01 01 00 00 00 01 00 00 01 2f 62 75  >............./bu<
0004460 69 6c 64 2f 62 75 69 6c 64 64 2f 67 6c 69 62 63  >ild/buildd/glibc<
0004500 2d 32 2e 37 2f 62 75 69 6c 64 2d 74 72 65 65 2f  >-2.7/build-tree/<
0004520 69 33 38 36 2d 6c 69 62 63 2f 63 73 75 00 2e 2e  >i386-libc/csu...<
0004540 2f 73 79 73 64 65 70 73 2f 67 65 6e 65 72 69 63  >/sysdeps/generic<
0004560 00 00 63 72 74 69 2e 53 00 01 00 00 69 6e 69 74  >..crti.S....init<
0004600 66 69 6e 69 2e 63 00 02 00 00 00 00 05 02 74 82  >fini.c........t.<
0004620 04 08 03 0e 01 21 2f 21 3d 5a 21 67 67 2f 2f 02  >.....!/!=Z!gg//.<
0004640 05 00 01 01 04 02 00 05 02 6c 84 04 08 03 ec 00  >.........l......<
0004660 01 21 2f 21 3d 5a 21 02 06 00 01 01 50 00 00 00  >.!/!=Z!.....P...<
0004700 02 00 26 00 00 00 01 01 fb 0e 0d 00 01 01 01 01  >..&.............<
0004720 00 00 00 01 00 00 01 2f 74 6d 70 00 00 63 63 31  >......./tmp..cc1<
0004740 50 54 50 37 67 2e 73 00 01 00 00 00 00 05 02 a0  >PTP7g.s.........<
0004760 82 04 08 03 1f 01 21 21 21 02 01 00 01 01 00 05  >......!!!.......<
0005000 02 84 84 04 08 03 2d 01 21 21 21 02 01 00 01 01  >......-.!!!.....<
0005020 47 4e 55 20 43 20 34 2e 33 2e 32 00 73 68 6f 72  >GNU C 4.3.2.shor<
0005040 74 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 00 73  >t unsigned int.s<
0005060 68 6f 72 74 20 69 6e 74 00 5f 49 4f 5f 73 74 64  >hort int._IO_std<
0005100 69 6e 5f 75 73 65 64 00 6c 6f 6e 67 20 6c 6f 6e  >in_used.long lon<
0005120 67 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 00 75  >g unsigned int.u<
0005140 6e 73 69 67 6e 65 64 20 63 68 61 72 00 2f 62 75  >nsigned char./bu<
0005160 69 6c 64 2f 62 75 69 6c 64 64 2f 67 6c 69 62 63  >ild/buildd/glibc<
0005200 2d 32 2e 37 2f 62 75 69 6c 64 2d 74 72 65 65 2f  >-2.7/build-tree/<
0005220 67 6c 69 62 63 2d 32 2e 37 2f 63 73 75 00 69 6e  >glibc-2.7/csu.in<
0005240 69 74 2e 63 00 6c 6f 6e 67 20 6c 6f 6e 67 20 69  >it.c.long long i<
0005260 6e 74 00 00 00 00 00 00 ff ff ff ff 00 00 00 00  >nt..............<
0005300 74 82 04 08 96 82 04 08 6c 84 04 08 7f 84 04 08  >t.......l.......<
0005320 00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00  >................<
0005340 a0 82 04 08 a4 82 04 08 84 84 04 08 88 84 04 08  >................<
0005360 00 00 00 00 00 00 00 00 00 2e 73 79 6d 74 61 62  >..........symtab<
0005400 00 2e 73 74 72 74 61 62 00 2e 73 68 73 74 72 74  >..strtab..shstrt<
0005420 61 62 00 2e 69 6e 74 65 72 70 00 2e 6e 6f 74 65  >ab..interp..note<
0005440 2e 41 42 49 2d 74 61 67 00 2e 67 6e 75 2e 68 61  >.ABI-tag..gnu.ha<
0005460 73 68 00 2e 64 79 6e 73 79 6d 00 2e 64 79 6e 73  >sh..dynsym..dyns<
0005500 74 72 00 2e 67 6e 75 2e 76 65 72 73 69 6f 6e 00  >tr..gnu.version.<
0005520 2e 67 6e 75 2e 76 65 72 73 69 6f 6e 5f 72 00 2e  >.gnu.version_r..<
0005540 72 65 6c 2e 64 79 6e 00 2e 72 65 6c 2e 70 6c 74  >rel.dyn..rel.plt<
0005560 00 2e 69 6e 69 74 00 2e 74 65 78 74 00 2e 66 69  >..init..text..fi<
0005600 6e 69 00 2e 72 6f 64 61 74 61 00 2e 65 68 5f 66  >ni..rodata..eh_f<
0005620 72 61 6d 65 00 2e 63 74 6f 72 73 00 2e 64 74 6f  >rame..ctors..dto<
0005640 72 73 00 2e 6a 63 72 00 2e 64 79 6e 61 6d 69 63  >rs..jcr..dynamic<
0005660 00 2e 67 6f 74 00 2e 67 6f 74 2e 70 6c 74 00 2e  >..got..got.plt..<
0005700 64 61 74 61 00 2e 62 73 73 00 2e 63 6f 6d 6d 65  >data..bss..comme<
0005720 6e 74 00 2e 64 65 62 75 67 5f 61 72 61 6e 67 65  >nt..debug_arange<
0005740 73 00 2e 64 65 62 75 67 5f 70 75 62 6e 61 6d 65  >s..debug_pubname<
0005760 73 00 2e 64 65 62 75 67 5f 69 6e 66 6f 00 2e 64  >s..debug_info..d<
0006000 65 62 75 67 5f 61 62 62 72 65 76 00 2e 64 65 62  >ebug_abbrev..deb<
0006020 75 67 5f 6c 69 6e 65 00 2e 64 65 62 75 67 5f 73  >ug_line..debug_s<
0006040 74 72 00 2e 64 65 62 75 67 5f 72 61 6e 67 65 73  >tr..debug_ranges<
0006060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
*
0006120 00 00 00 00 00 00 00 00 00 00 00 00 1b 00 00 00  >................<
0006140 01 00 00 00 02 00 00 00 14 81 04 08 14 01 00 00  >................<
0006160 13 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00  >................<
0006200 00 00 00 00 23 00 00 00 07 00 00 00 02 00 00 00  >....#...........<
0006220 28 81 04 08 28 01 00 00 20 00 00 00 00 00 00 00  >(...(... .......<
0006240 00 00 00 00 04 00 00 00 00 00 00 00 35 00 00 00  >............5...<
0006260 05 00 00 00 02 00 00 00 48 81 04 08 48 01 00 00  >........H...H...<
0006300 28 00 00 00 05 00 00 00 00 00 00 00 04 00 00 00  >(...............<
0006320 04 00 00 00 31 00 00 00 f6 ff ff 6f 02 00 00 00  >....1......o....<
0006340 70 81 04 08 70 01 00 00 20 00 00 00 05 00 00 00  >p...p... .......<
0006360 00 00 00 00 04 00 00 00 04 00 00 00 3b 00 00 00  >............;...<
0006400 0b 00 00 00 02 00 00 00 90 81 04 08 90 01 00 00  >................<
0006420 50 00 00 00 06 00 00 00 01 00 00 00 04 00 00 00  >P...............<
0006440 10 00 00 00 43 00 00 00 03 00 00 00 02 00 00 00  >....C...........<
0006460 e0 81 04 08 e0 01 00 00 4a 00 00 00 00 00 00 00  >........J.......<
0006500 00 00 00 00 01 00 00 00 00 00 00 00 4b 00 00 00  >............K...<
0006520 ff ff ff 6f 02 00 00 00 2a 82 04 08 2a 02 00 00  >...o....*...*...<
0006540 0a 00 00 00 05 00 00 00 00 00 00 00 02 00 00 00  >................<
0006560 02 00 00 00 58 00 00 00 fe ff ff 6f 02 00 00 00  >....X......o....<
0006600 34 82 04 08 34 02 00 00 20 00 00 00 06 00 00 00  >4...4... .......<
0006620 01 00 00 00 04 00 00 00 00 00 00 00 67 00 00 00  >............g...<
0006640 09 00 00 00 02 00 00 00 54 82 04 08 54 02 00 00  >........T...T...<
0006660 08 00 00 00 05 00 00 00 00 00 00 00 04 00 00 00  >................<
0006700 08 00 00 00 70 00 00 00 09 00 00 00 02 00 00 00  >....p...........<
0006720 5c 82 04 08 5c 02 00 00 18 00 00 00 05 00 00 00  >\...\...........<
0006740 0c 00 00 00 04 00 00 00 08 00 00 00 79 00 00 00  >............y...<
0006760 01 00 00 00 06 00 00 00 74 82 04 08 74 02 00 00  >........t...t...<
0007000 30 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00  >0...............<
0007020 00 00 00 00 74 00 00 00 01 00 00 00 06 00 00 00  >....t...........<
0007040 a4 82 04 08 a4 02 00 00 40 00 00 00 00 00 00 00  >........@.......<
0007060 00 00 00 00 04 00 00 00 04 00 00 00 7f 00 00 00  >................<
0007100 01 00 00 00 06 00 00 00 f0 82 04 08 f0 02 00 00  >................<
0007120 7c 01 00 00 00 00 00 00 00 00 00 00 10 00 00 00  >|...............<
0007140 00 00 00 00 85 00 00 00 01 00 00 00 06 00 00 00  >................<
0007160 6c 84 04 08 6c 04 00 00 1c 00 00 00 00 00 00 00  >l...l...........<
0007200 00 00 00 00 04 00 00 00 00 00 00 00 8b 00 00 00  >................<
0007220 01 00 00 00 02 00 00 00 88 84 04 08 88 04 00 00  >................<
0007240 16 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00  >................<
0007260 00 00 00 00 93 00 00 00 01 00 00 00 02 00 00 00  >................<
0007300 a0 84 04 08 a0 04 00 00 04 00 00 00 00 00 00 00  >................<
0007320 00 00 00 00 04 00 00 00 00 00 00 00 9d 00 00 00  >................<
0007340 01 00 00 00 03 00 00 00 a4 94 04 08 a4 04 00 00  >................<
0007360 08 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00  >................<
0007400 00 00 00 00 a4 00 00 00 01 00 00 00 03 00 00 00  >................<
0007420 ac 94 04 08 ac 04 00 00 08 00 00 00 00 00 00 00  >................<
0007440 00 00 00 00 04 00 00 00 00 00 00 00 ab 00 00 00  >................<
0007460 01 00 00 00 03 00 00 00 b4 94 04 08 b4 04 00 00  >................<
0007500 04 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00  >................<
0007520 00 00 00 00 b0 00 00 00 06 00 00 00 03 00 00 00  >................<
0007540 b8 94 04 08 b8 04 00 00 d0 00 00 00 06 00 00 00  >................<
0007560 00 00 00 00 04 00 00 00 08 00 00 00 b9 00 00 00  >................<
0007600 01 00 00 00 03 00 00 00 88 95 04 08 88 05 00 00  >................<
0007620 04 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00  >................<
0007640 04 00 00 00 be 00 00 00 01 00 00 00 03 00 00 00  >................<
0007660 8c 95 04 08 8c 05 00 00 18 00 00 00 00 00 00 00  >................<
0007700 00 00 00 00 04 00 00 00 04 00 00 00 c7 00 00 00  >................<
0007720 01 00 00 00 03 00 00 00 a4 95 04 08 a4 05 00 00  >................<
0007740 08 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00  >................<
0007760 00 00 00 00 cd 00 00 00 08 00 00 00 03 00 00 00  >................<
0010000 ac 95 04 08 ac 05 00 00 08 00 00 00 00 00 00 00  >................<
0010020 00 00 00 00 04 00 00 00 00 00 00 00 d2 00 00 00  >................<
0010040 01 00 00 00 00 00 00 00 00 00 00 00 ac 05 00 00  >................<
0010060 d9 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00  >................<
0010100 00 00 00 00 db 00 00 00 01 00 00 00 00 00 00 00  >................<
0010120 00 00 00 00 88 06 00 00 50 00 00 00 00 00 00 00  >........P.......<
0010140 00 00 00 00 08 00 00 00 00 00 00 00 ea 00 00 00  >................<
0010160 01 00 00 00 00 00 00 00 00 00 00 00 d8 06 00 00  >................<
0010200 25 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00  >%...............<
0010220 00 00 00 00 fa 00 00 00 01 00 00 00 00 00 00 00  >................<
0010240 00 00 00 00 fd 06 00 00 7f 01 00 00 00 00 00 00  >................<
0010260 00 00 00 00 01 00 00 00 00 00 00 00 06 01 00 00  >................<
0010300 01 00 00 00 00 00 00 00 00 00 00 00 7c 08 00 00  >............|...<
0010320 6f 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00  >o...............<
0010340 00 00 00 00 14 01 00 00 01 00 00 00 00 00 00 00  >................<
0010360 00 00 00 00 eb 08 00 00 25 01 00 00 00 00 00 00  >........%.......<
0010400 00 00 00 00 01 00 00 00 00 00 00 00 20 01 00 00  >............ ...<
0010420 01 00 00 00 30 00 00 00 00 00 00 00 10 0a 00 00  >....0...........<
0010440 a3 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00  >................<
0010460 01 00 00 00 2b 01 00 00 01 00 00 00 00 00 00 00  >....+...........<
0010500 00 00 00 00 b8 0a 00 00 40 00 00 00 00 00 00 00  >........@.......<
0010520 00 00 00 00 08 00 00 00 00 00 00 00 11 00 00 00  >................<
0010540 03 00 00 00 00 00 00 00 00 00 00 00 f8 0a 00 00  >................<
0010560 39 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00  >9...............<
0010600 00 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00  >................<
0010620 00 00 00 00 d4 11 00 00 a0 04 00 00 23 00 00 00  >............#...<
0010640 36 00 00 00 04 00 00 00 10 00 00 00 09 00 00 00  >6...............<
0010660 03 00 00 00 00 00 00 00 00 00 00 00 74 16 00 00  >............t...<
0010700 0d 02 00 00 00 00 00 00 00 00 00 00 01 00 00 00  >................<
0010720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0010740 00 00 00 00 00 00 00 00 14 81 04 08 00 00 00 00  >................<
0010760 03 00 01 00 00 00 00 00 28 81 04 08 00 00 00 00  >........(.......<
0011000 03 00 02 00 00 00 00 00 48 81 04 08 00 00 00 00  >........H.......<
0011020 03 00 03 00 00 00 00 00 70 81 04 08 00 00 00 00  >........p.......<
0011040 03 00 04 00 00 00 00 00 90 81 04 08 00 00 00 00  >................<
0011060 03 00 05 00 00 00 00 00 e0 81 04 08 00 00 00 00  >................<
0011100 03 00 06 00 00 00 00 00 2a 82 04 08 00 00 00 00  >........*.......<
0011120 03 00 07 00 00 00 00 00 34 82 04 08 00 00 00 00  >........4.......<
0011140 03 00 08 00 00 00 00 00 54 82 04 08 00 00 00 00  >........T.......<
0011160 03 00 09 00 00 00 00 00 5c 82 04 08 00 00 00 00  >........\.......<
0011200 03 00 0a 00 00 00 00 00 74 82 04 08 00 00 00 00  >........t.......<
0011220 03 00 0b 00 00 00 00 00 a4 82 04 08 00 00 00 00  >................<
0011240 03 00 0c 00 00 00 00 00 f0 82 04 08 00 00 00 00  >................<
0011260 03 00 0d 00 00 00 00 00 6c 84 04 08 00 00 00 00  >........l.......<
0011300 03 00 0e 00 00 00 00 00 88 84 04 08 00 00 00 00  >................<
0011320 03 00 0f 00 00 00 00 00 a0 84 04 08 00 00 00 00  >................<
0011340 03 00 10 00 00 00 00 00 a4 94 04 08 00 00 00 00  >................<
0011360 03 00 11 00 00 00 00 00 ac 94 04 08 00 00 00 00  >................<
0011400 03 00 12 00 00 00 00 00 b4 94 04 08 00 00 00 00  >................<
0011420 03 00 13 00 00 00 00 00 b8 94 04 08 00 00 00 00  >................<
0011440 03 00 14 00 00 00 00 00 88 95 04 08 00 00 00 00  >................<
0011460 03 00 15 00 00 00 00 00 8c 95 04 08 00 00 00 00  >................<
0011500 03 00 16 00 00 00 00 00 a4 95 04 08 00 00 00 00  >................<
0011520 03 00 17 00 00 00 00 00 ac 95 04 08 00 00 00 00  >................<
0011540 03 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0011560 03 00 19 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0011600 03 00 1a 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0011620 03 00 1b 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0011640 03 00 1c 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0011660 03 00 1d 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0011700 03 00 1e 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0011720 03 00 1f 00 00 00 00 00 00 00 00 00 00 00 00 00  >................<
0011740 03 00 20 00 01 00 00 00 00 00 00 00 00 00 00 00  >.. .............<
0011760 04 00 f1 ff 08 00 00 00 00 00 00 00 00 00 00 00  >................<
0012000 04 00 f1 ff 13 00 00 00 00 00 00 00 00 00 00 00  >................<
0012020 04 00 f1 ff 1e 00 00 00 a4 94 04 08 00 00 00 00  >................<
0012040 01 00 11 00 2c 00 00 00 ac 94 04 08 00 00 00 00  >....,...........<
0012060 01 00 12 00 3a 00 00 00 b4 94 04 08 00 00 00 00  >....:...........<
0012100 01 00 13 00 47 00 00 00 20 83 04 08 00 00 00 00  >....G... .......<
0012120 02 00 0d 00 5d 00 00 00 ac 95 04 08 01 00 00 00  >....]...........<
0012140 01 00 18 00 6c 00 00 00 b0 95 04 08 04 00 00 00  >....l...........<
0012160 01 00 18 00 7a 00 00 00 80 83 04 08 00 00 00 00  >....z...........<
0012200 02 00 0d 00 13 00 00 00 00 00 00 00 00 00 00 00  >................<
0012220 04 00 f1 ff 86 00 00 00 a8 94 04 08 00 00 00 00  >................<
0012240 01 00 11 00 93 00 00 00 a0 84 04 08 00 00 00 00  >................<
0012260 01 00 10 00 a1 00 00 00 b4 94 04 08 00 00 00 00  >................<
0012300 01 00 13 00 ad 00 00 00 40 84 04 08 00 00 00 00  >........@.......<
0012320 02 00 0d 00 08 00 00 00 00 00 00 00 00 00 00 00  >................<
0012340 04 00 f1 ff c3 00 00 00 00 00 00 00 00 00 00 00  >................<
0012360 04 00 f1 ff cb 00 00 00 8c 95 04 08 00 00 00 00  >................<
0012400 01 02 16 00 e1 00 00 00 a4 94 04 08 00 00 00 00  >................<
0012420 00 02 11 00 f2 00 00 00 a4 94 04 08 00 00 00 00  >................<
0012440 00 02 11 00 05 01 00 00 b8 94 04 08 00 00 00 00  >................<
0012460 01 02 14 00 0e 01 00 00 a4 95 04 08 00 00 00 00  >................<
0012500 20 00 17 00 19 01 00 00 d0 83 04 08 05 00 00 00  > ...............<
0012520 12 00 0d 00 29 01 00 00 f0 82 04 08 00 00 00 00  >....)...........<
0012540 12 00 0d 00 30 01 00 00 00 00 00 00 00 00 00 00  >....0...........<
0012560 20 00 00 00 3f 01 00 00 00 00 00 00 00 00 00 00  > ...?...........<
0012600 20 00 00 00 53 01 00 00 88 84 04 08 04 00 00 00  > ...S...........<
0012620 11 00 0f 00 5a 01 00 00 6c 84 04 08 00 00 00 00  >....Z...l.......<
0012640 12 00 0e 00 60 01 00 00 00 00 00 00 b9 01 00 00  >....`...........<
0012660 12 00 00 00 7d 01 00 00 8c 84 04 08 04 00 00 00  >....}...........<
0012700 11 00 0f 00 8c 01 00 00 a4 95 04 08 00 00 00 00  >................<
0012720 10 00 17 00 99 01 00 00 a8 95 04 08 00 00 00 00  >................<
0012740 11 02 17 00 a6 01 00 00 b0 94 04 08 00 00 00 00  >................<
0012760 11 02 12 00 b3 01 00 00 e0 83 04 08 5a 00 00 00  >............Z...<
0013000 12 00 0d 00 c3 01 00 00 ac 95 04 08 00 00 00 00  >................<
0013020 10 00 f1 ff cf 01 00 00 b4 95 04 08 00 00 00 00  >................<
0013040 10 00 f1 ff d4 01 00 00 00 00 00 00 cc 01 00 00  >................<
0013060 12 00 00 00 e4 01 00 00 ac 95 04 08 00 00 00 00  >................<
0013100 10 00 f1 ff eb 01 00 00 3a 84 04 08 00 00 00 00  >........:.......<
0013120 12 02 0d 00 02 02 00 00 a4 83 04 08 2b 00 00 00  >............+...<
0013140 12 00 0d 00 07 02 00 00 74 82 04 08 00 00 00 00  >........t.......<
0013160 12 00 0b 00 00 69 6e 69 74 2e 63 00 69 6e 69 74  >.....init.c.init<
0013200 66 69 6e 69 2e 63 00 63 72 74 73 74 75 66 66 2e  >fini.c.crtstuff.<
0013220 63 00 5f 5f 43 54 4f 52 5f 4c 49 53 54 5f 5f 00  >c.__CTOR_LIST__.<
0013240 5f 5f 44 54 4f 52 5f 4c 49 53 54 5f 5f 00 5f 5f  >__DTOR_LIST__.__<
0013260 4a 43 52 5f 4c 49 53 54 5f 5f 00 5f 5f 64 6f 5f  >JCR_LIST__.__do_<
0013300 67 6c 6f 62 61 6c 5f 64 74 6f 72 73 5f 61 75 78  >global_dtors_aux<
0013320 00 63 6f 6d 70 6c 65 74 65 64 2e 35 37 30 36 00  >.completed.5706.<
0013340 64 74 6f 72 5f 69 64 78 2e 35 37 30 38 00 66 72  >dtor_idx.5708.fr<
0013360 61 6d 65 5f 64 75 6d 6d 79 00 5f 5f 43 54 4f 52  >ame_dummy.__CTOR<
0013400 5f 45 4e 44 5f 5f 00 5f 5f 46 52 41 4d 45 5f 45  >_END__.__FRAME_E<
0013420 4e 44 5f 5f 00 5f 5f 4a 43 52 5f 45 4e 44 5f 5f  >ND__.__JCR_END__<
0013440 00 5f 5f 64 6f 5f 67 6c 6f 62 61 6c 5f 63 74 6f  >.__do_global_cto<
0013460 72 73 5f 61 75 78 00 48 65 6c 6c 6f 2e 63 00 5f  >rs_aux.Hello.c._<
0013500 47 4c 4f 42 41 4c 5f 4f 46 46 53 45 54 5f 54 41  >GLOBAL_OFFSET_TA<
0013520 42 4c 45 5f 00 5f 5f 69 6e 69 74 5f 61 72 72 61  >BLE_.__init_arra<
0013540 79 5f 65 6e 64 00 5f 5f 69 6e 69 74 5f 61 72 72  >y_end.__init_arr<
0013560 61 79 5f 73 74 61 72 74 00 5f 44 59 4e 41 4d 49  >ay_start._DYNAMI<
0013600 43 00 64 61 74 61 5f 73 74 61 72 74 00 5f 5f 6c  >C.data_start.__l<
0013620 69 62 63 5f 63 73 75 5f 66 69 6e 69 00 5f 73 74  >ibc_csu_fini._st<
0013640 61 72 74 00 5f 5f 67 6d 6f 6e 5f 73 74 61 72 74  >art.__gmon_start<
0013660 5f 5f 00 5f 4a 76 5f 52 65 67 69 73 74 65 72 43  >__._Jv_RegisterC<
0013700 6c 61 73 73 65 73 00 5f 66 70 5f 68 77 00 5f 66  >lasses._fp_hw._f<
0013720 69 6e 69 00 5f 5f 6c 69 62 63 5f 73 74 61 72 74  >ini.__libc_start<
0013740 5f 6d 61 69 6e 40 40 47 4c 49 42 43 5f 32 2e 30  >_main@@GLIBC_2.0<
0013760 00 5f 49 4f 5f 73 74 64 69 6e 5f 75 73 65 64 00  >._IO_stdin_used.<
0014000 5f 5f 64 61 74 61 5f 73 74 61 72 74 00 5f 5f 64  >__data_start.__d<
0014020 73 6f 5f 68 61 6e 64 6c 65 00 5f 5f 44 54 4f 52  >so_handle.__DTOR<
0014040 5f 45 4e 44 5f 5f 00 5f 5f 6c 69 62 63 5f 63 73  >_END__.__libc_cs<
0014060 75 5f 69 6e 69 74 00 5f 5f 62 73 73 5f 73 74 61  >u_init.__bss_sta<
0014100 72 74 00 5f 65 6e 64 00 70 75 74 73 40 40 47 4c  >rt._end.puts@@GL<
0014120 49 42 43 5f 32 2e 30 00 5f 65 64 61 74 61 00 5f  >IBC_2.0._edata._<
0014140 5f 69 36 38 36 2e 67 65 74 5f 70 63 5f 74 68 75  >_i686.get_pc_thu<
0014160 6e 6b 2e 62 78 00 6d 61 69 6e 00 5f 69 6e 69 74  >nk.bx.main._init<
0014200 00                                               >.<

コンパイルしたファイルには文字として解釈できない文字がありますから、16進数でバイト列をそのまま表示しています。右の><で挟まれたところには文字と解釈できるものはその文字を、そうでない時は"."を表示しています。

コンパイルはソースを機械語に書き直すといいますが、そう単純ではないことが分かると思います。

実行はOSがこのプログラムHelloをファイルからメモリ上にロードし、始まりの場所をセットして処理を開始させます。Hello側は作業が終わればOSに制御を戻します。これが プログラムソースにあるreturnの意味です。0 は正常に終わったことを知らせるもので、UNIX系OSの取り決めです。

インタープリタによる実行の例

perl の例

perlという言語のソースを作ります。次のプログラムを書いてHellopという名前で保存します。Helloでもいいのですが、Cで作ったものと名前がかぶるので変えています。ファイルの内容はたったの1行

print "Hello World!\n";

実行します。

$ perl Hellop
Hello World!

実行するのはperlというプログラムで、そのプログラムにHellopというファイルを読んで実行するように指示しているわけです。perlはインタープリタでHellopはプログラムということになります。

これも内容を調べてみます。

$ ls -l
-rwx------ 1 hoge hoge  6273 2009-05-06 20:00 Hello
-rw------- 1 hoge hoge    82 2009-05-06 20:00 Hello.c
-rw------- 1 hoge hoge    25 2009-05-06 20:20 Hellop

ファイルの内容を問い合わせてみます

$ file Hellop
Hellop: ASCII text

textとあるものはcatで内容を見ることができます。

$ cat Hellop
print "Hello World!\n";

odダンプもしてみましょう

$ od -tx1z Hellop
0000000 70 72 69 6e 74 20 22 48 65 6c 6c 6f 20 57 6f 72  >print "Hello Wor<
0000020 6c 64 21 5c 6e 22 3b 0a                          >ld!\n";.<
0000030
$ 

どう見てもテキストファイルですね。

インタプリタでもファイル名だけで実行する

UNIX系のOSでは、この perl Hellop を Hellop だけで実行する仕組みがあります。ファイル名が「命令」のように見えるのでわかりやすくなります。

ファイルの先頭に次の1行を加えます。こんどはHelloperlという名前で保存しましょう。

#!/usr/bin/perl
print "Hello World!\n";

今度は実行前にもう一つしなければならないことがあります。

$ ls -l
-rwx------ 1 hoge hoge 6273 2009-05-06 20:00 Hello
-rw------- 1 hoge hoge   82 2009-05-06 20:00 Hello.c
-rw------- 1 hoge hoge   40 2009-05-06 20:24 Helloperl
-rw------- 1 hoge hoge   25 2009-05-06 20:20 Hellop

このファイルのrw-------の部分はパーミッションといって、このファイルの持ち主が読む権限(r)と書く権限(w)を持っていることを表しています。これに実行する権限(x)を加えなければ実行できません。

$ chmod u+x Helloperl 

u+xが持ち主(user)に実行権限(x)を加えるという意味です。

実行権限(x)が加えられたことを確認します。

$ ls -l
-rwx------ 1 hoge hoge 6273 2009-05-06 20:00 Hello
-rw------- 1 hoge hoge   82 2009-05-06 20:00 Hello.c
-rwx------ 1 hoge hoge   40 2009-05-06 20:24 Helloperl
-rw------- 1 hoge hoge   25 2009-05-06 20:20 Hellop

一度権限が設定されると、再設定されるまで有効になりますからこの作業は1度だけ必要です。

実行します。

$ ./Helloperl 
Hello World!

ファイルの内容を問い合わせてみます

$ file Helloperl 
Helloperl: a /usr/bin/perl script text executable

今度はperlのスクリプト(プログラム)でテキストで書かれていて、実行可能であると言っています。

後は同じです。textとあるものはcatで内容を見ることができます。

$ cat Helloperl 
#!/usr/bin/perl
print "Hello World!\n";

odダンプもしてみましょう

$ od -tx1z Helloperl 
0000000 23 21 2f 75 73 72 2f 62 69 6e 2f 70 65 72 6c 0a  >#!/usr/bin/perl.<
0000020 70 72 69 6e 74 20 22 48 65 6c 6c 6f 20 57 6f 72  >print "Hello Wor<
0000040 6c 64 21 5c 6e 22 3b 0a                          >ld!\n";.<

インタープリタによる実行の例2

シェルスクリプト

端末の中で私たちのコマンドラインからの命令を解釈して実行しているプログラムをシェル(shell)と言います。シェルにはコマンドをあらかじめファイルに書いておいてまとめて実行するという仕組みがあります。これをシェルスクリプトといいます。

これもインタープリタ型の言語といえます

ソースを作ります。次のプログラムを書いてHellosという名前で保存します。もちろんこれもHelloでもいいのですが、Cで作ったものと名前がかぶるので変えています。ファイルの内容はたったの1行

echo "Hello World!\n"

そして実行権は、

$ sh Hellos
Hello World!\n

または、

$ . Hellos
Hello World!\n

ファイル名だけで実行する

実行権があればファイル名だけで実行できます。

$ chmod u+x Hellos
$ ./Hellos
Hello World!\n

perlでは1行目に何というインタプリタで実行するかを指定しましたが、これを書かなければいつも使っているシェルで実行されます。もし書きたければ、

#!/bin/sh
echo "Hello World!\n"

とします。

実は先頭の#!でインタープリタを指定する仕組みが作られたのは、シェルにいくつかの種類があって、若干書き方が異なったからです。シーエルはユーザーの好みで切り替えられるのですが、だれが実行しても同じシェルで実行するようにしなければならなかったのでした。ついでに、perl, python, rubyなど将来作成される物も含めていろいろなインタープリタを指定してプログラムをコマンドのように実行できるようにしました。これはすごくステキな仕組みです。

ちなみにLinuxの多くがbashというシェルを標準としています。他に、csh や tch などがありますが、標準のシェルは sh という別名を付けるのが普通です。

聖愛中学高等学校
http://www.seiai.ed.jp/
May. 2009