Archive for Управление сервером

Основные процессы Linux

[kthreadd] – PID 2, так называемый “мастер потоков” – это мастер-процесс, создающий процессы для управления аппаратной составляющей. В целом, большинство процессов ниже являются порождениями этого процесса, он как главный босс, раздающий работу и кричащий, что делать.

[rcu_gp] – Read-copy update. Специальный механизм синхронизации данных, позволяющий обрабатывать данные в несколько потоков. Нужен для многопоточной работы с данными.

[kworker/(u)X:X(H)] – процессы которые помогают ядру обрабатывать запросы. Таких процессов может быть много (в зависимости от нагрузки на ядро, чем больше запросов на выделение прерывания, чем больше таймеров и системных вызовов, тем больше процессов по работе в пространстве ядра).

[mm_percpu_wq] – процесс для управления памятью для каждого ядра.

[ksoftirqd/0] – на каждое процессорное ядро ядром Linux порождается один такой процесс, который необходим как для обработки аппаратных прерываний от установленного оборудования, прерываний от установленного программного обеспечения так и обработки исключений возникающих в процессе работы операционной системы. Посмотреть статистику можно в файле /proc/interrupts

[rcu_sched] – дополнительный процесс для корректной работы RCU (это процесс-планировщик).

[rcu_bh] – дополнительный процесс для корректной работы RCU, родственный rcu_sched, отвечает за так называемые “грейс периоды”, они же интервалы времени для завершения RCU-заданий (если простыми словами).

[migration/0] – процесс, которые распределяет другие процессы по ядрам. Один процесс на одно ядро.

[cpuhp/0] – процесс, создающийся 1 на 1 ядро, отвечающий за физическое добавление/удаление CPU в/из систем.

[kdevtmpfs] – заполняет и обслуживает дерево устройств.

[netns] – управляет сетью (фактически оно управляет пространством имен для сетей)

[khungtaskd] – процесс, который каждые две (чаще всего) минуты ищет зависшие задания.

[oom_reaper] – процесс, отвечающий за “убийство” процесса, который потребляет больше всего памяти, если ОЗУ на компьютере заканчивается.

[writeback] – процесс который записывает отложенные в кэше контроллера накопителя данные на сам накопитель. Инициировать можно командой sync

[kcompactd0] – отвечает за так называемое уплотнение памяти (работает по 1 процессу на 1 ядро, обычно – каждые 15 секунд).

[khugepaged] – отслеживает эффективность использование “huge pages” виртуальной памяти.

[crypto] – предоставляет API к крипто-модулю ядра.

[kintegrityd] – проверяет целостность блочных устройств с помощью записи/чтения с/на этих устройств/ах.

[kblockd] – процесс ищет перегрузки в I/O (операциях ввода-вывода).

[edac-poller] – ищет ошибки в памяти и устраняет их.

[devfreq_wq] – процесс  разрешает повторное использование так называемых “рабочих очередей” (workqueues).

[watchdogd] – средство наблюдения за нормальной работой системы, и если происходит какой-то сбой, то данный процесс запускает сброс (reset) системы с целью возобновить нормальное функционирование.

[kswapd0] – древняя, но почтенная система управления виртуальной памятью.

[kthrotld] – контролирует пропускную способность посредством “удушения” запросов в соответствии с приоритетами.

[ipv6_addrconf] – отвечает за конфигурацию очередей IPv6.

[kworker/u2:1-events_unbound] – тот же процесс, что и kworker.

[kstrp] – так называемый “парсер потоков”, он необходим для разбора и анализа сообщений на прикладном уровне.

[ata_sff] – процесс для использования устаревших ide/pata устройств.

[scsi_eh_0] – процесс обрабатывает ошибки, которые могут появляться при подключении дисков, определяемых как scsi-устройства.

[jbd2/vda1-8] – процесс, отвечающий за обновление журнала файловой системы.

[ttm_swap] – процесс, отвечающий за использование GPU памяти.

Модули Systemd

