Что я делаю не так, используя команду find -name с tar в сценарии bash? [закрыто]

Запуск dhcpcd напрямую конфликтует с системой конфигурации сети. (В вашем случае конфигурация сети находится в /etc/network/interfaces или /etc/network/interfaces.d). Обычно вам достаточно вызвать dhcpcd для целей тестирования.

Во избежание конфликта с системой настройки сети Debian используйте ifdown eth0 перед тестированием dhcpcd.

Ожидается, что система настройки сети Debian ifupdown не будет реагировать на статус соединения (кабель отключен и снова подключен). Если вам нужна эта функция, NetworkManager может предоставить ее. NetworkManager также работает таким образом, чтобы избежать блокировки всего процесса загрузки, когда сеть не работает. В противном случае для переключения сетей необходимо

  1. ifdown eth0 — сделайте это в первую очередь, чтобы избежать конфликта адресов с другим компьютером в новой сети!
  2. переключать кабели
  3. ifup eth0

Наконец, из вашего ответа следует, что вы нашли обходной путь для необычной аппаратной проблемы (указывает на r8169 = дешевые чипы RealTek), который вы хотите запустить раньше ifupdown запускает для вас DHCP-клиент. Отредактируйте файл /etc/network/interfaces, содержащий конфигурацию вашей сети. Сразу после строки

iface eth0 inet dhcp

добавить

 pre-up ethtool -s eth0 autoneg off speed 100 duplex full

Пробел/отступ в начале принято, но не обязательно.

Чтобы убедиться, что эти команды действительно выполняются, вы можете использовать регистратор.Примечание. Я изменил строку с помощью ethtool, а также добавил строки до и после.

 pre-up logger -- running ethtool...
 pre-up ethtool -s eth0 autoneg off speed 100 duplex full 2>&1 | logger
 pre-up logger -- finished running ethtool

Строки журнала должны появиться в системном журнале (например, journalctl -b), а внутри них любые выходные данные ethtool, за которыми следуют сообщения от dhclient. Если от ethtool нет вывода, то он считает, что это удалось. Я полагаю, что сообщения журнала также будут перенаправлены в ваши постоянные файлы системного журнала (/var/log/messages или /var/log/syslog?).

Чтобы избежать пятиминутной задержки при тестировании, вы можете начать с комментирования строки auto eth0 (добавьте # в начале, чтобы отключить ее). Тогда компьютер загрузится без попыток поднять интерфейс eth0, и вы сможете запустить ifup вручную, чтобы проверить, работает ли он. Хотя, к сожалению, возможно, что это работает так, но не во время загрузки из-за какой-то неприятной проблемы с синхронизацией.

Поиск в Google показывает, что NetworkManager не поддерживает предварительное подключение. К сожалению, если вы хотите переключиться на NetworkManager, вам придется зайти в systemd и создать службу. Вероятно, нужно, чтобы служба запускалась до NetworkManager.

0
16.04.2017, 21:49
2 ответа

У этого сценария есть две основные проблемы:

  1. Пути являются относительными. Это означает, что при запуске предполагается, что home / pi существует в текущем каталоге . У меня такое чувство, что все экземпляры home / pi в сценарии должны быть изменены на / home / pi .

  2. Команда tar , вероятно, предназначена для резервного копирования файлов в файле backuplist.txt . В том виде, в каком он написан сейчас, вы получите архив tar , содержащий сам файл backuplist.txt и ничего больше. Если вы хотели прочитать содержимое этого файла, используйте tar -zcvf "$ DESDIR / $ FILENAME" -T "$ SRC" .

  3. В скрипте также есть переменные без кавычек.

Вот что, я думаю, вам нужно:

#!/bin/bash

TIME="$(date +%b-%d-%y)"
FILENAME="backup-$TIME.tar.gz"
DESDIR="/home/pi/backups"
SRC="/home/pi/backuplist.txt"

find /home/pi -iname '*.orig' -o -iname '*.py' >"$SRC"
tar -zcvf "$DESDIR/$FILENAME" -T "$SRC"

/ home / pi в командной строке find - безумная догадка. Я предполагаю, что без него GNU find будет использовать текущий каталог.

3
28.01.2020, 02:19

Я думаю, что этот немного другой сценарий решит ваше первоначальное желание передать список файлов непосредственно в tar .

Я процитировал переменные, где они используются, и заменил обратные кавычки `...` современной конструкцией $ (...) .

Наконец, я предположил, что вы хотите, чтобы это запускалось из / , чтобы пути, которые вы использовали, могли существовать.

#!/bin/bash
WHEN=$(date +%b-%d-%y)
FILENAME="backup-$WHEN.tar.gz"
DESDIR=/home/pi/backups
SRC=/home/pi/backuplist.txt

mkdir -p "$DESDIR"

cd /
find -iname '*.orig' -o -iname '*.py' |
    tee "$SRC" |
    tar zcvf "$DESDIR/$FILENAME" --no-recursion --verbatim-files-from --files-from -

Вы можете полностью опустить две строки, ссылающиеся на $ SRC , если вам не нужно создавать список файлов во время процесса резервного копирования.

1
28.01.2020, 02:19

Теги

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