[Linux] Linux 기본

Bzeromo·2025년 5월 7일
0

Infra, DevOps, MSA

목록 보기
24/28
post-thumbnail

⚡ Linux 기본


📌 Linux

🔷 오픈 소스 Unix 계열 운영체제의 한 종류로, 리눅스 커널을 기반

🔷 리눅스 커널은 1991년 9월 17일, 리누스 토르발스가 처음 공개

🔷 일반적으로 리눅스 배포판(디스트로) 형태로 제공

🔷 커널과 다양한 시스템 소프트웨어 및 라이브러리(대부분 서드파티 제공)를 포함

🔷 Unix를 모방하여 설계되었으며, 카피레프트 GPL 라이선스 하에 공개

💡 디스트로
다양한 목적에 맞게 커스터마이징된 운영체제

💡 카피레프트
창작물에 대해 누구나 자유롭게 사용, 복제, 수정, 배포할 수 있도록 허용하는 법적, 사회적 장치

🔷 자유 오픈 소스 소프트웨어 협업의 대표적인 사례

🔷 원래 x86 기반 개인용 컴퓨터를 위해 개발되었으나, 이후 그 어떤 운영체제보다 다양한 플랫폼으로 이식되어 PC, 워크스테이션, 메인 프레임, 임베디드 시스템 등 매우 폭넓은 장치에서 사용

🔷 서버 분야에서 리눅스는 지배적인 운영체제이며, 세계에서 가장 빠른 슈퍼컴퓨터 500대 모두 리눅스를 사용


📌 Unix

🔷 컴퓨터 운영체제 역사상 가장 중요한 운영체제

🔷 처음으로 어셈블리가 아니라 C언어라는 고급 프로그래밍 언어로 커널까지 작성

🔷 1969년 AT&T의 벨 연구소에서 개발

🔷 당시 비대화된 멀틱스라는 운영체제에 비해 경량화하고 네트워크 접속을 간편화함

🔷 Unix 구조

🔷 커널(kernel)

  • 유닉스 시스템이 부팅될 때 가장 먼저 읽혀지는 운영체제의 핵심 부분.

  • 보안, 자원 관리, 추상화 등 하드웨어와 관련된 작업을 수행

🔷 쉘(shell)

  • 사용자 인터페이스 제공 - 사용자와 유닉스 시스템의 커널을 연결

  • 사용자가 명령을 입력하면 이를 해석하여 커널이 이해할 수 있는 명령으로 번역

  • 번역한 명령은 커널로 넘기고 커널은 하드웨어를 위한 지시어로 번역

  • 쉘의 종류 : Bourne shell (스티브 본), C shell (버클리대학), Korn shell (데이비드 콘)


    📌 Linux의 역사

🔷 1956년, 반독점 소송으로 AT&T는 컴퓨터 사업에 진출할 수 없었지만, 1984년, AT&T가 지역 전화회사를 분리하면서 컴퓨터 사업 진출 제한에서 벗어나게 됨

  • 이로서, 벨 연구소는 유닉스를 독점 소프트웨어로 판매하기 시작

🔷 자유 소프트웨어와 GNU 프로젝트의 시작

  • 1983년: 리처드 스톨만이 완전한 유닉스 호환 소프트웨어 시스템을 자유free 소프트웨어로 만들기 위해 GNU 프로젝트 시작

  • 1985년: 자유 소프트웨어 재단(FSF) 설립

  • 1990년대 초: 운영체제에 필요한 대부분의 프로그램(라이브러리, 컴파일러, 텍스트 에디터, 셸 등)은 완성되었지만, 디바이스 드라이버, 데몬, 커널(GNU Hurd) 등의 저수준 요소는 완성되지 못함

🔷 리누스 토르발즈와 리눅스 커널 개발

  • 앤드루 S. 타넨바움: 교육용 유닉스 계열 운영체제인 Minix 개발 및 배포

  • 1990년 가을: 헬싱키 대학의 토르발즈, Minix를 통해 유닉스를 처음 접함

  • Minix의 교육용 라이선스 제한에 불만을 느껴 자신의 운영체제 커널 개발 시작

  • 1991년: 유즈넷 뉴스그룹 comp.os.minix에 커널 버전 0.01 발표 → Minix를 대체할 수 있는 시스템 목표

