본문 바로가기
Computer Science/Linux 다뤄보는 문과생

Linux 다뤄보는 문과생 (3) - 쉘 Shell 다루기

by 싸코 2017. 11. 20.

이번에 살펴보는 쉘 다루기는 리눅스를 커맨드 라인에서 다루기 위해서 꼭 알아야 하는 것으로 우리가 파이썬을 설치할 때 pip install numpy 와 같이 커맨드라인에서 명령어를 입력하여 패키지 설치를 하는데 이러한 방법으로 커맨드 라인에서 리눅스를 제어하고 사용하도록 커맨드 명렁어가 미리 저장되어 있어 "ls"와 같은 명령어를 입력해서 현재 디렉토리의 목록을 보거나 할 수 있음. 가장 실용적으로 도움이 될 부분이다.

 

" 쉘을 지배하는 자가 리눅스를 지배한다 "

 

Linux 다뤄보는 문과생 (3)

쉘Shell 다루기

1. 기본적이니 명령어 라인

2. 기본적인 쉘의 사용

3. 쉘의 기능

4. 쉘의 입출력 재지정과 파이프

 

 

1. 기본적인 명령어 라인

서버로서 리눅스를 사용할 때 터미널을 통한 명령어 방식으로 진행된다

 

1) 명령어 라인 프롬프트

일반 사용자로 로그인 했을 경우 기본 프롬프트 : $

root 사용자로 로그인 했을 경우 기본 프롬프트 : #

 

명령어 형식 $ 명령어 [인수1] [인수2]

 

명령어를 입력하고 엔터키를 누르면 쉘이 명령어를 해석한 후  커널에게 작업을 요청하고 결과를 사용자에게 출력해준다

 

 

2) 쉘의 명령어 번역 기능

쉘을 제대로 사용하려면 번역 순서를 알 필요가 있는데 우선순위에 따라 명령어를 번역한다

 

  1. *, ?, !, <, >, $ : 특수문자 판별
  2. / : 경로명 판별
  3. alias : alias 인지 판별
  4. if, then, else, while, do, done : 내장 키워드인지 판별
  5. 내장 명령 : 내장 명령인지 판별
  6. 외부 명령 : 외부 명령 찾기

위에서 아래의 우선순위로 번역이 이루어짐

 

 $ type 명령어명

-> 현재 실행하려고 하는 명령이 이 중의 어느 범주에 속하는 명령인지 알고 싶다면 type 명령을 사용한다. 사용법은 다음과 같다.

 

 

3) 메타 문자

메타 문자란 명령어 라인 중간에 *, ?, [] 등의 특수문자를 주면 쉘은 현재 디렉토리에서 이에 대응되는 파일명을 찾아서 이 문자가 있는 라인의 위치에 대입

 

  • * : 어떤 문자와도 대응됨
  • ? : 문자는 단 하나의 문자와 대응됨
  • [ ] : 문자는 괄호 안에 있는 임의의 한 문자에 대응됨

 

 

4) Quoting

