AnbyMata의 해킹 노트

[Linux 기초] EP.3 - 리눅스 기초 지식 본문

[Linux 기초]

[Linux 기초] EP.3 - 리눅스 기초 지식

AnbyMata 2025. 8. 26. 22:53

본격적으로 리눅스 명령어들을 익히기 전에 리눅스에 대해서 조금만 더 알아보고 가봅시다!

 

[1]  Linux (리눅스)란?

 전에 한번 설명했지만, 리눅스는 일종의 운영체제(OS)로 컴퓨터 하드웨어와 프로그램(소프트웨어)을 연결해주는 소프트웨어입니다. 이제 리눅스의 특징들을 알아봅시다.

 

리눅스 특징

- 무료! (꽁짜 너무 좋아~)

- 오픈소스 운영체제 (누구나 수정 및 배포 가능!)

- 다양한 배포판들이 존재함 (오픈소스라서 다양한 버전들이 존재)

- 안정성과 보안성이 뛰어남 -> 서버, 클라우드, 보안, 임베디드(안드로이드 등)에서 많이 사용됨

- GUI 방식인 Windows, 안드로이드와 다르게 CLI 방식임 (굉장히 중요한 부분이니 추가적으로 다뤄봅시다!)

 

 

 

[2]  GUI vs CLI

 우리가 일상에서 사용하는 Windows, macOS, Andriod, iOS 모두 GUI (Graphical User Interface) 방식을 기반으로 동작합니다. 하지만 이제부터 우리가 공부할 리눅스는 이러한 GUI 환경과는 다른, CLI (Command Line Interface) 방식을 기반으로 동작합니다.

 그렇다면 대부분의 사람들은 GUI 방식의 환경을 사용하고 있으니 CLI 방식은 필요없는거 아니냐? 생각할 수 있습니다. 하지만, 서버와 네트워크 장비, 클라우드 등 '단순 사용자용 IT'가 아닌, 'IT 업계의 핵심 인프라 분야'에서는 대부분 CLI 방식을 사용합니다.

 즉, 보안 분야를 잘하기 위해서는 CLI 환경을 이해하고, CLI 기반 시스템을 해킹 및 보호 할 수 있는 능력을 갖추는 것이 필수적입니다.

 

GUI (Graphical User Interface)

Windows 환경

- 정의: 마우스 클릭, 아이콘, 버튼 같은 그래픽 환경을 통해 컴퓨터를 조작하는 방식

- 예시: Windows 탐색기, Andriod 화면, iOS 화면 etc...

- 장점: 

  + 직관적이기 때문에 초보자가 쓰기 편함

  + 시각적 요소로 여러 작업을 동시에 처리하기 쉬움 (멀티태스킹 용이)

- 단점:

  + 시스템 자원 (CPU, 메모리 등)을 더 많이 사용함 = 느리고 비효율적임

  + 자동화나 원격 제어 등의 시스템 관리가 불편함

 

 보충해보자면, 우리가 보통 컴퓨터를 켰을 때 만나는 Windows 같은 운영체제는, 컬러풀하고 아이콘들을 통해 마우스 클릭만으로 간편하게 원하는 프로그램이나 사이트로 이동할 수 있습니다. 이런 환경이 GUI 기반의 환경이라고 생각하면 됩니다.

이런거도 GUI의 특징!

 여러분 모두가 아시다시피 공부를 할 때, 그림이 많을수록 더 직관적으로 이해하기 쉽고 흑백보다는 컬러가 학습하기 편리합니다. (컴퓨터 화면이 흑백이라 생각해보세요. 우웩.)

 하지만, 컴공에는 불변의 진리가 있습니다. 사람에게 편리하고 직관적일수록, 컴퓨터에게는 더 많은 자원을 요구해 속도가 느리고 비효율적입니다. (그래서 비교적 배우기 쉬운 파이썬이 C같은 애보다 느리고, 배울 때 열불나는 어셈블리어는 속도가 훨씬 빠르고 효율적...). 좀더 와닿을 예시를 들어보자면, 텍스트(글)보다는 사진이나 그림이, 또 사진이나 그림보다는 동영상이 파일 용량이 훨신 큽니다.

 결국 화려하고 직관적인 GUI 기반의 환경은 편의성을 얻고 성능(효율성)을 희생했습니다. 하지만, 성능이 중요한 IT 전문가들에게는 서버, 네트워크 장비 같은 'IT 업계의 핵심 인프라 분야'는 CLI 기반의 환경을 주로 사용합니다.

 

 

CLI (Command Line Interface)

kali-linux

- 정의: 텍스트 기반 터미널/콘솔에 명령어를 입력해서 컴퓨터를 조작하는 방식

- 예시: 리눅스 터미널, 윈도우 CMD, macOS 터미널

- 장점:

  + 자원 소모가 적고 가벼움 = 빠르고 효율적임

  + 서버 및 원격 관리 등의 시스템 관리에 효과적임

  + 반복 작업을 자동화할 수 있음

  + GUI 에선 불가능했던 세밀한 제어 가능

