Вы не изменили переменные eth_*
в сценарии bridge-start
, чтобы они соответствовали вашему реальному сценарию. В результате, когда вы запускаете свой скрипт, IP-адрес меняется с 111.111.111.111 на 192.168.8.4, и вы теряете подключение.
Даже если вы исправили это, вам, вероятно, потребуется заново создать таблицу маршрутизации (в частности, маршрут по умолчанию).
Если возможно, настройте и запустите мост (br0
и eth0
), прежде чем продолжать работу с openvpn. В идеале вы должны запустить мост во время загрузки, а затем вы можете добавить интерфейс tap0
, когда начнете тестировать openvpn.
Успешно изменить конфигурацию сети удаленно непросто. Если у вас есть какой-либо способ подключить KVM, пока вы работаете, я бы порекомендовал вам воспользоваться этим шансом.
Появляется комментарий с запросом на руководство. Вместо того, чтобы указывать за пределами сайта, вот как я настроил мост в одной из своих систем. Он не использует NetworkManager, это конфигурация в /etc/network/interfaces
. Если вы ошибетесь, вы не сможете войти в систему, поэтому я бы посоветовал вам использовать KVM или попробовать его на локальном компьютере, чтобы убедиться, что процесс работает.
allow-hotplug eth0
iface eth0 inet manual
auto br0
iface br0 inet static ← ASSUMES STATIC IP ADDR
address 111.111.111.111
netmask 255.255.255.0
gateway 111.111.111.254 ← FIX ME BEFORE TRYING THIS
bridge_ports eth0
bridge_fd 0
bridge_maxwait 0
В именах файлов можно использовать любые символы, кроме нулевого символа(\0
)и косой черты, которая является разделителем пути. Переменные могут содержать любые данные (, за исключением нулевых символов в большинстве оболочек ). При правильном заключении в кавычки имена файлов можно безопасно хранить в переменных и использовать с утилитами.
О ваших баллах:
Для перебора набора файлов (обычных файлов или каталогов )вы можете использовать простой цикл оболочки, например
for name in./*; do
# some code that uses "$name"
done
Для перебора файлов при выборе определенных файлов с использованием определенных критериев find
является лучшим выбором. например, чтобы выбрать все обычные файлы в текущем каталоге (или ниже ), которые старше N
дней, (имеют дату изменения не менее N
дней назад):
find. -type f -mtime +N
Точно так же -size
используется для выбора файлов по размеру и -name
для сопоставления имени файла с шаблоном подстановки.
Например, чтобы выбрать обычные файлы, имена которых соответствуют *.mov
и которые были изменены за последнюю неделю:
find. -type f -name '*.mov' -mtime -7
Затем, чтобы на самом деле сделать что-то с этими файлами, например переместить их в каталог $HOME/Movies
:
find. -type f -name '*.mov' -mtime -7 -exec mv {} "$HOME/Movies" ';'
{}
будет заменено путем к файлу при вызове mv
. Вам не нужно заключать{}
(в кавычки, это ничего не изменит, если вы сделаете ), так как find
не будет вызывать разбиение слов оболочки или расширение имени файла в имени пути.
Дальнейшим улучшением этого будет обнаружение конфликтов имен файлов в целевом каталоге. Для этого мы используем короткий вспомогательный скрипт, который будет принимать несколько имен файлов в своей командной строке:
destdir="$HOME/Movies"
for name do
if [ -f "$destdir/${name##*/}" ]; then
printf "%s already exists in %s, not overwriting it!\n" "${name##*/}" "$destdir" >&2
else
mv "$name" "$destdir"
fi
done
или сокращенно:
destdir="$HOME/Movies"
for name do
[ -f "$destdir/${name##*/}" ] && printf "skipping %s\n" "$name" >&2 && continue
mv "$name" "$destdir"
done
Подключаем это к нашей команде find
:
find. -type f -name '*.mov' -mtime -7 -exec sh -c '
destdir="$HOME/Movies"
for name do
[ -f "$destdir/${name##*/}" ] && printf "skipping %s\n" "$name" >&2 && continue
mv "$name" "$destdir"
done' sh {} +
Нигде на этом пути мы не позволяем оболочке выполнять разбиение на слова или подстановку имени файла для пути или имени файла, которые мы в данный момент обрабатываем.
Для получения дополнительной информации:
Просто. Используйте подстановку, чтобы выбрать нужные файлы, и укажите в кавычках переменную, содержащую имя файла :
.shopt -s nullglob
for file in./*.txt; do
do_something_with "$file"
done
Вот и все.
Подробнее:
Обновление :подстановка не отвечает за эффект разделения слов, который вы видите. Отсутствие кавычек переменной.
Вы можете получить информацию о файле для ваших условий с помощьюstat
read size mtime < <(stat -c "%s %Y" "$file")
[[ $size -gt 1000 ]] && echo "too big"
[[ $mtime -lt $(date -d yesterday +%s) ]] && echo "too old"
Обновление 2 :Создание имени файла с большим количеством специальных символов требует смешивания различных механизмов цитирования, но с этим файлом по-прежнему можно делать что угодно.
$ filename='~ASDFzxcv!@#$%^&*()_+[]\{}|;:",.<>?`'"'"$' \a\t\n\r\f'".txt"
# ^^ single quoted part ^^^^^^^^^^^^^^^^
# double quoted part ^^^
# ANSI-C quoted part ^^^^^^^^^^^^^^
$ echo "$filename"
~ASDFzxcv!@#$%^&*()_+[]\{}|;:",.<>?`'
.txt
$ printf "%q\n" "$filename"
$'~ASDFzxcv!@#$%^&*()_+[]\\{}|;:",.<>?`\' \a\t\n\r\f.txt'
$ date > "$filename"
$ cat "$filename"
Thu Apr 12 15:14:29 EDT 2018
$ ls -lt
total 3836
-rw-rw-r-- 1 jackman jackman 29 Apr 12 15:14 ~ASDFzxcv!@#$%^&*()_+[]\{}|;:",.<>?`' ?????.txt
︙
$ ls -lt --show-control-chars
total 3836
-rw-rw-r-- 1 jackman jackman 29 Apr 12 15:14 ~ASDFzxcv!@#$%^&*()_+[]\{}|;:",.<>?`'
.txt
︙
Если вывод ls
перенаправляется на что-либо, кроме терминала (например, файл или канал ), по умолчанию будет использоваться стиль --show-control-chars
. Вы можете увидеть это, запустив ls -lt | cat
. ls
имеет другие параметры отображения; например, --quoting-style=WORD
.