Linux는 서버 환경에서 널리 사용되는 운영체제로, 다음과 같은 특징을 가진다.
Linux의 파일 시스템은 /를 최상위 디렉터리로 사용한다.
/
├── home
├── etc
├── var
├── usr
└── tmp
모든 파일과 디렉터리는 / 아래의 계층적인 구조에 존재한다.
Linux는 다양한 CPU Architecture에서 동작할 수 있다.
| 구분 | x86 | ARM |
|---|---|---|
| 명령어 | 비교적 복잡한 명령어 세트 | 비교적 단순한 명령어 세트 |
| 특징 | 높은 성능과 처리 능력 | 높은 전력 효율 |
| 전력 소비 | 상대적으로 높음 | 상대적으로 낮음 |
| 활용 | PC, Server | Mobile, Embedded, Server |
운영체제를 설치하거나 Binary를 실행할 때도 현재 시스템의 Architecture가 무엇인지 확인해야 한다.
Kernel은 운영체제의 핵심 부분으로 Hardware와 Application 사이에서 System Resource를 관리한다.
주요 역할은 다음과 같다.
Application
↓
Kernel
↓
Hardware
Application은 Kernel을 통해 CPU, Memory, Disk 등의 Resource를 사용한다.
운영체제 정보를 확인할 때는 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
파일 내용을 페이지 단위로 확인할 때 more와 less를 사용할 수 있다.
more file.txt
less file.txt
/를 이용한 문자열 검색 가능/keyword
특히 Log File처럼 내용이 많은 파일을 확인할 때 유용하다.
wc는 파일의 Line, Word, Byte 등의 개수를 확인한다.
| Option | 의미 |
|---|---|
-l | Line 수 |
-w | Word 수 |
-c | Byte 수 |
-m | Character 수 |
-L | 가장 긴 Line의 길이 |
예를 들어 파일이 몇 줄인지 확인하려면:
wc -l file.txt
빈 파일을 생성할 때는 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
Linux File System에서는 File에 대한 정보를 i-node에 저장한다.
i-node에는 File의 실제 내용이 아니라 File을 관리하기 위한 정보가 저장된다.
대표적으로 다음과 같은 정보를 가진다.
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를 생성하지 않는다.
Linux는 계층적인 파일 시스템을 사용하며, File은 i-node를 중심으로 관리되고 Hard Link와 Symbolic Link는 File을 참조하는 방식에서 차이가 있다.
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
egrep은 여러 Pattern이나 확장된 정규표현식을 사용할 때 활용한다.
grep -E 'root|admin' file.txt
|를 이용해 여러 검색어 중 하나와 일치하는 Line을 검색할 수 있다.
fgrep은 정규표현식의 특수문자를 해석하지 않고 문자열 그대로 검색할 때 사용한다.
grep -F '192.168.0.*' file.txt
find는 조건에 맞는 File이나 Directory를 검색한다.
이름으로 검색:
find / -name "passwd"
Type을 지정하여 검색:
find /tmp -type f
특정 크기의 File을 검색하는 것도 가능하다.
find /var/log -size +100M
File System에서 원하는 File을 찾아야 하는 경우 find를 활용할 수 있다.
Vi Editor에서는 Command를 이용해 File 내부를 이동하고 편집한다.
Line Number를 표시하려면:
:set nu
Page 단위 이동:
Ctrl + F : 다음 Page
Ctrl + B : 이전 Page
File 처음과 끝으로 이동:
G : 마지막 Line
1G : 첫 번째 Line
단어 단위 이동:
w : 다음 단어
b : 이전 단어
e : 현재 단어의 끝
Linux에서는 File이나 Directory의 Permission을 다음 세 대상에 대해 관리한다.
u : Userg : Groupo : Others권한의 종류는 다음과 같다.
r : Readw : Writex : Execute문자와 기호를 이용해 Permission을 변경한다.
chmod u+x file
chmod g-w file
Permission을 숫자로 표현할 수도 있다.
| 권한 | 값 |
|---|---|
| Read | 4 |
| Write | 2 |
| Execute | 1 |
따라서:
rwx = 7
rw- = 6
r-x = 5
r-- = 4
예를 들어:
chmod 755 script.sh
는 다음 Permission을 의미한다.
Owner : rwx
Group : r-x
Others : r-x
umask는 새로운 File이나 Directory를 생성할 때 적용되는 기본 Permission 제한값이다.
File의 기본 Permission은 666, Directory는 777을 기준으로 한다.
예를 들어 umask가 027이라면:
File
666 → 640
Directory
777 → 750
최종 Permission은 각각 다음과 같다.
File : rw-r-----
Directory : rwxr-x---
chown은 File 또는 Directory의 Owner를 변경한다.
chown user file
Owner와 Group을 함께 지정할 수도 있다.
chown user:group file
~는 현재 사용자의 Home Directory를 의미한다.
cd ~
특정 사용자의 Home Directory:
~username
현재 작업 Directory:
~+
이전 작업 Directory:
~-
환경 변수는 Shell이나 Program에서 사용할 정보를 Key-Value 형태로 저장한다.
대표적인 환경 변수로 PATH가 있다.
echo $PATH
PATH는 Command를 입력했을 때 실행 File을 탐색할 Directory 목록을 가지고 있다.
/usr/local/bin:/usr/bin:/bin
Shell에서는 큰따옴표와 작은따옴표의 동작이 다르다.
큰따옴표 안에서는 환경 변수가 실제 값으로 치환된다.
echo "$USER"
nobreak
작은따옴표 안에서는 변수도 문자열 그대로 출력된다.
echo '$USER'
$USER
Shell Script를 작성할 때 변수의 값을 사용할 것인지 문자열 자체를 사용할 것인지 구분해야 한다.
Shell Script를 사용하면 반복되는 Command를 하나의 Script로 만들어 실행할 수 있다.
#!/bin/bash
echo "Hello Linux"
echo "$USER"
Script 첫 번째 줄의 #!를 Shebang이라고 한다.
#!/bin/bash
해당 Script를 어떤 Interpreter로 실행할 것인지 지정한다.
#! + Interpreter Path
변수는 기본적으로 현재 Shell에서 적용되며, 지속적으로 사용할 설정은 .bashrc 등의 Shell 설정 파일에 지정할 수 있다.
grep과find로 필요한 데이터를 검색하고, Permission과 환경 변수를 이해한 뒤 Shell Script를 이용해 Linux 작업을 자동화할 수 있다.
Day 11부터 Day 12까지 학습한 Linux 내용을 흐름으로 연결하면 다음과 같다.
grep, find 등의 명령어를 이용해 필요한 File과 문자열을 검색한다.Linux에서 File, Permission과 Shell은 서로 독립된 개념이 아니다.