학습 로그/c# c++

D+21 [UNIX, Linx] 이해 & 실습

goodjop79 님의 블로그 2026. 5. 6. 10:13

ㅇ 일 자 : 2026년 5월 6일(수)

ㅇ 주요 주제 : 유닉스 / 리눅스 시스템 구조 이해 및 CLI 환경 명령어 실습

1. 유닉스(UNIX) 및 리눅스(Linux) 개요
  • 개발자 과정에서 리눅스를 배우는 결정적인 이유: 전 세계 인프라(AWS, GCP 등 클라우드 환경) 및 백엔드 서버의 90% 이상이 리눅스(우분투 등)로 구동된다. 따라서 커널 위에서 작동하는 프로그램을 만드는 개발자가 되려면, CLI 환경에서 리눅스를 자유자재로 다루고 명령어를 통해 서버를 제어하는 능력이 필수적이다.
  • 유닉스(UNIX)와 리눅스(Linux)는 현대 IT 인프라, 서버, 임베디드 시스템, 그리고 우리가 사용하는 스마트폰(Android, macOS)의 뿌리가 되는 핵심 운영체제이다.
2. 유닉스 (UNIX) : 모든 현대 운영체제의 원형

1969년 미국 AT&T 벨 연구소에서 개발된 유닉스는 "현대 운영체제의 조상", 당시는 혁신적인 특징들을 가지고 있었는데, 이것이  오늘날 리눅스로 그대로 이어졌다.

  • 최초의 C언어 기반 운영체제: 그 전까지는 하드웨어마다 다른 조립용 언어(어셈블리어)로 운영체제를 만들었지만, 유닉스는 컴퓨터 언어인 'C언어'로 재작성 되고 덕분에 컴퓨터 기종이 바뀌어도 코드만 다시 컴파일하면 똑같이 작동하는 높은 이식성을 갖게 되었다.
  • 멀티유저 & 멀티태스킹: 여러 사람이 동시에 접속해서 각자 다른 컴퓨터 작업을 수행할 수 있는 대형 컴퓨터용 구조로 설계됨
  • 유닉스 철학 (Unix Philosophy): "한 가지 일만 잘하는 작고 단순한 프로그램을 만들고, 이들을 서로 연결(|, 파이프)해서 복잡한 일을 해결한다"는 설계
  • 현재의 위상: 주로 대기업이나 금융권에서 고가의 대형 전용 서버(IBM AIX, HP-UX 등)를 구동할 때 상용(유료)으로 사용됨
3. 리눅스 (Linux) : 유닉스를 대체한 오픈소스의 축복

1991년, 핀란드의 대학생이었던 리누스 토르발스(Linus Torvalds)가 고가의 유닉스를 개인 컴퓨터(PC)에서도 무료로 쓰고 싶어서 유닉스를 본떠 만든 커널(운영체제의 핵심)

  • 유닉스계열(Unix-like) 시스템: 유닉스의 소스코드를 한 줄도 쓰지 않고 완전히 새로 만들었지만, 유닉스의 동작 방식과 철학을 그대로 본떠 만들었기 때문에 명령어와 구조가 유닉스와 거의 똑같다.
  • 완전한 오픈소스: 리눅스 재단과 전 세계 천재 개발자들이 소스코드를 공유하며 함께 발전시켰다. 누구나 무료로 가져다 수정하고 배포할 수 있다.
  • 리눅스 배포판: 리눅스의 핵심 알맹이인 '커널' 위에 사용자가 쓰기 편하도록 여러 프로그램과 쉘을 패키지로 묶어 배포함. 우리가 배우는 우분투(Ubuntu)를 비롯해 레드햇(RedHat), 센토스(CentOS), 데비안(Debian) 등이 모두 리눅스 배포판이다.
4. 한눈에 비교하는 유닉스 vs 리눅스
구  분 유닉스 (UNIX) 리눅스 (Linux)
태생 1969년, AT&T 벨 연구소
1991년, 리누스 토르발스
라이선스 상용 소프트웨어 (비싼 비용 지불)
오픈소스 (누구나 무료 사용 가능)
핵심 타겟 대기업의 대형 메인프레임 서버
개인 PC부터 대형 클라우드 서버까지
하드웨어 IBM, HP 등 전용 하드웨어 필요성 높음
조립 PC부터 스마트폰, 서버 등 모든 기기
관계 운영체제의 원조 (Original)
유닉스를 모방해 만든 오픈소스 (Clone)

