Более новые версии ip
могут выводить данные в формате JSON с параметром -j
, которые затем можно обрабатывать с помощью фильтра, такого как jq
. Например, это напечатает адрес IPv4 на интерфейсе eth0
:
$ ip -j addr show dev eth0 | jq -r '.[0].addr_info | map(select(.family == "inet"))[0].local'
192.168.0.1
Или получить список всех IPv4-адресов на машине, по одному в строке:
ip -j addr show | jq -r 'map(.addr_info) | map(map(select(.family == "inet").local)) | flatten |.[]'
127.0.0.1
192.168.0.1
172.19.0.1
172.17.0.1
172.18.0.1
Удалите select(...)
, чтобы включить, например, адреса IPv6. Возможны многие другие вариации.
Ваша установка Apache выглядит так, как будто она установлена в Debian, а в моей системе serve-cgi-bin.conf
уже включена, т. е. есть символическая ссылка с /etc/apache2/conf-enabled/serve-cgi-bin.conf
по ../conf-available/serve-cgi-bin.conf
.
Если символическая ссылка отсутствует на вашем система, запустить
sudo a2enconf serve-cgi-bin
Вам не нужно раскомментировать строку в 000-default.conf
.
Файл выглядит так:
$ cat /etc/apache2/conf-available/serve-cgi-bin.conf
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
</IfDefine>
</IfModule>
Каталог cgi — /usr/lib/cgi-bin
, переместите исполняемый файл в этот каталог. Нужно включить мод _cgi или мод _cgid , возьмем первый и перезапустим сервер.
sudo a2enmod cgi
sudo systemctl restart apache2
Перейдите по адресу http ://localhost/cgi -bin/test.cgi и вы увидите сообщение «TEST».
Если вы хотите использовать другой каталог или другой путь ScriptAlias
, вы можете отключитьserve-cgi-bin.conf
(sudo a2disconf serve-cgi-bin
)и скопировать содержимое serve-cgi-bin.conf
в свой VirtualHost
и при необходимости изменить расположение.