no image
[면접 대비 기초] 11. 리눅스 디렉토리 개념과 루트 디렉토리
리눅스에서는 윈도우나 맥의 '폴더'라는 개념을 '디렉토리'라고 합니다. 리눅스를 지속적으로 다루다 보면 파일의 수도 많아질 것이고, 이에 따라 디렉토리 관리도 필연적으로 필요해집니다. 이번 포스팅에서는 디렉토리, 파일 관리에 들어가기 전 리눅스 OS를 설치하면 기본적으로 존재하는 디렉토리에 대해 알아보겠습니다. 루트 디렉토리란 리눅스 OS에서 제일 상위에 있는 디렉토리를 뜻합니다. 이 루트 디렉토리에서 현재 위치한 디렉토리에 존재하는 파일과 디렉토리들을 출력하난 'ls' 명령어를 사용하면 다음과 같은 디렉토리들이 존재합니다. 이 구성 요소들 중 중요한 디렉토리들에 대해 알아보겠습니다. bin 사용자 및 관리자가 사용하는 명령어의 실행 파일이 배치돼 있는 디렉토리입니다. 이 디렉토리에는 시스템과 관련된 주..
2023.12.11
no image
[면접 대비 기초] 10. 리눅스 명령줄(Commend-line) 기본 조작 방법
리눅스를 잘 다루기 위해서는 기본적인 조작 방법과 명령어를 숙지해야할 필요가 있습니다. 리눅스에 로그인하게 되면 명령어를 입력할 수 있는 행이 주어지는데 이를 명령줄(커맨드 라인)이라고 합니다. 기본적인 조작 방법이라 다른 리눅스와 크게 다르지는 않겠으나 이 포스팅에서 사용된 리눅스는 'Rocky Linux'입니다. 아래의 gif는 먼저 언급한 순서부터 차례대로 실행했습니다. 커서 이동 방법 좌: ← or Ctrl + b 우: → or Ctrl + f 맨 앞으로 이동: Ctrl + a 맨 뒤로 이동: Ctrl + e 한 단어씩 앞으로 이동: Alt + b 한 단어씩 뒤로 이동: Alt + f 문자 삭제 커서 앞 한 글자 지우기: BackSpace or Ctrl + h 커서 뒤 한 글자 지우기: Delet..
2023.12.10
no image
[면접 대비 기초] 09. 프롬프트와 셸(Shell)의 종류
프롬프트 리눅스에 처음 로그인하게 된다면 다음과 같은 문자열이 보일 겁니다. 이를 프롬프트라고 하며 현재 어떤 사용자로 로그인 돼있는지, 호스트 이름은 무엇인지, 지금 위치한 디렉토리를 알 수 있습니다. 또한 이 뒤의 기호로 슈퍼 사용자(root) 구분이 가능합니다. 이렇게 처음 로그인하면 드디어 명령어를 입력할 수 있는 상태가 됩니다. 로그인과 함께 등장하는 셸을 '로그인 셸'이라고 합니다. 쉽게 비유하자면 '웹 시작 페이지'라고 생각해도 좋을 것 같습니다. 리눅스에서 사용하는 sh 셸이나 bash 셸 등 여러 가지가 존재하지만, 시작 페이지를 지정하듯이 시작할 때 어떤 셸을 사용할지 지정할 수 있습니다. 이를 로그인을 하면 사용하게 되는 셸이라서 '로그인 셸'이라고 이름 붙인 것 같습니다. 현재 자신..
2023.12.09
no image
[면접 대비 기초] 08. 리눅스 셸과 커널
셸과 커널 이 개념을 다루기 전에 리눅스에서 명령어가 어떻게 실행이 되는지 알아보겠습니다. 간단하게 현재의 날짜와 시간을 출력하는 date 명령어를 실행했다고 가정해보겠습니다. 키보드로 date를 입력합니다. date 문자열을 받아들입니다. date 명령어를 찾습니다. 발견한 명령어를 실행합니다. 실행한 결과로 얻은 문자열을 화면에 표시합니다. 이 과정에서 명령어를 입력하는 부분이 "셸"입니다. 그리고 명령어가 입력된 후 해당하는 명령어를 찾아 실행 및 사용자 화면에 출력하는 부분을 "커널"이 담당합니다. 간단하게 이미지로 표현하면 다음과 같다고 볼 수 있습니다. 이처럼 커널을 셸이 감싸고 있는 모습 때문에 Shell(조개 껍질)이라는 이름이 붙었다고도 볼 수 있습니다. 이렇게 셸과 커널은 깊은 연관이 ..
2023.12.08
no image
[면접 대비 기초] 07. CIDR(Classless Inter-Domain Routing)
CIDR(Classless Inter-Domain Routing) 클래스로 IP를 구분했을 때 여러 회사들은 A 클래스를 할당받아 사용했습니다. 하지만 약 1600만개나 되는 IP 주소들을 효율적으로 사용하지 못했으며, 이렇게 부여된 IP는 다른 기관에서 사용하게 할 수도 없었습니다. 이렇게 낭비되는 것을 방지하기 위해 CIDR란 개념이 등장했습니다. 이렇게 네트워크 주소를 구분하기 위한 접두사를 서브넷 마스크(Subnet Mask)라고 합니다. 서브넷 마스크는 CIDR의 중요한 개념으로 IP처럼 32 비트의 크기를 가지고 있으며 2진수 0과 1로 이루어져 있으며 1은 네트워크 주소를, 0은 호스트 주소를 뜻합니다. 이를 우리가 보기 쉽게 10진수로 표현한 것입니다. 예를 들어 11111100이라는 서브..
2023.12.06
no image
[면접 대비 기초] 06. IP 클래스
이전 포스팅에서 IPv4는 네트워크 주소와 호스트 주소로 나뉜다고 설명드렸습니다. 이를 나누는 기준이 고정돼있지 않은 것은 호스트 IP 주소가 얼마나 필요한지에 따라 네트워크 크기를 다르게 할당하기 위함입니다. 이 개념을 클래스(Class)라고 합니다. 클래스(Class) A 클래스는 첫 번째 옥탯은 고정된 네트워크 주소를 갖고 있고 나머지 호스트 주소 번호는 자유롭게 설정이 가능합니다. B는 두 번째 옥탯까지 고정된 네트워크 주소를 갖고 있으며, C는 세 번째 옥탯까지 입니다. 이렇게 설정된 클래스는 다음과 같은 개수의 주소를 가질 수 있습니다. (이러한 구분을 서브넷 마스크로도 표현이 가능합니다. 이는 다음 포스팅에서 다뤄보도록 하겠습니다.) A 클래스: 약 1600만개 B 클래스: 약 6.5만개 C..
2023.12.05
반응형