🔷 리눅스 초기와 GNU의 결합

  • 초기 리눅스는 미닉스를 통해 시스템이 가동되었기 때문에 다소 불완전한 운영체제였음

  • 하지만, 자체 커널 개발에 난항을 겪고 있던 GNU 프로젝트가 리눅스 커널에 관심을 가짐

  • 리눅스 커널과 GNU 유틸리티가 결합하면서 비교적 완전한 운영체제로 거듭나게 됨


📌 Unix vs Linux

항목유닉스 (UNIX)리눅스 (Linux)
기원1969년, AT&T 벨 연구소1991년, 리누스 토르발즈
개발자/기관AT&T, IBM, HP 등리누스 토르발즈 + 커뮤니티
소스 코드대부분 비공개 (상용)오픈 소스 (GPL)
라이선스상용 라이선스GNU GPL (자유 소프트웨어)
가격 유료(AIX, HP-UX 등)대부분 무료
사용 범위고급 서버, 메인프레임, 기업 시스템서버, 데스크탑, 모바일, IoT 등\
호환성POSIX 표준 준수POSIX 준수 (대체로 호환)
유지 관리기업 중심 유지보수커뮤니티 + 기업 공동 유지보수
배포판 다양성제한적 (AIX, HP-UX, Solaris 등)매우 다양 (Ubuntu, Fedora, Arch 등)
대표 운영체제AIX (IBM), HP-UX (HP), Solaris (Oracle)Ubuntu, RHEL, Debian, Arch 등
커널 구조모놀리식 또는 마이크로커널모놀리식 커널 (모듈화 지원)
파일 시스템UFS, JFS 등EXT4, Btrfs, XFS 등 다양

📌 대표적인 Linux 배포판

배포판특징용도/대상패키지 형식
Ubuntu사용자 친화적, 데스크탑에 최적화, 커뮤니티 활발리눅스 입문자, 데스크탑, 서버.deb (APT)
Debian안정성 중시, 오픈소스 철학 강조서버, 안정적인 환경.deb (APT)
Fedora최신 기술 빠르게 적용, Red Hat 테스트 배포판개발자, 데스크탑.rpm (DNF)
Red Hat Enterprise Linux (RHEL)기업용 상용 배포판, 안정성, 기술 지원 제공기업 서버, 상용 환경.rpm (YUM/DNF)

📌 리눅스 기본관리

🔷 SSH

  • 네트워크를 통해 다른 컴퓨터에 안전하게 접속하고, 명령어를 실행하거나 파일을 전송할 수 있게 해주는 프로토콜이자 프로그램

  • 텔넷과 달리 데이터를 암호화하여 보안성이 매우 뛰어나, 서버 관리와 원격 접속에 자주 사용

  • 리눅스/맥 터미널에서 기본적으로 제공되는 SSH 명령어 사용

  • 명령어 예시:

ssh -p 포트번호 사용자이름@서버주소

🔷 로그인/로그아웃

  • 유닉스/리눅스 시스템은 여러 사용자가 동시에 시스템을 이용하는 다중 사용자 환경임

  • 따라서 각 사용자가 시스템을 이용하려면 사용자명과 비밀번호를 이용한 인증 과정을 거쳐야 함

  • 사용자가 시스템에 접속하는 것을 로그인, 시스템 접속을 종료하는 것을 로그아웃이라 함

  • 로그아웃을 하려면 exit 또는 logout 을 입력하거나 ctrl+d를 누르면 됨

🔷 ssh 공개키를 이용한 인증

# 공개키 생성
ssh-keygen

💡 솔트키를 추가하여 보안 강화가 가능하다.

  • 이후에 리눅스 서버 .ssh 폴더 내의 authorized_keys에 공개키(.pub)를 넣어서 사용할 수 있다.

  • 또는 ssh-copy-id 사용자이름@서버주소 명령어로 옮겨서 사용 가능하다.

💡 생성한 공개키는 사용자 폴더 내 .ssh 폴더에 존재한다.

