Skip to content

Latest commit

 

History

History

02_linux_terminal

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

학습목표

  • 운영체제의 구성과 커널의 역할

    • 운영체제는 커널과 기타 이것저것으로 구성되어 있음

    • 커널은 스케쥴링을 담당

      → 보안, 자원관리, 디바이스 인터페이스 추상화 등

  • 터미널과 터미널 에뮬레이터, 셸의 차이점

    • 터미널은 CLI 인터페이스

      → 컴퓨터에 정보를 입력하고 출력하는 소프트웨어 및 하드웨어로써의 장치

    • 터미널 에뮬레이터 ?

      • 그래픽 환경에서 터미널을 묘사
    • 셸 터미널 내부에서 터미널의 제어 접근을 도와주는 프로그램

  • 기본적인 리눅스 명령어

    • 기본은 많이 아는듯

몰랐던 것

프롬포트 의미

스크린샷 2021-09-08 오전 10.00.00.png

  • #(현재 로그인한 사용자가 최고 관리자 계정), 일반 사용자의 경우 $

help 페이지 위 아래로

shift + PgUp | PgDown

  • 일부 주요 폴더들의 용도 및 내용물

    /home: 사용자별 홈 디렉토리들이 있는 곳

    /root: 최고 관리자 계정의 홈 디렉토리

    /mnt: 저장장치(HDD, SSD)가 붙는 위치

    /media: 이동식 미디어(USB 드라이브)가 붙는 위치

    /tmp: 재부팅 시 삭제될 임시 파일들을 저장하는 폴더

    /dev: 컴퓨터에 연결된 하드웨어 및 가상 기기(device)들을 가리키는 파일들

    /proc: 현재 실행 중인 프로세스들을 가리키는 파일들

    /etc: 각종 설정 파일들

    /bin: 실행 가능한 프로그램(binary)들

    /sbin: 시스템 관리용 프로그램들

    /usr: 다중 사용자 모드에서 사용 가능한 파일 및 프로그램들 (root 계정만 있는 단일 사용자 모드에서는 사용 불가)

    /var: 캐시, 로그 등 시스템 구동 간 계속 내용이 바뀌는 파일들

운영체제별 커널

우분투 → 리눅스

윈도우 → Windows NT

macOS → XNU

프로세스 격리

  • 운영체제는 프로세스 컴퓨터의 전체 메모리 어디든지 쓸 수 있도록 하는 것이 아니라 가상 메모리로써 일부만 떼어서 제공해줌
  • 다른 프로세스의 메모리 또는 운영체제 자체가 사용하고 있는 커널 메모리를 훔쳐볼 수 없도록 함
  • 프로세스들이 서로 소통하기 위해서는 별도로 허용된 프로세스 간 통신 (IPC) 기법들을 사용해야함
    • IPC 기법 : PIPE, Named PIPE(FIFO), Meesage Queue, Shared Memory(공유 메모리), Memory Map, Socket

CPU 자원 관리

  • CPU 연산의 경우 코어 단위로 프로세스에 제공
  • 프로세스는 스레드라는 단위로 코어를 하나씩 사용
  • 프로세스가 하나 시작되면 기본적으로 하나의 스레드를 가지고 시작하지만, 개발자는 프로그램이 더 많은 스레드를 사용하도록 설계하여 다중 CPU 코어의 이점 극대화
  • 프로세스는 운영체제가 메모리를 할당하는 작업단위, 스레드는 프로세스가 할당받은 메모리를 활용하는 실행단위

ps

스크린샷 2021-09-08 오전 10.48.41.png

UID: User ID, 프로세스마다 누구의 권한으로 실행되는가

TTY: 프로세스(PID)가 붙어있는 teletype(터미널)

pts/n : n번 가상터미널(pseudo teletype slave)

?: 터미널에 부착되지 않은 프로세스들

시스템 콜

  • 프로세스가 커널에게 요청을 전달하는 기능
  • 커널이 프로그램에 제공하는 인터페이스
  • 각 프로세스는 커널을 통하지 않고서는 파일이나 장치, 또는 다른 프로세스에 간섭할 수 없음

kill: 그 자체로 프로세스를 죽이는 명령어이 아니라, 프로세스에 신호를 보내는 명령어

  • KILL 신호말고 INT(interrupt, ctrl+c), TERM(terminate) 신호도 있음

환경 변수

운영체제가 프로세스 단위로 사용하는 변수

$PATH 의 :

동일한 이름의 프로그램이 여러 디렉토리에 설치되어 있으면, PATH 내 순서 상 앞에 있는 디렉토리의 프로그램을 실행

패키지 관리자

  • APT(Advanced Packaging Tool)
  • 운영체제가 공식적으로 제공
  • 공인 저장소에서 프로그램과 라이브러리(다른 프로그램이 참조하여 사용할 수 있는 코드)
  • 운영체제상: 우분투 apt,snap Centos YUM, Red Hat rpm 등등
  • 프로그래밍 언어상: 파이썬 pip

한 컴퓨터 여러 사용자

개인용 컴퓨터 시대의 운영체제에도 그대로 남아있음.

특히, 유닉스 계열 운영체제들은 개인용 컴퓨터보다 서버용 또는 기타 산업용으로 쓰이는 경우가 잦기에, 다른 운영체제보다 사용자와 권한의 개념을 훨씬 더 자주 마주치게 됨

사용자 계정

보통 우리가 사용하는 사용자 계정은 운영체제를 설치할 때 최초로 생성한 계정

최고 관리자: 윈도우-Administrator, 유닉스계열-root

사용자 그룹

