### Материал для подготовки к RHCSA  
  
#### ls  
`ls` - list, просмотр содержимого каталогов  
```  
ls опции /путь/к/папке  
```  
-l - выводить подробный список, в котором будет отображаться владелец, группа, дата создания, размер и другие параметры;  
-a - отображать все файлы, включая скрытые, это те, перед именем которых стоит точка;  
```bash  
[da2001@co1 ~]$ ls -l  
total 4  
-rw-rw-r--. 2 da2001 da2001  0 May 24 09:59  connectedfile  
lrwxrwxrwx. 1 da2001 da2001 10 May 24 09:59  hosts -> /etc/hosts  
-rw-rw-r--. 2 da2001 da2001  0 May 24 09:59  newfile  
drwxrwxr-x. 2 da2001 da2001  6 May 24 08:57  oldfiles  
lrwxrwxrwx. 1 da2001 da2001 11 May 24 09:58  passwd -> /etc/passwd  
-rw-rw-r--. 1 da2001 da2001  0 May 24 08:55  unhidden  
drwxr-xr-x. 2 da2001 da2001  6 May 16 09:17  Видео  
```  
  
***  
  
#### cat / tac  
`cat` - catenate, вывод содержимого файла  
`tac` - вывод содержимого файла с обратной сортировкой строк  
```  
cat опции файл1 файл2 ...  
```  
-b - нумеровать только непустые строки;  
-E - показывать символ $ в конце каждой строки;  
-n - нумеровать все строки;  
-s - удалять пустые повторяющиеся строки;  
-T - отображать табуляции в виде ^I.  
```bash  
[da2001@co1 ~]$ cat welcome   
Добро пожаловать в Linux!  
Развивайтесь.  
```  
```bash  
[da2001@co1 ~]$ tac welcome   
Развивайтесь.  
Добро пожаловать в Linux!  
```  
  
***  
  
#### cd  
`cd` - change directory, смена рабочей директории  
```  
cd опции папка_назначения  
```  
```bash  
[da2001@co1 ~]$ cd /var/log  
[da2001@co1 log]$   
```  
  
***  
  
#### chmod  
`chmod` - change mode, изменение прав доступа к файлу/папке  
```  
chmod опции права /путь/к/файлу  
```  
**Три варианта записи прав пользователя**  
```  
двоичная    восьмеричная    символьная  права на файл          права на каталог  
000         0               ---         нет                    нет  
001         1               --x         выполнение             чтение файлов и их свойств  
010         2               -w-         запись                 нет  
011         3               -wx         запись и выполнение    всё, кроме чтения списка файлов  
100         4               r--         чтение                 чтение имён файлов  
101         5               r-x         чтение и выполнение    доступ на чтение  
110         6               rw-         чтение и запись        чтение имён файлов  
111         7               rwx         все права              все права  
```  
```  
Reference   Class   Описание  
u           user    Владелец файла  
g           group   Пользователи, входящие в группу владельца файла  
o           others  Остальные пользователи  
a           all     Все пользователи (или ugo)  
```  
```  
Operator    Описание  
+           добавить определённые права  
-           удалить определённые права  
=           установить определённые права  
```  
```  
Mode    Name          Описание  
r       read          чтение файла или содержимого каталога  
w       write         запись в файл или в каталог  
x       execute       выполнение файла или чтение содержимого каталога  
X       special       execute	выполнение, если файл является каталогом или уже имеет право на выполнение для какого-нибудь пользователя  
s       setuid/gid    установленные атрибуты SUID или SGID позволяют запускать файл на выполнение с правами владельца файла или группы соответственно  
t       sticky        устанавливая t-бит на каталог, мы меняем это правило таким образом, что удалить файл может только владелец этого файла  
```  
  
Разрешение | Применяется к файлам       | Применяется к каталогам  
---------- | -------------------------- | -----------------------  
Read       | Открыть файл               | Просмотр содержимого каталога  
Write      | Изменить содержимое файла  | Создавать и удалять файлы  
Execute    | Выполнить программный файл | Перейти в каталог  
  
Разрешение | Числовое представление  
---------- | :---------------------:  
Read       |          4  
Write      |          2  
Execute    |          1  
  
**Примеры**  
Установить права «rwxr-rx-x» (0755) для файла:  
`chmod u=rwx,g=rx,o=x filename`  
  
Установить права на выполнение для владельца файла, удалить права на выполнение у группы, удалить права на запись и выполнение у остальных пользователей:  
`chmod u+x,g-x,o-wx filename`  
  
Установить рекурсивно права на чтение для всех пользователей:  
`chmod -R a+r directory`  
  
Рекурсивно удалить атрибуты SUID и SGID:  
`chmod -R u-s,g-s directory`  
  
**Особенности**  
Значениями по умолчанию являются:  
для файлов: `644 (-rw-r--r--)`  
для каталогов: `755 (drwxr-xr-x)`  
_Значения разные для файлов и каталогов потому, что флаг «выполнения» по-разному действует на файлы и каталоги. Для обычных файлов «выполнение» означает открытие файлов, для исполняемых файлов — их запуск, а для каталогов — просмотр содержимого._  
  
Следующая команда выполнит рекурсивное применение правил для всех файлов в каталоге «/home/test», а также для всех файлов во всех подкаталогах:  
```bash  
find /home/test -type f -exec chmod 644 {} \;  
```  
Следующая команда выполнит рекурсивное применение правил для всех каталогов в каталоге «/home/test», а также для всех каталогов во всех подкаталогах:  
```bash  
find /home/test -type d -exec chmod 755 {} \;  
```  
Того же результата можно добиться и без использования find (обратите внимание на заглавную X):  
```bash  
chmod -R go=rX,u=rwX /home/test  
```  
Установить для file1 разрешения аналогичные file2  
```bash  
chmod --reference file1 file2  
```  
  
***  
  
#### SUID, SGID и Sticky Bit  
Разрешение | Числовое значение | Относительное значение | Применительно к файлам | Применительно к каталогам  
---------- | :---------------: | :--------------------: | ---------------------- | -------------------------  
SUID       |         4         |          u+s           | пользователь запускает файл с разрешениями владельца файла | не имеет смысла  
SGID       |         2         |          g+s           | пользователь запускает файл с разрешениями владельца группы | Файлы, созданные в каталоге, получают одного и того же владельца группы  
Sticky bit |         1         |           +t           | не имеет смысла        | запрещает пользователям удалять файлы других пользователей, даже если есть права на запись  
  
Установка SGID для каталога sales (группа sales) позволит создавать все новые файлы, группой которых будет группа sales, а назначение Sticky Bit запретит пользователям удалять файлы, созданные другими пользователями, даже если есть права на запись  
```bash  
chmod g+s,o+t /data/sales  
```  
  
***  
  
#### chown  
`chown` - change owner, утилита, изменяющая владельца и/или группу для указанных файлов.  
```  
chown [-cfhvR] [--dereference] [--reference=rfile] пользователь[:группа] файл…  
```  
-c, --changes            Подробно описывать действие для каждого файла, владелец которого действительно изменяется.  
-f, --silent, --quiet    Не выдавать сообщения об ошибках для файлов, чей владелец не может быть изменён.  
-h, --no-dereference     Работать с самими символьными ссылками, а не с файлами, на которые они указывают. Данная опция доступна, только если имеется системный вызов lchown.  
-R, --recursive          Рекурсивное изменение владельца каталогов и их содержимого.  
-v, --verbose            Подробное описание действия (или отсутствия действия) для каждого файла.  
--dereference            Изменить владельца файла, на который указывает символьная ссылка, вместо самой символьной ссылки.  
--reference=rfile        Изменить владельца файла на того, который является владельцем файла.  
  
