Хакер - Выход есть всегда. Решаем проблемы, возникающие при работе в Linux
nopaywall
Содержание статьи
Linux не запускается
Таков один из самых популярных призывов о помощи в среде новичков. На самом деле за этой лаконичной формулировкой проблемы может стоять целый ворох не связанных друг с другом причин поломки.
Пропал Grub
Очень часто с подобной проблемой сталкиваются пользователи Windows, установившие Linux параллельной системой. Все работает прекрасно, пока, в очередной раз переустановив Windows, новичок не затирает загрузчик Linux (Grub) загрузчиком Windows, который даже и не думает позволить пользователю выбрать что-то другое, кроме винды.
Впрочем, сценариев «потерять» Grub множество, равно как и способов его восстановить. Самый логичный — вновь загрузиться с флешки, с которой до этого был установлен Linux, и, открыв терминал, ввести
$ sudo fdisk -l
Среди множества записей о подключенных дисках следует найти группу разделов Linux, выбрать корневой раздел (здесь и далее sda1) и смонтировать его:
$ sudo mount /dev/sda1 /mnt
Затем восстановить Grub на диске:
$ sudo grub-install --root-directory=/mnt /dev/sdа
В довершение можно обновить меню Grub:
$ sudo update-grub --output=/mnt/boot/grub/grub.cfg
Ошибки загрузки ядра
Ядро Linux — один из самых стремительно развивающихся компонентов системы. Однако не всегда обновление ядра идет на пользу системе. Для кого-то неприемлемо удаление драйвера hd для жестких дисков с интерфейсом MFM/RLL, а кому-то досталось криво собранное ядро от поставщика дистрибутива. Нередко причиной поломки становится и сам пользователь, небрежно скомпилировавший собственное ядро.
В конечном итоге, если результатом обновления ядра стал отказ системы на этапе загрузки и выбрать альтернативное ядро через Grub не получится, потому что его нет, остается вернуть предыдущий рабочий вариант ядра на место через терминал.
Лучший способ это сделать — загрузиться со все того же Live CD и использовать старый добрый chroot. Последний, если говорить сильно упрощенно, позволяет «войти» в свой дистрибутив из Live CD и выполнить все необходимые для восстановления команды.
Для начала потребуется подключить корневой раздел (для примера пусть это будет опять же sda1):
# mount /dev/sda1 /mnt
Затем подключить к нему все нужные псевдоФС:
# cd /mnt # mount -t proc proc proc/ # mount -t sysfs sys sys/ # mount -o bind /dev dev/
И наконец, войти в chroot и настроить сеть:
# chroot . /bin/bash # echo nameserver 8.8.8.8 > /etc/resolv.conf
Теперь с помощью пакетного менеджера можно установить нужную версию ядра.
Проблемы с видео
Иногда система загружается, но из-за ошибок в видеодрайвере или из-за несовместимости его версии (нередко проприетарной) и версии ядра запустить графическую подсистему оказывается невозможно. Решение напрашивается само собой: либо откатить версию драйвера, либо сменить его на свободный, если такой существует.
В этом случае не нужны ни Live CD, ни chroot. Достаточно залогиниться в режиме командной строки, которая, как правило, доступна в этом случае по умолчанию, и сменить драйвер.
Однако порою противоречия драйвера и ядра достигают такой степени, что загрузка системы завершается ошибкой без возможности что-либо исправить по ходу запуска. В таком случае можно воспользоваться набором инструментов самого Grub и загрузить систему в консольном режиме.
Чтобы это сделать, нужно:
- выбрать в меню Grub стандартный пункт загрузки;
- нажать
e
для входа в редактор сценария загрузки выбранной записи; - найти в этом сценарии строку с аргументами запуска ядра, начинающуюся с linux или kernel;
- добавить в конце этой строки 3, тем самым указав системе на необходимость загрузки в многопользовательском режиме с поддержкой сети и без графического окружения;
- нажать сочетание Ctrl + X, чтобы начать загрузку с измененными настройками;
- с помощью пакетного менеджера заменить проблемный видеодрайвер на исправный и перезагрузить систему.
Изменения, вносимые в сценарий загрузки описанным образом, будут действовать до момента выключения компьютера. Следующая загрузка будет проходить в штатном режиме с графическим окружением.
Проблемы с установкой и запуском приложений
Хотя в репозиториях современных дистрибутивов есть огромное количество готовых бинарных пакетов приложений на любой вкус, обязательно найдется такое, установить которое в систему иначе как собрав из исходников не удастся.
Нередко запуск таких приложений заканчивается крахом и сопровождается сообщениями об отсутствии некоторых библиотек, хотя на самом деле такие библиотеки есть в системе. Обычно причина этому — несовпадение версии библиотеки.
Несовпадение версии библиотеки
Любимый многими проигрыватель Bomi, чья разработка в последнее время несколько забуксовала и не поспевает за обновлениями используемых библиотек, после установки из исходников может ругаться на отсутствие библиотеки libass.so.5:
bomi: error while loading shared libraries: libass.so.5: cannot open shared object file: No such file or directory
Первая мысль: установить эту библиотеку. Устанавливаем и получаем то же сообщение, потому что версии библиотек не совпадают: у нас 9.0.1, а нужна 5.
В этом случае можно попытаться обмануть Bomi, подсунув ему нашу версию библиотеки под видом нужной ему. Сделать это можно с помощью символической ссылки:
$ cd /usr/lib $ sudo ln -s libass.so.9.0.1 libass.so.5
Исправление отсутствия библиотек в BomiПотерей библиотек грешат даже приложения, находящиеся в официальных репозиториях. Так что знать, как это исправить, не помешает и законопослушным пользователям.
Конфликты библиотек
Противоположная ситуация складывается, когда пакетный менеджер ругается не на отсутствие, а на присутствие в системе той же библиотеки, что поставляется с устанавливаемым пакетом.
Причиной может быть другое установленное приложение, уже предоставившее данную библиотеку. Так часто случается, когда пакет установлен с помощью инструмента, отличного от штатного пакетного менеджера, например питоновского pip.
Проблемы могут быть и между пакетами, установленными из стандартного менеджера пакетов. Например, установка nvidia-340xx-utils
в Manjaro Linux до внесения разработчиками исправлений могла завершиться целой чередой сообщений о наличии содержащихся в нем библиотек в системе, по недоразумению установленных в систему пакетом libglvnd:
nvidia-340xx-utils: '/usr/lib/nvidia/libEGL.so' существует в файловой системе nvidia-340xx-utils: '/usr/lib/nvidia/libEGL.so.1' существует в файловой системе nvidia-340xx-utils: '/usr/lib/nvidia/libGL.so' существует в файловой системе nvidia-340xx-utils: '/usr/lib/nvidia/libGL.so.1' существует в файловой системе nvidia-340xx-utils: '/usr/lib/nvidia/libGLESv1_CM.so' существует в файловой системе nvidia-340xx-utils: '/usr/lib/nvidia/libGLESv1_CM.so.1' существует в файловой системе nvidia-340xx-utils: '/usr/lib/nvidia/libGLESv2.so' существует в файловой системе nvidia-340xx-utils: '/usr/lib/nvidia/libGLESv2.so.2' существует в файловой системе
В подобных случаях сначала придется деинсталлировать пакет, вызвавший ошибку, а затем установить требуемый.
Иногда, например все для того же pip или если приложение вообще было установлено способом configure && make && make install, потребуется вручную удалять библиотеки, вызвавшие конфликт, не деинсталлируя само приложение, их породившее.
Проблемы доступа к устройствам
Досадно обнаружить, как установленное тобой приложение, работающее с периферийными устройствами, вдруг «радует» сообщением, что нет прав на доступ к этим устройствам, и успешно запускается только с правами суперпользователя. Например, если бы подобное произошло с tvtime в отношении видеокарты, пользователь столкнулся бы с таким сообщением в консоли:
videoinput: Cannot open capture device /dev/video0: Permission denied
Первым делом следует проверить группы доступа к устройству:
$ ls -l /dev/video0
Ожидаемо ты обнаруживаешь среди них root и video, но не обнаруживаешь в последней себя (user), выполнив проверку командой
$ groups
Естественное решение — добавить пользователя (user) в группу (video) любой из доступных команд:
$ sudo usermod -a -G video user $ sudo useradd -a -G video user $ sudo gpasswd -a user video
По завершении команды нужно перезайти в систему.
Ошибки размонтирования
Каждый знает, что прежде, чем вынуть флешку из USB-разъема, нужно выполнить команду (или нажать значок) размонтирования. Не всегда эта команда завершается успешно, и в ответ ты можешь получить сообщение наподобие:
Error unmounting block device 8:17: GDBus.Error:org.freedesktop.UDisks2.Error.DeviceBusy: Error unmounting /dev/sdb1: target is busy
Оно говорит о том, что некое приложение все еще использует носитель /dev/sdb1
. Чтобы определить это приложение, нужно найти, куда смонтирован /dev/sdb1
:
$ mount | grep /dev/sdb1
А затем выполнить такую команду:
$ lsof +D /путь_к_точке_монтирования
Или такую:
$ fuser -m /путь_к_точке_монтирования
Останется только закрыть приложение, в крайнем случае убить процесс и спокойно размонтировать носитель. С помощью fuser это можно сделать, что называется, на месте:
$ fuser -k -m /путь_к_точке_монтирования
В самом крайнем случае можно не убивать приложение, а размонтировать ФС принудительно:
$ sudo umount -f -l /путь_к_точке_монтирования
Размонтирование устройства, занятого процессомФризы системы
Ничто не способно так вывести из себя, как ситуация, когда ни одно твое нажатие на мышь или клавиатуру не отзывается ожидаемой реакцией системы. Первой мыслью в этом случае будет перезагрузить систему хард ресетом. Но лучше пойти другим путем и найти виновника, переключившись в терминал.
Нажимаем Ctrl + Alt + F2, вводим логин и пароль и запускаем top:
$ top
Он покажет процессы (приложения), которые больше других кушают CPU. Те, что находятся на первых местах и в колонках CPU и TIME которых существенно большие цифры, чем у других, и есть корень зла.
Остается только их прибить (1110 здесь и далее — это PID процесса, который top показывает в одноименной колонке):
$ kill 1110
и забыть о проблеме. Хотя нет. На всякий пожарный нужно вновь запустить top и, если процесс все еще на месте, прикончить его с помощью безапелляционного
$ kill -9 1110
Процессы, запущенные от рута, требуют запуска kill через sudo, но в этом случае надо быть предельно внимательным и понимать, что делаешь, чтобы не угробить систему.
Вернуться назад в графический режим можно с помощью сочетания Ctrl + Alt + F7. В некоторых дистрибутивах может помочь Ctrl + Alt + F3 или F4. В общем, следует попробовать все функциональные клавиши.
Настройка беспроводной сети вручную
Во время спасательно-восстановительных операций тебе часто придется работать из голой консоли, в которой не будет апплета NetworkManager. Иногда сеть нужно будет настраивать вручную, и если в случае проводной сети это не проблема (обычно достаточно просто воткнуть кабель), то с беспроводной возникнут сложности.
Чтобы настроить беспроводную сеть, первым делом нужно узнать логическое имя своей беспроводной карточки:
$ iw dev
и проверить, не заблокирован ли интерфейс:
$ sudo rfkill list wlan
Если заблокирован, выполнить
$ sudo rfkill unblock wlan
Затем найти точку доступа (здесь и дальше wlan0 — имя карточки):
$ iwlist wlan0 scan | grep SSID
и подставить вместе с паролем WPA/WPA2 в команду
$ sudo wpa_passphrase ИМЯ_ТОЧКИ ПАРОЛЬ
Полученный ответ следует поместить в файл /etc/wpa_supplicant/wpa_supplicant.conf
.
Подключиться к сети можно будет с помощью двух команд:
$ sudo wpa_supplicant -В -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf $ sudo dhclient -i wlan0
Настройка беспроводного подключения в терминалеВыводы
За время, прошедшее с момента появления ядра Linux, различия между дистрибутивами, основанными на нем, достигли того уровня, когда переход с одного из них на другой становится достаточно затруднительным без дополнительного изучения их специфики.
Тем не менее общая основа означает и возможность возникновения общих проблем при работе этих операционных систем, что вместе с тем позволяет применять в любой из них представленные выше рецепты, пусть даже с некоторыми косметическими отличиями.
Читайте ещё больше платных статей бесплатно: https://t.me/nopaywall