Графический стек linux

Обновление системы и конфигурации

В Guix управление пакетами тесно связано с управлением конфигурацией. Каждое обновление системы с помощью
guix package—upgrade создает новое «поколение» (generation) состояния системы.

1
2
3
4
5
6
7
8
9

xakep@guix~$sudo guix system list-generations

Generation1Jun222020074503

file name/var/guix/profiles/system-1-link

canonical file name/gnu/store/xqy25i9sfmznd5b1sw5n4155i8v0l2xc-system

labelGNU with Linux-Libre5.4.31

bootloadergrub

root deviceUUID8f368be5-0dee-4bcc-b9d2-54c8f36a77ab

kernel/gnu/store/g56i8savnfr7981fil03idkjl0syj29d-linux-libre-5.4.31/bzImage

configuration file/gnu/store/cbn7d14kpv7a6agab3x1fm4mxrm4yzl5-configuration.scm

Командой
sudo guix system roll-back можно откатить систему к предыдущему состоянию, если с обновлением что-то пошло не так. Но и это еще не все: команда
guix system switch-generation$number позволяет откатить ее к любому предыдущему состоянию, не только последнему.

Очевидно, держать большое количество снимков системы на диске накладно. Командой
sudo guix delete-generations$num можно удалить состояние с указанным номером, а этой же командой без аргумента — все состояния, кроме текущего.
Полезно также помнить про команду
sudo guix gc. Ей можно принудительно удалить все неиспользуемые данные, оставшиеся от прошлых поколений.

Теперь вернемся к файлу настроек
/etc/config.scm. В нем хранятся все настройки системы, которыми управляет сам Guix, от имени хоста до списка включенных сервисов. В чем-то это похоже на rc.conf из систем BSD, но с куда более структурированным синтаксисом. Доступные опции описаны в руководстве.

Применить настройки после редактирования файла можно командой
sudo guix system reconfigure/etc/config.scm. Эта команда создаст новое «поколение» состояния системы. Как и обновление пакетов, эти изменения можно откатить. Это существенно уменьшает потребность в инструментах вроде Ansible.

В то же время и возможностей управлять настройками вручную в Guix куда меньше. Традиционные команды вроде useradd оказываются бесполезными:
guix system reconfigure приведет состояние системы в полное соответствие с файлом
/etc/config.scm и удалит все, что ты создал руками.

Информация об оперативной памяти

1. Файл /proc/meminfo (Linux)

Команда:

cat /proc/meminfo

Пример ответа:

MemTotal:        8010284 kB
MemFree:         1058580 kB
MemAvailable:    2791616 kB
Buffers:            1884 kB
Cached:          1754092 kB
SwapCached:       122280 kB
Active:          4330296 kB
Inactive:        2006792 kB
Active(anon):    3623768 kB
Inactive(anon):   983120 kB
Active(file):     706528 kB
Inactive(file):  1023672 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1048572 kB
SwapFree:         597684 kB
Dirty:                20 kB
Writeback:             0 kB
AnonPages:       4466532 kB
Mapped:            92808 kB
Shmem:             25776 kB
Slab:             408732 kB
SReclaimable:     308820 kB
SUnreclaim:        99912 kB
KernelStack:        7312 kB
PageTables:        23276 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     5053712 kB
Committed_AS:    3770324 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      159328 kB
VmallocChunk:   34359341052 kB
HardwareCorrupted:     0 kB
AnonHugePages:   3248128 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      257984 kB
DirectMap2M:     8130560 kB

* чаще всего, самое важное:

  • MemTotal — общий объем оперативной памяти.
  • MemFree — объем памяти, который не используется системой.
  • Buffers — память, которая в данным момент ожидает записи на диск.
  • Cached — объем, задействованный под кэш чтения с диска.
  • MemAvailable — объем памяти, доступной в распределители без необходимости обмена.
  • SwapTotal — объем файла подкачки.
  • SwapFree — свободный объем файла подкачки.

* Объем используемой памяти = MemTotal – MemFree — Cached — Buffers.

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

2. free (Linux)

Данная команда позволяет получить информацию об использовании памяти в удобной таблице. Для еще большего удобства, мы выведем ее с помощью дополнительного параметра -h:

free -m

Пример ответа:

              total        used        free      shared  buff/cache   available
Mem:           3,7G        568M        378M        193M        2,8G        2,6G
Swap:          4,0G         94M        3,9G

sysctl hw.physmem

Пример ответа:

hw.physmem: 2123677696

4. dmesg

Работает на BSD и Linux:

