Конфигурационные файлы Linux одновременно и упрощают, и усложняют управление ОС. Параметры конфигурации легко менять, а также переносить на другие системы, но их документирование часто бывает утомительным. Мы собрали понятные объяснения и инструкции по редактированию конфигурационных файлов. Разумеется, в рамках одной статьи невозможно охватить всё, поэтому сосредоточимся на самых распространённых файлах для нескольких дистрибутивов Linux.
Немного вводных
Каждый дистрибутив Linux может использовать разные приложения и сервисы для выполнения одной и той же функции. Например, Red Hat и Ubuntu используют разные приложения для сетевых служб. Когда возможно и уместно, мы отмечаем это в статье. Но если вы встретите конфигурационный файл, о котором здесь не упоминалось, не бойтесь — он просто называется как-то по-другому для используемого вами дистрибутива.
В этом случае вам, возможно, придётся обратиться к документации дистрибутива, который настраиваете. Однако общая идея и процесс близки к тому, о чём говорится далее.
И прежде чем продолжить, упомянем кое-что важное. В примерах мы использовали редактор Nano. Вы можете использовать любой текстовый редактор командной строки, но перед редактированием конфигурационного файла мы настоятельно рекомендуем сначала создать его копию. При копировании добавьте расширение .bak в конец файла, чтобы позже вы могли идентифицировать, что это файл резервной копии.
cp originalFile.conf orginalFile.conf.bak
Существует большая вероятность, что вы в конечном счёте совершите ошибку при редактировании. Поэтому резервные файлы важны. Итак, мы вас предупредили. А теперь погрузимся в удивительный мир конфигурационных файлов Linux.
Что такое конфигурационные файлы
Конфигурационные файлы — это локальные файлы, которые управляют работой программы, утилиты или процесса. Они содержат настройки и инструкции для различных систем и приложений. Часто это текстовые файлы, которые содержат имя переменной (параметра), за которой следует её значение. Большинство конфигурационных файлов Linux можно открыть с помощью обычного текстового редактора и обновить напрямую. Но для редактирования таких файлов вы, скорее всего, будете использовать редактор командной строки, например, Nano или Vim.
Конфигурационные файлы Linux используются для настройки параметров различных процессов операционной системы. Некоторые из этих файлов определяют доступ к сети и протоколы, в то время как другие инструктируют операционную систему о том, как получить доступ к серверам имён. Опытный администратор управляет Linux, редактируя конфигурационные файлы.
В разных дистрибутивах Linux используются не только разные конфигурационные файлы, но и соглашения об именах. Иногда конфигурационные файлы упоминаются только по имени, например «dhclient» или «nsswitch». А иногда на них можно ссылаться с расширением — с точкой или без нее, например, «dhclient.conf» или «nsswitch.conf».
В некоторых случаях на конфигурационные файлы можно ссылаться по расположению в каталоге, например, «/etc/dhclient.conf» или «/etc/nsswitch conf». Хотя соглашения об именах файлов могут немного измениться, как и их расположение в файловой системе, общая идея того, как редактировать отдельные конфигурационные файлы, остаётся прежней. Опытный администратор сможет применить советы из этой статьи к любому дистрибутиву Linux.
«Администрирование Linux. Мега»
Как редактировать конфигурационные файлы
Для редактирования конфигурационного файла нужно только найти его и открыть с помощью текстового редактора. Подавляющее большинство конфигурационных файлов Linux хранят свои данные в виде обычного текста, и изменение их содержимого и сохранение — всё, что требуется для обновления настроек. Для этой работы подойдет множество текстовых редакторов, и обычно их выбор зависит от личных предпочтений.
Многие конфигурационные файлы Linux можно найти в каталоге /etc/ или подкаталоге. Значительную часть времени они будут редактироваться через командную строку, поэтому осваивайтесь с такими приложениями, как Nano или Vi. Эти конфигурационные файлы обычно защищены от стандартных учётных записей пользователей, поэтому не забудьте изменить свои привилегии (можете использовать команду sudo или su). В противном случае могут возникнуть проблемы с поиском файлов.
Хотя настройки применяются сразу после сохранения отредактированного файла, приложения не будут воспринимать изменения до тех пор, пока вы не перезапустите приложение.
Конфигурационный файл network-scripts
Как и в Windows, в Linux есть конфигурационные файлы для каждого сетевого интерфейса. Они сообщают операционной системе сведения о названии интерфейса, следует ли использовать DHCP и должен ли быть включен IPv6. Здесь так стоит упомянуть, что сетевым интерфейсом может быть как виртуальное, так и физическое устройство, как проводное, так и беспроводное
Конфигурационный файл network-scripts — это файл, который управляет сетевым интерфейсом. Параметры конфигурации для данного устройства или виртуального интерфейса сохраняются и редактируются в конфигурационном файле, уникальном для каждого интерфейса в каталоге network-scripts.
Как настроить конфигурационный файл network-scripts
Существует два способа редактирования:
графическая среда;
командная строка.
И REHL (и CentOS), и Ubuntu содержат графические утилиты для редактирования конфигурационных файлов. Эти графические утилиты доступны по-разному в зависимости от того, какой графический интерфейс вы используете.
Как правило, настройки можно найти в разделе «Сеть» или «Утилиты». В параметрах сети будут перечислены все интерфейсы, доступные в системе. При редактировании этих сетевых интерфейсов вы получите доступ к большинству настроек, упомянутых выше.
Другой способ редактирования — через текстовый редактор в командной строке. В этом случае вы используете приложение, например, Nano или Vi, чтобы открыть каждый файл и отредактировать его. В REHL все конфигурационные файлы указываются как отдельные файлы. В Ubuntu они находятся в одном файле по пути /etc/network/ file system.
Важно упомянуть, что для редактирования этих файлов вам потребуются повышенные привилегии. Если вы используете графический интерфейс, нужно ввести пароль root. Если командную строку — команду sudo.
Option |
Value |
Explanation |
TYPE |
Device Type (Eg. Ethernet) |
Что это за сетевой интерфейс |
BOOTPROTO |
None, bootp, dhcp |
Использует ли этот интерфейс протокол bootp или dhcp |
DEFROUTE |
Yes, no |
Установлен ли этот интерфейс в качестве маршрута по умолчанию |
IPV6_DEFROUTE |
Yes, no |
Установлен ли этот интерфейс в качестве маршрута по умолчанию для IPv6 |
IPV6INIT |
Yes, no |
Включен ли IPv6 |
IPV4_FAILURE_FATAL |
Yes, no |
Отключен ли этот интерфейс при сбое IPv4 |
IPV6_FAILURE_FATAL |
Yes, no |
Отключен ли этот интерфейс при сбое IPv6 |
ONBOOT |
Yes, no |
Включен ли этот интерфейс при загрузке |
HWADDR |
MAC address |
MAC-адрес интерфейса |
IPADDRN |
Ipv4 address |
IPv4-адрес устройства |
PREFIXN |
N |
Длина значения сетевой маски IPv4 |
GATEWAYN |
IPv4 address |
Адрес шлюза для интерфейса |
DNSN |
IPv4 address |
DNS-адрес для интерфейса |
DOMAIN |
DNS search domain |
Домен поиска DNS по адресу |
Где находится конфигурационный файл network-scripts
Каждый сетевой интерфейс имеет собственный конфигурационный файл. Местоположение файла зависит от того, какую версию Linux вы используете.
Redhat Enterprise Linux (REHL): /etc/sysconfig/network-scripts/
Дистрибутивы Linux на основе Ubuntu/Debian: /etc/network/interfaces.
Пример конфигурационного файла network-scripts
Прежде чем редактировать конфигурационный файл network-scripts, нужно узнать, какие сетевые интерфейсы активны в данный момент и каковы их текущие конфигурации (IP-адрес, информация DNS и др.). Для этого введите команду ifconfig в командной строке.
eth0: flags=4163<UP, BROADCAST, RUNNING, MULTICAST> mtu 1500
inet 192.168.1.3 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80: :215:5dff:fe01:4303 prefixlen 64 scopeid 0x20<link>
inet6 2601:985:281:2b60:215:5dff:fe01:4303 prefixlen 64 scopeid 0x0<global>
ether 00:15:5d:01:43:03 tx queuelen 1000 (Ethernet)
RX packets 1920033 bytes 404804795 (404.8 MB)
RX errors 0 dropped 198 overruns 0 frame 0
TX packets 855570 bytes 366074892 (366.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP, LOOPBACK, RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 : :1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 82302 bytes 7837655 (7.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 82302 bytes 78376555 (7.8 MB)
TX errors 0 dropped 0 overruns 0 frame 0 collisions 0
Примечание: команда ifconfig мало где осталась. Вместо неё используется утилита ip.
Network Config Files в Oracle Linux
Большинство дистрибутивов Linux позволяют настраивать сетевые интерфейсы через GUI. Но иногда использование графического интерфейса для настройки ОС невозможно. Это особенно распространено в серверных и облачных средах. И дистрибутив Oracle Linux как раз используется и для серверных, и для облачных приложений. Как настроить сетевую карту в Oracle Linux без графического интерфейса? Через редактирование конфигурационных файлов сети (Network Config Files).
В Oracle Linux конфигурационный файл сети — это место, где хранятся и редактируются общие сетевые настройки. Важно отметить, что конфигурационный файл сети отличается от конфигурационных файлов отдельных сетевых интерфейсов. Общие сетевые настройки (например, информация о шлюзе) хранятся в конфигурационном файле сети. Другие настройки (например, статические IP-адреса) хранятся в конфигурационных файлах для каждого сетевого интерфейса отдельно.
Для настройки сетевой среды Oracle Linux в основном использует:
/etc/sysconfig/network
/etc/sysconfig/network-scripts/…
Каталог /etc/sysconfig/network-scripts/ содержит несколько файлов для каждого сетевого интерфейса. Сетевой интерфейс может быть физической или виртуальной сетевой картой, и эти файлы содержат информацию о конфигурации для каждой сетевой карты. А так называемый файл конфигурации сети (/etc/sysconfig/network) содержит настройки сетевого стека для самой системы.
Конфигурационный файл конфигурации в Oracle Linux (находится в /etc/sysconfig/network) обычно содержит такую информацию: Networking, Hostname, Gateway. Параметр NETWORKING сообщает ОС Linux, включена ли сеть в системе. Он настраивается с логическим значением (yes, no). «Hostname» — это имя хоста Linux-машины. Наконец, «Gateway» сообщает системе шлюз, который следует использовать для этой машины.
Типичный конфигурационный файл сети может выглядеть так:
NETWORKING=yes
HOSTNAME=iAmAWebServer.localdomain
GATEWAY=192.168.1.1
Другая информация, например статические IP-адреса, назначается сетевым интерфейсом. Конфигурационные файлы для каждого сетевого интерфейса хранятся в каталоге /etc/sysconfig/network-scripts/. Если бы ваш сетевой интерфейс назывался eth0, в этом каталоге был бы конфигурационный файл с именем «ifcfg-eth0».
Пример конфигурационного файла сети для Oracle Linux
Хотя подробное описание конфигурационных файлов для сетевых интерфейсов выходит за рамки этой статьи, кратко рассмотрим, как может выглядеть типичный файл. Это поможет понять разницу между параметрами конфигурации для сетевого файла и параметрами конфигурации для сетевых интерфейсов:
DEVICE=eth0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=”System eth0″
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3000
HWADDR=52:54:00:91:6a:C4
PEERROUTES=yes
IPADDR=192.168.1.5
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
USERCTL=no
Хотя приведенная конфигурация включает несколько настроек, обратите внимание, что мы назначаем статический IP-адрес сетевому интерфейсу. Если хотите, чтобы сетевой интерфейс использовал DHCP — просто удалите последние пять строк конфигурации.
Почему у серверных и облачных версий Linux нет графического интерфейса
Одна из лучших сторон использования Linux в качестве серверной ОС заключается в том, что вам нужно установить только то, что вам нужно для использования. Это значит, что если вам нужен веб-сервер, вам нужно всего лишь установить Apache или Nginx без множества других сервисов и функций. Это включает в себя графические интерфейсы — например, Gnome или KDE.
Обычно графический интерфейс в Linux не из-за дополнительных ресурсов — использование того же Gnome или KDE может легко удвоить требования к памяти для виртуальной машины и привести к дополнительным нагрузкам на процессор.
При использовании Linux в качестве сервера удобнее выполнять настройки и операции в командной строке.
Interfaces Config File в Debian
Популярность Debian обусловлена стабильностью, именно поэтому дистрибутив часто выбирают в качестве серверной операционной системы. Однако настройка сетевых служб в Debian отличается от настройки в большинстве дистрибутивов Linux.
В Debian конфигурационный файл интерфейсов (Interfaces Config File) — это способ, с помощью которого администратор может убедиться, что все интерфейсы настроены правильно и работают корректно.
Конфигурационный файл интерфейсов также известен как etc/network/interfaces.conf или interfaces conf. Он содержит информацию о конфигурации для различных сетевых интерфейсов на компьютере.
Debian поддерживает конфигурационные файлы для сетевых интерфейсов, установленных на компьютере. Этими сетевыми интерфейсами могут быть виртуальные устройства, беспроводные устройства или проводные сетевые адаптеры. В отличие от других дистрибутивов Linux, в Debian все данные о конфигурации сетевого интерфейса хранятся в одном файле.
Где находится конфигурационный файл интерфейсов в Debian
На конфигурационный файл интерфейсов часто ссылаются по расположению в каталоге: /etc/network. Перейдите в /etc/network/interfaces, чтобы увидеть, где происходит «сетевое волшебство».
Здесь не так много файлов: сетевой каталог содержит параметры конфигурации сети, а также приложения для управления этими сетевыми конфигурациями. В нём есть только один конфигурационный файл и пара приложений. Это немного, но все, что вам нужно для настройки сетевых интерфейсов в Debian, находится в каталоге /etc/network/interfaces.
Когда и зачем настраивать конфигурационный файл интерфейсов в Debian
Если нужно вручную изменить поведение сетевого интерфейса или узнать, какие протоколы на нём выполняются или активен ли он вообще, можете сделать это и многое другое с помощью Interfaces Config File.
Настройка сетевых интерфейсов в Debian обычно проще, чем в других дистрибутивах Linux. Вот пример настройки Interfaces Config File:
auto eth0
allow-hotplug eth1
iface eth0 inet dhcp
iface eth0 inet6 auto
iface eth1 inet static
address 192.168.1.2/24
gateway 192.168.1.1
iface eth1 inet6 static
address fec0:0:0:1::2/64
gateway fec0:0:0:1::1
Файл содержит конфигурацию для каждого сетевого интерфейса на компьютере. В данном случае их два: eth0 и eth1. Если говорить очень широко, вот что делает эта конфигурация:
Eth0 настроен на автоматическое включение при запуске Debian. У него есть DHCP-адрес.
Для Eth1 разрешен Hot Plug. Он имеет статический адрес IPv4 и IPv6.
Конфигурационный файл Dhclient
Конфигурационный файл dhclient делает возможным расширение и настройку DHCP в Linux. Протокол динамической настройки хоста, или DHCP, — один из лучших инструментов, к которым имеют доступ администраторы. Без него приходилось бы тратить кучу времени на ручную настройку IP-адресов для подключенных к сети устройств.
Конфигурационный файл dhclient в Linux также известен как dhclient.conf или etc/dhclient conf. Dhclient conf используется для настройки и редактирования параметров протокола динамической настройки хоста (DHCP) в сети Linux. Когда устройство подключается к сети через физическое проводное соединение или через Wi-Fi, оно начинает транслировать сигнал в сеть в поисках DHCP-сервера.
Как только клиентское устройство и DHCP-сервер находят друг друга, клиентское устройство отправляет запрос на получение IP-адреса. DHCP-сервер выдаёт IP-адрес и указывает срок действия этого IP-адреса.
Конечно, в исполнении это сложнее и включает в себя больше шагов. DHCP-сервер требует, чтобы клиент соответствовал определённым критериям, прежде чем он выдаст IP-адрес. Аналогично, у клиента есть требования, которым должен соответствовать DHCP-сервер. dhclient.conf — конфигурационный файл, в котором содержатся эти требования.
dhclient.conf содержит данные о:
времени, которое требуется для ответа DHCP-сервера;
времени ожидания клиента, прежде чем он снова начнет отправлять DHCP-запросы.
Что такое DHCP
DHCP расшифровывается как протокол динамической настройки хоста. Это система, в которой клиенты запрашивают IP-адрес и получают его. В большинстве бизнес-сетей клиентским устройствам необходим IP-адрес для правильной связи с сетью. Каждое устройство должно иметь собственный IP-адрес. В противном случае, когда данные будут передаваться по сети с устройства, сеть не будет знать, на какое устройство отправлять эти данные. Если два устройства используют один и тот же IP-адрес, вы можете столкнуться с проблемами.
Один из способов справиться с этим — назначить статический IP-адрес каждому устройству. Администратору нужно вручную присвоить каждому устройству уникальный IP-адрес, который никогда не меняется. Это подходит для серверов, где IP-адрес должен быть постоянно предсказуемым. Другие устройства (например, ноутбуки или смартфоны) не обязательно должны быть предсказуемыми. Кроме того, вручную назначать IP-адреса каждому из них было бы непросто.
Вот почему нужен DHCP. DHCP автоматически отслеживает IP-адреса устройств и выдаёт их при подключении к сети. При использовании DHCP-сервера управление IP-адресами превращается в автоматический процесс, который не требует участия администраторов.
Где находится конфигурационный файл dhclient
Чтобы отредактировать файл dhclient.conf, сначала найдите его в файловой системе. Чаще всего dhclient.conf находится в каталоге /etc или /etc/DHCP. Редактирование файла требует повышенных привилегий, поэтому не забудьте ввести команду su или sudo, прежде чем открывать его.
Как настроить конфигурационный файл dhclient
Чтобы настроить конфигурационный файл dhclient, нужно выбрать из списка команд и настроек, конкретные конфигурации которых вы можете установить. Файл dhclient.conf обычно редактируют только в том случае, если нужны дополнительные настройки или требуется увеличить или уменьшить время ожидания при обмене данными с DHCP-сервером.
Настройки |
Объяснение |
Retry |
Как долго DHCP-клиент ожидает повторной попытки выполнения DHCP-запроса. Это значение является целым числом в секундах. |
Select-timeout |
В некоторых случаях в сетях может быть несколько DHCP-серверов. Одни серверы могут быть предпочтительнее других. Этот параметр определяет, как долго DHCP-клиент ожидает ответа DHCP-сервера о времени аренды. Это значение является целым числом в секундах. |
Reboot |
Параметр указывает DHCP-клиенту, как долго следует ждать запроса адреса после перезагрузки клиента. Это значение является целым числом в секундах. |
Backoff-cutoff |
Параметр сообщает DHCP-клиенту, как долго следует ждать времени отключения. Это полезно в среде, где множество устройств могут одновременно отправлять запросы DHCP. Значение является целым числом в секундах. |
Initial-interval |
Параметр сообщает клиенту, сколько времени следует ждать перед отправкой другого запроса, если он не получит ответа DHCP. Это именно время ожидания перед отправкой запроса, а не то, как долго нужно прослушивать ответ. Значение является целым числом в секундах. |
Когда нужно настраивать конфигурационный файл dhclient
Большую часть времени настраивать файл dhclient.conf не придётся. Дистрибутивы вроде Red Hat или Ubuntu хорошо справляются с этим за вас. Но иногда настройка файла dhclient.conf всё же нужна, чтобы сократить время подключения к сети.
Пример настройки dhclient conf:
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
dhcp6.name-servers, dhcp.domain-search, dhcp6.fqdn, dhcp6.sntp-servers
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;
#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
#send dhcp-lease-time 3600;
#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;
#require subnet-mask, domain-name-servers;
timeout 300;
#retry 60:
#reboot 10;
#select-timeout 5;
#initial-interval 2;
#script "/sbin/dhclient-script";
#media "-link0 -link1 -link2", "link0 link1";
#reject 192.33.137.209;
#alias {
# interface "eth0";
# fixed-address 192.5.5.213;
# option subnet-mask 255.255.255.255;
#}
#lease {
# interface "eth0";
# fixed-address 192.33.137.200;
# medium "link0 link1";
# option host-name "andar.swiftmedia.com";
# option subnet-mask 255.255.255.0;
# option broadcast-address 192.33.137.255;
# option routers 192.33.137.250;
# option domain-name-servers 127.0.0.1;
# renew 2 2000/1/12 00:00:01;
# rebind 2 2000/1/12 00:00:01;
# expire 2 2000/1/12 00:00:01;
#}
Обратите внимание на хэштег перед каждой строкой. Это считается комментариями. Любая строка в файле dhclient.conf, которой предшествует хэштег, будет игнорироваться Linux (точнее, программным обеспечением DHCP).
Часто тайм-аут — это параметр, который необходимо изменить большинству администраторов Linux. Этот параметр определяет, как долго клиентское устройство ожидает ответов.
Заключение
Мы рассмотрели четыре конфигурационных файла, которые встречаются особенно часто. И совсем скоро вернёмся с разбором ещё пяти.
Комментарии (12)
GopaSRuchkoy
14.04.2023 11:10+1Информация по /etc/network/interfaces.conf устарела, настройка сети использует /etc/netplan/*.yaml и формат файла другой.
13werwolf13
14.04.2023 11:10+1netplan из всего дофигалиона дистрибутивов по дефолту только в бубунте которую из-за всратости решений применяют всё реже и реже..
g5p4m7
14.04.2023 11:10-1Про "PPP over
Wафляwlan0" будет?g5p4m7
14.04.2023 11:10хотя вообще надо сразу оба (и eth и wlan)… а ещё лучше "на горячую" цеплять одну и ту же PPP-сессию с eth на wlan и обратно (т.н. «переезд» работающего “сервера” на аккумуляторе/ИБП || незаметная подмена свитча или самого маршрутизатора…)
alef13
14.04.2023 11:10+1В этой статье всё, что касается redhat-based дистрибутивов, необходимо стереть и заменить ссылкой на файл лежащий в установленной системе в каталоге /usr/share/doc/initscripts-XXX/
коллеги, работающие с debian и его форками, вероятно тоже знают где лежат первоисточники :)
ЗЫЖ статью оценивать не стал - работа по переводу проделана, правда источник фиговый
13werwolf13
14.04.2023 11:10половина статьи привет из прошлого, вторая половина непонятно для кого..
ребят, когда последний раз вы видели dhcp на сервере или десктоп где dhcp настраивается не через network-manager а через ifupdown?
alef13
14.04.2023 11:10вот сидел совсем недавно на работе и смотрел на "отечественный" дистрибутив РЕД ОС... Network manager там стоит и конфиги кушает из /etc/sysconfig/network-scripts/ посредством плугина nm-settings-ifcfg-rh
13werwolf13
14.04.2023 11:10+2Туше..
А вообще мне "понравилось" очередное несовпадение заголовка с телом статьи
> полное руководство..
>> Разумеется, в рамках одной статьи невозможно охватить всё, поэтому сосредоточимся на самых распространённых..
strvv
14.04.2023 11:10+1чрезвычайно пустая статья,
переводчик возможно сделал опечятку в виде REHL вместо RHEL (РедХатЕнтепраизЛинукс).просто набитие статей для количества. переводчик не в теме, которую переводит.
Если SouthBridge также учит - мы и после пенсии будем вынуждены работать администраторами, т.к. молодые ничего не будут знать, с такими учителями.
Для информации - если кто хочет реально научится - есть классика -
Немет, Эви, Снайдер, Гарт, Хейн, Трент, Уэйли, Бэн. Н50 Unix и Linux: руководство системного администратора.
я по нему в первой половине 90х учился.CrzyDocTI
14.04.2023 11:10@aSkobinпожалуйста обратите внимание на комментарий выше. Если раньше ваши статьи можно было использовать практически как руководство к действию и лучшие практики, а через это и рекомендовать курсы компании, то теперь лично я даже тестирование при найме не стал проходить задумавшись - а стоит ли. так же и реклама курсов через сарафанное радио - раньше рекомендовал без сомнений при любом вопросе в комментариях, теперь предпочитаю молчать.
koldyr
Даёшь sendmail.cf