**Примеры использования**  
Изменить владельца (owner) для `/var/run/httpd.pid` на `root`  
```bash  
chown root /var/run/httpd.pid  
```  
Поменять владельца для `strace.log` в `rob` и идентификатор группы в `developers`  
```bash  
chown rob:developers strace.log  
```  
*разделителем также может быть точка*  
Поменять имя владельца для `/tmp` и `/var/tmp` на `nobody` + поменять группу для `/tmp` и `/var/tmp` на `nogroup`  
```bash  
chown nobody.nogroup /tmp /var/tmp  
```  
Поменять идентификатор группы на `newgroup` для `/home`  
```bash  
chown :newgroup /home  
```  
или  
```bash  
chown .newgroup /home  
```  
Поменять имя владельца для `base` на `us` и выполнить это рекурсивно, т.е. всех вложенных в каталог `base` файлов (-R).  
```bash  
chown -R us base  
```  
Поменять владельца для `noodlefrytasticy` на `mein`  
```bash  
chown mein noodlefrytasticy  
```  
  
***  
  
#### newgrp  
`newgrp` - изменение основной группы пользователя в текущей сессии  
*при создании нового файла/каталога он создаётся от имени пользователя и основной группы этого пользоватля*  
```bash  
[da2001@co1 mydir]$ touch file  
[da2001@co1 mydir]$ ll  
total 0  
-rw-rw-r--. 1 da2001 da2001 0 Jun  8 08:43 file  
```  
*группы, в которых состоит пользователь*  
```bash  
[da2001@co1 ~]$ groups  
da2001 wheel sales  
```  
Чтобы все новые файлы в текущей сессии создавались от группы sales  
```bash  
[da2001@co1 mydir]$ newgrp sales  
[da2001@co1 mydir]$ touch file2  
[da2001@co1 mydir]$ ll  
total 0  
-rw-rw-r--. 1 da2001 da2001 0 Jun  8 08:43 file  
-rw-r--r--. 1 da2001 sales  0 Jun  8 08:50 file2  
```  
  
  
***  
  
#### cp  
`cp` - copy, копировать файлы и директории  
```  
$ cp опции файл-источник файл-приемник  
```  
или  
```  
$ cp опции файл-источник директория-приемник/  
```  
--attributes-only - не копировать содержимое файла, а только флаги доступа и владельца;  
-f, --force - перезаписывать существующие файлы;  
-i, --interactive - спрашивать, нужно ли перезаписывать существующие файлы;  
-L - копировать не символические ссылки, а то, на что они указывают;  
-n - не перезаписывать существующие файлы;  
-P - не следовать символическим ссылкам;  
-r - копировать папку Linux рекурсивно;  
-s - не выполнять копирование файлов в Linux, а создавать символические ссылки;  
-u - скопировать файл, только если он был изменён;  
-x - не выходить за пределы этой файловой системы;  
-p - сохранять владельца, временные метки и флаги доступа при копировании;  
-t - считать файл-приемник директорией и копировать файл-источник в эту директорию.  
  
***  
  
#### dd  
`dd` - dataset definition, копирование побайтово  
https://habr.com/ru/post/117050/  
больше примеров в файле `Образ_SD_dd.md`  
```  
dd if=источник_копирования of=место_назначения параметры  
```  
bs - указывает сколько байт читать и записывать за один раз;  
cbs - сколько байт нужно записывать за один раз;  
count - скопировать указанное количество блоков, размер одного блока указывается в параметре bs;  
conv - применить фильтры к потоку данных;  
ibs - читать указанное количество байт за раз;  
obs - записывать указанное количество байт за раз;  
seek - пропустить указанное количество байт в начале устройства для чтения;  
skip - пропустить указанное количество байт в начале устройства вывода;  
status - указывает насколько подробным нужно сделать вывод;  
iflag, oflag - позволяет задать дополнительные флаги работы для устройства ввода и вывода, основные из них: nocache, nofollow.  
  
**Примеры**  
Создание образа диска:  
```bash  
dd if=/dev/cdrom of=image.iso  
```  
игнорировать ошибки чтения  
```bash  
dd if=/dev/cdrom of=image.iso conv=noerror  
```  
создать образ диска и отправить по ssh, заранее нужно настроить доступ по ключам  
```bash  
dd if=/dev/DEVICE | ssh user@host «dd of=/home/user/DEVICE.img»  
```  
записать на диск 0  
```bash  
dd if=/dev/zero of=/dev/DEVICE  
```  
создать файл с записанными 0  
```bash  
dd if=/dev/zero of=zerofile bs=1M count=100  
```  
  
***  
  
#### df  
`df` - disk free, показать свободное место на диске  
```  
df опции устройство  
```  
-a, --all - отобразить все файловые системы, в том числе виртуальные, псевдо и недоступные;  
-B - изменить размер одного блока перед выводом данных, например, можно использовать BM, чтобы вывести все данные в мегабайтах;  
-h - выводить размеры в читаемом виде, в мегабайтах или гигабайтах;  
-H - выводить все размеры в гигабайтах;  
-i - выводить информацию об inode;  
-k - выводить размеры в килобайтах;  
--output - использовать специальный формат вывода, если не задано, выводит все поля. Доступны такие варианты: `source`, `fstype`, `itotal`, `iused`, `iavail`, `ipcent`, `size`, `used`, `avail`, `pcent`, `file` и `target`;  
-P - использовать формат вывода POSIX;  
--total - выводить всю информацию про использованное и доступное место;  
-t, --type - выводить информацию только про указанные файловые системы;  
-x - выводить информацию обо всех, кроме указанных файловых систем;  
```bash  
df -h  
```  
  
***  
  
#### diff  
`diff` - сравнение текстовых файлов  
https://pingvinus.ru/note/compare-files-diff-in-linux  
```  
diff опции файл1 файл2  
```  
-q - выводить только отличия файлов;  
-s - выводить только совпадающие части;  
-с - выводить нужное количество строк после совпадений;  
-u - выводить только нужное количество строк после отличий;  
-y - выводить в две колонки;  
-e - вывод в формате ed скрипта;  
-n - вывод в формате RCS;  
-a - сравнивать файлы как текстовые, даже если они не текстовые;  
-t - заменить табуляции на пробелы в выводе;  
-l - разделить на страницы и добавить поддержку листания;  
-r - рекурсивное сравнение папок;  
-i - игнорировать регистр;  
-E - игнорировать изменения в табуляциях;  
-Z - не учитывать пробелы в конце строки;  
-b - не учитывать пробелы;  
-B - не учитывать пустые строки.  
**Примеры**  
Сравнение двух текстовых файлов  
```bash  
diff myfile1 myfile2  
```  
Перенаправление результата сравнения в файл  
```bash  
diff myfile1 myfile2 > changes.diff  
```  
Сравнение директорий, содержащих текстовые файлы  
```bash  
diff -r mydir1 mydir2 > changes.diff  
```  
Исключить файлы из сравнения  
Создадим файл `excludeFiles` и запишем в него шаблоны и названия файлов, которые мы не должны сравнивать. Например, содержимое `excludeFiles` может иметь вид:  
```  
*.o  
ChangeLog*  
*.bak  
*.exe  
```  
```bash  
diff -r -X excludeFiles mydir1 mydir2 > changes.diff  
```  
  