리눅스에서는 윈도우나 맥의 '폴더'라는 개념을 '디렉토리'라고 합니다. 리눅스를 지속적으로 다루다 보면 파일의 수도 많아질 것이고, 이에 따라 디렉토리 관리도 필연적으로 필요해집니다. 이번 포스팅에서는 디렉토리, 파일 관리에 들어가기 전 리눅스 OS를 설치하면 기본적으로 존재하는 디렉토리에 대해 알아보겠습니다.

 

루트 디렉토리란 리눅스 OS에서 제일 상위에 있는 디렉토리를 뜻합니다. 이 루트 디렉토리에서 현재 위치한 디렉토리에 존재하는 파일과 디렉토리들을 출력하난 'ls' 명령어를 사용하면 다음과 같은 디렉토리들이 존재합니다. 이 구성 요소들 중 중요한 디렉토리들에 대해 알아보겠습니다.

 

  1. bin
    사용자 및 관리자가 사용하는 명령어의 실행 파일이 배치돼 있는 디렉토리입니다. 이 디렉토리에는 시스템과 관련된 주요 명령어들이 자리하고 있습니다.

  2. sbin
    bin과 비슷하게 실행 파일을 포함하는 디렉토리입니다. 하지만 다른 점은 관리자용 명령어가  배치돼 있다는 점입니다.
  3. dev
    디바이스 파일이 배치돼 있는 디렉토리입니다. 디바이스 파일이란 디스크나 키보드 등 하드웨어를 다루기 위한 파일을 뜻합니다.

  4. etc
    리눅스에서 돌아가는 다양한 애플리케이션들과 리눅스 자체 설정 파일이 패치되는 디렉토리입니다.

  5. home
    사용자별로 할당되는 홈 디렉토리가 배치돼 있습니다. 예를 들어 사용자 이름이 user라면 home 디렉토리 안에 user라는 디렉토리가 부여됩니다. 사용자는 홈 디렉토리 안에서 자유롭게 파일이나 디렉토리를 작성하고 작업을 진행할 수 있습니다.

  6. tmp
    임시 파일들이 들어 있는 디렉토리입니다. 애플리케이션 실행 중 임시로 작업 결과를 파일로 보존할 때 보통 사용됩니다. 리눅스 배포판 중에는 이 디렉토리 안의 파일을 일정 주기마다 삭제하도록 설정돼 있기도 함으로 중요 파일은 여기에 보관하면 안 됩니다.
  7. usr
    설치한 애플리케이션의 실행 파일, 문서, 라이브러리 등이 이 디렉토리에 배치됩니다. 이 아래에는 bin,  sbin, etc 등이 포함되 있어 루트 디렉토리와 비슷한 모습을 하고 있습니다.

  8. var
    변화하는(variable) 데이터를 저장하기 위한 디렉토리입니다. 애플리케이션 실행 중 만들어진 데이터나 로그, 메일 등이 저장됩니다.
