학교 강의를 복습하는 차원에서 작성하는 글입니다.
학부생 수준의 글이므로, 오류가 있을 수 있는 점 양해바람니다.
Disk
Block 단위로 data를 읽거나 쓴다.
거대한 저장 공간을 나누어서 쓰기 위해서, File 이라는 데이터 묶음을 만들고. 여러 file을 모아서 저장할 수 있는 Directory 같은 것도 만든다.
이때, 이러한 거대한 저장 공간을 나누기 위한 규칙이 파일시스템이다.
File
데이터 저장하기 위한 가장 기본 단위
Linux에서 FIle은 단순히 Binary Data를 저장한다.
=> 저장된 Data는 논리적인 구조가 아니다.
Ex)
cat > data
ACD
=> Text file이면 A C D 와 \n 문자를 저장하고 있고
=> Binary file이면 숫자형인 65 67 68 10을 가지고 있다.
리눅스 표준 파일 열고 쓰고 닫기
int fd = open("filename.txt", O_RDWR);
write(fd, "WBC", 3);
close(fd);
cat으로 binary file 표준 출력하는 에
cat은 지정한 파일의 내용을 문자로 인식하여 출력
=> 출력 포트 지정하지 않으면 표준 장치(stdout)으로 출력한다.
=> 표준 장치는 터미널 출력
Binary File은 character code에 해당하지 않는 2진 값도 문자로 가정한다.
포준 입/출력
명시하지 않을 경우 기본으로 지정된 입/출력 장치
표준 입력(stdin /0) 키보드 입력
표준 출력(stdout /1) 터미널 출력
표준 오류 출력(stderrr /2) 터미널 출력
리다이렉션
=> 표준 입출력을 파일로 재 지정하는 기능
표준 출력의 방향을 지정 > or 1> (기존 파일의 내용은 덮어쓰기 함)
cat > kbd.txt
=> 표준 입력 -> 표준 출력으로 나오는 값을 kbd.txt에 덮어씌운다.
ls >> ls.txt
=> ls.txt의 맨뒤에 모니터로 나오는 파일 목록을 추가
표준 에러의 출력의 방향을 지정 2>
cat not_exist_file 2> errorOutput.txt
표준 출력 및 에러 출력의 방향을 지정: 1> filename_1 2> filename_2
표준 출력 및 에러 출력을 하나의 파일에 출력 : 2 > &1
리다이렉션 <
=> 입력의 방향을 지정
=> cat < kbd.txt
==> kbd.txt를 표준 출력에 덮음(=>파일 내용을 출력)
파이프라인 |
=> 선행 명령어의 표준 출력을 후행 명령어의 표준 입력으로 만들어줌
Directory & Path
Directory
=> file의 목록을 저장하기 위한 특수한 형태의 파일
=> 디렉터리 파일이라고 부르기도 함
=> 디렉터리 파일의 데이터 블록에 파일명이 목록으로 저장되어 있다.
Directory Entry
=> Directory File의 목록을 Entry 라고 한다.
=> 모든 Directory는 항상 두개의 항을 가지고 있다. 자기 자신 나타내는 항 . / 부모 디렉터리를 나타내는 항 ..
Ownership and Accessibility
Linux는 Multi-Users를 지원하므로 소유에 대한 구분과 권한 설정이 중요하다.
File Ownership
파일이 어느 사용자의 것인지 나타낸다.
모든 파일은 시스템에 등록된 사용자 중 한 사용자의 소유가 된다.
Accessibility
모든 파일은 읽기 쓰기 실행 권한을 가진다.
파일에 대한 권한은 사용자 유형에 따라 다르게 적용된다.
디렉토리의 실행 권한도 있다.
ex)
-rw-r----- 1 k kG
파일 소유자 k 라는 이름의 ID 사용자
파일 그룹 kG
허가
소유주에 대한 권한
r w - => 읽고 쓰는것 가능, 실행 불가능 (8진수, 6)
동일 그룹 사용자에 대한 권한
r-- => 읽기 가능 나머지 불가능 ( #, 4)
기타 사용자에 대한 권한
--- => 전부 불가 ( #, 0)
소유권 변경
시스템 관리자만 수행 가능
sudo chown 명령 사용
허가 변경
파일 소유자나 시스템 관리자가 수행 가능
chmod 명령 사용
=> chmod 644 file
File Type
Linux System에서는 다양한 개체를 파일로 다룰 수 있게 한다.
=> 주기억장치, 보조기억장치, 파이프 등등 (특수 파일)
지원하는 이유
=> 사용자가 디바이스들을 파일처럼 쉽게 사용하게 하기 위해
Terminal 연결 상태 나타내는 파일
tty 명령으로 자신의 연결 상태 나타내는 파일 확인 가능
=> 그 디렉터리를 확인하면 현재 연결 중인 터미널의 수를 확인할 수 있다.
쓰레기통
/dev/null
리눅스 고유 파일 시스템 EXT
EXT
리눅스의 기본 파일 시스템, 권한 지원
EXT2
파일 사이즈 16GB 지원
긴 파일 이름 지원, 파일 시스템 사이즈 커짐
캐시 플러시 중 정전시 파일시스템 손상 가능
EXT3
저널링 도입
조각화 완화
EXT4
파일 사이즈 16TB 지원, 1 Exabyte 디스크 크기 지원
조각화 개선
EXT File system 구조
4가지로 구분해, 모든 블록은 Unique 하며, 블록은 N Bytes의 연속된 공간이다.
Boot Block
OS Booting 용
Super Block
File System 관련된 정보
Total/Free block number
Total/Free inode number
Inode Blocks
index node block
file에 대한 정보 저장(형식 권한 소유자 파일 크기 하드 링크 수 파일 주소...)
모든 file /dir은 반드시 각각의 inode block 을 하나만 가짐
디스크 포맷시 16KB 마다 하나씩 할당
Data blocks
file의 실제 데이터
혹은 다음 Data block의 위치
보관하는 Data의 크기에 따라 여러개
구조
디렉토리 파일의 Data Block 에 저장된 데이터
=> 디렉토리엔트리 , Inode 와 filename 의 mapping table
파일 이름으로 파일을 열면
=> Directory의 Directory Entry에서 파일 이름을 검색
=> Inode 번호 확인
=> Inode를 이용 파일의 Datablock 접금
=> Data access
Inode Block 과 Data Blocks
파일 소유자 이름/ 권한
=> inode block에 저장
파일 데이터의 본체
=> Data block에 저장
파일 이름
=> 해당 파일이 속한 Directory 의 Data block에 저장
File 관련 정보
ls -l 명령 실행 시 보여지는 파일의 정보
- rw-r--r-- 1 k kg 30 date temp
파일 유형 접근권한 하드링크수 소유주 이름 그룹 이름 파일 크기 생성날짜(여기까지 indoe Block에 저장) file Name(direcotry의 data block에 directory entry structure 형태로 저장)
Inode Block Number
ls -i 로 확인 가능
Ex) 2813421
1. 현재 Direcotry File 내의 Inode Block Number
2. 부모 Direcotry File 내의 Inode Block Number
3. 현재 Direcotry에 등록되어 있는 파일의 Inode Block Number
새로운 File을 생성하는 과정
새롭게 생성할 Direcotry에 동일한 이름의 항이 존재하는지 확인
=> 존재하지 않으면 Inode Block 하나를 기존의 디스크에서 안 쓰는 것 중 하나로 할당 받음
=> 할당 받은 Inode Block에 파일의 정보를 저장
=> File이 저장할 데이터의 크기에 따라 기존의 디스크에서 안 쓰는 data block 중 하나 할당 받음
Hard Link VS Symbolic(Soft) Link

하드 링크는 완전히 동일한 파일의 '이름'만 다름
=> 같은 Inode를 가리킴 , 디렉토리 엔트리만 수정한다.
심볼릭 링크는 완전히 새로운 inode를 생성
=> 해당 Inode가 원본 파일 이름을 가리킨다.
==> 파일 삭제시, Hard Link는 하나라도 남아있으면 파일은 삭제되지 않고. Symbolic link는 바로 링크가 깨진다.
==> 파일 이동시, Hard Link는 동일 Inode륽 가리키므로 옮긴 위치를 기억한다. Symbolic link는 바로 링크가 꺠진다.
==> 디렉토리에 링크를 걸 경우 Hard link는 불가능하고, Symbolic link는 가능하다.
'프로그래밍 > Linux' 카테고리의 다른 글
[Linux]파일입출력(2) (0) | 2023.10.08 |
---|---|
[Linux]파일입출력(1) (0) | 2023.10.08 |
[Linux]Debug (0) | 2023.10.08 |
[Linux]컴파일 make (0) | 2023.10.08 |
[Linux]리눅스 컴파일 (0) | 2023.10.08 |
학교 강의를 복습하는 차원에서 작성하는 글입니다.
학부생 수준의 글이므로, 오류가 있을 수 있는 점 양해바람니다.
Disk
Block 단위로 data를 읽거나 쓴다.
거대한 저장 공간을 나누어서 쓰기 위해서, File 이라는 데이터 묶음을 만들고. 여러 file을 모아서 저장할 수 있는 Directory 같은 것도 만든다.
이때, 이러한 거대한 저장 공간을 나누기 위한 규칙이 파일시스템이다.
File
데이터 저장하기 위한 가장 기본 단위
Linux에서 FIle은 단순히 Binary Data를 저장한다.
=> 저장된 Data는 논리적인 구조가 아니다.
Ex)
cat > data
ACD
=> Text file이면 A C D 와 \n 문자를 저장하고 있고
=> Binary file이면 숫자형인 65 67 68 10을 가지고 있다.
리눅스 표준 파일 열고 쓰고 닫기
int fd = open("filename.txt", O_RDWR);
write(fd, "WBC", 3);
close(fd);
cat으로 binary file 표준 출력하는 에
cat은 지정한 파일의 내용을 문자로 인식하여 출력
=> 출력 포트 지정하지 않으면 표준 장치(stdout)으로 출력한다.
=> 표준 장치는 터미널 출력
Binary File은 character code에 해당하지 않는 2진 값도 문자로 가정한다.
포준 입/출력
명시하지 않을 경우 기본으로 지정된 입/출력 장치
표준 입력(stdin /0) 키보드 입력
표준 출력(stdout /1) 터미널 출력
표준 오류 출력(stderrr /2) 터미널 출력
리다이렉션
=> 표준 입출력을 파일로 재 지정하는 기능
표준 출력의 방향을 지정 > or 1> (기존 파일의 내용은 덮어쓰기 함)
cat > kbd.txt
=> 표준 입력 -> 표준 출력으로 나오는 값을 kbd.txt에 덮어씌운다.
ls >> ls.txt
=> ls.txt의 맨뒤에 모니터로 나오는 파일 목록을 추가
표준 에러의 출력의 방향을 지정 2>
cat not_exist_file 2> errorOutput.txt
표준 출력 및 에러 출력의 방향을 지정: 1> filename_1 2> filename_2
표준 출력 및 에러 출력을 하나의 파일에 출력 : 2 > &1
리다이렉션 <
=> 입력의 방향을 지정
=> cat < kbd.txt
==> kbd.txt를 표준 출력에 덮음(=>파일 내용을 출력)
파이프라인 |
=> 선행 명령어의 표준 출력을 후행 명령어의 표준 입력으로 만들어줌
Directory & Path
Directory
=> file의 목록을 저장하기 위한 특수한 형태의 파일
=> 디렉터리 파일이라고 부르기도 함
=> 디렉터리 파일의 데이터 블록에 파일명이 목록으로 저장되어 있다.
Directory Entry
=> Directory File의 목록을 Entry 라고 한다.
=> 모든 Directory는 항상 두개의 항을 가지고 있다. 자기 자신 나타내는 항 . / 부모 디렉터리를 나타내는 항 ..
Ownership and Accessibility
Linux는 Multi-Users를 지원하므로 소유에 대한 구분과 권한 설정이 중요하다.
File Ownership
파일이 어느 사용자의 것인지 나타낸다.
모든 파일은 시스템에 등록된 사용자 중 한 사용자의 소유가 된다.
Accessibility
모든 파일은 읽기 쓰기 실행 권한을 가진다.
파일에 대한 권한은 사용자 유형에 따라 다르게 적용된다.
디렉토리의 실행 권한도 있다.
ex)
-rw-r----- 1 k kG
파일 소유자 k 라는 이름의 ID 사용자
파일 그룹 kG
허가
소유주에 대한 권한
r w - => 읽고 쓰는것 가능, 실행 불가능 (8진수, 6)
동일 그룹 사용자에 대한 권한
r-- => 읽기 가능 나머지 불가능 ( #, 4)
기타 사용자에 대한 권한
--- => 전부 불가 ( #, 0)
소유권 변경
시스템 관리자만 수행 가능
sudo chown 명령 사용
허가 변경
파일 소유자나 시스템 관리자가 수행 가능
chmod 명령 사용
=> chmod 644 file
File Type
Linux System에서는 다양한 개체를 파일로 다룰 수 있게 한다.
=> 주기억장치, 보조기억장치, 파이프 등등 (특수 파일)
지원하는 이유
=> 사용자가 디바이스들을 파일처럼 쉽게 사용하게 하기 위해
Terminal 연결 상태 나타내는 파일
tty 명령으로 자신의 연결 상태 나타내는 파일 확인 가능
=> 그 디렉터리를 확인하면 현재 연결 중인 터미널의 수를 확인할 수 있다.
쓰레기통
/dev/null
리눅스 고유 파일 시스템 EXT
EXT
리눅스의 기본 파일 시스템, 권한 지원
EXT2
파일 사이즈 16GB 지원
긴 파일 이름 지원, 파일 시스템 사이즈 커짐
캐시 플러시 중 정전시 파일시스템 손상 가능
EXT3
저널링 도입
조각화 완화
EXT4
파일 사이즈 16TB 지원, 1 Exabyte 디스크 크기 지원
조각화 개선
EXT File system 구조
4가지로 구분해, 모든 블록은 Unique 하며, 블록은 N Bytes의 연속된 공간이다.
Boot Block
OS Booting 용
Super Block
File System 관련된 정보
Total/Free block number
Total/Free inode number
Inode Blocks
index node block
file에 대한 정보 저장(형식 권한 소유자 파일 크기 하드 링크 수 파일 주소...)
모든 file /dir은 반드시 각각의 inode block 을 하나만 가짐
디스크 포맷시 16KB 마다 하나씩 할당
Data blocks
file의 실제 데이터
혹은 다음 Data block의 위치
보관하는 Data의 크기에 따라 여러개
구조
디렉토리 파일의 Data Block 에 저장된 데이터
=> 디렉토리엔트리 , Inode 와 filename 의 mapping table
파일 이름으로 파일을 열면
=> Directory의 Directory Entry에서 파일 이름을 검색
=> Inode 번호 확인
=> Inode를 이용 파일의 Datablock 접금
=> Data access
Inode Block 과 Data Blocks
파일 소유자 이름/ 권한
=> inode block에 저장
파일 데이터의 본체
=> Data block에 저장
파일 이름
=> 해당 파일이 속한 Directory 의 Data block에 저장
File 관련 정보
ls -l 명령 실행 시 보여지는 파일의 정보
- rw-r--r-- 1 k kg 30 date temp
파일 유형 접근권한 하드링크수 소유주 이름 그룹 이름 파일 크기 생성날짜(여기까지 indoe Block에 저장) file Name(direcotry의 data block에 directory entry structure 형태로 저장)
Inode Block Number
ls -i 로 확인 가능
Ex) 2813421
1. 현재 Direcotry File 내의 Inode Block Number
2. 부모 Direcotry File 내의 Inode Block Number
3. 현재 Direcotry에 등록되어 있는 파일의 Inode Block Number
새로운 File을 생성하는 과정
새롭게 생성할 Direcotry에 동일한 이름의 항이 존재하는지 확인
=> 존재하지 않으면 Inode Block 하나를 기존의 디스크에서 안 쓰는 것 중 하나로 할당 받음
=> 할당 받은 Inode Block에 파일의 정보를 저장
=> File이 저장할 데이터의 크기에 따라 기존의 디스크에서 안 쓰는 data block 중 하나 할당 받음
Hard Link VS Symbolic(Soft) Link

하드 링크는 완전히 동일한 파일의 '이름'만 다름
=> 같은 Inode를 가리킴 , 디렉토리 엔트리만 수정한다.
심볼릭 링크는 완전히 새로운 inode를 생성
=> 해당 Inode가 원본 파일 이름을 가리킨다.
==> 파일 삭제시, Hard Link는 하나라도 남아있으면 파일은 삭제되지 않고. Symbolic link는 바로 링크가 깨진다.
==> 파일 이동시, Hard Link는 동일 Inode륽 가리키므로 옮긴 위치를 기억한다. Symbolic link는 바로 링크가 꺠진다.
==> 디렉토리에 링크를 걸 경우 Hard link는 불가능하고, Symbolic link는 가능하다.
'프로그래밍 > Linux' 카테고리의 다른 글
[Linux]파일입출력(2) (0) | 2023.10.08 |
---|---|
[Linux]파일입출력(1) (0) | 2023.10.08 |
[Linux]Debug (0) | 2023.10.08 |
[Linux]컴파일 make (0) | 2023.10.08 |
[Linux]리눅스 컴파일 (0) | 2023.10.08 |