전공과목 정리/리눅스시스템 + 시스템프로그래밍

[리눅스시스템🐧] 5장 쉘과 명령어 사용

최연재 2024. 1. 3. 00:28

교재 : 리눅스 시스템 원리와 실제 (창병모, 생능출판)

 

5.1 쉘 소개

1) 쉘의 역할

- 쉘은 사용자와 운영체제 사이에 창구 역할을 하는 소프트웨어

- 명령어 처리기(command processor)

- 사용자로부터 명령어를 입력받아 이를 처리한다.

 

2) 쉘의 종류 : 유닉스/리눅스에서 사용 가능한 쉘의 종류

(1) 본 쉘(Bourne shell)

- 쉘 실행파일 : /bin/sh

- 벨 연구소의 스티븐 본에 의해 개발됨.

- 유닉스의 기본 쉘

 

(2) 콘 쉘

- 쉘 실행파일 : /bin/ksh

 - 1980년대에 별 연구소에서 본 쉘을 확장해서 만듦.

 

(3) C 쉘

- 쉘 실행 파일 :/bin/csh

- 버클리대학의 빌 조이

- 쉘의 핵심 기능 위에 C언어의 특징을 많이 포함함.

- BSD 계열의 유닉스에서 많이 사용됨.

- 최근에 이를 개선한 tcsh가 개발됨.

 

(4) Bash

- 쉘 실행 파일 :/bin/bash

- GNU에서 본 쉘을확장하여 개발

- 리눅스 및 맥 OS X에서 기본 쉘로 사용되며 널리 보급됨.

- Bash 명령어와 구문은 본 쉘 명령어 구문을 확장함.

 

(5) tcsh

- 쉘 실행 파일 :/bin/tcsh

 

3) 로그인 쉘 (login shell)

- 로그인하면 자동으로 실행되는 쉘

- 보통 시스템 관리자가 계정을 만들 때 로그인 쉘 지정

- 로그인 쉘 변경

$ chsh

- 쉘 변경 ex) $ csh

$ 변경할 쉘 이름

 

 

5.2 쉘의 기능

1) 쉘 주요 기능

- 명령어 처리 : 사용자가 입력한 명령을 해석하고 적절한 프로그램 실행

- 시작 파일 : 로그인할 때 실행되어 사용자별로 맞춤형 사용 환경 설정

- 스크립트 : 쉘 자체 내의 프로그래밍 기능

 

2) 쉘의 실행 절차

 

3) 쉘의 환경 변수

- 환경 변수 설정

$ 환경변수명=문자열

- 환경 변수 보기

$ env

- 사용자 정의 환경 변수 예시

$ MESSAGE=hello
$ export MESSAGE

 

4) 쉘의 시작 파일 (start-up file)

- 시작 파일

  • 쉘마다 시작될 때 자동으로 실행되는 고유의 시작 파일
  • 주로 사용자 환경을 설정하는 역할을 하며 환경설정을 위해 환경변수에 적절한 값을 설정한다.

- 시스템 시작 파일

  • 시스템의 모든 사용자에게 적용되는 공통적인 설정
  • 환경변수 설정, 명령어 경로 설정, 환영 메시지 출력 등.

- 사용자 시작 파일

  • 사용자 홈 디렉터리에 있으며 각 사용자들에게 적용되는 설정
  • 환경변수 설정, 프롬프트 설정, 명령어 경로 설정, 명령어 이명 설정 등
쉘의 종류 시작파일 종류 시작파일 이름 실행 시기
본 쉘 시스템 시작 파일 /etc/profile 로그인
사용자 시작 파일 ~/.profile 로그인
Bash 쉘 시스템 시작 파일 /etc/profile 로그인
사용자 시작 파일 ~/.bash_profile 로그인
사용자 시작 파일 ~/.bashrc 로그인
시스템 시작 파일 /etc/bash.bashrc 로그인
C 쉘 시스템 시작 파일 /etc/.login 로그인
사용자 시작 파일 ~/.login 로그인
사용자 시작 파일 ~/.cshrc 로그인
사용자 시작 파일 ~/.logout 로그아웃

 

 

5.3 전면 처리와 후면 처리

