디렉토리 구조와 파일 시스템


10

디렉토리 구조파일 시스템 의 차이점은 무엇입니까 ?
유닉스 / 리눅스 디렉토리파일 시스템 은 다음과 같습니다.

다음 두 디렉토리는 분명히 디렉토리를 알고 있습니다.

  /home/abc/xyzdir1 --is a directory
  /home/abc/xyzdir2 -- is a directory

다음 세 가지 샘플은 파일 시스템을 말합니다.

/proc -- is a file system
/ -- is a file system
/bin -- is a file system

위의 코드 스 니펫에서 파일 시스템디렉토리 중 어느 것을 식별 할 수 있습니까?


파일 시스템은 하나 이상의 디렉토리를 포함합니다. 모든 디렉토리 (를 포함하여 파일 시스템의 일부입니다 /proc, /그리고 /bin난 당신이 "차이"를 식별하는 방법을 취소하고 있지 않다, 그래서 당신의 예에서).
roaima

@roaima 샘플 코드 스 니펫을 찾으십시오
Premraj

귀하의 질문은 여전히 ​​모호합니다. /proc, //bin디렉토리입니다. 그것들은 "파일 시스템"이 아닙니다. 파일 시스템의 마운트 지점 (루트)이기도 한 디렉토리를 식별하고 싶습니까?
roaima

답변:


8

사람들은 파일 시스템을 너무 신중하게 사용하지 않습니다 . 당신의 예에서, 나는 그런 말 것 /, /bin그리고 /proc(같은 전체 파티션이 있기 때문에 파일 시스템입니다 /dev/sdb1) 해당 디렉토리에 설치됩니다. 내 아치 리눅스 시스템에는 /bin파일 시스템이 없으므로이 예제는 완벽하지는 않지만 ...

% ls -lid /proc /home /boot /
2 drwxr-xr-x  17 root root 4096 Feb 24 12:12 //
2 drwxr-xr-x   4 root root 4096 May 16 14:29 /boot/
2 drwxr-xr-x   5 root root 4096 Mar 14 18:11 /home/
1 dr-xr-xr-x 116 root root    0 May 16 17:18 /proc/

아이 노드 2 번은 전통적으로 온 디스크 파일 시스템 전체의 "루트"아이 노드 (구의 다른 사용법)입니다. /, /boot그리고 /home모두 /proc커널에 의해 표시되고 디스크에 존재하지 않는 inode 번호 2가 있습니다.이 inode 번호 는 전체, 디스크상의 파일 시스템 또는 가상 파일 시스템을 나타냅니다. 해당 이름을 사용하여 마운트됩니다.

' /home/abc/xyzdir1디렉토리는 디렉토리입니다 '라는 문장 은 기본적으로 해당 이름을 사용하여 온 디스크 파일 시스템이 마운트되지 않았 음을 의미합니다. ls -lid디렉토리 에서 동일한 명령을 수행하면 다음과 같은 결과가 나타납니다.

 % ls -lid /home/bediger/src
3670039 drwxr-xr-x 29 bediger bediger 4096 May 17 19:57 /home/bediger/src/

Inode 번호 3670039는 (내 컴퓨터에) 마운트 된 온 디스크 파일 시스템에서 inode가 할당 된 것입니다 /home.

mount명령 을 호출하여 파일 시스템을 찾을 수도 있습니다 . 마운트 된 모든 파일 시스템과 마운트 위치가 나열됩니다.


"magic inode"번호는 ext2 시리즈 파일 시스템에 고유합니다. xfs 또는 btrfs와 같은 대부분의 다른 사람에게는 적용되지 않습니다.
psusi

나는 그런 말 것 /, /bin그리고 /proc전체 파티션이 ... 해당 디렉토리에 장착되어 있기 때문에 파일 시스템입니다. /proc대답이 나중에 암시하는 것처럼 이것은 사실이 아닙니다 .
Max Nanasy

