- •1. Просмотр каталога (list): ls -ключи путь/имя_файла
- •Примеры:
- •Изменение прав доступа к файлу
- •Смена владельца (change owner): chown имя_пользователя имена_файлов смена группы (change group): chgrp имя_группы имена_файлов
- •Создание жестких и символьных ссылок
- •Создание жесткой ссылки: ln имя_файла имя_ссылки
- •Создание символьной ссылки:
- •Ввод и вывод. Перенаправление ввода и вывода
- •Работа с текстом в файлах
- •Поиск строк в файле, соответствующих регулярному выражению: grep -ключи шаблон файлы
- •Сортировка строк текста : sort -ключи имена_файлов
- •Выделение колонки текста: cut -ключи имена_файлов
- •Замена символов в строках: tr набор_символов1 набор_символов2
- •Конвейеры
- •Текстовый редактор VI
- •Запуск редактора:
- •Командный режим.
- •If условие
- •If условие
- •Выполнение арифметических операций: команда expr
- •127 (Результат)
- •Задания:
Работа с текстом в файлах
Работа с текстом - одна из сильных сторон Linux, так как система содержит большое количество команд, выполняющих различные преобразования с текстом. Рассмотрим наиболее популярные из них.
Поиск строк в файле, соответствующих регулярному выражению: grep -ключи шаблон файлы
Регулярные выражения - система синтаксического разбора текстовых фрагментов по формализованному шаблону, основанная на системе записи образцов для поиска. Общая задача механизма регулярных выражений - находить или не находить совпадения строки или ее части с заданным шаблоном.
Ключи:
- v выводить только те строки, которые не соответствуют регулярному выражению (шаблону поиска)
-o выводить только ту часть строки, которая совпала с регулярным выражением
- l выводить только имена файлов, содержащих шаблон поиска, без вывода самих строк
- с выводить только количество найденных строк, соответствующих регулярному выражению
- n указывать номера найденных строк
- i поиск, нечувствительный к регистру
- r рекурсивный поиск во всех файлах и подкаталогах
Примеры:
grep -l "rm -r" cmd create delcreate
В перечисленных файлах (cmd, create, delcreate) ищет подстроку «rm -r», т.е. мы хотим определить в каком из сценариев (командных файлов) содержится эта команда.
grep -c "rm -r" cmd create delcreate
Сортировка строк текста : sort -ключи имена_файлов
Ключи:
-b игнорировать начальные пробелы
- u уникальная сортировка, повторяющиеся строки игнорируются
- с не сортировать, а только проверять отсортированы ли данные
- n сортировать численно, а не в алфавитном порядке
- f сортировка, нечувствительная к регистру
- r сортировка в обратном порядке
Команда sort может данные, полученные с входного потока сортировать и направлять на поток вывода.
Используем эту команду, для сортировки данных введенных с клавиатуры и записи в файл text1.
sort > text1 Запишем построчно слова:
bananas
carrots
apples
Эти слова со стандартного входа обрабатываются sort и уже в алфавитном порядке поступают на поток вывода, который перенаправлен в файл text1.
Выделение колонки текста: cut -ключи имена_файлов
Ключи:
-b заданиедиапазона в байтах (bytes)
- с задание диапазона в символах (characters )
- f выбирать заданные поля (fields)
- d C использовать символ C как разделитель между полями
Примечание: команда может использовать только один из ключей -b, -c или -f
Замена символов в строках: tr набор_символов1 набор_символов2
Набор_символов1 заменяется на набор_символов2, причем 1-ый символ из 1-го набора заменяется на 1-ый символ из 2-го набора, 2-ой - 2-ым и т.д.
Если второй набор не указан, то все символы, перечисленные в 1-ом наборе будут просто удалены.
Работа с повторяющимися подряд строками: uniq -ключи имена_файлов
Ключи:
-с подсчитать расположенные рядом повторяющиеся строки
- i нечувствительность к регистру
- u выводить только уникальные строки
- d выводить только повторяющиеся строки
Конвейеры
Нередко возникает ситуация, когда нужно обработать вывод одной команды какой- нибудь другой командой. То есть перенаправляется вывод одной команды не в файл, а на вход другой команды. Такой способ передачи называется конвейером и обозначается символом |.
Например, нужно отсортировать оглавление каталога в алфавитном порядке, т.е. результат команды ls передать команде sort.
ls | sort
Чтобы просматривать постранично длинный список файлов, выдаваемой командой ls, нужно использовать конвейер и обратиться к команде less, которая постранично выводит текст.
ls /usr/bin | sort | less
С помощью конвейера можно объединять в цепочку много команд:
Команда1 | команда2 | ... | командаN
Рассмотрим более сложный пример. Напишем команды, которые позволят определить файлы какого типа в каком количестве содержатся в домашнем каталоге пользователя.
find ~ -type f | xargs -n1 file | cut -d: -f2 | sort | uniq -c
Для этого сначала мы должны отделить файлы от каталогов, используя команду find с ключом - type f. Получим в результате список всех файлов, содержащихся в домашнем каталоге. У каждого файла, используя команду file мы можем определить тип. Проблема в том, что команде file нужно построчно подавать значения из имеющегося у нас списка всех файлов. Здесь на помощь приходит команда xargs, которая считывает данные с выходного потока одной команды и передает их другой команде в качестве аргумента (ключ -n1 позволяет считывать и передавать данные построчно).
Команда file делает вывод данных в следующем формате:
имя_файла : тип
Например, listtext : ASCII text
Нам нужны только типы файлов, их имена нас не интересуют. Нужно вырезать данные второй колонки, для этого часто используется команда cut, ключ -d указывает символ, разделяющий колонки (в данном случае это двоеточие), ключ -f для указания какую по счету взять колонку.
Полученные данные (списки типов файлов) необходимо отсортировать командой sort и при помощи команды uniq, которая работает с повторяющимися строками, подсчитать расположенные подряд повторяющиеся строки (ключ -с), т.е. типы файлов.
Задание:
1. Создайте в домашнем каталоге каталог Dr1, в нем каталоги Dr2 и Dr3. В Dr2 создайте два текстовых файла: FIO (запишите в него свои ФИО) и GR (запишите в него N группы). В Dr1 создайте файл INFO, перенаправляя вывод из файлов FIO и GR.
2. Поместите в файл KALEND, созданный в каталоге Dr2, календарь на текущий месяц.
3. В домашнем каталоге создайте файл list, который будет содержать список всех файлов, содержащихся в домашнем каталоге, в алфавитном порядке.
4. В домашнем каталоге создайте файл commandlist, который будет содержать список файлов из каталогов /bin, /usr/bin в обратном алфавитному порядке.
5. Используя команду wc - l (word count - подсчет слов, ключ - l позволяет подсчитать количество строк) и команду find или ls, создайте конвейер, который позволит вам подсчитать количество файлов (строк, выдаваемых командой find или ls) в каталоге /bin.
6. Создайте ссылку на каталог Dr3 в каталоге Dr2.
7.В каталоге Dr3 создайте жесткую ссылку HFIO на файл FIO, допишите в конец этого файла место жительства. Просмотрите какие изменения произошли в файле FIO.
4. Создайте текстовый файл в ошибочной раскладке (набирайте русский текст в латинском регистре). При помощи команды tr преобразуйте текст в кирилличную раскладку. (Примечание: в некоторых версиях Linux команда работает не корректно с кириллицей. В этом случае замените одни латинские символы на другие).
5. Используя команду grep найдите все файлы домашнего каталога, содержащие слово mkdir (используйте ключ -l) и сохраните список этих файлов в файле mkd.
7. В файле TREE, созданном в домашнем каталоге, запишите список всех файлов и подкаталогов, находящихся в каталоге Dr1.
8. В каталоге Dr2 создайте файл Link, в котором для каждого файла каталога Dr2 будут указаны количество жестких ссылок и имя файла.