💡 powershellssh-copy-id 사용자이름@서버주소 대신 cat ~/.ssh/키파일명 | ssh 사용자이름@서버주소 'cat >> ~./ssh/authorized_keys 로 활용한다.

🔷 쉘(shell)

  • 사용자가 입력한 명령을 해석해 커널에게 전달하거나, 커널의 처리결과를 사용자에게 전달

  • 대부분의 리눅스에서 기본적으로 제공하는 셸은 bash (bourne again shell)임

  • 즉, bsh를 기반으로 ksh와 csh의 장점을 모은 셸임

🔷 리눅스 프롬프트

  • 터미널(콘솔)에서 사용자가 명령어를 입력할 수 있도록 알려주는 신호 또는 문자열
[root@pc00 ~]#

  • root : 로그인 계정명으로 시스템에 접속한 사용자 계정을 표시

  • pc00 : 호스트 이름으로 접속한 시스템의 이름을 의미

  • ~ : 사용자가 현재 위치하고 있는 디렉토리의 경로를 의미

  • #, $ : 프롬프트 기호로 셸에 따라 다르게 표현되며,
    관리자는 #, 일반 사용자는 $로 표시

🔷 쉘 명령어

  • 셸(예: bash)에서 실행할 수 있는 명령어

  • 시스템 프로그램 실행, 파일 관리, 프로세스 제어, 네트워크, 설정 등을 다양하게 다룰 수 있음

command option1 option2 ... optionN
  • 이렇게 한 줄로 입력하는 명령을 흔히 명령줄(command line)이라 함

  • 명령줄에서는 명령어를 입력하고, 그 뒤에 하나 이상의 선택적인 매개변수(또는 인자)를 붙임

  • 이러한 명령줄 옵션(또는 인자)을 사용하면 명령어가 무엇을 하도록 지정할 수 있음

🔷 파일 시스템

  • 데이터(파일과 디렉토리)를 저장, 관리, 접근하는 방식

  • 리눅스는 모든 것을 파일로 간주하는 특징이 있으며,
    하드디스크, 디렉토리, 장치, 심지어 프로세스까지 파일 시스템 아래에 통합되어 관리됨

  • 리눅스의 디렉토리는 루트 디렉토리(/)를 최상위로 하는 계층적 구조(트리 구조)

  • 여러 저장 장치(하드디스크, USB 등)를 트리 구조 어디에나 붙여서(마운트해서) 사용

🔹 리눅스는 다양한 파일 시스템을 지원

🔸 ext4: 현재 가장 많이 쓰이는 표준 리눅스 파일 시스템 (안정적, 빠름)

🔸 ext3, ext2: 이전 버전 (호환성)

🔸 xfs, btrfs: 대용량, 고급 기능 지원

🔸 NTFS, FAT32, exFAT: 윈도우와 파일 공유 시 사용

🔸 swap: 가상 메모리 영역

🔹 모든 것이 파일 - 디렉터리, 장치, 소켓 등도 모두 파일로 접근

🔹 심볼릭 링크 / 하드 링크 - 한 파일을 여러 위치에서 "참조"할 수 있음

🔹 퍼미션(권한) - 파일/폴더마다 읽기, 쓰기, 실행 권한이 있어 보안에 매우 중요

🔹 숨김 파일 - 이름이 .으로 시작하는 파일은 숨김 (예: .bashrc)


📌 리눅스 내 디렉토리

🔹 ls /

  • 최상위 디렉토리 아래로 무엇이 있는지 전부 보여줌

🔹 sudo apt install -y tree

  • 계층적으로 디렉토리들을 보여주기 위한 tree 설치

🔹 tree / -L 1

  • 최상위에서 아래 첫번째 디렉토리까지만 보여주기

