Linux / UNIX 파일 시스템에서 디렉토리의 내용을 보는 간단한 방법


27

과거에는 Linux / UNIX 파일 시스템에서 디렉토리는 파일 일 뿐이며 디렉토리 안에있는 파일의 파일 이름과 inode 번호가 포함되어 있습니다.

디렉토리의 내용 을 볼 수 있는 간단한 방법이 있습니까? 파일 이름과 inode가 저장 / 구성되는 방식을 의미합니다.

나는 , 또는 비슷한 것을 찾고 있지 않다 . 또한 디렉토리 안에있는 파일의 내용을보고 싶지 않습니다. 디렉토리의 구현을보고 싶습니다. 모든 디렉토리가 내용이있는 텍스트 파일 인 경우이 텍스트 파일의 내용을 보는 간단한 방법이있을 수 있습니다.lsfind

Linux의 bash에서는을 수행 할 수 없습니다 cat folder. 출력은 단지 Is a directory입니다.

업데이트 질문 유닉스 / 리눅스 파일의 디렉토리 구조 정보를 어떻게 검사합니까? 같은 문제를 해결하지만 mjturner의 것과 같은 유용한 해결책은 없습니다 .


vi <folder>당신의 필요에 맞는 것 같지 않습니까? 그냥 언급
Lenniey

vim <DIR> 이것이 당신이 원하는 것입니까?
7171u

우선 stat명령을 살펴보십시오 . stat folder.
slm


2
나는 역사적으로 효과 cat가 있었을 것이라고 믿는다 . 그러나 그 접근 방식은 수십 년 전에 사용되지 않았습니다. 실제 파일 시스템 스토리지를 보는 직접적인 방법을 모르겠습니다. 대신, 사용중인 기본 파일 시스템에 관계없이 동일하게 유지되는 표준화 된 형식으로 정보를 리턴하기위한 새로운 시스템 호출이 있습니다.
kasperd

답변:


35

파일 시스템에 대한 inode 세부 정보를 표시하는 도구는 파일 시스템에 따라 다릅니다. 를 들어 ext2, ext3, ext4파일 시스템 (가장 일반적인 리눅스 파일 시스템), 당신은 사용할 수 있습니다 debugfsXFS를 들어, xfs_dbZFS를 들어, zdb. 대한 btrfs몇 가지 정보를 사용하여 볼 수 있습니다 btrfs명령을 사용합니다.

예를 들어,의 디렉토리를 탐색합니다 ext4(이 경우 파일 시스템 /입니다 dev/sda1) :

# ls src
Animation.js    Map.js        MarkerCluster.js    ScriptsUtil.js
Directions.js   MapTypeId.js  markerclusterer.js  TravelMode.js
library.js      MapUtils.js   Polygon.js          UnitSystem.js
loadScripts.js  Marker.js     Polyline.js         Waypoint.js

# ls -lid src
664488 drwxrwxrwx 2 vagrant vagrant 4096 Jul 15 13:24 src

# debugfs /dev/sda1
debugfs: imap <664488>
Inode 664488 is part of block group 81
        located at block 2622042, offset 0x0700
debugfs: dump src src.out
debugfs: quit

# od -c src.out
0000000 250   #  \n  \0  \f  \0 001 002   .  \0  \0  \0 204 030  \n  \0
0000020  \f  \0 002 002   .   .  \0  \0 251   #  \n  \0 024  \0  \f 001
0000040   A   n   i   m   a   t   i   o   n   .   j   s 252   #  \n  \0
0000060 030  \0  \r 001   D   i   r   e   c   t   i   o   n   s   .   j
0000100   s  \0  \0  \0 253   #  \n  \0 024  \0  \n 001   l   i   b   r
0000120   a   r   y   .   j   s  \0  \0 254   #  \n  \0 030  \0 016 001
0000140   l   o   a   d   S   c   r   i   p   t   s   .   j   s  \0  \0
0000160 255   #  \n  \0 020  \0 006 001   M   a   p   .   j   s  \0  \0
0000200 256   #  \n  \0 024  \0  \f 001   M   a   p   T   y   p   e   I
0000220   d   .   j   s 257   #  \n  \0 024  \0  \v 001   M   a   p   U
0000240   t   i   l   s   .   j   s  \0 260   #  \n  \0 024  \0  \t 001
0000260   M   a   r   k   e   r   .   j   s  \0  \0  \0 261   #  \n  \0
0000300 030  \0 020 001   M   a   r   k   e   r   C   l   u   s   t   e
0000320   r   .   j   s 262   #  \n  \0 034  \0 022 001   m   a   r   k
0000340   e   r   c   l   u   s   t   e   r   e   r   .   j   s  \0  \0
0000360 263   #  \n  \0 024  \0  \n 001   P   o   l   y   g   o   n   .
0000400   j   s  \0  \0 264   #  \n  \0 024  \0  \v 001   P   o   l   y
0000420   l   i   n   e   .   j   s  \0 265   #  \n  \0 030  \0 016 001
0000440   S   c   r   i   p   t   s   U   t   i   l   .   j   s  \0  \0
0000460 266   #  \n  \0 030  \0  \r 001   T   r   a   v   e   l   M   o
0000500   d   e   .   j   s  \0  \0  \0 267   #  \n  \0 030  \0  \r 001
0000520   U   n   i   t   S   y   s   t   e   m   .   j   s  \0  \0  \0
0000540 270   #  \n  \0 240 016  \v 001   W   a   y   p   o   i   n   t
0000560   .   j   s  \0 305 031  \n  \0 214 016 022 001   .   U   n   i
0000600   t   S   y   s   t   e   m   .   j   s   .   s   w   p  \0  \0
0000620 312 031  \n  \0   p 016 022 001   .   U   n   i   t   S   y   s
0000640   t   e   m   .   j   s   .   s   w   x  \0  \0  \0  \0  \0  \0
0000660  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0