***  
  
#### du  
`du` - disk usage, отображение использования диска  
```  
$ du опции /путь/к/папке  
```  
-a, --all - выводить размер для всех файлов, а не только для директорий, по умолчанию размер выводится только для папок;  
-B, --block-size - указать единицы вывода размера, доступно: K,M,G,T,P,E,Z,Y для 1024 и KB, MB и так далее для 1000;  
-c, --total - выводить в конце общий размер всех папок;  
-d, --max-depth - максимальная глубина вложенности директорий;  
-h, --human-readable - выводить размер в единицах измерения удобных для человека;  
--inodes - выводить информацию об использованию inode;  
-L, --dereference - следовать по всем символическим ссылкам;  
-l, --count-links - учитывать размер файла несколько раз для жестких ссылок;  
-P, --no-dereference - не следовать по символическим ссылкам, это поведение используется по умолчанию;  
-S, --separate-dirs - не включать размер подпапок в размер папки;  
--si - выводить размер файлов и папок в системе си, используется 1000 вместо 1024;  
-s, --summarize - выводить только общий размер;  
-t, --threshold - не учитывать файлы и папки с размером меньше указанного;  
--time - отображать время последней модификации для файла или папки, вместо времени модификации можно выводить такие метки: atime, access, use, ctime;  
-X, --exclude - исключить файлы из подсчёта;  
-x, --one-file-system - пропускать примонтированные файловые системы;  
--version - вывести версию утилиты.  
```bash  
du -h /var  
```  
  
***  
  
#### echo  
`echo` - утилита bash, для вывода данных  
```  
echo опции строка  
```  
-n - не выводить перевод строки;    
-e - включить поддержку вывода Escape последовательностей;    
-E - отключить интерпретацию Escape последовательностей.    
  
если включена опция -e, можно использовать такие Escape последовательности для вставки специальных символов:  
  
\c - удалить перевод строки;    
\t - горизонтальная табуляция;    
\v - вертикальная табуляция;    
\b - удалить предыдущий символ;    
\n - перевод строки;    
\r - символ возврата каретки в начало строки.    
**Примеры**  
```bash  
echo Linux Open Source Software Technologies  
```  
```bash  
echo -e "Linux \nopen \nsource \nsoftware \ntechnologies"  
```  
  
***  
  
#### file  
`file` - отобразить тип файла  
```bash  
da2001@Metromint:~$ file vim.pdf   
vim.pdf: PDF document, version 1.5  
  
da2001@Metromint:~$ file vim.docx   
vim.docx: Microsoft Word 2007+  
  
da2001@Metromint:~$ file явки  
явки: UTF-8 Unicode text  
```  
  
***  
  
#### find  
`find` - поиск файлов по критериям с возможностью выполнения определённых действий с результатами поиска  
https://habr.com/ru/company/alexhost/blog/525394/  
https://losst.ru/komanda-find-v-linux  
```  
find [папка] [параметры] критерий шаблон [действие]  
```  
папка - каталог в котором будем искать  
параметры - дополнительные параметры, например, глубина поиска, и т д  
критерий - по какому критерию будем искать: имя, дата создания, права, владелец и т д.  
шаблон - непосредственно значение по которому будем отбирать файлы.  
**Основные параметры**  
-P          никогда не открывать символические ссылки  
-L          получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.  
-maxdepth   максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.  
-depth      искать сначала в текущем каталоге, а потом в подкаталогах  
-mount      искать файлы только в этой файловой системе.  
-version    показать версию утилиты find  
-print      выводить полные имена файлов  
-type f     искать только файлы  
-type d     поиск папки в Linux  
**Критерии поиска**  
-name - поиск файлов по имени  
-perm - поиск файлов в Linux по режиму доступа  
-user - поиск файлов по владельцу  
-group - поиск по группе  
-mtime - поиск по времени модификации файла  
-atime - поиск файлов по дате последнего чтения  
-nogroup - поиск файлов, не принадлежащих ни одной группе  
-nouser - поиск файлов без владельцев  
-newer - найти файлы новее чем указанный  
-size - поиск файлов в Linux по их размеру  
Найти все файлы txt в папке dir  
```bash  
find /dir -name '*.txt'  
```  
Найти все файлы пользователя da2001  
```bash  
find / -user da2001  
```  
Найти все файлы, принадлежащие группе sales  
```bash  
find / -group sales  
```  
  
***  
  
#### grep  
`grep` - global regular expression print, сортировка и фильтрация текста  
```  
$ grep [опции] шаблон [имя файла...]  
```  
или:  
```  
$ команда | grep [опции] шаблон  
```  
*`опции`* - это дополнительные параметры, с помощью которых указываются различные настройки поиска и вывода, например количество строк или режим инверсии.  
*`шаблон`* - это любая строка или регулярное выражение, по которому будет вестись поиск  
*`файл и команда`* - это то место, где будет вестись поиск. Как вы увидите дальше, grep позволяет искать в нескольких файлах и даже в каталоге, используя рекурсивный режим.  
возможность фильтровать стандартный вывод пригодится,например, когда нужно выбрать только ошибки из логов или найти PID процесса в многочисленном отчёте утилиты ps.  
  
**опции**  
-b - показывать номер блока перед строкой;  
-c - подсчитать количество вхождений шаблона;  
-h - не выводить имя файла в результатах поиска внутри файлов Linux;  
-i - не учитывать регистр;  
-r - рекурсивный поиск;  
-l - отобразить только имена файлов, в которых найден шаблон;  
-n - показывать номер строки в файле;  
-s - не показывать сообщения об ошибках;  
-v - инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон;  
-w - искать шаблон как слово, окружённое пробелами;  
-e - использовать регулярные выражения при поиске;  
-An - показать вхождение и n строк до него;  
-Bn - показать вхождение и n строк после него;  
-Cn - показать n строк до и после вхождения;  
**Примеры**  
`ls | grep 'My Documents'`  
  
`grep 'Class 1' Students.txt`  
Поиск по нескольким параметрам  
`grep -e 'Class 1' -e Todd Students.txt`  
Поиск слова word во всех файлах директории directory и вложенных директориях  
`grep -rn word /directory`  
  
***  
  
#### head  
`head` - head выводит начальные строки (по умолчанию — 10)  из одного или нескольких документов. Также она может показывать данные, которые передает на вывод другая утилита  
```  
head опции файл  
```  
опции — это параметр, который позволяет настраивать работу команды таким образом, чтобы результат соответствовал конкретным потребностям пользователя.  
Файл — это имя документа (или имена документов, если их несколько). Если это значение не задано либо вместо него стоит знак «-», команда будет брать данные из стандартного вывода.  
Чаще всего к команде head применяются такие опции:  
  
-c (--bytes) — позволяет задавать количество текста не в строках, а в байтах. При записи в виде --bytes=[-]NUM выводит на экран все содержимое файла, кроме NUM байт, расположенных в конце документа.  
-n (--lines) — показывает заданное количество строк вместо 10, которые выводятся по умолчанию. Если записать эту опцию в виде --lines=[-]NUM, будет показан весь текст кроме последних NUM строк.  
-q (--quiet, --silent) — выводит только текст, не добавляя к нему название файла.  
-v (--verbose) — перед текстом выводит название файла.  
-z (--zero-terminated) — символы перехода на новую строку заменяет символами завершения строк.  
**Примеры**  
вывести первые 10 строк файла  
```bash  
head file-name.txt  
```  
вывод из нескольких файлов  
```bash  
head file-name1.txt file-name2.txt  
```  
отобразить название файла в выводе  
```bash  
head -v file-name.txt  
```  
изменить количество строк в выводе  
```bash  
head -n 20 file-name.txt  
```  
  
