LINUX.ORG.RU

Написал себе скрипт, но у меня к нему есть 4 вопроса

 , , ,


0

1

Вроде у меня всё работает как надо, я надеюсь.

В том плане, что скрипт выполняется, но во время скрипта в консоли появляется постоянно какой-то текст.

Во-первых:

tar: Removing leading '/' from member names

^В скрипте есть команды, которые архивируют файлы. В результате архивы создаются, скрипт выполняется, но в консоли постоянно вот эта строчка 👆

Я гуглил, что это значит, что-то прочитал по поводу того, что архив не может полный путь прописать. Пробовал разные варианты из интернета, чтобы убрать эту строчку, но ничего не помогло.

Во-вторых:

: Can't add archive to itself

^Опять же, создаётся архив, но иногда от него еще и вот это лезет 👆 От других архивов не лезет, только от одного, в котором скрытые файлы и папки.

В третьих:

mv: /ho/bo/pinux/file.tar: set owner/group (was: 0/0): Operation not permitted

^есть в скрипте перемещение файла из текущей папки в другую. Последние несколько архивов имели привилегии root. Только в папке назначения никакого рута нет, только один пользователь. И перемещение выполняется отлично, но в консоле написана вот эта 👆 строка от каждого архива с привилегиями рут.

moloko-1 | FAILED | rc=1 >>

В-4, в конце еще выполняется команда через ansible и появляется вот эта строчка 👆 красным цветом и весь вывод становится красным, но несмотря на это, оно выполняет работу как надо, на сколько я это понимаю. Я честно вообще не могу понять, вот выше есть строчка ovtsa-3 | CHANGED | rc=0 >> и от неё вывод оранжевым цветом, как положено, почему от этого красным??? Я уже пытался совместить эти команды в одну, пытался на башсибль перевести - ничего это не меняет.

Что я делаю не так, люди? Объясните, поведение моего скрипта, я уже третий день ломаю голову. Код скидывать не хочу, но если без этого никак, то придётся скинуть.

tar: Removing leading '/' from member names

Вангую архивацию из корневого каталога.

-C, --directory DIR
    меняет каталог на указанный 

: Can't add archive to itself

Опять вангую архивацию из корневого каталога.

set owner/group (was: 0/0): Operation not permitted

Для chown/chgrp не хватает прав.

Разберись, откуда у тебя запускается архивация и пляши уже от этого.

Написал себе скрипт

А нам не покажешь?

Radjah ★★★★★
()

Эхх …

Во-первых:

man tar
Там написано что это значит

Во-вторых:

Переведи написанное, он тебе говорит что пытаешься сделать х…ю

В третьих:

man mv
Читай что делает эта команда

В-4

Ну… наверное красным потому что failed. Читай man ansible.

Код скидывать не хочу, но если без этого никак, то придётся скинуть.

А с кода надо было начинать.
Скидывай.

Minona ★★☆
()

Это расплата за покусанных тобой котят!

Can’t add archive to itself

Ты пытаешься запихнуть архив внутрь самого себя, как Уроборос. Проверь параметры архивации.

По остальным пунктам, как тебе уже сказали, надо исходник смотреть.

hobbit ★★★★★
()

Делаешь бекапы tar-ом?

Первая строчка не страшная, это просто предупреждение, что если ты, допустим, архивируешь файл /bin/sh то в архиве он будет называться bin/sh (без слэша в начале). Если хочешь чтобы оно не выводилось, сделай -C / и архивируй bin/sh, тогда этого слэша сразу не будет и он не будет писать предупреждение о том, что он его отрезал.

Второе - ты архивируешь директорию и получившийся архив складываешь в неё же. Он тебя предупреждает что не будет его самого в себя архивировать, хоть ты ему и дал такую команду. Лучше так не делать и складывать архив вне того места, которое архивируешь.

Третье - ты перемещаешь файл между разными разделами, и делаешь это непривилегированным пользователем. mv для этого сначала копирует файл в новое место, а потом удаляет из старого. При копировании оно пытается скопировать и все его метаданные (владельца и группу в том числе), но не может, потому что у исходного файла они 0:0 и поставить такие обычный юзер не может.

Четвёртое это скорее всего последняя команда скрипта вернула ошибку. Чтобы понимать что там происходит, сделай так: в начало скрипта добавь #!/bin/sh -e, в конец echo "Done" и сделай ему chmod +x. Тогда при запуске вручную и успешном завершении ты увидишь надпись Done на экране, а если нет - ищи где он падает.

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

из корневого каталога.