Чтобы понять разницу между всеми этими “модулями” или “юнитами”, надо вспомнить, что systemd, как и все остальное в Linux, является файлом. И все systemd-сущности являются разными файлами (например systemd службы хранят конфигурации в файле с расширением .service, а сокеты –  .socket и т.д.). Systemd, если рассматривать как демон, управляет другими демонами и является первым демоном, который запускается во время загрузки ОС.

1. Service unit (служба .service) –  подразумевается самая обычная системная служба

2. Target unit (цель .target) – это юнит, используемый для группировки юнитов по зависимостям. Они выполняют ту же функцию, что и runlevels (уровни запуска), но принцип работы отличается. Посмотреть список юнитов типа “цель” можно следующей командой: systemctl list-units –type=target

3. Mount unit (точка монтирования .mount) – надстройка systemd, используемая для манипуляций точками монтирования на уровне генерации unit-файлов

4. Automount unit (точка автомонтирования .automount) – похожа на mount unit, но позволяет монтировать ФС только тогда, когда вы действительно хотите обратиться к точке монтирования, например чтобы скопировать какой-нибудь файл

5. Device unit (устройство .device) – юнит для управления девайсами, как определено в sysfs/udev (udev – утилита для управления устройствами). При запуске ОС systemd динамично создает юниты устройств для всех кернел-девайсов, которые помечены udev-тегом “systemd” – к ним чаще всего относятся блочные и сетевые устройства, и некоторые другие. Посмотреть список юнитов можно как и остальные: systemctl list-units –type=device

6. Path unit (файловый путь .path) – используется для наблюдения за файлом или директорий на предмет наличия определенного события, и если это событие происходит, то выполняется запуск service-юнита с таким же именем (если не указан другой). Тут стоит привести более конкретный пример, чтобы было понятнее:

Например есть такой юнит:

[Unit] 
Description=Smotrim za izmeneniyami v faile
[Path] 
PathChanged=/home/some_path/some_file 
Unit=changes_applied.service 
[Install] 
WantedBy=multi-user.target

Он описывает следующее:

Вы наблюдаете за файлом /home/some_path/some_file, и если он меняется, то запускается сервис, определенный в Unit=changes_applied.service.

7. Scope unit (не создаются через конфигурационные файлы, только программно через bus-интерфейсы systemd, имеют расширение .scope) – если говорить просто и коротко – нужен для создания контрольных групп (cgroups) для дерева процессов.

8. Slice unit (слайс имеет расширение .slice) – это юнит, использующий концепт ограниченного потребления ресурсов группой процессов. Тесно связан с cgroups. Юниты, управляющие процессами (обычно это .service и .scope юниты), могут быть назначены конкретному слайсу. И этому слайсу могут быть назначены лимиты потребления ресурсов для всех процессов всех юнитов, собранном в этом слайсе.

9. Snapshot unit (снимок .snapshot) – не конфигурируется через файл. Сам файл.snapshot ссылается на конкретный снимок systemd-состояния. Снимок создается динамично через systemctl snapshot. Снимок работает как сохраненное состояния systemd менеджера.

10. Socket unit (гнездо, сокет с расширением .socket) – обычный сокет, только в виде systemd-юнита. Для каждого сокет-юнита должен быть создан service-юнит, работающий с данным сокетом. Самый обычный сокет выглядит так:

a. [Unit] Description = Socket for echoing 
b. [Socket] ListenStream = 1111 
c. Accept = yes 
d. [Install] WantedBy = sockets.target
e. Юнит будет слушать 1111 порт, вы также можете указать и полный IP-адреc.

11. Swap unit (файл подкачки или раздел подкачки .swap) – управляет swap-файлами/разделами.

12. Timer unit (таймер .timer) – юнит, позволяющий контролировать сервисы или события, можно назвать его аналогом крона. Имеет поддержку календарных и регулярных событий. Бывают таймеры реального времени (OnCalendar= …) и монотонные таймеры (OnTypeSec= …), где Type – тип события (загрузка OnBootSec, активация юнита OnUnitActiveSec и т.д.)

