터미널로 배우는 리눅스 운영체제

터미널로 배우는 리눅스 운영체제를 알아보자. 키워드 중심으로 정리하였다.

  • Ubuntu에서 CLI 환경으로 바꾸는 단축키 : Ctrl + Alt + F2
  • 셀과 커널
    • 커널 : CPU, Memory, SDD등 각종 디바이스를 통합관리하면서 그 연산자원을 수많은 어플리케이션들에게 분배하는 자리에 있는 것.
    • 커널 ≠ 운영체제
      • 그렇지만 보안, 자원관리, 디바이스 인터페이스 추상화 등 운영체제의 핵심적인 구성요소
    • : 운영체제의 껍데기. 사용자와 커널을 연결해주는 인터페이스.
      • CLI 셀
      • GUI 셀
  • ls -alrt 명령어
  • 운영체제의 자원 분배
    • 메모리 관리 : OS는 프로세스가 컴퓨터의 전체 메모리 어디든지 쓸 수 있도록 하는 것이 아니라 가상 메모리(Virtual memory) 로써 일부만 떼어서 제공함. (프로레스 격리) 이때문에 프로세스들이 서로 소통하기 위해서는 별도로 허용된 프로세스간 통신(Inter-Process Communication, IPC) 기법들을 사용해야 한다.
    • CPU 자원 관리 : CPU 연산의 경우 코어 단위로 프로세스에 제공. 프로세스는 스레드(thread) 라는 단위로 코어를 하나씩 사용할 수 있는데, 프로세스 하나가 시작되면 기본적으로 하나의 스레드를 가지고 시작하지만, 개발자는 프로그램이 더 많은 스레드를 사용하도록 설계하여 다중 CPU 코어의 이점을 극대화 함.
  • 프로세스와 스레드
    • 프로세스 : 현재 수행되고있는 작업.
    • 스레드 : 프로세스의 실행 단위.
    • 하나의 프로그램 안에서 여러개의 프로세스를 활용하는 것을 멀티프로세싱(multiprocessing) , 하나의 프로세스 안에서 여러개의 스레드를 활용하는 것을 멀티스레딩(Multithreading) 이라고 합니다.
  • 터미널
    • 개인용 컴퓨터가 등장하기 전 시절. 여러 대의 터미널을 한대의 메인프레임에 연결해 여러 사용자들끼리 나눠 사용했었다. 그때의 용어가 아직도 사용되는 중.
    • 즉, 터미널이란 컴퓨터에 정보를 입력하고 출력하는 소프트웨어 및 하드웨어로써의 장치
  • 프로세스 관리 명령어
    • ps : 현재 터미널과 관련된 프로세스 목록 출력
    • ps -ef : 모든 터미널에서 현재 실행중인 프로세스 목록 및 부가정보를 출력
    • kill -s KILL [프로세스번호] : 현재 실행중인 해당 번호의 프로세스를 중단
  • 시스템 콜(system call)
    • 프로세스 관리는 커널의 고유 권한 → 커널의 approve가 있어야지 프로세스 관리가 가능. (프로세스 삭제, 실행 등)
    • 이렇게 프로세스가 커널에게 요청을 전달하는 기능을 시스템콜(system call) 이라고 한다.
  • 프로그램과 환경변수
    • which : 명령어의 전체 경로 출력
    • export : 셀 변수나 함수를 현재 환경으로 내보냄
    • env : 명령어가 제공된다면 해당 명령어를 새로운 환경에서 실행. 명령어가 제공되지 않는 경우 현재 환경의 정보를 출력
  • 패키지 관리자(package manager)
    • 공인 저장소에서 프로그램과 다른 라이브러리를 패키지 단위로 설치하고 관리할 수 있도록 하는 프로그램.
    • apt-get : APT(Advanced Packaging Tool) 패키지 관리자를 통해 공인 저장소에서 패키지를 가져다 설치하거나 제거하는 명령어
  • 명령어 집합(Instruction Set)
  • TPU(Tensor Processing Unit)
  • ASIC(Application-Specific Integrated Circut, 어플리케이션 특화 집적회로)
  • FPGA
  • 저장장치
    • RAM : 주기억장치.
      • 비싸다. 휘발성
    • HDD & SDD : 보조 기억장치.
      • 저렴하다. 비휘발성
  • 클라우드와 가상화
    • 가상화(virtualization) : 하나의 컴퓨터를 쪼개어 여러대의 컴퓨터가 있는 것처럼 사용하게 하는 기술
      • 호스트(host) : 실제 물리적인 서버
      • 게스트(guest) : 그 안에서 돌아가는 가상 서버
    • 가상화의 종류
      • 가상머신(Virtual Machine) : 게스트가 운영체제 있음
      • 컨테이너(Container) : 게스트가 호스트의 운영체제 커널을 공유해서 사용 ex. 도커
  • sudo apt install curlcurl parrot.live를 통해 춤추는 앵무새를 볼 수 있습니다.
  • 셀 스크립트
    • 셀 스크립트 내용은 아래와 같이 작성. #!/bin/bash 필수!
    1
    2
    3
    4
      #!/bin/bash
      echo "Hello"
      # 주석
      echo "Bye"
    
    • 실행하는 방법!
      1
      2
        $ chmod +x test.sh
        $ ./test.sh
      
    • 파이썬도 이렇게 실행할 수 있다.

