Философия Unix - избегайте хранения данных и программ в двоичных файлах [закрыто]

Я не могу понять причину, лежащую в основе следующей философии Unix.

Из веб-сайта LINFO : Важный принцип философии Unix - избегать хранения данных и программ в двоичных файлах, насколько это возможно. Скорее, они должны храниться в простых текстовых файлах, потому что текст - это универсальный интерфейс между программами и людьми. Именно использование текстовых выходных и входных данных позволяет программам в Unix-подобных операционных системах так легко и эффективно работать вместе (то есть посредством использования каналов). Хотя текстовые файлы могут быть не такими быстрыми (или маленькими), как двоичные файлы, это легко компенсируется высокими скоростями современных процессоров (и низкой стоимостью памяти и хранилища).

Пожалуйста, объясните, если возможно.

-3
задан 18 January 2018 в 22:56

1 ответ

Если коротко ответить на ваш вопрос, то цитируемая вами статья в некотором роде неверна. Философия Unix заключается в том, что все является файлом, но это не означает текстовый файл . Конкретным примером этого были бы сокеты. Смотрите, например, ответ Жиля здесь: сокет - это файл, но это не обязательно означает, что у него есть имя файла и он не должен существовать на жестком диске, а данные, передаваемые через сокеты, не обязательно являются текстовыми, но конкретные последовательности байтов.

Сами каналы, в частности анонимные каналы, как в |, сами могут быть файлами, не существующими на диске. Данные, передаваемые по каналам, могут быть любого типа - двоичные или текстовые. Одним из примеров этого является передача сжатого архива iso-образа в команду dd для записи его на диск.

Помимо прочего, также не обязательно, что текстовые файлы могут быть медленнее, чем двоичные файлы. Если программа, которую вы используете для чтения текстового файла, использует (правильное) преимущество системного вызова mmap () , это полностью или частично отображает файл в ОЗУ, и, как вы знаете, ОЗУ работает быстро. Вы когда-нибудь задумывались, почему tail может быть очень-очень быстрым при получении последних нескольких строк файла размером в гигабайты? Что ж, если вы запустите strace анализатор системных вызовов на tail, он покажет вам, что происходит mmap() системных вызовов.

Скорость процессоров здесь также не имеет значения, и все преимущества наличия многоядерных процессоров могут быть сведены на нет, если программа, используемая для чтения файла, записана как последовательная программа (а не как параллельная программа, следовательно, может не использовать несколько ядер) или существует проблема со стенкой памяти , где ширина шины памяти / скорость памяти не могут поддерживать скорость процессора.

Относительно этого:

Скорее, они должны храниться в текстовых файлах, потому что текст является универсальным интерфейсом между программами и людьми.

Да, текст может быть удобен для связи между машиной и человеком, но в случае безопасности есть причина, почему мы хотели бы хранить данные в зашифрованном двоичном виде, где данные злоумышленника будут выглядеть только как последовательность байты, нечитаемый беспорядок.

4
ответ дан 18 January 2018 в 22:56

Другие вопросы по тегам:

Похожие вопросы: