2012-06-23 3 views
2

все мы знаем, что в каталоге linux есть специальный файл, содержащий имя файла и количество inode составных файлов. Я хочу прочитать содержимое этого файла каталога с помощью стандартной утилиты командной строки.читать файл каталога

кошка. дает ошибку, что я не могу открыть каталог. Однако, видимо, vim может понять содержимое этого файла, используя, вероятно, readdir. Он отображает содержимое файла каталога в форматированном виде. Я хочу сырое содержимое файла. Как это возможно ??

+0

Зачем вам это нужно, если это возможно (что я не думаю, что это так)? – Mat

+0

просто для этого. Это можно сделать с помощью программы C, но я думал о том, чтобы делать это, используя стандартные доступные инструменты. –

+0

Фактически вы можете прочитать содержимое каталога (не сырое содержимое) с помощью команд opendir и readdir. Вот ссылка на образец программы http://dl.dropbox.com/u/56211033/myls.cpp –

ответ

0

Я думаю, stat может быть той командой, которую вы ищете.

+0

не могли бы вы уточнить ответ? Я попробовал stat с printf, но ничего не давал –

+0

Просто используйте 'stat', как вы бы использовали' cat'. Например, 'stat/bin'. –

+0

У меня есть каталог testdir, содержащий три файла a, b и c. Когда я устанавливаю файл, я получаю некоторый outpu содержащий доступ, изменяю время и все, но он не содержит никакого вывода для файлов a, b и c. Я предполагаю, что файл каталога должен содержать имя содержащихся файлов. –

1

Насколько я могу судить, это невозможно. Я был уверен, что dd бы это сделать, а потом я нашел следующий

«каталог» потерпит неудачу, если файл не является каталогом. Большинство операционных систем не позволяют ввода/вывода в каталог, поэтому этот флаг имеет ограниченную утилиту.

http://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html

Так что я думаю, что у вас есть свой ответ там. dd поддерживает его, как и, вероятно, ряд других утилит, но это не значит, что Linux позволяет это.

+0

просто из любопытства .. почему я не могу прочитать содержимое файла каталога в необработанном формате. В конечном счете, это файл с некоторым текстом, правильно?. Поскольку вызов readdir (объявленный в dirent.h) может это сделать, я думаю, что должен быть ручной способ сделать это, если readdir внутренне использует системный вызов. –

+1

Возможно, дизайнеры API не могли придумать вескую причину, чтобы разрешить это, поэтому они отказались от этого. Мне кажется, почему они запрещают писать. Если вы можете написать в каталог, вы можете повредить файловую систему. Я не думаю, что вы могли бы сделать один и тот же аргумент для чтения, но, как минимум, ваш код будет очень привязан к особенностям типа файловой системы. Способ хранения каталогов - это функция типа файловой системы (ext2, ext3 и т. Д.), А не сама Linux. Пользователи файловой системы должны заботиться только об особенностях файловой системы, а не о ее реализации. –

Смежные вопросы