***  
  
#### history  
`history` - история введенных команд  
**Примеры**  
Вывод всей истории команд  
`history`  
Вывод команды с номером 154  
`!154`  
Вывод истории с возможностью прокрутки  
`history | less`  
Последние 5 команд  
`history -5`  
Повторить последнюю команду  
`!!`  
полезно, если забыл указать `sudo`  
`sudo !!`  
сохранить список в файл `.bash_history`  
`history -w`  
дополнить файл сохранённой истории команд  
`history -a`  
очистить историю  
`history -c`  
удалить команды 102 131  
`history -d 102 131`  
  
***  
  
#### ln  
`ln` - link, создание ссылок на файлы  
Создать жесткую ссылку  
`ln target_file link_name`  
*жесткую ссылку можно создать на только на файл, который находится в этой же файловой системе*  
*жесткую ссылку нельзя создать на папку*  
Создать мягкую ссылку  
`ln -s target_file link_name`  
Обновить существующую мягкую ссылку  
`ln -sf new_file existing_soft_link`  
Показать оригинальный файл по цепочке ссылок  
`readlink -f soft_link`  
  
***  
  
#### locate  
`locate` - поиск файлов и каталогов по их именам  
Команда locate выполняет поиск заданного шаблона в файле базы данных, сгенерированном командой updatedb. Найденные результаты отображаются на экране, по одному на строку.  
  
Во время установки пакета mlocate создается задание cron, которое запускает команду updatedb каждые 24 часа. Это гарантирует, что база данных регулярно обновляется. Для получения дополнительной информации о работе cron проверьте файл `/etc/cron.daily/mlocate`.  
  
Базу данных можно обновить вручную  
`sudo updatedb`  
найти файл с именем .bashrc  
`locate .bashrc`  
Если список результатов длинный, можно направить вывод в команду less:  
`locate .bashrc | less`  
Найти все md файлы  
`locate *.md`  
Ограничить поиск 10 результатами  
`locate -n 10 *.py`  
Поиск без учёта регистра  
`locate -i readme.md`  
Отобразить количество найденных файлов  
`locate -c .bashrc`  
Чтобы отобразить только имена файлов, которые существуют в данный момент  
*По умолчанию locate не проверяет, существуют ли найденные файлы в файловой системе. Если файл был удалён после последнего обновления базы данных и он соответствует шаблону поиска, файл будет включен в результаты поиска.*  
`locate -e *.json`  
Поиск с применением регулярного выражения  
`locate -r -i "(\.mp4|\.avi)"`  
  
***  
  
#### mkdir  
`mkdir` - создание директорий  
`mkdir mydir`  
Создать несколько директорий  
`mkdir mydir1 mydir2 mydir3`  
Создание директории с указанием относительного пути  
`mkdir Downloads/torrents`  
Чтобы создать все директории, которые содержатся в пути, используется ключ -p:  
`mkdir -p subdir/somedir/mydir`  
Задать права доступа к папке при создании (синтаксис такой же как у chmod)  
`mkdir -m=765 mydir23`  
  
***  
  
#### mv  
`mv` - используется для перемещения одного или нескольких файлов (или директорий) в другую директорию, а также для переименования файлов и директорий  
Опции  
`-b`, `--backup`, `--backup=МЕТОД` - создать резервную копию существующих файлов, которые будут перезаписаны или удалены. Имя для резервной копии может создаваться по определенным правилам. В качестве значения МЕТОД можно указать:  
* `none` или `off` — не делать резервных копий, даже если включена опция --backup  
* `numbered` или `t` — имя резервной копии получит числовой индекс (пример: `myfile.txt~2~`).  
* `existing` или `nil` — если в директории уже есть резервные копии с числовыми индексами, то использовать числовые индексы для новых резервных копий, во всех остальных случаях использовать метод simple.  
* `simple` или `never` — делать обычные резервные копии (пример: `myfile.txt~`).  
`-f` или `--force` - при перезаписи существующих файлов не спрашивать разрешения пользователя.  
`-i` или `--interactive` - при перезаписи существующих файлов спрашивать разрешение пользователя на подтверждение операции.  
`-n` или `--no-clobber` - не перезаписывать существующие файлы.  
`--strip-trailing-slashes` - удалить завершающий символ слеш / (если он там есть) из имени файла-источника.  
`-S СУФФИКС` или `--suffix=СУФФИКС` - изменить символ суффикса, который добавляется к именам резервных копий (при использовании опции --backup). По умолчанию СУФФИКС равен значку тильды `~`  
`-t ДИРЕКТОРИЯ` или `--target-directory=ДИРЕКТОРИЯ` - переместить все исходные файлы в директорию, которая указана в аргументе опции.  
`-u` или `--update` - перемещать только если исходный файл новее, чем файл назначения или если файл-назначения отсутствует.  
`-v` или `--verbose` - выводить информацию о каждом файле, который обрабатывает команда mv.  
`-Z` или `--context` - установить контекст (метки) SELinux для файлов назначения в значение по умолчанию.  
**Примеры**  
Переместить файл myfile1.txt в директорию mydir/ (директория должна существовать)  
`mv myfile1.txt mydir/`  
Переименовать файл  
`mv myfile1.txt myfile2.txt`  
Переименовать директорию  
`mv mydir1 mydir2`  
Создавать резервные копии существующих файлов  
*Предположим, что нам нужно переименовать файл myfile1.txt в myfile2.txt, но файл myfile2.txt уже существует*  
`mv -b myfile1.txt myfile2.txt`  
*В результате сначала существующий файл myfile2.txt будет переименован в myfile2.txt~, то есть будет создана его резервная копия, и только потом файл myfile1.txt будет переименован в myfile2.txt.*  
Вместо значка тильда `~` можно добавлять к именам резервных копий произвольный суффикс. Например, `.bak`  
`mv -b -S ".bak" myfile1.txt myfile2.txt`  
Переместить несколько файлов в директорию mydir/  
`mv myfile1 myfile2 myfile3 mydir/`  
Переместить все файлы из текущей директории в директорию mydir/  
`mv * mydir/`  
Переместить только те файлы, которых нет в директории назначения  
`mv -n mydir1/* mydir2/`  
Переместить только те файлы, которые новее  
`mv -u mydir1/* mydir2/`  
Если в имени файла есть пробелы их нужно экранировать или брать в ковычки  
`mv "My file1.txt" "My file2.txt"`  
Или  
`mv My\ file1.txt My\ file2.txt`  
  
***  
  
#### pwd  
`pwd` - present working directory, отобразить текущую директорию  
```bash  
[da2001@co1 ~]$ pwd  
/home/da2001  
```  
  
***  
  
