리눅스데브코스 [5주차 - 2]<리눅스 Shell>

심우열·2023년 5월 3일
0

1. Shell 의 기능과 종류

1. Shell 의 기능

1. 명령어 해석기 기능

  1. 사용자와 커널 사이에서 명령을 해석하여 전달하는 해석기(interpreter)와 번역기(translator) 기능
  2. 사용자가 로그인하면 shell 이 자동으로 실행되어 사용자가 명령을 입력하기를 기다림 -> 로그인 shell
  3. 로그인 shell 은 /etc/passwd 파일에 사용자별로 지정
  4. 프롬프트: shell 이 사용자의 명령을 기다리고 있음을 나타내는 표시($)

2. 프로그래밍 기능

  1. shell은 자체적으로 프로그래밍 기능이 있어 반복적으로 수행하는 작업을 하나의 프로그램으로 작성 가능
  2. shell 프로그램을 shell 스크립트라고 함

3. 사용자 환경 설정 기능

  1. 사용자 환경을 설정 할 수 있도록 초기화 파일 기능을 제공
  2. 초기화 파일에는 명령을 찾아오는 경로를 설정하거나
  3. 파일과 디렉터리를 새로 생성할 때 기본 권한을 설정하거나
  4. 다양한 환경 변수 등을 설정

2. shell의 종류

1. bourne shell

2. C shell

4. korn shell

5. bash shell - 리눅스의 기본 shell

6. dash shell

2. Shell 기본 사용법

1. 기본 shell 확인

1. 프롬프트 모양 참조

  1. bourne shell, bash shell, korn shell 의 기본 프롬프트: $
  2. c shell 의 기본 프롬프트: %

2. 사용자 정보 확인: etc/passwd 파일

사용자 정보의 가장 마지막에 나온 /bin/bash 가 기본 shell

2. 기본 shell 바꾸기

1. chsh: 사용자 로그인 shell 을 바꾸는 명령어

2. 로그인 shell(기본 shell)과 서브 shell

  1. 프롬프트에서 다른 shell을 실행할 수 있는데, 이것을 서브 shelㅣ이라고 함
  2. 서브 shell은 또 다른 서브 shell 생성 가능
  3. 서브 shell을 종료하는 명령은 ctrl+d 또는 exit 명령어 사용
  4. 서브 shell이 종료되면 서브 shell 을 실행했던 이전 shell 환경으로 복귀
  5. 로그인 shell 에서 로그아웃하면 접속 해제

3. bash shell 의 출력 명령

1. echo

화면에 한 줄의 문자열을 출력한다

2. printf

  1. 자료를 형식화하여 화면에 출력한다
  2. %d, \n 등 c언어 printf 함수의 형식을 지정

4. bash shell 에서 특수문자 사용하기

1. ' * '

임의의 문자열을 나타내는 특수문자로 0개 이상의 문자로 대체

2. ' ? ' 와 " [ ] "

  1. 하나의 문자를 나타내는데 사용
  2. ' ? '는 길이가 1인 임의의 한 문자를, " [ ] " 는 괄호 안에 포함된 문자 중 하나를 나타냄

3. ' ~ '와 ' - '

  1. ' ~ '와 ' - '는 디렉토리를 나타내는 특수 문자
  2. ' ~ '만 사용하면 현재 작업 중이니 사용자의 홈 디렉토리를 표시
  3. ~user2/lib 와 같이 ' ~ '와 다른 사용자의 ID 를 함께 사용하면 해당 사용자의 홈 디렉토리 표시
  4. ' - '는 cd 명령으로 디렉토리를 이전하기 직전의 작업 디렉토리 표시

4. ' ; ' 와 ' | '

  1. ' ; '과 ' | '는 연결된 명령을 왼쪽부터 차례로 실행
  2. ' | ' 는 왼쪽 명령의 실행 결과를 오른쪽 명령의 입력으로 전달

5. ' '와 " "

  1. ' '(작은 따옴표) 와 " "(큰 따옴표)는 문자를 감싸서 문자열로 만들어 주고, 문자열 안에 사용된 특수문자의 기능을 없앰
  2. ' '는 모든 특수문자를, " "는 ' $ ', ' ', ' \ '를 제외한 모든 특수문자를 일반 문자로 간주하여 처리

6. (백틱)

shell은 (백틱)로 감싸인 문자열을 명령으로 해석하여 명령의 결과로 전환

7. ' \ '

' \ ' 는 특수문자 바로 앞에 사용되는데 해당 특수문자의 효과를 없애고 일반 문자처럼 처리

8. ' > ', ' < ', ' >> ' 등

입출력의 방향을 바꾸는 특수문자 -> 리다이렉션

3. 입출력 방향 바꾸기

1. 표준 입출력 장치

  1. 표준 입력 장치: shell이 작업을 수행하는데 필요한 정보를 받아들이는 장치 -> 키보드
  2. 표준 출력 장치: 실행 결과를 내보내는 장치 -> 모니터
  3. 표준 오류 장치: 오류 메세지를 내보내는 장치 -> 모니터

2. 파일 디스크립터

  1. 파일 관리를 위해 붙이는 일련 번호
  2. 입출력 장치를 변경할 때는 이 파일 디스크립터를 사용
  3. 표준 입출력 장치를 파일로 바꾸는 것을 "리다이렉션(redirection)" 이라고 함

1. 파일 디스크립터의 종류

  1. stdin(0): 명령의 표준 입력
  2. stdout(1) : 명령의 표준 출력
  3. stderr(2) : 명령의 표준 오류

