우분투 사용시….발생되는 쉘 스크립트 실행 에러..

 리눅스 배포판을 우분투를 사용할 경우 쉘 스크립트를 작성할 때 한가지 주의 사항이 있다.

 평소와 같이 쉘 스크립트를 작성 후, 실행을 시키면 아마도 다음과 비슷한 메시지를 보게 될 것이다.

Syntax error: “(” unexpected operator

 이는 /bin/sh 실행 파일의 경로 때문에 발생되는 일이다.

 보통의 우분투에서 ls -l /bin/sh 를 실행하면 다음과 같은 결과가 나온다.

사용자 삽입 이미지

 /bin/sh 의 심볼릭 링크 경로가 bash 가 아닌것이다. 그래서 위와 같은 에러가 발생되는 것이다.

 참고로 우분투에서는 기본적으로 /bin/sh 가 dash 와 연결되어 있다. 그러므로 에러를 잡기 위해서는 /bin/sh 를 bash 로 바꾸어주던가, 혹은 스크립트 첫 머리의 #!/bin/sh 문장을 #!/bin/bash 로 바꾸면 된다.

 /bin/sh 를 bash 로 연결짓는 명령은 다음과 같다.

 # ln -s /bin/sh bash

아스키 아트와 안시 코드

 아스키 아트

 아스키 문자 셋을 이용한 그래픽 표현, 대화방에서 이용하는 스마일리 (Smiley)에서부터 사진 이미지를 변환한 것까지 다양하게 표현할 수 있다. 터미널을 이용한 PC 통신을 많이 사용하던 때에는 아스키 아트에 안시 코드로 색상을 입힌 텍스트 안시로 표현한 다양한 이미지를 많이 사용했다.

 안시 코드

 ANSI(American National Standards Insitute) 미국 표준 협회이다. 이곳에서 정한 시스템의 입출력 규정을 안시 코드라고 한다.

배드 블럭(Bad Block) 과 블럭(Block)

 배드 블럭(Bad Block)

 디스크의 물리적 손상을 말한다. 디스크에 블럭을 잡아 정보가 저장 되게 하는데 충격이나 노후로 인하여 배드 블럭이 생길 수 있다. 요즘 나오는 하드디스크들은 대부분 하드디스크 자체적으로 배드 블럭을 체크하여 관리한다.

 리눅스에서는 파일시스템 생성 시 배드 블럭에 관한 정보를 초기화하여 갖게 되며 하드 디스크의 노후로 배드 블럭이 특정 부분에 많을 경우 파티션을 나누어 특정 부분의 사용을 막기도 한다.

 블럭(Block)

 블럭이란 파일 시스템이 항상 연속적으로 할당하려고 하는 데이터의 크기를 뜻한다. 예를 들어 파일 시스템의 블럭 크기가 8 KB 라면, 8 KB 까지의 파일 크기는 디스크의 여러 부분에 나뉘어 있지 않고 항상 물리적으로 같은 자리에 연속으로 존재한다. 이것은 디스크의 물리적 블럭과는 또 다른 것이다.

 블럭의 크기가 크다면 파일 시스템에 접근하는 성능은 좋아지지만 블럭 한 개의 크기보다 작은 크기의 파일이 생성되더라도 블럭 하나가 낭비되는 것이므로 용량의 효율은 떨어딘다. 또한 블럭의 크기가 작다면 공간 낭비는 최소화 할 수 있으나 성능이 떨어지는 점이 있다. 유닉스나 리눅스에서는 보통 512 Byte 크기의 블럭을 사용한다.

표준입력과 표준출력

 표준입력과 표준출력

 어던 명령을 사용할 때 파일 이름이나 필요한 다른 요소를 함께 적어줄 것이다. 이 명령의 결과는 화면에 뿌려진다.

사용자 삽입 이미지

 여기에서, cat 이라는 명령의 뒤에는 test.txt 라는 파일 이름이 들어갔다. 이것은 test.txt 의 내용을 받아 읽어 화면에 뿌리라는 명령이다. 즉, test.txt 는 원하는 작업을 하는 데 필요한 입력 요소이며, 이 명령의 결과로서 test.txt 의 내용인 두 줄의 문장이 화면에 출력되는 것이다.

 여기에서 test.txt 와 같이 명령을 실행하기 위해 필요한 입력을 표준 입력, 그리고 명령의 실행 결과를 표준 출력이라 한다. 또한 표준 입력은 STDIN, 표준 출력은 STDOUT 로 표시하기도 한다. 이것은 표준 입력(Standard Input) 과 표준 출력(Standard Output)의 약자인 동시에 미리 정의된 핸들러의 이름이다. 표준 입력을 받아 프로세스가 작업을 마치면, 화면에 출력하는 명령 행 프로그램이 이 내용을 표준 출력으로 내보낸다.