UNIX vs LINUX : 파일시스템은 이해가 다소 어렵다

5. 현대 개발 환경의 주요 키워드

  • Docker : 앱과 실행 환경을 하나로 묶어 어디서나 동일하게 동작하게 하는 패키징 기술
  • 온프레미스 : 클라우드가 아닌, 기업이 자체적으로 서버를 보유하고 운영하는 방식
  • 클라우드 : AWS, GCP 등 외부 인프라를 빌려 쓰는 방식 (확장성 우수)

    ※ AWS(Amazon Web Services)와 GCP(Google Cloud Platform)는 현대 IT 인프라의 핵심인 퍼블릭 클라우드 서비스,

        두 서비스 모두 서버, 저장소, 네트워크 등을 빌려주는 서비스

  • 바이브코딩 : AI와 대화하며 코드를 생성, 수정, 리팩토링하는 현대적 개발 방식

6. 리눅스 서버 운영 및 실습 환경

  • 서버 운용 전략: 안정성을 위해 구형 버전을 활용하기도 하며, '기본+백업+시기별 저장'의 2+1 서버 체계를 권장.
  • 가상화 활용: 윈도우 기반에서 가상머신(VM)을 통해 리눅스 환경 구축 가능.
  • 네트워크 확인: 터미널에서 ip addr 명령어로 내부 IP(예: 19x.18x.x.x) 확인.
  • 패키지 관리 (APT): sudo apt update, install, upgrade를 통해 소프트웨어 관리.
  • 시스템 재시작: 서버 환경에서는 전원 버튼 대신 sudo reboot 또는 shutdown 명령어 사용.

7. 유닉스/리눅스 핵심 명령어 정리 (CLI)

  가. 파일 및 디렉토리 관리

  • ls -al: 숨김 파일을 포함한 목록을 상세 정보(-l)와 함께 표시.
  • cd [경로]: 디렉토리 이동 (cd ..은 상위 디렉토리로 이동).
  • pwd: 현재 작업 중인 절대 경로 출력.
  • mkdir: 새 디렉토리 생성.
  • rm -r: 파일 또는 디렉토리(내부 포함) 삭제.
  • cp / mv: 파일 복사 및 이동(이름 변경 포함).
  • touch: 빈 파일 생성 또는 타임스탬프 업데이트.

나. 내용 확인 및 시스템 제어

  • cat / more: 파일 내용 출력 및 페이지 단위 보기.
  • grep: 파일 내 특정 문자열 검색.
  • tree / -L 4: 디렉토리 구조를 트리 형태로 시각화 (4단계 레벨까지).
  • ps -ef / top: 실행 중인 프로세스 확인 및 실시간 리소스 모니터링.
  • chmod / chown: 파일 권한 및 소유자 변경.

다. 주요 단축키 및 기타

  • Tab: 파일/디렉토리 명 자동 완성 (오타 방지 및 속도 향상).
  • Ctrl + C: 실행 중인 명령 강제 종료.
  • man [명령어]: 명령어의 상세 매뉴얼 확인.

💻 유닉스 기본 명령어 실습 

1.실습 공간 만들고 이동하기 : mkdir, cd, pwd.

새로운 프로젝트 폴더를 만들고 그 안으로 이동하여 현재 위치를 확인한다 --> 화면에 /home/유저명/test_project 형태의 절대 경로

<>코드

mkdir test_project

cd test_project

pwd

 

2.빈 파일 생성 및 내용 채우기 : touch, cat, echo.

개발 언어 파일(파이썬 코드 예시)을 만들고 텍스트를 입력 --> cat 명령어를 입력했을 때 파일 안의 코드 내용이 화면에 출력됨

 

3.파일 상세 목록 및 숨김 파일 확인 : ls -al.

현재 폴더에 있는 파일들을 상세하게 조회 --> 맨 왼쪽에 권한 정보(-rw-r--r--), 숨김 파일인 . (현재폴더)와. (상위폴더)가 나옴

