LINUX.ORG.RU
ФорумTalks

[ЖЖ][нытик тред] tar -cf abc.iso abc.tar

 


0

1

Своими рассказами о том как я в очередной раз убил Линукс или похерил инфу самым неочевидным способом я, наверное, заработаю дурную славу на ЛОРе. Тем не менее, мое хождение по граблям, возможно, принесет пользу тем, кто на них еще не наступил, если я в очередной раз сотрясу воздух своими «почему?» и «за что?». С другой стороны глупо считать себя избранным - не я первый, не я и последний.

Нет, в этот раз я не убил Линукс. Точнее я почти его убил на прошлой неделе - во время большого обновления (включая ядро и загрузчик) системы. Когда aptitude скачал новые пакеты и начал установку - я в другом терминале с помощью MC копировал свежескачанное аниме на флешку, для просмотра на основном компьютере. Так как система ощутимо подтормаживала - я нечаянно лишний раз нажал на Enter. Впервые на моей памяти mplayer спокойно и без лишних настроек запустился в консоли и героически принялся проигрывать HD видео, но на ввод он не реагировал абсолютно. Через пару секунд все повисло и лечить данную ситуацию пришлось перезагрузкой с последующим разгребанием сломанных зависимостей и битых пакетов в aptitude.

А сегодня поутру я удачно сжал 8-ми гигабайтный образ диска до 10 кб tar-ом. tar весьма любопытная программка и засаду я почувствовал еще когда читал ман. Там честно было написано, что мануал на tar потерян в веках, а существующий был собран из комментариев к исходникам, так, что tar возможно может делать, «что-то еще». Заставить его сделать, «что-то еще» у меня получилось, попутав, входящий и выходящий файлы. Я привык, что вначале указывается входящий, а затем выходящий файл. Но в tar'е все делается совсем наоборот, что, в принципе, логично. Результат превзошел все мои ожидания, я опробовал данный способ и в Федоре, где и мануал на tar немного другой и SELinux по-умолчанию установлен и предположительно должен бы отслеживать подобную херню, но тем не менее...

tar честно намекает, что входящий и выходящий файлы как бы перепутаны местами:

[litd@main Downloads]$ tar -cf sheep.jpg sheep
tar: sheep: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

Но перед этим он молча и безжалостно убивает, в данном случае sheep.jpg. Я думаю это неправильно, возможно это даже баг. И вообще это не Unix-way - tar это не mv и не rm и он не должен делать их работу. Ну, или он хотя бы должен иметь некий ключ-предохранитель типа параметра force дабы не позволять случайно делать подобную ерунду.

Спасибо за внимание ^__^

SELinux по-умолчанию установлен и предположительно должен бы отслеживать подобную херню

Вроде, не должен.

GotF ★★★★★
()

... последующим разгребанием сломанных зависимостей и битых пакетов в aptitude.

Именно поэтому dpkg/apt я считаю убогими. Сам несколько раз ломал так debian.

Kosyak ★★★★
()
Ответ на: комментарий от Kosyak

Именно поэтому dpkg/apt я считаю убогими.

Так и запишем: «ниасилил».

Сам несколько раз ломал так debian.

Добавим: «ещё и руки кривые».

GotF ★★★★★
()
Ответ на: комментарий от Kosyak

>>... последующим разгребанием сломанных зависимостей и битых пакетов в aptitude.

Именно поэтому dpkg/apt я считаю убогими. Сам несколько раз ломал так debian.


По-моему, убогий ты. Если прервать работу rpm методом poweroff, то будет сильно легче? И да, apt-get -f install спасет всех.

Pavval ★★★★★
()
Ответ на: комментарий от GotF

Стоит отметить, что rpm-based пакетные менеджеры так не ломаются.

Kosyak ★★★★
()

Но в tar'е все делается совсем наоборот, что, в принципе, логично.

tar вообще по умолчанию выводит результат на stdout. Выходный файл ему надо специально указывать - через опцию -f <filename>, что ты и сделал.

Deleted
()
Ответ на: комментарий от Kosyak

Они магическим образом дописывают данные?

Deleted
()
Ответ на: комментарий от kam

+ за --force

Т.е. кроме явного указания файла опцией -f ты предлагаешь добавить ещё и опцию --force?

