Что делать при зависании программ в Linux?

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

Повторить Команду Несколько Раз в Linux

Используйте следующий синтаксис, чтобы выполнить какую-либо команду 5 раз:

for n in {1..5}; do <КОМАНДА>; done

Давайте поможем Барту Симпсону со школьной доской:

$ for n in {1..5}; do echo «Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ»; done Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ

Дельный Cовет: Выполняйте команды на удаленном Linux сервере через SSH и получайте результат локально! Читать далее →

Если вам необходимо часто использовать такую конструкцию, тогда не помешает создать соответствующую Bash функцию (добавьте в ~/.bashrc):

function run() { number=$1 shift for n in $(seq $number); do [email protected] done }

Использование:

$ run 5 <КОМАНДА>

Дельный Cовет: Каждый Linux администратор обязан знать как построчно прочитать файл с помощью Bash цикла WHILE! Читать далее →

Читайте также:  Как найти и удалить битые символические ссылки в Linux

Пример:

$ run 5 echo «Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ» Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ Я НЕ БУДУ КАТАТЬСЯ НА СКЕЙТЕ В КОРИДОРАХ

Использование сценариев оболочки по сравнению с языком сценариев

Часто задумываясь о выполнении задачи, администраторы задаются вопросом: использовать ли сценарий оболочки или язык сценариев, такой как Perl, Ruby или Python?

Здесь нет установленных правил. Есть только типичные различия между оболочками и языками сценариев.

Ракушка

Shell позволяет использовать команды Linux, такие как sed , grep , tee , cat и все другие утилиты на основе командной строки в операционной системе Linux. Фактически, почти любая утилита Linux командной строки может быть написана в вашей оболочке.

Отличным примером использования оболочки будет быстрый скрипт для проверки списка хостов на предмет разрешения DNS.

Наш простой Bash Script для проверки DNS-имен —

#!/bin/bash for name in $(cat $1); do host $name.$2 | grep «has address» done exit

небольшой список слов для проверки разрешения DNS на

dns www test dev mail rdp remote

Вывод по домену —

[[email protected] ~]$ ./ -doing dns has address -doing www has address -doing test -doing dev -doing mail has address -doing rdp -doing remote [[email protected] ~]$

Используя простые команды Linux в нашей оболочке, мы смогли создать простой 5-строчный скрипт для аудита имен DNS из списка слов. Это заняло бы значительное время в Perl, Python или Ruby даже при использовании красиво реализованной библиотеки DNS.

Язык сценариев

Язык сценариев даст больше контроля за пределами оболочки. Приведенный выше скрипт Bash использовал оболочку для команды хоста Linux. Что, если мы хотим сделать больше и сделать наше собственное приложение, например хост, взаимодействующим вне оболочки? Здесь мы будем использовать язык сценариев.

Кроме того, с хорошо поддерживаемым языком сценариев мы знаем, что наши действия будут работать в разных системах по большей части. Например, Python 3.5 будет работать на любой другой системе, на которой работает Python 3.5 с такими же установленными библиотеками. Не так, если мы хотим запустить наш BASH-скрипт на Linux и HP-UX.

Иногда границы между языком сценариев и мощной оболочкой могут быть размыты. Можно автоматизировать задачи администрирования CentOS Linux с помощью Python, Perl или Ruby. Это действительно обычное дело. Кроме того, богатые разработчики сценариев оболочки сделали простой, но в остальном функциональный демон веб-сервера в Bash.

Имея опыт работы с языками сценариев и автоматизации задач в оболочках, администратор CentOS сможет быстро определить, с чего начать при необходимости решения проблемы. Довольно часто начинать проект с помощью сценария оболочки. Затем переход к скриптовому (или скомпилированному) языку становится более сложным.

Кроме того, можно использовать как язык сценариев, так и сценарий оболочки для различных частей проекта. Примером может служить Perl-скрипт для очистки сайта. Затем используйте сценарий оболочки для анализа и форматирования с помощью sed , awk и egrep . Наконец, используйте PHP-скрипт для вставки отформатированных данных в базу данных MySQL с помощью веб-интерфейса.

Имея некоторую теорию, лежащую в основе оболочек, давайте начнем с основных строительных блоков для автоматизации задач из оболочки Bash в CentOS.

Как узнать правильный путь к интерпретатору BASH

Обычно в linux интерпретатор BASH находится по пути /bin/bash, но там его может не быть по независящим от вас причинам. Тогда имеем смысл попробовать ввести команду whereis bash и посмотреть на результаты, которые она выдаст:

Читайте также:  Эмулятор Андроид на ПК: ТОП-10 простых программ

[email protected]:~# whereis bash bash: /bin/bash /etc/ /usr/share/man/man1/

Как видно на примере выше, было найдено три совпадения:

  1. /bin/bash — путь до интерпретатора (именно то, что требуется)
  2. /etc/ — конфигурационный файл с переменными окружения BASH пользователя
  3. /usr/share/man/man1/ — файл справочной информации для BASH

Нужно помнить, что если whereis не находит BASH, то это не значит, что его нет в системе. Тут имеет смысл посмотреть глобальную переменную окружения $PATH, но обычно этого не требуется. Поэтому дальше не вижу смысла углубляться в детали.

:(){ :|: & };: Бомба написанная на Bash

Следующая строка представляет собой простой вид, но очень опасная, функция на Bash:

:(){ :|: & };:

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

Примечание: Bash функции являются мощными, даже если они очень короткие, учтите это и как говорится, мотайте на ус.

Зависание графической оболочки в Linux

Как уже было отмечено выше, если в системе установлена и работает какая-либо из графических оболочек (GNOME, KDE, Xfce и т. д.), то это лишний повод увидеть перед собой зависшее окно какого-либо приложения, либо даже целиком некликабельный рабочий стол. В таком случае удобно воспользоваться графическим менеджером процессов и управлять ими визуально. Используя элементы интерфейса и контекстное меню процесса.

Читайте также:  5 сверхполезных, но скрытых горячих клавиш для Windows

Но бывает также и так, когда рабочий стол не реагирует ни на клики мыши, ни на привязанные к нему клавиатурные комбинации. В этом случае остаётся задействовать виртуальные терминалы. Переключившись на один из них, как это указано в предыдущей главе по нажатию сочетаний клавиш <Ctrl+Alt+FN>. Стоит отметить, что при переключении на такой терминал необходимо сначала авторизоваться в системе через него. После этого можно попытаться перезапустить графическую оболочку и/или X-сервер, например для Ubuntu:

$ sudo /etc/init.d/lightdm restart

Зависание графической оболочки в Linux

Или:

$ sudo /etc/init.d/ssdm restart

Здесь lightdm или ssdm зависит от того, какая графическая оболочка используется. В последних версиях дистрибутивов Ubuntu в основном используется композитный менеджер ssdm.