![Linux 파일 일관성](https://linux55.com/image/24165/Linux%20%ED%8C%8C%EC%9D%BC%20%EC%9D%BC%EA%B4%80%EC%84%B1.png)
모든 종류의 파일(이미지, 바이너리 실행 파일, 스크립트, 디렉토리, zip 파일 등)이 포함된 폴더에 있는 경우 왜 을 클릭하면 ls -l
다음과 같은 출력이 테이블에 표시됩니까? 모든 파일?
이는 파일 자체가 메타데이터가 첨부된 통합 슈퍼파일에 배치되는 것과 비슷하며, 프로세스의 제어 블록 구조와 약간 비슷합니다.
Unix나 Linux와 관련이 없는 파일에서는 왜 문제가 없을 것이라고 생각하시나요? Windows 세계의 파일을 처리하기 위한 유사한 파일 시스템 전처리기가 있습니까? 아니면 크로스 플랫폼 파일이 필요하지 않습니까? (뭔가 있겠지!)
어떤 방법이 있나요?바라보다이 히든(?) 레이어? (Lisp 등은 물론이고 HTML도 그냥 읽는 것만으로는 이해하기 어렵지만, 보면 바로 이해가 됩니다.)
답변1
거의 정확히 맞는 답을 찾았습니다. 몇 가지 세부 사항만 입력하면 됩니다.
대부분의 경우(특수 파일 제외) 모든 파일은 정확히 동일하게 취급되며 디렉터리("폴더"라고도 함)는 실제로 파일로 구현됩니다. 파일은 실제로 일련의 디스크 블록입니다. 작성하는 "메타데이터"를 "인덱스 노드"라고 합니다(참조:슈퍼블록, 아이노드, 디렉토리 항목, 파일이란 무엇입니까?, 그리고인덱스 노드란 무엇입니까?이 웹사이트에서). 디렉토리(또는 "폴더")는 파일 이름을 inode와 일치시키는 방법일 뿐입니다. 이름(파일 형식, 권한, 소유권 등) 외에도 메타데이터도 inode에 존재합니다. 메타데이터는 주로 액세스 속도와 압축을 위해 바이너리 형식입니다. XML이나 다른 텍스트 형식을 구문 분석하는 데 시간이 너무 오래 걸립니다.
다음 명령을 사용하여 파일 메타데이터의 텍스트 표현을 볼 수 있습니다 stat
. stat /bin/cat
관심이 있을 수도 있습니다. stat
GNU 명령이므로 보편적으로 사용할 수는 없지만 대부분의 Linux 배포판에는 이 명령이 있어야 합니다.
"외부" 파일과 관련하여 파일/inode/디렉토리 개념은 운영 체제가 오늘날보다 훨씬 더 가변적이던 시절부터 유래되었습니다. Unix와 원래 파일 시스템의 설계자들은 오늘날 매우 이상하게 여겨지는 운영 체제와 파일 시스템에 대한 광범위한 경험을 가지고 있었습니다. 파일/아이노드/디렉토리 개념이 모든 경험의 특징임이 거의 확실하므로 오늘날의 보다 동질적인 운영 체제에서 제공하는 "파일이란 무엇인가"의 약간의 변형은 실제로 문제가 되지 않습니다. 20년 전의 상황을 이해하려면 다음을 참조하세요.파일 시스템은 커널에 속합니다. 최근 콘텐츠를 보려면 다음을 참조하세요.못생긴 이름. 이것은 Russ Cox의 블로그 게시물입니다. 블로그 게시물에 인용된 Rob Pike 논문도 읽어보시기 바랍니다. 당신은 그것으로부터 영감을 받을 것입니다.
답변2
모든 파일은 기본적으로 바이트 시퀀스입니다.그 안에 무엇이 들어있는지는 중요하지 않습니다. 시스템은 파일에 몇 바이트가 있는지 알고 이를 저장할 장소를 마련하면 됩니다. 파일의 내용이 무엇이든 그것은 단지 바이트 묶음일 뿐입니다.
각 파일에 대해 시스템은 일부 파일도 저장합니다.메타데이터. 실제로 메타데이터는 파일 콘텐츠와 독립적입니다. 콘텐츠는 이러한 메타데이터 항목 중 하나라고 말할 수 있습니다(그러나 콘텐츠의 크기는 가변적이고 매우 클 수 있으므로 일반적으로 별도로 간주됩니다). 저장되는 메타데이터는 다음에 따라 다릅니다.파일 시스템유형. Unix 파일 시스템은 일반적으로 ls
권한, 수정 시간 등 표시되는 정보를 제공합니다. 파일 이름도 메타데이터의 일부이며 특별한 상태를 갖습니다. 즉, 두 파일이 동일한 디렉터리에서 동일한 이름을 가질 수 없습니다.
파일은 다음과 같이 구성됩니다.목차. 디렉터리에는 일반 파일, 하위 디렉터리 및 다음과 같은 일부 특수 파일 형식이 포함될 수 있습니다.심볼릭 링크. 라는 디렉토리가 있습니다.루트 디렉토리모든 디렉터리는 하위 디렉터리입니다.N시간을 삭제합니다.
파일 경로는 루트 디렉터리에서 시작하여 파일을 찾는 방법을 나타냅니다. 탐색할 각 디렉터리는 루트부터 아래로 순차적으로 제공되며, /
각 디렉터리 이름 뒤에는 슬래시 문자가 붙습니다. 예를 들어 는 /usr/bin/env
루트 디렉터리에서 시작하여 해당 하위 디렉터리 /
로 이동하고 usr
, 해당 하위 디렉터리로 이동 한 다음 해당 하위 디렉터리에서 항목을 bin
찾는 것을 의미합니다 .env
디렉토리의 내용을 나열할 때,핵심(파일 시스템 드라이버 포함) 작업은 디스크의 디렉터리를 나타내는 바이트를 읽고 이를 파일 이름, 메타데이터 및 콘텐츠 위치 목록으로 변환하는 것입니다. 프로그램 ls
은 다음과 같은 프로그램을 호출합니다.opendir
디렉토리를 열고 반복적으로 호출하여 readdir
디렉토리의 각 항목을 차례로 읽습니다. 즉, 디렉토리에 있는 파일 이름 목록(하위 디렉토리 및 기타 특수 파일 포함)을 가져옵니다. 를 사용하면 ls -l
프로그램 ls
은 이름뿐 아니라 파일에 대한 더 많은 정보가 필요하므로 다음을 호출합니다.stat
각 파일에 대한 메타데이터를 검색합니다.
일부 운영 체제에서는 텍스트 보기 프로그램을 사용할 수 있습니다(예 cat
: Linux에서는 이를 허용하지 않습니다. 이 debugfs
프로그램을 사용하여 파일 시스템을 탐색할 수 있습니다(읽기 전용 모드에서만 사용하십시오!).