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


  • 학습 목표
    • 운영체제의 구성, 커널의 역할에 대한 이해
    • 터미널과 터미널 에뮬레이터, 셸의 차이점 이해
    • 기본적인 리눅스 명령어 실습
  • 참고 사항
    • ❤️: 필수 명령어
    • 👍️: 사용법 정도 숙지
    • 👌️: 추후 필요할 경우 검색해서 사용

1-2. 떠나자 디지털 월드로! (1) pwd


  • echo hello?

    • echo는 뒤에 입력한 내용을 그대로 출력
  • pwd

    • Print Working Directory의 약자
    • or Present Working Directory의 약자
    • 현재 내가 위치한 디렉터리 위치 출력
    • Windows : \ or ₩
    • Linux : /
  • 홈 디렉터리

    • 사용자마다 하나씩 주어짐.
    • 줄여서 ~로도 표시
  • 터미널에 떠있던 문구 해석해보기
    root@w6k2klczk39t8b56oysi8tfuc-967dd9dc8-nbspw:~#

    • cloud shelld에서는 $ 대신 이렇게 표시
    • @ 앞의 root : 현재 로그인한 사용자명
    • @ 뒤의 w6k2klczk39t8b56oysi8tfuc-967dd9dc8-nbspw : 컴퓨터의 이름, 호스트명
    • 뒤의 ~ : 현재 위치
    • # : 현재 로그인한 사용자가 root 계정임을 알림(일반 사용자는 $)
  • 셸(shell)

    • 이 셸을 통해 커널(kernel)과 소통하는 것

1-3. 떠나자 디지털 월드로! (2) ls


  • ls

  • ls --all

  • . : 현재 폴더

  • .. : 상위 폴더

참고

  • 리눅스에서 .으로 시작하는 파일 : 숨김 파일 -> --all을 이용하면 다 볼 수 있다!
  • ls --help

    • 한 줄씩 : command+Shift+↑/↓
    • 한 페이지씩 : Shift+PageUp/PageDown

      ...
  • 인자들 살펴보기

    • -a : --all을 줄여쓸 수 있음.
    • -l : 파일 및 폴더 권한, 소유자, 크기, 수정일시 등 상세 정보 출력
    • -t: 수정시간 순 정렬 출력(최신 파일 위쪽)
    • -r: 정렬 순서 뒤집기(-rt : 최신 파일 아래쪽 표시되어 유용)
  • 인자는 서로 붙여쓸 수 있다!

  • Tip : ls -alrt

문제 : data 디렉터리 안에 있는 파일이 무엇이고, 크기가 얼마인지?

  • 명령어 : ls -lh data
  • 파일 이름 : titanic.csv
  • 파일 크기 : 60K

1-4. 떠나자 디지털 월드로! (3) cd

  • cd aiffel

    • 디렉터리 이동
    • 여기에서 pwd?
    • 다시 상위 폴더로 이동 -> cd ..
  • 그냥 cd만 입력하면?

주요 폴더 종류

  • /home: 사용자별 홈 디렉토리 모음
  • /root: 관리자 계정 홈 디렉토리
  • /mnt: 저장장치의 위치(마운트 약어)
  • /media: USB 드라이브 위치
  • /tmp: 임시 파일 저장 폴더(임시 temp)
  • /dev: 컴퓨터에 연결된 하드웨어, 가상 디바이스 파일들
  • /proc: 현재 실행 중인 프로세스
  • /etc: 각종 설정 파일
  • /bin: 실행 가능한 프로그램
  • /sbin: 시스템 관리용 프로그램
  • /usr: 다중 사용자 모드에서 사용 가능한 파일 및 프로그램(root 계정만 있는 모드에서는 X)
  • /var: 캐시, 로그 등

문제 : cloud shell의 홈 디렉토리에서 라이브러리들이 설치된 폴더로 이동하기, 폴더의 내용을 보는 법은?

cd /opt/conda/lib/python3.9/site-packages/
ls -l