dmesg | grep memory

Итог:

real memory  = 2147483648 (2048 MB)
avail memory = 2042109952 (1947 MB)

5. Другие команды

Для получения информации по оперативной памяти также можно использовать команды:

vmstat -s

top

htop

* для htop необходима установка одноименной утилиты.

Установка Glances для мониторинга ОС в Unix/Linux

На самом деле, пакеты существуют для Arch Linux, Fedora / CentOS / RHEL, Debian (Sid / Testing) и Ubuntu (13.04), так что вы должны быть в состоянии установить его, используя ваш любимый менеджер пакетов.

Установка Glances для мониторинга ОС в Debian/Ubuntu:

# sudo apt-get install python-pip build-essential python-dev
# sudo pip install Glances
# sudo pip install PySensors

ИЛИ

# sudo apt-get install glances -y

Установка Glances для мониторинга ОС в Centos/Fedora/RedHat:

# yum install glances -y

Или

# pip install -U pip setuptools

# pip install --user glances

Установка Glances для мониторинга ОС с использованием готового скрипта:

To install both dependencies and latest Glances production ready version (aka master branch), just enter the following command line:

# cd /usr/local/src && curl -L https://bit.ly/glances | /bin/bash

Или:

# cd /usr/local/src && wget -O- https://bit.ly/glances | /bin/bash

Собственно, скрипт все за вас сделает.

Установка Glances для мониторинга ОС в FreeBSD

Устанавливаем нужные пакеты:

# pkg install py27-glances

Выполняем установку Glances с  портов:

# cd /usr/ports/sysutils/py-glances/
# make install clean

Изи.

Установка Glances для мониторинга ОС в Mac OS X

Для начала подключаем Homebrew, вот статья:

И потом выполняем:

$ brew install python
$ pip install glances

Получил ошибку:

 error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted

    ----------------------------------------
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/private/tmp/pip-build-DJCEk0/glances/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-NG1q4o-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/tmp/pip-build-DJCEk0/glances/

Исправление:

# sudo pip install --user glances

Проверялось, работает!

Установка Glances для мониторинга ОС с использованием Docker

Можно использовать и готовый контейнер:

$ docker pull nicolargo/glances

Запустите контейнер в консольном режиме:

$ docker run -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host -it docker.io/nicolargo/glances

Кроме того, если вы хотите использовать свой собственный glances.conf конфиг-файл, Вы можете создать свой собственный Dockerfile:

FROM nicolargo/glances
COPY glances.conf /glances/conf/glances.conf
CMD python -m glances -C /glances/conf/glances.conf $GLANCES_OPT

В качестве альтернативы, вы можете указать и так:

$ docker run -v ./glances.conf:/glances/conf/glances.conf -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host -it docker.io/nicolargo/glances

Где ./glances.conf — локальный конфиг-файл с glances.conf.

Запуск контейнера в режиме веб-сервера (обратите внимание на параметры переменного окружения GLANCES_OPT):

docker run -d --restart="always" -p 61208-61209:61208-61209 -e GLANCES_OPT="-w" -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host docker.io/nicolargo/glances

Как-то так.

Установка Logstash в Unix/Linux

Я расскажу как можно установить logstash на различные Unix/Linux ОС. А установка начнется с установки JAVA, т.к она неотъемная часть данной утилиты.

Если в вашей системе не установлена Java, используйте одну из следующих ссылок для ее установки:

Вот еще полезное чтиво:

PS: Logstash требует Java 8 и Java 9 не поддерживается.

А сейчас, переходим к установки логстеша. Возможно, я буду сокращать «LogStash» как «LS» или «ЛогСтеш» — «ЛС».

Установка Logstash в CentOS/Fedora/RHEL

Загружаем и устанавливаем публичный ключ подписи:

# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Открываем (создаем) файл:

# vim /etc/yum.repos.d/logstash.repo

И прописываем:

name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Вы можете установить его с помощью команды:

# yum install logstash -y

Настройка и запуск утилиты будет немного ниже.

Установка Logstash в Debian/Ubuntu

Загружаем и устанавливаем публичный ключ подписи:

# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Возможно, вам придется установить пакет apt-transport-https на Debian перед установкой утилиты:

# apt-get install apt-transport-https -y

Добавляем репозиторий:

# echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-5.x.list

Вы можете установить его с помощью команды:

# apt-get update && sudo apt-get install logstash

Настройка и запуск утилиты будет немного ниже.

Установка Logstash на другие Unix/Linux ОС

-=== СПОСОБ 1 — использовать docker==-

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

