Linux 기초 정리 — Day 11 ~ Day 12


Day 11 — Linux 기본 구조와 파일 시스템

1. Linux의 특징

Linux는 서버 환경에서 널리 사용되는 운영체제로, 다음과 같은 특징을 가진다.

  • 다중 사용자(Multi User): 여러 사용자가 하나의 시스템에 동시에 접속하여 사용할 수 있다.
  • 다중 작업(Multi Tasking): 하나의 시스템에서 여러 프로그램을 동시에 실행할 수 있다.
  • 계층적 파일 시스템: 파일과 디렉터리를 트리 형태의 구조로 관리한다.

Linux의 파일 시스템은 /를 최상위 디렉터리로 사용한다.

/
├── home
├── etc
├── var
├── usr
└── tmp

모든 파일과 디렉터리는 / 아래의 계층적인 구조에 존재한다.

2. x86과 ARM Architecture

Linux는 다양한 CPU Architecture에서 동작할 수 있다.

구분x86ARM
명령어비교적 복잡한 명령어 세트비교적 단순한 명령어 세트
특징높은 성능과 처리 능력높은 전력 효율
전력 소비상대적으로 높음상대적으로 낮음
활용PC, ServerMobile, Embedded, Server

운영체제를 설치하거나 Binary를 실행할 때도 현재 시스템의 Architecture가 무엇인지 확인해야 한다.

3. Kernel

Kernel은 운영체제의 핵심 부분으로 Hardware와 Application 사이에서 System Resource를 관리한다.

주요 역할은 다음과 같다.

  • 파일 시스템 관리
  • Hardware Device 관리
  • CPU 제어
  • Memory 관리
  • Process 관리
Application
    ↓
Kernel
    ↓
Hardware

Application은 Kernel을 통해 CPU, Memory, Disk 등의 Resource를 사용한다.

4. 기본 Linux 명령어

운영체제 정보를 확인할 때는 uname을 사용한다.

uname

File과 Directory 목록을 확인할 때는 ls를 사용한다.

ls -F

-F Option은 File 종류에 따라 이름 뒤에 기호를 붙인다.

  • / : Directory
  • * : 실행 File
  • @ : Symbolic Link

현재 Directory와 하위 Directory를 재귀적으로 확인하려면 다음과 같이 사용한다.

ls -R

상세 정보까지 함께 확인하려면:

ls -lR

Directory 내부의 내용이 아니라 Directory 자체의 Permission이나 Owner를 확인하려면 -d Option을 사용한다.

ls -ld directory

5. 파일 내용 확인

파일 내용을 페이지 단위로 확인할 때 more와 less를 사용할 수 있다.

more

more file.txt
  • 아래 방향으로 내용을 확인
  • 파일 내용을 순차적으로 읽음
  • 진행률 확인 가능

less

less file.txt
  • 위·아래 양방향 이동 가능
  • 필요한 부분만 읽어 대용량 File 확인에 유리
  • /를 이용한 문자열 검색 가능
/keyword

특히 Log File처럼 내용이 많은 파일을 확인할 때 유용하다.

6. wc

wc는 파일의 Line, Word, Byte 등의 개수를 확인한다.

Option의미
-lLine 수
-wWord 수
-cByte 수
-mCharacter 수
-L가장 긴 Line의 길이

예를 들어 파일이 몇 줄인지 확인하려면:

wc -l file.txt

7. 파일과 디렉터리 관리

빈 파일을 생성할 때는 touch를 사용한다.

touch test.txt

Directory를 생성할 때는 mkdir을 사용한다.

mkdir test

상위 Directory가 없을 경우 함께 생성하려면:

mkdir -p test/a/b

File을 복사할 때는 cp를 사용한다.

cp source.txt destination.txt

Directory 전체를 복사하려면 -r Option이 필요하다.

cp -r source_dir destination_dir

같은 이름의 File이 존재하는 경우 덮어쓸지 확인하려면:

cp -i source.txt destination.txt

mv는 File을 이동하거나 이름을 변경할 때 사용한다.

mv old.txt new.txt

