diff --git a/103_2.md b/103_2.md new file mode 100644 index 0000000..0db6448 --- /dev/null +++ b/103_2.md @@ -0,0 +1,99 @@ +**103.2** Управление текстовым потоком + +Студент должен уметь управлять фильтровать текстовый поток + +**Изучаем** : + +- применение текстовых фильтров с использованием встроенных команд UNIX + +**Термины и утилиты: ** + +- cat +- cut +- expand +- fmt +- head +- join +- less +- nl +- od +- paste +- pr +- sed +- sort +- split +- tail +- tr +- unexpand +- uniq +- wc + +Множество файлов в Linux неудобны для восприятия без предварительного форматирования, кроме того процесс обработки текстовой информации часто требует ее форматирования, обрезания, сортировки и т.д. Linux предлагает широкий набор инструментов редактирования текстового вывода, при этом следует заметить что указанные инструменты не затрагивают исходный файл (или текстовый поток), а форматируют его, выдавая полученный результат в консоль или другой файл. + +Простой вывод текста (без корректировки содержимого): + +Для вывода содержимого файла или объединения нескольких файлов на выводе используется команда **cat** , например: + +**с**** at **** 1. ****txt** **2.**** txt **** > 3. ****txt**** ** _(передать содержимое двух файлов в третий);_ + +Команда **join** объединяет строки нескольких файлов по общему полю и отправляет их на стандартный вывод. + +Команда **less** загружает файл постепенно и также отправляет его на вывод (удобно для больших файлов). + +Команда **nl** нумерует строки. + +Команда **pr** показывает, как содержимое файла будет выглядеть при выводе его на печать. + +Команда **paste** вставляет строки из одного файла в другой и отправляет результат на стандартный вывод. + +Команда **head** показывает первые строки файла, а **tail** – последние. + +Например: + +**head** **–**** n **** 2 / ****var**** / ****log**** / ****syslog**** ** _(вывести первые две строчки файла);_ + +**tail** **–**** f **** / ****var**** / ****log**** / ****syslog**** ** _(показывать последние строки файла, отображая содержимое в реальный момент времени);_ + +Команда **sort** может отсортировать содержимое файла по какому-нибудь признаку, например: + +**sort** **1.**** txt **** ** _(отсортировать строки по алфавиту);_ + +Команда **wc** позволяет посчитать количество символов и т.д. в текстовом потоке, например: + +**wc** **1.**** txt** _(посчитать количество строк, символов, слов);_ + + + +Вывод форматированного текста (с корректировкой содержимого): + +Команда **cut** используется для обрезания содержимого файлов на выводе, например: + +**с**** ut **** – ****c** **2,3,4,5,10 1.**** txt **** ** _(показывать только символы на указанных позициях: 2,3,4,5,10);_ + +Команда **expand** превращает символы табуляции в несколько пробелов, а **unexpand** наоборот – пробелы в символы табуляции. + +Команда **fmt** предназначена для форматирования текста различными способами, например: + +**fmt** **1.**** txt **** ** _(вывести содержимое файла в одну строку);_ + +**fmt** **–**** w **** 10 1. ****txt**** ** _(вывести содержимое файла в строки не больше 10 символов каждая);_ + +Команда **od** предназначена для конвертации текста в другой формат, например: + +**od** **–**** c **** 1. ****txt**** ** _(отобразить в кодировке_ _ASCI__);_ + +Команда **tr** предназначена для замены и удаления символов в текстовом потоке, например: + +**echo** **"**** HELLO ****" |** **tr** **–**** t ****L**** l **** ** _(заменить " __L__" на " __l__" в полученном на вводе тексте);_ + +Команда **split** может разбить файла по каким-либо критериям, например: + +**split** **–**** l **** 2 1. ****txt** _(разбить содержимое файла по две строчки);_ + +Команда **uniq** предназначена для поиска повторяющихся строк, например: + +**uniq** **–**** u **** 1. ****txt** _(показать только уникальные строки);_ + +**Sed** – отдельный мощный инструмент, понимающий групповые символы, шаблоны и т.д. Будет рассмотрен немного подробнее в дальнейших урока. Работает, например, так: + +**sed –e 's/socks/people/' 1.txt ** _( __заменить__ в __файле__ слово_ _"socks"_ _на_ _"people");_ \ No newline at end of file diff --git a/103_3.md b/103_3.md new file mode 100644 index 0000000..6c58949 --- /dev/null +++ b/103_3.md @@ -0,0 +1,107 @@ +**103.3** Основные операции с файлами + +Студент должен уметь управлять файлами и каталогами при помощи основных команд Linux + +**Изучаем** : + +- копирование, перенос и удаление файлов и каталогов; +- копирование нескольких файлов и каталогов, в том числе рекурсивно; +- удаление файлов и каталогов, в том числе рекурсивно; +- групповые символы (wildcard); +- отбор файлов по типу, размеру, датам и т.д.; +- работу с tar, cpio и dd. + +**Термины и утилиты: ** + +- cp +- find +- mkdir +- mv +- ls +- rm +- rmdir +- touch +- tar +- cpio +- dd +- file +- gzip +- gunzip +- bzip2 +- xz +- групповые символы + +Частой задачей администратора в Linux является работа с файлами и каталогами: создание, копирование, перемещение и удаление. Использование групповых символов вместе с инструментами консоли позволяют осуществлять эти действия с максимальной эффективностью. + +Для создания директорий используется команда **mkdir**** имя\_каталога **, для удаления пустого каталога -** rmdir ****имя\_каталога**. Просмотр содержимого текущей директории – **ls**. Например: + +**ls** **–**** l**_ (просмотреть содержимое текущего каталога);_ + +**ls**** fol ****\*** _ (посмотреть содержимого каталогов, имена которых начинаются с " __fol__");_ + +Для копирования используется команда **cp** **что\_копировать куда\_копировать** , например: + +**cp** **–**** R ****Folder**** NewFolder**_ (скопировать директорию " __Folder__" со всем содержимым в текущий каталог с именем новой директории " __NewFolder__");_ + +Для переноса используется команда **mv** **что\_переносить куда\_переносить** , например: + +**mv**** file ****.**** txt ****folder**** 1/** _(перенести " __file__. __txt__" в каталог " __folder__ 1" в текущей директории);_ + +Для удаления используется команда **rm**** что\_удалить**, например: + +**rm** **–**** rf ****folder**** 1 ** _(удалить каталог_ _folder__1 вместе с содержимым);_ + +Для создания пустого файла, или обновления метки доступа существующего, используется команда **touch** **имя\_файла,** а для получения информации о файле – команда **file**** имя\_файла**. + +Групповые символы, использующиеся при работе с текстовыми данными: + +- _\* – любое количество любых символов;_ +- **? ** _ – любой символ;_ +- **! ** _– не (любой символ кроме указанных);_ +- **[****ac****] ** _– __a_ _или_ _c__ ;_ +- **[****a ****-**** c****]** _ –_ _a __,_ _b__ ,_ _c__._ + +Например: + +**ls** **\* ** _(вывести содержимое всех каталогов);_ + +**ls** **?**** at ****.**** txt **** ** _(вывести содержимое файла с именем: любая первая буква, остальная часть имени " __at__. __txt__");_ + +**ls** **\***** at ****.**** txt **** ** _(вывести содержимое файла с именем, оканчивающимся на " __at__. __txt__");_ + +**ls** **![****ab****]\* ** _(вывести содержимое файла или каталога с именем, начинающимся с любых символов, кроме " __a__" и " __b__");_ + +Для поиска информации используется команда **find** , например: + +**find** **. –**** name ****"\ *****A**** \*" ** _(искать в текущей директории объекты, имеющие в имени символ " __A__");_ + +**find** **/**** etc **** – ****size** ** -5**** M **** ** _(искать в директории "/ __etc__" объекты размером менее 5 Мб);_ + +**find** ** . –**** type ****l** _(искать в текущей директории ссылки);_ + +В среде Linux существует несколько распространённых архиваторов, использующихся для распаковки и упаковки объектов в единый файл: + +- **с**** pio** - двоичный архиватор, копирующий информацию в архив и обратно; +- **dd** - копирование по блокам; +- **gzip** и **gunzip** - утилита сжатия и восстановления файлов (контейнер одного файла); +- bzip2 и bunzip2 - утилита сжатия и восстановления файлов (контейнер одного файла); +- xz и unxz - утилита сжатия и восстановления файлов (контейнер одного файла); +- tar - архиватор (работает с набором файлов и каталогов). + +Например: + +**find** **. –**** name ****"\*. ****txt****" | **** cpio **** – ****o** **> ../**** test ****.**** cpio** _(найти в текущей папке все файлы с расширением ". __txt__" и упаковать их в архив_ _test __.__ cpio__, расположив его на уровень выше текущей_ _директории);_ + +**cpio** **-**** id **** < **** test ****.**** cpio**_ (распаковать в текущий каталог архив " __test__. __cpio__", создавая при необходимости структуру директорий);_ + +**dd**** if ****=/**** dev ****/**** sdb ****of**** = ****drive****. ****img**** ** _(скопировать носитель / __dev__ / __sdb_ _в образ_ _drive__. __img__ , располагающийся в текущей директории);_ + +**gzip**** drive ****.**** img **** ** _(сжать образ " __drive__. __img__" до " __drive__. __img__. __gz__", удалив исходный файл);_ + +**bunzip**** 2 **** drive ****.**** img ****.**** bz ****2 ** _(распаковать архив " __drive__. __img__. __bz__ 2" в текущий каталог);_ + +**unxz**** drive ****.**** img ****.**** xz **** ** _(распаковать архив " __drive__. __img__. __xz__" в текущий каталог);_ + +**tar**** cvf ****arch****. ****tar** ** **** folder** _(упаковать каталог " __folder__" в архив " __arch__. __tar__")._ + +**tar** **–**** xvf ****archive****. ****tar**** ** _(распаковать архив " __archive__. __tar__")._ \ No newline at end of file diff --git a/103_4.md b/103_4.md new file mode 100644 index 0000000..5a3cac4 --- /dev/null +++ b/103_4.md @@ -0,0 +1,43 @@ +**103.4** Потоки, конвейеры и перенаправления + +Студент должен уметь управлять потоками для обработки текстовых данных + +**Изучаем** : + +- перенаправление стандартных ввода, вывода и ошибок; +- передачу вывода одной команды на ввод другой; +- использование вывода одной команды в качестве аргументов другой; +- получение выходных данных в файл и на стандартный вывод. + +**Термины и утилиты: ** + +- tee +- xargs + +- stdin +- stout +- stderr + +Linux традиционно использует потоки для ввода, вывода и ошибок. Обычно ввод – это клавиатура или файлы, а вывод ошибок и результатов происходит в консоль. Но часто бывает нужно объединить последовательность команд в конвейер, или отправить результат в какой-нибудь файл. + +Для того чтобы послать на ввод программы некоторые данные используется знак " **<**", например: + +**wc** **<** **file**** 1. ****txt**** ** _(использовать в качестве ввода для программы_ _wc_ _файл_ _file __.__ txt__);_ + +Для того чтобы послать вывод программы куда-нибудь, кроме стандартного направления, используется знак " **>**", например: + +**ls** **>** **list****. ****txt** _(перезаписать содержимое файла_ _list __.__ txt_ _результатом команды_ _ls__);_ + +**ls** **>>** **list****. ****txt** _(дописать в файл_ _list __.__ txt_ _результат команды_ _ls__);_ + +Для ввода, вывода и ошибок используются следующие обозначения: + +- **Stdin** _– стандартный ввод программы (обозначение "0");_ +- **Stdout** – _стандартный вывод программы (обозначение "1");_ +- **Stderr** – _стандартные ошибки программы (обозначение "2");_ + +Например: + +**l**** s bob 2> error.txt** + +**ls**** bob **** > **** result ****.**** txt **** 2> **** error ****.**** txt** \ No newline at end of file diff --git a/103_5.md b/103_5.md new file mode 100644 index 0000000..173f33e --- /dev/null +++ b/103_5.md @@ -0,0 +1,73 @@ +**103.5** Управление процессами в Linux + +Студент должен уметь создавать, отслеживать и завершать процессы + +**Изучаем** : + +- запуск задач в активном и фоновом режимах; +- настройку выполнения задачи после выхода из системы; +- способы отслеживания и сортировки активных процессов; +- завершение процессов. + +**Термины и утилиты: ** + +- & +- bg +- fg +- jobs +- kill +- nohup +- ps +- top +- free +- uptime +- pgrep +- pkill +- killall +- screen + +Linux содержит в себе множество инструментов для управления запущенными процессами: от сортировки, отслеживания состояния и загрузки системы до перевода процессов в фоновый режим и обратно. + +Посмотреть запущенные процессы в текущей консоли можно при помощи команды **jobs**. Для вывода всех запущенных в данный момент процессов (независимо от консоли) используется команда ps с различным набором ключей, например: + +**Ps**** aux** _(вывести процессы всех пользователей);_ + +Можно вывести процессы в консоль, отображая иерархию из взаимосвязи командой **pstree**. + +Для отображения идентификаторов процессов по определенному критерию можно использовать команду **pgrep** , например: + +**pgrep** **-**** l **** - ****u**** root **** ** _(отобразить все процессы пользователя_ _root__)_ + +Чтобы запустить процесс в фоновом режиме необходимо указать ключ **&** , например: + +**Sleep** **999 & ** _(запустить задачу_ _sleep_ _999 в фоновом режиме);_ + +Для перевода процесса из фонового режима в активный используется команда **fg** , обратно – **bg**. В качестве аргумента команды следует указать номер процесса (_его можно увидеть на выводе команды_ _jobs_). + +Для того чтобы процесс продолжал выполняться после выхода пользователя из системы, его следует запускать командой **nohup** , например: + +**nohup** ** **** sleep **** 1000 & ** _(запустить процесс "__sleep_ _1000" в фоновом режиме, и выполнять его даже в случае выхода пользователя из системы);_ + +Для остановки процесса используется команда **kill** , например: + +**kill** **2625** _ (выключить процесс с_ _PID__=2625);_ + +**killall**** sleep **** ** _(выключить все процессы с именем_ _sleep_ _для текущего пользователя)_ **;** + +Для остановки процессов по указанному критерию можно использовать команду **pkill** , например: + +**pkill**** refox **** ** _(остановить процесс, в имени которого есть символы " __refox__");_ + +Для просмотра информации о работающих процессах в режиме реального времени используется диспетчер задача **top**. Используя его можно сортировать запущенные задачи по различным критериям и останавливать их _(клавиша_ _K__)_ мягко _(__sigterm__)_ и жестко _(__sigkill__)_. + +Для отображения информации о времени работы системы и среднем времени загрузки АЧ используется команда **uptime**. + +Для отображения информации о загрузке ОЗУ и раздела подкачки используется команда **free**. + +Кроме того, Linux поддерживает работу с несколькими «экранами» при помощи команды **screen**. Она позволяет, в числе всего прочего, сворачивать запущенные приложения в консоли, в рамках той же консоли, например: + +**screen** **-**** S ****yandex**** ping ****ya****. ****ru**** ** _(создать экран с именем_ _yandex_ _для команды_ _ping __ya__. __ru__ );_ + +**screen** **–**** ls **** ** _(показать свернутые экраны);_ + +**screen** **-**** r ****yandex**** ** _(развернуть экран с именем_ _yandex__)._ \ No newline at end of file diff --git a/103_6.md b/103_6.md new file mode 100644 index 0000000..358ff83 --- /dev/null +++ b/103_6.md @@ -0,0 +1,38 @@ +**103.6** Изменение приоритетов процессов + +Студент должен уметь менять приоритеты выполняющихся процессов + +**Изучаем** : + +- приоритеты по умолчанию создаваемых процессов; +- запуск программ с повышенным и пониженным приоритетом; +- изменение приоритета уже запущенной программы. + +**Термины и утилиты: ** + +- nice +- ps +- renice +- top + +Несмотря на то, что Linux является довольно стабильной системой, которая умеет автоматически подстраиваться под текущие условия работы, иногда приходится вручную управлять приоритетами процессов, для контроля над ресурсами ПК. + +Для просмотра текущих процессов используется команда **ps** , например: + +**p**** s aux** _(отобразить процессы по всем пользователям);_ + +**ps** **–**** eo ****user**** , ****pid**** , ****pcpu**** , ****nice**** , ****comm** _(отобразить процессы, выводя указанные данные);_ + +Приоритет процесса определяется параметром **nice** (в Ubuntu может принимать значения от -20 до +19): чем ниже значение, тем выше приоритет. По умолчанию значение nice для каждого процесса равно "-10". + +Для запуска процесса с указанным приоритетом используется команда **nice** , например: + +**nice** **–**** n **** -20 **** ping ****ya****. ****ru**** ** _(запустить процесс с приоритетом "-20");_ + +Для изменения приоритета запущенного процесса используется команда **renice** , например: + +**renice 15 –p 10241 ** _(изменить приоритет процесса с_ _PID_ _"10421");_ + +**renice** **-15 –**** u ****semaev**** ** _(изменить приоритет процессов пользователя " __semaev__");_ + +Также для использования доступен диспетчер задач **top** , выводящий сведения о запущенных процессах в реальном режиме в консоль. Для изменения критерия сортировки процессов используются символы "<" и ">". \ No newline at end of file diff --git a/103_7.md b/103_7.md new file mode 100644 index 0000000..2eefce4 --- /dev/null +++ b/103_7.md @@ -0,0 +1,59 @@ +**103.7** Поиск информации при помощи регулярных выражений + +Студент должен уметь осуществлять поиск необходимых файлов и информации внутри них. + +**Изучаем** : + +- создание простых регулярных выражений; +- инструменты, опирающиеся на эти выражения, для поиска файлов. + +**Термины и утилиты: ** + +- grep +- egrep +- fgrep +- rgrep +- sed +- регулярные выражения. + +Частой задачей в Linux является поиск необходимых файлов и сортировка информации внутри них. Для этой задачи служат регулярные выражения – специальный язык поиска и изменения информации, обладающий своим синтаксисом. + +При отборе информации можно использовать стандартные групповые символы: + +- **^** _ - начало строки;_ +- **$ ** _ - конец строки;_ +- **. ** _ - любой символ;_ +- **\<**** a **** ** _- слово, начинающееся с " __a__";_ +- **\>**** a **** ** _-_ _c __лово, заканчивающееся на "__ a__";_ +- **a**** - ****z**** ] **** -** _диапазон от " __a__" до " __z__";_ +- **[^t]**** **** -** _не буква " __t__";_ +- **a|z**** **** -** _" __a__" __или "__ z __"__ ;_ +- и т.д.; + +Для простой сортировки набора строк используется команда **grep** , например: + +**grep**** oo ****file****. ****txt** _(отобразить в файле текст с двумя буквы « __o__ » подряд);_ + +**ls** **|** **grep**** ile** _(вывести названия содержимого каталога с набором символов ' __ile__');_ + +**grep**** ple ****$** **file****. ****txt** _(отобразить в файле_ _file __.__ txt_ _строки, заканчивающиеся на ' __ple__');_ + +Для расширенной сортировки и поиска по сложным регулярным выражениям используется команда **egrep** (также можно использовать **grep** **-**** E**), например: + +**egrep** **'^(****b ****|**** d****)'** **file****. ****txt** _(все строки, что начинаются с " __b__" или " __d__");_ + +**egrep** **'^[****a ****-**** k****]'** **file****. ****txt** _(все строки, что начинаются с " __a__" по " __k__");_ + +Для быстрой сортировки и поиска по набору символов без регулярных выражений используется команда **fgrep** (также можно использовать **grep** **-**** F**), например: + +**fgrep**** c ****$** **file****. ****txt** _ (отобразить в_ _file __.__ txt_ _последовательность символов " __c__ $");_ + +Для рекурсивной (включая вложенные каталоги и файлы) сортировки и поиска по набору символов используется команда **rgrep** (также можно использовать **grep** **-**** R**), например: + +**rgrep** ** **** word**_ (вывести позиции содержащие « __word__ » в текущем и всех вложенных каталогах__);_ + +Для изменения текстового потока согласно заданным правилам используется редактор sed, например: + +**sed** **–**** e ****' ****s**** / ****oo**** / ****aa**** /' ****file****. ****txt** _(заменить в_ _file __.__ txt_ _все " __oo__" на " __aa__" );_ + +**sed** **–**** re ****' ****s**** /^( ****B**** | ****b**** )/ ****C****' ****file****. ****txt** **>** **newfile****. ****txt** _(в строках, начинающихся с « __B__ » или « __b__ », заменить первую букву на «С» и сохранить результат в_ _newfile __.__ txt__);_ \ No newline at end of file