[사전 스터디 Week 4] Linux & Terminal

Gaeun·2022년 11월 30일
0

wecode 사전 스터디

목록 보기
14/14
post-custom-banner

사전 스터디 4주차에 진행된 멘토 경훈님의 Linux & Terminal 세션 후 배운 것들과 실습한 내용들을 정리하고자 한다.

1. 운영체제(OS)

1-1. 운영체제란?

운영체제(Operating System)는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있게 관리 해주는 소프트웨어 입니다.

운영체제는 응용 프로그램이나 사용자에게 컴퓨터의 자원을 사용할 수 있는 인터페이스를 제공하고 그 결과를 돌려줍니다. 그리고 응용 프로그램이나 사용자에게 모든 컴푸터의 자원을 숨기고 정해진 방법으로만 컴퓨터의 자원을 사용할 수 있도록 제한 합니다. 즉, 사용자는 운영체제가 제공하는 인터페이스를 통해서만 컴퓨터의 자원을 접근할 수 있고, 이를 통해 운영체제는 컴퓨터의 자원을 보호하고 효율적으로 관리할 수 있습니다.

즉, 사용자가 컴퓨터를 쉽게 다룰 수 있게 해주는 인터페이스로서, 하드웨어와 소프트웨어를 관리하는 스프트웨어 전체라고 할 수 있다. 또한, Kernel(커널)이 포함된 패키지를 운영체제라고 할 수 있다.

1-1-1. 운영체제의 역할

  • 자원 관리
  • 자원 보호
  • 하드웨어 인터페이스 제공
  • 사용자 인터페이스 제공

1-1-2. 운영체제의 목표

  • 효율성
  • 안정성
  • 확장성
  • 편리성

운영체제의 대표적인 종류는 안드로이드(리눅스 계열), iOS(BSD 계열), 윈도우, macOS, 리눅스, 우분투, 레드햇 등이 있다.

1-2. Kernel & Shell

1-2-1. Kernel

응용 프로그램이 요청한 처리를 하드웨어에 나누어 처리를 요구하며, 시스템 호출 수행, 메모리 제어 등 운영체제에서는 없어서는 안되는 요소이다.

운영체제는 크게 핵심 기능들이 모여 있는 커널(Kernel)과 사용자 프로그램에 인접하여 커널에 명령을 전달하고 실행 결과를 사용자 응용 프로그램에 돌려주는 인터페이스로 구성되어 있다.

커널이 주로 하는 일은 프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 관리, 프로세스 간에 통신 관리등이 있다.

  • 프로세스 관리: 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공
  • 메모리 관리: 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상 공간을 제공
  • 파일 시스템 관리: 데이터를 저장하고 접근할 수 있는 인터페이스 제공
  • 입출력 관리: 필요한 입력과 출력 서비스를 제공
  • 프로세스 간 통신 관리: 공동 작업을 위한 각 프로세스 간 통신 환경을 지원

1-2-2. Shell

화면에 사용자가 볼 수 있는 요소. 사용자의 지시를 해석하여 커널에게 전달하여 주는 역할을 맡는다.

쉘(Shell)은 사용자의 응용 프로그램과 커널 사이에 위치하여 응용프로그램의 명령어와 커널이 대화를 하도록 만들어주는 명령어 해석기이다.

사용자가 명령어를 입력하게 되면 컴퓨터 내부에서는 쉘이 이를 받아들이고 명령어를 해석하여 커널이 하드웨어를 조작하게 한다.

쉘은 크게 Windows와 같은 GUI(Graphical User Interface)와 Linux에서 사용되는 CLI(Command Line Interface)가 있다.


