과거에는 Linux / UNIX 파일 시스템에서 디렉토리는 파일 일 뿐이며 디렉토리 안에있는 파일의 파일 이름과 inode 번호가 포함되어 있습니다.
디렉토리의 내용 을 볼 수 있는 간단한 방법이 있습니까? 파일 이름과 inode가 저장 / 구성되는 방식을 의미합니다.
나는 , 또는 비슷한 것을 찾고 있지 않다 . 또한 디렉토리 안에있는 파일의 내용을보고 싶지 않습니다. 디렉토리의 구현을보고 싶습니다. 모든 디렉토리가 내용이있는 텍스트 파일 인 경우이 텍스트 파일의 내용을 보는 간단한 방법이있을 수 있습니다.ls
find
Linux의 bash에서는을 수행 할 수 없습니다 cat folder
. 출력은 단지 Is a directory
입니다.
업데이트 질문 유닉스 / 리눅스 파일의 디렉토리 구조 정보를 어떻게 검사합니까? 같은 문제를 해결하지만 mjturner의 것과 같은 유용한 해결책은 없습니다 .
답변
파일 시스템에 대한 inode 세부 정보를 표시하는 도구는 파일 시스템에 따라 다릅니다. 를 들어 ext2
, ext3
, ext4
파일 시스템 (가장 일반적인 리눅스 파일 시스템), 당신은 사용할 수 있습니다 debugfs
XFS를 들어, xfs_db
ZFS를 들어, 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
에서 디렉토리 엔트리의 구조와 레이아웃에 대한 자세한 정보를 찾을 수 있습니다 .
답변
선택한 프로그래밍 언어를 사용하고 디렉토리를 파일 인 것처럼 열고 결과 파일 핸들에서 바이트를 읽을 수 있습니다. 그러나 그것이 어떻게 구성되어 있는지 알지 못한다면 쓰레기가 될 수 있기 때문에 (많은 인식 가능한 문자열이있는) 쓰레기이기 때문에 많이 말하지 않을 것입니다. 그것이 구성되는 방법은 문제의 파일 시스템에 대한 구현 문제와 거의 같습니다. 이 내용을 자세히 살펴 보려면 먼저을 읽으십시오 man dirent.h
. 그것은 당신의 공상을 치는 것에 대해 더 당신을 지적하기에 충분해야합니다.
답변
시도해 볼 수 있습니다 (파티션은 예입니다).
sudo debugfs /dev/xvda1
덤프를 사용하여 inode 데이터를 파일에 씁니다.
sudo dumpe2fs /dev/xvda1
남자는 당신의 친구입니다, 이것들은 당신에게 몇 가지 아이디어를 줄 것입니다.