#### rm  
`rm` - remove, удаление файлов и папок  
-f или --force - игнорировать несуществующие файлы и аргументы. Никогда не выдавать запросы на подтверждение удаления  
-i - выводить запрос на подтверждение удаления каждого файла.  
-I - выдать один запрос на подтверждение удаления всех файлов, если удаляется больше трех файлов или используется рекурсивное удаление. Опция применяется, как более «щадящая» версия опции -i  
-r или -R или --recursive - удаление директорий и их содержимого. Рекурсивное удаление.  
-d или --dir - удалять пустые директории.  
**Примеры**  
Удалить файл  
`rm myfile.txt`  
Удалить несколько файлов  
`rm myfile1.txt myfile2.txt myfile3.txt`  
Удалить защищенный файл  
`rm -f myfile.txt`  
Удалить все файлы в текущей директории  
`rm *`  
Выдавать запрос перед удалением каждого файла  
`rm -i myfile*.txt`  
Выдать запрос на удаление один раз  
`rm -I myfile*.txt`  
Удалить директорию и её содержимое  
`rm -r mydir`  
  
***  
  
#### rmdir  
`rmdir` - удалить пустой каталог  
`rmdir test-dir`  
Удалить всю цепочку пустых каталогов  
`rmdir -p test/test-dir/`  
  
***  
  
#### tail  
`tail` - вывод нескольких последних строк файла. По умолчанию 10  
-c - выводить указанное количество байт с конца файла;  
-f - обновлять информацию по мере появления новых строк в файле;  
-s - частота обновления файла, применяется совместно с опцией -f, по умолчанию 1 секунда;  
-n - выводить указанное количество строк из конца файла;  
--pid - используется с опцией -f, позволяет завершить работу утилиты, когда завершится указанный процесс;  
-q - не выводить имена файлов;  
--retry - повторять попытки открыть файл, если он недоступен;  
-v - выводить подробную информацию о файле;  
*В качестве значения параметра -c можно использовать число с приставкой b, kB, K, MB, M, GB, G T, P, E, Z, Y*  
Вывод последних 10 строк  
`tail /var/log/syslog`  
Вывод последних 100 строк  
`tail -n 100 /var/log/syslog`  
Вывод новых строк по мере добавления их в файл  
`tail -f /var/log/syslog`  
Просмотр нескольких файлов  
`tail /var/log/syslog /var/log/Xorg.0.log`  
Изменить частоту обновления файла на 5 секунд  
`tail -f -s 5 /var/log/syslog`  
  
***  
  
#### tar  
**Создать архив**  
```bash  
tar -cvf archivename.tar /files-you-want-toarchive  
```  
-c, --create               create a new archive  
-v, --verbose              verbosely list files processed  
-f, --file=ARCHIVE         use archive file or device ARCHIVE  
  
  
**Создать архив со сжатием**  
```bash  
tar -czvf archivename.tar.gz /files-you-want-toarchive  
```  
-j, --bzip2                filter the archive through bzip2  
-J, --xz                   filter the archive through xz  
-z, --gzip, --gunzip, --ungzip   filter the archive through gzip  
  
  
**Добавить файл в существующий архив**  
```bash  
tar -rvf /root/homes.tar /etc/hosts  
```  
-r, --append               append files to the end of an archive  
  
  
**Обновить файлы в существующем архиве**  
```bash  
tar -uvf /root/homes.tar /home  
```  
-u, --update               only append files newer than copy in archive  
  
  
**Просмотр содержимого архива**  
```bash  
tar -tvf /root/homes.tar  
```  
-t, --list                 list the contents of an archive  
  
  
**Извлечь файлы из архива в текущий каталог**  
```bash  
tar -xvf /archivename  
```  
-x, --extract, --get       extract files from an archive  
  
  
**Извлечь файлы из сжатого архива**  
```bash  
tar -xzvf archivename.tar.gz  
```  
  
  
**Извлечь файлы из архива в другой каталог**  
```bash  
tar -xvf /archivename -C /tmp  
```  
-C, --directory=DIR        change to directory DIR  
  
  
**Извлечь определённый файл из архива**  
```bash  
tar -xvf /root/etc.tar etc/hosts  
```  
  
***  
  
#### top  
`top` - table of processes, консольная команда, которая выводит список работающих в системе процессов и информацию о них. По умолчанию она в реальном времени сортирует их по нагрузке на процессор.  
*С помощью ключей можно гибко настроить вывод информации о запущенных процессах*  
```bash  
top - 09:14:09 up 3 days, 8 min,  1 user,  load average: 0.02, 0.02, 0.00  
Tasks: 164 total,   1 running, 163 sleeping,   0 stopped,   0 zombie  
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st  
MiB Mem :   1818.6 total,    569.6 free,    569.1 used,    679.9 buff/cache  
MiB Swap:   1024.0 total,   1024.0 free,      0.0 used.   1085.1 avail Mem   
  
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                              
      1 root      20   0  180100  14216   9176 S   0.0   0.8   0:09.25 systemd                                                                                                              
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.17 kthreadd                                                                                                             
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                                                                               
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                                                                                                           
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd                                                                                                 
      8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq                                                                                                         
.................  
```  
*существует более удобная утилита `htop`*  
  
***  
  
#### ps  
`ps` - process status, вывод информации о запущенных процессах  
Некоторый опции  
-A, -e, (a) - выбрать все процессы;  
-a - выбрать все процессы, кроме фоновых;  
-d, (g) - выбрать все процессы, даже фоновые, кроме процессов сессий;  
-N - выбрать все процессы кроме указанных;  
-С - выбирать процессы по имени команды;  
-G - выбрать процессы по ID группы;  
-p, (p) - выбрать процессы PID;  
--ppid - выбрать процессы по PID родительского процесса;  
-s - выбрать процессы по ID сессии;  
-t, (t) - выбрать процессы по tty;  
-u, (U) - выбрать процессы пользователя.  
  
Опции форматирования:  
-с - отображать информацию планировщика;  
-f - вывести максимум доступных данных, например, количество потоков;  
-F - аналогично -f, только выводит ещё больше данных;  
-l - длинный формат вывода;  
-j, (j) - вывести процессы в стиле Jobs, минимум информации;  
-M, (Z) - добавить информацию о безопасности;  
-o, (o) - позволяет определить свой формат вывода;  
--sort, (k) - выполнять сортировку по указанной колонке;  
-L, (H)- отображать потоки процессов в колонках LWP и NLWP;  
-m, (m) - вывести потоки после процесса;  
-V, (V) - вывести информацию о версии;  
-H - отображать дерево процессов;  
  
**Примеры**  
Процессы текущей оболочки  
`ps`  
Все процессы кроме фоновых  
`ps -a`  
Вывести больше данных  
`ps -f`  
Опции можно комбинировать  
`ps -af`  
  
***  
  
#### touch  
`touch` - используется для изменения временных меток файлов, однако один из наиболее распространенных способов использования - создание нового пустого файла.  
Обновить метки времени существующего файла или создать новый, если файл с таким именем не существует  
`touch file.txt`  
Обновить метки времени/создать несколько файлов  
`touch file1.txt file2.txt file3.txt`  
Обновить временные метки, если файл не существует НЕ создавать его  
`touch -c file.txt`  
Обновить только время доступа к файлу  
`touch -a file.txt`  
Обновить только время изменения файла  
`touch -m file.txt`  
Использовать временные метки другого файла  
`touch -r file.txt`  
Задать конкретное время доступа и модификации в формате YYMMDDhhmm  
`touch -t 202105251224 file.txt`  
  
***  
  