File 삭제 시 삭제 여부를 확인하려면:

rm -i file.txt

8. i-node

Linux File System에서는 File에 대한 정보를 i-node에 저장한다.

i-node에는 File의 실제 내용이 아니라 File을 관리하기 위한 정보가 저장된다.

대표적으로 다음과 같은 정보를 가진다.

  • File Permission
  • Owner
  • File Size
  • Timestamp
  • 실제 Data Block의 위치

File 이름 자체는 i-node에 저장되지 않는다.

File Name
    ↓
i-node
    ↓
Data Block
    ↓
File Contents

즉 File 이름을 통해 해당 File의 i-node를 찾고, i-node가 가지고 있는 위치 정보를 이용해 실제 Data를 읽는다.

Symbolic Link는 원본 File의 경로를 가리키는 Link이다.

Symbolic Link
      ↓
Original File
      ↓
i-node
      ↓
Data

원본 File이 삭제되면 Symbolic Link가 가리킬 대상도 사라지기 때문에 정상적으로 접근할 수 없다.

Hard Link는 원본 File의 경로가 아니라 동일한 i-node를 직접 참조한다.

Original File ─┐
               ├── i-node ── Data
Hard Link ─────┘

따라서 원본 File 이름을 삭제해도 Hard Link가 남아 있다면 Data에 계속 접근할 수 있다.

일반적으로 Directory에는 Hard Link를 생성하지 않는다.

Day 11 한 줄 정리

Linux는 계층적인 파일 시스템을 사용하며, File은 i-node를 중심으로 관리되고 Hard Link와 Symbolic Link는 File을 참조하는 방식에서 차이가 있다.


Day 12 — 검색, Permission과 Shell

1. grep

grep은 File이나 Command 출력에서 특정 문자열 또는 Pattern을 검색하는 명령어다.

grep "root" file.txt

대소문자를 구분하지 않고 검색하려면:

grep -i "root" file.txt

단어 단위로 정확하게 일치하는 경우만 검색하려면:

grep -w "root" file.txt

정규표현식도 사용할 수 있다.

grep 'root$' file.txt

$는 해당 문자열로 Line이 끝나는 경우를 의미한다.

grep 'r..t' file.txt

.은 임의의 문자 한 개를 의미한다.

grep 'ro*t' file.txt

*는 바로 앞의 문자가 반복되는 경우를 찾는다.

rt
rot
root
roooot

문자 집합을 지정할 때는 []를 사용한다.

grep '[Aa]' file.txt

2. egrep과 fgrep

egrep은 여러 Pattern이나 확장된 정규표현식을 사용할 때 활용한다.

grep -E 'root|admin' file.txt

|를 이용해 여러 검색어 중 하나와 일치하는 Line을 검색할 수 있다.

fgrep은 정규표현식의 특수문자를 해석하지 않고 문자열 그대로 검색할 때 사용한다.

grep -F '192.168.0.*' file.txt

3. find

find는 조건에 맞는 File이나 Directory를 검색한다.

이름으로 검색:

find / -name "passwd"

Type을 지정하여 검색:

find /tmp -type f

특정 크기의 File을 검색하는 것도 가능하다.

find /var/log -size +100M

File System에서 원하는 File을 찾아야 하는 경우 find를 활용할 수 있다.

4. Vi Editor

Vi Editor에서는 Command를 이용해 File 내부를 이동하고 편집한다.

Line Number를 표시하려면:

:set nu

Page 단위 이동:

Ctrl + F : 다음 Page
Ctrl + B : 이전 Page

File 처음과 끝으로 이동:

G  : 마지막 Line
1G : 첫 번째 Line

단어 단위 이동:

w : 다음 단어
b : 이전 단어
e : 현재 단어의 끝

5. Linux Permission

Linux에서는 File이나 Directory의 Permission을 다음 세 대상에 대해 관리한다.

  • u : User
  • g : Group
  • o : Others

권한의 종류는 다음과 같다.

  • r : Read
  • w : Write
  • x : Execute

Symbolic Mode

문자와 기호를 이용해 Permission을 변경한다.

