Найти тему

Шпаргалка по Linux. Команды для терминала. Часть 2

Оглавление

PS

Решил поделиться своими заметками по разным тематикам. Сразу предупреждаю, что они могут быть малого объёма и не раскрывать тему полностью (какие-то базовые/начальные вещи). Я писал их для себя, чтобы быстрее въехать в какой-либо материал, либо когда понадобиться - открыть и вспомнить, что и как (короче, использую как шпаргалки).

Данная статья это продолжение вот этой, но по своей сути является отдельной статьей, так как описывает другие аспекты Linux-терминала.

Краткой содержание данной статьи: aliases, функции и цикл for, подключение по публичному ключу на сервер, подробнее о процессах в системе, сбор информации о системе, создание пользователей и изменение их параметров, некоторые системные и сетевые настройки.

(Описание других статей приведено в первой (ссылочка выше)).

Начнемс

Три штуки, которые очень упрощают жизнь работу в терминале. Я использую их постоянно:

1. Алиасы в системе - это сокращение какой-либо длинной команды или целого ряда команд. Каждый придумывает свои названия и свои заготовки, я покажу парочку своих. Алиасы можно задавать через команду alias (при закрытии терминала они пропадут), но я не вижу в этом смысла, поэтому мы будем писать сразу их в специальный файлик (~/.bashrc или ~/.bash_profile), чтобы юзать их всегда.

$ nano ~/.bashrc ; пишем внизу файла
alias name = "command" ; name - это сокращение, command - любые команды
Скрин bash_profile с моего ноута под управлением mac os (терминал как в линухе). В данном примере 5 алиасов: переход до рабочего стола, возврат на директорию назад, создание файлика, команда list с флагами, редактирование файлика алиасами, вызов midnight-commander (в линухе автоматом создается такой алиас при его установке (удобная штука, напишу про нее как-нибудь потом))
Скрин bash_profile с моего ноута под управлением mac os (терминал как в линухе). В данном примере 5 алиасов: переход до рабочего стола, возврат на директорию назад, создание файлика, команда list с флагами, редактирование файлика алиасами, вызов midnight-commander (в линухе автоматом создается такой алиас при его установке (удобная штука, напишу про нее как-нибудь потом))

2. Самописные функции - та же штука, что и алиасы, но используют при вызове параметры. Задаются все в том же файле баш-эр-си

$ nano ~/.bashrc ; пишем внизу файла
name(){commands with "$@"}
$ name parameters ; вызов функции с параметром
Несколько функций, которые есть у меня. Первая создает файл info.txt на рабочем столе (кстати вместо команды cd лялял, можно было использовать алиас desk, который мы задали выше) и записывает в него информацию, которую мы указали после функции fif. Вторая и третья функция открывают нужную серию Наруто и Боруто соответственно (Например, naruto 500 откроет нам заключительную серию второго сезона, плак плак (пошел пересматривать)).
Несколько функций, которые есть у меня. Первая создает файл info.txt на рабочем столе (кстати вместо команды cd лялял, можно было использовать алиас desk, который мы задали выше) и записывает в него информацию, которую мы указали после функции fif. Вторая и третья функция открывают нужную серию Наруто и Боруто соответственно (Например, naruto 500 откроет нам заключительную серию второго сезона, плак плак (пошел пересматривать)).

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