notes/start_linux.md

1444 lines
79 KiB
Markdown
Raw Normal View History

2022-05-07 22:12:11 +03:00
### Материал для подготовки к 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 назад
***