Философия Unix - избегайте хранения данных и программ в двоичных файлах
Я не могу понять причину следующей философии Unix.
С сайта LINFO: Важный принцип философии Unix - избегать хранения данных и программ в двоичных файлах, насколько это практически возможно. Скорее, они должны храниться в виде простых текстовых файлов, потому что текст является универсальным интерфейсом между программами и людьми. Именно использование текстовых выходов и входных данных позволяет программам в Unix-подобных операционных системах работать вместе так легко и эффективно (т. Е. Посредством использования каналов). Хотя текстовые файлы могут быть не такими быстрыми (или такими маленькими), как бинарные файлы, это легко компенсируется высокими скоростями современных процессоров (и низкой стоимостью памяти и хранилища).
Пожалуйста, объясните, если это возможно.
1 ответ
Если коротко ответить на ваш вопрос, то приведенная вами статья является своего рода неправильной. Философия Unix заключается в том, что все является файлом, но это не означает текстовый файл. Конкретным примером этого были бы сокеты. Смотрите, например , ответ Жиля здесь: сокет - это файл, но это не обязательно означает, что у него есть имя файла и он не должен существовать на жестком диске, а данные, передаваемые через сокеты, не обязательно являются текстовыми, а представляют собой конкретные последовательности байтов.
Сами трубы, в частности анонимные трубы, как в |
Сами могут быть файлы без существующих на диске. Данные, передаваемые по каналам, могут быть любого типа - двоичные или текстовые. Одним из примеров этого является передача сжатого архива ISO-образа в dd
Команда записать его на диск.
Помимо прочего, это также не обязательно верно, что текстовые файлы могут быть медленнее, чем двоичные файлы. Если программа, используемая для чтения текстового файла, использует (правильно) преимущество системного вызова mmap(), он полностью или частично отображает файл в ОЗУ, и, как вы знаете, ОЗУ работает быстро. Всегда задавался вопросом, почему tail
может быть очень и очень быстро получить последние несколько строк файла размером в гигабайты? Хорошо, если вы бежите strace
анализатор системных вызовов включен tail
, это покажет вам, что есть mmap()
происходят системные вызовы.
Скорость процессоров здесь также не имеет значения, и все преимущества наличия многоядерных процессоров могут быть сведены на нет, если программа, используемая для чтения файла, записана как последовательная программа (а не как параллельная программа, следовательно, не может использовать многоядерных процессоров) или существует проблема со стенкой памяти, когда ширина шины памяти / скорость памяти не могут поддерживать скорость процессора.
В соответствии с этим:
Скорее, они должны храниться в виде простых текстовых файлов, потому что текст является универсальным интерфейсом между программами и людьми.
Да, текст может быть удобен для связи между машиной и человеком, но в случае безопасности есть причина, по которой мы хотели бы хранить данные в зашифрованном двоичном виде, где данные злоумышленника будут выглядеть только как последовательность байтов, нечитаемый беспорядок.