Автор Тема: Анализ установленных в системе пакетов  (Прочитано 9501 раз)

Оффлайн vita

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4812
  • Да будет свет!
Для получения списка установленных в системе пакетов достаточно в терминале выполнить команду: dpkg --get-selections > packages.list
Файл packages.list со списком пакетов по умолчанию будет размещён в домашнем каталоге пользователя.

Аналогичную информацию, но с указанием версии пакета, можно получить с помощью скрипта, написанного представителем дебиановского форума Aalexeey:
Содержимое скрипта
#!/bin/bash

# AUTHOR:      (c) Aalexeey :-)
# NAME:         Packages_list
# DESCRIPTION:     GUI скрипт для dpkg создающий список пакетов, включая их версию, в системе
# REQUIRES:      dpkg, mate-dialogs | zenity, mate-dialogs-gnome, mate-notification, libnotify-bin
# LICENSE:      GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:      http://debianforum.ru/index.php?topic=9141.0
# ICON_USED:       /usr/share/icons/gnome/16x16/actions/edit-paste.png

case $LANG in

   ru* )
      # Russian (ru-RU)
      util="Packages_list"
      choose="Выбор папки и имени списка пакетов..."
      attention="Внимание"
      list_build=" Создание списка deb пакетов...."
      cancel="Каталог не выбран....\nPackages_list остановлен!"
      job_done="Список deb пакетов успешно создан в"
      job_canceled="Работа скрипта прервана, списка нет!"
      job_failed="Что-то пошло не так, списка нет!";;

esac

dpkg -l | cut -c 5- | sed -n '/=======/,$p' | sed -e 's/:amd64 /       /' -e '1s/-//' -e '1s/-.*//' > /tmp/packages_tmp.txt;

packages_width=$(sed -n '1p' /tmp/packages_tmp.txt | wc -m);

save_file=$(zenity --file-selection --save --confirm-overwrite --title="$choose");

if [ "$?" = 1 ]; then
   zenity --info --title="$attention" --text="$cancel" &
   notify-send "$util" "$job_canceled"
   exit 0;     
else
   file=$(basename "$save_file");
   cat /tmp/packages_tmp.txt | cut -c -"$packages_width" | sed -e '1d' -e 's/[[:space:]]*$//' > $save_file;
    sleep 1
   rm /tmp/packages_tmp.txt;
i=0
(while [ $((i <= 100)) '=' 1 ]
do
    echo $i
    sleep 0.1
    i=$((i + 5))
done) | zenity --progress --no-cancel --text="$list_build" --auto-close --width=300
if [ -f "$save_file" ]; then                         
   notify-send "$util" "$job_done\n<b>$file</b>"
else
   notify-send "$util" "$job_failed"
   fi
fi

Исполняемый скрипт рекомендуется разместить в отдельный каталог и получаемому в результате его запуска файлу присвоить произвольное имя с расширением .txt. Список пакетов появится в одном каталоге со скриптом.
Делай с нами, делай как мы, делай лучше нас!