rsync - удалите удалил большинство файлов в целевом каталоге, почему?

Из полученных данных вы пытаетесь скомпилировать 32-битную сборку apache на 64-битной системе. Это из intput для настройки здесь:

--host=x86_32-unknown-linux-gnu host_alias=x86_32-unknown-linux-gnu CFLAGS=-m32 LDFLAGS=-m32

Также смотрите строки вывода, подтверждающие это:

configure:3629: checking build system type
configure:3643: result: x86_64-unknown-linux-gnu
configure:3663: checking host system type
configure:3676: result: x86_32-unknown-linux-gnu
configure:3696: checking target system type
configure:3709: result: x86_32-unknown-linux-gnu

Здесь используется 64-битная система сборки, но 32-битный хост/целевая система. Далее мы видим:

ac_cv_env_CFLAGS_set=set
ac_cv_env_CFLAGS_value=-m32

Этот флаг говорит gcc выдавать 32-битные объекты. Ваша ошибка, что компилятор Си не может выдать исполняемый файл, скорее всего, вызвана отсутствием 32-битного инструментария.

Тестирование вашей способности компилировать 32-битные объекты

Вы можете протестировать это, скомпилировав небольшой пример на Си с флагом -m32.

// Minimal C example
#include <stdio.h>
int main()
{
   printf("This works\n");
   return 0;
}

Компиляция:

gcc -m32 -o m32test m32test.c

Если эта команда не удастся, то у Вас возникнет проблема с возможностью компиляции 32-х битных объектов. Сообщения об ошибках, выдаваемые компилятором, могут быть полезны для исправления этой ситуации.

Исправления

  1. Сборка для 64-битного объекта (путем удаления опций конфигурации, заставляющих собирать 32-битные объекты), или
  2. Установка 32-битного инструментария компилятора
1
23.06.2014, 01:26
1 ответ

Эта команда сводится к следующему:

rsync --delete --recursive /etc/logrotate.d/{httpd,mariadb,php-fpm,ppp,wpa_supplicant,yum} root@my.ipaddress:/etc

The . там имеет буквальное значение - это часть названия - так что проблема не в этом. Часть в {} подвергается расширению скобками : каждая часть, разделенная запятыми, расширяется и соединяется с той частью аргумента, которая была до этого (/etc/logrotate.d/). (Он также получит что угодно после, если бы было что-нибудь: a{BC}d расширяется до aBd aCd).

Итак, эта команда эквивалентна

rsync --delete --recursive /etc/logrotate.d/httpd /etc/logrotate.d/mariadb /etc/logrotate.d/php-fpm /etc/logrotate.d/ppp /etc/logrotate.d/wpa_supplicant /etc/logrotate.d/yum root@my.ipaddress:/etc

или для выбора только одного каталога, поэтому она короткая:

rsync --delete --recursive /etc/logrotate.d/httpd root@my.ipaddress:/etc

rsync интерпретирует "из" местоположения как единственную сущность, и если она не заканчивается на /, она делает новый файл или каталог с только последней частью этого имени внутри заданного пути назначения: вот, это httpd. Таким образом, он делает /etc/httpd по назначению и копирует в него содержимое /etc/logrotate.d/httpd.

С помощью --delete затем удалит все , что не было в /etc/logrotate.d/httpd на источнике. Проблема - так как /etc/logrotate.d/httpd, вероятно, вообще не существует, копирование и удаление любых файлов, которых не было в исходнике, означает удаление всего во всех этих каталогах. Если он действительно существует, его содержимое не будет совпадать с содержимым /etc/httpd, так что (почти) все будет удалено.

Так что проблема в том, что у вас там вообще есть часть logrotate.d, когда вы действительно хотели скопировать те же самые каталоги в /etc. Вероятно, вы имели в виду просто:

rsync --progress --delete -avhHe ssh /etc/{httpd,mariadb,php-fpm,ppp,wpa_supplicant,yum} root@my.ipaddress:/etc

, который копирует /etc/httpd и его содержимое в /etc/httpd по месту назначения, и так далее. Если вы хотели скопировать что-то внутри logrotate.d, поместите это в путь с обеих сторон.

Одна вещь, которую вы можете найти полезной - опция -n или --dry-run от до rsync:

-n, --dry-run выполните пробный запуск без изменений

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


Вы спросили, как предотвратить расширение оболочки в аргументах, которые вы дали rsync. Как и выше, я не думаю, что на самом деле это то, что вы хотите, учитывая проблему, которая у вас была, но если вам когда-нибудь понадобится: расширения в скобках не происходят в кавычках, так что "a{BC}d" остается как a{BC}d буквально.

.
3
27.01.2020, 23:28

Теги

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