Обязанность системного администратора — следить за загруженностью системы, за пользователями, создавать резервную копию и бла-бла-бла. Для наиболее повторяющихся задач существуют различные сценарии, которые позволяют сохранить пальцы на руках и сделать постоянно повторяющиеся задачи более простыми. Здесь представлен скрипт, который не стремится автоматизировать задачи типичного системного администратора, но он может быть полезен для тех новичков, желающих получить часть необходимой информации об их системе, сети, пользователях, нагрузке, RAM, владельцах, внутреннем и внешнем IP и т.п.

Сценарий не имеет какого-либо вредоносного содержимого и его можно запустить с помощью обычных учетных записей пользователей. В самом деле рекомендовано запускать скрипт из под юзера с ограниченными правами а не супер-пользователя.

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

Минимальные требования системы


Все, что вам нужно — это рабочая Linux.

Совместимость


В данном случае скрипт совестим со всеми стандартными дистрибутивами Linux. Кроме того, он не требует корневого разрешения для выполнения. Но при установке не из-под root-пользователя понадобится ввести root-пароль.

Безопасность


Для установки и использования не требуется никаких дополнительных пакетов, которые не указаны в данном посте. Нет необходимости обладать правами суперпользователя для запуска. Код был выпущен под Apache License 2.0 и это означает, что вы можете редактировать, изменять и перераспределять его.

Установка скрипта


Чтобы установить скрипт используйте wget команду для загрузки сценария tecmint_monitor.sh. Также нужно будет сделать его исполняемым, установив соответствующие разрешения.
$ wget http://tecmint.com/wp-content/scripts/tecmint_monitor.sh

Получим следующие:
[test@localhost ~]$ wget http://tecmint.com/wp-content/scripts/tecmint_monitor.sh
--2015-12-22 13:52:21--  http://tecmint.com/wp-content/scripts/tecmint_monitor.sh
Resolving tecmint.com... 212.71.234.61
Connecting to tecmint.com|212.71.234.61|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.tecmint.com/wp-content/scripts/tecmint_monitor.sh [following]
--2015-12-22 13:52:21--  http://www.tecmint.com/wp-content/scripts/tecmint_monitor.sh
Resolving www.tecmint.com... 212.71.234.61
Reusing existing connection to tecmint.com:80.
HTTP request sent, awaiting response... 200 OK
Length: 4015 (3.9K) [application/x-sh]
Saving to: `tecmint_monitor.sh'

100%[=============================================>] 4,015       --.-K/s   in 0s      

2015-12-22 13:52:21 (290 MB/s) - `tecmint_monitor.sh' saved [4015/4015]

[test@localhost ~]$ 


Скачали файл без проблем, теперь нужно установить соответствующие разрешение.

Устанавливаем разрешения.
# chmod 755 tecmint_monitor.sh


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

Для установки скрипта tecmint_monitor.sh, используем -i, как показано ниже.

$ ./tecmint_monitor.sh -i


Получим такой вот запрос пароля:
[test@localhost ~]$ ./tecmint_monitor.sh -i

./tecmint_monitor.sh: line 30: /tmp/scriptname: Permission denied
Password: 


Введите root-пароль. Если все пройдет хорошо вы получите сообщение про успешную установку.
Congratulations! Script Installed, now run monitor Command
[test@localhost ~]$


Более безопасный вариант будет добавление пользователя в sudoers. В таком случаи команда установки будет выглядеть следующим образом.
$ $ sudo ./tecmint_monitor.sh -i


После установки, вы можете запустить сценарий с помощью вызова команды monitor из-под любого пользователя.
$  monitor


Как только команда будет выполнена вы получаете различную информацию о системе:

  • Подключение к Интернету
  • Тип ОС
  • Имя ОС
  • Версия ОС
  • Архитектура
  • Версия ядра
  • Имя хоста
  • Внутренний IP
  • Внешний IP
  • Имя Сервера
  • Авторизированные пользователи
  • Использовано RAM
  • Использовано SWAP
  • Сколько дискового пространства использовано
  • Время работы системы

Проверить установленную версию скрипта можно используя monitor -v.

$ monitor -v


Получите такого рода результат:
tecmint_monitor version 0.1
Designed by Tecmint.com
Released Under Apache 2.0 License
[test@localhost ~]$ 


Вывод


Это готовое решение из коробки, которое не требует специальных навыков или знаний по работе с SSH. Такое решение явно не лучшее для матерых админов, но оно прекрасно подойдет для новичков, только начинающих осваивать работу с сервером. Если вы знаете более оптимальные скрипты для быстрой оценки состояния Linux систем, которые не требуют сверх-знаний и будут полезней, высказывайте свое мнение и оставляйте рекомендации в комментариях. Я, как и другие читатели, будем рады видеть мнение профессиональных администраторов, работающих с системами Linux. Каждый сможет подчеркнуть что-то для себя.

UPD
При установке лучше использовать sudo, с точки зрения безопасности.

Добавление пользователя в sudoers
Добавить пользователя в группу wheel
$ gpasswd -a username wheel