Deleted
()
Ответ на: комментарий от Kosyak

Попробуй выдернуть комп из питания при работе apt и zypper (или yum) и сравни результат.

Попробуй жахнуть пару раз кувалдой по жёсткому диску во время работы emerge и сравни результат!

Deleted
()
Ответ на: комментарий от Correctnoe_imya_polzovatelya

>> Если прервать работу rpm методом poweroff, то будет сильно легче?

только что пришлось так сделать. Всё живо и здорово.


А теперь то же при обновлении ядра. И расскажи мне, что все всегда будет работать.

Pavval ★★★★★
()
Ответ на: комментарий от Kosyak

Попробуй выдернуть комп из питания

Are you okay?

GotF ★★★★★
()
Ответ на: комментарий от Pavval

> А теперь то же при обновлении ядра.

В исходном сообщении ни слова про обновление именно ядра.
Ты как тот царь который хотел от Иванушки избавится, мол пойди за тридевять земель принеси то, не знаю что.

Correctnoe_imya_polzovatelya ★★★★★
()
Ответ на: комментарий от Kosyak

всмысле оно ставит пакеты по мере скачивания, а не все разом,
после закачки? как можно поломать систему в процессе обновления?
PS: не флейма ради, а действительно интересно(федору видел
давным давно ...толи первая толи вторая была, а дебиан и его клонов еще дольше не щупал)

izmena ★★
()

>Через пару секунд все повисло и лечить данную ситуацию пришлось перезагрузкой с последующим разгребанием сломанных зависимостей и битых пакетов в aptitude.

как же я рад, что не поставил тогда дебиан и ушёл сразу в генту - тут такая фигня не может возникнуть впринципе.

jcd ★★★★★
()

> А сегодня поутру я удачно сжал 8-ми гигабайтный образ диска до 10 кб tar-ом.
tar не сжимает, а архивирует. Сжимать должен компрессор: gzip, bzip2, lzma, xz.

AITap ★★★★★
()
Ответ на: комментарий от Correctnoe_imya_polzovatelya

ORLY

>В исходном сообщении ни слова про обновление именно ядра.

во время большого обновления (включая ядро и загрузчик) системы


:}

Deleted
()

>Т.е. кроме явного указания файла опцией -f ты предлагаешь добавить ещё и опцию --force?

Это хорошая идея. И если «force» не указан - tar не станет перезаписывать существующий файл. Но вообще, в моем случае походу имеет место баг - если на вход ничего не дано, то tar вообще не должен открывать файл на запись. Он так и делает если на вход ничего не дано. Но если на вход дан несуществующий файл, он почему-то делает подобную гадость.

Именно поэтому dpkg/apt я считаю убогими

Но я таки смог восстановить систему с помощью aptitude, так, что со своей задачей он более-менее справился.

Вроде, не должен.

Это печально.

Nebuchadnezzar ★★★★
() автор топика
Ответ на: комментарий от Correctnoe_imya_polzovatelya

В исходном сообщении ни слова про обновление именно ядра.

O'rly?

Точнее я почти его убил на прошлой неделе - во время большого обновления (включая ядро и загрузчик) системы

Pavval ★★★★★
()

>tar не сжимает, а архивирует. Сжимать должен компрессор: gzip, bzip2, lzma, xz.

Я это знаю. Поэтому я ОЧЕНЬ удивился когда на выходе оказался файл размером 10 кб, а потом смотрю - и на входе файл размером 10 кб...

Nebuchadnezzar ★★★★
() автор топика
Ответ на: ORLY от Deleted

ну, я имел неосторожность назвать своё сообщение исходным :}

Correctnoe_imya_polzovatelya ★★★★★
()
Ответ на: комментарий от Kosyak

+1 если бы это был rpm-based дистрибутив, то такой фигни бы не произошло

Reset ★★★★★
()

> tar честно намекает, что входящий и выходящий файлы как бы перепутаны местами:

так лучше? tar -c sheep -f sheep.jpg

chg ★★★★★
()
Ответ на: комментарий от Reset

ITT кто-то намекает, что в Дебиане автоматически удаляется старое ядро.

Deleted
()
Ответ на: комментарий от Reset

>всегда всё будет работать, ибо в нормальных дистрибутивах при обновлении ядра старое не сносится