반응형
반응형

리눅스를 잘 다루기 위해서는 기본적인 조작 방법과 명령어를 숙지해야할 필요가 있습니다. 리눅스에 로그인하게 되면 명령어를 입력할 수 있는 행이 주어지는데 이를 명령줄(커맨드 라인)이라고 합니다. 기본적인 조작 방법이라 다른 리눅스와 크게 다르지는 않겠으나 이 포스팅에서 사용된 리눅스는 'Rocky Linux'입니다. 아래의 gif는 먼저 언급한 순서부터 차례대로 실행했습니다.

 

커서 이동 방법

  • 좌: ← or Ctrl + b
  • 우: → or Ctrl + f

 

  • 맨 앞으로 이동: Ctrl + a
  • 맨 뒤로 이동: Ctrl + e

 

  • 한 단어씩 앞으로 이동: Alt + b
  • 한 단어씩 뒤로 이동: Alt + f

 

문자 삭제

  • 커서 앞 한 글자 지우기: BackSpace or Ctrl + h

 

  • 커서 뒤 한 글자 지우기: Delete or Ctrl + d

 

  • 커서 앞 한 단어씩 지우기: Ctrl + w

 

커서 기준 앞, 뒤 삭제하기와 붙여넣기

  • 커서 뒤쪽 삭제하기: Ctrl + k

 

  • 커서 앞쪽 삭제하기: Ctrl + u

 

  • 삭제된 내용 복구하기: Ctrl + y

삭제된 모든 내용이 복구가 되는 것이 아닌 가장 최근 삭제한 내용이 복구되는 것입니다.

 

 

지속 실행 중인 명령어 정지: Ctrl + C

 

화면 정리: Ctrl + l or Clear 명령어 입력

Ctrl + l (영문 L) 입력
clear 명령어 입력

 

자동 완성

  1. 명령어 자동 완성: 명령어 입력 중 Tab


  2. 완성 가능한 경우가 여럿일 경우 해당 내용 출력: Tab 2번 입력

명령어 이외에도 cd 명령어로 이동할 디렉토리 명 등 선택할 수 있는 사항들을 보여줍니다. 이를 통해 오타를 상당 수 줄일 수 있습니다.

 

사용했던 명령어 확인

  • 명령어 리스트 출력: history 명령어 입력

 

  • 한 단계씩 출력
    1. 이전에 사용한 명령어: ↑ or Ctrl + p
    2. 다음에 사용한 명령어: ↓ or Ctrl + n

 

  • 사용했던 명령어 검색: Ctrl + r

프롬프트가 변경되며 검색 모드로 들어가는 것을 확인할 수 있습니다. 입력을 진행하면 사용했던 명령어를 바탕으로 찾기 시작합니다.

 

반응형
반응형

프롬프트