systemctl – основной инструмент управления systemd.

Синтаксис:
Запуск, останов и просмотр статуса какой-либо службы  происходит посредством команд:

Примечание: в debian 10 команда без d, просто cron

systemctl start crond
systemctl stop crond
systemctl status crond


Перезапуск командой

systemctl restart crond


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

systemctl enable crond


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

systemctl disable crond


Можно также “замаскировать” сервис – то есть, лишить модуль возможности запускаться.

systemctl mask crond


Посмотреть дерево зависимостей – от каких процессов зависит cron.

systemctl list-dependencies crond

Список всех имеющихся модулей в системе покажет команда systemctl list-units

Рассмотрим отдельно модуль файла планировщика cron

[Unit] – директива, указывающая systemd, что эта часть файла является описательной, указывает параметры запуска и т.д.

Description=Regular background program processing daemon – описание юнита

Documentation=man:cron(8) – указание пути к документации

After=remote-fs.target nss-user-lookup.target – параметр, указывающий, что данный юнит должен запускаться после (after) модуля, указанного справа от “=”.

[Service]  блок конфигурации юнита

EnvironmentFile=/etc/default/cron – файл окружения

ExecStart=/usr/sbin/cron -f $EXTRA_OPTS – команда для старта

IgnoreSIGPIPE=false – параметр для игнорирования SIGPIPE сигнала (SIGPIPE — сигнал, посылаемый процессу при записи в соединение (пайп, сокет) при отсутствии или обрыве соединения с другой (читающей) стороной.)

KillMode=process – указывает, как “убивать” процесс.

Restart=on-failure – указание, когда необходимо перезагружать сервис.

[Install] – блок, описывающий информацию об установке юнита (нужен для команд systemctl enable/disable)

WantedBy=multi-user.target – данная директива, является наиболее распространенным способом определения того, как юнит должен быть включен, от чего зависит.

Cинтаксис планировщика Крон:

минута, час, день месяца, месяц, день недели (0 = воскресенье)
запускаемая команда


https://crontab.guru/ – удобный интструмент для создания заданий

Типы разметки дисков

MBR (master boot record, основная загрузочная запись) – загрузочный сектор в начале диска. Этот сектор содержит загрузчики и данные о разделах диска. 

GPT (GUID Partition Table) – Современный и актуальный. Каждому разделу на вашем диске присваивается «уникальный глобальный идентификатор» (GUID). отличие от MBR в том, что нет ограничений на количество создаваемых разделов (до 128) и их размер.

systemd – актуальная и широко используемая система инициализации и управления службами в Linux.

PS – утилита,, отображающая запущенные на данный момент процессы. Эта утилита выводит “снимок” состояния процессов.

У утилиты ps много разных ключей для манипуляции выводом информации, но полезными для ежедневной работы вы найдете не так много. Рассмотрим примеры с выводами и объяснениями:

root# ps
PID TTY          TIME CMD
1883 pts/0    00:00:00 bash
1888 pts/0    00:00:00 ps

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

root# ps -A

или

root# ps -e

Выводит список всех активных процессов на Linux-системе в generic (Unix/Linux) формате. Та же самая команда, но вывод в BSD формате: ps au или ps aux (в зависимости оттого, какой вывод вам нужен).

root# ps -x

Вывод всех процессов, владельцем которых является ваш пользователь (из под которого выполняется команда).

root# ps -fu root

или

root# ps -fU 0

Вывод процессов конкретного пользователя по его имени или ID.

root# ps -e --forest

Вывод процессов в виде дерева (какие процессы от кого наследуются).

root# ps -eo pid,user,cmd

Вывод процессов в кастомном формате вывода, где будут три колонки: ID процесса, пользователь и команда.

OOM killer ([oom_reaper])
Он призван решать проблему нехватки памяти и как вы можете заменить из названия, весьма радикальными методами – “убийством” (SIGKILL) процессов, которые больше все тратят ресурсы оперативной памяти, когда она закончилась.