위의 디렉토리 src( 664488) 의 inode를 찾은 다음 파일의 내용을 파일로 덤프 한 다음를 src.out사용하여 표시합니다 od. 보시다시피, 해당 디렉토리에있는 모든 파일의 내용 ( Animation.js등)이 덤프에 표시됩니다.

이것은 단지 시작합니다 - 참조 debugfs매뉴얼 페이지 또는 유형 help내를 debugfs자세한 내용은.

을 사용한다면 커널 문서ext4 에서 디렉토리 엔트리의 구조와 레이아웃에 대한 자세한 정보를 찾을 수 있습니다 .


이것은 좋은 대답입니다. 고마워요! 이제이 출력에 inode 번호를 십진수 표기법으로 표시하는 방법을 조사하려고합니다. 출력의 파일 이름 이외의 값은 inode 번호라고 생각합니다. 아니면 내가 틀렸어?
네버 랜드

@Neverland 네, inode 번호입니다. od -x디렉토리 항목 파일을 덤프하는 데 사용하면 더 명확 할 것 입니다.
mjturner

0

선택한 프로그래밍 언어를 사용하고 디렉토리를 파일 인 것처럼 열고 결과 파일 핸들에서 바이트를 읽을 수 있습니다. 그러나 그것이 어떻게 구성되어 있는지 알지 못한다면 쓰레기가 될 수 있기 때문에 (많은 인식 가능한 문자열이있는) 쓰레기이기 때문에 많이 말하지 않을 것입니다. 그것이 구성되는 방법은 문제의 파일 시스템에 대한 구현 문제와 거의 같습니다. 이 내용을 자세히 살펴 보려면 먼저을 읽으십시오 man dirent.h. 그것은 당신의 공상을 치는 것에 대해 더 당신을 지적하기에 충분해야합니다.


3
리눅스는 이것을 허용하지 않습니다 ... 그리고 실제로 파일 시스템에있는 것이 아니라 통합 형식으로 데이터를 반환하는 대부분의 시스템이 생각합니다.
Random832

2
예전에는 아주 오래된 시절에 가능했습니다. 이 증거는 K & R 2nd Edn에서 확인할 수 있습니다. 그러나 더 이상 불가능합니다. 이 천년의 대부분 동안 가능하지 않았습니다.
Jonathan Leffler

이것은 유닉스 시스템에서 가능하지만 불필요합니다. 원하는 경우 cat을 사용하여 내용을 표시 할 수 있지만 hd (xxd의 Unix 해당)가 더 유용 할 것입니다. Linux 기반 시스템은 실수로 가정하여 읽을 디렉토리 파일을 열면 오류를 반환하는 것으로 나타났습니다. "멍청한 사람들이 멍청한 짓을하지 못하게함으로써 영리한 사람들이 영리한 일을 멈출 수 있습니다."
FJL

0

시도해 볼 수 있습니다 (파티션은 예입니다).

sudo debugfs /dev/xvda1                 

덤프를 사용하여 inode 데이터를 파일에 씁니다.

sudo dumpe2fs /dev/xvda1

남자는 당신의 친구입니다, 이것들은 당신에게 몇 가지 아이디어를 줄 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.