2. 출력 리다이렉션

  1. ' > ': 기존 파일의 내용을 삭제하고 새로 결과를 저장
  2. ' >> ': 기존 파일의 내용 뒤에 결과를 추가

1. 예상치 않게 파일의 내용이 겹쳐 쓰이는 상황을 방지하기

  1. 설정
set -o noclobber
  1. 해제
set +o noclobber

3. 오류 리다이렉션

  1. 표준 오류도 기본적으로 화면으로 출력되며 표준 출력처럼 리다이렉션 가능
  2. 오류 리다이렉션을 위해서는 '2>'이런식으로 오류 파일 디스크립터 번호인 2를 꼭 기입해줘야 함
  3. 오류 메시지를 버리고 싶다면 '/dev/null' 로 오류 리다이렉션 해주면 됨 (ls /abc 2> /dev/null)\
  4. 표준 출력과 표준 오류를 한 파일로 리다이렉션 하기
    1. 명령의 정상 실행 결과를 파일로 리다이렉션(>)
    2. 그 명령 전체의 오류 메시지를 1번 파일(표준 출력 파일, &1이라고 표현)로 리다이렉션(2>)

4. 입력 리다이렉션

  1. 표준 입력을 바꾼다
  2. 명령 0< 파일 또는 명령 < 파일 -> 파일의 내용을 명령의 표준 입력으로 넣는다

4. bash shell

1. bash shell 환경 설정

1. shell 변수와 환경 변수

  1. shell의 환경을 설정하기 위한 값을 저장할 수 있도록 shell 변수와 환경 변수를 제공
  2. shell 변수: 현재 shell에서만 사용이 가능하고 서브 shell 로는 전달되지 않음(지역 변수)
  3. 환경 변수: 현재 shell뿐만 아니라 서브 shell로도 전달 됨(전역 변수)

2. 전체 변수 출력: set, env

  1. set: shell 변수와 환경변수 모두 출력
  2. env: 환경 변수만 출력

3. 특정 변수 출력: echo $변수 이름

특정 변수의 값을 출력할 때는 변수 이름 앞에 ' $ ' 를 붙임

4. shell 변수 설정하기

  1. 변수 이름과 문자열 사이에 공백이 있으면 안됨
  2. 변수명=문자열 -> SOME=test
SOME=test
echo $SOME

5. 환경 변수 설정하기 : export

  1. 먼저 shell 변수를 정의하고 export 명령어를 사용하여 이를 환경 변수로 변경
  2. export SOME -> shell 변수인 SOME 을 환경변수로 만든다
  3. export -n SOME -> 환경 변수인 SOME 을 shell 변수로 만든다
  4. export SOME=test -> shell 변수 SOME을 선언함과 동시에 환경변수로 만든다

6. 변수 해제하기 : unset

지정한 변수를 해제한다 -> unset SOME

5. alias 와 history

1. alias

  1. alias는 우리말로 '별명'을 의미
  2. 기존의 명령을 대신하여 다른 이름(별명)을 붙일 수 있도록 하는 기능
  3. 긴 명령 대신 짧은 명령을 만들어 사용 가능
  4. 여러 명령을 연결하여 하나의 명령으로 만들 수도 있음
  5. 자주 사용하는 옵션을 포함하여 새로운 이름을 붙여서 사용 가능

1. alias 기능

  1. alias 이름='명령'
  2. alias : 현재 설정된 alias 목록을 출력
  3. alias 이름='명령' : 명령을 수정하여 사용하는 경우
  4. alias 이름='명령1;명령2;......' : 여러 명령을 하나의 이름으로 사용하는 경우
  5. unalias alias이름 : alias이름으로 설정된 alias를 해제 한다

2. alias 특징

  1. bash shell에서는 alias에 인자를 전달할 수 없음
  2. bash shell에서 인자를 전달하려면 프로그래밍 기능에서 function을 사용

2. history

사용자가 이전에 입력한 명령을 다시 불러 사용하는 것

1. 명령 재실행 하기: !

  1. !! : 바로 직전에 실행한 명령을 재실행
  2. !번호 : 히스토리에서 해당 번호의 명령을 재실행
  3. !문자열 : 히스토리에서 해당 문자열로 시작하는 마지막 명령을 재실행

2. 명령 편집하기와 재실행하기

화살표 키를 사용하여 오류가 난 명령을 다시 프롬프트로 불러내서 수정한 뒤 재실행 가능

history 저장

로그아웃 할 때 홈 디렉터리 아래의 숨김파일인 .bash_history에 히스토리 저장됨

6. 프롬프트 설정

1. 프롬프트 설정 변수: PS1

7. 환경 설정 파일

1. 환경 설정 파일

  1. 사용자가 로그인 할 때마다 자동으로 실행되는 명령을 저장한 것이 환경 설정 파일
  2. 시스템 환경 설정 파일과 사용자 환경 설정 파일이 있음
  3. shell마다 다른 이름의 파일을 사용

2. 시스템 환경 설정 파일

  1. 시스템을 사용하는 전체 사용자의 공통 환경을 설정하는 파일

3. 사용자 환경 설정 파일

  1. 각 사용자의 홈 디렉터리에 숨김 파일로 생성
  2. 사용자가 내용을 수정하고 관리 가능

1. 사용자 환경 설정 파일 만들기

  1. vi로 .bash_aliases 파일 수정
  2. 사용자 환경 설정 파일 적용하기
source .bash_aliases 
. .bash_aliases
profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글