Adding user test to group wheel
?
отредактировать файл sudoers
$ visudo
$$ Allows people in group wheel to run all commands

$ %wheel ALL=(ALL)       ALL

раскоментировать строку, или согласно синтаксису добавить нашего пользователя
$ username  ALL=(ALL)       ALL


Теперь из под пользователя можно использовать sudo.
Применяете ли вы сценарии для оценки состояния сервера?

Проголосовало 255 человек. Воздержалось 129 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (42)


  1. Temmokan
    22.12.2015 18:13
    +2

    Доктор, может sudo?
    Не надо приучать людей вводить root-пароль.


    1. nikolayvaganov
      23.12.2015 19:52
      -4

      PermitRootLogin without-password


      1. Temmokan
        24.12.2015 03:04

        Дисциплину не использовать root это не отменяет, и само по себе безопасности от случайных ошибок не гарантирует.

        Думаю, не у меня одного в практике был случай, когда клиент с подобной установкой и без «обычных» пользователей, среди которых есть sudoer'ы, сделал впоследствии два действия: a) случайно переписал файл ~root/.ssh/authorized_keys и b) перезагрузил компьютер. «История прекратила течение своё». По счастью, был физический доступ к консоли, не было пароля на grub и файловая система не была зашифрована.

        Но другим подобного урока на боевом сервере повторять очень не советую. «Что это значит, что вы не знаете, что такое резервное копирование?»


  1. BuriK666
    22.12.2015 18:21
    +7

    # Remove Temporary Files
    rm /tmp/osrelease /tmp/who /tmp/ramcache /tmp/diskusage

    используйте mktemp


  1. plin2s
    22.12.2015 18:28
    +10

    В опроснике не хватает варианта «нет, использую полноценный мониторинг».


    1. nitro80
      27.12.2015 04:58

      Ага, удивило :)
      Хватает на vds htop'a


  1. JIghtuse
    22.12.2015 18:40
    +5

    • Вашему терминалу очень плохо.
    • Может, на Github?
    • Настоятельно рекомендуется установить скрипт из-под пользователя с ограниченными правами
      Зачем тогда вообще su в скрипте? Зачем нужен «установщик» внутри скрипта? «Установить» и «скачать и положить в /usr/bin» — разные вещи. Незачем эту директорию трогать. Положите в $HOME/.local/bin/ и дело с концом.
    • может быть полезен для тех новичков, желающих получить часть необходимой информации об их системе, сети, пользователях, нагрузке, RAM, владельцах, внутреннем и внешнем IP и т.п.
      Полезно, наверное. Если нет cockpit.


  1. bockra
    22.12.2015 18:41
    +17

    image


  1. ComodoHacker
    22.12.2015 18:41
    +6

    Что у вас со шрифтами в консоли?


    1. M_Muzafarov
      23.12.2015 09:48

      Подтверждаю — не используйте такие шрифты, а то даже лучшие скрипты мониторинга вашим глазам не помогут


  1. oldbay
    22.12.2015 18:43

    Используем для мониторинга либо snmp, а если хочется «странного и необычного», то прикручиваем свои скрипты к nrpe… последнее тоже костыль, но не такой откровенный.


    1. icbook
      23.12.2015 02:11
      +2

      прочитал «окровавленный» ))


      1. oldbay
        23.12.2015 19:50
        +1

        Да, да окровавленный костыль и смертоносный велосипед :)


  1. Anastasia_K
    22.12.2015 19:00
    +4

    Как Вы считаете, для чего нужна последовательность, начинающаяся с #!, и где в файле она должна быть расположена?
    и в догонку. что будет, если некий злоумышленник создаст в /tmp/scriptname симлинк например на /bin/bash?


  1. amarao
    22.12.2015 19:40
    +4

    О, вы умеете определять сколько памяти занято на сервере? Расскажите, как вы это делаете? Я даже к kdb сидел, всё равно не могу на этот вопрос ответить.


    1. ironsnake
      22.12.2015 22:42

      Подозреваю,

      $ free -h
      


      1. ironsnake
        22.12.2015 23:07

        <sarcazm /> потерялся, да.


  1. asm0dey
    22.12.2015 20:12

    Вылетает с ошибками под zsh.


  1. farcaller
    22.12.2015 20:16
    +3

    $ cat /etc/resolv.conf | sed '1 d' | awk '{print $2}'
    nameserver
    nameserver
    nameserver
    nameserver
    nameserver
    nameserver


    я даже вот задумался над этой конструкций из sed/awk, пытаясь понять как она в принципе должна была работать.


    1. icCE
      22.12.2015 22:25
      -1

      Меня всегда это радовало. Обычно рекомендую изучить awk а не гуглить список решений из таких вот конструкций.


      1. farcaller
        22.12.2015 22:26
        +8

        <sarcasm> А что, у awk есть другие команды кроме print $x? </sarcasm>


    1. RPG
      22.12.2015 22:41

      $ cat /etc/resolv.conf | sed '1 d' | awk '{print $2}'
      DO
      192.168.1.1

      Всё нормально:)

      top -n 1 -b | grep «load average:» | awk '{print $10 $11 $12}'
      loadaverage:0,27,

      Всё идёт по плану…


      1. icCE
        22.12.2015 22:47

        Что может пойти не так? :)


  1. dom1n1k
    22.12.2015 20:26

    Что за трындец творится со шрифтами в консоли на скриншоте?


  1. Lolka
    22.12.2015 22:08
    +2

    А как же monit?


  1. icCE
    22.12.2015 22:28

    #!/bin/bash

    как минимум заменит на

    #!/usr/bin/env bash


    1. Borz
      22.12.2015 23:13

      а надо ли? ссыль


      1. icCE
        22.12.2015 23:51

        Ну если хочется универсальности то да, но текущий скрипт конечно далек от совершенства.
        На тему безопастности — спорный довод.
        Если бы были серьезные проблемы, я думаю давно бы об этом было известно.


  1. icCE
    22.12.2015 22:35

    А просветите меня кто-нибудь, зачем после then скобки в bash?

    ну типа

    if []
    then
    {
    echo
    }
    fi
    


    Да и такое как по мне читать мягко говоря не приятно, почему не сделать отступы например как принято (ну вроде бы везде так пишут)

    if []; then
        echo
    fi
    


    1. icCE
      22.12.2015 22:45
      +2

      А сам себе отвечу.

      то, что находится между фигурными скобками – выполняется в контексте текущей оболочки.
      Можно использовать еще и круглые, тогда будет выполнятся в отдельном подпроцессе.

      Вроде так.


      1. RPG
        22.12.2015 22:49

        С фигурными можно такие финты проделывать:

        [[ $a == $b ]] && { echo "error" >&2; exit -1; }
        

        Тогда if не нужен. Ну и пользователи не-bash, скорее всего, будут ругаться.

        Или даже такие:

        {(
        	sleep 15
        )& disown;} 2>/dev/null
        THREAD=$!
        


        1. icCE
          23.12.2015 07:55

          Ну второе это вполне нормально, да и первое то же вполне себе читается — видимо тут уже дело привычки и глубина знаний bash.


  1. BeLove
    23.12.2015 01:49
    +1

    Раз уже начали вечер советов, тогда добавлю

    chmod +x tecmint_monitor.sh
    


  1. k3NGuru
    23.12.2015 06:32
    +1

    Есть еще такая штука на питоне pypi.python.org/pypi/Glances
    Можно даже как веб-сервис запустить :)


  1. phozzy
    23.12.2015 07:09

    почему не на гитхабе? было бы легче работать с комитами.


  1. teamfighter
    23.12.2015 12:29
    +2

    Что я только что прочитал?


  1. nikolayvaganov
    23.12.2015 19:54
    +1

    скрипт можно заменить однострочником =)


    1. grossws
      23.12.2015 21:54

      главное, не говорить каким ,)


    1. intrud3r
      23.12.2015 21:58
      -1

      клавиши нажимать, не мешки таскать
      где однострочник?


      1. nikolayvaganov
        23.12.2015 22:19
        +2

        Вы серьезно или троллите? =) Используется echo, и парсер awk print команд hostname, ifconfig, cat, w, free, df, uptime. Подобные скрипты-велосипеды, имхо, пишет каждый администратор в самом начале своего знакомства с nix.

        PS Кстати, не согласен с автором по поводу " но он может быть полезен для тех новичков", потому как новичку нужно набивать руку на использовании простых команд и подобное делать впоследствии уже «на автомате»


  1. saboteur_kiev
    29.12.2015 12:22
    +1

    >«Нет необходимости обладать правами суперпользователя для запуска.»
    >«Но при установке не из-под root-пользователя понадобится ввести root-пароль.»

    Взаимоисключающие параграфы?

    >«Это готовое решение из коробки, которое не требует специальных навыков или знаний по работе с SSH»
    Еще во времена FIDO, всех учили что не стоит запускать от рута чужие велосипеды. А то шутки «а что делает команда rm -rf /» все еще живы.
    И главная задача мониторинга — автоматизация, то есть висеть в кроне и рассылать уведомления, а что у вас в «коробке»? совсем не готовое решение. Его еще надо готовить.

    В своем большинстве, для мониторинга достаточно знать свободное место на диске, свободную память и нагрузку на CPU, у вас вместо нагрузки на CPU выдает статику типа архитектуры, версии ОС и кучи других ненужных для этого дела параметров.

    >"#! /bin/bash"
    Я чего-то не знаю про скрипты, или у вас действительно
    1) после шебанга пробел идет?
    2) вся строка не первая в скрипте?

    > externalip=$(curl -s ipecho.net/plain;echo)
    то есть, если инет пропал, я даже не смогу вашим скриптом определить свой внешний IP и сказать его службе техподдержки, придется по-старинке ipconfig?

    > df -h| grep 'Filesystem\|/dev/sda*' > /tmp/diskusage
    А вы в курсе, что диски могут быть не только sda?


    1. ironsnake
      01.01.2016 17:46

      А в чем проблема в пробеле после шебанга?