- PVSM.RU - https://www.pvsm.ru -

Как узнать, что будет делать программа для Linux, не выполняя её по-настоящему?

Хотелось ли вам когда-нибудь узнать, какие именно действия будет выполнять команда Linux, ещё до вызова этой команды? Предположим, вы опытный пользователь, и вы знаете, как ведут себя многие команды. Но даже вам не под силу знать, как работает абсолютно всё. Конечно, определённую помощь в выяснении подробностей о командах может оказать веб-сервис Explainshell [1]. Для этого нужно будет скопировать и вставить туда интересующую вас команду, после чего вы найдёте подробное описание того, как работает каждая её часть. Однако, это не наш метод. Благодаря тому инструменту, о котором мы сейчас расскажем, узнать, как именно работает некая программа, можно прямо из командной строки.

Как узнать, что будет делать программа для Linux, не выполняя её по-настоящему? - 1 [2]

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

Как работает maybe?

Разработчик программы рассказывает о ней следующее: «Maybe выполняет процессы под управлением ptrace [3], с помощью библиотеки python-ptrace. Когда программа перехватывает системный вызов, который приводит к изменениям в файловой системе, она записывает этот вызов в журнал, затем модифицирует регистры процессора для того, чтобы перенаправить вызов на недействительный ID системного вызова (то есть, по сути, превращая этот вызов в пустую операцию). Далее, она устанавливает значение, которое возвращает эта пустая операция, таким образом, что оно указывает на успешное завершение исходного вызова. В результате процесс уверен в том, что всё то, что он пытается сделать, действительно происходит, в то время как в реальности не происходит ничего.»

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

Установка maybe

Прежде чем устанавливать maybe, проверьте, установлен ли в вашей системе менеджер пакетов pip. Если это не так — ниже приведены команды для установки pip в различных дистрибутивах Linux.

В Arch Linux и в других системах, построенных на базе этого дистрибутива, таких, как Antergos и Manjaro Linux, pip можно установить так:

sudo pacman -S python-pip

В RHEL и CentOS вам поможет следующая последовательность команд:

sudo yum install epel-release
sudo yum install python-pip

В Fedora это можно сделать так:

sudo dnf install epel-release
sudo dnf install python-p

Вот соответствующая команда для Debian, Ubuntu и Linux Mint:

sudo apt-get install python-pip

В SUSE и OpenSUSE используйте следующую команду:

sudo zypper install python-pip

После установки pip установите maybe:

sudo pip install maybe

Работа с maybe

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

$ maybe rm -r ostechnix/

Как видите, я собираюсь удалить папку ostechnix и хочу узнать, что произойдёт в моей системе, если будет выполнена вышеприведённая команда. Вот что сообщает об этом maybe:

maybe has prevented rm -r ostechnix/ from performing 5 file system operations:

 delete /home/sk/inboxer-0.4.0-x86_64.AppImage
 delete /home/sk/Docker.pdf
 delete /home/sk/Idhayathai Oru Nodi.mp3
 delete /home/sk/dThmLbB334_1398236878432.jpg
 delete /home/sk/ostechnix

Do you want to rerun rm -r ostechnix/ and permit these operations? [y/N] y

Как узнать, что будет делать программа для Linux, не выполняя её по-настоящему? - 2

Оказалось, что команда rm -r ostechnix/ выполнила бы 5 операций с файловой системой, о чём и сообщила maybe. Теперь я могу решить, надо ли мне выполнять эти операции или нет. По мне — так это просто замечательная возможность.

Вот ещё пример. Я хочу установить Inboxer [4] — настольный клиент для Gmail. Вот что удалось выяснить о соответствующей операции с помощью maybe:

$ maybe ./inboxer-0.4.0-x86_64.AppImage 
fuse: bad mount point `/tmp/.mount_inboxemDzuGV': No such file or directory
squashfuse 0.1.100 (c) 2012 Dave Vasilevsky

Usage: /home/sk/Downloads/inboxer-0.4.0-x86_64.AppImage [options] ARCHIVE MOUNTPOINT

FUSE options:
 -d -o debug enable debug output (implies -f)
 -f foreground operation
 -s disable multi-threaded operation

open dir error: No such file or directory
maybe has prevented ./inboxer-0.4.0-x86_64.AppImage from performing 1 file system operations:

create directory /tmp/.mount_inboxemDzuGV

Do you want to rerun ./inboxer-0.4.0-x86_64.AppImage and permit these operations? [y/N]

Если в ходе исследования некоей команды не удаётся обнаружить операций с файловой системой, maybe выведет нечто похожее на это:

$ maybe sudo pacman -Syu
sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?

Тут я попытался исследовать команду обновления моей Arch Linux, а maybe не обнаружила операций с файловой системой и не вывела никаких сообщений о таких операциях.

Итоги

Как видите, всё тут просто и понятно. Мне команда maybe очень понравилась, это как раз то, что я какое-то время искал. Теперь я могу без особых сложностей узнать, что будет делать команда или программа до её реального запуска. Надеюсь, maybe пригодится и вам.

Уважаемые читатели! Какие сценарии использования maybe вы видите? В материале упомянуто о том, что maybe — утилита, которая пока не вполне готова к использованию на ответственных системах. Знаете ли вы что-то подобное, но подходящее для запуска на таких системах?

Автор: ru_vds

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/270206

Ссылки в тексте:

[1] Explainshell: https://www.explainshell.com/

[2] Image: https://habrahabr.ru/company/ruvds/blog/344210/

[3] ptrace: https://en.wikipedia.org/wiki/Ptrace

[4] Inboxer: https://www.ostechnix.com/inboxer-unofficial-google-inbox-desktop-client/

[5] Источник: https://habrahabr.ru/post/344210/?utm_campaign=344210