Ответы на часто задаваемые вопросы, которые приходится решать новичкам при работе с операционной системой 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
Это может быть удобно, когда найденный файл двоичный, или организован как одна очень большая строка. В этом случае вывод может быть очень громоздким, и даже не поместиться в буфер консоли.
Вы можете ограничить поиск для файлов в той же самой файловой системе с помощью опции -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.
Можно скопировать информацию владельца (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).
Такая ошибка обычно возникает из-за не завершенной пары if/fi скрипта bash, или другой ошибки синтаксиса. Исправить ошибку довольно легко, поскольку файл .bashrc можно восстановить из резервной копии /etc/skel/.bashrc.
На Ubintu столкнулся с проблемой, что двойной клик на текстовый файл запускал не gedit, как мне хотелось, а Gnome Text Editor. Не нашел никакого другого способа решить эту проблему, кроме как удалить его. Как это сделать:
1. Нажмите клавишу Win, начинайте вводить App, появится иконка App Center, запустите его.
2. В строке поиска наверху наберите Text, увидите в списке Text Editor, кликните на него.
3. Откроется окно GNOME Text Editor, кликните Ununstall.
См. также Change default open with application in Ubuntu site:onetransistor.eu.
Для Ubuntu 20.04 и 22.04 это делается по-разному, разработчики снова намудрили.
Ubuntu 20.04: зайдите в настройки, раздел Регион и язык -> кликните на шестеренку пункта "Источники ввода". Выберите радиокнопку "Использовать различные источники для каждого окна".
Ubuntu 22.04: в тех же настройках выберите раздел Клавиатура (Keyboard) -> Переключение источников ввода (Input Source Switching), переключитесь на радиокнопку "Использовать свой источник для каждого окна" (Switch input sources individually for each window).
После этого в каждом открытом окне раскладка клавиатуры будет переключаться независимо от других.
Не запускается диалог поиска файла по имени на горячую клавишу Alt+F7, вместо этого происходит перемещение окна. Причина в том, что эта комбинация клавиш назначена и перехватывается на системном уровне.
Как исправить: Settings -> Keyboard -> Keyboard Shortcuts -> View and Customize Shortcuts -> Windows -> запретите горячую клавишу для Move Window. Для этого кликните на неё мышью и нажмите на Backspace.
После этого в Double Commander начнет работать поиск файла по горячей клавише Alt+F7.
Проблема такого странного сообщения при попытке запуска скрипта bash в том, что в тексте скрипта используются неправильные окончаниях строк 0D0A. Как исправить. см. [15].
В этом примере первая команда ищет файл относительно корневого каталога в указанной папке, вторая команда ищет файл в текущем каталоге (текущий каталог . указывать необязательно).
Как искать по всему диску без сообщений "отказано в доступе":
$ 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 используйте следующую команду:
Операционные системы семейства 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 (отдельные пути отделены друг от друга двоеточием):
Скрипт в текущем каталоге можно запускать, указав перед именем скрипта точку и пробел:
$ . 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:
Иногда при открытии файла окно открывается на другом мониторе, да еще и так, что недоступна верхняя плашка окна. Как в таком случае перетащить окно на другое место?
Способ 1. Можно воспользоваться предыдущим советом - уменьшить размер окна, чтобы стала доступна верхняя плашка окна. Потом можно за эту верхнюю плашку перетащить окно.
Способ 2. Нажмите клавишу Win и кликните правой кнопкой мыши на окно. Появится контекстное меню, в которой будет пункт "Переместить". Выберите этот пункт, после этого окно будет перемещаться вслед движениям мыши.
Примечание: по умолчанию на Ubuntu 22.04 настроена горячая клавиша Alt+F7 на функцию перемещения окна.
По умолчанию при смене пароля обычным пользователем система не даст создать пароль меньше 8 символов. Администраторам разрешено задавать любые пароли. Поэтому, если вы хотите установить короткий пароль, используйте команду passwd, запущенную с привилегиями админа через sudo:
$ sudo passwd имя_пользователя
[Словарик]
PPA Personal Package Archives, пакеты, не предназначенные для официального распространения по разным причинам. Т. е. возможно это пока что софт для тестирования. Часто это проприетарные пакеты для ПО и драйверов Linux.