[F-02] 리눅스 운영체제

Seungil Ko·2021년 10월 16일
0

Fundamental

목록 보기
2/11

cd

$ echo hello? : 입력한 내용을 출력합니다.
| hello?
root@wtetysocxvx7e6avqwhctccah-776475db6-h2swf:~# : 클라우드 쉘 (Cloud Shell)

  • @ cloud shell에서는 $이 아닌 root@wtetysocxvx7e6avqwhctccah-776475db6-h2swf:~# 형태로 표시가 됩니다.
  • @ 앞의 root은 현재 로그인한 사용자명입니다.
  • @ 뒤의 wtetysocxvx7e6avqwhctccah-776475db6-h2swf는 컴퓨터의 이름, 호스트명입니다.
  • : 뒤의 ~는 현재 위치입니다.
  • 마지막 #는 현재 로그인한 사용자가 최고 관리자 계정(root)임을 나타내고 일반 사용자임의 경우에는 $로 표시됩니다.

ls

.bashrc, .profile : 셸에 로그인 시 자동으로 불러오는 설정 파일들
Ctrl+Shift+↑/↓ : 한줄씩 위/아래로 스크롤
Shift+PageUp/PageDown : 한 페이지씩 위/아래로 스크롤
ls 옵션

  • -l: 각 파일 및 폴더의 권한, 소유자, 크기, 수정일시 등 자세한 정보를 출력합니다.
  • -h: 파일 크기를 바이트 수 대신 사람이 알아볼 수 있는 단위(1K, 234M, 2G 등)로 표시합니다.
  • -t: 파일 수정시간 순으로 정렬해서 출력합니다. 최신 파일이 위쪽으로 표시됩니다.
  • -r: 정렬 순서를 뒤집어 출력합니다. -rt의 형태로 쓰면 최신 파일이 아래쪽으로 표시되어 유용할 때가 있습니다.

(Tip) ls -alrt가 유용합니다.

cd

  • /home: 사용자별 홈 디렉토리들이 있는 곳
  • /root: 최고 관리자 계정의 홈 디렉토리
  • /mnt: 저장장치(HDD, SSD)가 붙는 위치
  • /media: 이동식 미디어(USB 드라이브)가 붙는 위치
  • /tmp: 재부팅 시 삭제될 임시 파일들을 저장하는 폴더
  • /dev: 컴퓨터에 연결된 하드웨어 및 가상 기기(device)들을 가리키는 파일들
  • /proc: 현재 실행 중인 프로세스들을 가리키는 파일들
  • /etc: 각종 설정 파일들
  • /bin: 실행 가능한 프로그램(binary)들
  • /sbin: 시스템 관리용 프로그램들
  • /usr: 다중 사용자 모드에서 사용 가능한 파일 및 프로그램들 (root 계정만 있는 단일 사용자 모드에서는 사용 불가)
  • /var: 캐시, 로그 등 시스템 구동 간 계속 내용이 바뀌는 파일들

운영체제 일반 개론

운영체제란?

운영체제(Operating System)는 최고관리자(root)의 권한을 위임받아 어플리케이션(Application)들에게 연산 자원을 적절히 분배하여 운영하고, 서로 권한을 침범할 수 없도록 관리하는 역할

아래는 리눅스 계열의 우분투(Ubuntu) 운영체제
그밖에 Windows, Mac OS, iOS, Android, ChrommeOS 등이 있습니다.
OS

커널(Kernel)은 보안, 자원관리, 디바이스 인터페이스 추상화 등의 역할을 수행하며 수많은 어플리케이션(Application)들에게 연산자원을 분배합니다.

커널(Kernel)

운영체제의 내부는 알맹이인 커널(kernel)과 껍데기인 셸(shell)로 이루어져 있습니다.
우분투의 커널은 리눅스, 윈도우의 경우 2000 이후의 버전은 Windows NT라는 커널을 사용하며, 맥 OS의 경우 XNU(XNU is Not Unix)를 사용합니다.

자세한 사항은 나중에 따로 다루겠습니다.

셸(Shell)

  • GUI(Graphical User Interface) : 그래픽 기반
  • CLI(Command Line Interface) : 텍스트 기반

프로세스와 스레드

프로그램: 컴퓨터가 수행할 작업을 기록해놓은 것
프로세스(process): 프로그램이 실제로 작업으로써 수행될 때 운영체제가 이를 관리하는 단위

  • 메모리 관리: 운영체제는 프로세스가 컴퓨터의 전체 메모리 어디든지 쓸 수 있도록 하는 것이 아니라 가상 메모리(virtual memory)로써 일부만 떼어서 제공해줌으로써, 다른 프로세스의 메모리 또는 운영체제 자체가 사용하고 있는 커널 메모리를 훔쳐볼 수 없도록 합니다. 이것을 운영체제의 중요한 보안 기제 중 하나인 프로세스 격리(process isolation)라고 부르며, 때문에 프로세스들이 서로 소통하기 위해서는 별도로 허용된 프로세스 간 통신 (Inter-Process Communication, IPC) 기법들을 사용해야 합니다.

  • CPU 자원 관리: 메모리는 주소로서 프로세스에게 제공되지만, CPU 연산의 경우 코어 단위로 프로세스에 제공됩니다. 프로세스는 스레드(thread)라는 단위로 코어를 하나씩 사용할 수가 있는데, 프로세스가 하나 시작되면 기본적으로 하나의 스레드를 가지고 시작하지만, 개발자는 프로그램이 더 많은 스레드를 사용하도록 설계하여 다중 CPU 코어의 이점을 극대화할 수 있습니다.