사용자들이 여러 명 있을 떄, 쉽게 묶어서 관리하는 개념

한 사용자가 sudo 명령어를 실행하기 위해서는, 동일한 이름 sudo 라는 이름의 그룹에 속해있어야함

현재와 상위 디렉토리

스크린샷 2021-09-08 오전 11.39.27.png

  • 실제 현재 디렉토리와 상위 디렉토리 나타내는 거였음

chown

그냥 사용하면 디렉토리의 소유자가 변경되고 -R 을 사용하면 디렉토리 내의 모든 파일들에 대한 소유자가 변경됨

디렉토리 권한

실행하기(x)의 경우 프로그램이라면 실제 실행할 수 있다는 것을 나타내지만, 디렉토리의 경우 해당 폴더 안으로 cd로 이동할 수 있는지 여부

ARM

스마트폰 등 모바일 기기에 들어가는 CPU ARM사의 RIS

지원하는 명령어는 더 적지만 전력을 더 적게 소비하는 방향으로 설계

더 이상 칩을 만들지 않고, 설계만 만들어 라이센스를 판매

삼성전자(엑시노스), 애플(A11), 퀄컴(스냅드래곤) 등

클럭

초당 처리 속도 기준

요즘 나오는 CPU는 클럭이 4GHz에서 더 이상 발전하기 보다 동시에 더 많은 스레드를 처리할 수 있도록 코어를 늘리는 방향으로 제조

GPU

  • 그래픽 연산장치

  • CPU 보다 이해할 수 있는 명령어는 훨씬 적지만, 코어 수를 훨씬 늘리는 방법으로 다차원 행렬에 특화

기타 연산장치

  • ASIC (작업에 맞게 직접 설계), FPGA(그때그떄 회로를 직접 프로그래밍해서 사용)

딥러닝과 저장장치

  • GPU를 쓰면 '연산'이 빨라져 딥러닝 모델이 무조건 빨라질 것 같지만 아님
  • 데이터를 읽어오는 데 시간이 너무 많이 소요되고 있다면
    • 저장장치 SSD로 변경
    • 미리 여러 개의 스레드를 사용하여 RAM 메모리에 올려둠

가상화

아마존 - 한대의 물리적인 서버를 여러 개의 가상 서버로 쪼개어 판매

물리적인 서버를 임대하는 것이 아님

하나의 컴퓨터를 쪼개어 여러 대의 컴퓨터가 있는 것처럼 사용하게 하는 기술

호스트: 실제 물리적인 서버, 게스트: 그안에서 돌아가는 가상 서버

종류

가상머신 가상화: 게스트 자체에 운영체제가 돌아감

컨테이너 가상화: 호스트의 운영체제 커널을 공유 (커널의 기능만 공유하고, 프로세스나 자원 철저히 격리하며 간섭 X)

  • 가상화가 무조건 클라우드 컴퓨팅과 함께하는 개념은 아님
    • 아나콘다나 virtualenv는 클라우드 컴퓨팅과 크게 관계가 없지만 가상화의 한 종류

편리한 기능

터미널 에뮬레이터에서 무언가를 복사하거나 붙여넣을 때에는 Ctrl+Shift+CCtrl+Shift+V를 사용해야 합니다.

history 명령에서 나오는 번호를 참고하여 !번호를 실행하면 해당 번호의 명령이 다시 실행됩니다.

Ctrl+ACtrl+E를 통해 명령어의 앞, 뒤로 커서를 이동할 수 있습니다.

clear 명령어 또는 Ctrl+L을 통해 기존에 터미널에 출력되었던 내용을 깨끗이 지울 수 있습니다.

실수로 Ctrl+z를 눌러 프로세스를 중지시켰다면, fg를 통해 다시 재개시킬 수 있습니다.

sudo apt install curl 및 curl parrot.live를 통해 춤추는 앵무새를 볼 수 있습니다.( 클라우드에서는 작동이 안되니 로컬에서 테스트 해보세요 !)

심화 명령어

Aiffel


질문

2-8

코어 수마다 실행할 수 있는 프로세스와 쓰레드의 개수가 정해져있지 않을까?

  • CPU가 n코어 m스레드라고 말하는데, n코어개만큼의 프로세스만 물리적으로 병렬적 실행이 가능한거고 (스케줄링)없이 동시에 실행 가능한 스레드의 개수가 프로세스 개수만큼인데 요즘은 프로세스별로 하나 이상의 스레드를 지원하시도함

2-9

  • 터미널의 번호가 여러개 있고 프로세스에 붙어있다는 개념

2-10

스크린샷 2021-09-08 오전 10.53.53.png

2-11

환경 변수를 운영체제가 프로세스 단위로 사용하나?

→ 탭을 여러개 켜놓고 실행해보니 맞음

스크린샷 2021-09-08 오전 11.02.18.png

  • zsh를 탭단위로 열때마다 CMD가 4개씩 생김 (왜지)

스크린샷 2021-09-08 오전 11.10.09.png

  • export가 현재 환경으로 내보낸다, 그리고 env가 새로운 환경에서 실행한다는 무슨 의미일까?

2-13

  • 모든 것들은 파일로 저장이 되어있는데 내 현재 위치가 어디인지 저장되어있는 파일은 어디에 이쓸까

2-18

셸에도 파이썬처럼 조건문과 연산자들이 있습니다. ||를 써서 이전 명령이 false를 반환한 경우에만 다음 명령을 실행하거나, &&로 이전 명령이 true를 반환한 경우에만 다음 명령을 실행할 수 있습니다.

→ 실험해봄 실제로 그럼