-=== СПОСОБ 2 — использовать готовый архив==-

Скачиваем с официального сайта архив с ЛС:

# cd /usr/local/src && wget https://artifacts.elastic.co/downloads/logstash/logstash-5.3.0.tar.gz

Распакуем архив:

# tar xfvz  logstash-*.tar.gz

Переносим папку:

# rm -f /usr/local/src/logstash-5.3.0.tar.gz && mv logstash-* /usr/local/logstash

Прописываем переменное окружение:

# vim ~/.bash_profile

У меня это:

export JAVA_HOME=/usr/java/jdk1.8.0_121/
export JRE_HOME=/usr/java/jdk1.8.0_121/jre

export LOGSTASH_HOME=/usr/local/logstash/

export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:/usr/bin:/usr/local/bin:$LOGSTASH_HOME/bin

Чтобы изменения применились, выполните:

# source ~/.bash_profile

Создаем конфиг:

# vim /usr/local/logstash/logstash-simple.conf

И прописываем:

input { stdin { } }
output {
elasticsearch { hosts =>  }
stdout { codec => rubydebug }
}

Затем запустите logstash:

# bin/logstash -f logstash-simple.conf

Как-то так.

Вопросы безопасности

При первом знакомстве с командой chroot, да и вообще с работой Chroot-среды, вполне закономерно может показаться, что эту технику можно использовать для защиты системы. И это действительно так и есть, но лишь отчасти, поскольку chroot допустимо использовать как дополнительный уровень защиты, сужающий направления и варианты атак.
На самом же деле, выйти из Chroot-окружения достаточно легко. Это связано, в первую очередь с несовершенством механизма работы chroot, поскольку он создавался изначально для быстрого и относительно простого доступа к ресурсам системы «из вне». Безопасности как таковой, внимания практически не уделялось, поскольку опять же, предполагалось использование chroot только в случаях согласованного и доверенного доступа к системе.

Механизмы обхода chroot достаточно просты. Например, один из них заключается в создании в Chroot-среде файла-устройства для устройства хранения с последующим обращением к этому устройству с помощью этого файла.

Информация о дисковом носителе

1. df

Команда выдает информацию о подмонтированных разделах и объемах, занимаемых ими:

df -h

Пример ответа:

Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
/dev/mapper/sys-root             25G          11G   15G           41% /
devtmpfs                        1,9G            0  1,9G            0% /dev
tmpfs                           1,9G         4,0K  1,9G            1% /dev/shm
tmpfs                           1,9G         193M  1,7G           11% /run
tmpfs                           1,9G            0  1,9G            0% /sys/fs/cgroup
/dev/sda1                      1014M         186M  829M           19% /boot

2. fdisk

Подробная информация о диске и его разделах:

fdisk /dev/sda -l

Ответ:

Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000d5e55

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    62914559    30407680   8e  Linux LVM

3. iotop

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

а) на Ubuntu / Debian:

apt-get install iotop

б) на CentOS / Red Hat:

yum install iotop

После установки утилита запускается командой:

iotop

Вывод похож на top:

Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd —swi…
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 %
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
 1542 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 %
 …

4. smartmontools

Утилита позволяет получить SMART дисковых накопителей. По умолчанию, она не установлена — установка выполняется из репозитория.

а) на Ubuntu / Debian:

apt-get install smartmontools

б) на CentOS / Red Hat:

yum install smartmontools

После установки можно использовать:

smartctl -a /dev/sda

* в данном примере мы увидим полный тест для диска sda.

Если нам нужно посмотреть только общее состояние здоровья, то используем опцию H:

smartctl -H /dev/sda

Если мы хотим получить информацию по всем дискам, вводим команды по очереди для каждого или:

find /dev -name ‘sd’ -exec smartctl -a {} \;

Установка cgroups в Unix/Linux

Данная тема охватит несколько ОС с наглядными примерами.

Установка cgroups в CentOS/RedHat

Данные управляющие группы и подсистемы ( к которым они относятся), могут управляться с помощью shell команд и утилит. Однако самый простой способ работы с такими группами — установить пакет libcgroup. Чтобы установить его, выполните следующую команду:

# yum install libcgroup -y

Служба cgconfig (конфигурация группы управления) используется для создания групп и управления подсистемами. Данный сервис может быть настроен для запуска во время загрузки и восстановления предустановленных групп, что делает их постоянными при перезагрузках. Чтобы запустить cgconfig  службы, выполните:

# service cgconfig start

Для проверки статуса, можно выполнить:

# service cgconfig status
Running