리눅스에 처음 로그인하게 된다면 다음과 같은 문자열이 보일 겁니다. 이를 프롬프트라고 하며 현재 어떤 사용자로 로그인 돼있는지, 호스트 이름은 무엇인지, 지금 위치한 디렉토리를 알 수 있습니다. 또한 이 뒤의 기호로 슈퍼 사용자(root) 구분이 가능합니다.

RedHat Linux와 유사한 Rocky Linux를 사용했습니다.
root로 로그인하면 맨 뒤 기호가 다른 것을 볼 수 있습니다.

 

 

이렇게 처음 로그인하면 드디어 명령어를 입력할 수 있는 상태가 됩니다. 로그인과 함께 등장하는 셸을 '로그인 셸'이라고 합니다. 쉽게 비유하자면 '웹 시작 페이지'라고 생각해도 좋을 것 같습니다. 리눅스에서 사용하는 sh 셸이나 bash 셸 등 여러 가지가 존재하지만, 시작 페이지를 지정하듯이 시작할 때 어떤 셸을 사용할지 지정할 수 있습니다. 이를 로그인을 하면 사용하게 되는 셸이라서 '로그인 셸'이라고 이름 붙인 것 같습니다.

 

현재 자신이 사용하고 있는 셸을 확인하고자 한다면 'echo $shell'을 입력하면 됩니다.

 

이렇게 직접 입력하고 그 결과를 확인하는 방법을 대화형(인터렉티브) 방식이라고 합니다. 반면 실행하고 싶은 명령어들을 미리 파일에 기록하고 그 파일을 셸에 넘겨주는 방식으로 수행하는 방식도 있는데, 이 파일을 셸 스크립트라고 합니다.

 

셸의 종류

  1.  sh
    AT&T 벨 연구소의 스티븐 본(Steven Bourne)이 만들어 본 셸이라고도 불리는 sh 셸은 상당히 오래전에 개발된 셸입니다. 이는 리눅스뿐만 아니라 다른 여러 운영 체제에서 사용할 수 있지만, 앞서 언급한 것처럼 오래된 셸이라 기능이 적기 때문에 현재는 로그인 셸로는 잘 사용되지 않습니다.

  2. csh
    이 셸도 sh처럼 오래됐으며 C셸이라고도 불립니다. sh보다 대화형 조작이 편리해 인기가 많았지만, 문법이 sh와는 크게 달라 스크립트 작성에는 적합히자 않습니다. 현재는 더 개선된 tcsh가 등장해 잘 사용되지 않습니다.

  3. bash
    sh를 바탕으로 기능이 여럿 추가된 셸입니다. sh와 호환성이 있기 때문에 sh를 대체해 많이 사용되고 있습니다. 또한, 대화형 조작에 필요한 기능을 두루 갖추고 있기 때문에 많은 리눅스에서 기본 로그인 셸로 사용되며 스크립트 작성에도 많이 사용되고 있습니다.

  4. zsh
    bash와 tcsh의 기능에 더해 더욱 다양한 기능이 추가된 셸입니다. 이를 익히기에는 시간이 걸려 초보자들에게는 적합하지 않지만, 다양한 기능이 존재하는 만큼 숙지한다면 작업 효율을 크게 늘릴 수 있습니다.
반응형
반응형

셸과 커널

이 개념을 다루기 전에 리눅스에서 명령어가 어떻게 실행이 되는지 알아보겠습니다. 간단하게 현재의 날짜와 시간을 출력하는 date 명령어를 실행했다고 가정해보겠습니다.

 

  1. 키보드로 date를 입력합니다.
  2. date 문자열을 받아들입니다.
  3. date 명령어를 찾습니다.
  4. 발견한 명령어를 실행합니다.
  5. 실행한 결과로 얻은 문자열을 화면에 표시합니다.

 

이 과정에서 명령어를 입력하는 부분이 "셸"입니다. 그리고 명령어가 입력된 후 해당하는 명령어를 찾아 실행 및 사용자 화면에 출력하는 부분을 "커널"이 담당합니다. 간단하게 이미지로 표현하면 다음과 같다고 볼 수 있습니다.

 

 

 

