Администрирование FreeBSD, Linux, ... Ubuntu FAQ Sat, March 29 2025  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Ubuntu FAQ Печать
Добавил(а) microsin   

Ответы на часто задаваемые вопросы, которые приходится решать новичкам при работе с операционной системой Ubuntu.  Почти все написанное здесь подойдет и к Debian. Непонятные термины и сокращения см. в разделе "Словарик", в конце статьи.

Потому что grub или система пытается выводить текстовые сообщения загрузки в графическом режиме на неправильно сконфигурированном видеодрайвере. Нужно сконфигурировать grub, и нужно правильно выбрать видеодрайвер на экране загрузки (нужны права администратора).

GRUB. В конфигурационном файле /etc/default/grub раскомментируйте строку GRUB_TERNINAL=console, сохраните файл, затем выполните команду update-grub. Также может понадобиться изменить опцию загрузки Linux "splash quiet" на "nomodeset".

Подробно решение проблемы описано в статье [1].

sudo service lightdm stop

who

Команды who -u и who -a печатают номер процесса в последнем столбце, что позволяет прибить нужную сессию командой kill:

sudo kill -9 номер_сессии

Посмотреть открытые порты могут утилиты netstat, lsof и nmap. Первые две команды показывают порты на локальной машине, а nmap позволяет просканировать сеть по определенному IP или диапазону адресов IP.

Пример запуска netstat:

sudo netstat -ntulp

Опции netstat:

Опция Функция
-l (--listening) Посмотреть только прослушиваемые порты.
-p (--program) Показать имя программы и ее PID.
-t (--tcp) Показать tcp порты.
-u (--udp) Показать udp порты.
-n (--numeric) Показывать ip адреса в числовом виде.

Команда lsof также показывает открытые порты:

sudo lsof -i

~$ lspci | grep VGA
01:00.0 VGA compatible controller: NVIDIA Corporation NV11 [GeForce2 MX/MX 400] (rev b2)

Аналогичный способ:

~$ lspci -nn |egrep "VGA|Display"
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation NV11 [GeForce2 MX/MX 400] 
[10de:0110] (rev b2)

Способ с более подробным выводом (аналогичный вывод дает команда sudo lshw -C display):

:~$ sudo lshw -C video
  *-display UNCLAIMED
       описание: VGA compatible controller
       продукт: NV11 [GeForce2 MX/MX 400]
       производитель: NVIDIA Corporation
       физический ID: 0
       сведения о шине: pci@0000:01:00.0
       версия: b2
       разрядность: 32 bits
       частота: 66MHz
       возможности: pm agp agp-2.0 vga_controller bus_master cap_list
       конфигурация: latency=32 maxlatency=1 mingnt=5
       ресурсы: память:e0000000-e0ffffff память:d8000000-dfffffff память:c0000-dffff

Информацию об этом можно узнать из лога 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, относящийся только к флешке:

~$ sudo lshw
..
   *-medium
        физический ID: 0
        логическое имя: /dev/sdb
        размер: 7400MiB (7759MB)
        возможности: partitioned partitioned:dos
        конфигурация: signature=213bbe6c
      *-volume
           описание: Windows FAT volume
           производитель: SYSLINUX
           физический ID: 1
           логическое имя: /dev/sdb1
           версия: FAT32
           серийный №: 947a-7235
           размер: 7396MiB
           capacity: 7399MiB
           возможности: primary bootable fat initialized
           конфигурация: FATs=2 filesystem=fat label=UBUNTU 18_0
..

Из этого вывода видно, что точка монтирования (логическое имя) /dev/sdb1, а файловая система FAT32.

3. Теперь нужно смонтировать содержимое USB-флешки в какой-нибудь каталог. Мы смонтируем /dev/sdb1 на каталог /media/usbstick.

~$ sudo mkdir /media/usbstick
~$ sudo mount -t vfat /dev/sdb1 /media/usbstick

Чтобы смонтировать флешку, отформатированную в формате NTFS:

~$ sudo mount -t ntfs-3g /dev/sdb1 /media/usbstick

4. Чтобы размонтировать флешку, выполните команду:

~$ sudo umount /media/usbstick

Список команд, которые могут помочь в работе в дисками и флешками:

Команда Назначение
dmesg Показывает сообщения загрузки, а также текущие события в логе.
fdisk Управление разделами диска.
sudo blkid Получение идентификационной информации о дисках.
lsblk Получение общей информации о дисковых устройствах.
mount Монтирование дисков.
lsusb Получение информации об устройствах USB.
usb-devices Получение подробной информации об устройствах USB.
df -h Получение информации об используемом и свободном месте на дисках.

