PS
Решил поделиться своими заметками по разным тематикам. Сразу предупреждаю, что они могут быть малого объёма и не раскрывать тему полностью (какие-то базовые/начальные вещи). Я писал их для себя, чтобы быстрее въехать в какой-либо материал, либо когда понадобиться - открыть и вспомнить, что и как (короче, использую как шпаргалки).
Данная статья это продолжение вот этой, но по своей сути является отдельной статьей, так как описывает другие аспекты Linux-терминала.
Краткой содержание данной статьи: aliases, функции и цикл for, подключение по публичному ключу на сервер, подробнее о процессах в системе, сбор информации о системе, создание пользователей и изменение их параметров, некоторые системные и сетевые настройки.
(Описание других статей приведено в первой (ссылочка выше)).
Начнемс
Три штуки, которые очень упрощают жизнь работу в терминале. Я использую их постоянно:
1. Алиасы в системе - это сокращение какой-либо длинной команды или целого ряда команд. Каждый придумывает свои названия и свои заготовки, я покажу парочку своих. Алиасы можно задавать через команду alias (при закрытии терминала они пропадут), но я не вижу в этом смысла, поэтому мы будем писать сразу их в специальный файлик (~/.bashrc или ~/.bash_profile), чтобы юзать их всегда.
$ nano ~/.bashrc ; пишем внизу файла
alias name = "command" ; name - это сокращение, command - любые команды
2. Самописные функции - та же штука, что и алиасы, но используют при вызове параметры. Задаются все в том же файле баш-эр-си
$ nano ~/.bashrc ; пишем внизу файла
name(){commands with "$@"}
$ name parameters ; вызов функции с параметром
3. Незаменимый цикл for.
$ for i in 'some file or number'; do 'command with $i'; done
Например: for i in `ls`; do echo $i; done ; бред, но для примера пойдет
SSH
Для подключения по публичному ключу на сервера по ssh нам необходимо сгенерировать ключ с помощью ssh-keygen.
На сервере в папке .ssh создать файл authorized_keys (должен быть недоступен для записи всем, кроме пользователя). И закинуть туда этот ключ.
На сервере заходим на пользователя 'username'
$ mkdir .ssh ; в директории ~/
$ chmod 700 .ssh
На своем компуктере
$ ssh-keygen ; следуем указаниям до успешного создания связки ключеней
$ cat .ssh/id_rsa.pub | ssh 'ip' -l 'username' "cat >> .ssh/authorized_keys" ; ip - адрес сервера, username - имя пользователя на сервере
Если вам просто нужно подсоединиться к серверу (не по публичному ключу):
$ ssh username@server
Процессы
Получение информации о процессе с помощью команды ps.
$ ps ax
В выводе видно следующие атрибуты:
Pid (process id), ppid (parent process id)
State (R - running, S - sleeping, D - blocked, bacause communicate with disk, Z - zombie (процесс, который завершился, но своему родителю ничего не сказал), T - stopped (если вышли ctrl+z и не выкинули в bg)
Информация о системе
Утилиты для сбора информации о системе:
- Top (d - delay, C - show command, H - show thread's, M - sort by memory, i - show/hide process do nothing (idle))
- Dstat
- Iostat (ввод/вывод)
- Mpstat
- Df
- Mount (смонтированные файловые системы)
Дополнительно:
- Lscpu (процессоры)
- Lspci (pci устройства)
- dmidecode (о системе)
Пользователи
Возможно это должно было быть раньше, но лучше поздно, чем никогда. Вход в root - 'su -' (sudo -s), выполнение действий через root - sudo
Привелигированный пользователь - root - имеет обозначение #(хештег), непривелигированный (обычный смертный) $.
$ groupadd 'name' ; или groupdel 'name'
$ useradd -m -g 'name' 'username' ; -m - домашний каталог, копируется с /etc/skel, можно подредактировать, например добавить .ssh
$ su - 'username' - вход в другого пользователя
$ passwd - устанавливаем пароль ему (внутри пользователя, если не получится, то через root'а "passwd 'username'" устанавливаем любой пароль, потом заново под пользователем меняем на нужный)
$ usermod -a(add) -G(group) 'name' 'username'
$ sudo -l - проверка прав для этого пользователя (информацию про права можно посмотреть cat etc/sudoers, а изменять через visudo)
Файлы с информацией о пользователях
/etc/{passwd, shadow, group}
1: показывает пользователей, их id и тд (редактирование через команду vipw)
2: содержит хеши паролей, количество дней с 1 января 1970, как поменяли пароль и сколько действительна учетка (два больших числа (редактирование vipw -s)
3: инфа о группах (название:служебное поле:члены) (редактирование непосредственно через файл)
Системные настройки
Периодические задачи с помощью crontab (можно запланировать какую либо задачу на какое то определенное время, например еженедельно выполнять то-то или то-то)
$ crontab -e ; откроется файл, в который можно добавить новые задачи, следующего вида
m h dom m dow command ; минута часы день_месяца месяц день_недели команда
5 1 12 6 * echo test > /dev/nul ; пример
$ crontab -r ; удаляем все правила
Cеть
Чтобы работала, необходимо, чтобы были настроены: адреса на интерфейсах, маршруты, dns, фильтрация.
1. /etc/network/interfaces (показывает правила для интерфейсов), /etc/network/iptables (правила для сетей)
2. ifconfig - вывод информации об интерфейсах (rx - сколько принято, tx - сколько отправлено информации, командой uptime можно посмотреть за какое время), ifup/ifdown - переключение состояния вкл/выкл интерфейса
$ ifconfig
$ ifdown eth0 && ifup eth0 ; "&&" - если успешна выполнилась левая часть, то выполнится и правая
3. ip addr (или просто ip a), ip link (ip a ~ ifconfig, ip l - интерфейсы на 2ом уровне)
$ ip a
$ ip a f dev eth0 ; f- flush, удаляем
$ ip a a 192.168.0.1/24 dev eth0 ; назначаем адрес интерфейсу
$ ip l
4. ip route (или просто ip r), ip rule
$ ip r ; вывод всех маршрутов
$ ip r a dafault via 10.20.0.1 ; a - add, дефолтный маршрут через указанный адрес
$ ip r a default dev eth0 ; дефолтный маршрут через интерфейс
$ ip r d 10.0.0.0/8 via 192.168.0.1 ; удаление маршрута до сети 10.0.0.0/8, который был задан через указанный адрес
$ ip rule ; вывод таблиц
$ ip rule add from 10.20.3.153 table 2
$ ip route list table 'name' ; правила в таблице 'name'
DNS
1. /ect/resolv.conf (указаны ns сервера)
2. /etc/hosts
3. nsswitch (/etc/nsswitch.conf в разделе hosts показывает порядок просмотра для поиска имен)
4. nscd (/etc/nscd.conf) хранит кеш имен.
$ nscd -i hosts ; i - invalidate, очистить
$ /etc/init.d/nscd stop; rm -rvf /var/cache/nscd/*; /etc/init.d/nscd start ; другой способ очистки
Узнаем IP-адрес
- host vk.com (опрашивает dns сервера) (host -t 'type' 'domain' 'dns', например host -t A mail.ru 8.8.8.8, типы бывают A,SOA,TXT,CNAME, ANY и тд)
- nslookup vk.com (если просто написать nslookup, потом прописать server 8.8.8.8, дальше задать адрес, то он будет обращаться непосредственно через ns сервер 8.8.8.8)
- dig vk.com (dpkg -S 'which dig' - > dnsutils, командой мы посмотрели к какому пакету он относится) (dig 'type' 'domain' @'dns')
$ for i in host nslookup dig; do $i vk.com; done
Чтобы посмотреть адрес в двоичной форме, используем данную команду:
$ ipcalc (-n) 127.0.0.1