명령어 모음

필수(❤️) 및 권장(👍) 명령어들은 한번씩 실행하거나, 사용법을 검색해 보는 것을 추천합니다.

  • 셸 환경
    • 👍history: 셸 명령어 이력을 출력합니다.
    • 👍man: 프로그램의 매뉴얼 페이지를 출력합니다.
    • 👌which: 명령어의 전체 경로를 출력합니다.
    • 👌export: 셸 변수나 함수를 현재 환경으로 내보냅니다.
    • 👌env: 명령어가 제공된다면 해당 명령어를 새로운 환경에서 >실행합니다. 명령어가 제공되지 않은 경우 현재 환경의 정보를 출력합니다.
  • 텍스트 처리
    • ❤️echo: 뒤이어 입력한 내용을 출력합니다.
    • ❤️cat: 하나 이상의 텍스트 파일을 순서대로 출력합니다.
    • 👍sort: 입력된 텍스트를 줄 단위로 정렬합니다.
    • 👍less: 텍스트 파일의 내용을 자유롭게 조회하고 검색합니다.
    • 👍head: 텍스트 파일의 앞 몇 줄만 출력합니다.
    • 👍tail: 텍스트 파일의 마지막 몇 줄만 출력합니다.
    • 👍cut: 텍스트를 구분자(delimiter)에 따라 나눕니다.
    • 👍uniq: 텍스트 중 중복 값들을 제거합니다.
    • 👍grep: 정규식을 활용해 텍스트를 검색합니다.
    • 👍wc: 텍스트를 단어, 줄, 문자 등 단위로 셉니다.
    • 👌comm: 텍스트 파일을 비교합니다.
    • 👌zcat: 압축된 텍스트 파일을 출력합니다.
    • 👌sed: 정규식을 활용해 텍스트를 변형합니다.
    • 👌awk: 텍스트를 스캔하고 변형합니다.
  • 파일 제어 및 이동
    • ❤️ls: 현재 디렉토리 내의 파일 및 폴더들을 출력합니다.
    • ❤️cd: Change Directory의 약자로, 뒤에 따라오는 폴더로 >내가 있는 셸의 현재 위치를 이동시킵니다.
    • ❤️cp: 파일을 복사합니다.
    • ❤️mv: 파일을 이동합니다.
    • ❤️rm: 파일을 삭제합니다. 폴더를 삭제하기 위해서는 -r (recursive) 옵션을, 빈 폴더가 아니더라도 내부까지 삭제하려면 -f (force) 옵션을 함께 사용해야 합니다.
  • 👍chown: 대상 파일의 소유 사용자와 그룹을 변경합니다.
    • 👍chmod: 대상 파일의 권한을 변경합니다.
    • 👍find: 파일을 찾습니다.
    • 👍pwd: Present Working Directory의 약자입니다. 현재 내가 >위치한 디렉토리 위치를 출력합니다.
    • 👌ln: 파일에 대한 링크를 생성합니다.
    • 👌touch: 파일 접근 및 수정 시간을 변경합니다. 빈 파일을 만드는데도 사용할 수 있습니다.
    • 👌tar: 파일 및 폴더를 하나의 아카이브 파일로 통합하고 압축합니다.
    • 👌mount: 새로운 저장장치를 파일시스템으로서 추가합니다.
    • 👌rename: 여러 파일들의 이름을 규칙에 따라 한번에 변경합니다.
    • 👌df: 파일시스템의 남은 용량을 표시합니다.
  • 시스템 및 프로세스 제어
    • ❤️sudo: 이어지는 명령을 최고 관리자 권한으로 실행합니다.
    • ❤️apt-get: APT 패키지 관리자를 통해 공인 저장소에서 패 >키지를 가져다 설치하거나 제거합니다.
    • 👍ps: 현재 프로세스 목록을 출력합니다.
    • 👍kill: PID에 해당하는 프로세스에 시그널을 보냅니다.
    • 👌fg: 배경에서 실행되는 작업을 전경(foreground)으로 가져옵니다.
    • 👌bg: 작업을 배경(backgound)으로 보냅니다.
    • 👌jobs: 전경 및 배경 작업의 목록을 표시합니다.
  • 기타
    • ❤️ssh: 원격으로 셸에 접속합니다.
    • 👍tmux: 여러 개의 셸 세션을 관리하고, 터미널 접속이 끊어지더라도 셸 세션을 유지합니다.
    • 👍watch: 이어지는 명령을 주기적으로 실행하여 표시합니다.
    • 👍curl: 주어진 URL과 통신합니다.
    • 👍wget: 네트워크를 통해 파일을 다운로드합니다.
    • 👍scp: SSH를 통해 원격으로 파일을 전송합니다.
    • 👌ssh-keygen: SSH 공개키 비밀키 쌍을 생성합니다.
    • 👌ssh-copy: SSH 공개키를 해당 서버에 등록합니다.
    • 👌rsync: 원격으로 파일을 동기화합니다.
    • 👌xarg: 명령어를 구성하여 실행합니다. 이전 명령에서 인자를 넘겨받아 실행하거나, 다중 프로세스를 사용하여 명령을 병렬로 실행하는 등의 작업이 가능합니다.
    • 👌cron: 주기적으로 실행될 명령을 등록합니다.
    • 👌htop: 프로세스 목록 및 자원 사용량을 시각적으로 표시합니다.