본문 바로가기
컴퓨터 과학(CS)/리눅스

도커를 위한 리눅스 쉘(bash) 이해

by Bentist 2022. 1. 17.

Docker

기본적으로 리눅스 커널이 제공하는 기능 위에서 동작한다. 커널은 시스템 자원들을 관리하는 운영체제의 핵심이라고 했다. 이라는 인터페이스를 통해 사용자의 명령어를 커널에 전달하여 시스템 자원들을 관리할 수 있다.

 

즉, 리눅스 커널을 조작하기 위해 리눅스  사용법을 알아야 한다.

리눅스 쉘에는 Bourne shell(sh), Bourne-again shell(bash), C shell, Korn shell(ksh) 등이 있는데, 현재 linux의 기본 shell 이자 가장 범용적으로 사용되는 것은 Bourne-again shell(bash)이다.

 

리눅스 bash는 사용자가 명령 줄을 입력하는 방식(CLI)의 장치이므로, 리눅스 명령어를 익힌다는 것은 결국 bash가 제공하는 명령어를 배우는 것과 같다.

 

자주 쓰는 기본 명령어 (명령어 -옵션)

  • whoami: 현재 로그인한 사용자의 이름을 출력
  • mkdir: 디렉토리 생성
  • cd: 디렉토리 이동
  • find: 파일이나 디렉토리 검색
  • cp: 파일 복사
  • mv: 파일 이동
  • sudo: root(관리자) 권한으로 실행
  • chmod: 파일이나 디렉토리에 부여된 권한(퍼미션)을 수정
  • pwd: 현재 디렉토리 위치
  • ls: 파일 목록 출력
  • ls -al: 숨긴 파일과 디렉토리 전부를 출력
  • ls -l: 권한, 파일 크기, 수정 일자 등의 상세 정보를 출력
  • echo: 인수로 전달 받은 문자열을 터미널에 출력
  • cat: 파일 내용 출력
$ echo "This is a test."
This is a test.
$ echo "This is a test." > ./test.txt
$ cat ./test.txt
This is a test.

 

  • ln: 파일의 링크를 생성 할 때 사용(파일 연결 명령어), 소프트/하드 링크 설명 게시글 참고
  • rm: 파일 및 폴더 삭제 (r 옵션: 하위 디렉토리를 포함하여 모든 파일 삭제, f 옵션: 강제로 삭제)
    • ex) rm -rf 디렉토리명
  • vi: 문서 편집 에디터
  • vi 명령어로 명령모드 진입
    • 명령 모드에서 입력 모드로 전환
      • i : 커서 앞(왼쪽)에 입력
      • a : 커서 다음(오른쪽)에 입력
    • ESC입력 모드에서 명령 모드로 전환
      • 커서 이동
        • h, j, k, l: 좌,하,상,우 커서 이동 (방향 키가 없는 키보드에서 사용)
        • w : 다음 단어의 첫 글자로 이동
        • b : 이전 단어의 첫 글자로 이동
        • G : 마지막 행으로 가기
        • :숫자 : 지정한 숫자 행으로 이동 ex. :5
      • 삭제
        • x : 커서에 있는 글자 삭제
        • X : 커서 앞에 있는 글자 삭제
      • 되돌리기(Undo), 다시실행(Redo)
        • u : 이전으로 되돌리기 (Undo)
        • Ctrl + r : 되돌리기한 것을 다시 실행 (Redo)
    • 콜론 : 으로 명령 모드에서 EX 모드
      • :q 저장하지 않고 종료
      • :q! 저장하지 않고 강제로 종료
      • :w 현재 오픈된 파일 저장
      • :wq 저장 후 종료
      • ZZ 저장 후 종료 (:wq와 동일)
      • :wq 파일 이름: 저장 후 파일 이름 지정
        * vi 에디터에서는 비정상 종료 시 .swp 파일이 생성된다. 필요하지 않은 경우 삭제한다.

출처: https://brunch.co.kr/@jehovah/12

리눅스의 파일 권한

  • 리눅스는 사용자/그룹으로 권한을 관리
  • root는 슈퍼 관리자
  • 파일마다 소유자, 소유자 그룹, 기타 사용자에 대해 각각 읽고(r), 쓰고(w), 실행(x)하는 권한을 관리

파일 권한

사용자

  • 소유자: 소유자에 대한 권한
  • 그룹: 소유자가 속해 있는 그룹에 대한 권한
  • 공개: 모든 사용자에 대한 권한

