Файлы конфигурации и Двоичные файлы

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

0
задан 6 January 2019 в 02:50

3 ответа

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

Файл конфигурации hello.conf

WHAT=World

Этот простой текстовый файл просто устанавливает переменную конфигурации. Это устанавливает переменную WHAT к значению World.

Теперь рассмотрите простой файл сценария, который использует значение, определенное в файле конфигурации hello.conf.

Файл сценария hello.sh

#!/bin/bash

source hello.conf
echo "Hello, $WHAT"

Первая строка говорит ОС, как обработать этот файл. В этом случае это будет выполнено /bin/bash программа. bash знает синтаксис, который мы используем в этом сценарии и действиях соответственно. Это: это получает (=reads) наш файл конфигурации hello.conf и затем может использовать все определения, которые мы сделали в том файле. Затем, это повторяет строку Hello, сопровождаемый содержанием переменной $WHAT из файла конфигурации. Если мы запускаем тот скрипт, мы добираемся:

user@host # ./hello.sh
Hello, World

Теперь мы могли изменить файл конфигурации для содержания, например, WHAT=Jim вместо этого. Мы можем теперь выполнить тот же самый файл сценария без любого изменения, но это теперь распечатает

user@host # ./hello.sh
Hello, Jim

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

Теперь для чего-то более сложного: двоичный файл. Я записал простую программу в названном языке программирования C. Специальная вещь об этом состоит в том, что мы сначала пишем исходный код в текстовом файле и затем переводим (мы говорим что компиляция), что текстовый файл в машиночитаемую (двоичную) форму. Эта двоичная форма больше не человекочитаема (хорошо, по крайней мере, не легко), но машина может считать ее отлично.

C исходный файл hello.c

#include <stdio.h>
#include <string.h>

int main(void)
{
    FILE *file = fopen( "hello.conf", "r" );
    if (file) {
        char line[1024];
        char what[256];
        while (fgets(line, sizeof(line), file)) {
            if (sscanf(line, "WHAT=%s", what) == 1) {
                printf( "Hello, %s\n", what );
                break;
            }
        }
        fclose(file);    
    }    
    return 0;
}

Как можно уже видеть, это - намного все более сложный код, чем мы использовали для hello.sh и я уже опустил обработку ошибок для упрощения его. Однако этот код бесполезен к ОС. Мы сначала должны скомпилировать (переводят) его в машиночитаемую форму. Это - то, для чего компиляторы, и я буду использовать gcc (стандарт C компилятор) здесь. Так:

user@host # gcc hello.c -o hello
user@host # ls -l
-rwxr-xr-x 1 user user 8536 Jan  6 12:43 hello
-rw-r--r-- 1 user user  423 Jan  6 12:16 hello.c
-rw-r--r-- 1 user user   11 Jan  6 12:18 hello.conf
-rwxr-xr-x 1 user user   60 Jan  6 12:26 hello.sh

Компилятор произвел двоичный файл hello (без любого расширения), и мы можем теперь выполнить это:

user@host # ./hello
Hello, Jim

Теперь мы можем снова изменить определение в hello.conf изменить поведение нашей программы в двоичном представлении hello не изменяя исходный код и перекомпилировав его. Я мог теперь отправить тот двоичный файл hello без C исходный код (hello.c) кому-то еще и он может выполнить тот двоичный файл вместе с надлежащим файлом конфигурации hello.conf.

Двоичные файлы (как скомпилированная программа C) и файлы сценария (как сценарии удара) имеют различные различия, некоторые из которых:

  • Двоичные файлы (почти) неизменны, т.е. пользователь не может изменить код, который они выполняют (только данные, которыми они управляют на). Они ведут себя, поскольку они были записаны и скомпилированы.
  • Двоичные файлы обычно работают быстрее, чем сценарии, потому что проверка синтаксиса и была уже сделана во время компиляции (только однажды). Компилятор также оптимизирует код при переводе для выполнения еще быстрее.
  • Сценарии, с другой стороны, оценены (проверил) каждый раз, когда скрипт запущен. Это может занять время.
  • Сценарии человекочитаемы, т.е. пользователь может изучить сценарий и сказать то, что он делает. Это не легко возможно для двоичных файлов, как Вы уже заметили. Без действительно глубоких, глубоких знаний машиночитаемого кода Вы не можете сказать то, что на самом деле делает двоичный файл. Необходимо верить тому, что говорит документация или что программист сказал Вам.

Последний объект - то, где Открытый исходный код умирает: идея состоит в том, что двоичные файлы поставляются вместе с исходным кодом, таким образом, пользователь видит исходный код и компилирует программы сам. Программное обеспечение с закрытым исходным кодом, с другой стороны, просто поставлется с двоичными файлами.

1
ответ дан 26 October 2019 в 15:29

Я думаю, что Вы немного смущены тем, что конфигурационные файлы делают, и что на самом деле делают программы (обычно называемый двоичными файлами).

Двоичные файлы или программы являются программами, которые делают что-то. Они на самом деле выполняются, и оцененные операторы. Это может быть столь же просто как 2+2, или более сложный, такой как ls, который перечисляет содержание текущего каталога.

Конфигурационные файлы изменяют то, что делают программы. Например, ls может быть настроен для показа цветов, столбцов, и так далее. Программа ls поддержки все эти вещи, но они могут быть активированы или деактивированы в зависимости от конфигурации.

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

Программы не являются конфигурационными файлами, и конфигурационные файлы не являются программами. configuruation файл не выполняет задачи, он сообщает некоторой программе о том, как вести себя.

1
ответ дан 26 October 2019 в 15:29

Это зависит от приложения и автора программного обеспечения. Если автор предназначил приложение, чтобы иметь различные параметры конфигурации для пользователя, они могут или позволить пользователю предоставить параметры командной строки, которые изменяют поведение приложения, или могут быть файлы конфигурации, чтобы хранить ту информацию для будущего использования. Для многих приложений, таких как сервисы и демоны нужны конфигурационные файлы при начальной загрузке, потому что файлы конфигурации предоставят всю необходимую информацию для сервиса для выполнения его задачи. Управление аппаратными средствами, такими как присвоение утверждения IP к сетевой плате, намного легче и короче с файлом конфигурации вместо того, чтобы делать тот каждый раз собой.

Что касается ls, это происходит просто из-за истории. Исходный ls сделал один, и только вещь - перечисляет файлы в каталоге, и создатели не предназначали это, чтобы иметь файлы конфигурации, хотя это действительно имеет параметры командной строки. Стандарты POSIX делают ls как один из среди основных команд, требуемых поддерживаться подобными Unix операционными системами и Ubuntu, действительно обеспечивает ls придерживаться стандарта. Однако, если кто-то хотел сделать ls который реализует опции POSIX и также использует файлы конфигурации - они могли очень хорошо сделать это.

0
ответ дан 26 October 2019 в 15:29

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

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