Я читал в интернете об этом. Вот есть строчка в скрипте tar cf home.tar /home/pinux/*, которая архивирует файлы. Необязательно /home/pinux/, там были и другие каталоги, как из корня, так и не из корня системы.

Скрипт запускается из корневого каталога из /home/pinux/

Я тогда попробовал вот так из интернета tar сf hme.tar -C / home/pinux/, но это не помогло.

Вообще все те команды в скрипте работают без проблем, когда они не в скрипте, а выполняются по отдельности.

Для chown/chgrp не хватает прав.

Делал всякие chown как от рута, так и от юзера, но оно не работает, говорит, что отказанно в достуцпе и не меняет права.

Простите, я просто очень плохо разбираюсь в компьютерах.

Pinux001
() автор топика
Последнее исправление: Pinux001 (всего исправлений: 1)
Ответ на: комментарий от Pinux001

tar cf home.tar

Надеюсь перед этой строчкой есть где-то cd. Либо оно должно быть, либо пиши полный путь к архиву. Конкретно тут это, видимо, не причина проблем, но где-то может их создать, так что лучше сразу отвыкать от плохих привычек.

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

но это не помогло

Прочитай man tar

tar cJvf куда.tar.xz -C /откуда/ что

Либо сделай отдельный переход (cd) в нужный каталог.

Простите, я просто очень плохо разбираюсь в компьютерах.

Если ты в чём-то плохо разбираешься, то начни разбираться, и ты разберёшься.

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

У меня не было cd, просто скрипт, итак, запускается из юзерского каталога. Я делал проверку, чтобы скрипт запускался, только из домашнего каталога. Но учту, спс

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

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

Второе - ты архивируешь директорию и получившийся архив складываешь в неё же.

Я не знаю как иначе быть, разве что может выйти куда-нибудь в просто /home и оттуда всё делать..

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

Но проблем же это не сделает? В смысле том, что я вижу, что оно всё равно перемещается туда, хоть и не переносит права суперпользователя.

Pinux001
() автор топика
Последнее исправление: Pinux001 (всего исправлений: 1)
Ответ на: комментарий от Pinux001

Не надо никуда выходить. Пиши путь к архиву полностью, это намного удобнее.

tar czf /полный/путь/архива.tgz -C /полный/базовый/путь относительный/путь/файлов

Этой командой файлы с путём «/полный/базовый/путь/относительный/путь/файлов» будут архивироваться в указанный архив под именами «относительный/путь/файлов».

От текущей директории, выставленной с помощью cd, эта команда никак не зависит в таком виде.

Но проблем же это не сделает? В смысле том, что я вижу, что оно всё равно перемещается туда, хоть и не переносит права суперпользователя.

Не сделает, хотя может mv из-за этого возвращает ошибку и ansible её видит и пишет fail. Вообще mv неудобная команда, кажется у неё нет опции чтобы игнорировать права. У cp вот есть например.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Чтобы понимать что там происходит, сделай так: в начало скрипта добавь

Так я как бы захожу на тот сервер и вижу, что команда выполняется. Просто вывод в скрипте красным и всё. Причем любая другая команда оранжевым. Ну тут ладно, я буду разбираться дальше с ним.

спс.

А почему вы все архивируете в .tgz и .xz ? xD я вообще в tar делаю. Там просто сжатие разное, да?

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

Вообще mv неудобная команда, кажется у неё нет опции чтобы игнорировать права. У cp вот есть например.

Интересно, может думаю делать просто cp вместо него, а потом удалять огрызки в конце

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

Так я как бы захожу на тот сервер и вижу, что команда выполняется.

Без -e в ней внутри могут происходить ошибки, которые ты потом нигде не заметишь. А с -e скрипт после ошибки упадёт и ты её не упустишь.

А почему вы все архивируете в .tgz и .xz ? xD я вообще в tar делаю. Там просто сжатие разное, да?

tar не сжимает

firkax ★★★★★
()

у меня всё работает как надо, я надеюсь

просто лозунг современной индустрии )

во время скрипта в консоли появляется постоянно какой-то текст

«Стандартный вывод ошибок?! А зачем?»

next-anonymous
()
Ответ на: комментарий от next-anonymous

«Стандартный вывод ошибок?! А зачем?»

Наверное, чтобы я понял, что что-то не так написал в скрипте и полез разбираться

Я щас попробую исправить всё это

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

Тебе надо будет «открыть» код скрипта.

чтобы я понял, что что-то не так

Именно. За этим его диды и породили ;)

next-anonymous
()
Ответ на: комментарий от hobbit

Это расплата за покусанных тобой котят!

И я не кусал котят, я их люблю!

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

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

Если они нужны, но строчка мешает, то можно саппрессить выхлоп 2>/dev/null

только от одного, в котором скрытые файлы и папки.

Вообще все те команды в скрипте работают без проблем, когда они не в скрипте, а выполняются по отдельности.

Потому что в разных командных оболочках разные команды. Нужно архивировать командой, которая выполняется без ошибок в sh или на чем оно написано. Я когда-то так сломал систему командой cp >_<

просто cp вместо него, а потом удалять огрызки в конце

Поддерживаю.

и весь вывод становится красным, но несмотря на это, оно выполняет работу как надо

Очередной скрипт для архивирования? Выглядит это так, как будто произошла ошибка внутри. Это может произойти, если команда/скрипт получил ненулевой статус выхода. Причины могут быть разными, потому что любой ненулевой статус выхода команды указывает на ошибку. Какое-нибудь echo 1 в скрипте может означать завершение с ошибкой.

Clockwork ★★★★★
()

Спасибо @qanon и @Clockwork

и всем, кто отвечал!

Мне только осталось уточнить команду для sh, для архивирования скрытых файлов

правильно ли я понимаю?

tar -cf home.tar /home/pinux/.[^.]* 2>/dev/null

И может есть какие-то дополнительные меры, чтобы не повторить ошибки из соседней темы? Не могу удалить, помогите с папкой - rm: home/.wine64/dosdevices/z:/proc Permission denied (комментарий)

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

И может есть какие-то дополнительные меры, чтобы не повторить ошибки из соседней темы?

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

--exclude=".wine64"

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