디렉토리설명
/루트 디렉토리: 모든 디렉토리와 파일의 시작점(최상위).
/bin기본 명령어 바이너리: 시스템 부팅과 기본 작업에 필요한 실행 파일(명령어) 저장.
/sbin시스템 관리 바이너리: 관리자(root)용 시스템 관리 명령어 저장.
/etc설정 파일: 시스템 전체의 설정 파일 및 서비스 설정 파일 위치.
/sys시스템/커널 정보: 커널, 하드웨어 설정 및 상태 정보를 제공하는 가상 파일 시스템.
/home사용자 폴더: 일반 사용자 계정별 개인 파일과 설정 저장(예: /home/user).
/root루트 계정의 홈: 시스템 관리자(root)의 기본 홈 디렉토리.
/lib, /lib64공유 라이브러리: 실행 파일에 필요한 기본 라이브러리(*.so) 저장.
/usr응용프로그램/공유 데이터: 사용자용 응용 프로그램, 라이브러리, 매뉴얼 등 저장.
/usr/bin추가 명령어: 사용자용 실행 파일(명령어) 위치.
/usr/sbin추가 시스템 관리 명령어: 관리자용 추가 명령어 위치.
/usr/local로컬 설치 파일: 직접 설치한 프로그램, 사용자 정의 소프트웨어 저장.
/var가변 데이터: 로그, 메일, 프린터 스풀, 데이터베이스 등 변하는 데이터 저장.
/tmp임시 파일: 임시로 생성되는 파일 저장, 시스템 재시작 시 대부분 삭제.
/opt추가 패키지: 외부 애플리케이션, 추가 소프트웨어 패키지 설치 디렉토리.
/media이동식 미디어: USB, CD-ROM 등 이동식 저장장치 마운트 위치.
/mnt임시 마운트: 기타 파일시스템을 임시로 마운트할 때 사용하는 위치.

📌 쉘 명령 모음

1. ls

  • 파일과 디렉터리 목록을 보여준다.
ls

🔹 주요 옵션

  • -l : 상세 정보(권한, 소유자, 크기 등)를 함께 출력
ls -l
  • -a : 숨김 파일(\.으로 시작하는 파일)도 표기
ls -a
  • -lh : 사람이 읽기 쉬운 크기 단위(human-readable)
ls -lh
  • 특정 디렉터리 지정
ls /etc

2. cd

  • 디렉터리(폴더)를 이동한다.

🔹 기본 사용법

  • cd 디렉터리이름

  • 홈 디렉터리로 이동

cd ~
  • 상위 디렉터리로 이동
cd ..
  • 바로 이전 디렉터리로 이동
cd -

3. pwd

  • 현재 디렉터리의 절대 경로를 출력한다.

🔹 사용법

pwd
  • 예시 출력
    /home/username/Documents

4. mkdir

  • 새로운 디렉터리(폴더)를 만든다.

🔹 기본 사용법

  • mkdir 새폴더이름

  • 하위 디렉터리까지 한 번에 생성

mkdir -p 상위폴더/하위폴더

5. rmdir

  • 빈 디렉터리를 삭제한다.

🔹 사용법

rmdir 디렉터리이름

비어 있지 않은 폴더는 삭제가 되지 않는다. 단, rm -r을 사용하여 강제 삭제가 가능하다.


6. rm

  • 파일 또는 디렉터리를 삭제합니다.

🔹 사용법

  • 파일 삭제
rm 파일이름
  • 폴더 및 그 안의 내용까지 삭제
rm -r 폴더이름
  • 삭제 전에 확인 메시지 출력
rm -i 파일이름

  • 강제 삭제(오류 무시)
rm -rf 폴더이름

rm -rf는 되돌릴 수 없다. (신중하지 않으면 조진다는 뜻)


7. cp

  • 파일이나 폴더를 복사한다.

🔹 사용법

  • 파일 복사
cp 원본파일 복사본
  • 폴더 전체 복사
cp -r 원본폴더 대상폴더
  • 복사시 덮어쓰기 전에 물어보기
cp -i 파일이름 복사본

8. mv

  • 파일 또는 디렉터리를 이동(또는 이름 변경)한다.

🔹 사용법

  • 파일 이동
mv 파일이름 새폴더/
  • 파일 이름 변경
mv 원래이름 새이름
  • 폴더 이동
mv 폴더이름 새경로/

9. touch

  • 빈 파일을 새로 만든다. 또는 기존 파일의 최종 수정 시간을 업데이트한다.

🔹 사용법

  • 새 파일 만들기
touch 새파일.txt
  • 여러 파일을 한 번에 만들기
