이론
파일과 디렉터리의 구조
파일 특징
- 파일은 모두 경로와 이름이 있음
- 다른 경로에는 같은 이름에 파일이 있을 수 있음
- 경로와 이름이 모두 같을 수는 없음
- 하나의 파일에는 데이터가 들어가 있음
- 파일은 데이터를 담는 그릇이라고 보면 됨
변수와 파일의 차이
- 변수는 메모리에 존재
- 파일은 디스크에 존재
- 일시적으로 메모리에 올려놓고 작업을 할 때는 데이터를 변수에 담아서 사용
- 영구적으로 저장해서 사용할 때는 데이터를 파일에 담아서 사용
<참고>
영구적: 전원이 없어도 지워지지 않는다.
파일 시스템
- 파일이 잘 동작하기 위한 환경을 제공
- 파일을 관리하기 위한 시스템
- 운영체제의 일부
- 운영체제와 디스크 사이에 있음
리눅스는 트리 형태의 계층 구조를 가지고 있음
- 윈도우도 계층 구조를 가지고 있지만 구성하는 방식이 다름
- 리눅스는 root에서 모든 게 뻗어나가는데, 윈도우는 각 디스크 드라이브로 나누어짐
- 리눅스에 새로운 HDD/SSD를 추가하면 root 아래에 비어있는 디렉터리를 만들고 새로운 HDD/SSD의 내용을 마운트하는 방식
파일의 종류
- 일반 파일: 텍스트, 동영상 파일 등
- 디렉터리: 디렉터리도 파일의 한 종류 (윈도우에서의 폴더)
- 심볼릭 링크 파일: 어떤 다른 파일을 가리키는 파일 (윈도우에서의 바로가기)
- 블록 디바이스 파일: 블록 디바이스를 제어하기 위한 파일 (일반 사용자는 사용 안 함)
- 문자 디바이스 파일: 문자 디바이스를 제어하기 위한 파일 (일반 사용자는 사용 안 함)
- 파이프 파일: 파이프를 나타내는 파일, 프로세스간 통신에 사용 (일반 사용자는 사용 안 함)
- 소켓: 소켓을 나타내는 파일, 프로세스간 통신에 사용 (일반 사용자는 사용 안 함)
생소한 파일 종류들은 다시 나올 때 다시 보기
디렉터리 개념과 대표적인 디렉터리
디렉터리
- 현재 작업 디렉터리(CWD: Current Working Directory)
- 확인하고 싶으면
$ pwd
- 확인하고 싶으면
- 홈 디렉터리(home directory)
- 예:
/home/joohyeong/
- 예:
- 상대 경로: 쉘이 지금 어디에서 실행하고 있는지(현재 작업 디렉터리가 어디인지)에 따라 달라짐
- 예:
../cde
..
: 부모 디렉터리.
: 현재 디렉터리
- 예:
- 절대 경로: 현재 디렉터리에 상관 없이 절대적인 경로
- 예:
/xyz/abc
- 예:
디렉터리 | 설명 |
/ | 루트 디렉터리, 모든 디렉터리의 최상위 부모 |
/bin | 모든 사용자가 사용할 수 있는 여러가지 실행 파일 위치 사용자에 따라 /usr/bin 위치 가능 |
/sbin | 시스템 관리자 권한으로 실행해야 하는 여러가지 실행 파일 위치 사용자에 따라 /usr/sbin 위치 가능 |
/etc | 여러 가지 설정 파일이 들어가며 주의가 필요 sudo 명렁을 이용하면 수정 가능 |
/lib | 공유 라이브러리 디렉터리 사용자에 따라 /usr/lib 위치 가능 |
/home | 사용자들의 홈 디렉터리 |
/mnt | 일시적으로 파일 시스템에 마운트하는 경우 사용 |
/proc /sys |
시스템 정보를 설정/조회할 수 있는 채널을 만들어 주는 디렉터리 리눅스 개발자는 만질 일이 좀 있음 |
/tmp | 임시 디렉터리 |
/usr | 사용자가 추가한 실행 파일, 라이브러리 등의 소프트웨어 저장 |
/dev | 디바이스 드라이버가 사용하는 디바이스 파일 디렉터리 |
아이노드, 하드링크, 소프트링크
아이노드(inode): 하나의 파일의 메타데이터들이 저장되어 있는 공간
- 파일 이름은 아이노드에 포함 안 됨
- 이름 - 아이노드 - 파일데이터 이렇게 연결되어 있음
소프트링크(=심볼릭링크, =심링크)
- 윈도우에서 어떤 실행파일의 바로가기 실행하면 원 파일을 실행한 것과 동일하게 동작하는데, 이게 리눅스의 소프트링크와 유사함
- 같은 디렉터리에 있을 필요 없음
- 소프트링크 파일도 이름 - 아이노드 - 파일데이터로 구성됨
- 아이노드와 파일데이터는 원본 파일과 다른 것임
- 소프트링크 파일의 파일 데이터에는 원본 파일의 경로가 저장되어 있음
하드링크
- 대상이 되는 아이노드를 하드링크가 공유함
- 사용 횟수가 많지 않음, 특수한 목적으로 사용
https://miro.medium.com/max/628/1*ojVZedoItdtM1OEpl9YatQ.png
이미지로 쉽게 이해하기
실습
파일 다루기
$ ls -al
- -a: .으로 시작하는 (숨기고 싶은) 파일도 모두 출력
- -l: 좀 더 많은 정보를 출력
빈 파일 만들기
$ touch filename
파일 삭제
$ rm filename
윈도우에서는 파일을 삭제하면 휴지통으로 이동하지만, 리눅스에서 rm 명령어를 하면 완전 삭제해버림
$ mv
는 파일의 파일명(혹은 디렉터리)를 변경함
-> 파일명은 사실 디렉터리까지 내포하고 있음
예시
- 현재 디렉터리의 test라는 파일의 파일명을 apple로 변경하기
$ mv test apple
- 현재 디렉터리의 test라는 파일을 /tmp/로 이동하고, 파일명은 apple로 변경하기
$ mv test /tmp/apple
- 현재 디렉터리의 test라는 파일을 /tmp/로 이동하고, 파일명은 그대로 유지하기
$ mv test /tmp/
부모 디렉터리 ..
, 현재 디렉터리 .
을 사용하여 상대 경로를 활용할 수도 있음!
현재 디렉터리가 /dir1/dir2
이고, apple 이라는 파일이 있을 때, 이 파일을 /dir1/dir3
로 이동하고 파일명은 pineapple로 변경하기
$ mv apple ../dir3/pineapple
디렉터리 다루기
$ rmdir
: 디렉터리 삭제, 삭제하려는 디렉터리 내에 파일이 존재하면 삭제가 불가능함
$ rm -r
: 디렉터리를 삭제하고, 그 안에 있는 파일까지 모두 삭제하기$ rm -f
: 경고 없이 강제로 삭제하기
일반적으로 $ rm -rf
로 많이 사용 (주의해서 사용하기)
디렉터리명 변경도 $ mv
쓰면 됨
아이노드와 하드링크
$ ls -i
를 하면 각 파일의 아이노드 번호까지 출력이 가능함
$ ln
: 하드링크 만들기
pinapple 파일에 대한 하드링크로 hello를 만들어보자
$ ls -ali
를 해보면 다음과 같이 나옴
두 파일의 아이노드 번호가 같은 것을 볼 수 있음!
두 파일을 모두 출력해보자
모두 같은 내용이 들어가있는 것을 확인
hello 파일의 내용을 nano 에디터로 수정한 후에 다시 확인해보자
두 파일 모두 수정이 됨!
하드링크의 개념과 연결해서 생각해보기
<참고>$ stat filename
: 파일 속성 조회, 아이노드 번호와 하드링크 개수 확인 가능
소프트 링크
소프트링크(심링크)를 만들 때는 $ ln -s
를 사용하면 됨
하드링크 만들 때에서 -s
만 추가해주면 되는 것
이렇게 표시가 됨
파일 내용을 출력해보면 하드링크처럼 동일하게 나옴
원본 파일인 pineapple을 수정하고 다시 출력하면 둘다 수정되어서 나옴
만약에 원본 파일인 pineapple을 제거하고 $ ls
를 보면 이렇게 빨갛게 나옴
여기서 hello(심링크 파일)를 출력해보면 없는 파일로 나옴
이 상태에서 pineapple을 다시 생성하고 출력하면 다시 연결이 되는 것을 볼 수 있음
<참고>
- 하드링크 파일은 디렉터리를 바꿔도 다 출력 됨
- 만약에 hello(심링크 파일)를 다른 디렉터리로 옮기면 제대로 출력되지 않음
- 왜냐하면, 해당 심링크는 현재 디렉터리에 있는 pineapple이라는 파일을 연결하는 건데, 바뀐 디렉터리에는 해당 파일이 없어서 그런 것
- 만약에 옮긴 디렉터리에 새로운 pineapple이라는 파일을 만들면 그 파일에 새로 연결이 됨
- 심링크는 절대경로/상대경로 모두 지정할 수 있음
파일명을 따로 지정하지 않고 경로만 넣으면 동일한 파일명으로 생성하고 연결함
아래 예시 참고
위처럼 절대경로로 지정했으면 심링크 파일을 이동해도 계속 연결되어 있음
상대경로로 지정도 가능한 것 참고!
'Computer Science > Linux' 카테고리의 다른 글
[Linux] 사용자와 그룹 (0) | 2023.03.19 |
---|---|
[Linux] 기본 쉘 명령어 정리 (0) | 2023.03.19 |