- 단점:

  + 명령어를 알아야 사용 가능함 = 초보자용으로는 부적합

  + 오타나 실수가 있을 시 치명적인 문제 발생 가능

 

 조잘조잘 말해보자면, CLI 환경을 보면 굉장히 해커같은 느낌이 납니다 (검은 화면에 흰색 글자들! 간지, 낭만 넘치시자너!). 요새 리눅스 터미널에는 글자에 색을 넣어 가독성을 높여주기도 하지만, 본래 리눅스에는 검은 화면에 흰색 글자만 있는 흑백 화면이였습니다 (색깔 글자를 넣어주신 최소한의 자비에 감사를..). 그리고 CLI 환경에서는 마우스를 거의 사용하지 않습니다 (누를 아이콘도 없고, 어차피 다 텍스트 입력으로 작동해서라..)

 색상도 굉장히 제한적이고, 단순한 텍스트만을 사용하다보니 앞서 말한 진리에 따라, 사람에게는 불편하지만, 컴퓨터에게 적은 자원을 요구하는 빠르고 효율적인 환경을 제공합니다. 덕분에 서버, 네트워크 장비 같은 'IT 업계의 핵심 인프라 분야'의 주류가 되었습니다. (물론 문자로 그림을 표현하는 아스키 아트가 존재하긴 하지만 결국엔 텍스트로 만든 애라 용량 작음).

Windows의 cmd

 꼭 리눅스가 아니더라도 CLI 방식을 볼 수 있습니다. 바로 윈도우의 cmd (명령 프롬프트)! 우리가 가끔씩 컴퓨터에 문제가 생겼을 때, 인터넷에 해결방법을 찾아보면 cmd를 켜서 이상한 코드를 적어넣으라고 알려주는 경우가 있습니다. 그만큼 CLI에서는 더 세밀한 제어가 가능하기 때문에, 특정 문제 해결이나 시스템 관리 작업은 CLI를 통해 이뤄집니다.

 

 

 

[3]  리눅스 명령어 구조

 리눅스 터미널을 여는 순간 우리가 할 수 있는 것은 키보드로 텍스트를 입력하는 것 뿐입니다. 그래서 리눅스에서의 거의 모든 작업은 명령어 입력을 통해 이루어집니다.

 이제부터 우리가 입력할 명령어들이 어떤 구조를 가지고 있는지 살펴봅시다.

 

 기본적으로 리눅스에서 명령어는

명령어 [옵션] [인자]
Command [Option / Flag] [Argument]

의 구조를 가지고 있습니다.

 

1. 명령어 (Command)

- 실행할 기능 자체를 의미합니다

- Example:

  + ls  (목록 보기 = 리스트 '출력') - (출력한다 라고 일단 이해합시다)

  + cd  (이동)

  + cp  (복사)

  + rm  (삭제)

 

2. 옵션 (Option / Flag)

- 명령어의 기본 동작을 수정하거나 확장시킵니다.

- 보통 '-' 또느 '--' 로 시작합니다.

- Example:

  + ls -l  (자세히 출력)

  + ls -a  (숨김파일까지 출력)

  + ls -la  (자세히 숨김파일까지 출력)

 

3. 인자 (Argument)

- 명령어가 적용될 파일/디렉토리/프로세스 등 (지금은 그냥 파일 및 폴더 라고 이해하세요)

- Example:

  + ls /home  (home이라는 폴더에 있는 내용 출력)

 

 비유를 들어 설명해보자면, 

'점프'를 의미하는 'jump'이라는 명령어가 있습니다.

'빠르게'를 의미하는 'fast'와 '한 발로'를 의미하는 'one'이라는 옵션이 있습니다.

'나'를 의미하는 'me'라는 인자가 있습니다.

 

'jump -fast' 는 '빠르게 뛰기'가 될 것이고, 'jump -one' 은 '한 발로 뛰기'가 됩니다.

둘을 합쳐서 'jump -fastone' 은 '빠르게 한 발로 뛰기'가 됩니다.

'jump /me' 는 '내가 뛴다' 가 될 것이고,

옵션까지 넣어서 'jump -fast /me' 는 '내가 빠르게 뛴다' 가 되는 방식입니다.

 

요약하면,

( jump: '뛴다' 라는 명령어 | fast: '빠르게' 라는 옵션 | one: '한 발로' 라는 옵션 | me: '나' 라는 인자 )

( jump -fast: 빠르게 뛰기 | jump -one: 한 발로 뛰기 | jump -fastone: 빠르게 한 발로 뛰기 | jump /me: 내가 뛰기 | jump -fast/me: 내가 빠르게 뛰기 )

 

다듬어서 이런 식으로 이해하면 될 것 같습니다.

- 명령어 (Command) = 무엇을 할지

- 옵션 (Option / Flag) = 어떻게 할지

- 인자 (Argument) = 누구/무엇을 대상으로 할지

 

 

 

EP.3 - 리눅스 기초 지식. END.

 

EP.4 - 리눅스의 경로 탐색. Continue...