프로세스는 운영체제가 메모리를 할당하는 작업단위라면, 스레드는 프로세스가 할당받은 메모리를 활용하는 실행단위입니다.

하나의 프로그램 안에서 여러개의 프로세스를 활용하는 것을 멀티프로세싱(Multiprocessing), 하나의 프로세스 안에서 여러개의 스레드를 활용하는 것을 멀티스레딩(Multithreading)이라고 합니다.

리눅스 기반 운영체제

터미널

우분투에서는 18.04부터 로그인한 사용자의 그래픽 환경을 2번 터미널에 붙여두기 때문에, 우리는 CLI 셸(tty3)에서 무사히 GUI 셸(tty2)으로 귀환할 수 있었습니다.

프로세스 관리와 시스템 콜

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

$ ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 05:10          ?        00:00:00 /bin/sh -c jupyter notebook  --NotebookApp.token=$DEFAULT_JU
root          6      1  0 05:10          ?        00:00:07 /opt/conda/bin/python /opt/conda/bin/jupyter-notebook --Note
root         10      7  0 05:50     pts/0    00:00:00 /bin/bash
root         13      7  0 05:53     pts/1    00:00:00 /bin/bash
root         17      7  0 05:55     pts/2    00:00:00 /bin/bash
root         20      7  0 06:02     pts/3    00:00:00 /bin/bash
root         66      7  0 07:23     pts/4    00:00:00 /bin/bash
root         69     66  0 07:47    pts/4    00:00:00 ps -ef

PID는 process ID 번호, TTY는 해당 프로세스가 붙어있는 터미널

sudo kill -s KILL process_PID: 프로세스 죽이기

시스템 콜(system call): 프로세스가 커널에게 요청을 전달하는 기능

프로그램과 환경변수

셸에서 단어 앞에 $가 붙으면 환경 변수(environment variable)를 의미
export: 셸 변수나 함수를 현재 한경으로 내보냄
$ export PATH=/aiffel:$PATH: PATH환경변수에 디렉토리 경로를 추가해 셸이 특정 프로그램을 실행할 때 참조할 수 있도록 해줍니다.
env: 현재 설정된 환경변수들을 모두 출력합니다.

패키지 관리자

APT(Advanced Packaging Tool): 우분투가 공식적으로 제공하는 패키지 관리자(package manager)

패키지 관리자란?
공인 저장소에서 프로그램과 라이브러리를 패키지 단위로 설치하고 관리할 수 있도록 하는 프로그램

우분투의 APT, Snap이 있고, CentOS의 YUM(Yellowdog Updater Modified), Red Hat 계열의 RPM(Red Hat package Manager) 등 각 리눅스 계열 운영체제는 다양한 기본 패키지 관리자를 제공합니다.
파이썬의 PIP(Python Package Installer) 등 프로그래밍 언어상 제공되는 경우도 있습니다.

htop: CPU 및 메모리 사용량을 시각화하고, 프롯스 별 CPU 사용량을 표시해주는 프로그램
$ sudo apt-get install htop
$ htop: 실행

  • q: 종료

사용자와 권한

chown: 대상 파일의 소유 사용자와 그룹을 변경

  • $ sudo chown [OPTIONS] USER[:GROUP] FILE(s)

chmod: 권한을 변경

셸 심화

  • Ctrl+A, Ctrl+E를 통해 명령어의 앞, 뒤로 커서를 이동할 수 있습니다.
  • clear 명령어 또는 Ctrl+L을 통해 기존에 터미널에 출력되었던 내용을 깨끗이 지울 수 있습니다.
  • #!/bin/bash: 해당 스크립트 파일을 실행할 때 어떤 프로그램을 사용해야 할지 알려줍니다.
    (파이썬도 다음 규칙을 따라 스크립트 파일로 실행 가능 #!/usr/bin/python)
  • 셸에도 조건문과 연산자가 존재
    ||: 이전 명령이 false를 반환한 경우에만 다음 명령을 실행
    &&: 이전 명령이 true를 반환한 경우에만 다음 명령을 실행
    >: 명령어의 결과를 파일에 저장
    >>: 명령어의 결과가 기존 파일 뒤에 추가
$ echo hello > test.txt
$ echo again >> test.txt
cat test.txt
hello
again
  • 입력된 텍스트를 줄 단위로 정렬
$ cat fruits.txt
Orange
Apple
Grape
$ cat fruits.txt | sort
Apple
Graph
Orange

명령어 모음


  • 셸 환경
    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: 프로세스 목록 및 자원 사용량을 시각적으로 표시합니다.

추천 자료


'리눅스/Linux 일반' 카테고리의 글 목록

연습문제

  1. 이름이 --all인 폴더 만들기
    mkdir 1) 2)

  2. titanic.csv에서 남성과 여성이 몇 명인지 세어봅시다.
    titanic.csv 다운로드 받기

$ tail -n ① titanic.csv | cut -d② -f③ || uniq314 female
577 male
  1. titanic.csv에서 성이 Brown인 사람이 몇 명인지 세어봅시다.
    (성이 아닌 나머지 이름에 Brown이 들어가는 경우도 있습니다.)
    $ cat titanic.csv | grep ① | wc ②

정답은 다음 포스트에서 공개합니다.

profile
임베디드와 AI를 공부하고 있습니다 :)

0개의 댓글