bash: Создать список файлов, которые существуют и не существуют из конфигурации - PullRequest
0 голосов
/ 20 января 2020

Как я могу создать две переменные из источника, где включенные файлы существуют или не существуют?

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

Apache httpd.conf фрагмент:

Include /var/site/conf/apache/1.conf
Include /var/site/conf/apache/2.conf
Include /var/site/conf/apache/3.conf
Include /var/site/conf/apache/4.conf

В приведенном выше примере /var/site/conf/apache/4.conf не существует.

При проверке Apache config, как я могу получить список включений, которые не существуют, и продолжить обработку файлов конфигурации, которые это делают?

Пока у меня есть код ниже, но мне не хватает чего-то, что могло бы сделать эту работу:

_Apache_includes=$(cat /etc/httpd/conf/httpd.conf | grep unique_site_config | cut -f 2 -d " ")
if test -f "$_Apache_includes"; then
    $_Apache_includes=$_Apache_does_exist
else
    $_Apache_includes=$_Apache_not_existing
fi
echo "$_Apache_does_exist exist"
echo "$_Apache_not_existing does not exist"

for _Config_file_check in $_Apache_includes; do
    _Config_domains=$(ls -la $_Apache_does_exist | grep -e ServerName -e ServerAlias | grep -v "#" | sed "s/^[ \t]*//" | cut -f 2 -d " " | grep -v ^$ | sort -u )
    _Config_ip=$(getent hosts $_Config_domains | awk '{ print $1 }')
    echo "Config File: $_Config_file" - $_Config_domains - $_Config_ip >> /root/server-fixes/audit/domains/domain_list_$_date_now.txt
    echo
done

Ожидаемый вывод:

Список отсутствующих файлов Включает в себя:

/ var / site / conf / apache / 4.conf

Список правильно настроенные домены:

Файл конфигурации: /var/unique_site_config/conf/apache/1.conf - example.com - 93.184.216.34

Файл конфигурации: / var / unique_site_config / conf / apache / 1.conf - www.example.com - 93.184.216.34

Файл конфигурации: /var/unique_site_config/conf/apache/2.conf - example2.co m - 173.231.210.103

Файл конфигурации: /var/unique_site_config/conf/apache/3.conf - example3.com - 23.20.239.12

Ответы [ 3 ]

0 голосов
/ 20 января 2020

Для этого тестового файла

$ cat file
    Include 1.conf
    Include 2.conf
    Include 3.conf
    Include 4.conf

Это покажет, какая конфигурация существует, а какая нет

confs=$(grep Include file) # get confs to var
confs=${confs//Include/}   # remove 'Include'
# loop through confs and check if they exist
for conf in $confs; { [[ -e $conf ]] && echo "$conf exist" || echo "$conf not exist"; }

И для создания списков несуществующих конф

for conf in $confs; { [[ -e $conf ]] && exist+="$conf " || not_exist+="$conf "; }
printf "exist: $exist\nnot_exist: $not_exist"
0 голосов
/ 20 января 2020

Код:

exists=""
missing=""
for f in $(grep httpd.conf -e ^Include | sed 's|[^/]*\(/.*\)|\1|g')
do
  if [ -e "$f" ]; then
    exists="$f\n$exists"
  else 
    missing="$f\n$missing"
  fi
done

echo "Files that are missing:"
echo -e "$missing"

Вывод:

Files that are missing:
/private/etc/apache2/other/*.conf
/private/etc/apache2/extra/httpd-manual.conf
/private/etc/apache2/extra/httpd-userdir.conf
/private/etc/apache2/extra/httpd-languages.conf
/private/etc/apache2/extra/httpd-autoindex.conf
/private/etc/apache2/extra/httpd-mpm.conf

grep соответствует строкам, в которых "Включить" - это первое слово.

* sed соответствует строке, начинающейся с первого «\» в строке до конца строки.

echo -e гарантирует, что \n будет интерпретироваться как символ новой строки

0 голосов
/ 20 января 2020

Вам нужно обрабатывать файлы, которые вы хотите протестировать, построчно и по отдельности.

ls -1 |\
while IFS='\n' read -r file;
do if [ -f "${file}" ];
  then # process the ${file} or write to a tempfile
  else echo "${file} does not exist";
fi; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...