Скрипт для быстрой оценки состояния Linux систем

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

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

    Применяете ли вы сценарии для оценки состояния сервера?

    • 18,9%Да, каждый день.51
    • 51,5%Очень редко.139
    • 29,6%Нет, у меня нет сервера.80
    ua-hosting.company
    Хостинг-провайдер: серверы в NL / US до 100 Гбит/с

    Комментарии 47

      +2
      Доктор, может sudo?
      Не надо приучать людей вводить root-пароль.
        –4
        PermitRootLogin without-password
          0
          Дисциплину не использовать root это не отменяет, и само по себе безопасности от случайных ошибок не гарантирует.

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

          Но другим подобного урока на боевом сервере повторять очень не советую. «Что это значит, что вы не знаете, что такое резервное копирование?»
        +7
        # Remove Temporary Files
        rm /tmp/osrelease /tmp/who /tmp/ramcache /tmp/diskusage

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

              +17
              image
                +6
                Что у вас со шрифтами в консоли?
                  0
                  Подтверждаю — не используйте такие шрифты, а то даже лучшие скрипты мониторинга вашим глазам не помогут
                  0
                  Используем для мониторинга либо snmp, а если хочется «странного и необычного», то прикручиваем свои скрипты к nrpe… последнее тоже костыль, но не такой откровенный.
                    +2
                    прочитал «окровавленный» ))
                      +1
                      Да, да окровавленный костыль и смертоносный велосипед :)
                    +4
                    Как Вы считаете, для чего нужна последовательность, начинающаяся с #!, и где в файле она должна быть расположена?
                    и в догонку. что будет, если некий злоумышленник создаст в /tmp/scriptname симлинк например на /bin/bash?
                      +4
                      О, вы умеете определять сколько памяти занято на сервере? Расскажите, как вы это делаете? Я даже к kdb сидел, всё равно не могу на этот вопрос ответить.
                        0
                        Подозреваю,
                        $ free -h
                        
                          0
                          <sarcazm /> потерялся, да.
                        0
                        Вылетает с ошибками под zsh.
                          +3
                          $ cat /etc/resolv.conf | sed '1 d' | awk '{print $2}'
                          nameserver
                          nameserver
                          nameserver
                          nameserver
                          nameserver
                          nameserver


                          я даже вот задумался над этой конструкций из sed/awk, пытаясь понять как она в принципе должна была работать.
                            –1
                            Меня всегда это радовало. Обычно рекомендую изучить awk а не гуглить список решений из таких вот конструкций.
                              +8
                              <sarcasm> А что, у awk есть другие команды кроме print $x? </sarcasm>
                              0
                              $ 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,

                              Всё идёт по плану…
                                0
                                Что может пойти не так? :)
                              0
                              Что за трындец творится со шрифтами в консоли на скриншоте?
                                +2
                                А как же monit?
                                  0
                                  #!/bin/bash

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

                                  #!/usr/bin/env bash
                                    0
                                    а надо ли? ссыль
                                      0
                                      Ну если хочется универсальности то да, но текущий скрипт конечно далек от совершенства.
                                      На тему безопастности — спорный довод.
                                      Если бы были серьезные проблемы, я думаю давно бы об этом было известно.
                                    0
                                    А просветите меня кто-нибудь, зачем после then скобки в bash?

                                    ну типа

                                    if []
                                    then
                                    {
                                    echo
                                    }
                                    fi
                                    


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

                                    if []; then
                                        echo
                                    fi
                                    
                                      +2
                                      А сам себе отвечу.

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

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

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

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

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

                                        {(
                                        	sleep 15
                                        )& disown;} 2>/dev/null
                                        THREAD=$!
                                        
                                          0
                                          Ну второе это вполне нормально, да и первое то же вполне себе читается — видимо тут уже дело привычки и глубина знаний bash.
                                      +1
                                      Раз уже начали вечер советов, тогда добавлю
                                      chmod +x tecmint_monitor.sh
                                      
                                        +1
                                        Есть еще такая штука на питоне pypi.python.org/pypi/Glances
                                        Можно даже как веб-сервис запустить :)
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            +2
                                            Что я только что прочитал?
                                              +1
                                              скрипт можно заменить однострочником =)
                                                0
                                                главное, не говорить каким ,)
                                                  –1
                                                  клавиши нажимать, не мешки таскать
                                                  где однострочник?
                                                    +2
                                                    Вы серьезно или троллите? =) Используется echo, и парсер awk print команд hostname, ifconfig, cat, w, free, df, uptime. Подобные скрипты-велосипеды, имхо, пишет каждый администратор в самом начале своего знакомства с nix.

                                                    PS Кстати, не согласен с автором по поводу " но он может быть полезен для тех новичков", потому как новичку нужно набивать руку на использовании простых команд и подобное делать впоследствии уже «на автомате»
                                                  +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?
                                                    0
                                                    А в чем проблема в пробеле после шебанга?
                                                      0
                                                      Хм, похоже никакой, даже наоборот. Просто на практике ни разу не встречал примера с пробелом, но спасибо поискал, нашел надежный источник:
                                                      http://www.in-ulm.de/~mascheck/various/shebang/
                                                    0
                                                    Интересно, что делаю не так:

                                                    sudo ./tecmint_monitor.sh -i
                                                    
                                                    ./tecmint_monitor.sh: 26: ./tecmint_monitor.sh: [[: not found
                                                    ./tecmint_monitor.sh: 36: ./tecmint_monitor.sh: [[: not found
                                                    ./tecmint_monitor.sh: 43: ./tecmint_monitor.sh: [[: not found
                                                    
                                                      0
                                                      Может быть такое то из-под zsh запускаете? У меня похожая проблема была.
                                                        0
                                                        Не, станартный bash ubuntu 15.10
                                                          +2
                                                          Во-первых, авторы скрипта не в курсе, где должен стоять shebang. Отсутствие его в начале файла заставляет запускаться скрипт из-под стандартной оболочки. Во-вторых, стандартная оболочка Debian/Ubuntu уже несколько лет как dash:

                                                          $ ls -l /bin/sh
                                                          lrwxrwxrwx 1 root root 4 Nov  8  2014 /bin/sh -> dash
                                                          


                                                          Ну и наконец, в скрипте используются башизмы, не поддерживаемые dash.

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

                                                    Самое читаемое