2009-11-02 4 views
1

디렉토리가 파일의 inode 번호와 이름을 포함하는 유닉스의 파일이라는 것을 알고 있습니다. 이걸 어떻게 보죠? 나는 cat 또는 less를 디렉토리에서 사용할 수없고, vi에서 열면 파일 목록을 보여 주지만, inode 번호는 없다.Unix에서 디렉토리를 파일로 읽으려면 어떻게해야합니까?

+0

디렉터리의 원시 콘텐츠를 가져 오는 API가 없습니다. 그러나 디버그 나 교육 목적으로'debugfs'를 사용할 수 있습니다 (ext2 fs에만 해당). 'debugfs -R 'dump_inode/your_dir tmpfile'/ dev/sda1' 다음에'hexdump -C tmpfile'을 사용할 수 있습니다. – Jezz

답변

7

(? 그것은 , 그것은 프로그래밍 질문되지이다), 당신은 opendir, readdirclosedir 기능을 확인해야 프로그래밍 질문입니다. 이것들은 Single UNIX Spec의 일부입니다.

#include <sys/types.h> 
#include <dirent.h> 

DIR *opendir (const char *dirname); 
struct dirent *readdir(DIR *dirp); 
int closedir(DIR *dirp); 

dirent.h 파일은 적어도 포함하는, 당신이 필요로하는 구조를 가져야한다 :

char d_name[] name of entry 
ino_t d_ino  file serial number 

readdir 맨을위한 here을 참조하십시오 - 그것은 다른 사람에 대한 링크가 포함되어 있습니다.

디렉토리 항목에 저장된 파일에 대한 정보의 양은 최소화되어 있습니다. inode 자체에는 시간, 크기, 소유자, 사용 권한 등과 같은 내용이 실제 파일 내용에 대한 중요한 포인터와 함께 stat 함수에서 가져온 내용이 들어 있습니다.

+0

아, 알겠습니다. 그러나 파일의 실제 내용을 볼 수있는 방법이 있습니까? 아마도이 예가 더 명확하게 나타납니다. 설치 프로그램에서 "less/bin/ls"를 입력하여 ls의 내용을 볼 수 있습니다. 분명히 어떤 식 으로든 읽을 수는 없지만 여전히 볼 수 있습니다. 어떤 방식 으로든 디렉토리에 대해 동일한 작업을 수행 할 수 있습니까? 실용적인 질문이 아닙니다. 유닉스에서 사용자가 이와 같은 작업을 수행 할 수 있는지 궁금합니다. –

+1

필자는 이것을 할 수있는 사용자 수준 명령을 본 적이 없습니다 (존재하지 않는다는 것을 의미하지는 않습니다).그러나 약간의 작업만으로, 당신이 원하는 디렉토리의 inode를 (부모 디렉토리로부터) 얻을 수 있고, 하드 디스크에 실제 구조를 걸어 갈 수 있습니다. 필요한 권한이 있다고 가정합니다. – paxdiablo

+0

완벽한, 감사합니다. 쉬운 해결책이없는 것처럼 보이지만, 약간의 인터넷 검색은 조사 할 가치가있는 C 기능이 있음을 보여 줬습니다. –

1

stat command이 주문 상태 일 수 있습니다. 기사에서이 이후

stat /etc/passwd 

    File: `/etc/passwd' 
    Size: 2911    Blocks: 8 IO Block: 4096 regular file 
    Device: fd00h/64768d  Inode: 324438 Links: 1 
    Access: (0644/-rw-r--r--) Uid: (0/ root) Gid: (0/ root) 
    Access: 2008-08-11 05:24:17.000000000 -0400 
    Modify: 2008-08-03 05:11:05.000000000 -0400 
    Change: 2008-08-03 05:11:05.000000000 -0400 
+0

stat 명령은 파일이나 디렉토리에 대한 기본 정보를 제공하지만, 내부 파일. 예를 들어,/etc가 가리키는 디렉토리에서 "stat"를 사용하면 다음과 같이 표시됩니다. 234881026 2995 drwxr-xr-x 91 루트 휠 0 3094 "Oct 29 11:27:39 2009" "Sep 26 23:09:45 2009 "9 월 26 23:09:45 2009"4096 0 0/private/etc –

+0

statvfs()는 일반적으로 사용하는 더 바람직한 함수입니다. –

6

이전 버전 - System 7, System III, 초기 시스템 V - 실제로 2 바이트의 inode 번호와 14 개의 제한이있는 오래된 Unix 파일 시스템의 경우 디렉토리를 열어 내용을 메모리로 읽을 수있었습니다 파일 이름의 바이트.

이국적인 파일 시스템이 보편화되면서 디렉토리의 내용을 파싱하는 것이 점점 더 중요해 졌기 때문에 대신 opendir(), readdir(), closedir() 패밀리가 사용되어야했습니다.

마지막으로 지난 10 년 동안 대부분의 시스템에서 디렉토리를 읽을 수없는 지점에 도달했습니다. (주로 fchdir()과 같은 연산이 작동 할 수 있도록) 열 수 있으며 opendir() 함수 호출을 사용하여 호출 할 수 있습니다.

관련 문제