1-5. 운영체제 일반 개론 (1) 운영체제란


  • 운영체제란?
    • 컴퓨터의 하드웨어 + 소프트웨어를 관리하는 시스템
    • ex) 비유해서 이해하기!
    • 운영체제 == "컴퓨터"라는 대저택을 관리하는 집사
    • 집주인(root)의 권한을 위임 -> 보조 인원(어플리케이션)에게 자원(연산 자원)의 분배 및 운영함, 서로 권한을 침범할 수 없도록 관리하는 역할

      이미지 출처 :[https://en.wikipedia.org/wiki/Kernel_(operating_system)]

1-6. 운영체제 일반 개론 (2) 커널


  • 운영체제

    • 알맹이 : kernel, 껍데기: shell

    A. (윈도우 기준) 전체 운영체제 버전이 8, 커널 버전이 6.3


  • bash

1-7. 운영체제 일반 개론 (3) 셸


  • GUI 셸

    • Windows shell, 맥 OS의 경우는 Aqua
  • CUI 셸

    • 윈도우 : cmd.exe, PowerShell
    • 맥(우분투) : sh(bash는 설치 후 사용)
  • zsh

    • 테마 및 플러그인 지원 셀

1-8. 운영체제 일반 개론 (4) 프로세스와 스레드


  • 운영체제는 프로세스 단위로 컴퓨팅 자원을 분배한다!

    • 메모리 관리

      • 운영체제는 프로세스에 실제 메모리의 일부 -> virtual memory) 나눠 제공
      • 프로세스 격리(process isolation) : 프로세스가 컴퓨터 메모리 전체 접근이 안되도록, 그리고 다른 프로세스를 훔쳐볼 수도 없게끔 하는 것(IPC기법 사용해야 볼 수 있음)
    • CPU 자원 관리

    • 프로세스는 스레드(thread) 단위로 코어를 하나씩 사용 가능

    • 하나의 프로세스가 시작되면 기본적으로 하나의 스레드를 가짐.

    • 다중 CPU 코어의 이점을 극대화하기 위해 프로그램이 더 많은 스레드를 사용하도록 설계 가능

프로세스 vs 스레드

  • 프로세스 : 작업 단위
  • 스레드 : 실행 단위
    • 멀티프로세싱(Multiprocessing) : 하나의 프로그램 안 여러개 프로세스 활용
    • 멀티스레딩(Multithreading) : 하나의 프로세스 안 여러개 스레드 활용

1-9. 리눅스 기반 운영체제 (1) 터미널


  • 터미널이란?

    • 입출력만 담당하는 CRT 모니터와 키보드로 구성된 말단 기기에서 유래
    • 원격으로 타이핑한다는 의미에서 teletype이라고도 불림.
  • teletype의 흔적


1-10. 리눅스 기반 운영체제 (2) 프로세스 관리와 시스템 콜


  • ps -e

    • 현재 실행 중인 프로세스 확인

    • PID : process ID 번호

    • TTY : 해당 프로세스 터미널

    • TTY 칸에 ? : 터미널에 붙지 않은 프로세스들

👍️ ps: 현재 터미널과 관련된 프로세스 목록 출력
👍️ ps -ef: 모든 터미널에서 현재 실행중인 프로세스 목록 및 부가정보 출력

  • 프로세스 죽이기
    • sudo kill -s KILL [PID]
    • 전체 PID 확인 : ps -ef
    • 특정 PID 확인 : ps -ef | grep 문자열

👍️ grep: 입력 내용 중 특정 문자열 포함한 라인만 선택해 출력(| 로 결합해 사용하는 것이 좋음)
❤️ sudo: root 권한으로 실행
👍️ kill: PID에 해당하는 프로세스에 시그널 보내기

  • 시스템 콜(system call)

    • 운영체제의 커널이 프로그램에 제공하는 인터페이스
    • 프로세스가 직접 할 수 없는 제어와 장치 및 자원 관리, 네트워크 통신을 가능하게 함.
  • kill

    • 죽이는 것 x, 프로세스에 신호를 보내는 명령어

