Mostly data processing tasks and formatting changes of first 3 labs.

pull/1/head
Vladimir Protsenko 1 year ago
parent 29abb9e336
commit 379c889595

@ -1,14 +1,15 @@
# Решения # Решения
# 1 ## 1
Вы в директории /home/stud/data. Какая из команд переместит вас в домашнюю директорию? Вы в директории `/home/stud/data`. Какая из команд переместит вас в домашнюю директорию?
``` ```
3 cd /home/stud 3 cd /home/stud
5 cd ~ 5 cd ~
7 cd ~/data/..
8 cd 8 cd
9 cd .. 9 cd ..
``` ```
# 2 ## 2
Создайте файл dummy в /tmp. Попробуйте удалить его указав флаг -i для команды rm. В чём отличие удаления файла с этим флагом и без него? Создайте файл dummy в /tmp. Попробуйте удалить его указав флаг -i для команды rm. В чём отличие удаления файла с этим флагом и без него?
``` ```
mkdir /tmp/dummy mkdir /tmp/dummy
@ -20,13 +21,13 @@ rm -r /tmp/dummy
``` ```
Отличие в запросе подтверждения действия. Отличие в запросе подтверждения действия.
# 3 ## 3
Создайте папку backup в домашней директории. Одновременно скопируйте файл .bashrc в /tmp/ и в backup с помощью cp. Создайте папку backup в домашней директории. Одновременно скопируйте файл .bashrc в /tmp/ и в backup с помощью cp.
``` ```
$ mkdir ~/backup $ mkdir ~/backup
$ cp .bashrc ~/backup; cp .bashrc /tmp/ $ cp .bashrc ~/backup; cp .bashrc /tmp/
``` ```
# 4 ## 4
Повторите структуру директории: Повторите структуру директории:
``` ```
mkdir project mkdir project
@ -48,7 +49,7 @@ mkdir backup
mkdir shared mkdir shared
``` ```
# 5 ## 5
Скопируйте файлы экспериментов в backup, но распределите по папкам разные типы файлов. .data в backup/dataset, dat-calibration в backup/calibration, логи в backup/logs. В shared поместите все файлы, созданные 23 числа в папку 23day. Напишите команды в двух вариантах: с относительными путями и с абсолютными. Скопируйте файлы экспериментов в backup, но распределите по папкам разные типы файлов. .data в backup/dataset, dat-calibration в backup/calibration, логи в backup/logs. В shared поместите все файлы, созданные 23 числа в папку 23day. Напишите команды в двух вариантах: с относительными путями и с абсолютными.
``` ```
@ -67,25 +68,25 @@ cp $PD/raw/*-exp?-calibration.dat backup/calibration
cp $PD/raw/*.log ./backup/logs/ cp $PD/raw/*.log ./backup/logs/
``` ```
# 6 ## 6
Посчитайте количество строк в файле /var/log/messages. Посчитайте количество строк в файле /var/log/messages.
``` ```
sudo wc -l /var/log/messages sudo wc -l /var/log/messages
sudo cat /var/log/messages | wc -l sudo cat /var/log/messages | wc -l
``` ```
# 7 ## 7
Инициализируйте файл head_tail_messages с помощью команды head из строк в /var/log/messages, затем добавьте в head_tail_messages последние 23 строки из /var/log/messages. Инициализируйте файл head_tail_messages с помощью команды head из строк в /var/log/messages, затем добавьте в head_tail_messages последние 23 строки из /var/log/messages.
``` ```
sudo head /var/log/messages > head_tail_messages sudo head /var/log/messages > head_tail_messages
sudo tail -n 23 /var/log/messages >> head_tail_messages sudo tail -n 23 /var/log/messages >> head_tail_messages
``` ```
# 8 ## 8
Создайте псевдоним "dc", который разрешается в команду "cd" для случаев опечатки. Создайте псевдоним "dc", который разрешается в команду "cd" для случаев опечатки.
``` ```
alias dc=”cd” alias dc=”cd”
``` ```
# 9 ## 9
Прочитайте мануал `man ls` и напишите `ls` команду, которая выводит список файлов в следующем виде: Прочитайте мануал `man ls` и напишите `ls` команду, которая выводит список файлов в следующем виде:
* список файлов включает скрытые, * список файлов включает скрытые,
@ -95,14 +96,16 @@ alias dc=”cd”
``` ```
ls -caht или ls -cahtl ls -caht или ls -cahtl
``` ```
# 10
## 10
Запишите в переменную среды PATH значение "". Как это повлияло на выполнение команд? Перезайдите по ssh и попробуйте вызывать любую команду заново. Сохранились ли изменения? Запишите в переменную среды PATH значение "". Как это повлияло на выполнение команд? Перезайдите по ssh и попробуйте вызывать любую команду заново. Сохранились ли изменения?
``` ```
export PATH=”” export PATH=””
следствие: ни один исполняемый файл системой теперь не находится следствие: ни один исполняемый файл системой теперь не находится
после переподключения система вернулась в прежнее состояние после переподключения система вернулась в прежнее состояние
``` ```
# 11
## 11
Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс idx. Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс idx.
``` ```
idx=0; idx=0;
@ -118,7 +121,8 @@ done
``` ```
idx=-1; for species in cubane ethane methane; do for temperature in 25 30 37 40; do mkdir $idx-$species-$temperature; ((idx+=1)); done; done idx=-1; for species in cubane ethane methane; do for temperature in 25 30 37 40; do mkdir $idx-$species-$temperature; ((idx+=1)); done; done
``` ```
# 12
## 12
(*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности? (*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности?
Плохое решение Плохое решение
@ -134,23 +138,26 @@ find ./ -type f -printf "%T+ %H%P\n" 2>/dev/null | sort -r
%H - путь к директории, в которой файл найден, %H - путь к директории, в которой файл найден,
%P - имя файла. %P - имя файла.
# 13 ## 13
Напишите цикл, который проходит по списку файлов в текущей директории и выводит полный путь к директории и имя файла. Напишите цикл, который проходит по списку файлов в текущей директории и выводит полный путь к директории и имя файла.
``` ```
for f in $(ls); do echo $(pwd)/$f; done for f in $(ls); do echo $(pwd)/$f; done
``` ```
# 14
## 14
Выведите результат сложения 10 и 4 с помощью bash синтаксиса для арифметических операций. Выведите результат сложения 10 и 4 с помощью bash синтаксиса для арифметических операций.
``` ```
echo $((10 + 4)) echo $((10 + 4))
``` ```
# 15
## 15
Выведите результат умножения двух переменных с помощью bash синтаксиса для арифметических операций. Выведите результат умножения двух переменных с помощью bash синтаксиса для арифметических операций.
``` ```
a=1; b=2; echo $((a*b)) a=1; b=2; echo $((a*b))
``` ```
# 16
## 16
Напишите команду, которая рекурсивно находит все HTML-файлы в папке и запаковывает их в tar.gz архив. Ваша команда должна работать, даже если в файлах есть пробелы. Напишите команду, которая рекурсивно находит все HTML-файлы в папке и запаковывает их в tar.gz архив. Ваша команда должна работать, даже если в файлах есть пробелы.
``` ```
find . -type f -name "*.html" -print0 | xargs -0 tar cfz htmls.tar.gz find . -type f -name "*.html" -print0 | xargs -0 tar cfz htmls.tar.gz
``` ```

@ -1,6 +1,6 @@
# Задания # Задания
# 1 ## 1
Повторите структуру директории с помощью команд `mkdir` и `touch`: Повторите структуру директории с помощью команд `mkdir` и `touch`:
``` ```
project/ project/
@ -25,7 +25,7 @@ project/
`-- path `-- path
``` ```
# 2 ## 2
Вы в директории `/home/stud/project/`. Какая из команд переместит вас в домашнюю директорию? Вы в директории `/home/stud/project/`. Какая из команд переместит вас в домашнюю директорию?
``` ```
1 cd . 1 cd .
@ -39,40 +39,40 @@ project/
9 cd .. 9 cd ..
``` ```
# 3 ## 3
Перейдите в папку `backup`. Используя команду `cp`, выполните следующие действия одной строкой: Перейдите в папку `backup`. Используя команду `cp`, выполните следующие действия одной строкой:
- скопируйте два файла: `.bashrc` и `.bash_profile` в папку `backup`, - скопируйте два файла: `.bashrc` и `.bash_profile` в папку `backup`,
- скопируйте файл `.bashrc` в две директории: `/tmp/` и `shared`. - скопируйте файл `.bashrc` в две директории: `/tmp/` и `shared`.
# 4 ## 4
Создайте файл `dummy` в `/tmp`. Попробуйте удалить его указав флаг `-i` для команды `rm`. В чём отличие удаления файла с этим флагом и без него? Создайте файл `dummy` в `/tmp`. Попробуйте удалить его указав флаг `-i` для команды `rm`. В чём отличие удаления файла с этим флагом и без него?
# 5 ## 5
Скопируйте файлы экспериментов в `backup`, но распределите их по папкам. Файлы с расширением `.datа` в `backup/data`, файлы с расширением `.calib` в `backup/calibration`, логи `.log` в `backup/logs`. В `shared` поместите все файлы, созданные 23 числа в папку `23day`. Напишите команды в двух вариантах: с относительными путями и с абсолютными и проверьте, что их выполнение даёт одинаковый результат. Скопируйте файлы экспериментов в `backup`, но распределите их по папкам. Файлы с расширением `.datа` в `backup/data`, файлы с расширением `.calib` в `backup/calibration`, логи `.log` в `backup/logs`. В `shared` поместите все файлы, созданные 23 числа в папку `23day`. Напишите команды в двух вариантах: с относительными путями и с абсолютными и проверьте, что их выполнение даёт одинаковый результат.
# 6 ## 6
Посчитайте количество строк, слов и символов в файле `/var/log/dpkg.log`. Посчитайте количество строк, слов и символов в файле `/var/log/dpkg.log`.
# 7 ## 7
Инициализируйте файл `head_tail_messages` с помощью команды `head` из строк в `/var/log/dpkg.log`. Затем добавьте в `head_tail_messages` последние 23 строки из `/var/log/dpkg.log`. Инициализируйте файл `head_tail_messages` с помощью команды `head` из строк в `/var/log/dpkg.log`. Затем добавьте в `head_tail_messages` последние 23 строки из `/var/log/dpkg.log`.
# 8 ## 8
Постройте конвейр с помощью оператора `|`, который считывает содержимое `/var/log/dpkg.log`, находит только строки содержащие слово `perl`, сохраняет результат в файл `/tmp/perl_pkgs` и одновременно выводит в консоль количество найденных строк. Постройте конвейр с помощью оператора `|`, который считывает содержимое `/var/log/dpkg.log`, находит только строки содержащие слово `perl`, сохраняет результат в файл `/tmp/perl_pkgs` и одновременно выводит в консоль количество найденных строк.
# 9 ## 9
Выполните две команды: `head /nonexistent; echo Ok` и `head /nonexistent && echo Ok`. В чём отличие в поведении? Выполните две команды: `head /nonexistent; echo Ok` и `head /nonexistent && echo Ok`. В чём отличие в поведении?
# 10 ## 10
Оператор `||` похож на оператор ИЛИ в программировании. Что вы ожидаете увидеть при запуске `mkdir test || echo Ok`? Проверьте так ли это. Оператор `||` похож на оператор ИЛИ в программировании. Что вы ожидаете увидеть при запуске `mkdir test || echo Ok`? Проверьте так ли это.
# 11 ## 11
Создайте псевдонимы: `dc`, `chomd` которые разрешаются в команды: `cd`, `chmod` чтобы наконец решить проблему опечаток. Создайте псевдонимы: `dc`, `chomd` которые разрешаются в команды: `cd`, `chmod` чтобы наконец решить проблему опечаток.
Создайте псевдоним `ls` для команды `ls -alF` и `cdw` для команды `cd /home/stud/project/`. Проверьте работу псведонимов. Создайте псевдоним `ls` для команды `ls -alF` и `cdw` для команды `cd /home/stud/project/`. Проверьте работу псведонимов.
Удалите псевдоним `ls` командой `unalias`. Проверьте, что выдача соответствует оригинальной команде `ls`. Удалите псевдоним `ls` командой `unalias`. Проверьте, что выдача соответствует оригинальной команде `ls`.
# 12 ## 12
Прочитайте мануал `man ls`. Напишите `ls` команду, которая выводит список файлов в следующем виде: Прочитайте мануал `man ls`. Напишите `ls` команду, которая выводит список файлов в следующем виде:
- список файлов включает скрытые, - список файлов включает скрытые,
- размер файла указан с метрическими приставками (e.g. 454M вместо 454279954), - размер файла указан с метрическими приставками (e.g. 454M вместо 454279954),
@ -88,13 +88,13 @@ drwxr-xr-x 5 user group 160 Jan 14 09:53 .
drwx------+ 47 user group 1.5K Jan 12 18:08 .. drwx------+ 47 user group 1.5K Jan 12 18:08 ..
``` ```
# 13 ## 13
Попробуйте вывести содержимое переменной среды `HOME` с помощью `echo` в одинарных и двойных кавычках. В чём разница? Попробуйте вывести содержимое переменной среды `HOME` с помощью `echo` в одинарных и двойных кавычках. В чём разница?
# 14 ## 14
Запишите в переменную среды `PATH` значение `""`. Как это повлияло на выполнение команд? Перелогиньтесь и попробуйте вызывать любую команду заново. Сохранилиcь ли изменения? Запишите в переменную среды `PATH` значение `""`. Как это повлияло на выполнение команд? Перелогиньтесь и попробуйте вызывать любую команду заново. Сохранилиcь ли изменения?
# 15 ## 15
C помощью bash синтаксиса для арифметических операций выведите результат: C помощью bash синтаксиса для арифметических операций выведите результат:
- сложения 10 и 4, - сложения 10 и 4,
- умножения 10 на 4, - умножения 10 на 4,
@ -102,7 +102,7 @@ C помощью bash синтаксиса для арифметических
Сохраните результат операции `a % b` в переменную `c`, где `a` и `b` результаты любых предыдущих двух операций. Выведите `с`. Сохраните результат операции `a % b` в переменную `c`, где `a` и `b` результаты любых предыдущих двух операций. Выведите `с`.
# 16 ## 16
Выполните в терминале следующую команду в директории `/tmp`: Выполните в терминале следующую команду в директории `/tmp`:
``` ```
for species in cubane ethane methane; for species in cubane ethane methane;
@ -115,10 +115,10 @@ done
``` ```
Что в результате вы видите в консоли? Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс `idx`. На каждой итерации внутреннего цикла `idx` должна увеличиваться на единицу. Что в результате вы видите в консоли? Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс `idx`. На каждой итерации внутреннего цикла `idx` должна увеличиваться на единицу.
# 17 ## 17
Напишите цикл, который проходит по списку файлов в текущей директории и выводит полный путь к директории и имя файла. Напишите цикл, который проходит по списку файлов в текущей директории и выводит полный путь к директории и имя файла.
# 18 ## 18
Далее поработайте с командой `watch date`. Команда `watch` вызывает периодически переданную ей команду в качестве аргумента. Это удобно для организации простого мониторинга. Далее поработайте с командой `watch date`. Команда `watch` вызывает периодически переданную ей команду в качестве аргумента. Это удобно для организации простого мониторинга.
Первый раз вызовите команду и отправьте процессу сигнал `SIGINT` комбинацией клавишь `Ctrl+C`. Первый раз вызовите команду и отправьте процессу сигнал `SIGINT` комбинацией клавишь `Ctrl+C`.
@ -129,8 +129,8 @@ done
*man страницы: kill, signal* *man страницы: kill, signal*
# 19 ## 19
Напишите команду, которая рекурсивно находит все HTML-файлы в папке и упаковывает их в `tar.gz` архив. Используйте `find` и `xargs`. Ваша команда должна работать, даже если в файлах есть пробелы (подсказка: используйте `null` разделитель). Напишите команду, которая рекурсивно находит все HTML-файлы в папке и упаковывает их в `tar.gz` архив. Используйте `find` и `xargs`. Ваша команда должна работать, даже если в файлах есть пробелы (подсказка: используйте `null` разделитель).
# 20 ## 20
(*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности? (*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности?

@ -194,16 +194,12 @@
** Наберите d$ для удаления текста до конца строки. ** ** Наберите d$ для удаления текста до конца строки. **
1. Нажмите <ESC>, чтобы перейти в обычный режим. 1. Нажмите <ESC>, чтобы перейти в обычный режим.
2. Переместите курсор вниз, к строке помеченной --->. 2. Переместите курсор вниз, к строке помеченной --->.
3. Переместите курсор к концу правильной строки (ПОСЛЕ первой точки). 3. Переместите курсор к концу правильной строки (ПОСЛЕ первой точки).
4. Наберите d$ для удаления остатка строки. 4. Наберите d$ для удаления остатка строки.
---> Кто-то набрал окончание этой строки дважды. окончание этой строки дважды. ---> Кто-то набрал окончание этой строки дважды. окончание этой строки дважды.
5. Чтобы лучше разобраться в том, как это происходит, переходите к Уроку 2.3. 5. Чтобы лучше разобраться в том, как это происходит, переходите к Уроку 2.3.
``` ```
@ -264,11 +260,8 @@ d объект
для упрощения сделать возможным удаление строки набором двух d. для упрощения сделать возможным удаление строки набором двух d.
1. Переместите курсор вниз, ко второй строке фразы. 1. Переместите курсор вниз, ко второй строке фразы.
2. Наберите dd для удаления строки. 2. Наберите dd для удаления строки.
3. Теперь переместитесь к четвёртой строке. 3. Теперь переместитесь к четвёртой строке.
4. Наберите 2dd для удаления двух строк. 4. Наберите 2dd для удаления двух строк.
---> 1) Летом я хожу на стадион, ---> 1) Летом я хожу на стадион,
@ -377,13 +370,9 @@ d объект
[число] c объект ИЛИ c [число] объект [число] c объект ИЛИ c [число] объект
2. Объекты также совпадают: w (слово), $ (конец строки) и т.п. 2. Объекты также совпадают: w (слово), $ (конец строки) и т.п.
3. Переместите курсор вниз, к строке помеченной --->. 3. Переместите курсор вниз, к строке помеченной --->.
4. Перейдите к первой ошибке. 4. Перейдите к первой ошибке.
5. Наберите c$ и отредактируйте первую строку так, чтобы она совпадала со второй, после чего нажмите <ESC>.
5. Наберите c$ и отредактируйте первую строку так, чтобы она совпадала со
второй, после чего нажмите <ESC>.
---> Конец этой строки нуждается в помощи, чтобы стать похожим на второй. ---> Конец этой строки нуждается в помощи, чтобы стать похожим на второй.
---> Конец этой строки нуждается в помощи команды c$ . ---> Конец этой строки нуждается в помощи команды c$ .
@ -402,7 +391,6 @@ d объект
[число] c объект ИЛИ c [число] объект [число] c объект ИЛИ c [число] объект
Теперь переходите к следующему уроку. Теперь переходите к следующему уроку.
``` ```
# Урок 4 # Урок 4

@ -1,5 +1,4 @@
Добро пожаловать в задания https://regexone.com! Задания взяты с ресурса https://regexone.com. Уроки переведены и адаптированы под выполнение в vim.
Уроки переведены и адаптированы под выполнение в vim.
## Урок 0: Введение и азбука ## Урок 0: Введение и азбука
@ -40,7 +39,7 @@
найдите abc найдите abc
``` ```
---
## Урок 1½: 123-е ## Урок 1½: 123-е
@ -66,7 +65,7 @@
найдите цифры в define "123" найдите цифры в define "123"
найдите цифры в var g = 123; найдите цифры в var g = 123;
``` ```
---
## Урок 2: Точка ## Урок 2: Точка
@ -93,7 +92,7 @@
найдите ?=+. найдите ?=+.
пропустите abc1 пропустите abc1
``` ```
---
## Урок 3. Соответствие определенным символам ## Урок 3. Соответствие определенным символам
@ -119,7 +118,7 @@
пропуститe ran пропуститe ran
пропуститe pan пропуститe pan
``` ```
---
## Урок 4. Исключение определенных символов ## Урок 4. Исключение определенных символов
@ -145,7 +144,7 @@
найдите dog найдите dog
пропустите bog пропустите bog
``` ```
---
## Урок 5: Диапазоны символов ## Урок 5: Диапазоны символов

@ -0,0 +1,76 @@
# Задания на обработку данных в bash
## 1
Вызовите `"for f in `seq 20`; do echo $RANDOM >> rnds; done"` и отсортируйте данные `rnds`, в алфавитном порядке, по возрастанию чисел.
## 2
Сохраните эти первые 10 записей датасета titanic в файл `titanic.csv` для последующих заданий:
```
PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C
3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S
4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S
5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S
6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q
7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S
8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S
9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S
10,1,2,"Nasser, Mrs. Nicholas (Adele Achem)",female,14,1,0,237736,30.0708,,C
```
## 3
Выведите первую колонку, используя `awk`.
## 4
Выведите содержимое файла без заголовка.
## 5
Выведите первую и третью колонку файла, используя `awk`.
## 6
Выведите только те строки, которые содержат строку `male` или `female`:
## 7
Отсортируйте значения `titanic.csv` по значению `Ticket` (9 колонка):
## 8
Уберите дублирующиеся строки на основании третьей колонки, используя `awk`.
## 9
Посчитайте сумму колонки `Fare`, используя `awk`.
## 10
Сконвертируйте файл из csv в json формат, используя `jq`.
## 11
Используя `awk` сконвертируйте строки со значениями из колонок `PassengerId`, `Survived`, `Pclass` файла в набор `SQL INSERT` утверждений, которые можно использовать для импорта в SQL базу данных. Используйте `awk`.
## 12
Конвейеры Unix позволяли организовывать сложные преобразования данных ещё до фреймворков обработки больших данных и сейчас иногда могут быть даже быстрее [Adam D. Command-line Tools can be 235x Faster than your Hadoop Cluster].
Найдите гистограмму слов по методу mapreduce с помощью утилит и операторов конвейера. Гистограмма должна быть отсортирована по частоте встречи слова в тексте.
MapReduce выполняет следующие действия в первой фазе: разбивает содержимое файла на слова, сортирует их, каждому слову сопоставляет 1. Во второй фазе складывает единицы каждого слова, что даёт конечный результат. Используйте любой набор утилит и конструкций bash. Одно из решений задействует: `uniq`, `sort`, `cat`, `sed`.
## 13
Повысьте права до пользователя root с помощью команды `su - root`. Найдите в системном логе `/var/log/auth.log` события "authentication failure", уберите начало строки до "authentication failure" и сохраните их в файл. Следуя правилам хорошего тона, после выполнения операций не забудьте выйти из аккаунта суперпользователя.
## 14
Выведите 10 самых больших открытых файлов в системе, используя `lsof` и `awk`.
# Man страницы
```
man awk
man lsof
man sort
man uniq
man cat
man sed
man jq
man su
```
# Ссылки
[Adam D. Command-line Tools can be 235x Faster than your Hadoop Cluster] https://adamdrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html

@ -0,0 +1,117 @@
# Задания на обработку данных в bash
## 1
Вызовите `"for f in `seq 20`; do echo $RANDOM >> rnds; done"` и отсортируйте данные `rnds`, в алфавитном порядке, по возрастанию чисел.
```
sort rnds
sort -n rnds
```
## 2
Сохраните эти первые 10 записей датасета titanic в файл `titanic.csv` для последующих заданий:
```
PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C
3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S
4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S
5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S
6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q
7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S
8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S
9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S
10,1,2,"Nasser, Mrs. Nicholas (Adele Achem)",female,14,1,0,237736,30.0708,,C
```
## 3
Выведите первую колонку, используя `awk`.
```
awk -F, '{print $1}' file.csv
```
## 4
Выведите содержимое файла без заголовка.
```
tail -n +2 file.csv
```
## 5
Выведите первую и третью колонку файла, используя `awk`.
```
awk -F, '{print $1 "," $3}' file.csv
```
## 6
Выведите только те строки, которые содержат строку `male` или `female`:
```
grep "female" file.csv
```
## 7
Отсортируйте значения `titanic.csv` по значению `Ticket` (9 колонка):
```
sort -t, -k2 file.csv
```
## 8
Уберите дублирующиеся строки на основании третьей колонки, используя `awk`.
```
awk -F, '!seen[$1]++' file.csv
```
## 9
Посчитайте сумму колонки `Fare`, используя `awk`.
```
awk -F, '{sum+=$3} END {print sum}' file.csv
```
## 10
Сконвертируйте файл из csv в json формат, используя `jq`.
```
jq -R -r 'split(",") | {name:.[0],age:.[1]}' file.csv
```
## 11
Используя `awk` сконвертируйте строки со значениями из колонок `PassengerId`, `Survived`, `Pclass` файла в набор `SQL INSERT` утверждений, которые можно использовать для импорта в SQL базу данных. Используйте `awk`.
```
awk -F, '{printf "INSERT INTO table VALUES (\"%s\", \"%s\", \"%s\");\n", $1, $2, $3}' file.csv
```
## 12
Конвейеры Unix позволяли организовывать сложные преобразования данных ещё до фреймворков обработки больших данных и сейчас иногда могут быть даже быстрее [Adam D. Command-line Tools can be 235x Faster than your Hadoop Cluster].
Найдите гистограмму слов по методу mapreduce с помощью утилит и операторов конвейера. Гистограмма должна быть отсортирована по частоте встречи слова в тексте.
MapReduce выполняет следующие действия в первой фазе: разбивает содержимое файла на слова, сортирует их, каждому слову сопоставляет 1. Во второй фазе складывает единицы каждого слова, что даёт конечный результат. Используйте любой набор утилит и конструкций bash. Одно из решений задействует: `uniq`, `sort`, `cat`, `sed`.
```
cat /var/log/dpkg.log | sed 's/ /\n/g' | sort -k1 | uniq -c | sort -k1 -n
```
## 13
Повысьте права до пользователя root с помощью команды `su - root`. Найдите в системном логе `/var/log/auth.log` события "authentication failure", оставьте в строке только дату и имя пользователя и сохраните их в файл. Следуя правилам хорошего тона, после выполнения операций не забудьте выйти из аккаунта суперпользователя.
```
cat /var/log/auth.log | grep 'authentication failure' | sed 's/^\(.\{15\}\).*authentication failure; logname=\(\w\+\) .*/\1 \2/g'
```
## 14
Выведите 10 самых больших открытых файлов в системе, используя `lsof` и `awk`.
```
lsof / | awk '{ if($7 > 1048576) print $7/1048576 "MB" " " $9 " " $1 }' | sort -n -u | tail
```
# Man страницы
```
man awk
man lsof
man sort
man uniq
man cat
man sed
man jq
man su
```
# Ссылки
[Adam D. Command-line Tools can be 235x Faster than your Hadoop Cluster] https://adamdrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html

@ -1,12 +0,0 @@
# Задания на обработку данных в bash
## 1
Найдите на удалённом сервере в системном логе события "authentication failure" в /var/log/auth.log, уберите начало строки до "authentication failure" и сохраните их в файл.
## 2
Вызовите "for f in `seq 20`; do echo $RANDOM >> rnds; done" и отсортируйте данные rnds, в алфавитном порядке, по возрастанию чисел.
## 3
Конвейеры Unix позволяли организовывать сложные преобразования данных ещё до фреймворков обработки больших данных. Найдите гистограмму слов по методу mapreduce с помощью утилит и операторов конвейера. Гистограмма должна быть отсортирована по частоте встречи слова в тексте.
MapReduce выполняет следующие действия в первой фазе: разбивает содержимое файла на слова, сортирует их, каждому слову сопоставляет 1. Во второй фазе складывает единицы каждого слова, что даёт конечный результат. Используйте любой набор утилит и конструкций bash. Одно из решений задействует: uniq, sort, cat, sed.

@ -1,18 +1,18 @@
# Задание 3 # Задание 3
0. Узнайте статус сервиса systemd-networkd и systemd-resolved 0. Узнайте статус сервиса `systemd-networkd` и `systemd-resolved`
``` ```
# systemctl status systemd-networkd # systemctl status systemd-networkd
# systemctl status systemd-resolved # systemctl status systemd-resolved
``` ```
1. Активируйте networkd, если он не активирован (disabled) 1. Активируйте `networkd`, если он не активирован (disabled)
``` ```
# systemctl enable systemd-networkd # systemctl enable systemd-networkd
# systemctl enable systemd-resolved # systemctl enable systemd-resolved
``` ```
2. Запустите networkd, если он не запущен (inactive, dead) 2. Запустите `networkd`, если он не запущен (inactive, dead)
``` ```
# systemctl start systemd-networkd # systemctl start systemd-networkd
# systemctl start systemd-resolved # systemctl start systemd-resolved
@ -23,10 +23,10 @@
# ip link # ip link
``` ```
4. Для настройки интерфейса ens18 машины stud1-2v1 создайте 4. Для настройки интерфейса `ens18` машины `stud1-2v1` создайте
или отредактируйте в каждой /etc/systemd/network/ens18.network. или отредактируйте в каждой `/etc/systemd/network/ens18.network`.
Адрес машины взят из такой сети, в которой присутствует шлюз в Адрес машины взят из такой сети, в которой присутствует шлюз в
интернет 10.160.179.1. интернет `10.160.179.1`.
конфигурация ens18.network машины stud1-2v1 конфигурация ens18.network машины stud1-2v1
``` ```
@ -48,16 +48,16 @@ Gateway=10.160.179.1
stud@stud1-2v1$ ping 1.1.1.1 stud@stud1-2v1$ ping 1.1.1.1
``` ```
7. Для настройки DNS ens18 машины stud1-2v1 отредактируйте 7. Для настройки DNS `ens18` машины `stud1-2v1` отредактируйте
/etc/systemd/resolved.conf. /etc/systemd/resolved.conf.
конфигурация resolved.conf машины stud1-2v1 конфигурация `resolved.conf` машины `stud1-2v1`
``` ```
[Resolve] [Resolve]
DNS=1.1.1.1 DNS=1.1.1.1
``` ```
8. Перезагрузите systemd-resolved 8. Перезагрузите `systemd-resolved`
``` ```
# systemctl restart systemd-resolved # systemctl restart systemd-resolved
``` ```

@ -1,14 +1,14 @@
# Задание 1 # Задание 1
Для виртуальных машин studX-1vX и studX-2vX настройте статический адрес в помощью systemd в подсети 192.168.Х.0/24. Используйте команду networkctl и файлы настроек /etc/systemd/network/ens18.network. Проверьте, что машины видят друг друга с помощью команды ping IP-адрес-соседней-машины. Для виртуальных машин `studX-1vX` и `studX-2vX` настройте статический адрес в помощью `systemd` в подсети `192.168.Х.0/24`. Используйте команду `networkctl` и файлы настроек `/etc/systemd/network/ens18.network`. Проверьте, что машины видят друг друга с помощью команды `ping IP-адрес-соседней-машины`.
# Задание 2 # Задание 2
На машине studX-1vX настройте в подсети 192.168.X.0/24 DHCP сервер в файле /etc/systemd/network/ens18.network. На другой машине studX-2vX настройте получение IP адреса по DHCP. Проверьте, что машины видят друг друга. На машине `studX-1vX` настройте в подсети `192.168.X.0/24` DHCP сервер в файле `/etc/systemd/network/ens18.network`. На другой машине `studX-2vX` настройте получение IP адреса по DHCP. Проверьте, что машины видят друг друга.
# Задание 3 # Задание 3
На машине studX-1vX настройте доступ в интернет. В настройках Hardware измените Network Device на vmbr499, перейдя таким образом в другую vlan. В качестве шлюза используйте адрес 10.160.179.1. В качестве адреса возьмите 10.160.179.200, прибавив X к последнему октету. На машине `studX-1vX` настройте доступ в интернет. В настройках Hardware измените Network Device на `vmbr499`, перейдя таким образом в другую `vlan`. В качестве шлюза используйте адрес `10.160.179.1`. В качестве адреса возьмите `10.160.179.200`, прибавив `X` к последнему октету.
# Задание 4 # Задание 4

@ -3,6 +3,8 @@
### 0. ### 0.
Обновите список пакетов из настроенных репозиториев в /etc/apt/sources.list командой apt. Обновите список пакетов из настроенных репозиториев в /etc/apt/sources.list командой apt.
; TODO как должен выглядеть sources.list
### 1. ### 1.
Установите пакет apt-file с помощью apt. Установите пакет apt-file с помощью apt.

@ -2,20 +2,22 @@
## Подготовка среды проведения лабораторных работ ## Подготовка среды проведения лабораторных работ
Лабораторные проводятся на виртуальных машинах в системе виртуализации Proxmox. Лабораторные проводятся на виртуальных машинах в системе виртуализации Proxmox. Задания выкладываются в публичный git репозиторий. Для получения новых заданий студенты первоначально скачивают их по ссылке командой `git clone`, а затем в начале каждого урок обновляют их командой `git pull`.
Определим N как количество студентов умноженное на 1.5 и округлим в большую сторону. Определим X как идентификатор от 1 до N. Будем считать, что N - количество студентов умноженное на 1.5, округлённое в большую сторону. X - идентификатор студента от 1 до N.
Создайте N пользователей в Proxmox с именами studX (stud1, stud2, ...). Используйте Realm "Proxmox VE authentication server". Создайте N пользователей в Proxmox с именами studX (stud1, stud2, ...). Используйте Realm "Proxmox VE authentication server".
Загрузите образ debian-11.4.0-amd64-netinst.iso в Proxmox хранилище.
Для массового создания виртуальных машин рекомендуется использовать возможность Proxmox конвертации виртуальной машины в шаблон. Из шаблона копия создаётся на порядки быстрее по времени, чем при полном клонировании. Следуйте следующим шагам: Для массового создания виртуальных машин рекомендуется использовать возможность Proxmox конвертации виртуальной машины в шаблон. Из шаблона копия создаётся на порядки быстрее по времени, чем при полном клонировании. Следуйте следующим шагам:
1. настройте машину с общими для всех копий настройками, 1. настройте машину с общими для всех копий настройками,
2. преобразуйте её в шаблон (template), 2. преобразуйте её в шаблон (template),
3. создайте клоны из шаблона и донастройте, если необходимо. 3. создайте клоны из шаблона и донастройте, если необходимо,
4. сделайте snapshot основных машин, чтобы вы и студенты имели возможность отката до рабочего состояния.
При наличии нескольких дисков рекомендуется RAID оптимизирующий производительность. Неправильный raid или медленный тип диска может привести к существенному замедлению работы во время установки ОС или пакетов. При наличии нескольких дисков рекомендуется RAID оптимизирующий производительность. Неправильный raid или медленный тип диска может привести к существенному замедлению работы во время установки ОС или пакетов.
Загрузите образ debian-11.4.0-amd64-netinst.iso в Proxmox хранилище.
### Основные виртуальные машины ### Основные виртуальные машины
@ -36,13 +38,15 @@
- 8 Гб оперативной памяти, - 8 Гб оперативной памяти,
- 16 Гб дискового пространства. - 16 Гб дискового пространства.
Каждой виртуальной машине назначьте статический IPv4 адрес 10.160.179.10 + X (10.160.179.11, 10.160.179.12, ...). Каждой виртуальной машине назначьте статический IPv4 адрес 10.160.179.10 + X (10.160.179.11, 10.160.179.12, ...). Используйте инструкцию из задания про настройку сети данного учебного модуля.
Установите минимальный дистрибутив debian на каждую. Установите пакеты: Установите минимальный дистрибутив debian на каждую. Установите пакеты:
- man-db, - man-db,
- ssh, - ssh,
- vim, - vim,
- tree. - tree,
- jq,
- lsof.
Удалите пакет ifupdown. Удалите пакет ifupdown.

Loading…
Cancel
Save