#### time  
`time` - время выполнения команды/скрипта  
```bash  
[da2001@co1 ~]$ time ls  
 connectedfile   link      newfiles   passwd        test       Видео       Загрузки      Музыка         'Рабочий стол'  
 hosts           newfile   oldfiles   symlinkfile   unhidden   Документы   Изображения   Общедоступные   Шаблоны  
  
real	0m0.002s  
user	0m0.001s  
sys	    0m0.001s  
```  
  
***  
  
#### which  
`which` - команда отображает путь к исполняемому файлу запрашиваемой программы  
```bash  
[da2001@co1 ~]$ which time  
/usr/bin/time  
```  
  
***  
  
#### PATH  
`$PATH` - переменная, в которой хранятся пути поиска исполняемых файлов  
```bash  
[da2001@co1 ~]$ echo $PATH  
/home/da2001/.local/bin:/home/da2001/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin  
```  
  
***  
  
#### Перенаправление ввода/вывода  
```  
Название       Использование при перенаправлении    Значение дискриптора  
STDIN          <           или          0<          0  
STDOUT         >           или          1>          1  
STDERR                                  2>          2  
```  
`>` или `1>` - перенаправление вывода. Если указано перенаправление в файл, файл будет перезаписан.  
`>>` - допишет данные в конец файла  
`2>` - перенаправление потока ошибок  
`2>&1` или `&>` - перенаправление вывода и потока ошибок в одно место `ls test test2 > errout 2>&1`  
`> /dev/null` - перенаправление в пустоту  
  
***  
  
#### pipe |  
`pipe |` - перенаправление вывода первой команды на вход второй команды  
```  
[da2001@co1 ~]$ cat /etc/passwd | grep da2001  
da2001:x:1000:1000:da2001:/home/da2001:/bin/bash  
```  
  
***  
  
#### uname  
`uname` - утилита командной строки, которая печатает основную информацию об имени операционной системы и системном оборудовании  
-s, ( –kernel-name) – печатает имя ядра. Значение по-умолчанию.  
-n, ( –nodename) – печатает имя узла системы (имя хоста). Это имя, которое система использует при общении по сети. При использовании с опцией -n uname показывает тот же вывод, что и команда hostname.  
-r, ( –kernel-release) – печатает выпуск ядра.  
-v, ( –kernel-version) – печатает версию ядра.  
-m, ( –machine) – печатает название аппаратного имени аппарата.  
-p, ( –processor) – печатает архитектуру процессора.  
-i, ( –hardware-platform) – печатает аппаратной платформы.  
-o, ( –operating-system) – распечатает название операционной системы. В системах Linux это «GNU/Linux»  
-a, ( –all) – при использовании опции -a uname ведет себя так же, как если бы  были заданы опции -snrvmo.  
  
***  
  
#### wget  
`wget` - загрузка файлов из сети  
**Примеры**  
Загрузка одного файла  
`wget http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz`  
Сохранить файл с другим именем  
`wget -O wget.zip http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz`  
Скачать несколько файлов  
`wget http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz ftp://ftp.gnu.org/gnu/wget/wget-1.10.1.tar.gz.sig`  
Взять адрес из файла  
`wget -i /wget/url.txt`  
Продолжить прерванную загрузку  
`wget -c http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz`  
Загрузка в фоне  
*-b - background, загрузка в фоне  
-o - output-file, сохранение лога в файл*  
`wget -b -o ~/wget.log http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz`  
Ограничение скорости загрузки  
`wget --limit-rate=100k ftp://ftp.iinet.net.au/debian/debian-cd/8.4.0/amd64/iso-dvd/debian-8.4.0-amd64-DVD-1.iso`  
*k - килобит, m - мегабит, g - гигабит*  
Подключение по логину и паролю  
`wget --http-user=narad --http-password=password http://mirrors.hns.net.in/centos/6.3/isos/x86_64/CentOS-6.3-x86_64-LiveDVD.iso`  
или  
`wget --ftp-user=narad --ftp-password=password ftp://ftp.iinet.net.au/debian/debian-cd/6.0.5/i386/iso-dvd/debian-6.0.5-i386-DVD-1.iso`  
Указать директорию загрузки  
`wget -P ~/Downloads/ http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz`  
  
***  
  
#### zip/unzip  
Создать архив из `archive.zip` файлов `file1.txt file2.log`  
`zip archive.zip file1.txt file2.log`  
Добавить в существующий архив папку с файлами  
`zip archive.zip -r /var/log/`  
Установить пароль на архив можно с помощью ключа -P, а ключ -e скроет пароль при вводе  
`zip archive.zip -Pe /var/log/`  
Распаковать архив в текущую директорию  
`unzip archive.zip`  
Распаковать в другую директорию  
`unzip archive.zip -d /tmp`  
Просмотреть список файлов в архиве без распаковки  
`unzip archive.zip -l`  
Распаковать определённый файлы архива  
`unzip archive.zip 1.txt 2.txt`  
**Пример создания архива.**  
Заархивируем все файлы и папки в директории /var/log/ и директорию /var/spool/  
`zip -r -9 test-archive.zip /var/log/* /var/spool/* -x "/var/log/apt/*"`  
`-r` - архивировать рекурсивно  
`-9` - степень сжатия от 1 до 9. 0 - без сжатия.  
`test-archive.zip` - имя архива  
`/var/log/* /var/spool/*` - архивируемые директории через пробел  
`-x "/var/log/apt/*"` - опция, позволяющая исключить указанную папку или файл из архива  
  
***  
  
#### findmnt  
`findmnt` - показать точки монтирования  
Просмотр устройств и точек их монтирования  
`findmnt --real`  
- ключ `--real` появился недавно, в версии 2.32, кот. используется в CentOS 8 его еще нет, а в Mint 20, установлена версия 2.34, там уже есть.  
`findmnt` без опций покажет больше данных  
Отображать процесс монтирования/отмонтирования в реальном времени  
`findmnt -p`  
  
***  
  
#### mount  
`mount` - монтирование файловых систем  
-v - подробный режим;  
-a, --all - примонтировать все устройства, описанные в fstab;  
-F, --fork - создавать отдельный экземпляр mount для каждого отдельного раздела;  
-f, --fake - не выполнять никаких действий, а только посмотреть что собирается делать утилита;  
-n, --no-mtab - не записывать данные о монтировании в /etc/mtab;  
-l, --show-labels - добавить метку диска к точке монтирования;  
-c - использовать только абсолютные пути;  
-r, --read-only - монтировать раздел только для чтения;  
-w, --rw - монтировать для чтения и записи;  
-L, --label - монтировать раздел по метке;  
-U, --uuid - монтировать раздел по UUID;  
-T, --fstab - использовать альтернативный fstab;  
-B, --bind - монтировать локальную папку;  
-R, --rbind - перемонтировать локальную папку  
Показать все смонтированные ФС  
`mount`  
Смонтировать ФС, прописанные в `/etc/fstab`  
`sudo mount -a`  
Монтирование диска в папку  
`sudo mount /dev/sdb6 /mnt/`  
Монтирование с указанием файловой системы  
`sudo mount -t ext4 /dev/sdb6 /mnt`  
Монтирование только для чтения  
`sudo mount -r /dev/sdb6 /mnt`  
или  
`sudo mount -o ro /dev/sdb6 /mnt`  
**Дополнительные опции монтирования**  
Запрет запуска исполняемых файлов в примонтированной папке  
`sudo mount -o noexec /dev/sdb6 /mnt`  
Перемонтировать раздел в режим только для чтения  
`sudo mount -o rw,remount /dev/sdb6 /mnt`  
Перемонтировать корень файловой системы в режим чтения-записи  
`sudo mount -o rw,remount /`  
Монтирование одной папки в другую  
`sudo mount --bind /mnt/ /media/`  
Монтирование образа  
`sudo mount ~/file.iso /mnt`  
Зеркало папки  
`sudo mount /dev/sdb1 /home/user/Видео`  
`sudo mount --bind /home/user/Видео /home/user/Документы`  
*в итоге `/dev/sdb1` будет смонтирован сразу в две папки*  
  
