Intereting Posts
Получение 256 цветов для работы в терминальном мультиплексоре Будет ли tar -cvzf packed.tar.gz mydir учитывать скрытые файлы? Mac OSX sed – удаление строки, содержащей точку, из нескольких файлов find -exec не работает в скрипте bash, но работает в терминале Веб-сервер, зараженный бэкдор-трояном, как исправить? Как добавить зависимости в библиотеке debian / control? Как удалить строки между двумя скобками в Unix Кнопка «Печать экрана» ничего не делает на Debian 8 «jessie» Не удалось удалить сопряженное устройство в Ubuntu 16.04 Не удается отправить письма с помощью BCC с использованием mailx «незаконный вариант – b» В правилах udev назначается одинаковое имя порта для модема с 4 портами ttyUSB Как мне разрешить права доступа к каталогам и посмотреть, не хватает ли прав на запись? Не удается подключиться к беспроводной сети Не удается ssh после добавления пользователя в группу докеров и перезагрузки Значение «Редакция» в выпуске ipset

tar и его ключевые буквы: это ошибка или функция?

Мне интересно спросить разницу в этих двух командах (т. Е. Только порядок их вариантов отличается):

  1. tar -zxvf foo.tar.gz
  2. tar -zfxv foo.tar.gz

Первый побежал отлично, а второй сказал:

 tar: You must specify one of the `-Acdtrux' or `--test-label' options Try `tar --help' or `tar --usage' for more information. 

И tar с --test-label и -zfxv сказал:

 tar (child): xv: Cannot open: No such file or directory tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now 

Затем я посмотрел на tar-руководство и понял, что в этом примере используется ключ -f !

AFAICT нет необходимости в этом ограничении, или нет ?! потому что, по моему мнению, коммутаторы должны быть бесплатными.

Глядя на ваше сообщение об ошибке, очевидно, что вы не использовали tar а скорее gtar .

В общем, это может помочь понять вещи:

  • Обычно tar всегда нуждается в аргументе файла. Если он отсутствует, он будет читать / писать с / на реальное магнитофонное устройство системы по умолчанию. star изменила это в 1982 году, чтобы использовать stdin / stdout по умолчанию, а некоторые другие реализации tar (например, gtar) недавно вошли в этот пример.

  • tar не реализует ведущие - для опций, которые называются key letters в случае команды tar. Некоторые добавления позже добавлены - как нетбук для удобства пользователей, но вы не можете положиться на это.

  • Способ tar анализирует свои аргументы (в частности, аргумент файла архива), очень рискован. Я видел много архивов tar, которые уничтожили один из файлов, которые должны быть в архиве, потому что связанный аргумент файла был взят в качестве файла архива tar. star по этой причине (если она называется изначально как star ) не позволяет «f» объединяться с другими параметрами. Если star называется tar она реализует совместимость командной строки с tar , но по-прежнему обрабатывает аргумент для буквы «f» по-разному: аргумент разрешен только в том случае, если он относится к реальному файлу устройства или когда (в режиме записи) файл еще не существует.

Я рекомендую избегать рискованной исходной командной строки tar и, скорее, использовать современный безопасный синтаксис командной строки, который вы получаете со star .

Из-за проблемного синтаксиса командной строки tar , в начале 1990-х годов существовали так называемые tar wars . В результате была создана и стандартизирована программа pax (латынь для «мира» в смоляных войнах). pax однако, не приобрел популярности, поскольку его синтаксис менее рискован, но также менее интуитивен, чем синтаксис tar. Другая проблема может заключаться в том, что gpax более или менее не поддерживается.

Порядок переключателей является бесплатным, но -f имеет обязательный аргумент, который является файлом, который tar будет читать / писать.

Вы могли бы сделать

 tar -zf foo.tar.gz -xv 

и это будет работать, и у вас есть требование о неспецифическом порядке коммутаторов.

Вот как работают все команды с параметрами, которые имеют аргументы.

Традиционно опции tar более или менее «без порядка» (порядок опций f и b имеет значение, если оба указаны). Однако использование ведущей черты заставляет GNU tar анализировать параметры таким образом, который считается более совместимым с другими командами, где указание параметра, требующего аргумента (например, имя файла для f ), немедленно уничтожит остальную часть слова «слово», , если таковой имеется, в качестве аргумента (традиционно tar использует следующее слово в качестве размера файла / блока при f или b ). В вашем случае в качестве имени файла принималось «xv».

Однако это поведение нельзя использовать для переносимости. Для максимальной переносимости вам следует избегать использования тире, всегда поставить f последним и всегда помещать пробел между f и именем файла. Это, однако, упрощение, которое ломается, если вам нужен параметр b или вообще любой параметр (например, C ), отличный от f , для которого требуется аргумент.

Это задокументировано в разделе «Руководство по стирке» «Три стиля стилей» . Некоторые другие реализации (например, FreeBSD) относятся к старым опциям стиля как «связанное слово опции». И, конечно, некоторые реализации могут поддерживать только этот тип опции и могут или не могут игнорировать тире, если они включены. Это единственная форма вызова, указанная в спецификации Single Unix, и поэтому гарантируется работа практически для всех систем.

В tar, в коммутаторах устарели много лет назад и больше не нужны. Тар фактически говорил вам это, но больше не делает.

 ie: tar zxvf foo.tar.gz tar zfxv foo.tar.gz Both of these work fine without the -.