문제 : 'grep'이 포함된 라인은 총 몇 개?

  • 내가 쓴 답 : grep 'grep' <(grep --help) | wc -l
    -> 이는 실제 라인 수를 카운트해서 알려줌.
  • 정답 : grep --help | grep grep
    • 라인 수를 세야 함!

1-11. 리눅스 기반 운영체제 (3) 프로그램과 환경변수


  • which

    • 명령어 전체 경로 출력
  • echo $PATH

    • 실제 설치 위치 출력
    • $ : 환경 변수
  • 👌️export

    • 셸 변수나 함수를 현재 환경으로 내보냄
  • 👌️ env

    • 현재 설정된 환경변수 모두 출력

      ...

1-12. 리눅스 기반 운영체제 (4) 패키지 관리자


  • 패키지 관리자

    • 공인 저장소에서 프로그램과 라이브러리를 패키지 단위 설치 및 관리할 수 있게 해주는 프로그램
  • ❤️ apt-get

    • APT 패키지 관리자를 통해 설치 또는 제거
  • sudo apt-get update

  • sudo apt-get install htop

  • htop

  • 삭제 : sudo apt-get remove htop

1-13. 리눅스 기반 운영체제 (5) 사용자와 권한


  • sudo

    • 관리자 권한을 가진 계정
    • 기본은 일반 사용자 계정이 생성됨.
    • 운영체제 자체에 영향을 주는 작업 시에는 root 권한 필요
  • 사용자 그룹

    • ❤️ cat: 하나 이상의 텍스트 파일을 순서대로 출력
    • ex) cat /etc/group
  • 접근 권한

    • 👍️ chown: 대상 파일의 소유 사용자 및 그룹 변경
    • ex) sudo chown root:adm .
  • 777 권한

    • 각각 3글자씩 rwxrwxrwx(소유 사용자, 소유 그룹, 기타 사용자 순)
    • ex) drwxr-xr-x : 디렉토리 파일의 소유자는 읽기, 쓰기, 실행 가능, 소유 그룹 사용자 및 기타 사용자들은 읽기, 실행만 가능!
  • 이진수로 보기

    • 간단하게 각 421, 421, 421 이렇게 된다고 보기!
  • 👍️ chmod : 대상 파일 권한 변경


1-14. 기타(1) 약간의 하드웨어 1: 연산장치


  • 기계어

    • CPU 칩이 처리할 수 있는 명령어
    • 컴파일 : 인간이 이해할 수 있는 언어로 짠 프로그램을 기계어로 변역 및 최적화
  • 명령어 집합

    • 연산 세트(데스크탑용 CPU 사이에서는 상당 부분 호환)
  • 메모리와의 관계

    • 이론적으로 32bit 컴퓨터 : 약 42억 개의 메모리 주소 공간만 사용 가능
  • GPU

    • 다차원 행렬 연산에 특화되어 있음.
  • TPU

    • 구글에서 딥러닝 전용으로 만든 칩