#### umount  
`umount` - размонтирование ФС  
`sudo umount /mnt`  
*иногда может возникнуть ошибка размонтирования. Система сообщит, что устройство занято: `umount: /mnt: target is busy`*  
Проблему можно решить закрыв все программы, которые могут использовать любой файл в этой папке. Какие именно это программы вы можете узнать с помощью команды `lsof`  
` lsof -w /mnt`  
`lsof -w /dev/sdb6`  
С опцией `-l`, файловая система будет отключена немедленно, несмотря на то, что она занята  
`sudo umount -l /mnt`  
  
***  
  
#### cut  
`cut` - вырезать часть текста  
-b (--bytes=LIST) — номер байта, набор или диапазон байтов, подлежащих вырезанию.  
-c (--characters=LIST) — символ, который следует вырезать. Также можно указывать набор либо диапазон символов.  
-d (--delimiter=DELIM) — с помощью этой опции пользователь устанавливает свой разделитель вместо стандартного TAB.  
-f (--fields=LIST) — перечень полей для вырезания.  
-s (--only-delimited) — если была применена эта опция, cut не выводит строки, где нет разделителя.  
--complement — задает байты, символы или поля, которые останутся в файле или тексте из стандартного ввода. Все остальное будет вырезано.  
--output-delimiter=STRING — по умолчанию выходной разделитель соответствует входному. Эта опция позволяет задать другой выходной разделитель.  
-z, --zero-terminated — вместо символа новой строки разделителем будет NULL.  
*для примеров создан файл*  
```bash  
[da2001@co1 ~]$ cat cut_command_example.txt   
Winter: white: snow: frost  
Spring: green: grass: warm  
Summer: colorful: blossom: hot  
Autumn: yellow: leaves: cool  
```  
1. Работа с байтами (`-b`)  
*вырезать из текста 1 байт*  
```bash  
[da2001@co1 ~]$ echo "The sky was yellow as brass." | cut -b 1  
T  
```  
*вырезать несколько конкретных байт и диапазон*  
```bash  
[da2001@co1 ~]$ echo "I looked at my watch; not eight o'clock." | cut -b 5,8,17,18-21  
odatch;  
```  
*также можно работать с файлами*  
```bash  
[da2001@co1 ~]$ cut -b 1,9 cut_command_example.txt  
Ww  
Sg  
Sc  
Ay  
```  
*вырезать все байты начиная с 5 и до конца строки*  
```bash  
[da2001@co1 ~]$ cut -b 5- cut_command_example.txt  
er: white: snow: frost  
ng: green: grass: warm  
er: colorful: blossom: hot  
mn: yellow: leaves: cool  
```  
*вырезать байты 1-16*  
```bash  
[da2001@co1 ~]$ cut -b -16 cut_command_example.txt  
Winter: white: s  
Spring: green: g  
Summer: colorful  
Autumn: yellow:   
```  
2. Работа с символами аналогична работе с байтами за исключением того, что необходимо использовать ключ `-c`  
```bash  
[da2001@co1 ~]$ cut -c -16 cut_command_example.txt  
Winter: white: s  
Spring: green: g  
Summer: colorful  
Autumn: yellow:  
```  
3. Работа со столбцами (`-d` - разделитель, `-f` - номер столбца)  
```bash  
[da2001@co1 ~]$ echo "From the inn issued a smell of frying liver." | cut -d ' ' -f 1  
From  
```  
*первый столбец файла с разделителем `:`*  
```bash  
[da2001@co1 ~]$ cat cut_command_example.txt   
Winter: white: snow: frost  
Spring: green: grass: warm  
Summer: colorful: blossom: hot  
Autumn: yellow: leaves: cool  
  
[da2001@co1 ~]$ cut -d ':' -f 1 cut_command_example.txt  
Winter  
Spring  
Summer  
Autumn  
```  
*вырезать несколько столбцов*  
```bash  
[da2001@co1 ~]$ cut -d ':' -f 1,2,3 cut_command_example.txt  
Winter: white: snow  
Spring: green: grass  
Summer: colorful: blossom  
Autumn: yellow: leaves  
```  
Команда cut также пригодится при работе с массивными CSV-документами. Ее синтаксис и опции в этом случае остаются неизменными. Например, при таком написании будут вырезаны первые два столбца файла с названием file_example.csv:  
```bash  
cut -d ',' -f 1,2 file_example.csv  
```  
  
***  
  
#### sort  
`sort` - сортировка текста  
Строки с цифрами размещаются выше других строк  
Строки, начинающиеся с букв нижнего регистра размещаются выше  
Сортировка выполняется в соответствии алфавиту  
Строки сначала сортируются по алфавиту, а уже вторично по другим правилам.  
-b - не учитывать пробелы  
-d - использовать для сортировки только буквы и цифры  
-i - сортировать только по ASCII символах  
-n - сортировка строк linux по числовому значению  
-r - сортировать в обратном порядке  
-с - проверить был ли отсортирован файл  
-o - вывести результат в файл  
-u - игнорировать повторяющиеся строки  
-m - объединение ранее отсортированных файлов  
-k - указать поле по которому нужно сортировать строки, если не задано, сортировка выполняется по всей строке.  
-f - использовать в качестве разделителя полей ваш символ вместо пробела  
-R - сортировка в случайном порядке  
```bash  
[da2001@co1 ~]$ cat test.txt   
computer  
mouse  
LAPTOP  
data  
RedHat  
laptop  
debian  
laptop  
```  
Сортировка по алфавиту  
```bash  
[da2001@co1 ~]$ sort test.txt   
computer  
data  
debian  
laptop  
laptop  
LAPTOP  
mouse  
RedHat  
```  
Сортировка в обратном порядке  
```bash  
[da2001@co1 ~]$ sort -r test.txt   
RedHat  
mouse  
LAPTOP  
laptop  
laptop  
debian  
data  
computer  
```  
Сортировка вывода по 9-й колонке  
```bash  
[da2001@co1 ~]$  ls -l | sort -k9  
total 16  
-rw-rw-r--. 2 da2001 da2001   0 May 24 09:59 connectedfile  
-rw-rw-r--. 1 da2001 da2001 114 May 28 13:49 cut_command_example.txt  
-rw-rw-r--. 1 da2001 da2001  59 May 24 15:58 errout  
lrwxrwxrwx. 1 da2001 da2001  10 May 24 09:59 hosts -> /etc/hosts  
drwxrwxrwx. 2 da2001 da2001   6 May 26 13:55 mydir  
drwxrw-r-x. 2 da2001 da2001   6 May 26 13:56 mydir2  
-rw-rw-r--. 2 da2001 da2001   0 May 24 09:59 newfile  
```  
Сортировка 5-й колонки по числовому значению `-n`  
```bash  
[da2001@co1 ~]$  ls -l | sort -nk5  
lrwxrwxrwx. 1 da2001 da2001   7 May 24 10:08 symlinkfile -> newfile  
lrwxrwxrwx. 1 da2001 da2001  10 May 24 09:59 hosts -> /etc/hosts  
lrwxrwxrwx. 1 da2001 da2001  11 May 24 09:58 passwd -> /etc/passwd  
drwxrwxr-x. 2 da2001 da2001  37 May 24 08:55 newfiles  
-rw-rw-r--. 1 da2001 da2001  55 May 28 14:34 test.txt  
-rw-rw-r--. 1 da2001 da2001  59 May 24 15:58 errout  
-rw-rw-r--. 1 da2001 da2001  68 May 25 12:24 welcome  
drwxrwxr-x. 2 da2001 da2001  91 May 28 09:58 test  
-rw-rw-r--. 1 da2001 da2001 114 May 28 13:49 cut_command_example.txt  
drwxrwxrwx. 2 da2001 da2001 142 May 28 14:44 mydir  
```  
Сортировка со скрытием дублирующихся значений `-u`  
```bash  
[da2001@co1 ~]$ sort -u test.txt  
computer  
data  
debian  
laptop  
LAPTOP  
mouse  
RedHat  
```  
  