파일

  • r: 읽기 권한
  • w: 쓰기 권한
  • x: 실행 권한

파일 권한 변경 (chmod 명령어)

chmod 명령어를 통해서 어떤 사용자에게 어떤 파일 권한을 줄 것인지 문자와 기호로 설정한다.

출처: https://ttend.tistory.com/686

1. 알파벳과 기호로 파일 권한 변경

1) 그룹(g)에게 읽기(r)권한을 줄(+) 경우,

  •  chmod g+r 파일명

2) 그룹(g) 다른 사용자(o)에게 쓰기(w) 실행(x) 권한을 줄(+) 경우,

  • chmod go+wx 파일명

2. 숫자로 파일 권한 변경

숫자로 파일 권한을 변경하는 방법도 있다.

권한은 세 자리로 이루어져 있으며, 백의 자리는 소유자, 십의 자리는 그룹, 일의 자리는 기타의 권한이다. 

각 자리 수마다 읽기는 4, 쓰기는 2, 실행은 1로 나타내며 필요한 권한을 다 더해서 사용하게 된다.

(2진수 비트 계산으로 4, 2, 1로 표시)

 

1) 그룹(g)에게 읽기(r)권한을 줄(+) 경우,

  • chmod 040 파일명

2) 사용자, 그룹, 기타 사용자에게 모든 권한을 주는 경우,

  • chmod 777 파일명

출처: https://ttend.tistory.com/686


Foreground Process, Background Process

윈도우는 GUI기반이라 명령어를 별도로 치지 않아도 하나의 프로그램을 실행시키는 동안 마우스로 다른 프로그램을 클릭해 프로그램을 사용한다. 리눅스 또한 background process를 통해 작업이 오래 걸리는 프로세스는 뒷단에서 실행시키면서 사용자는 다른 작업을 할 수가 있다.

  • Foreground Process: 쉘(shell)에서 해당 프로세스 실행을 명령한 후, 해당 프로세스 수행 종료까지 사용자가 다른 입력을 하지 못하는 프로세스

ex. 쉘에서 python *.py를 입력하여 실행하면 그 프로그램이 돌아갈 때 다른 명령어를 치더라도 실행이 안된다.

  • Background Process: 사용자 입력과 상관없이 실행되는 프로세스
  • 명령어 맨 뒤에 & 붙이면, 해당 프로세스는 뒷단에서 실행된다.

[1]작업 번호(job number), 6016pid(process ID)

프로세스 관련 명령어

  • jobs : background로 실행되고 있는 프로세스나 중지된 있는 프로세스들을 출력
  • Ctrl + Z : foreground process를 실행 중지 상태로 변경
  • Ctrl + C : 프로세스 작업  취소
  • bg : Ctrl + z로 중지된 마지막 프로세스를 background process로 실행
  • fg: Background에서 실행되고 있는 프로세스를 forground로 옮겨와 실행

ps [option] : 현재 실행 중인 프로세스의 목록과 상태를 보여준다.

ps의 옵션은 전통적인 유닉스인 System V, BSD, GNU에 따라 결과가 다르게 나타나고 표기법에도 차이를 보인다. 따라서 원하는 프로세스의 상태를 출력하려면 정확한 옵션 사용이 중요하다.

  • 유닉스(SVR4) 옵션: 묶어서 사용할 수 있고, 붙임표로 시작한다. ex. -ef
  • BSD 옵션: 묶어서 사용할 수 있고, 붙임표로 시작하지 않는다. ex. aux
  • GNU 옵션: 붙임표 두 개로 시작한다. ex. --pid

kill -[신호] [ProcessID]

동작하고 있는 프로세스에 간단한 메시지(시그널)를 보내는 명령어이다. 기본적으로 보내는 메시지는 종료 메시지이고 프로세스에 종료하는 것을 요구한다. kill은 그 명칭과는 조금 다르게 종료와 무관한 메시지를 보낼 때도 사용된다.

 

  • kill %작업번호 
  • kill ProcessID : 프로세스 종료, 기본값인 15번 신호로 정상적인 프로세스들은 신호를 받고 자동 종료된다.
  • kill -9 ProcessID : 대부분의 프로세스는 SIGTERM 신호로 종료되지만 종료되지 않는 경우도 있다. 이럴 때 9번 신호인 SIGKILL을 사용하면 프로세스를 강제로 종료할 수 있다. (SIGTERM, SIGKILL 차이는 나중에)

댓글