1. 하드링크와 심볼릭 링크
하드 링크(Hard Link)
- 같은 파일을 여러 이름으로 참조하는 방법
- 같은 파일을 참조한 하드 링크끼리는 인덱스 노드(inode)를 공유한다
- 같은 하드 링크 파일인지 확인하는 방법: inode가 같은가?
- 다른 파일 시스템 간에는 별개의 inode 테이블을 참조하기 때문에 같은 파일 시스템 내에서만 하드 링크를 걸 수 있고, 파일 시스템 간 이동도 불가능하다
- 파일을 처음 생성하게 되면 하드 링크 수는 1
- 원본 파일을 삭제해도 하드 링크를 통해 파일에 접근 가능 (원본 파일과 하드 링크의 차이가 없다)
- 하드 링크 파일을 만들면 실제로 파일이 만들어진 것처럼 보이지만 실제로는 용량이 없다
- 별도의 파일이 생성되는 것이 아닌 이름만 추가되는 것
- ln 명령어로 하드 링크를 생성한다
ln original_file hardlink_name
심볼릭 링크(Symbolic Link)
- 원본 파일 또는 디렉토리의 경로를 참조하는 방법
- ls -l 명령어 출력결과에 첫글자가 'l'(소문자엘)이면 심볼릭링크
- 원본파일과 다른 파일 시스템(드라이브)에 있어도 링크가 정상작동함(파일 시스템과 무관)
- 경로를 기록한 별도의 파일이 생성됨(작지만 용량을 차지한다)
- 원본 파일이 삭제되거나, 위치가 변경되면 심볼릭 링크 파일은 유효하지 않다
- 심볼릭 링크 파일에 기록된 경로와 다르기 때문에 찾아갈 수 없음
- 이처럼 유효하지 않은 심볼릭 링크 파일을 broken link, dangling link라고 한다
- ln -s 명령어로 심볼릭 링크를 생성한다
ln -s target_file symlink_name
*inode, 파일 시스템의 개념은 나중에 추가로 다룰 예정
2. 파일 관리 명령어
1. pipe => |
: | (파이프) 기호 앞쪽 명령의 출력을 위쪽 명령의 입력으로 방향을 바꿔주는 연산자이다. 설명이 조금 헷갈릴 수 있는데 다음 예시를 통해 조금 더 쉽게 이해해보자.
cat filename.txt | sort
=> cat filename.txt는 파일 내용을 출력하고, 이 출력이 sort로 전달되어 정렬된 결과를 표시
=> 정렬(sort)된 filename.txt를 출력
cat filename.txt | grep "search_term"
=> cat filename.txt는 파일의 내용을 출력하고, 이 출력이 grep "search_term"으로 전달되어 해당 단어가 포함된 줄만 출력
=> "search_term"이 포함된 filename.txt의 내용만 출력
위의 예시처럼 | 연산자를 사용하면 명령어 조합을 통해 복잡한 작업을 간단하게 구현할 수 있다.
2. more
: 파일의 내용을 페이지 단위로 끊어서 출력
more [파일명]
cat file.txt | more
3. cat
: 텍스트 파일을 만들어 저장하거나, 화면(터미널, 콘솔)에 출력
- 텍스트 파일 만들기
cat > [파일명]
=> 내용 작성 후 ctrl+d
- 텍스트 파일 출력
cat [파일명]
4. file
: 파일의 종류를 알려주는 명령어
=> Windows와 달리 Linux/Unix는 확장자 개념이 없어 파일 종류를 직관적으로 파악할 수 없다)
=> file 명령어를 통해 확인
- 파일 종류
텍스트 파일: 단순 글자들로만 구성된 파일
|
ASCII Text
|
디렉토리 파일
|
Directory
|
심볼릭 링크 파일
|
Symbolic Link
|
블록 장치 파일
(Block Device File)
|
Block Special
|
캐릭터 장치 파일
(Character Device File)
|
Character Special
|
쉘스크립트 실행파일
|
shell script: ASCII Text Executable
|
바이너리 실행파일
(Binary Executable File)
: 실행파일(기계어)
윈도우즈의 exe파일과 같은 역할을 수행
리눅스/유닉스의 명령어들은 대부분 실행파일이다.
(쉘 스크립트도 일부 있음)
|
~~ELF~~ Executable
|
소켓 파일(Socket File)
: 소켓 통신할 때 사용되는 파일
|
Socket
|
5. vi
: 텍스트 파일 편집기, 파일이 없는 경우 새로 생성한다.
- 명령키를 통해 목적에 맞는 모드로 변경해 사용한다
i | 현재 커서 위치부터 입력 |
a | 현재 커서 다음 줄부터 입력 |
o | 다음 줄부터 입력 |
x | 현재 커서 위치부터 1글자 잘라내기 |
dd | 현재 커서 위치의 한 줄을 잘라내기 / 숫자 + dd: [숫자] 줄만큼 삭제 |
yy | 현재 커서 위치의 한 줄을 복사하기 / 숫자 + yy: [숫자] 줄만큼 복사 |
p | 현재 커서 위치 다음 줄에 복사 / 숫자 + p: [숫자]줄만큼 복사 |
u | Undo, 작업 취소 (Windows의 Ctrl+z와 같다) |
gg | 맨 윗 줄로 이동 |
G | 맨 아랫 줄로 이동 |
[줄 번호]G | 원하는 줄로 이동 |
:set nu | 줄 번호 표시 |
:q | 종료하기 |
:q! | 저장 안 하고 종료하기 |
:w | 저장하기 |
:wq | 저장하고 종료하기 |
/[패턴] | 패턴 검색 키워드 찾기 / n: 다음 검색으로 이동 |
%s/[패턴]//g | 파일의 모든 줄에서 패턴을 찾아 삭제 |
6. head
: 파일 내용의 상위 10줄 표시
head [파일명]
head -5 [파일명]
=> 상위 5줄 표시
7. tail
: 파일의 하위 10줄 표시
tail [파일명]
tail -5 [파일명]
=> 하위 5줄 표시
8. cp
: copy, 파일 복사
cp abc.txt bcd.txt
--> 현재위치에 있는 abc.txt파일을 현재위치에 bcd.txt라는 이름으로 복사하라.
cp abc.txt testdir1
--> 현재위치에 있는 abc.txt파일을 현재위치 밑에 있는 testdir1디렉토리에 복사하라.
cp abc.txt testdir1/hahaha.txt
--> 현재위치에 있는 abc.txt파일을 현재위치 밑에 있는 testdir1디렉토리 안에 hahaha.txt이름으로 복사하라.
cp abc.txt /tmp
--> 현재위치에 있는 abc.txt파일을 /tmp 디렉토리에 같은 이름으로 복사하라.
9. mv
: move, 파일/디렉토리 이동, 이름 바꾸기(같은 파일 내에서 mv를 사용할 경우)
mv cde.txt testdir1
--> 현재위치에 있는 cde.txt파일을 현재위치 밑에 있는 testdir1디렉토리에 이동시킨다
mv efg.txt fgi.txt
--> 현재위치에 있는 abc.txt파일을 현재위치에 cde.txt라는 이름으로 변경
(한 디렉토리 내에서 mv를 사용할 경우)
mv g.txt testdir1/hohoho.txt
--> 이동하면서 이름 변경
10. rm
: remove, 파일/디렉토리 삭제
- rm [파일명]
- rm -rf: 묻지 않고 강제로 모두 삭제 (주의)
- -r: recursive(재귀순환, 반복)
- -f: force. 강제로 진행(묻지 않기)
11. grep
: Global Regular Expression Print, 정규화 표현식을 이용하여 파일 안의 내용 검색
정규화 표현식: 사람이 생각하는 조건들을 기계가 인식할 수 있는 형태로 표현하는 방법
- ^[단어]: 해당 단어로 시작하는 것을 찾아라
- [단어]$: 해당 단어로 끝나느 것을 찾아라
12. find
: 저장소(HDD/SSD..)에서 파일/디렉토리를 검색(파일명, 파일크기 등의 파일 속성을 검색)
find / -name 'test'
--> / 디렉토리부터 이름이 test인 파일을 검색하라.
find / -name 'test*'
--> / 디렉토리부터 이름이 test가 들어간 파일을 검색하라.
find / -size 1000c
--> / 디렉토리부터 파일크기가 1000글자(바이트)인 것만 검색하라.
find / -size +100M
--> / 디렉토리부터 파일크기가 100MB 이상인 것만 검색하라
find ./ -name 'park*'
--> 현재 디렉토리 이하의 파일과 디렉토리 중 이름이 'park'으로 시작(뒤에 임의의 문자열이 올 수 있음)하는 것을 검색해라
* --> all (정규화 표현식 아님)
13. tar(binding, unbinding)
: Tape Archive, 백업용 테이브에 백업 또는 파일 묶기(binding)에 사용
- 지정한 파일 묶기
|
|
|
|
|
- 지정한 파일 묶기 해제
|
|
|
|
14. gzip, gunzip
: 압축/ 압축 해제
|
|
|
|
* tar.gz => tarball 이라고도 지칭
힘들지만 오늘도 해낸 나를 위한 한 마디,
"The greatest glory in living lies not in never falling, but in rising every time we fall", Nelson Mandela
'System > Linux' 카테고리의 다른 글
[Linux] 파일 소유권 & 권한 / 특수 권한 (0) | 2024.09.19 |
---|---|
[Linux] Linux 서버를 통해 PC방에서 Tetris 대결을 할 수 있게 하자! (2) | 2024.09.14 |
[Linux] Rocky Linux에 Apache Web Service Demon 패키지 설치하기 (0) | 2024.09.12 |
[Linux] 디렉토리 구조 & 관리 명령어 / 절대 경로 & 상대 경로 (4) | 2024.09.11 |
[Linux] Linux 관련 기본 정보와 기초 명령어 (0) | 2024.09.11 |