쉘
- 사용자와 리눅스 커널 사이에서 중간자 역할을 수행.
- 사용자와 커널 사이에서 명령을 해석하여 전달하는 해석기(Interpreter)와 번역기(Translator)기능.
- 사용자가 로그인하면 쉘이 자동으로 실행되어 사용자가 명령을 입력하기를 기다림(로그인 쉘)
- /etc/passwd 파일에 사용자 별로 지정
- 쉘이 사용자의 명령을 기다리고 있음을 나타내는 표시 => 프롬프트
- 사용자로부터 명령이나 스트립트를 읽어들여 이 명령이 쉘 자체의 내장명령인지 판단.
-> 내장명령은 특별한 추가 작업 없이 바로 실행.
-> 내장명령이 아니라면 별도의 실행을 파일이 있음을 뜻하므로,
쉘은 자식 프로세스를 만들고 이 자식 프로세스가 실행파일을 실행.
-> 자식 프로세스가 실행 파일을 실행하는 동안 부모인 쉘은 대기 상태.
-> 자식 프로세스가 실행을 종료하면 쉘의 대기 상태가 해제되어 복귀하면서
프롬프르를 출력.
- 쉘은 자체 내에 프로그래밍 기능이 있어 프로그램도 만들 수 있음(쉘 프로그래밍)
- 쉘은 사용자 환경을 설정할 수 있도록 초기화 파일 기능을 제공.
-> 초기화 파일에는 명령을 찾아오는 경로를 설정하거나,
파일과 디렉터리를 새로 생성할 때 기본 권한을 설정하거나,
다양한 환경 변수 등을 설정할 수 있음.
-> 사용자가 로그인할 때 이 초기화 파일이 실행되어 사용자별로 특성에 맞게
초기 환경이 설정됨.
- 본 쉘, 콘 쉘, 배시 쉘은 기본 프롬프트가 $
- C 쉘은 %
- /etc/passwd 에서 'grep 유저네임 /etc/passwd'로 확인 가능
-> ex) user1:x:1000:1000:user1,,,:/home/user1:/bin/bash
쉘의 종류
본쉘(Bourne shell) |
- 최초의 쉘. 유닉스 V7에 처음 등장한 본 쉘. - 단순하고 처리 속도가 빨라서 많이 사용. - 지금도 시스템 관리 작업을 수행하는 많은 쉘 스크립트는 본쉘을 기반으로 함. - 히스토리, 에일리어스, 작업 제어 등 사용자의 편의를 위한 기능을 다양하게 제공하지 못 해 이후에 다른 쉘들이 등장. - 본쉘의 명령 이름은 sh. |
C 쉘(C Shell) |
- 본 쉘에는 없던 에일리어스나 히스토리 같은 사용자 편의 기능을 포함. - 쉘 스크립트 작성을 위한 구문 형식이 C 언어과 같아 C 쉘이라는 이름을 가지게 됨. - 다양한 사용자 편의 기능을 구현하기 위해 크기가 커지고 속도가 느린 단점. - C 쉘의 명령 이름은 csh. |
콘 쉘(Korn shell) |
- C 쉘과는 달리 본 쉘과의 호환성을 유지할 뿐만 아니라 히스토리, 에일리어스 기능 등 C쉘의 특징도 모두 제공하면서 처리속도도 빠르다는 장점. - 우분투에서는 별도로 콘 쉘(Korn Shell)을 설치하여 사용할 수 있음. - 콘 쉘의 명령 이름은 ksh. |
배시 쉘(bash shell) |
- 배시 쉘은 본 쉘을 기반으로 개발된 쉘. - 본 쉘과의 호환성을 유지하면서 C 쉘, 콘 쉘의 편리한 기능도 포함. - GLP을 따르는 공개 소프트웨어로 리눅스의 기본 쉘로 제공(리눅스 쉘로도 많이 알려짐) - 배시 쉘의 명령 이름은 bash. |
대시 쉘(dash shell) |
- 우분투는 6.10버전부터 본 쉘 대신 대시 쉘을 시스템 기본 쉘로 사용. - 대시 쉘이 기본의 쉘에 비해 부팅 시 쉘 스크립트를 빠르게 실행시키고, 파일 크기가 작으며, 신뢰성이 높기 때문. - 우분투에서 /bin/sh를 확인해보면 dash로 심벌릭 링크가 되어 있음. |
기본 쉘 바꾸기 - chsh
- 우분투의 기본 쉘은 bash shell이지만 다른 쉘을 기본 쉘로 사용하고자 한다면 변경 가능
- 원래 로그인 쉘은 사용자가 마음대로 바꿀 수 없고 시스템 관리자에게 요청해야 변경하라 수 있었음.
- chsh라는 명령을 제공하여 사용자가 자신의 로그인 쉘을 바꿀 수 있음.
- 자기 계정의 암호를 바꿀 수 있는 것처럼 로그인 쉘도 바꿀수 있도록 명령을 제공한 것.
- 현재 바꿀 수 있는 쉘의 종류는 '/etc/shells' 파일의 지정되어 있음('cat /etc/shells' 로 확인 가능)
- '/bin/rbash' 는 배시 쉘의 심벌릭 링크.
- 변경 방법은 'chsh -s [지정 쉘(절대 경로를 입력해야함)] [유저네임]'
서브 쉘
- 프롬프트에서 다른 쉘을 실행 할 수 있음.
-> ex) user1@ubuntu:~$ sh => 본쉘 실행
$ <= 본쉘로 진입
쉘 내장 명령
- 쉘은 자체적으로 내장 명령을 가지고 있음(대표적인 것으로 cd)
- 일반적인 리눅스 명령이 '/bin'과 '/usr/bin'디렉터리에 별도의 실행 파일로 있는 것과 다름.
- 쉘 내장 명령은 별도의 실행 파일이 없고 쉘 안에 포함.
출력하기
- 배시 쉘의 출력 명령은 echo와 printf.
- echo 명령은 모든 쉘에서 공통적으로 제공하는 출력 명령.
- 출력 명령은 문자열 출력이나 쉘 변 수 값 출력, 명령 결과 등 많은 곳에서 사용
echo |
기능 : 화면에 한 줄의 문자열을 출력. 형식 : echo [-n] [문자열] 옵션 : -n => 마지막에 줄바꿈을 하지 않음. |
printf |
기능 : 자료를 형식화하여 화면에 출력. 기형식 : printf 형식 [인수] 옵션 : %d, \n 등 C 언어의 printf 함수 형식을 지정함. |
특수 문자 사용하기
- 특수 문자는 쉘에서 특별한 의미를 가진 문자로 각 특수 문자별로 특수 기능을 수행.
- 주요 특수 문자는 *, ?, |, ;, [], ~, '', "", `` 등이 있음.
- 사용자가 명령을 입력하면 먼저 입력한 내용 중에 특수 문자가 있는지 확인 후
이를 해독하여 적절한 형태로 변환한 후 명령을 실행.
특수 문자 * |
- *는 임의의 문자열을 나타내는 특수 문자. - *는 0개 이상의 문자로 대체. - 주로 여러 파일의 이름을 나열할 때 파일 이름을 간단히 표시하는데 사용. - 명령을 실행할 때 파일 이름을 적어야 하는 자리에 *를 사용하면 모든 파일을 나타냄. |
사용 예 |
의미 |
ls * |
현재 디렉터리의 모든 파일과 서브 디렉터리를 나열. 서브 디렉터리의 내용도 출력. |
cp * /tmp |
현재 디렉터리의 모든 파일을 /tmp 디렉터리 아래로 복사. |
ls -F t* |
t, tmp, temp와 같이 파일명이 t로 시작하는 모든 파일의 이름과 파일종류를 출력. t도 해당하는데 주의 |
cp *.txt ../ch3 |
확장자가 txt인 모든 파일을 상위 디렉터리 밑의 ch3 디렉터리로 복사 |
ls -l h*d |
파일명이 h로 시작하고 d로 끝나는 모든 파일의 상세 정보를 출력. hd, had, hard, h1234 등 조건에 맞는 파일의 정보를 확인할 수 있음. |
특수문자 ?와 [] |
- ?와 []는 모두 하나의 문자를 나타내는데 사용. - ?는 길이가 1인 임의의 한 문자를, [] 는 괄호안에 포함된 문자 중 하나를 나타냄. - [] 사용할 여러 문자를 지정하거나 범위를 지정할 수 있으며, |
사용 예 |
의미 |
ls t?.txt |
t 다음에 임의의 한 문자가 오고 파일의 확장자가 txt인 모든 파일의 이름을 출력. t1.txt, ta.txt 등이 해당. |
ls -l tmp[135].txt |
tmp 다음에 1,3,5 중 한 글자가 오고 파일 확장자가 txt인 모든 파일의 이름을 출력. tmp1.txt, tmp3.txt, tmp5.txt 파일이 있으면 상세 정보를 출력. |
ls -l tmp[1-3].txt |
[1-3]은 1부터 3까지의 범위를 의미. ls -l tmp[123].txt와 결과가 같음. tmp1.txt, tmp2.txt, tmp3.txt 파일이 있으면 파일의 상세 정보를 출력. |
ls [0-9]* |
파일명이 숫자로 시작하는 모든 파일 목록을 출력. |
ls [A-Za-z]*[0-9] |
파일명이 영문으로 시작하고 숫자로 끝나는 모든 파일 목록을 출력. |
특수문자 ~와 - |
- '~'(물결포)와 '-'(붙임표)는 디렉터리를 나타내는 특수 문자. - '~'만 사용하면 현재 작업 중인 사용자의 홈 디렉터리를 나타냄. - 다른 사용자의 로그인 ID와 함께 사용하면(~로그인ID) 해당 사용자의 홈 디렉터리를 나타냄. - '-'는 cd 명령으로 디렉터리를 이전하기 직전의 작업 디렉터리를 나타냄. |
사용 예 |
의미 |
cp *.txt ~/ch3 |
확장자가 txt인 모든 파일을 현재 작업 중인 사용자의 홈 디렉터리 아래 tmp 디렉터리로 복사. |
cp ~user2/linux.txt . |
user2라는 사용자의 홈 디렉터리 아래에서 linux.txt 파일을 찾아 현재 디렉터리로 복사. |
cd - |
이전 작업 디렉터리로 이동. |
특수 문자 ; 과 | |
- ';'(쌍반점)과 '|'(파이프)는 명령과 명령을 연결함. - ';'은 연결된 명령을 왼쪽부터 차례로 실행. - '|'는 왼쪽 명령의 실행 결과를 오른쪽 명령의 입력으로 전달. |
사용 예 |
의미 |
data; ls; pwd |
왼쪽부터 차례대로 명령을 실행함. 날짜를 출력한 후, 현재 디렉터리의 파일목록을 출력하고, 작업 디렉터리의 절대경로를 보여줌. |
ls -al / | more |
루트 디렉터리에 있는 모든 파일의 상세 정보를 한 화면씩 출력. ls -al / 명령의 결과가 more 명령의 입력으로 전달되어 페이지 단위로 출력되는 것. |
특수 문자 '' 와 "" |
- ''(작은따옴표)와 ""(큰따옴표)는 문자를 감사서 문자열로 만들어주고, 문자열 안에 사용된 특수 문자의 기능을 없앰. - ''는 모든 특수 문자를 - ""는 $, ``, \을 제외한 모든 특수 문자를 일반 문자로 간주하여 처리. - 쉘 변수에 저장된 값을 출력할 때 쉘 변수 앞에 $를 붙임. - $를 문자 그대로 사용하려면 작은 따옴표를, 쉘 변수의 값으로 처리하려면 큰 따옴표를 사용. |
사용 예 |
의미 |
echo '$SHELL' |
SHELL 문자열이 화면에 출력. |
echo "$SHELL" |
쉘 환경 변수인 SHELL에 저장된 값인 현재 쉘의 종류가 화면에 출력. |
특수문자 `` |
- ``(백쿼터, 백쿼테이션)는 키보드 상단의 숫자 1 앞에 있는 키를 사용. - ``로 감싸인 문자열을 명령으로 해석하여 실행 |
사용 예 |
의미 |
ehco "Today is `date` |
`date`는 명령으로 해석하여 date명령의 실행 결과로 바뀜. => Today is 2014.12.24. (수) 23:43:42 KST |
ls /platform/`uname -m` |
uname -m 명령의 실행 결과를 문자열로 바꿔 디렉터리 이름으로 사용. |
특수 문자 \ |
- \(역슬래쉬)은 해당 특수 문자의 효과를 없애고 일반 문자처럼 처리함. |
사용 예 |
의미 |
ls -l t\* |
t*라는 이름을 가진 파일의 상세정보를 출력 |
echo \$SHELL |
$SHELL을 화면에 출력 |
특수 문자 >, <, >> |
- >, <(꺾쇠), >>(이중 꺾쇠)는 입출력의 방향을 바꾸는 특수 문자. |
사용 예 |
의미 |
ls -l > res |
ls -l 명령의 실행 결과를 화면이 아닌 res 파일에 저장. |
p.s
uname 명령 |
- 명령은 운영체제의 이름을 출력. ex) user@ubunutu:~/ch4$echo "This is `uname` System." This is Linux System. - 'uname -n' 은 호스트 이름을 출력 |
'OS > Linux - Ubuntu' 카테고리의 다른 글
[Linux - 리눅스] 쉘 환경 설정 (0) | 2015.01.01 |
---|---|
[Linux - 리눅스] 입출력 장치, 파일 디스크립터(File Descriptor), 리다이렉션(Redirection) (0) | 2014.12.25 |
[Linux - 리눅스] vi 환경설정 (0) | 2014.12.24 |
[Linux - 리눅스] vi 명령모드, 입력모드, 마지막 행 모드, 네임드 버퍼 등등 명령키 (0) | 2014.12.23 |
[Linux - 리눅스] 디렉터리의 주요 기능 및 절대 경로, 상대 경로 (1) | 2014.12.21 |