Я хочу распаковать файл, я написал эту команду:
bunzip2 linux-source-4.15.0.tar.bz2
и получил это:
bunzip2: Input file linux-source-4.15.0.tar.bz2 is not a normal file.
Я хочу точно знать, в чем проблема.
Я запустил файл linux-source-4.15.0.tar.bz2
и получил:
linux-source-4.15.0.tar.bz2: symbolic link to linux-source-4.15.0/linux-source-4.15.0.tar.bz2
tar xf
.Как упомянутый Rinzwind, bunzip2
к сожалению, отказывается воздействовать на символьные ссылки. Вывод file
показанный, что Ваш .bz2
файл является символьной ссылкой, а не регулярным файлом.
То, как необходимо пойти о распаковке файла, зависит от конкретно, что Вы хотите сделать. Рассмотрение конкретного файла, на который Вы воздействуете, вероятно что Ваш bunzip2
команда не сделала бы вполне, что Вы хотели так или иначе, и что необходимо извлечь ее с tar
вместо этого.
Ваш .tar.bz2
файл является архивом tar, который bzip2-сжат. Вы спросили, как распаковать файл, который можно сделать (см. ниже). Но если Вы сделаете это, то результатом будет несжатый архив, содержание которого Вы затем, вероятно, хотели бы извлечь.
tar
команда, которая создает и извлекает архивы tar, может обработать само сжатие. Можно извлечь файлы из этого сжатого архива тем же путем, Вы были бы для несжатого архива tar, потому что tar
автоматически обнаруживает и обрабатывает сжатие:
tar xf linux-source-4.15.0.tar.bz2
Вы могли бы хотеть извлечь файл как свой собственный некорневой пользователь, которого можно сделать при помещении его где-нибудь, у Вас есть полномочия записи. Если это - то, что Вы хотите, я предлагаю идти к месту назначения и извлечь его путем предоставления его полного пути. Для того файла это могло бы быть:
tar xf /usr/srclinux-source-4.15.0.tar.bz2
Если Вы хотите tar
для списка каждого файла как, он извлекает его, добавьте v
опция:
tar xvf linux-source-4.15.0.tar.bz2
Если по некоторым причинам Вы хотели сказать tar
явно то, что архив, который Вы извлекаете, bzip2-сжат, Вы могли сделать так путем добавления j
опция:
tar xvjf linux-source-4.15.0.tar.bz2
(Можно использовать v
и j
опции, независимо от ли путь, который следует f
опция является абсолютной или относительной.)
Если Вы хотите распаковать файл и поместить результат в текущий каталог, можно использовать bzcat -d
и перенаправление результат:
bzcat -d linux-source-4.15.0.tar.bz2 >linux-source-4.15.0.tar
Если Вы хотите распаковать цель символьной ссылки, заменяя его исходным (несжатым) файлом, то можно использовать realpath
разыменовать символьную ссылку. В этом случае я сильно сомневаюсь, что Вы хотите это, но вот то, на что это похоже для дальнейшего использования:
bunzip2 "$(realpath linux-source-4.15.0.tar.bz2)"
Или просто найдите цель и передайте ее bunzip2
, так как необходимо определенно проверить то, что цель символьной ссылки прежде выполняет операцию, которая удаляет ее и заменяет ее чем-то еще (в случае, если Вы ошибаетесь, и цель не то, что/где Вы думаете, что это). Для нахождения цели можно выполнить это realpath
команда отдельно:
realpath linux-source-4.15.0.tar.bz2
Конечно, можно также осмотреть файлы с ls -l
, file
, и readlink
узнать, являются ли они символьными ссылками и какова их прямая цель.