OOM killer работает, используя “рейтинг плохишей” (в оригинале: badness score). Каждому процессу он назначает очки от 0 до 1000 в зависимости от потребления оперативной памяти, после чего “убивает” процесс с наибольшим количеством очков. При необходимости, процесс можно защитить от убийцы, выставив минимальный рейтинг, но это чревато паникой ядра и последующим зависанием сервера.

Как узнать информацию о машине и ОС Версия ядра и операционной системы

Проверить, какой версии ядро Linux вашего сервера, можно с помощью команды: 

uname -r

Эта же команда в подробном режиме покажет всю информацию: 

  • имя ядра;
  • имя сервера (hostname);
  • релиз ядра;
  • версию ядра;
  • тип процессора;
  • вид операционной системы.
uname -a

Альтернативный способ — посмотреть содержимое файла /proc/version:

cat /proc/version

Узнать версию непосредственно установленного дистрибутива можно из конфигурационных файлов системы:

cat /etc/os-release

Либо через файл /etc/issue — он содержит информацию о системе, которая отображается в сообщении после авторизации на сервере:

Оборудование

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

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

lshw -short

В выводе можно выделить информацию о процессоре, количестве ядер, количестве оперативной памяти, размере диска.

Аналогичный инструмент есть и для просмотра данных процессора: 

lscpu

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

Посмотреть диск и его разделы так же просто:

lsblk -a

Команда отображает все блочные устройства, подключенные к серверу. По умолчанию в эту категорию попадает диск сервера и его разделы. Есть много других способов посмотреть, какой объём диска или разделы диска доступны на сервере, этот один из самых простых.

Если команды lshwlscpulsblk вам недоступны (в некоторых системах они не установлены по умолчанию), можно обратиться напрямую к файлам, из которых они собирают информацию — они хранятся в директории /proc

Например, следующая команда выведет информацию о процессоре:

cat /proc/cpuinfo

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

fdisk -l

Также можно использовать dmidecode — этот инструмент выводит информацию о железе, зашитую в BIOS, в человекочитаемом виде. Правда, при использовании на виртуальных серверах полезной информации будет крайне мало.

Например, так можно вывести информацию о системе:

dmidecode -t system

Проверить, какой версии ядро Linux вашего сервера, можно с помощью команды: 

uname -r

Эта же команда в подробном режиме покажет всю информацию: 

  • имя ядра;
  • имя сервера (hostname);
  • релиз ядра;
  • версию ядра;
  • тип процессора;
  • вид операционной системы.
uname -a

Альтернативный способ — посмотреть содержимое файла /proc/version:

cat /proc/version

Узнать версию непосредственно установленного дистрибутива можно из конфигурационных файлов системы:

cat /etc/os-release

Либо через файл /etc/issue — он содержит информацию о системе, которая отображается в сообщении после авторизации на сервере:

Оборудование

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

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

lshw -short

В выводе можно выделить информацию о процессоре, количестве ядер, количестве оперативной памяти, размере диска.

Аналогичный инструмент есть и для просмотра данных процессора: 

lscpu

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

Посмотреть диск и его разделы так же просто:

lsblk -a

Команда отображает все блочные устройства, подключенные к серверу. По умолчанию в эту категорию попадает диск сервера и его разделы. Есть много других способов посмотреть, какой объём диска или разделы диска доступны на сервере, этот один из самых простых.

Если команды lshwlscpulsblk вам недоступны (в некоторых системах они не установлены по умолчанию), можно обратиться напрямую к файлам, из которых они собирают информацию — они хранятся в директории /proc

Например, следующая команда выведет информацию о процессоре:

cat /proc/cpuinfo

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

fdisk -l

Также можно использовать dmidecode — этот инструмент выводит информацию о железе, зашитую в BIOS, в человекочитаемом виде. Правда, при использовании на виртуальных серверах полезной информации будет крайне мало.

Например, так можно вывести информацию о системе:

dmidecode -t system

Выполнение в фоновом режиме