[Способ 1: команда 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 откройте окно Настройки -> О системе:

Settings System

[Способ 4: /etc/lsb-release или /etc/os-release]

Файл /etc/lsb-release покажет версию Ubuntu в отдельных строках в виде номера релиза и его описания. Это разработано для старых систем, так что можете использовать это для Ubuntu устаревшей версии.

Также вы можете получить ту же самую информацию, просмотрев файл /etc/os-release. Это совместимо с Ubuntu 16.04 и более свежей версии.

Пример:

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

Процесс по шагам:

1. Остановите X-сервер:

~$ sudo /etc/init.d/lightdm stop

2. Удалите старый драйвер:

~$ sudo apt-get purge nvidia-*

3. Перезапустите компьютер:

~$ sudo reboot

4. На сайте nvidia.ru зайдите в раздел "Загрузка драйверов NVIDIA" (https://www.nvidia.ru/Download/index.aspx?lang=ru). 

Выберите "Тип продукта: Legacy"
Выберите "Серия продуктов: GeForce 2 MX Series"
Выберите "Семейство продуктов: GeForce2 MX/MX 400"
Выберите "Операционная система: Показать все операционные системы -> Linux 32-bit"
Выберите "Язык: Русский"

Нажмите кнопку "Поиск", появится страничка с кнопкой "Загрузить сейчас". Загрузится файл NVIDIA-Linux-x86-100.14.11-pkg1.run.

5. Запустите инсталлятор:

~$ sudo ./NVIDIA-Linux-x86-100.14.11-pkg1.run

При логине в окне консоли система предупреждает о наличии обновлений:

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:

sudo apt-add-repository --remove [место нахождения пакета]

Если Вы предпочитаете интерфейс GUI, то в нем можно выполнить аналогичные действия. Запустите утилиту "Software & Updates" (Программы и обновления) и перейдите на закладку "Other Software" (стороннее ПО).

Software and Updates Remove PPA

Вы увидите в списке все PPA, которые установлены на Вашем компьютере. Просто выберите источник PPA и кликните на кнопке "Remove".

Показанные ниже команды относятся к менеджеру пакетов apt, и их необходимо выполнять под учетной записью администратора, либо через повышение привилегий sudo. Иногда вместо apt нужно использовать apt-get.

Итак, чтобы установить GCC, выполните следующий список команд.

apt update
apt install gcc

После этого gcc будет запускаться. Следующая команда установит дополнительный пакет утилит и библиотек:

apt instlal build-essential

Копирование и вставка текста в Linux (консоль LXTerminal, браузер и другие программы) работает непривычно для тех, кто пользовался putty на Windows. В буфер обмена копия (Copy) производится автоматически, когда пользователь выбрал текст левой кнопкой мыши, а вставка (Paste) производится средней кнопкой [5].

В некоторых программах для копирования/вставки может работать контекстное меню по правой кнопке мыши, а также горячие клавиши Ctrl+Insert or Ctrl+Shift+C (для Copy) и Shift+Insert or Ctrl+Shift+V (для Paste).

Интерпретатор shell выдавал ошибку "unexpected operator":

$ ./b.sh clean
./b.sh: 5: [: clean: unexpected operator

Ошибка была в 5 строчке следующего скрипта:

#!/bin/sh
 
if [ -z $1 ]; then
   ./build_app.sh apps/OpenBK7231N_App OpenBK7231N_App 1.0.0
elif [ "$1" == "clean" ]; then
   ./build_app.sh apps/OpenBK7231N_App OpenBK7231N_App 1.0.0 $1
fi

Проблема оказалась в том, что этот синтаксис == не работал для шелла sh, шелл надо поменять на bash, тогда команда сработает нормально:

#!/bin/bash
 
if [ -z $1 ]; then
   ./build_app.sh apps/OpenBK7231N_App OpenBK7231N_App 1.0.0
elif [ "$1" == "clean" ]; then
   ./build_app.sh apps/OpenBK7231N_App OpenBK7231N_App 1.0.0 $1
fi

PuTTY сразу закрывает окно при попытке подключиться к настроенной сессии. При запуске из командной строки выводится сообщение:

PuTTY: unable to load font "server:fixed"

Если запустить через sudo, то такой проблемы нет.

Как исправить:

1. Запустите putty. В окне настройки сессии выберите нужную сессию, нажмите Load. Перейдите в раздел Window -> Fonts. В поле ввода "Font used for ordinary text" стоит шрифт, который putty для обычного пользователя по какой-то причине использовать не может (server:fixed).

putty fix font01

2. Справа от поля ввода  нажмите на кнопку Change..., выберите другой моноширинный шрифт.

putty fix font02

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.

gnome system monitor

Как это сделать, процесс по шагам:

1. Зайдите в Параметры -> Клавиатура -> кнопка "Просмотр и изменение комбинаций клавиш".

2. Кликните на плашку в конце списка "Дополнительные комбинации клавиш" -> +. В поле "Имя" введите любое значение например "Системный монитор", в поле "Команда" введите gnome-system-monitor.

3. Кликните на кнопку "Установить комбинацию клавиш...". Нажмите клавишу Ctrl, удерживая её нажмите и удерживайте Shift, и нажмите Esc. Кликните на кнопку "Установить". Получится комбинация клавиш Ctrl+Shift+Esc, такая же как была для вызова taskmngr в Windows.

gnome system monitor set hotkeys

Причем в других программах (например gedit) эта стандартная комбинация клавиш сохранения файла работает нормально. Поведение довольно странное, явный глюк, потому что горячая клавиша для меню "Настройки" по умолчанию не задана, и вообще комбинация клавиш Ctrl+S нигде в хоткеях системы не используется, кроме как для поиска по настройкам.

Settings Search

Очевидно, что это просто ошибка конфигурации Ubuntu 22.04.3 LTS и/или VSCode. Исправляется следующим костылем:

1. Зайдите в меню Настройки -> Просмотр и изменение комбинаций клавиш, в строке поиска введите Настройки (или перейдите в раздел Ярлыки -> Настройки).

2. Откроется настройка комбинации клавиши для этого окна в состоянии "Не определено".

3. Задайте здесь произвольную комбинацию клавиш, например Ctrl+N:

Settings hotkey

4. Выйдите из настроек и перезапустите систему.

После этого меню настроек будет открываться горячей клавишей Ctrl+N, и комбинация клавиши Ctrl+S будет нормально сохранять файл в Visual Studio Code.

Откройте в текстовом редакторе файл ~/.bashrc и добавьте в него строку:

alias make="make -j"

Сохраните файл и закройте текстовый редактор. Изменения вступят в силу после перезапуска терминала - вместо команды make в командную строку будет подставляться make -j, что включает многопоточную работу утилиты make. Это значительно ускоряет компиляцию сложных проектов.

Пример создания файла test.bin в текущем каталоге, размером 18250 байт, заполненного байтами 0xFF (восьмеричное значение \377).

< /dev/zero tr '\000' '\377' | head -c 18520 > test.bin

Надо добавить в конце команды символ &, например:

$ putty &

В папке /usr/share/applications/, это файлы с суффиксом desktop. Например "ярлык" для putty находится в файле /usr/share/applications/putty.desktop.

"Проводник", показывающий папки и файлы в GUI-интерфейсе, это программа nautilis. Вот так, к примеру, можно открыть папку с ярлыками:

$ nautilus /usr/share/applications/

В статье [6] описаны 3 способа, но мне нравится из них самый простой. Например, чтобы удалить все объектные файлы в каталоге проекта (текущий каталог .), можно использовать команду:

$ find . -name "*.o" -type f -delete

Команда find ~ -name имяфайла чувствительна к регистру искомого имени файла, а команда find ~ -iname имяфайла не чувствительна к регистру имени файла (iname от слова insensitive).

Необходимо установить библиотеку FUSE:

$ sudo apt install libfuse2

Обычно в случае каких-либо проблем с запуском программа выдает в консоли причину ошибки. Но иногда этого по какой-то причине не происходит, программа завершается без каких-либо сообщений. В этом случае может помочь утилита strace.

$ ./Xplorer-7.0.8-linux-installer.bin

Никакого вывода не последовало, программа просто завершилась. Запуск через strace:

$ strace ./Xplorer-7.0.8-linux-installer.bin 
execve("./Xplorer-7.0.8-linux-installer.bin", ["./Xplorer-7.0.8-linux-installer."...], 0x7fffffffded0 /* 53 vars */) = 0
[ Process PID=37012 runs in 32 bit mode. ]
mmap(0xc6d000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0xc6d000) = 0xc6d000
readlink("/proc/self/exe", "$HOME/xtensa/Xp"..., 4096) = 63
mmap(0x8048000, 1108297, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x8048000
mprotect(0x8048000, 1108294, PROT_READ|PROT_EXEC) = 0
mmap(0x8157000, 42979, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0x10f000) = 0x8157000
mprotect(0x8157000, 42976, PROT_READ|PROT_WRITE) = 0
mmap(0x8162000, 15736, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x8162000
brk(0x8166000)                          = 0x8166000
open("/lib/ld-linux.so.2", O_RDONLY)    = -1 ENOENT (Нет такого файла или каталога)
exit(127)                               = ?
+++ exited with 127 +++

В этом выводе видно, что проблема в не найденной библиотеке 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, потому что в текущей ситуации это может привести к неожиданным изменениям в системе пользователя, наподобие конфигурирования пакетов.

Все, что за этой строчкой, не будет выполняться:

if false; then

См. также [7].

Traceback (most recent call last):
  File "~/openwrt/build_dir/target-arm_cortex-a7+neon_glibc-2.22_eabi/ca-certificates-20211016/
        work/mozilla/certdata2pem.py", line 125, in < module>
    cert = x509.load_der_x509_certificate(obj['CKA_VALUE'])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "~/.pyenv/versions/3.12.0rc2/lib/python3.12/site-packages/cryptography/x509/base.py",
        line 594, in load_der_x509_certificate
    return rust_x509.load_der_x509_certificate(data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: argument 'data': 'bytearray' object cannot be converted to 'PyBytes' make[5]: *** [Makefile:6: all] Error 1

Проблема решается подбором версии Python-библиотеки cryptography:

$ pip show cryptography               # покажет версию библиотеки cryptography
$ pip install cryptography==3.4.8     # установит библиотеку cryptography версии 3.4.8

Из подсказки команды pip install -h:

-U, --upgrade Обновить все пакеты до самой новой доступной версии.

Если указать имяпакета=версия без -U, то будет установлен пакет указанной версии, например:

$ pip install cryptography==3.4.8     # установит библиотеку cryptography версии 3.4.8

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

$ export LANG=en_US.UTF-8

С этой ошибкой я столкнулся, когда пытался запустить клиент WeChat (https://github.com/geeeeeeeeek/electronic-wechat/releases/download/V2.0/linux-x64.tar.gz).

Установить библиотеку libgconf-2.so.4 можно командой:

$ sudo apt-get install libgconf-2-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, нужно запретить этот сервис командами:

systemctl stop brltty-udev.service
sudo systemctl mask brltty-udev.service
systemctl stop brltty.service
systemctl disable brltty.service

После этого переподключите 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:

$ sudo gedit /etc/udev/rules.d/NationalChipVIDA700PID0001.rules

Имя файла NationalChipVIDA700PID0001.rules выбрано произвольно, это просто информативное имя, отражающее назначение файла.

3. Добавьте в этот файл строку:

SUBSYSTEM=="usb", ATTRS{idVendor}=="a700", ATTRS{idProduct}=="0001", OWNER="username", GROUP="plugdev", TAG+="uaccess"

Здесь вместо 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

Это позволяет сделать встроенная команда compgen.

Чтобы отобразить все группы, запустите команду:

$ compgen -g

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

$ compgen -u

Также всех пользователей можно показать командой:

$ cut -d ":" -f 1 /etc/passwd

К сожалению, утилита zip создает архивы с сохранением полных путей до файлов, что при использовании рекурсивного сохранения файлов в архив (zip -r) создает неудобства. Гораздо лучше использовать утилиту командной строки 7z:

$ sudo apt install p7zip-full
$ 7z --help

Пример упаковки с рекурсией папки ~/asm/Quark в архив quark.zip, находящийся в текущей директории:

$ 7z a -r quark.zip ~/asm/Quark

Иногда необходимо положить архив не все содержимое папки, а только некоторые выбранные файлы. Выбранные файлы удобно держать в виде списка, в отдельном файле, чтобы потом построчно его обработать и каждую строку передать в команде архиватору 7z. Это можно сделать с помощью цикла while/do скрипта bash.

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

backupGX8008C.sh
backuplist.txt
vsp_sdk/.config
vsp_sdk/Kconfig
vsp_sdk/Makefile
vsp_sdk/configs/nationalchip_public_version/8008c_wukong_prime_1v4_hid_demo.config
vsp_sdk/configs/nationalchip_public_version/8008c_wukong_prime_1v4_led.config
vsp_sdk/configs/nationalchip_public_version/8008c_wukong_prime_uac48k_up_4mic2ref.config
vsp_sdk/configs/nationalchip_public_version/bypass_bin_demo.config
vsp_sdk/configs/nationalchip_public_version/gx8008_wukong_1.0_voice_play_demo.config
vsp_sdk/configs/nationalchip_public_version/USB_GS_bypass_bin_demo.config
vsp_sdk/mcu/vsp/hook/Kconfig
vsp_sdk/mcu/vsp/hook/Makefile
vsp_sdk/mcu/vsp/hook/vsp_hook_led.c
vsp_sdk/mcu/vsp/hook/vsp_hook_null.c
vsp_sdk/mcu/vsp/hook/vsp_hook_spotter.c
vsp_sdk/mcu/vsp/hook/vsp_hook_USB_GS_demo.c
vsp_sdk/mcu/3rdparty/Makefile
vsp_sdk/mcu/3rdparty/OneButton
vsp_sdk/mcu/drivers/uart/dw_uart.c
vsp_sdk/mcu/include/driver/uart.h

Тогда для архивации файлов из этого списка может быть применен следующий скрипт:

#!/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"
# Построчная обработка списка, с передачей в командную строку архиватора
# каждого файла из списка:
while IFS= read -r linedo 7z a $ARCHIVE_NAME $line
done < "$input"  
# Генерация уникального имени файла для архива из метки времени [9]: autoname $ARCHIVE_NAME --pattern:YYMMDDhhmmss

Пример построчной обработки файла см. в предыдущем совете "7z: как заархивировать файлы по списку".

Это может быть удобно, когда найденный файл двоичный, или организован как одна очень большая строка. В этом случае вывод может быть очень громоздким, и даже не поместиться в буфер консоли.

Решить проблему поможет добавление опции -l, например:

$ grep -rnwl admin@mydomain.ru /var

[ncdu]

Мне для этой цели очень нравится программа ncdu:

$ sudo apt install ncdu
$ ncdu /var

Вы можете ограничить поиск для файлов в той же самой файловой системе с помощью опции -x:

$ ncdu -x /

.. это будет игнорировать смонтированный файловые системы внутри файловой системы root.

Некоторую оптимизацию можно обеспечить опцией -q, которая увеличивает время между обновлениями экрана. Опции можно комбинировать:

$ ncdu -xq /var

[du]

Команда du суммарно покажет использование диска для каждого файла, рекурсивно для директорий, например:

$ du -hs /path/to/directory

Здесь опция -h задает числа в формате "human readable", т. е. 140M вместо 143260 (размер по умолчанию показывается в килобайтах). Опция -s покажет суммарную информацию, иначе вы получите не только размер папки, но и каждой субдиректории в этой папке.

С использованием опции -h можно применить sort для сортировки размеров папок:

$ du -h | sort -h

Если нужно ограничить анализ вложенности папок, можно применить опцию --max-depth. Например, если надо ограничиться только одним уровнем вложенности, то укажите --max-depth=1.

$ du -h --max-depth=1 /path/to/directory

Следующий пример отобразит рекурсивно размер, и поместит его рядом с именем каждой папки вместе с общим размером внизу, все в формате удобном для чения человеком:

$ du -hsc *

Тоже самое, с сортировкой:

$ du -sch | sort -rh

[dust]

Существует утилита dust, работает на Windows, MAC, Linux.

C:\git> dust
   0B       ┌── templates           │                                      █ │   0%
   0B     ┌─┴ git-core              │                                      █ │   0%
   0B   ┌─┴ share                   │                                      █ │   0%
  76B   ├── readme.md               │                                      █ │   0%
 156K   │   ┌── less.exe            │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█ │   2%
 2.7M   │   ├── git-remote-https.exe│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█████████████████ │  42%
 3.6M   │   ├── git.exe             │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████ │  56%
 6.5M   │ ┌─┴ git-core              │███████████████████████████████████████ │ 100%
 6.5M   ├─┴ libexec                 │███████████████████████████████████████ │ 100%
 6.5M ┌─┴ .

Можно скопировать информацию владельца (owner), принадлежность группе (group), права доступа (permission) и метку времени (timestamp), т. е. атрибуты файла, с помощью параметра --reference команд chown, chmod, touch.  Ниже приведен скрипт, который выполнит это действие.

Этот скрипт следует запускать с привилегиями root или через sudo (чтобы смогла правильно отработать chown), и с двумя параметрами: директория источника и директория назначения. В этой версии скрипт просто выводит то, что он изменит. Если проверочный запуск вас удовлетворил, то чтобы он произвел реальную работу нужно поменять строку myecho=echo на myecho=.

#!/bin/bash
# Filename: cp-metadata
myecho=echo
src_path="$1"
dst_path="$2" 
find "$src_path" |
  while read src_file; do
    dst_file="$dst_path${src_file#$src_path}"
    $myecho chmod --reference="$src_file" "$dst_file"
    $myecho chown --reference="$src_file" "$dst_file"
    $myecho touch --reference="$src_file" "$dst_file"
  done

Следующая команда установит атрибут "разрешено для выполнения" для всех файлов *.sh в текущей директории и всех её подкаталогах:

$ find . -type f -iname "*.sh" -exec chmod +x {} \;

Несколько команд можно сразу запустить в одной командной строке. В качестве разделителей для отдельных команд можно считать символы и последовательности символов ';', '&&', '||'. Также используют одиночные символы '&' и '|', что имеет особое значение.

Вот несколько упрощенное описание, как это работает [10]:

A ; B   # Запускается команда A и затем B, независимо от успешного завершения A
A && B  # Команда B запустится только в случае успешного завершения A
A || B  # Команда B запустится только в случае неудачного выполнения A
A &     # Команда A запустится в фоновом режиме.
A | B   # stdout команды A в реальном времени будет передаваться в stdin B

См. также [11].

Обсуждение вопроса см. здесь:
How to show the transfer progress and speed when copying files with cp? site:askubuntu.com

Мне больше всего понравилась утилита gcp:

$ sudo apt-get install gcp

Обсуждение вопроса см. здесь:
How to compare binary files to check if they are the same? site:stackoverflow.com

Сравнивать файлы могут: diff, Double Commander, vbindiff, meld, kompare. Мне больше понравилась vbindiff.

$ sudo apt install vbindiff

Таким способом указывается номер раздела 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).

Подробнее см. [12].

С помощью команд find и sort (и опционально tail и head) можно выполнить эту задачу, подробнее см. [13].

Такая ошибка обычно возникает из-за не завершенной пары if/fi скрипта bash, или другой ошибки синтаксиса. Исправить ошибку довольно легко, поскольку файл .bashrc можно восстановить из резервной копии /etc/skel/.bashrc.

На Ubintu столкнулся с проблемой, что двойной клик на текстовый файл запускал не gedit, как мне хотелось, а Gnome Text Editor. Не нашел никакого другого способа решить эту проблему, кроме как удалить его. Как это сделать:

1. Нажмите клавишу Win, начинайте вводить App, появится иконка App Center, запустите его.

2. В строке поиска наверху наберите Text, увидите в списке Text Editor, кликните на него.

uninstall Gnome Text Editor fig01

3. Откроется окно GNOME Text Editor, кликните Ununstall.

uninstall Gnome Text Editor fig02

См. также Change default open with application in Ubuntu site:onetransistor.eu.

Для Ubuntu 20.04 и 22.04 это делается по-разному, разработчики снова намудрили.

Ubuntu 20.04: зайдите в настройки, раздел Регион и язык -> кликните на шестеренку пункта "Источники ввода". Выберите радиокнопку "Использовать различные источники для каждого окна".

individual keyboard lang for windows 20 04

Ubuntu 22.04: в тех же настройках выберите раздел Клавиатура (Keyboard) -> Переключение источников ввода (Input Source Switching), переключитесь на радиокнопку "Использовать свой источник для каждого окна" (Switch input sources individually for each window).

individual keyboard lang for windows 22 04

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

Не запускается диалог поиска файла по имени на горячую клавишу Alt+F7, вместо этого происходит перемещение окна. Причина в том, что эта комбинация клавиш назначена и перехватывается на системном уровне.

Как исправить: Settings -> Keyboard -> Keyboard Shortcuts -> View and Customize Shortcuts -> Windows -> запретите горячую клавишу для Move Window. Для этого кликните на неё мышью и нажмите на Backspace.

После этого в Double Commander начнет работать поиск файла по горячей клавише Alt+F7.

Проблема такого странного сообщения при попытке запуска скрипта bash в том, что в тексте скрипта используются неправильные окончаниях строк 0D0A. Как исправить. см. [15].

Помог wine, описание установки взял в статье [16]. Другие средства, которые упоминались в этой статье - Winetricks, PlayOnLinux - мне не подошли.

Установка на Ubuntu, Debian, Mint:

sudo dpkg --add-architecture i386
wget -nc https://dl.winehq.org/wine-builds/Release.key
sudo apt-key add Release.key
sudo add-apt-repository "deb https://dl.winehq.org/wine-builds/ubuntu/ artful main"
sudo apt-get update
sudo apt-get install --install-recommends winehq-stable

Используйте команды find, locate, whereis, grep. Много полезных советов нашел в [17].

[Примеры использования find]

$ find /путь/до/каталога/гдеискать -iname имяфайла
$ find -iname имяфайла

В этом примере первая команда ищет файл относительно корневого каталога в указанной папке, вторая команда ищет файл в текущем каталоге (текущий каталог . указывать необязательно).

Как искать по всему диску без сообщений "отказано в доступе":

$ find / -iname 'SCons' 2>/dev/null

Вот ещё полезные перенаправления:

>файл перенаправить стандартный вывод (stdout) в файл.
&>файл перенаправить стандартный вывод (stdout) и ошибки в файл.
2>&1 | tee файл копировать вывод ошибок в stdout, показывать на экране и одновременно писать в файл.

[Примеры использования grep]

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

$ grep -rnw -e 'pattern' /путь/где/искать/

Часто используемые опции grep (в этом примере использовались следующие опции r, n, w):

-r или -R рекурсивно искать по всем каталогам относительно указанного пути.
-n показывать номер строки, где был найден указанный текст.
-w означает, что совпадение должно быть со строкой целиком. Без -w допускается совпадение с частью строки.
-l (буква L в нижнем регистре) можно добавить, чтобы выводить просто имена файлов, где в его содержимом найдено совпадение указанного текста.
-e шаблон регулярного выражения для поиска текста.
-i не обращать внимание на регистр символов.

Поиск слова word в файлах текущего каталога и его подкаталогах (для поиска используется текущий каталог, если не указано, где искать):

$ grep -rn word

Если в искомом тексте встречается точка, то её нужно экранировать обратным слешем '\'. Экранирование также надо применять к символам '?' и символам двойной или одинарной кавычки.

$ grep -rn "usb\.h"

Если в искомом тексте есть пробел, то его надо заключать в двойные кавычки:

$ grep -rn "Hello World"

Чтобы искать в файлах определенного вида, можно применять шаблоны имен файлов (wildcards * и ?), для чего используется опция --include=. Шаблоны необходимо заключать в двойные кавычки. Например, для поиска текста в заголовочных файлах языка C используйте следующую команду:

$ grep --include="*.h" -rnw sprintf

См. также [18].

Операционные системы семейства Linux, в отличие от Windows, не ищут запускаемый скрипт или программу в текущем каталоге. Поэтому если скрипт (или программа) находится в текущем каталоге, то необходимо указать перед его именем комбинацию символов ./ иначе скрипт не запустится. Это сделано в целях безопасности, чтобы пользователь случайно не запустил что-нибудь, что может навредить системе.

~$ work
 
Команда «work» не найдена. Возможно, вы имели в виду:
 
  command 'zork' from snap zork (1.0.2)
  command 'worm' from deb bsdgames (2.17-28build1)
 
See 'snap info < snapname>' for additional versions.

Если запустить через ./, то команда выполнится правильно:

~$ ./work
Detecting the Python interpreter
Checking "python" ...
Checking "python3" ...
Python 3.8.10
"python3" has been detected
Adding ESP-IDF tools to PATH...
Using Python interpreter in /home/домен/пользователь/.espressif/python_env/idf4.4_py3.8_env/bin/python
Checking if Python packages are up to date...
Python requirements from /home/домен/пользователь/esp/esp-idf/requirements.txt are satisfied.
Added the following directories to PATH:
  /home/домен/пользователь/esp/esp-idf/components/esptool_py/esptool
  /home/домен/пользователь/esp/esp-idf/components/espcoredump
  /home/домен/пользователь/esp/esp-idf/components/partition_table
  /home/домен/пользователь/esp/esp-idf/components/app_update
  /home/домен/пользователь/.espressif/tools/xtensa-esp32-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32-elf/bin
  /home/домен/пользователь/.espressif/tools/xtensa-esp32s2-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s2-elf/bin
  /home/домен/пользователь/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin
  /home/домен/пользователь/.espressif/tools/riscv32-esp-elf/esp-2021r2-patch3-8.4.0/riscv32-esp-elf/bin
  /home/домен/пользователь/.espressif/tools/esp32ulp-elf/2.28.51-esp-20191205/esp32ulp-elf-binutils/bin
  /home/домен/пользователь/.espressif/tools/esp32s2ulp-elf/2.28.51-esp-20191205/esp32s2ulp-elf-binutils/bin
  /home/домен/пользователь/.espressif/tools/openocd-esp32/v0.11.0-esp32-20211220/openocd-esp32/bin
  /home/домен/пользователь/.espressif/python_env/idf4.4_py3.8_env/bin
  /home/домен/пользователь/esp/esp-idf/tools
Done! You can now compile ESP-IDF projects.
Go to the project directory and run:
 
  idf.py build

Чтобы иметь возможность не указывая ./ запускать скрипт или программу, необходимо записать исполняемый файл в один из каталогов, на который указывает переменная окружения $PATH (отдельные пути отделены друг от друга двоеточием):

$ echo $PATH
/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/домен/пользователь/.local/bin
 :/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

[Запуск "через точку", команда source]

Скрипт в текущем каталоге можно запускать, указав перед именем скрипта точку и пробел:

$ . work
Detecting the Python interpreter
Checking "python" ...
Checking "python3" ...
Python 3.8.10
"python3" has been detected
Adding ESP-IDF tools to PATH...
Using Python interpreter in /home/домен/пользователь/.espressif/python_env/idf4.4_py3.8_env/bin/python
Checking if Python packages are up to date...
Python requirements from /home/домен/пользователь/esp/esp-idf/requirements.txt are satisfied.
Added the following directories to PATH:
  /home/домен/пользователь/esp/esp-idf/components/esptool_py/esptool
  /home/домен/пользователь/esp/esp-idf/components/espcoredump
  /home/домен/пользователь/esp/esp-idf/components/partition_table
  /home/домен/пользователь/esp/esp-idf/components/app_update
  /home/домен/пользователь/.espressif/tools/xtensa-esp32-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32-elf/bin
  /home/домен/пользователь/.espressif/tools/xtensa-esp32s2-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s2-elf/bin
  /home/домен/пользователь/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin
  /home/домен/пользователь/.espressif/tools/riscv32-esp-elf/esp-2021r2-patch3-8.4.0/riscv32-esp-elf/bin
  /home/домен/пользователь/.espressif/tools/esp32ulp-elf/2.28.51-esp-20191205/esp32ulp-elf-binutils/bin
  /home/домен/пользователь/.espressif/tools/esp32s2ulp-elf/2.28.51-esp-20191205/esp32s2ulp-elf-binutils/bin
  /home/домен/пользователь/.espressif/tools/openocd-esp32/v0.11.0-esp32-20211220/openocd-esp32/bin
  /home/домен/пользователь/.espressif/python_env/idf4.4_py3.8_env/bin
  /home/домен/пользователь/esp/esp-idf/tools
Done! You can now compile ESP-IDF projects.
Go to the project directory and run:
  idf.py build

Это сделано для того, чтобы скрипт мог экспортировать результаты своей работы (например модификацию переменной $Path) в текущее рабочее окружение (сеанс работы в консоли команд). Поэтому чтобы из скрипта можно было поменять текущую директорию, надо запускать его через точку или команду команду source.

Примечание: команда точка эквивалентна команде source, т. е. для этого примера . work и source work дадут одинаковый результат.

Сообщения об ошибках системы нужно смотреть в файлах системного лога (/var/log/syslog) и лога ядра (/var/log/kern.log) [19]. Также очень удобна для этой цели утилита journalctl (запускать надо с правами администратора, через sudo), она подсвечивает сообщения определенного вида разными цветами.

Это можно сделать командой lspci. Более подробный вывод можно получить, если добавить опцию -v, и еще более подробный если опцию -vv.

Также в очень удобном виде информацию о системе предоставляет программа hardinfo (установка командой sudo apt install hardinfo). Вот пример вывода команды hardinfo:

hardinfo

Нажмите Alt+F8, после этого клавишами со стрелками можно изменить размеры окна.

Иногда при открытии файла окно открывается на другом мониторе, да еще и так, что недоступна верхняя плашка окна. Как в таком случае перетащить окно на другое место?

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

Способ 2. Нажмите клавишу Win и кликните правой кнопкой мыши на окно. Появится контекстное меню, в которой будет пункт "Переместить". Выберите этот пункт, после этого окно будет перемещаться вслед движениям мыши.

Примечание: по умолчанию на Ubuntu 22.04 настроена горячая клавиша Alt+F7 на функцию перемещения окна.

Как поменять пароль у текущего пользователя:

$ passwd

Как поменять пароль у любого пользователя:

$ sudo passwd имя_пользователя

[Как задать короткий пароль]

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

$ sudo passwd имя_пользователя

[Словарик]

PPA Personal Package Archives, пакеты, не предназначенные для официального распространения по разным причинам. Т. е. возможно это пока что софт для тестирования. Часто это проприетарные пакеты для ПО и драйверов Linux.

[Ссылки]

1. ubuntu: как вернуть текстовый режим загрузки.
2. Midnight Commander: команды и горячие клавиши site:mydebianblog.blogspot.com.
3. УСТАНОВКА ОБНОВЛЕНИЙ UBUNTU site:losst.ru.
4. Linux: аббревиатуры и термины.
5. How to Copy Paste in Linux Terminal [For Absolute Beginners] site:itsfoss.com.
6. Рекурсивное удаление файлов с определенным расширением имени.
7. BRLTTY site:brltty.app.
8. Add a User to a Group (or Second Group) on Linux site:howtogeek.com.
9. Утилита autoname.
10. Which one is better: using ; or && to execute multiple commands in one line? site:askubuntu.com.
11Операторы командной строки Linux: использование |, >, >>, &, &&, !, =, (\).
12. Команды управления переменными окружения Linux.
13. Отсортированный по времени модификации список файлов директории.
14. How do I determine the total size of a directory (folder) from the command line? site:askubuntu.com.
15Ошибка скрипта bash, неверный интерпретатор: Нет такого файла или каталога.
16. 5 способов установить Windows-программы на Linux site:lifehacker.ru.
17. How to find all files containing specific text (string) on Linux? site:stackoverflow.com.
18. Команда Grep в Linux (поиск текста в файлах) site:routerus.com.
19Просмотр сообщений dmesg в реальном времени.

 

Добавить комментарий


Защитный код
Обновить

Top of Page