1
@MaxNanasy- "파일 시스템"의 두 가지 의미가 일반적으로 사용되는 경우 (1. 트리 구조에서 디렉토리의 이름 및 배열, 2. 파일 및 디렉토리 구조화 된 데이터의 디스크 포맷 및 레이아웃 유지하고 사용하는 코드), 이해하기 쉽고, 순환 방식으로 정의되지 않고 기술적으로 올바른 용어를 생각해 내기가 매우 어렵습니다. 나는 이해하기 쉬우면서 다른 용어 대신 "파티션"을 사용하기로 결정했습니다. 더 정확한 용어를 제안 해 보시길 바랍니다.
Bruce Ediger

4

지나치게 단순화 할 위험이 있지만

  • 파일 시스템은 자동차 엔진 및 기타 내부 시스템과 비슷합니다.
  • 디렉토리 구조는 운전 장소의 맵과 같습니다.

앙코르를 요청받은 이후로

  • 파일 시스템은 오디오 / 비디오 신호 분배 / 전파의 메커니즘 (구현 세부 사항)과 유사합니다 : 아날로그 RF 방송, 디지털 RF 방송, 케이블, 인터넷, 비디오 테이프, 비디오 디스크 등
  • 디렉토리 구조는 텔레비전 프로그래밍의 내용과 유사하며, 예를 들어 코미디, 드라마, 뉴스, 다큐멘터리, 게임 쇼, 스포츠 등으로 분류됩니다.

코드를 원하면 Linux 파일 시스템이 실행중인 시스템에 속하는지 확인하는 방법 ( 유효성 검사를 수행하는 부분)에 대한이 답변의 전반부를 참조하십시오 root_dir. 브루스가 말한대로하고 있습니다. 디렉토리인지 확인하고 inode 번호가 1인지 2인지 확인하십시오.


1
좋은 ELI5이지만 코드 스 니펫 응답을 추가 할 수 있습니까? 파일 시스템과 디렉토리 중 어느 것을 식별 할 수 있습니까?
user1717828

4

필자가 유닉스에서 의미하는 파일 시스템이라고하는 방식은 디렉토리 트리 (디렉토리 구조)를 구현하는 방법,보다 정확하게는 유닉스 파일 시스템 API를 구현하는 방법이다. 루트 파일 시스템은 하나의 특정 구현으로 지원되며, 마운트 지점 디렉토리를 입력 할 때마다 다른 것으로 지원되는 하위 트리를 입력합니다.

인터페이스는 항상 동일하지만 어떤 경우에는 백엔드에 특정 디스크 파티션이 있으며 다른 경우에는 저장 장치에 쓰지 않는 프로그램이 있습니다. proc파일 시스템은 노출하는 커널 내부에 그 소프트웨어에 의해 백업됩니다; 는 tmpfsRAM, 및 다른 파일 시스템에 쓰기가 네트워크 나 다른 곳에서 쓸 수 있음을 소프트웨어에 의해 백업됩니다.

유닉스가 아닌 의미에서 파일 시스템은 데이터 스토리지를 구성하는 방법입니다. ext4, btrfs, fat, 및 ntfs파일이 의미에서 시스템뿐만 아니라에가있는 UNIXy 감각들이 파일 시스템 API를 구현합니다. proc데이터 저장소를 구성하지 않기 때문에 더 제한된 패러다임에서 파일 시스템으로 분류되지 않습니다.

TL; DR :

  • 디렉토리 구조 / 트리 = 프론트 엔드
  • 파일 시스템 = 백엔드

2

파일 시스템에 대해 이야기 할 때 디렉토리 수락은 분명하지만 파일 시스템은 사용자가 말하는 내용에 따라 다른 의미를 가질 수 있습니다.

예제에서, 나열된 모든 경로는 디렉토리이지만 그 중 일부만이 파일 시스템의 마운트 지점입니다.

df주어진 파일이나 디렉토리가 어떤 파일 시스템인지 알기 위해 명령을 사용하고 mount대부분의 Unix 및 Linux 구현 에서 명령을 사용하여 시스템에 어떤 파일 시스템이 있는지, 유형 및 마운트 지점을 파악할 수 있습니다. 예 :