1) 전면 처리

- 입력된 명령어를 전면에서 실행하고 쉘은 명령어 실행이 끝날 때까지 기다림.

$ 명령어

 

 

2) 후면 처리

- 명령어를 후면에서 실행하고 전면에서는 다른 작업을 실행하여 동시에 여러 작업을 수행할 수 있다.

 $ 명령어 &

 

- 후면 작업 확인 : 후면에서 실행되고있는 작업들을 리스트한다. 작업 번호를 명시하면 해다 작업만 리스트한다.

$ jobs [%작업번호]

- 후면 작업을 전면작업으로 전환 : 작업번호에 해당하는 후면 작업을 전면 작업으로 전환시킨다.

$ fg %작업번호

5.4 입출력 재지정

1) 출력 재지정 (output redirection)

$ 명령어 > 파일

: 명령어의 표준 출력을 모니터 대신에 파일에 저장한다.

- 출력 재지정을 이용해 파일 만들기 :표준 입력내용을 모두 파일에 저장한다. 파일이 없으면 새로 만든다.

$ cat > 파일

- 두 개의 파일을 붙여서 새로운 파일 만들기 : 파일1, 파일2의 내용을 붙여서 새로운 파일3을 만든다.

$ cat 파일1 파일2 > 파일3

 

2) 출력 추가

$ 명령어 >> 파일

: 명령어의 표준출력을 모니터 대신에 파일에 추가한다.

 

3) 입력 재지정 (input redirection)

$ 명령어 < 파일

: 명령어의 표준입력을 키보드 대신 파일에서 받는다.

 

4) 문서 내 입력 (here document)

$ 명령어 << 단어

...

단어

: 명령어의 표준입력을 키보드 대신에 단어와 단어 사이의 입력으로 받는다.

 

5) 오류 재지정

$ 명령어 2> 파일

: 명령어의 표준오류를 모니터 대신에 파일에 저장한다.

- 명령어의 실행 결과

  • 표준출력(standard output) : 정상적인 실행의 출력
  • 표준오류(standard error) : 오류 메시지 출력

6) 파이프

$ 명령어1 | 명령어2

: 명령어1의 표준출력이 파이프를 통해 명령어2의 표준입력이 된다.

 

5.5 여러 개의 명령어 실행

1) 명령어 열 (command sequence)

$ 명령어1; ... ; 명령어n

: 나열된 명령어들을 순차적으로 실행한다.

$ (명령어1; ... ; 명령어n)

: 나열된 명령어들을 하나의 그룹으로 묶어 순차적으로 실행한다.

 

2) 조건 명령어 열 (conditional command sequence)

: 첫 번째 명령어 실행 결과에 따라 다음 명령어 실행을 결정할 수 있다.

- && : 명령어1이 성공적으로 실행되면 명령어2가 실행되고, 그렇지 않으면 명령어2가 실행되지 않는다.

$ 명령어1 && 명령어2

- || : 명령어1이 실패하면 명령어2가 실행되고,그렇지 않으면 명령어2가 실행되지 않는다.

$ 명령어1 || 명령어2

 

5.6 파일 이름 대치와 명령어 대치

1) 파일 이름 대치

- 대표문자를 이용한 파일 이름 대치

  • 대표문자를 이용하여 한번에 여러 파일들을 나타냄.
  • 명령어 실행 전에 대표문자가 나타내는 파일 이름들로 먼저 대치하고 실행함.
대표문자 의미
* 빈 스트링을 포함하여 임의의 스트링을 나타냄.
? 임의의 한 문자를 나타냄.
[..] 대괄호 사이의 문자 중 하나를 나타내며 부분범위 사용 가능함.

 

2) 명령어 대치 (command substitution)

- 명령어를 실행할 때 다른 명령어의 실행 결과를 이용 

- `명령어` 부분은 그 명령어 실행 결과로 대치된 후에 실행됨.

ex) echo 현재 시간은 `date`

 

3) 따옴표 사용

- 따옴표를 사용하여 대치기능을 제한함.

- 따옴표가 중첩되면 밖의 따옴표가 효력을 가짐.

대치 발생 여부 파일 이름 변수 명령어
' ' x x x
" " x o o