? 또는 * 문자도 파일 이름에 포함될 수 있는데 방법은 쉘이 특수한 용도로 인식하는 특수문자를 쉘이 해석하지 못하게하는 것으로 이것을 Quoting이라고 부름. 이스케이프코드 같은 것을 말하는 듯 함

 

  • \ 이후의 한 글자를 Quoting
  • '' 이 사이에 둘러싸인 모든 특수문자를 Quoting
  • "" 이 사이에 둘러싸인 $, \, `를 제외한 모든 특수문자를 Quoting

 

 

2. 기본적인 쉘의 사용

1) 사용자 계정으로 로그인하는 과정

Login 계정 입력 ->  Password 비밀번호 입력  ->  /etc/password/, /etc/shadow 파일 인증확인  -> 쉘 환경 파일 수행  -> 명령어 입력 화면

 

쉘 환경 파일 수행 절차

  1. /etc/profile
    로그인 과정에서 제일 먼저 실행되는 환경 파일
    root로 로그인 하는 경우 일반사용자들과는 달리 PATH 변수에 관리 명령이나 도구가 설치되어 있는 /sbin, /usr/sbin, /usr/local/sbin 경로가 설정
  2. /etc/profile.d/*.sh
  3. ~/.bash_profile
  4. ~/.bashrc
  5. /etc/bashrc

 

 

* 쉘의 환경 파일을 수정, 적용하는 방법

다시 로글인 하지 않고 source 명령을 이용. 이 명령을 사용하여 로그아웃 하지 않고 변경된 내용을 즉시 쉘에 적용할 수 있음

 

$ source ~/.bash_profile

$ source ~/.bashrc

 

이 명령은 해당 쉘에만 적용됨 다른 터미널의 쉘에는 적용되지 않기에 다시 로그인을 해야 확실하게 적용됨

 

 

 

3. 쉘의 기능

1) 얼라이어스(alias) 기능

자주 사용하는 명령어나 긴 명령을 짧게 단축 명령으로 등록하고 대치시켜 사용할 수 있는 기능

 

alias 대치명령어 = 기존명령어

 

ex) clear 명령을 자주 사용하는 경우 c 로 대치 가능

     alias c = clear

 

로그아웃을 하거나 터미널을 닫으면 그 정보가 지워짐

 

 

2) 히스토리(history) 기능

지금까지 실행했던 명령을 기록하는 기능이 있어 나중에 그 동일한 명령을 수행해야 하는 경우 다시 입력하는 번거로움을 줄일 수 있음

 

history n   

*n은 몇 개의 최근 수행했던 명령을 보고 싶은지

 

!240

=> 240번쨰 작업에서 수행했던 것을 다시 수행

 

명령을 이용해서 이전 명령을 다시 수행하는 화면

!vi

 

 

3) 명령어 편집 기능

↑ : 이전 수행 명령

↓ : 다음 수행 명령

→ : 커서를 오른쪽으로 이동

← : 커서를 왼쪽으로 이동

back space : 앞 글자 지우기

delete : 다음 글자 지우기

 

 

 

4) 명령어 및 파일명 자동 완성 기능

파일명의 일부만을 입력하여도 <Tab> 키를 이용하여 나머지를 자동으로 완성

같은 이름으로 시작되는 파일이 여러개 존재 시, 완성할 수 있는 곳까지만 완성시키고 나머지는 사용자의 입력을 기다림

<Tab> 키를 ㅇ녀속으로 두 번 누르면 자동으로 찾아서 입력해줌

 

 

 

 

4. 쉘의 입출력 재지정과 파이프

1) 표준 입출력 재지정하기

리눅스의 쉘에서 수행시키는 모든 명령어, 즉 프로세스에는 기본적으로 표준 입출력이 구성됨

프로세스에 따라 사용하거나 전혀 사용하지 않기도 함

 

 

리눅스의 프로세스
 open -> read/write -> close

 

 

2) 표준입출력

Linux 명령 중에는 명령어 수행 중 입력을 요구하는 명령이 있음

명령어 수행 시 파일명을 지정해야 하는 부분을 생략한 경우 키보드 입력을 기다리는 명령을 의미

대표적으로 cat

 

표준입력 재지정자 < 를 이용하여 키보드가 아닌 뒤에 지정된 파일 /etc/passwd로부터 데이터를 읽음

# cat < /etc/passwd

 

 

3) 표준 에러 재지정하기

표준 에러 출력은 파일 디스크립터 2번으로 지정되어 있으며 재지정할 때에는 '2>'로 지정할 것

 

쉘의 표준 입출력 재지정

 

 

 

4) 파이프 사용하기

표준 입출력의 재지정만 사용한다면 불편할 때가 있음

 

어떤 명령의 출력결과를 프린트를 하는 경우, 그리고 현재 디렉터리 리스트를 사이즈 순으로 정렬하는 경우에 표준 입출력을 사용해서 출력 결과를 일단 파일로 저장한 후 그 파일을 다음 명령의 입력으로 실행해야 함

 

=> 쉘의 파이프 명령을 사용하면 편리함

 

 

파이프의 개념

두 개 이상의 프로세스를 띄울 경우, 이들 프로세스의 표준 입력과 표준 출력 사이를 매끄럽게 이어주는 역할을 함

ex) ls | ws

ls -> 파이프 -> ws

 

ex) cat | grep | wc

cat /etc/passwd | grep 'user' | wc -l

=> Linux에 user라는 단어가 포함되어 있는 사용자 계정이 몇 명인지 알 수 있는 명령

 

 

댓글