##### RabbitSVC SVN
Решение проблемы с постоянной авторизацией:
```bash
$ sudo add-apt-repository ppa:philippun/stuff
$ sudo apt update
$ sudo apt install python3-svn
```
##### Сеть
Сканирование сети:
```bash
$ sudo arp-scan --interface=eno1 --localnet
```
Добавить сетевой интерфейс
```bash
sudo ifconfig eno1:1 192.168.24.30
```
##### О системе
https://losst.pro/sbor-informatsii-o-sisteme-ubuntu
```bash
$ hostnamectl # версия ОС, ядра
$ cat /proc/cpuinfo
$ lsb_release -a
$ uname -a # версия ядра
$ df -h # место на дисках
```
##### Полезное
```bash
$ obsidian & # запуск программы в фоне
$ ctrl + l # очистка экрана
```
Утилиты
**xxd** - вывод содержимого файлов в hex и bin форматах
```bash
$ xxd my_file.txt
$ xxd -с 1 -b my_file.txt
# -b - выводит в двоичном формате
# -c 1 - вывод по одному символу
# -p - убрать справочную информацию
$ xxd -r -p file_in file_out # обратное преобразование
```
Командная строка
Создание и удаление
```bash
$ true > file.txt # создает пустой файл
$ echo "hello world" > file.txt # создает файл и пишет строку
$ touch {1..50} # создает 50 файлов с именами от 1 до 50
$ mkdir -p folder1/folder2/folder3 # создает вложенные директории
$ mkdir -p folder1/{folder2, folder3}/folder4 # второй способ
$ ls -R folder1 # рекурсивные вывод содержимого
$ tree folder1
$ echo ?.txt # выведет имена файлов только с 1 символом
$ # ? - это только один символ
$ touch user_{ivan, akex, petr}.txt # создает 3 файлв с именами по шаблону
$ echo now is $(date) # вывод результата команды через $
$ rm *.txt # удаляет файлы по маске
```
Разное
```bash
$ du -sh /usr/bin # вывод размера директории /usr/bin
$ du -sh /usr/bin/* # вывод размера всех нескрытых файлов в /usr/bin
$ du -sh /usr/bin/* | sort -h | less # сортировка по размеру файлов
$ !du # команда du выполнится с предыдущими аргументами
$ cd - # Вернуться в предыдущую директорию
$ wc -l # считает количество строк переданных команде wc
$ export # выводит переменные окружения
$ export EDITOR=nano # установка переменной окружения
$ export "export EDITOR=nano" >> ~./bashrc # установить текстовый редактор по умолчанию
$ head -n10 file.txt # вывести 10 первых строк файла
$ tail -n10 file.txt # вывести 10 последних строк файла
$ cut -c 1-10 file.txt # выведет с 1-ого по 1-ый символы из каждой строчки файла
$ watch -n 1 date # запускает каждую секунду команду date
$ watch -g "df -h" # перезапускает команду df пока не изменится ее вывод
$ tr ":" "\" # заменяетодин символ на другой
````
История команд
```bash
$ history # выводит историю команд
$ history | less # листать историю команд
$ !25 # выполнить команду под номером 25
$ !! # повтороить предыдущую команду
$
```
Редактирование команд
```bash
$ ctrl + a # переход в начало строки
$ ctrl + e # переход в конец строки
$ ctrl + w # удаление по словам
```
Потоки ввода/вывода
">" :: Перенаправить поток вывода в файл. Файл будет перезаписан.
"2>" :: Перенаправить поток ошибок в файл. Файл будет перезаписан.
"&>" :: Перенаправить поток вывода и поток ошибок в файл. Файл будет перезаписан.
">>" :: Перенаправить поток вывода в файл. Файл будет создан или дозаписан.
"2>>" :: Перенаправить поток ошибок в файл. Файл будет создан дозаписан.
"&>>" :: Перенаправить поток вывода и поток ошибок в файл. Файл будет создан или дозаписан.
"|" :: Канал. Позволяет передать поток stdout одной команды в поток stdin другой команды.
```bash
$ echo hello world > 1.txt
$ echo new line >> 1.txt # дозаписать файл
$ cat 1.txt 2.txt > 3.txt # поместить содержимое двух файлов в третий
$ tac 3.txt # выводит файл в обратном порядке
$ ls nonexistent_file 2> 4.txt # перенаправить поток ошибок stderr в файл
$ ls nonexistet_file &> 4.txt # оба потока stdout и stderr в файл
$ cat < 1.txt # передача в stdin
$ ls -la | tree output.txt # сохранит вывод ls в файл output.txt
```
Пользователи
```bash
$ whoami # выводи имя пользователя
$ cd # переход в домашнюю директорию пользователя
```
Статистика и информация
```bash
$ stat file.txt # вывод статистики
$ ls -l --time-style=full-iso file.txt # время выводится в полном формате
$ ls -l --time=atime file.txt # вывод времени доступа
$ touch -a --date="tomorrow" test.txt # изменитьвремя обращения к файлу
$ touch -am --date="1990-06-01" test.txt # изменитьвремя обращения и время изменения файла
```
Псевдонимы
```bash
$ alias l="ls -l" # создание alias. Сохраняется только в текущей сессии
# Для сохранения нужнодобавитьв .bashrc
```
Помощь
```bash
$ man ls # Получение справки по команде
$ ls --help
# ls --help | less # листать справку
```
Переменные окружения
```bash
$ env # вывод переменных окружения
$ echo $HOME # вывод значения переменной окружения
$ touch $USER.txt # создает файл с именем пользователя
$ export MY_VARIABLE=123 # создает переменную окружения в текущей сессии
$ echo "export MY_VARIABLE=123" >> .bashrc #
$ TMP=123 env | less # установка переменной окружения в рамках одной команды
$ echo $PATH | tr ":" "\n" # Разбор значения переменной окружения `$PATH` путём разбития по символу двоеточия
$ export CDPATH=.:/cygdrive/c/projects # добавить путь для перехода командой cd
$ type ls # просмотр информации о команде ls
$ which ls # где находится команда ls
```
Файловая система Linux
```bash
$ bin -> usr/bin # ссылка на usr/bin
$ /boot # загрузчик
$ /dev # файлы устройств = устройства
$ /etc # конфигурация системных программ
$ /home # домашние директории всех пользователей
$ lib -> usr/lib # библиотеки
$ /media # монтируются устройства
$ /mnt # монтируются устройства
$ /proc # файлы процессов
$ /root # директория суперпользователя
$ sbin -> usr/sbin # файлы программ, которые может запускать только root
$ /tmp # временные файлы
$ /usr # пользовательские программы
$ /var # частоизменяемые файлы
$ /sys # информация ядра о системе, устройствах и драйверах
$ /srv # файлы сервисов
```
Жесткие и (мягкие) символьные ссылки
Можно изменять данные по ссылкам.
При удалении файла символьная ссылка остается, но ссылается на пустое пространство. Но жесткая ссылка и данные остаются.
```bash
$ ln file.txt hard_link_to_file.txt # жесткая ссылкоа на file.txt
$ ln -s file.txt soft_link_to_file.txt # символьная ссылкоа на file.txt
```
Группы пользователей
```bash
$ groups user_1 # вывести группы в которых состоит пользователь user_1
$ /etc/passwd # информация о пользователях
$ /etc/group # инфооормация о группах
$ sudo adduser new_user # создать нового пользователя
$ /etc/sudoers # пользователи с правами sudo
$ sudo groupadd friends # создать группу friends
$ sudo usermod -aG friends user_1 # добавить пользователя user_1 в группу friends
$ sudo passwd user_1 # изменить пароль пользователя user_1
$ sudo passwd # изменить пароль текущего пользователя
```
Задания на bash
```bash
$ mkdir -p {2020..2024}/{01..12}
```