이처럼 커널을 셸이 감싸고 있는 모습 때문에 Shell(조개 껍질)이라는 이름이 붙었다고도 볼 수 있습니다. 이렇게 셸과 커널은 깊은 연관이 있지만 둘로 나눠 사용하는 이유는 개발 용이성과 사용 편의성 때문입니다. 커널을 굳이 바꾸지 않아도 다른 셸을 탑재해 테스트를 신속하게 진행해볼 수 있고, 역할이 나뉘는 만큼 운영체제가 단순화됨으로 효율성 또한 올라갑니다.

반응형
반응형

CIDR(Classless Inter-Domain Routing)

클래스로 IP를 구분했을 때 여러 회사들은 A 클래스를 할당받아 사용했습니다. 하지만 약 1600만개나 되는 IP 주소들을 효율적으로 사용하지 못했으며, 이렇게 부여된 IP는 다른 기관에서 사용하게 할 수도 없었습니다. 이렇게 낭비되는 것을 방지하기 위해 CIDR란 개념이 등장했습니다.

 

 

이렇게 네트워크 주소를 구분하기 위한 접두사를 서브넷 마스크(Subnet Mask)라고 합니다. 서브넷 마스크는 CIDR의 중요한 개념으로 IP처럼 32 비트의 크기를 가지고 있으며 2진수 0과 1로 이루어져 있으며 1은 네트워크 주소를, 0은 호스트 주소를 뜻합니다. 이를 우리가 보기 쉽게 10진수로 표현한 것입니다.

 

 

예를 들어 11111100이라는 서브넷 마스크가 존재한다면 해당 IP 옥탯의 네트워크 주소와 호스트 주소는 다음과 같이 구분됩니다.

 

 

이 방법으로 첫 번째 IP를 해석해보자면 첫 번째에서 세 번째 옥탯은 전부 네트워크 주소이고 마지막 네 번째 옥탯만이 호스트 주소인 것을 알 수 있습니다. 따라서 이는 아래와 같이 구분지을 수 있습니다.

 

 

서브넷 마스크를 지정해줄 때 규칙은 서브넷 마스크 옥탯의 첫 자리를 1로 시작해 1부분이 연속된 자릿수를 표현해줘야 한다는 것입니다. 예를 들자면 아래와 같습니다.

 

 

첫 번째 IP 예시에서는 간단하게 0과 255로 이루어져 해당 옥탯이 전부 네트워크 IP이거나 호스트 IP 였습니다. 그렇다면 다른 숫자는 어떨까요? 우선 옥탯에는 어떤 숫자가 들어갈 수 있는지 정리해보겠습니다.

 

 

한개의 옥탯을 기준으로 봤을 때 IP 주소는 0~255까지 총 256개의 값을 가질 수 있습니다. 이 256개를 서브넷 마스크 2^(1의 개수)만큼 쪼개서 사용한다고 생각하면 편할 것 같습니다.  즉, 아래와 같이 표현됩니다.

 

 

이렇게 나뉘기 때문에 서브넷 마스크 옥탯이 0 이었을 경우 0~255까지 범위를 가질 수 있었고, 옥탯이 255일 경우 1개의 값으로 고정되었던 것입니다. 그렇다면 옥탯이 128일 경우는 어떨까요?

 

 

총 128개의 IP를 갖게 되는데, 시작하는 지점을 알 수가 없습니다. 이를 표현하기 위한 것이 네트워크 ID 입니다. 네트워크 ID는 네트워크의 제일 첫 번째 IP를 지정하는 규칙이 있습니다. 따라서 네트워크 ID가 100인 옥탯에 서브넷 마스크가 128이라면 100~227까지의 호스트 IP를 가질 수 있는 것입니다. 이러한 이유로 첫 번째 IP는 사용하지 않고 남겨둬야 합니다.

 

이로써 클래스로 구분했을 때 발생했던 IP 부족 문제를 조금 더 효율적으로 분리할 수 있게 됐습니다. 하지만 IP에 서브넷 마스크에 숙지해야할 숫자가 너무  많습니다. 그런데 서브넷은 규칙을 가지고 있다고 언급했습니다. 바로 1이 연속해야한다는 특징입니다. 때문에 간단하게 1의 개수로도 이를 표현할 수가 있었습니다. 이를 CIDR라고 합니다. 즉, 처음의 예시는 아래와 같이 표현할 수 있습니다.

 

 

 