<>코드

ls -al

 

4.백업 폴더 만들고 파일 복사/이동하기 : mkdir, cp, mv.

백업 폴더를 만들어 파일을 관리 ---> main.py service.py로 이름이 바뀌었고, backup 폴더 안에 복사본이 생겼는지 확인

<>코드

mkdir backup

cp main.py backup/main_bak.py

mv main.py service.py

ls -l

 

5.권한 변경 및 실습 정리:chmod, rm -r.

파일의 실행 권한을 변경해 보고, 실습이 끝난 폴더를 안전하게 삭제 --> chmod +x 이후 파일 색상이 변하거나 권한에 x(실행권한)가 추가되었는지 확인한 뒤, 상위 폴더로 이동(cd ..)하여 실습 폴더 삭제

<>코드

chmod +x service.py

ls -l service.py

cd ..

rm -r vibe_project

 

💡 실습 팁: 명령어를 입력할 때 파일 이름의 앞 글자만 쓰고 Tab 키를 누르면 자동 완성됨

 (예: cat se 까지 치고 Tab -> cat service.py)


『이것이 우분투 리눅스다』

1. 개발 환경으로서의 리눅스 vs 윈도우

1.1. 윈도우 환경의 한계

  • 사용자 편의성 중심: 일반 사용자 편의 기능을 우선시하여 개발에 불필요한 백그라운드 프로그램과 오버헤드(지연)가 존재
  • 비용 부담: 기업 환경에서 정품 도입 시 라이선스 비용 부담이 크다.

1.2. 리눅스 환경의 효율성

  • 서버 환경과의 일치: 실제 서비스가 구동되는 운영 환경(Production)과 개발 환경을 일치시켜 배포 시 오류를 최소화
  • 비용 절감 및 경량화: 라이선스 비용이 없고 시스템 자원을 최소한으로 사용하여 개발 효율을 극대화
  • 버전 선택 기준: 무조건 최신 버전보다는 시스템의 안정화 검증 및 인프라 비용 문제를 고려하여 특정 (구형) 버전을 선택해 개발하는 것이 실무 관행

2. 실무 인프라 및 실습 환경 구축

2.1. 인프라 운영: 2+1 서버 체계

실무에서는 서비스의 연속성과 데이터 보호를 위해 최소 3대 분량의 서버 역할을 구성한다

  • 기본 서버 (Main): 실제 서비스를 제공하는 메인 운영 서버.
  • 정기/수시 백업 서버 (Backup): 데이터 유실을 방지하기 위해 실시간 또는 주기적으로 백업하는 서버.
  • 시기별 저장 서버 (Archive): 과거 특정 시점의 데이터나 로그를 장기 보관하는 서버.

2.2. 실습 환경 구축 형태

  • 개인 컴퓨터 설치: 디스크 파티션을 분할하여 윈도우와 리눅스를 동시에 사용하는 멀티 부팅 환경 구성.
  • 가상화 환경 구축: 윈도우(호스트 OS) 위에서 가상머신 소프트웨어를 이용하여 리눅스(게스트 OS) 환경을 설정하는 방식.
  • 파일 전송 팁: 호스트와 게스트 간에 대용량 파일을 전송할 때, 폴더를 가상 이미지 파일(.iso)로 변환하여 게스트 OS에 마운트(연결)하는 방식을 활용

3. 리눅스/오픈소스 생태계와 버전에 대한 이해

3.1. 유닉스(UNIX)와 리눅스(Linux)

  • 유닉스: 대기업에서 상용 목적으로 비싼 비용을 지불하고 사용하는 고성능 운영체제
  • 리눅스: 대기업 전유물이던 유닉스를 대체하기 위해 리눅스 재단과 전 세계 핵심 개발자들이 참여하여 만든 오픈소스 운영체제 (우분투는 22.04 LTS, 현재 많이 쓰이는 24.04 LTS를 거쳐 향후 버전까지 지속적으로 진화 중)

3.2. 오픈소스 라이선스의 권리와 의무

  • 권리: 소스 코드를 자유롭게 수정, 사용, 배포할 수 있는 권리를 가짐
  • 의무: 리눅스 기반으로 핵심 기능을 개발하여 배포할 경우, 소스 코드를 공개해야 하는 의무가 따름. 이를 준수해야 추후 저작권 분쟁을 예방할 수 있다.

