103 added md

This commit is contained in:
semaev
2017-10-16 13:25:36 +03:00
parent 34b2ad1011
commit 545a6c6e03
6 changed files with 419 additions and 0 deletions
+99
View File
@@ -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");_
+107
View File
@@ -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__")._
+43
View File
@@ -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**
+73
View File
@@ -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__)._
+38
View File
@@ -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** , выводящий сведения о запущенных процессах в реальном режиме в консоль. Для изменения критерия сортировки процессов используются символы "<" и ">".
+59
View File
@@ -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__);_