touch 파일1 파일2 파일3

10. cat

  • 텍스트 파일의 내용을 터미널에 출력한다.
    (Concatenate의 약어, 여러 파일을 이어 붙여 출력/저장도 가능)

🔹 사용법

  • 파일 내용 출력
cat 파일이름
  • 간단한 편집(변환)
cat > 파일이름
  • 간단한 편집(붙이기)
cat >> 파일이름
  • 여러 파일 합쳐서 보기
cat 파일1 파일2
  • 파일 내용 이어 붙여 새 파일로 만들기
cat 파일1 파일2 > 합친파일

11. more, less

  • 텍스트 파일을 한 화면씩 스크롤하며 볼 수 있다.

💡 많은 양의 파일이나 긴 로그 파일을 볼 때 유용하다.

more

🔹 기본 사용법

more 파일이름
  • 아래로 한 줄
Enter
  • 아래로 한 페이지
Space
  • 중단
q

less

🔹 기본 사용법

less 파일이름
  • 위/아래로 이동
방향키 또는 k, j
  • 검색
/검색어 입력
  • 중단
q

💡 less는 more보다 더 유연(양방향 스크롤, 더 큰 파일 지원)


⭐ 정리 표

명령어설명대표 사용 예시
ls파일/폴더 목록 보기ls -l, ls -a
cd디렉터리 이동cd /home, cd ..
pwd현재 위치 출력pwd
mkdir새 폴더 만들기mkdir test
rmdir빈 폴더 삭제rmdir test
rm파일/폴더 삭제rm file, rm -r dir
cp파일/폴더 복사cp a.txt b.tx
mv파일/폴더 이동/이름 변경mv a.txt newname.txt
touch빈 파일 생성/시간 갱신touch new.txt
cat파일 내용 출력/합치기cat file.txt
more, less파일 한 화면씩 출력(스크롤)more big.txt, less log.txt

📌 그 외 명령어

1. find

  • 파일이나 폴더를 이름, 크기, 생성일, 권한 등 다양한 조건으로 검색하는 명령어

🔷 기본 사용법

find 검색경로 [검색조건] [실행동작]

🔷 주요 예시

# 현재 디렉터리와 하위에서 이름이 test.txt인 파일 찾기
find . -name "test.txt"

# /home 경로 아래에서 이름에 report가 들어가는 모든 파일 찾기
find /home -name "*report*"

# 크기가 100MB 이상인 파일 찾기
find . -size +100M

# 7일 이내 수정된 파일 찾기
find . -mtime -7

# 찾은 파일을 삭제(조심!)
find . -name "*.bak" -delete

# 찾은 파일들에 대해 명령어 실행
find . -name "*.log" -exec rm {} \\;
# (여기서 `{}`는 검색된 파일 이름이 들어가고, `\\;`로 끝냄)

2. locate

  • 파일 데이터베이스를 이용해서 빠르게 파일 이름으로 위치를 검색하는 명령어

🔷 특징

  • 엄청 빠름(실시간 전체 검색이 아니라, 미리 만들어진 인덱스 데이터베이스를 이용)

  • 최신 파일은 sudo updatedb로 데이터베이스를 갱신해야만 검색됨

🔷 기본 사용법

locate 파일명패턴

🔷 예시

# 이름에 config가 들어가는 파일 모두 찾기
locate config

# 데이터베이스 갱신(파일 추가/삭제 후 반영)
sudo updatedb

3. grep

  • 텍스트 파일이나 명령의 출력에서 특정 문자열을 검색하는 명령어

🔷 기본 사용법

grep [옵션] "검색어" 파일이름

🔷 주요 예시

# 파일에서 "error"라는 단어가 포함된 줄 찾기
grep "error" log.txt

# 여러 파일에서 검색
grep "hello" *.txt

# 대소문자 구분 없이 검색
grep -i "linux" file.txt

# 줄 번호 함께 보여주기
grep -n "main" source.c

# 검색 결과 하이라이트 색상 표시
grep --color "keyword" file.txt

# 명령어 결과에서 검색(파이프와 함께 사용)
dmesg | grep usb
profile
Hodie mihi, Cras tibi

0개의 댓글