Ответы на часто задаваемые вопросы, которые приходится решать новичкам при работе с операционной системой Ubuntu. Почти все написанное здесь подойдет и к Debian. Непонятные термины и сокращения см. в разделе "Словарик", в конце статьи.
Потому что grub или система пытается выводить текстовые сообщения загрузки в графическом режиме на неправильно сконфигурированном видеодрайвере. Нужно сконфигурировать grub, и нужно правильно выбрать видеодрайвер на экране загрузки (нужны права администратора).
GRUB. В конфигурационном файле /etc/default/grub раскомментируйте строку GRUB_TERNINAL=console, сохраните файл, затем выполните команду update-grub. Также может понадобиться изменить опцию загрузки Linux "splash quiet" на "nomodeset".
Посмотреть открытые порты могут утилиты netstat, lsof и nmap. Первые две команды показывают порты на локальной машине, а nmap позволяет просканировать сеть по определенному IP или диапазону адресов IP.
Информацию об этом можно узнать из лога X-сервера:
~$ grep -i chipset /var/log/Xorg.0.log
[ 970.068] (II) NOUVEAU driver for NVIDIA chipset families :
[ 970.075] (II) VESA: driver for VESA chipsets: vesa
1. Запустите команду lsblk, чтобы посмотреть состояние дисков:
~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 37,3G 0 disk
L-sda1 8:1 0 37,3G 0 part /
sdb 8:16 1 7,2G 0 disk
L-sdb1 8:17 1 7,2G 0 part
sr0 11:0 1 1024M 0 rom
По результату этой команды можно узнать, что есть устройство sda1 размером 37.3 гигабайта, смонтированное в корневой каталог /, очевидно что это жесткий диск. Также есть устройство sdb1 размером 7.2 гигабайт, но оно не смонтировано, и к нему не привязан ни один файл. Это наша флешка.
2. Нужно узнать, какой путь в системе до этой флешки, и как она отформатирована. Это можно сделать с помощью команды sudo lshw. Ниже показана часть вывода sudo lshw, относящийся только к флешке:
Или вариант с возможностью прокрутки (выход из режима просмотра клавишей Q):
$ sudo lshw | less
[Способ 2: команда lsb_release]
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
[Способ 3: с помощью графического интерфейса]
В Ubuntu откройте окно Настройки -> О системе:
[Способ 4: /etc/lsb-release или /etc/os-release]
Файл /etc/lsb-release покажет версию Ubuntu в отдельных строках в виде номера релиза и его описания. Это разработано для старых систем, так что можете использовать это для Ubuntu устаревшей версии.
Также вы можете получить ту же самую информацию, просмотрев файл /etc/os-release. Это совместимо с Ubuntu 16.04 и более свежей версии.
При логине в окне консоли система предупреждает о наличии обновлений:
10 updates can be installed immediately.
10 of these updates are security updates.
Как их установить? Процесс по шагам:
1. Запуск apt update подготовит обновления для установки.
~$ sudo apt update
Сущ:1 http://ru.archive.ubuntu.com/ubuntu disco InRelease
Сущ:2 http://ru.archive.ubuntu.com/ubuntu disco-updates InRelease
Сущ:3 http://ru.archive.ubuntu.com/ubuntu disco-backports InRelease
Сущ:4 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu disco InRelease
Пол:5 http://security.ubuntu.com/ubuntu disco-security InRelease [97,5 kB]
Получено 97,5 kB за 5с (18,8 kB/s)
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Может быть обновлено 5 пакетов. Запустите «apt list --upgradable» для их показа.
2. Запуск apt list --upgradable покажет информацию об обновлениях.
~$ apt list --upgradable
Вывод списка… Готово
libmysofa0/disco-updates,disco-security 0.6~dfsg0-2ubuntu0.19.04.1 i386 [может быть обновлён с: 0.6~dfsg0-2]
linux-generic/disco-updates,disco-security 5.0.0.19.20 i386 [может быть обновлён с: 5.0.0.17.18]
linux-headers-generic/disco-updates,disco-security 5.0.0.19.20 i386 [может быть обновлён с: 5.0.0.17.18]
linux-image-generic/disco-updates,disco-security 5.0.0.19.20 i386 [может быть обновлён с: 5.0.0.17.18]
linux-libc-dev/disco-updates,disco-security 5.0.0-19.20 i386 [может быть обновлён с: 5.0.0-17.18]
3. Теперь можно обновить систему запуском для apt одной из команд: upgrade или full-upgrade (раньше вместо full-upgrade была аналогичная команда dist-upgrade).
upgrade. Эта команда загрузит пакеты и выполнит их необходимо обновление. Команда устанавливает самые новые версии всех пакетов доступные в репозиториях. Использует все репозитории из /etc/apt/souces.list и /etc/apt/souces.list.d/*. То есть обновляются пакеты не только из официальных репозиториев, но и из PPA. Обновляются только установленные пакеты, если же для обновления пакета необходимо установить или удалить другой пакет, такие пакеты обновлены не будут.
full-upgrade. Эта команда аналогична upgrade, просто она задает меньше вопросов и более интеллектуально подходит к процессу установки. Здесь поддерживается умное разрешение зависимостей для новых версий пакетов. Конфликтующие пакеты могут быть удалены, а новые, дополнительные - установлены.
Для ubuntu рекомендуется именно команда обновления full-upgrade, поскольку она более продумана и обновляет больше пакетов.
~$ sudo apt full-upgrade
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Расчёт обновлений… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
dkms libcuda1-340 libxnvctrl0 pkg-config screen-resolution-extra
Для их удаления используйте «sudo apt autoremove».
Следующие НОВЫЕ пакеты будут установлены:
linux-headers-5.0.0-19 linux-headers-5.0.0-19-generic
linux-image-5.0.0-19-generic linux-modules-5.0.0-19-generic
linux-modules-extra-5.0.0-19-generic
Следующие пакеты будут обновлены:
libmysofa0 linux-generic linux-headers-generic linux-image-generic
linux-libc-dev
Обновлено 5 пакетов, установлено 5 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 64,0 MB архивов.
После данной операции объём занятого дискового пространства возрастёт на 250 MB.
Хотите продолжить? [Д/н]
Можно обновить все пакеты (если ответить на вопрос утвердительно, нажав клавишу Y и Enter), а можно выборочно (нажав N и Enter). При выборочной установке для команды apt full-update (заметьте, это уже уже другая команда, не full-upgrade) указывается имя пакета, например:
~$ sudo apt full-update linux-libc-dev
Другие способы обновлений хорошо описаны в статье [3].
PPA упрощает установку программ в Ubuntu, которых нет в Software Center. Когда Вы начали использовать Ubuntu и его производные дистрибутивы, включая elementary OS, Linux Mint, и т. д., то наверняка встречались с аббревиатурой "PPA". Она используется в контексте добавления и удаления приложений (перевод статьи: What is PPA in Ubuntu, and how to Add/Remove it site:fosslinux.com).
PPA это сокращение от "Personal Page Archive". Представляет из себя веб-страницу, где содержится набор инструкций для установки приложения, которое обычно в не включено в Ubuntu Software Center. PPA может быть сделано кем угодно. Приложение, сохраненное в хранилище PPA, называется "репозиторием" (repository, или кратко repo). Когда Вы добавляете репозиторий PPA на свой компьютер, то это значит, что добавляется ссылка на сервер загрузки, с которого Ваш компьютер получит приложение и в будущем будет получать его обновления.
Таким образом, PPA обслуживается определенными разработчиками (или некоторой организацией). Это вносит некий риск в для Вашей системы, потому что не все PPA хорошо защищены. Точно так же, как не все программы Microsoft Windows "чистые", существует вероятность, что некоторые PPA могу повредить операционной системе или данные на компьютере. К счастью, причина часто не в том, что на компьютер может попасть вредоносное ПО, просто программы иногда бывают устаревшие или некачественно написаны.
Лучший способ избежать риска - отказаться от установки. Перед добавлением PPA уделите немного времени чтению содержимого страницы PPA, и проверьте, когда она последний раз обновлялась, и поддерживается ли какая-то активность этого проекта. Если проект приложения поддерживается, то разработчики будут периодически обновлять его в целях безопасности и устранения багов. Также проверьте, работает ли пакет PPA на Вашей версии Ubuntu. Для этого раскройте информационный раздел "Technical details about this PPA", и в выпадающем списке проверьте наличие нужной версии Ubuntu.
Добавление PPA. Чтобы добавить PPA, запустите терминал и используйте следующие команды.
sudo add-apt-repository [источник]
Здесь "источник" это то, что перечислено на страничке PPA. Как только repo добавлен на Ваш компьютер, нужно обновить список repo:
sudo apt update
И наконец, нужно установить пакет:
sudo apt install [имя пакета]
Удаление PPA. Для удаления PPA используйте команду remove:
Если Вы предпочитаете интерфейс GUI, то в нем можно выполнить аналогичные действия. Запустите утилиту "Software & Updates" (Программы и обновления) и перейдите на закладку "Other Software" (стороннее ПО).
Вы увидите в списке все PPA, которые установлены на Вашем компьютере. Просто выберите источник PPA и кликните на кнопке "Remove".
Показанные ниже команды относятся к менеджеру пакетов apt, и их необходимо выполнять под учетной записью администратора, либо через повышение привилегий sudo. Иногда вместо apt нужно использовать apt-get.
Итак, чтобы установить GCC, выполните следующий список команд.
apt update
apt install gcc
После этого gcc будет запускаться. Следующая команда установит дополнительный пакет утилит и библиотек:
Копирование и вставка текста в Linux (консоль LXTerminal, браузер и другие программы) работает непривычно для тех, кто пользовался putty на Windows. В буфер обмена копия (Copy) производится автоматически, когда пользователь выбрал текст левой кнопкой мыши, а вставка (Paste) производится средней кнопкой [5].
В некоторых программах для копирования/вставки может работать контекстное меню по правой кнопке мыши, а также горячие клавиши Ctrl+Insert or Ctrl+Shift+C (для Copy) и Shift+Insert or Ctrl+Shift+V (для Paste).
PuTTY сразу закрывает окно при попытке подключиться к настроенной сессии. При запуске из командной строки выводится сообщение:
PuTTY: unable to load font "server:fixed"
Если запустить через sudo, то такой проблемы нет.
Как исправить:
1. Запустите putty. В окне настройки сессии выберите нужную сессию, нажмите Load. Перейдите в раздел Window -> Fonts. В поле ввода "Font used for ordinary text" стоит шрифт, который putty для обычного пользователя по какой-то причине использовать не может (server:fixed).
2. Справа от поля ввода нажмите на кнопку Change..., выберите другой моноширинный шрифт.
3. Сохраните изменения (Session -> кнопка Save). После этого проблема будет устранена.
Чтобы для создаваемых сессий автоматически выбирался другой шрифт, необходимо сделать следующее:
1. В текстовом редакторе откройте файл настроек по умолчанию для putty:
$ gedit ~/.putty/sessions/Default%20Settings
2. Поменяйте в этой файле опцию FontName на другой моноширинный шрифт. В этом примере устанавливается шрифт client:Monospace размером 10.
FontName=client:Monospace 10
3. Сохраните файл.
Теперь все создаваемые новые сессии будут по умолчанию устанавливать шрифт client:Monospace 10.
Команда для запуска системного монитора gnome-system-monitor. Для удобства можно настроить запуск системного монитор теми же клавишами, как это делалось в Windows.
Как это сделать, процесс по шагам:
1. Зайдите в Параметры -> Клавиатура -> кнопка "Просмотр и изменение комбинаций клавиш".
2. Кликните на плашку в конце списка "Дополнительные комбинации клавиш" -> +. В поле "Имя" введите любое значение например "Системный монитор", в поле "Команда" введите gnome-system-monitor.
3. Кликните на кнопку "Установить комбинацию клавиш...". Нажмите клавишу Ctrl, удерживая её нажмите и удерживайте Shift, и нажмите Esc. Кликните на кнопку "Установить". Получится комбинация клавиш Ctrl+Shift+Esc, такая же как была для вызова taskmngr в Windows.
Причем в других программах (например gedit) эта стандартная комбинация клавиш сохранения файла работает нормально. Поведение довольно странное, явный глюк, потому что горячая клавиша для меню "Настройки" по умолчанию не задана, и вообще комбинация клавиш Ctrl+S нигде в хоткеях системы не используется, кроме как для поиска по настройкам.
Очевидно, что это просто ошибка конфигурации Ubuntu 22.04.3 LTS и/или VSCode. Исправляется следующим костылем:
1. Зайдите в меню Настройки -> Просмотр и изменение комбинаций клавиш, в строке поиска введите Настройки (или перейдите в раздел Ярлыки -> Настройки).
2. Откроется настройка комбинации клавиши для этого окна в состоянии "Не определено".
3. Задайте здесь произвольную комбинацию клавиш, например Ctrl+N:
4. Выйдите из настроек и перезапустите систему.
После этого меню настроек будет открываться горячей клавишей Ctrl+N, и комбинация клавиши Ctrl+S будет нормально сохранять файл в Visual Studio Code.
Откройте в текстовом редакторе файл ~/.bashrc и добавьте в него строку:
alias make="make -j"
Сохраните файл и закройте текстовый редактор. Изменения вступят в силу после перезапуска терминала - вместо команды make в командную строку будет подставляться make -j, что включает многопоточную работу утилиты make. Это значительно ускоряет компиляцию сложных проектов.
В статье [6] описаны 3 способа, но мне нравится из них самый простой. Например, чтобы удалить все объектные файлы в каталоге проекта (текущий каталог .), можно использовать команду:
Команда find ~ -name имяфайла чувствительна к регистру искомого имени файла, а команда find ~ -iname имяфайла не чувствительна к регистру имени файла (iname от слова insensitive).
Обычно в случае каких-либо проблем с запуском программа выдает в консоли причину ошибки. Но иногда этого по какой-то причине не происходит, программа завершается без каких-либо сообщений. В этом случае может помочь утилита strace.
$ ./Xplorer-7.0.8-linux-installer.bin
Никакого вывода не последовало, программа просто завершилась. Запуск через strace:
В этом выводе видно, что проблема в не найденной библиотеке ld-linux.so.2. Она должна находиться в пакете libc6:i386, и решить проблему можно командой sudo apt-get install libc6:i386.
Иногда при установке библиотеки появляется ошибка "dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem."
Пример подобного рода ошибки:
$ sudo apt-get install libc6:i386
E: Работа dpkg была прервана, вы должны вручную запустить «sudo dpkg --configure -a»
для устранения проблемы.
Ошибка произошла из-за того, что утилита APT не запустила автоматически менеджер пакетов dpkg, потому что в текущей ситуации это может привести к неожиданным изменениям в системе пользователя, наподобие конфигурирования пакетов.
С этой проблемой столкнулся, когда нужно было передать логи компиляции китайцам. Многие сообщения об ошибках в логах были на русском языке, что конечно было неприемлемо. Решить проблему позволила следующая команда:
С этой ошибкой я столкнулся, когда пытался запустить клиент WeChat (https://github.com/geeeeeeeeek/electronic-wechat/releases/download/V2.0/linux-x64.tar.gz).
Установить библиотеку libgconf-2.so.4 можно командой:
При попытке подключить устройство USB-UART коннектора на чипе CH341 не появлялось устройство /dev/ttyUSB0. Вместо этого в /var/log/kern.log выводилось сообщение:
usb 3-4: new full-speed USB device number 55 using xhci_hcd
usb 3-4: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=80.33
usb 3-4: New USB device strings: Mfr=0, Product=2, SerialNumber=0
usb 3-4: Product: USB Serial
ch341 3-4:1.0: ch341-uart converter detected
usb 3-4: ch341-uart converter now attached to ttyUSB0
input: BRLTTY 6.4 Linux Screen Driver Keyboard as /devices/virtual/input/input51
usb 3-4: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1
ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
ch341 3-4:1.0: device disconnected
И после этого последовательное устройство /dev/ttyUSB0 становилось недоступным. Очевидно, что проблема возникает из-за сервиса BRLTTY (демон консольного ввода для незрячих [7]), который запускает клавиатурный интерфейс.
Чтобы вернуть ttyUSB0, нужно запретить этот сервис командами:
После этого переподключите USB-UART в порт USB, и устройство /dev/ttyUSB0 нормально обнаружится:
usb 3-4: new full-speed USB device number 57 using xhci_hcd
usb 3-4: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=80.33
usb 3-4: New USB device strings: Mfr=0, Product=2, SerialNumber=0
usb 3-4: Product: USB Serial
ch341 3-4:1.0: ch341-uart converter detected
usb 3-4: ch341-uart converter now attached to ttyUSB0
Эта проблема у меня возникла при попытке воспользоваться утилитой bootx для прошивки через USB чипа GX8008C:
$ ../bootx-master/bootx -m leo_mini -t u -c "download 0 output/vsp.bin;reboot"
Version : v1.5.3 (20191009)
NationalChip GX8010 Download Tools
Copyright (C) 2001-2019 NationalChip Co., Ltd
ALL RIGHTS RESERVED!
Please press BOOT button and power on or restart the board...
Error opening libusb: LIBUSB_ERROR_ACCESS
Если запустить эту команду через sudo, то такой проблемы не возникает. Но конечно, каждый раз вводить пароль sudo для перепрошивки неудобно. Необходимо дать права доступа на подключаемое устройство.
Как это сделать, процесс по шагам:
1. Узнайте сначала VID и PID подключаемого устройства, чтобы для него можно было настроить правила доступа. Для этого можно просмотреть конец содержимого файла /var/log/kern.log после подключения устройства GX8008C следующей командой:
$ sudo tail -f /var/log/kern.log
...
usb 3-5.3.1: new high-speed USB device number 25 using xhci_hcd
usb 3-5.3.1: New USB device found, idVendor=a700, idProduct=0001, bcdDevice= 0.00
usb 3-5.3.1: New USB device strings: Mfr=0, Product=4, SerialNumber=0
usb 3-5.3.1: Product: NationalChip Storage
usb 3-5.3.1: USB disconnect, device number 25
usb 3-5.3.1: new high-speed USB device number 26 using xhci_hcd
usb 3-5.3.1: New USB device found, idVendor=a700, idProduct=0001, bcdDevice= 0.00
usb 3-5.3.1: New USB device strings: Mfr=0, Product=4, SerialNumber=0
usb 3-5.3.1: Product: NationalChip Storage
Из этого лога видно, что у подключенного устройства VID 0xA700 и PID 0x0001.
2. Создайте в каталоге /etc/udev/rules.d файл NationalChipVIDA700PID0001.rules:
Здесь вместо username подставьте свое имя пользователя в системе, который должен входить в группу plugdev.
4. Если вы как пользователь не входите в группу plugdev, то туда необходимо себя добавить. Посмотреть пользователей в группе plugdev можно командой getent group:
$ getent group plugdev
plugdev:x:46:user
$ getent group plugdev | awk -F: '{print $4}' | tr "," " "
user
Если вы как пользователь не входите в группу plugdev, то добавьте себя туда командой usermod [8].
$ usermod -a -G plugdev username
Здесь вместо username подставьте свое имя пользователя в системе.
5. Отключите устройство GX8008C от порта USB, подключите его обратно. Удерживая кнопку BOOT, нажмите на кнопку RST. Устройство NationalChip Storage обнаружится в системе, и будет доступно на полный доступ. Теперь утилита bootx сработает с правами обычного пользователя без всяких проблем:
$ ../bootx-master/bootx -m leo_mini -t u -c "download 0 output/vsp.bin;reboot"
Version : v1.5.3 (20191009)
NationalChip GX8010 Download Tools
Copyright (C) 2001-2019 NationalChip Co., Ltd
ALL RIGHTS RESERVED!
Please press BOOT button and power on or restart the board...
downloading [1/2] :
[==========][100%]
downloading [2/2] :
[==========][100%]
Excute cmd : download 0 output/vsp.bin
[==========][100%]
done
Excute cmd : reboot
done
К сожалению, утилита zip создает архивы с сохранением полных путей до файлов, что при использовании рекурсивного сохранения файлов в архив (zip -r) создает неудобства. Гораздо лучше использовать утилиту командной строки 7z:
$ sudo apt install p7zip-full $ 7z --help
Пример упаковки с рекурсией папки ~/asm/Quark в архив quark.zip, находящийся в текущей директории:
Иногда необходимо положить архив не все содержимое папки, а только некоторые выбранные файлы. Выбранные файлы удобно держать в виде списка, в отдельном файле, чтобы потом построчно его обработать и каждую строку передать в команде архиватору 7z. Это можно сделать с помощью цикла while/do скрипта bash.
Предположим, что список файлов для архивации находится в файле backuplist.txt (в списке могут быть как имена отдельных файлов, так и имена папок):
Тогда для архивации файлов из этого списка может быть применен следующий скрипт:
#!/bin/bash # Каталог, относительно которого находятся архивируемые файлы в списке: SRCDIR=$HOME/National/SDK # Имя создаваемого архива: ARCHIVE_NAME=$HOME/MyDoc/NationalChip/GX8008C-SDK.zip # Удаление временных файлов, чтобы они случайно не попали в архив: find$SRCDIR-name"*.o"-type f -delete find$SRCDIR-name"*.d"-type f -delete # Переход в каталог, где находятся архивируемые файлы из списка: cd$SRCDIR # В этом файле находится список файлов для архивации: input="backuplist.txt" # Построчная обработка списка, с передачей в командную строку архиватора # каждого файла из списка: whileIFS= read-r linedo
7z a $ARCHIVE_NAME$line done<"$input" # Генерация уникального имени файла для архива из метки времени [9]:
autoname $ARCHIVE_NAME --pattern:YYMMDDhhmmss
Это может быть удобно, когда найденный файл двоичный, или организован как одна очень большая строка. В этом случае вывод может быть очень громоздким, и даже не поместиться в буфер консоли.
Можно скопировать информацию владельца (owner), принадлежность группе (group), права доступа (permission) и метку времени (timestamp), т. е. атрибуты файла, с помощью параметра --reference команд chown, chmod, touch. Ниже приведен скрипт, который выполнит это действие.
Этот скрипт следует запускать с привилегиями root или через sudo (чтобы смогла правильно отработать chown), и с двумя параметрами: директория источника и директория назначения. В этой версии скрипт просто выводит то, что он изменит. Если проверочный запуск вас удовлетворил, то чтобы он произвел реальную работу нужно поменять строку myecho=echo на myecho=.
Несколько команд можно сразу запустить в одной командной строке. В качестве разделителей для отдельных команд можно считать символы и последовательности символов ';', '&&', '||'. Также используют одиночные символы '&' и '|', что имеет особое значение.
Вот несколько упрощенное описание, как это работает [10]:
A ; B # Запускается команда A и затем B, независимо от успешного завершения A A && B # Команда B запустится только в случае успешного завершения A A || B # Команда B запустится только в случае неудачного выполнения A A & # Команда A запустится в фоновом режиме. A | B # stdout команды A в реальном времени будет передаваться в stdin B
Таким способом указывается номер раздела man-документации - программирование, системные утилиты и т.д. Информацию о номерах разделов можно получить командой man man:
$ man man
...
(1) Исполняемые программы или команды шелла.
(2) Системные вызовы (функции, предоставляемые ядром OS).
(3) Библиотечные вызовы (функции внутри программных библиотек).
(4) Специальные файлы (которые обычно находятся в /dev).
(5) Форматы файлов и различные соглашения, например /etc/passwd.
(6) Игры.
(7) Разное (включая macro-пакеты и соглашения), например man(7), groff(7), man-pages(7).
(8) Команды системного администрирования (обычно только для root).
(9) Подпрограммы ядра [не стандарт].
...
На номер раздела обычно можно не обращать особого внимания, но иногда он полезен. Например printf есть в шелле bash, но также есть и одноименный системный вызов, и чтобы их различать, существует номер.
Команды printenv, env, export, set, unset позволяют просматривать (printenv), запускать программы с модифицированным окружением (env), экспортировать переменную в окружение (export), устанавливать и модифицировать переменные окружения (set), удалять переменную из окружения (unset).
С помощью команд find и sort (и опционально tail и head) можно выполнить эту задачу, подробнее см. [13].
[Словарик]
PPA Personal Package Archives, пакеты, не предназначенные для официального распространения по разным причинам. Т. е. возможно это пока что софт для тестирования. Часто это проприетарные пакеты для ПО и драйверов Linux.