이렇게 IPv4에 대한 기본적인 지식들에 대해 알아봤습니다. 마무리하기 전에 네트워크에서 기본적으로 예약되는 부분은 크게 2가지가 있습니다. 바로 바로 위에서 언급한 네트워크 ID와 브로드캐스트 IP입니다. 이는 각각 맨 첫 번째와 맨 마지막 번째 IP를 예약하게 됨으로 IP의 범위를 지정해 사용할 때 이를 염두해두고 서브넷 마스크를 지정해야 합니다. 브로드캐스트에 대해서는 다음에 다뤄보도록 하겠습니다.

반응형
반응형

이전 포스팅에서 IPv4는 네트워크 주소와 호스트 주소로 나뉜다고 설명드렸습니다. 이를 나누는 기준이 고정돼있지 않은 것은 호스트 IP 주소가 얼마나 필요한지에 따라 네트워크 크기를 다르게 할당하기 위함입니다. 이 개념을 클래스(Class)라고 합니다.

 

클래스(Class)

 

 

 

A 클래스는 첫 번째 옥탯은 고정된 네트워크 주소를 갖고 있고 나머지 호스트 주소 번호는 자유롭게 설정이 가능합니다. B는 두 번째 옥탯까지 고정된 네트워크 주소를 갖고 있으며, C는 세 번째 옥탯까지 입니다. 이렇게 설정된 클래스는 다음과 같은 개수의 주소를 가질 수 있습니다. (이러한 구분을 서브넷 마스크로도 표현이 가능합니다. 이는 다음 포스팅에서 다뤄보도록 하겠습니다.)

 

  • A 클래스: 약 1600만개
  • B 클래스: 약 6.5만개
  • C 클래스: 약 250개

 

클래스 구분

 

 

A 클래스는 맨 앞 옥텟 주소가 0~127 범위입니다. 즉, 2진수로 풀었을 때 맨 앞 자리가 0인 주소가 A 클래스입니다. 하지만 0은 네트워크 ID로 사용되고, 127은 자신을 의미하는 루프백(Loopback) 주소로 사용되므로 제외됩니다. 때문에 실제로 사용가능한 주소는 1.0.0.0 ~ 126.255.255.255 입니다.

 

 

 

B와 C 클래스도 이처럼 나타낼 수 있습니다. B 클래스는 첫 옥탯을 이진수로 나타냈을 때 10 000000 ~ 10 111111까지이며 이는 128~191까지를 나타냅니다. C 클래스는 110 00000 ~ 110 11111로 192~223까지 입니다.

 

이렇게 나눠진 클래스는 첫 옥탯만을 확인해도 클래스를 구분할 수 있습니다.

 

클래스풀, 클래스리스

이렇게 구분된 클래스 기반 IP 주소 체계를 클래스풀(Classful)이라고 부릅니다. IP 주소 체계를 처음 만들었을 때는 클래스 개념을 도입한 것이 확장성이 높고 주소 낭비가 적은 좋은 선택이었습니다. 하지만 인터넷이 상용화되면서 인터넷에 연결되는 호스트 숫자가 폭발적으로 증가헀습니다. 기존 클래스풀 기반 주소 체계는 이를 감당하기 힘들어지기 시작했습니다.

 

뿐만 아니라 A 클래스를 할당 받은 여러 회사에서 실제로 이 클래스의 IP 주소(약 1600만개)를 효율 적으로 사용하지 못하고 낭비 중이라는 사실이 드러났습니다. 그리고 이렇게 낭비되고 있는 주소를 다른 기관이 사용하도록 할 수도 없었습니다. 이러한 문제를 해결하기 위해 클래스 개념 자체를 버린 클래스리스(Classless) 주소 체계가 등장했습니다. 이를 CIDR(Classless Inter-Domain Routing) 기반 주소 체계입니다. 이외에도 NAT와 사설 IP를 함께 사용하는 방법, IPv6 사용하는 방법이 등장했습니다. 이에 따라 자연스럽게 클래스풀 주소 체계는 현재 사용하지 않게 됐습니다.

 

클래스리스 방법에 대해서는 다음 포스팅에서 하나씩 알아보도록 하겠습니다.

반응형