Предположим, ваш tar-файл - $ TARBALL
с абсолютным путем .
tar cfC $TARBALL /a/b/z .
tar AfC $TARBALL /e/f/z .
Параметр -C
изменяет каталог на следующий аргумент. Что неясно, так это то, что произойдет, если файлы с одинаковыми именами будут находиться в обоих каталогах.
Альтернативой является сохранение имен путей:
tar cf $TARBALL /a/b/z /e/f/z
Имена путей будут сохранены и хранятся в архиве, и эти каталоги будут созданы во время извлечения.
ПРИМЕЧАНИЕ.:ifconfig
является устаревшей командой. вы должны использовать cmds. в пакете iproute2 в будущем. Ниже я покажу, как использовать ip
для достижения желаемого с помощью инструмента замены.
Вместо того, чтобы делать это с помощью ifconfig
, я бы рекомендовал вместо этого использовать команду ip
.
Эта форма показывает IP-адрес в нотации CIDR:
$ ip addr list eth0 | awk '/inet.*brd/ {print $2}'
10.0.2.15/24
-or-
$ ip a l eth0 | awk '/inet.*brd/ {print $2}'
10.0.2.15/24
Эта форма показывает сетевой адрес в нотации CIDR:
$ ip route show | awk '/eth0.*scope/ {print $1}'
10.0.2.0/24
Вы также можете использовать команду ipcalc
для управления указанными выше адресами для вычисления других форматов. Например:
$ ipcalc -n $(ip a l eth0 | awk '/inet.*brd/ {print $2}')
NETWORK=10.0.2.0
$ ipcalc -p $(ip a l eth0 | awk '/inet.*brd/ {print $2}')
PREFIX=24
С помощью ipcalc
вы можете использовать его для более простого формирования любых вариантов, которые вы хотите, вместо того, чтобы делать много sed
и awk
для разбора текста, который обычно слишком сложен.
Чтобы изменить командную строку так, чтобы она делала то, что вам нужно, сначала нужно понять, что она делает. Вот анализ:
echo "$(<something>)""(rw,sync)"
Запустит something
и примет его в качестве входных данных для вашего echo
. Все остальное — обычный текст, который нужно echo
редактировать.
ifconfig eth0
Получает информацию о сети.
grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*'
Изолирует несколько IP-адресов в вашей системе. -E
указывает grep использовать регулярные выражения, поэтому вы можете использовать [0-9]*
, например, для сопоставления всех чисел. -o
указывает grep выводить только ту часть, которая соответствует регулярному выражению, а не всю строку, которая соответствует условию grep, как это было бы по умолчанию. Таким образом, если, например, строка ввода inet addr:10.0.0.159 Bcast:10.0.0.255 Mask:255.255.255.0
, она будет выводить только inet addr:10.0.0.159
, исключая части Bcast
и Mask
.
grep -Eo '([0-9]*\.){3}[0-9]*'
Это то же самое, что и выше, за исключением того, что без метки inet addr
, что означает, что вы конкретно изолируете IP-адрес и удаляете метку. И, наконец,
grep -v '127.0.0.1'
удаляет этот один IP-адрес из вашего списка выходов, потому что вам не нужен петлевой IP-адрес.
Как видите, ваша команда получает вывод ifconfig
и отфильтровывает информацию, выделяя только ту часть информации, которая вам нужна. Он не выполняет никаких расчетов или обработки информации. Но вы хотите, чтобы он напечатал подсеть и маску,которые являются информацией, которая явно не отображается с помощью ifconfig
. Другими словами, вы не можете просто отфильтровать вещи по-другому, чтобы получить то, что вы хотите. Вам придется выполнить некоторую обработку, некоторые вычисления с использованием поля Mask
в конце строки. Таким образом, вы не можете «изменить команду, чтобы распечатать то, что вы хотите». Вы должны создать совершенно другую команду.
Ответ slm использует аналогичную технику (фильтрации информации, чтобы оставить только то, что вам нужно ), но изменил ввод на команду, которая будет содержать необходимую вам информацию. :-)Если у вас не было команды, которая выводит именно то, что вы хотите, и ее обработка была единственным вариантом, вот уродливый набор if
, который вы можете использовать в качестве примера или базы в будущем.. Он использует первое решение slm и предполагает, что ваша маска всегда равна 8, 16 или 24.
ip a l eth1 | awk '/inet.*brd/ {split($2,add,"/");split(add[1],ip,".");if(add[2]<=24){ip[4]=0} if(add[2]<=16){ip[3]=0} if(add[2]<=8){ip[2]=0} print ip[1]"."ip[2]"."ip[3]"."ip[4]"/"add[2];}'
Эта команда разделяет вывод ip
между add
ress (10.0.0.159 )и маской (8 ). Затем он разбивает IP на 4 номера. Затем он устанавливает числа равными нулю в соответствии с маской. Но он не побитовый, то есть будет работать только с масками 8, 16 и 24, потому что это то, что я жестко запрограммировал. ;)
Я надеюсь, что вы могли бы узнать немного больше об инструментах в ваших руках. ^ _^