Некоторые команды могут временно блокировать или усложнять работу в терминале. Например, когда запущенный процесс долго выполняется или выводит в консоль большие объёмы не особо полезного текста. Такие команды можно запускать в фоновом режиме. Тогда система будет выполнять их «на заднем плане», а вы продолжите работать и не будете ждать выполнения очередной операции.

Чтобы запустить команду в фоновом режиме, достаточно добавить в конце знак «&»:

sleep 3600 &

sleep — команда «И пусть весь мир подождёт». Включает паузу на заданный промежуток времени в секундах.

Если вам нужно переместить на задний план активный процесс, тогда нужно приостановить процесс его выполнения сочетанием Ctrl + Z и ввести в консоли команду bg:

sleep 3600

[приостановка процесса сочетанием Ctrl + Z]

bg

Вывести список команд, запущенных в фоновом режиме, можно с помощью команды 

jobs -l

Важно помнить, что фоновый режим привязан к сессии — при выходе из терминала все процессы, запущенные через него, будут прерваны. Этого можно избежать, выполнив нужную команду через nohup:

nohup sleep 3600 &

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

disown -h %ID

После выхода из терминала задание будет удалено из списка jobs, но продолжит выполняться на фоне. Проверить его выполнение можно, отобразив список всех запущенных процессов командой ps aux:

Команды, запущенные в фоновом режиме, при наличии ошибок будут отправлять их в терминал — что не всегда удобно. Можно перенаправить вывод ошибок. В следующем примере ошибки вместо вывода в терминал будут записаны в файл error.log:

sleep 3600 2>>error.log &

Вернуть процесс на передний план можно, введя команду fg. Если процессов несколько, потребуется указать идентификатор задачи ID. Его можно посмотреть в выводе команды jobs -l (число в квадратных скобках).

fg %ID

Отмена процесса, запущенного в фоновом режиме, выполняется с помощью следующей команды:

kill PID

Где PID — ID процесса, указанный в выводе jobs -l. Если процесс завис и не реагирует, можно использовать более грубый вариант:

kill -KILL PID

Запуск исполняемых bash-скриптов

Чтобы запустить скрипт script.sh на сервере, нужно выполнить два шага: 

  1. Настроить права на запуск файла для пользователей:
    chmod +x ./script.sh
  2. Запустить скрипт. Если вы находитесь в той же директории, где лежит скрипт, достаточно вызвать его по имени:
    ./script.shВ некоторых случаях нужно использовать команду sh либо указать путь к исполняемому файлу командной оболочки:
    sh ./script.shлибо
    /bin/bash ./script.shЕсли вы находитесь в другой директории, для запуска нужно указать полный путь к скрипту. 

Чтобы иметь возможность запускать скрипт из любого места на сервере одной простой командой, можно создать для него алиас — короткую команду (псевдоним), которая будет ассоциироваться системой с полным вызовом скрипта.

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

Создать свой постоянный алиас можно с помощью файла .bashrc, размещённого в домашнем каталоге вашего пользователя. Нужно открыть его для редактирования:

vi ~/.bashrc

В соответствующем разделе нужно добавить ваш алиас в следующем формате:

alias [короткая команда]='[исходная команда]'

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

alias myScript='sh /путь/к/скрипту/script.sh'

Чтобы после добавления алиас сразу стал доступен, предварительно нужно обновить командную оболочку: 

source ~/.bashrc

После этого вы сможете вызывать ваш скрипт с помощью короткой команды.

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

Запуск нескольких команд за раз

 

Командная строка имеет несколько инструментов, которые позволяют запускать сразу несколько операций, управлять порядком их выполнения и выводом.

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

echo -n "Hello, "; echo "World!"

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

echo -n "Hello, " && echo "World!"

Оператор || действует наоборот — запускает следующую операцию при условии, что первая не выполнилась или завершилась с ошибкой.

wrongCommand || echo "Что-то пошло не так!"

Также можно запускать команды параллельно. Для этого в конец команд добавляется символ &, каждая команда заключается в круглые скобки, которые между тем разделяются между собой точкой с запятой:

(echo "Кто сказал, что убить двух зайцев" &); (echo "одним махом нельзя?" &)