$ df /proc
Filesystem     1K-blocks  Used Available Use% Mounted on
proc                   0     0         0    - /proc
$ mount | grep -w /proc
/proc is a file system of type proc

명령문 /bin은 파일 시스템이 모호하며 /bin거의 항상에 마운트됩니다 /.

$ df -k /bin
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda5      206292664 180687360  15103212  93% /
$ mount | grep -w /
/dev/sda5 on / type ext4 (rw,errors=remount-ro)

1

먼저 파일 시스템과 디렉토리에 대한 가정을 수정하십시오. 파일 시스템은 하나 이상의 디렉토리를 포함합니다. 귀하의 예를 사용하여 /proc, //bin디렉토리입니다. 그것들은 그 자체로 "파일 시스템"이 아니지만, 각각의 파일 시스템의 루트 일 수 있습니다.

파일 시스템의 마운트 지점 (루트)이기도 한 디렉토리를 식별하려면 다음과 같이 사용할 수 있습니다.

F="$PWD"    # The directory to be tested
if test -d "$F"
then
    echo "$F is a directory"
    test "X$(stat --format '%m' "$F")" = "X$PWD" && echo "$F is a mountpoint"
fi

1

파일 시스템 은 시스템을 쉽게 관리 할 수 ​​있도록 대량의 데이터를 논리적으로 구성하고 저장하는 방법입니다. 파일 시스템은 파일, 다른 파일과의 관계 및 각 파일의 속성 (파일 형식, 파일 이름, 파일 크기, 파일 소유자, 파일 타임 스탬프)로 구성됩니다.

디렉토리 : 예를 들어 Unix 파일 시스템은 본질적으로 파일과 디렉토리로 구성됩니다. 디렉토리는 다른 파일을 포함 할 수있는 특수 파일입니다. 최상위 디렉토리는 /(슬래시)이며 디렉토리는 시스템 디렉토리 바로 아래에 있습니다. 여기에 이미지 설명을 입력하십시오

/ Linux 파일 시스템의 루트

/bin 이진 실행 파일은 여기에 보관됩니다

/boot 부팅 관련 파일은 여기에 보관됩니다

/dev 장치 파일은 여기에 보관됩니다

/etc 시스템 전체 구성 파일은 여기에 보관됩니다

/home 일반 사용자의 홈 디렉토리 위치

/lib64 바이너리 실행 파일 용 라이브러리는 여기에 보관됩니다

/mnt DVD-Rom, USB 플래시 드라이브의 임시 마운트 지점.

/opt선택적 프로그램은 Windows의 프로그램 파일 과 같이 여기에 설치됩니다.

/proc 커널 의사 파일 시스템

/root 수퍼 유저 루트의 홈 디렉토리

/sbin 시스템 바이너리 실행 파일은 여기에 보관됩니다

/tmp 임시 파일은 여기에 보관됩니다

/usr 사용자 파일 시스템

/var 변수 파일은 여기에 보관됩니다

/srv 서브 폴더이며이 시스템에서 제공하는 사이트 별 데이터를 포함합니다.

src

다음 두 디렉토리는 사용자 정의 디렉토리입니다.

 /home/abc/xyzdir1 --is a directory
 /home/abc/xyzdir2 -- is a directory

그 도표는 구식입니다. FHS 3.0은 2015 년 6 월에 릴리스되었습니다. 또한 FHS는 Linux 배포에만 적용됩니다.
fpmurphy

1

path가 디렉토리인지 여부를 알려주는 명령이 필요한 경우 mountpoint (1)을 사용하십시오 .

나를 위해 그것은 인쇄

$ mountpoint /
/ is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
$ mountpoint some-file
some-file is not a mountpoint

종료 상태가 다시 동일하게 표시되므로 스크립트에서 다음과 같이 사용할 수 있습니다.

if mountpoint "$foo" >/dev/null; then
  : do mountpoint stuff
elif [ -d "$foo" ]; then
  : do directory stuff
elif [ -e "$foo" ]; then
  : do file stuff 
else
  echo "$foo does not exist!" >/2
fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.