1-15. 기타 (2) 약간의 하드웨어 2: 저장장치


  • 저장장치

    • RAM : 주 저장장치(CPU와의 속도때문임), 휘발성
    • HDD, SSD : 보조 저장장치, 비휘발성

      [참고: https://gist.github.com/jboner/2841832]
  • 딥러닝과 저장장치

    • 데이터 리딩에 시간이 많이 소요된다? -> 저장장치를 SSD로 변경 or 미리 다중 스레드 사용해 RAM 메모리에 올려 해결!

1-16. 기타 (3) 클라우드와 가상화


  • 클라우드 컴퓨팅

    • 아마존 웹 서비스(Amazon Web Services) : 서버 대여
  • 가상화

    • 하나의 컴퓨터를 쪼개 여러 대의 컴퓨터가 있는 것처럼 사용
    • 가상화의 실제 물리 서버를 host, 가상 서버를 guest라고 함
      • 가상 머신 가상화 : 게스트 자체에 OS
      • 컨테이너 가상화 : 게스트들이 호스트 OS 커널 공유
      • 도커 : 실행 환경을 컨테이너로 구성해 클라우드로 실행하거나 내 컴퓨터에서 구동하여 사용 가능

1-17. 셸 심화 (1) 편리한 기능


  • 터미널 에뮬레이터 기준
  • command + shift +c(or v) : 복사, 붙여넣기
  • 위아래 화살표 : 이전 명령어 확인
  • history : 기존 실행 명령어 표시, !번호 -> 해당 번호 명령 다시 수행
  • command+A, command+E : 명령어 앞 뒤로 커서 이동
  • clear(command+L) : 기존 터미널 출력 내용을 깨끗이 지울 수 있음
  • command + z : 프로세스 중지
  • fg : 다시 재개
  • vi 편집기 접속 : ESC 누른 뒤 -> :q! 입력하고 엔터 누르면 빠져나올 수 있음.

1-18. 셸 심화 (2) 셸 스크립트


  • touch : 빈 파일 생성
  • || : 이전 명령이 false를 반환한 경우에만 다음 명령 실행
  • && : 이전 명령이 true를 반환한 경우에만 다음 명령 실행
  • > : 명령어 결과를 파일에 저장(>>는 기존 파일 뒤에 추가)
  • | : 앞 명령어의 결과를 입력으로 받아 이어 처리 가능
  • 👍️ sort: 입력된 텍스트를 줄 단위로 정렬

1-19. 셸 심화 (3) 명령어 모음 및 추천자료


  • 셸 환경

    • 👍history: 셸 명령어 이력 출력
    • 👍man: 프로그램의 매뉴얼 페이지 출력
    • 👌which: 명령어 전체 경로 출력
    • 👌export: 셸 변수나 함수를 현재 환경으로 내보냄.
    • 👌env: 명령어가 제공 -> 해당 명령어를 새로운 환경에서 실행(명령어가 없다면 현재 환경의 정보 출력)
  • 텍스트 처리

    • ❤️echo: 뒤 입력 출력
    • ❤️cat: 하나 이상의 텍스트 파일을 순서대로 출력
    • 👍sort: 줄 단위로 정렬
    • 👍less: 텍스트 파일 내용 조회 및 검색
    • 👍head: 앞 몇 줄만 출력
    • 👍tail: 마지막 몇 줄만 출력
    • 👍cut: 텍스트를 구분자(delimiter)로 나눔
    • 👍uniq: 중복 값 제거
    • 👍grep: 텍스트 검색
    • 👍wc : 텍스트를 단어, 줄, 문자 등 단위 세기
    • 👌comm: 텍스트 파일 비교
    • 👌zcat: 압축된 텍스트 파일 출력
    • 👌sed: 텍스트 변형
    • 👌awk: 텍스트 스캔 및 변형
  • 파일 제어 및 이동

    • ❤️ls: 현재 디렉토리 내의 파일 및 폴더들 출력
    • ❤️cd: 셸의 현재 위치를 이동
    • ❤️cp: 파일 복사
    • ❤️mv: 파일 이동
    • ❤️rm: 파일 삭제
    • 👍chown: 대상 파일 소유 사용자, 그룹 변경 
    • 👍chmod: 대상 파일 권한 변경
    • 👍find: 파일 찾기
    • 👍pwd: 현재 위치 출력
  • 시스템 및 프로세스 제어

    • ❤️sudo: root 권한
    • ❤️apt-get: 패키지 설치 or 제거
    • 👍ps: 현재 프로세스 목록 출력
    • 👍kill: PID에 해당하는 프로세스에 시그널 보내기
  • 기타

    • ❤️ssh: 셸 원격 접속
    • 👍tmux: 여러 개의 셸 세션 관리, 터미널 접속 끊어져도 셸 세션 유지
    • 👍watch: 명령 주기적 실행 및 표시
    • 👍curl: 주어진 URL과 통신
    • 👍wget: 네트워크로 접속해 파일 다운로드
    • 👍scp: SSH를 통해 원격 파일 전송

profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE&Data Science 개발 기록 노트☘️

0개의 댓글