Горячие клавиши в shell Сочетания с клавишей Ctrl

Ctrl + a – переход в начало строки (cisco, csh, zsh)

Ctrl + b – переход на 1 символ назад (cisco, csh, zsh)

Ctrl + c – посылает программе SIGINT. Обычно, прерывает текущее задание (csh, zsh)

Ctrl + d – удаляет символ под курсором (аналог delete) (cisco, csh, zsh)

Ctrl + e – переход к концу строки (cisco, csh, zsh)

Ctrl + f – переход на 1 символ вперёд (cisco, csh, zsh)

Ctrl + k – удаляет всё, до конца строки (EOL, а не на экране!) (cisco, csh, zsh)

Ctrl + l – очищает экран. Аналог команды clear. (csh, zsh)

Ctrl + r – поиск по истории. Повторение поиска (листание результатов поиска). То есть инкрементальный поиск. (zsh)

Ctrl + j – прекращает поиск и позволяет отредактировать найденную команду. Если поиск не производился, то аналогично нажатию return. (в zsh выполняет команду)

Ctrl + t – меняет символ под курсором на предыдущий. Или, если хотите, тянет предыдущий символ к концу строки. (cisco, csh, zsh)

Ctrl + u – удаляет все символы слева от курсора до начала строки. (cisco, в csh, zsh удаляет всю строку)

Ctrl + w – удаляет символы слева от курсора до начала слова. (cisco, csh, zsh)

Ctrl + xx – переходит от текущей позиции курса в начало строки и обратно. На циске работает аналогично ctrl + u. (csh)

Ctrl + x @ – показывает возможные дополнения имени хоста (имена берутся из /etc/hosts)

Ctrl + z – suspend’ит текущую задачу (csh, zsh)

Ctrl + x; Ctrl + e – открывает $EDITOR для изменения введённой строки. После сохранения изменений, команда отправляется на исполнение. Если переменная не задана, то открывается системный текстовый редактор (для линукса это, зачастую, nano)

 Сочетания с клавишей Alt

Alt + < – переход к первой команде в истории команд (zsh)

Alt + > – переход к последней команде в истории

Alt +? – показывает список возможных дополнений команды(аналогично tab-tab) (в csh, zsh аналог which string)

Alt + * – вставляет все возможные дополнений команды в строку команд

Alt + / – пытается дополнить имя файла (аналогично табуляции)

Alt +. – вставляет последний аргумент предыдущей команды (аналог !$, только не надо делать :p, чтобы проверить )

Alt + b – сдвигает курсор влево на 1 слово (cisco, csh, zsh)

Alt + c – делает букву под курсором большой, а остальные, до конца слова, маленькими. (cisco, csh, zsh)

Alt + d – удаляет символы с текущей позиции курсора и до конца слова. (cisco, csh, zsh)

Alt + f – передвигает курсор на одно слово вперёд (cisco, csh, zsh)

Alt + l – делает все буквы с текущей позиции курсора и до конца слова маленькими (cisco, csh, zsh)

Alt + t – меняет местами слова под курсором и предыдущее (zsh)

Alt + u – переводит буквы с текущей позиции курсора и до конца слова в верхний регистр (cisco, csh, zsh)

Alt + back-space – удаляет символы с текущей позиции курсора до начала слова (cisco, csh, zsh)

 
Сочетания с двойным нажатием клавиши табуляции (Tab) (обозначено как «2Т»)

Если нажать при пустой строке — выведет список всех доступных команд

(string)2T – выведет список возможных дополнений

(dir)2T – покажет подпапки папки dir

*2T – покажет подпапки исключая скрытые (имена которых начинаются с точки)

~2T – выведет всех пользователей из /etc/passwd. Дополнив имя пользователя можно перейти в его домашний каталог. Например ~oxpa/ — домашний каталог пользователя oxpa

$2T – выводит список дополнений для системных переменных

@2T – дополняет имена хостов содержащимися в /etc/hosts

=2T – листинг текущей директории, аналогичный ls.