3.3. 커널(Kernel) 버전 숫자의 의미

  • 리눅스 커널 버전(예: 6.6.30)과 우분투 버전(예: 24.04)의 표기법은 각기 다른 의미를 담고 있다.
  • $$\text{우분투 버전: } \mathbf{24.04} \rightarrow \text{2024년 4월 출시}$$
  • $$\text{커널 버전: } \mathbf{6.6.30} \rightarrow \mathbf{6}\text{(주 버전, Major)} \,.\, \mathbf{6}\text{(부 버전, Minor)} \,.\, \mathbf{30}\text{(패치/수정 횟수)}$$

4. 실무 핵심 명령어 및 도구 다루기

4.1. 네트워크 확인 및 시스템 제어

  • 터미널 열기 단축키: Ctrl + Alt + T
  • IP 주소 확인: ip addr (내부 사설 네트워크 기기는 대개 19x.18x.x.x 형태로 설정됨)
  • 시스템 리부트: 서버는 개인 PC처럼 전원 버튼을 함부로 누를 수 없으므로 안전하게 재시작하는 명령어가 중요

<>명령어

sudo reboot      # 시스템 안전 재시작

sudo shutdown -h now  # 시스템 즉시 종료

 4.2. 디렉토리 구조 시각화 (`tree`)

① 리눅스의 계층적 트리 구조 파일 시스템을 직관적으로 확인하는 명령어

    설치 방법 (APT 또는 Snap 중 선택)

    <>명령어

    sudo apt install tree     # APT 패키지 매니저로 설치

    sudo snap install tree    # Snap 스토어를 통해 설치

    snap info tree            # 설치 가능한 추가 버전 정보 확인

 

② 실무 활용 명령어

     tree / -L 4 | less

   > 명령어 해설 : 루트(`/`) 디렉토리부터 하위 4단계(`-L 4`)까지만 구조를 보여주되, 내용이 너무 길어 화면을 넘어가지 않도록 페이지 단위 출력 도구(`| less`)로 연결한 조합, 이전 프롬프트 화면으로 나가려면 소문자 `q`를 입력

 

③ 우분투 패키지 관리 (`APT`)

우분투에서 프로그램을 설치·관리할 때 사용하는 핵심 도구로, 작업에는 **관리자 권한(`sudo`)**이 필수

<>명령어

sudo apt update            # 1. 최신 패키지 목록 갱신 (설치 전 필수)

sudo apt install [명령어] # 2. 원하는 프로그램 설치

sudo apt upgrade         # 3. 설치된 패키지들을 최신 버전으로 일괄 업그레이드


어떤 것을 선택해야 할까?
  • 취업/커리어가 목표라면: AWS를 먼저 배우는 것이 유리하다. 대부분의 기업이 AWS를 기본으로 사용하기 때문임
  • 데이터 사이언스/AI 개발이 목표라면: GCP의 빅쿼리(BigQuery)나 AI 도구들을 경험해보는 것이 큰 강점이 됨
  • 실무 현장에서는: 하나의 클라우드만 쓰기보다, 핵심 인프라는 AWS에 두고 데이터 분석만 GCP에서 하는 멀티 클라우드(Multi-cloud) 전략도 많이 사용함

 

ㅇ 학습 후기

수업간 이해가 어려웠던 부분을 찾아보고, 다시한번 AI 활용도 해보면서 용어들과 의미를 이해하려고 하였다.   유닉스, 리눅스, CLI 환경이 서버 관리 및 자동화에 필수적임을 확인하였다.  특히, 리눅스 기반 개발은 오픈소스 라이선스에 대한 이해가 수반되어야 하며, 안정적인 서버 운영을 위해 명령어 기반의 제어 능력이 핵심임을 이해하였다. 용어들이 낯설고 어렵지만 "도전은 계속된다".

 

'학습 로그 > c# c++' 카테고리의 다른 글

D+21 [Unix] 명령어 실습 및 예습  (0) 2026.05.06
D+20 [GUI, C언어] 이해 및 개인학습  (0) 2026.05.06