Skip to content

Latest commit

 

History

History
145 lines (135 loc) · 8.8 KB

README.md

File metadata and controls

145 lines (135 loc) · 8.8 KB

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

프로그래머가 반드시 이해하고 넘어가야 할 process와 thread, 파일시스템을 중심으로 운영체제의 특성을 파악한다.


- 목차 ⏲ 210분
3-1 터미널로 배우는 리눅스 운영체제 5분
3-2 떠나자 디지털 월드로! (1) pwd 10분
3-3 떠나자 디지털 월드로! (2) ls 10분
3-4 떠나자 디지털 월드로! (3) cd 10분
3-5 운영체제 일반 개론 (1) 운영체제란 5분
3-6 운영체제 일반 개론 (2) 커널 5분
3-7 운영체제 일반 개론 (3) 셸 5분
3-8 운영체제 일반 개론 (4) 프로세스와 스레드 5분
3-9 리눅스 기반 운영체제 (1) 터미널 10분
3-10 리눅스 기반 운영체제 (2) 프로세스 관리와 시스템 콜 10분
3-11 리눅스 기반 운영체제 (3) 프로그램과 환경변수 10분
3-12 리눅스 기반 운영체제 (4) 패키지 관리자 10분
3-13 리눅스 기반 운영체제 (5) 사용자와 권한 10분
3-14 기타 (1) 약간의 하드웨어 1: 연산장치 10분
3-15 기타 (2) 약간의 하드웨어 2: 저장장치 10분
3-16 기타 (3) 클라우드와 가상화 10분
3-17 셸 심화 (1) 편리한 기능 10분
3-18 셸 심화 (2) 셸 스크립트 10분
3-19 셸 심화 (3) 명령어 모음 및 추천자료 15분
3-20 셸 심화 (4) 연습문제 40분

학습 목표

  • 운영체제의 구성과 커널의 역할에 대해 이해합니다.
  • 터미널과 터미널 에뮬레이터, 셸의 차이점을 이해합니다.
  • 기본적인 리눅스 명령어들을 배우고 사용해 봅니다.
    • ❤️: 필수로 꼭 알아두어야 하는 가장 기본적인 명령어입니다.
    • 👍️: 사용법을 기억해두면 편리한 명령어입니다.
    • 👌️: 이런 명령어가 있다는 것만 알아두고 필요할 때마다 검색해서 사용하면 충분합니다.

노드 내용

  • 하드웨어
    • 연산장치
      • CPU(Central Processing Unit, 중앙처리장치)
        • 기계어: CPU 칩이 처리할 수 있는 명령어
        • 컴파일: 프로그래밍 언어 -> 기계어 번역
        • CPU를 구분할 때에는 32bit와 64bit로 구분
          • CPU가 한 번에 읽고 쓸 수 있는 데이터의 크기
          • 사용 가능한 메모리 주소의 범위에 영향
        • CPU 판단 척도: 클럭(clock)
      • GPU(Graphical Processing Unit)
        • CPU보다 이해할 수 있는 명령어는 훨씬 적지만, 코어 수를 훨씬 늘리는 방법으로 다차원 행렬 연산에 특화
      • TPU(Tensor Processing Unit)
        • 구글에서 딥러닝 전용으로 개발
      • ASIC(Application-Specific Integrated Circuit, 어플리케이션 특화 집적회로)
        • 작업에 맞게 직접 설계하여 생산
      • FPGA(Field-Programmable Gate Array)
        • 그때그때 회로를 직접 프로그래밍해서 사용
    • 저장장치
      • 주 저장장치(휘발O): RAM(Random Access Memory)
      • 보조 저장장치(휘발X): HDD(Hard Disk Drive), SSD(Solid State Drive)
      • 데이터를 읽어오는 시간이 길다면 저장장치를 SSD로 변경, 여러 개의 스레드를 사용하여 RAM 메모리에 올려두는 방법으로 해결
  • 클라우드와 가상화
    • 클라우드 컴퓨팅
      • 아마존 웹 서비스(Amazon Web Services)
        • 수요에 따라 그때그때 서버를 빌렸다가 반납하는 서버 임대업
        • 한 대의 물리적인 서버를 여러 개의 가상 서버로 쪼개어 판매
    • 가상화(virtualization)
      • 하나의 컴퓨터를 쪼개어 여러 대의 컴퓨터가 있는 것처럼 사용하게 하는 기술
      • 서버
        • 실제 물리적 서버: 호스트(host)
        • 그 안에서 돌아가는 가상 서버: 게스트(guest)
      • 종류
        • 가상머신(Virtual Machine) 가상화: 게스트 자체에서 운영체제가 실행됨
        • 컨테이너(Container) 가상화: 게스트들이 호스트의 운영체제 커널만 공유함(프로세스, 자원 격리됨)
          • 도커(Docker)
            • 컨테이너 가상화를 손쉽게 제공하는 프로그램
            • 컨테이너 구성 -> 클라우드로 가져가서 실행 or 내 컴퓨터에서 여러 개의 독립된 작업 환경을 구분해서 사용
      • 파이썬 가상환경
      • 아나콘다(Anaconda)
      • VirtualEnv
  • 명령어 모음
    • 셸 환경
      • 👍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: 프로세스 목록 및 자원 사용량을 시각적으로 표시합니다.