4월, 2016의 게시물 표시

리눅스 커널 파일시스템 기본 [1]

이미지
파일시스템이란 하드디스크, SSD, 플래시 메모리와 같은 저장장치 위에 파일과 디렉터리를 체계적으로 정리(organize)하는 방법을 말합니다. 파일시스템의 종류는 매우 다양합니다 (FAT, ext4, btrfs, NTFS 등). 그리고 한 대의 컴퓨터에서 같은 파일시스템 종류가 여러 개 동시에 사용될 수도 있습니다. 파일시스템마다 파일과 디렉터리, 사용자 데이터, 그리고 내부적으로 사용하는 메타데이터를 관리하는 방식이 서로 다르긴 하지만, 거의 모든 파일시스템에 공통적으로 사용되는 몇 가지 기본 개념들이 있습니다 (이 중 일부 개념은 저장장치(storage)와 메모리 양쪽에 존재하고, 일부는 메모리에만 존재합니다.): 슈퍼블록(superblock) : 해당 파일시스템의 기본 정보를 담고 있습니다. 예를 들어 블록 크기, 루트 아이노드, 파일시스템 전체 크기 같은 정보죠. 슈퍼블록은 저장장치와 메모리 모두에 존재하는데, 메모리에는 속도 향상을 위한 캐싱 용도로 복사되어 있습니다. 파일(file) :현재 열려있는 파일에 관한 정보(예: 현재 읽기 위치 등)를 담고 있는데, 이 정보는 메모리에만 존재합니다. 아이노드(inode) : 아이노드는 디스크에 저장된 파일을 고유하게 식별하는 역할을 합니다. 아이노드는 파일 크기, 접근 권한, 파일 종류 등 다양한 속성도 함께 가지고 있죠. 이 아이노드는 저장장치와 메모리 양쪽에 존재하며, 메모리에는 캐시 목적 등으로 복사되어 있습니다. 덴트리(dentry) : 덴트리(dentry)는 파일 이름과 아이노드(inode)를 연결하는 역할을 합니다. 덴트리 역시 저장장치와 메모리 양쪽에 존재하며, 메모리에는 캐싱 목적으로 복사되어 있습니다. struct ext4_inode 내부의 i_block에서 스토리지의 각 block들을 가리킨다. EXT4_N_BLOCKS 크기는 15로 ext4가 지원하는 데이터 블록 주소 지정 방식의 표준 크기이며, 이를 통해 작은 파일부터 아주 큰 파일까지 효율적으로 저장 위치를 관리할 수 있습니...

[Bash] 배시 기본 {01}

참고문헌: Learning the bash shell. 캐머런 뉴햄, 빌 로젠블랫 저, 배장렬 역 O'Reilly, 한빛미디어 명령을 입력하면 몇 가지 이벤트 계층(event layer)이 발생하여 명령을 처리하지만 여기서는 최상위 계층인 셸(shell)만을 다룬다.  셸이란 운영체제의 사용자 인터페이스로서 사용자가 입력한 명령(command line)을 운영체제가 이해할 수 있는 명령(instructions)으로 바꾸고 운영체제가 처리한 결과를 사용자에게 돌려주는 일종의 프로그램이다. 셸 자체는 리눅스(유닉스)가 아니라 사용자 인터페이스이다. 유닉스는 사용자 인터페이스와 운영체제가 분리된 최초의 운영체제다. 자신의 셸이 무엇인지 확인하고 싶다면 다음을 입력한다. $ echo $SHELL 배시가 시스템의 어느 디렉토리에 있는지 알고 싶다면 다음을 입력한다. $ whereis bash --- TIP --- $ cd - // 이전 디렉토리로 돌아간다. ----------- ls 명령 duchess 파일이 있을 때 ls duchess를 치면 duchess만 표시된다. -l 옵션을 사용하면 해당 파일의 소유자, 크기, 마지막 수정 날짜와 같은 정보를 출력하고  -a 옵션을 사용하면 숨긴파일을 표시한다. 셸이 제공하는 와일드카드를 이용하면 특정 파일명을 한 번에 지정할 수 있다. ? : 문자 하나 * : 문자 여러 개 [set] : set에 있는 임의 문자 [!set] : set에 없는 임의 문자 set에는 문자 리스트 [abc] or [-_ ] or [!0-9]나 어떤 범위 [a-z]를 말한다. 느낌표 자체를 의미하고 싶으면 역슬래시를 입력한다.(\!) 대소문자를 섞어서 사용하는 것은 아무런 의미도 없다. [a-Z], [A-z]