(출처: https://sciencerack.com/difference-between-gui-and-cli/)

Microsoft Windows는 explorer.exe가 셸 프로그램이며, macOS에선 Finder가 그 역할을 한다.

2. Linux

Linux는 1991년 Linus Torvals(라이너스 토발즈)가 개발한 운영체제로, 시스템을 운영하는데 가장 널리 사용되는 운영체제이다. Windows 시스템이나 application이 아닌 이상 일반적으로 시스템 서버는 리눅스 기반으로 운영되고 있다. 즉, 개발자는 시스템을 실행하고 관리하기 위해 리눅스에 대해 잘 알아야한다.

2-1. FHS(Filesystem Hierarchy Standard)

Linux의 파일 구조는 tree 형태로 되어있다. FHS의 가장 위에는 / 디렉토리가 있고, 이를 Root directory라고 한다. directory는 윈도우의 폴더(folder)와 동일한 개념이다.

시작점인 root 디렉토리 안에 여러 하위 directory들이 있고, 각 하위 directory 안에 또 다른 하위 directory들이 있는 식으로 구성되어 있다. 각 directory들은 slash(/)로 구분한다.

2-1-1. root(/)

  • 최상위 경로를 의미
  • / 기호로 접근

2.1.2. /home(~)

  • 유저의 공간
  • ~ 기호로 접근
  • 윈도우의 C드라이브/Users/사용자명과 비슷한 역할
  • 가장 빈번하게 사용되는 경로
  • Home directory 이외의 다른 곳들은 주로 system directory라고 하는데 리눅스의 운영과 관리에 관련한 파일들이 존재하는 디렉토리를 의미한다.

2.1.3. /bin & /sbin

  • Binary의 약자로 OS의 최소한의 구동을 위해 필요한 프로그램이 들어있는 directory
  • cat, chmod, chown, cp, date, echo, kill, ln, ls, mkdir, etx 와 같은 기초적인 프로그램들이 포함
  • 윈도우의 C드라이브/windows/system32 폴더와 비슷한 역할
  • sbin directory는 bin과 유사하지만 오직 root 유저 전용 프로그램을 포함

2-2. PATH

절대 경로

  • Absolute path는 이름 그대로 절대적 경로이다.
  • 최상위 디렉토리 (/)부터 시작해서 목표 디렉토리까지 가는 경로를 전부 기술하는 방식이다.
  • ex. /home/G/bin

상대 경로

  • 현재 자신이 있는 위치를 기준으로 나타내는 경로 입니다.
  • 상대 경로를 이용할 때 중요한 2가지 심볼이 있다.
    • . : 현재 경로 (현재 자신이 있는 위치)
    • .. : 상위 경로 (이전 디렉토리)

2-3. PATH 환경 변수

환경 변수에서 환경은 현재 돌아가고 있는 shell을 의미하고 변수는 말 그대로 variable를 의미한다. 그럼으로 환경 변수란 shell의 어떠한 설정 값을 가지고 있는 변수를 의미합니다. 그리고 이러한 환경 변수들은 shell이 돌아가는 동안 계속 존재하며 사용됩니다. 환경 변수는 env 명령어를 통해 확인 할 수 있습니다.

env 명령어로 linux의 환경 변수 확인

PATH 환경 변수

PATH 환경 변수는 명령어들을 찾을 수 있는 경로들을 저장해놓은 환경 변수이다. 운영체제가 어떤 프로세스를 실행시킬 때, 그 경로를 찾는데 이용되는 변수라고 생각하면 된다.

사용자가 경로 없이도 명령어를 실행시킬 수 있는 이유는 바로 PATH 환경 변수 때문이다. 명령어를 사용할 때 만일 경로가 지정되지 않으면 shell이 PATH 환경 변수에 저장되어 있는 경로들을 하나하나 보면서 실행하고자 하는 프로그램이 위치해있는지 찾는다. 그리고 찾으면 해당 명령어를 실행시켜 준다.

  • PATH에는 터미널에서 사용하는 명령어들의 경로가 저장되어 있다.
  • 여러 경로를 저장하기 위해 각 경로는 :로 구분한다.

2-4. Configs

  • 리눅스에서는 필요한 설정(config)들을 파일을 통해서 적용한다.
  • 대표적인 설정 파일로는 shell 설정 파일이 있다. (ex. .bashrc, .zshrc)
  • Shell 설정 파일을 비롯한 많은 설정 파일들이 대부분 유저의 home(~) 디렉토리에 존재한다.
  • 설정 파일은 주로 . 으로 시작하고, 해당 파일 및 디렉토리는 숨김 파일로 간주(dot file)한다.
  • 숨김 파일은 lsa 옵션을(all) 주어야지만 볼 수 있다.

3. Linux Command

cd (change directory)

  • 경로 이동 (폴더 이동)
  • 절대 경로와 상대 경로로 이동 가능하다.

ls (list segments)

  • 디렉토리 목록 확인
  • 현재 경로 내 파일 목록을 출력한다.

pwd (print working directory)

  • 현재 작업중인 디렉토리 정보 출력

mkdir (make directory)

  • 디렉토리 생성
  • p 옵션을 주면 하위 디렉토리까지 한 번에 생성 가능

rmdir (remove directory)

  • 디렉토리 제거

rm (remove)

  • 파일 / 디렉토리 제거
  • 디렉토리를 삭제할때는 r 옵션을 주어야 한다.
  • f 옵션을 주면 사용자에게 삭제 여부를 묻지 않고 바로 삭제한다.
  • 디렉토리를 삭제할 때에는 하위 디렉토리까지 모두 삭제되므로 유의하여야 한다.

cp (copy)

  • 파일 / 디렉토리 복사
  • 디렉토리를 복사할때는 -r 옵션을 주어야함

mv (move)

  • 파일 / 디렉토리 이동
  • 이동할 때에도 사용하지만 이름을 변경하는 용도로 사용하기도 한다.
  • cp와는 달리 디렉토리를 이동할 때도 별다른 옵션이 필요하지 않다.

cat (concatenate)

  • 터미널에 파일 내용 출력
  • 파일 여러개를 합쳐 하나의 파일을 만들 때에도 사용
  • 기존 한 파일의 내용을 다른 파일에 덧붙일 수도 있다.
  • 새로운 파일을 만들 떄에도 사용된다.

touch (touch)

  • 파일 생성 및 날짜 정보 변경
  • 파일이나 디렉토리의 최근 업데이트 일자를 현재 시간으로 변경한다.
  • 최근 업데이트 일자는 ls -l 명령을 통해 확인 가능
  • 파일이나 디렉토리가 존재하지 않으면 빈 파일을 만든다.

chmod (change mode)

  • 파일 / 디렉토리 권한 설정

4. Assignment

  • Task 1: 터미널에서 현재 경로 확인 후 Desktop(바탕화면)으로 이동
pwd
ls
cd Desktop
ls


(개인 파일들 다 가리다가 귀찮아서 덜 가린...)

  • Task 2 : 폴더 생성 후 폴더 내부에 readme.md, move 디렉토리 생성
mkdir wecode # 폴더 생성
ls # 폴더 생성 확인
cd wecode # 폴더 이동
touch readme.md # readme.md 생성
ls # 파일 생성 확인
mkdir move #폴더 생성
ls # 폴더 생성 확인

  • Task 3 : vi 에디터로 내용 작성 후 저장
vi readme.md
i #insert -> 입력 모드 전환
내용 입력 후 ESC
:wq #저장 후 종료

  • Task 4 : README.md 복사 후, 복사 된 파일 move 디렉토리로 이동
cp readme.md readme2.md
ls
mv readme2.md ./move
cd move
ls

cp (원본 파일) (대상 파일)
mv (이동할 파일) (경로)

  • Task 5 : move 폴더 및 파일 삭제
cd ..
rm -rf move
ls

rm -r : Recursively remove a directory and all its subdirectories
rm -rf : Forcibly remove a directory, without prompting for confirmation or showing error messages

profile
🌱 새싹 개발자의 고군분투 코딩 일기
post-custom-banner

0개의 댓글