Чтобы добавить службу в автозагрузку ОС, выполните:

# chkconfig cgconfig on

Команда для установки:

$ su -c 'emerge libCGroup'

Команда для установки:

$ su -c 'yum -y install libCGroup-tools'

Установка GoAccess в Unix/Linux

Приведу примеры установок для различных Unix и Linux ОС.

Устанавливаем на deb’s ОС:

# aptitude install goaccess

ИЛИ

$ echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
$ wget -O - http://deb.goaccess.io/gnugpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install goaccess

Устанавливаем на rpm’s ОС:

# yum install goaccess

Устанавливаем на Arch Linux:

# pacman -S goaccess

Устанавливаем на Gentoo:

# emerge net-analyzer/goaccess

Устанавливаем на OS X / Homebrew:

# brew install goaccess

Устанавливаем на FreeBSD:

# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess

Компилируем с исходного кода:

Во-первых нужно скачать последнюю стабильную версию GoAccess.

# cd /usr/local/src/
# wget http://tar.goaccess.io/goaccess-1.0.2.tar.gz
# tar -xzvf goaccess-*

После чего переходим в распакованный каталог и выполняем сборку программы, если вы хотите можно разрешить сборку с geoip (но лучше прочитать README или INSTALL):

# ./configure --enable-geoip
# make && make install && make clean

Так же, можно использовать git:

$ cd /usr/local/src/ && git clone https://github.com/allinurl/goaccess.git && cd goaccess
$ autoreconf -fiv
$ ./configure --enable-geoip --enable-utf8
$ make && sudo make install

PS: Установите git если не установлен!

С установкой я закончил, перехожу к использованию данной утилиты.

Команда chgrp Linux

Стандарт прав файлов пришёл в Linux из Unix. У каждого файла есть владелец (user) и группа (group), помимо этого описываются права остальных пользователей (other). Права состоят из трёх пунктов: чтение (read), запись (write), выполнение (execute). Для изменения прав используется команда umask, но для изменения непосредственно владельца и группы используются команды chown и chgrp. Для просмотра текущих прав можно использовать команду ls.

Синтаксис и опции chgrp

Общий вид команды chgrp:

$ chgrp новая_группа имя_файла

Список распространённых параметров команды chgrp:

  • -h – работать непосредственно с самими символьными ссылками, а не с файлами, на которые они ссылаются;
  • —dereference – работать с файлами, а не самими символьными ссылками. Используется по умолчанию;
  • -R – рекурсивная обработка каталога со всем его содержимым;
  • -H – перейти по символической ссылке и изменить атрибуты файла/каталога. Сама ссылка остаётся без изменений. Используется вместе с параметром -R;
  • -L — перейти по символической ссылке и продолжить рекурсивную обработку. Сама ссылка остаётся без изменений. Используется вместе с параметром -R;
  • -P – при встрече с символьной ссылкой обрабатывать только её. Используется вместе с параметром -R, является значением по умолчанию;
  • —reference=имя_образца – использовать группу образца. Используется вместо новая_группа;
  • -c – при обработке выводить только изменения;
  • -v – выводить информацию о каждом обработанном файле.

Использование команды chgrp

Рассмотрим сразу несколько случаев использования, с реальным файлом и каталогом, а затем с символическими ссылками на них. Простейший пример использования команды chgrp без параметров. Следующая команда меняет группу на www-data для файла file в текущей папке:

А эта меняет группу на www-data для папки folder:

С реальными файлами и каталогами команда работает весьма предсказуемо, меняя их группу. Файлы в папке остаются неизменными. Если же обрабатывать символические ссылки, то их атрибуты останутся неизменными, а файлы получат новую группу. Такое поведение аналогично работе с параметром —dereference. Например, эти команды, применённые к символическим ссылкам, отработают как показано на снимке:

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

С параметром -h изменились только атрибуты ссылок, а не сами файлы. Теперь рассмотрим работу c параметром -R, предназначенным для рекурсивной обработки каталогов:

Новая группа была задана не только каталогу, но и всем файлам внутри

Обратите внимание на то, что поведение изменилось, теперь при обработке символической ссылки атрибуты выставляются для самой ссылки, а не файла

Чтобы увидеть разницу между параметрами -H и -L, рассмотрим ещё пару примеров. Напомним, что их надо использовать совместно с параметром -R:

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

С использованием параметра -L при переходе к папке по символической ссылке рекурсивная обработка не прекращается

Обращаем ваше внимание на то, что параметры -H и -L использовать небезопасно, они могут дойти до системных файлов

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: