Последний ответ был довольно хорош для понимания то, что является двоичным или файл конфигурации в Linux. Таким образом, вопрос состоит в том, почему делают мы должны были создать двоичный файл для команды ls или другой двоичный файл конфигурации для системы Linux. точно так же, как мы сделали файл конфигурации для выполнения определенного задача, почему мы не сделали файл конфигурации для команды ls и других двоичных файлов.
Я думаю, что Вы не только смущены файлами конфигурации и двоичными файлами, но также и файлами конфигурации и сценариями. Позвольте мне показать очень простой пример и запуститься с файла конфигурации:
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) и файлы сценария (как сценарии удара) имеют различные различия, некоторые из которых:
Последний объект - то, где Открытый исходный код умирает: идея состоит в том, что двоичные файлы поставляются вместе с исходным кодом, таким образом, пользователь видит исходный код и компилирует программы сам. Программное обеспечение с закрытым исходным кодом, с другой стороны, просто поставлется с двоичными файлами.
Я думаю, что Вы немного смущены тем, что конфигурационные файлы делают, и что на самом деле делают программы (обычно называемый двоичными файлами).
Двоичные файлы или программы являются программами, которые делают что-то. Они на самом деле выполняются, и оцененные операторы. Это может быть столь же просто как 2+2, или более сложный, такой как ls
, который перечисляет содержание текущего каталога.
Конфигурационные файлы изменяют то, что делают программы. Например, ls
может быть настроен для показа цветов, столбцов, и так далее. Программа ls
поддержки все эти вещи, но они могут быть активированы или деактивированы в зависимости от конфигурации.
Для более сложных программ, такой как apache
, который является веб-сервером, конфигурационные файлы могут изменить поведение программы до экстремального градуса.
Программы не являются конфигурационными файлами, и конфигурационные файлы не являются программами. configuruation файл не выполняет задачи, он сообщает некоторой программе о том, как вести себя.
Это зависит от приложения и автора программного обеспечения. Если автор предназначил приложение, чтобы иметь различные параметры конфигурации для пользователя, они могут или позволить пользователю предоставить параметры командной строки, которые изменяют поведение приложения, или могут быть файлы конфигурации, чтобы хранить ту информацию для будущего использования. Для многих приложений, таких как сервисы и демоны нужны конфигурационные файлы при начальной загрузке, потому что файлы конфигурации предоставят всю необходимую информацию для сервиса для выполнения его задачи. Управление аппаратными средствами, такими как присвоение утверждения IP к сетевой плате, намного легче и короче с файлом конфигурации вместо того, чтобы делать тот каждый раз собой.
Что касается ls
, это происходит просто из-за истории. Исходный ls
сделал один, и только вещь - перечисляет файлы в каталоге, и создатели не предназначали это, чтобы иметь файлы конфигурации, хотя это действительно имеет параметры командной строки. Стандарты POSIX делают ls
как один из среди основных команд, требуемых поддерживаться подобными Unix операционными системами и Ubuntu, действительно обеспечивает ls
придерживаться стандарта. Однако, если кто-то хотел сделать ls
который реализует опции POSIX и также использует файлы конфигурации - они могли очень хорошо сделать это.