При security-updates дырявое ядро заменяется.

Pavval ★★★★★
()

Все отписавшиеся в этом топике подскажите - вы окаменели с восходом солнца или нет?

Barlog_M
()
Ответ на: комментарий от Pavval

Очевидно, что оставлять старое ядро. И только если всё работает на новом, сносить РУКАМИ старое. Да, в дебиане даже security-updates могут поломать систему, я с этим сталкивался. И поэтому, сносить старое ядро это полный идиотизм.

Reset ★★★★★
()

>Очевидно, что оставлять старое ядро. И только если всё работает на новом, сносить РУКАМИ старое.

Ну в Debian'е старое ядро и не удаляется при обновлении.

так лучше? tar -c sheep -f sheep.jpg

Да. Но загвоздка не в этом, а в том, что «tar -c sheep.jpg -f sheep» и «tar -c sheep.jpg -f» при одной и той же, по сути, ошибке дадут разный результат. Т.е. во втором случае tar не открывает sheep.jpg на запись, а в первом случае делает это непонятно зачем.

Nebuchadnezzar ★★★★
() автор топика

Вчера просто был плохой день

У меня сдохли 2 инсталляции Арча. Первая потому что надо, вторая - потому что XFS смогла самоубиться.

stevejobs ★★★★☆
()

tar всё сделал правильно

Ты дал ключ -c — создать архив

Он его создал

А SELinux должен убивать таких пользователей импульсом в мозг, ящитаю

Gary ★★★★★
()
Ответ на: комментарий от Nebuchadnezzar

давай я за тебя маны почитаю?

-f, --file [HOSTNAME:]FILE
              use archive file or device FILE (default is "-", meaning stdin/stdout)

то есть, при tar -c sheep.jpg -f результирующим файлом выступает STDOUT

aol ★★★★★
()

Он его создал

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

то есть, при tar -c sheep.jpg -f результирующим файлом выступает STDOUT

Да ну?

[litd@main Downloads]$ tar -cf sheep.jpg
tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.

А SELinux должен убивать таких пользователей импульсом в мозг, ящитаю

Кстати спасибо, что напомнили!

Выдержка из статьи «Linux - за и против» журнал «Домашний компьютер» №6 2001 (сама статья бредовая, но эта фраза порадовала):

«И, пожалуй, самое главное обстоятельство в истории и мифологии Linux - это ее пользователи. Приверженцы Linux очень быстро успели приобрести репутацию этаких гопников компьютерного мира. Во всяком случае, мата, флейма и „наездов“ на многих форумах, посвященных Linux, ненамного меньше, чем в каком-нибудь „Беспредел-чате“ или сайте http://www.fuck.ru"

Nebuchadnezzar ★★★★
() автор топика
Ответ на: комментарий от Nebuchadnezzar

>> Он его создал

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


Программы делают то, что сказано, а не то, что подразумевалось.

Потому, что так решила левая пятка автора?


А в исходники заглянуть ваще никак? Алгоритм там простой:
1) создаем файл архива и записываем заголовок,
2) в цикле ходим по всем именам файлов, которые надо заархивировать, и записываем их в архив,
3) финализируем архив.
Поскольку во время п.2 не было найдено ни одного входного файла, получился пустой архив.

Relan ★★★★★
()
Ответ на: комментарий от Relan

>«tar -c sheep.jpg -f sheep» и «tar -c sheep.jpg -f»

Здесь я вру.

«tar -c sheep.jpg -f sheep» - отрабатывает, но sheep.jpg остается цел.

«tar -c sheep.jpg -f» - не запускается вообще.

Поскольку во время п.2 не было найдено ни одного входного файла, получился пустой архив.

Нет он так не работает. Если на входе файлов нет, то он не создает файл архива вообще и sheep.jpg остается цел. Если на входе есть файл, но такого файла не существует, то но создает пустой архив.

Nebuchadnezzar ★★★★
() автор топика
Ответ на: комментарий от Nebuchadnezzar

> Нет он так не работает. Если на входе файлов нет, то он не создает файл архива вообще и sheep.jpg остается цел. Если на входе есть файл, но такого файла не существует, то но создает пустой архив.

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

Relan ★★★★★
()

у тебя своп в системе был?

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.