chmod u+x file
chmod g-w file

Octal Mode

Permission을 숫자로 표현할 수도 있다.

권한값
Read4
Write2
Execute1

따라서:

rwx = 7
rw- = 6
r-x = 5
r-- = 4

예를 들어:

chmod 755 script.sh

는 다음 Permission을 의미한다.

Owner  : rwx
Group  : r-x
Others : r-x

6. umask

umask는 새로운 File이나 Directory를 생성할 때 적용되는 기본 Permission 제한값이다.

File의 기본 Permission은 666, Directory는 777을 기준으로 한다.

예를 들어 umask가 027이라면:

File
666 → 640

Directory
777 → 750

최종 Permission은 각각 다음과 같다.

File      : rw-r-----
Directory : rwxr-x---

7. chown

chown은 File 또는 Directory의 Owner를 변경한다.

chown user file

Owner와 Group을 함께 지정할 수도 있다.

chown user:group file

8. Shell 경로 메타문자

~는 현재 사용자의 Home Directory를 의미한다.

cd ~

특정 사용자의 Home Directory:

~username

현재 작업 Directory:

~+

이전 작업 Directory:

~-

9. 환경 변수

환경 변수는 Shell이나 Program에서 사용할 정보를 Key-Value 형태로 저장한다.

대표적인 환경 변수로 PATH가 있다.

echo $PATH

PATH는 Command를 입력했을 때 실행 File을 탐색할 Directory 목록을 가지고 있다.

/usr/local/bin:/usr/bin:/bin

10. 따옴표

Shell에서는 큰따옴표와 작은따옴표의 동작이 다르다.

큰따옴표 안에서는 환경 변수가 실제 값으로 치환된다.

echo "$USER"
nobreak

작은따옴표 안에서는 변수도 문자열 그대로 출력된다.

echo '$USER'
$USER

Shell Script를 작성할 때 변수의 값을 사용할 것인지 문자열 자체를 사용할 것인지 구분해야 한다.

11. Shell Programming과 Shebang

Shell Script를 사용하면 반복되는 Command를 하나의 Script로 만들어 실행할 수 있다.

#!/bin/bash

echo "Hello Linux"
echo "$USER"

Script 첫 번째 줄의 #!를 Shebang이라고 한다.

#!/bin/bash

해당 Script를 어떤 Interpreter로 실행할 것인지 지정한다.

#! + Interpreter Path

변수는 기본적으로 현재 Shell에서 적용되며, 지속적으로 사용할 설정은 .bashrc 등의 Shell 설정 파일에 지정할 수 있다.

Day 12 한 줄 정리

grep과 find로 필요한 데이터를 검색하고, Permission과 환경 변수를 이해한 뒤 Shell Script를 이용해 Linux 작업을 자동화할 수 있다.


전체 흐름 정리

Day 11부터 Day 12까지 학습한 Linux 내용을 흐름으로 연결하면 다음과 같다.

  1. Linux는 여러 사용자와 작업을 동시에 처리하며 계층적인 File System을 사용한다.
  2. Kernel이 CPU, Memory, Process와 File System 등의 핵심 Resource를 관리한다.
  3. File은 이름 자체가 아니라 i-node를 통해 실제 Data와 연결된다.
  4. Hard Link와 Symbolic Link는 서로 다른 방식으로 File을 참조한다.
  5. grep, find 등의 명령어를 이용해 필요한 File과 문자열을 검색한다.
  6. Linux Permission을 이용해 User와 Group별 Resource 접근을 통제한다.
  7. 환경 변수와 Shell의 동작 방식을 이해하면 Script를 이용한 자동화가 가능하다.

Linux에서 File, Permission과 Shell은 서로 독립된 개념이 아니다.

  • File System: 데이터를 어디에 어떻게 저장할까?
  • Permission: 누가 해당 데이터에 접근할 수 있을까?
  • Shell: 사용자가 운영체제에 어떤 작업을 요청할까?
  • Kernel: 요청된 작업과 System Resource를 실제로 어떻게 처리할까?

0개의 댓글