***  
  
#### w  
`w` - показать авторизованных пользователей в системе  
```bash  
[da2001@co1 ~]$ w  
 08:22:28 up 7 days, 23:16,  1 user,  load average: 0.00, 0.00, 0.00  
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT  
da2001   pts/0    192.168.1.8      08:22    2.00s  0.11s  0.00s w  
```  
  
***  
  
#### useradd  
`useradd` - создать нового пользователя  
основные параметры:  
```  
-c, --comment КОММЕНТАРИЙ     поле GECOS новой учётной записи  
-d, --home-dir ДОМ_КАТ        домашний каталог новой учётной записи  
-D, --defaults                показать или изменить настройки по умолчанию для useradd  
-e, --expiredate ДАТА_УСТ     дата устаревания новой учётной записи  
-f, --inactive НЕАКТИВНОСТЬ   период неактивности пароля новой учётной записи  
-g, --gid ГРУППА              имя или ID первичной группы новой учётной записи  
-G, --groups ГРУППЫ           список дополнительных групп новой учётной записи  
-K, --key КЛЮЧ=ЗНАЧЕНИЕ       заменить значение по умолчанию из /etc/login.defs  
-m, --create-home             создать домашний каталог пользователя  
-M, --no-create-home          не создавать домашний каталог пользователя  
-N, --no-user-group           не создавать группу с тем же именем что и у пользователя  
-o, --non-unique              разрешить создание пользователей с повторяющимися (не уникальными) UID  
-s, --shell ОБОЛОЧКА          регистрационная оболочка новой учётной записи  
-u, --uid UID                 пользовательский ID новой учётной записи  
-U, --user-group              создать группу с тем же именем что и у пользователя  
```  
Создать пользователя `linda`, id 1201 (`-u 1201`), `-m` создать домашний каталог, добавить пользователя в группы sales и ops (`-G sales,ops`)  
```bash  
useradd -m -u 1201 -G sales,ops linda  
```  
  
***  
  
#### passwd  
`passwd` - пароль учётной записи  
основные параметры:  
```  
-d, --delete                  удалить пароль заданной учётной записи  
-e, --expire                  просрочить пароль заданной учётной записи  
-l, --lock                    заблокировать заданную учётную запись  
-n, --mindays МИН_ДНЕЙ        установить минимальное число дней перед сменой пароля в МИН_ДНЕЙ  
-S, --status                  показать состояние пароля заданной учётной записи  
-u, --unlock                  разблокировать заданную учётную запись  
-w, --warndays ПРЕДУП_ДНЕЙ    установить количество дней с выдачей предупреждения в ПРЕДУП_ДНЕЙ  
-x, --maxdays МАКС_ДНЕЙ       установить максимальное число дней перед сменой пароля в МАКС_ДНЕЙ  
```  
Задать пароль для пользователя `linda`  
```bash  
passwd linda  
```  
Изменить свойства пароля. Срок действия пароля истекает через 90 дней (`-x 90`). За три дня до истечения срока действия пользователь получит предупреждение (`-w 3`), и пароль необходимо использовать не менее 30 дней, прежде чем (`-n 30`) его можно будет изменить.  
```bash  
passwd -n 30 -w 3 -x 90 linda  
```  
  
***  
  
#### chage  
`chage` - изменяет информацию об устаревании пароля пользователя  
основные опции:  
```  
-d, --lastday ПОСЛ_ДЕНЬ       установить последний день смены пароля в ПОСЛ_ДЕНЬ  
-E, --expiredate ДАТА_УСТ     установить дату окончания действия учётной записи в ДАТА_УСТ  
-I, --inactive НЕАКТИВНОСТЬ   установить неактивность пароля после устаревания в значение НЕАКТИВНОСТЬ  
-l, --list                    показать «возраст» учётной записи  
-m, --mindays МИН_ДНЕЙ        установить минимальное число дней перед сменой пароля в МИН_ДНЕЙ  
-M, --maxdays МАКС_ДНЕЙ       установить максимальное число дней перед сменой пароля в МАКС_ДНЕЙ  
-W, --warndays ПРЕДУП_ДНЕЙ    установить количество дней с выдачей предупреждения в ПРЕДУП_ДНЕЙ  
```  
```bash  
sudo chage -l laura  
```  
```  
Last password change                                : Jun 03, 2021  
Password expires                                    : Sep 01, 2021  
Password inactive                                   : never  
Account expires                                     : never  
Minimum number of days between password change      : 0  
Maximum number of days between password change      : 90  
Number of days of warning before password expires   : 3  
```  
  
***  
  
#### groupadd  
`groupadd` - создание группы  
Создать группу `sales`  
```bash  
groupadd sales  
```  
Создать группу `prod` и указать её GID  
```bash  
groupadd prod -g 1201  
```  
  
***  
  
#### usermod  
`usermod` - изменяет учётную запись пользователя  
Добавить пользователя linda в группу sales  
```bash  
usermod -aG sales linda  
```  
Изменить основную группу пользователя на группу sales  
```bash  
usermod -g sales  
```  
  
***  
  
#### id  
`id` - информация о пользователе  
```bash  
da2001@Metromint:~$ id da2001  
uid=1000(da2001) gid=1000(da2001) группы=1000(da2001),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(kvm),114(lpadmin),134(sambashare),136(wireshark),139(libvirt)  
```  
  
***  
  
#### wc  
`wc` - подсчет количества строк, слов, символов, байт  
```  
-c, --bytes                 напечатать количество байт  
-m, --chars                 напечатать количество символов  
-l, --lines                 напечатать количество новых строк  
-w, --words                 напечатать количество слов  
```  
запуск команды без параметров выдаст количество строк, слов, байт  
```bash  
da2001@Metromint:~$ cat test.txt   
Привет  
как  
дела        
da2001@Metromint:~$ wc test.txt   
 3  3 29 test.txt  
```  
  
***  
  
#### less  
`less` - постраничный вывод текста на экран  
Опций очень много, навигация по файлу осуществляется аналогично vim  
```  
-c, --squeeze-blank-lines   удалить лишние пустые строки  
```  
Поиск по открытому файлу  
/text - поиск слова text вперед  
?text - поиск слова text назад  
  
***  
