Введение
Добро пожаловать на практическое занятие по выполнению команд и обработке текста в Linux! Если вы новичок в Linux, не волнуйтесь — мы проведем вас через каждый шаг. В ходе этой лабораторной работы мы изучим, как эффективно запускать несколько команд и использовать мощные инструменты для обработки текстовых данных. К концу занятия вы научитесь комбинировать команды, выполнять поиск в тексте и манипулировать данными как настоящий профессионал!
Последовательное выполнение команд
В Linux можно запускать несколько команд одну за другой в одной строке. Это особенно удобно, когда нужно выполнить серию связанных задач.
Начнем с простого примера. Мы выведем текущую дату, а затем отобразим содержимое вашего домашнего каталога:
date && ls ~
Вот что делает эта команда:
date: показывает текущую дату и время.&&: этот символ означает логическое «И». Он приказывает системе запустить следующую команду только в том случае, если первая завершилась успешно.ls ~: выводит список содержимого вашего домашнего каталога (символ~является сокращением для домашней директории пользователя).
Введите эту команду в терминал и нажмите Enter. Вы увидите сегодняшнюю дату, а следом — список файлов и папок в вашем домашнем каталоге.
Если после даты список файлов не появился, не переживайте! Возможно, ваш домашний каталог просто пуст. Попробуйте выполнить ls /home/labex, чтобы гарантированно увидеть результат.
Условное выполнение команд
На этом этапе мы разберем, как использовать условные операторы для управления выполнением команд в зависимости от успеха или неудачи предыдущих действий.
Сначала попробуем запустить условную команду с программой, которая еще не установлена:
which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"
В этой последовательности:
which cowsayпроверяет наличие программыcowsayв системе.&&— логический оператор «И», который выполняет следующую команду только при успехе предыдущей.cowsay "Hello, LabEx"выводит ASCII-графику коровы, произносящей фразу.||— логический оператор «ИЛИ», который выполняет следующую команду только в случае ошибки предыдущей.echo "cowsay is not installed"выводит сообщение о том, что программа не установлена.
Вы должны увидеть сообщение "cowsay is not installed", так как программа еще не установлена.
Теперь установим cowsay:
sudo apt-get update && sudo apt-get install -y cowsay
И запустим ту же команду снова:
which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"
На этот раз вы увидите корову, говорящую "Hello, LabEx".
Этот пример наглядно показывает работу && и ||. && означает «выполни, если всё прошло успешно», а || — «выполни, если произошла ошибка».
Разберем подробнее, что произошло:
До установки:
which cowsayвыполнилась (но ничего не нашла).- Из-за
&&была предпринята попытка запуститьcowsay "Hello, LabEx", которая провалилась. - Поскольку
cowsayне сработала, выполнилась команда после||(echo "cowsay is not installed").
После установки:
which cowsayзавершилась успешно, поэтому сработала командаcowsay "Hello, LabEx".- Выполнять команду после
||системе не потребовалось.
Попробуйте составить свои собственные цепочки команд, используя эти операторы!
Знакомство с конвейерами
Конвейеры (pipelines) — это мощная функция Linux, позволяющая передавать вывод одной команды на вход другой. Для этого используется символ | (вертикальная черта).
Начнем с простого примера:
ls -l /etc | less
Разбор команды:
ls -l /etc: выводит содержимое каталога/etcв подробном формате.|: перенаправляет результат первой команды во вторую.less: программа, позволяющая удобно пролистывать длинные тексты.
После запуска вы увидите список файлов. Используйте стрелки «вверх» и «вниз» для навигации и нажмите q, чтобы выйти.
Теперь попробуем более сложный конвейер:
ls -l /etc | grep '^d' | wc -l
Эта команда подсчитывает количество подкаталогов в /etc. Вот как это работает:
ls -l /etc: формирует подробный список содержимого/etc.grep '^d': фильтрует строки, оставляя только те, что начинаются с буквы 'd' (так помечаются директории).wc -l: подсчитывает количество полученных строк (что соответствует количеству папок).
На экране появится число — общее количество директорий в /etc.
Использование cut для извлечения полей
Команда cut незаменима, когда нужно вырезать определенные части из каждой строки файла. Мы используем её для извлечения имен пользователей и их домашних каталогов из файла /etc/passwd, где хранится информация об учетных записях системы.
Выполните следующую команду:
cut -d: -f1,6 /etc/passwd | head -n 5
Разберем параметры:
cut: команда для извлечения фрагментов строк.-d:: задает:в качестве разделителя (символа, разделяющего поля).-f1,6: указывает извлечь 1-е и 6-е поля (логин и домашний каталог).|: передает результат дальше.head -n 5: ограничивает вывод первыми пятью строками.
Вы увидите результат, похожий на этот:
root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
Каждая строка содержит имя пользователя и путь к его папке, разделенные двоеточием.
Сочетание grep с конвейерами и последовательностями
На этом этапе мы изучим, как использовать grep в связке с конвейерами и цепочками команд для продвинутой обработки текста.
Для начала найдем все строки, содержащие "PATH" в вашем файле конфигурации .zshrc, и подсчитаем их количество:
grep "PATH" ~/.zshrc | wc -l
Здесь grep находит нужные строки, а wc -l считает их.
Теперь воспользуемся последовательностью команд, чтобы найти "PATH", и если поиск будет успешным, найти также "HOME":
grep "PATH" ~/.zshrc && grep "HOME" ~/.zshrc
Строки с "HOME" отобразятся только в том случае, если в файле было найдено хотя бы одно упоминание "PATH".
Рассмотрим более сложный пример. Найдем строки, содержащие "bin" в файле /etc/passwd, отсортируем их и выведем первые 5:
grep "bin" /etc/passwd | sort | head -n 5
Этот конвейер выполняет три действия:
- Ищет строки с упоминанием "bin".
- Сортирует их по алфавиту.
- Показывает только первые 5 результатов.
Наконец, объединим всё изученное. Мы поищем строки с "sh" в /etc/passwd, посчитаем их, и в зависимости от результата либо выведем их на экран, либо покажем сообщение:
grep "sh" /etc/passwd | wc -l | {
read count
[ $count -gt 5 ] && grep "sh" /etc/passwd || echo "Found $count lines, not enough to display."
}
Эта сложная конструкция делает следующее:
- Ищет строки с "sh".
- Считает их количество.
- Если количество больше 5, выводит сами строки.
- Если 5 или меньше — выводит сообщение с указанием найденного количества.
Примечание: При вводе многострочных команд в терминале может потребоваться нажать Alt+Enter после каждой строки (кроме последней) для переноса, или же просто введите всю команду в одну длинную строку.
Попробуйте запустить эти команды и поэкспериментируйте с собственными комбинациями!
Подсчет с помощью wc
Команда wc (word count) предназначена для подсчета количества строк, слов и байтов в тексте.
Сначала посчитаем количество строк в файле /etc/passwd:
wc -l /etc/passwd
Опция -l указывает на подсчет строк. Вы увидите число и имя файла.
Теперь посчитаем количество слов в первых 10 строках того же файла:
head -n 10 /etc/passwd | wc -w
Этот конвейер работает так:
head -n 10 /etc/passwd: берет первые 10 строк файла.wc -w: считает количество слов в этом фрагменте.
На выходе вы получите число, соответствующее количеству слов.
Сортировка с помощью sort
Команда sort используется для упорядочивания строк текста. Давайте отсортируем файл /etc/passwd по третьему полю (идентификатор пользователя — UID):
sort -t: -k3 -n /etc/passwd | head -n 5
Разбор параметров:
-t:: использовать:как разделитель полей.-k3: сортировать по третьему полю.-n: сортировать как числа (а не по алфавиту).| head -n 5: показать только первые 5 строк.
Вы увидите первые пять записей из /etc/passwd, упорядоченных по возрастанию UID.
Удаление дубликатов с помощью uniq
Команда uniq используется для удаления или поиска повторяющихся строк в отсортированном тексте. Давайте найдем все уникальные типы оболочек (shells), используемые в системе:
cut -d: -f7 /etc/passwd | sort | uniq
Этот конвейер выполняет три шага:
cut -d: -f7 /etc/passwd: извлекает 7-е поле (путь к оболочке).sort: сортирует строки по алфавиту (обязательно для работыuniq).uniq: удаляет повторяющиеся строки.
Вы увидите список уникальных путей к оболочкам.
Теперь посчитаем, сколько пользователей используют каждую из оболочек:
cut -d: -f7 /etc/passwd | sort | uniq -c
Опция -c добавляет перед каждой строкой число её повторений. Вы увидите количество пользователей для каждой оболочки.
Резюме
Поздравляем! Вы успешно завершили практическое занятие по выполнению команд и обработке текста в Linux. Давайте подведем итоги того, что вы изучили:
- Команды можно запускать последовательно с помощью
&&и настраивать условия выполнения через||. - Конвейеры (
|) позволяют связывать несколько команд, передавая вывод одной на вход следующей. cutотлично подходит для извлечения конкретных частей строк из файла.grepпомогает искать заданные шаблоны в тексте.wcпозволяет считать строки, слова и символы.sortупорядочивает строки текста в нужном порядке.uniqудаляет дубликаты из отсортированного текста и может подсчитывать количество совпадений.
Эти инструменты являются базовыми для обработки текста в Linux. Продолжая свое знакомство с системой, вы найдете бесчисленное множество способов комбинирования этих команд для решения сложных задач. Не бойтесь экспериментировать и пробовать новые сочетания!
Помните: практика — залог мастерства. Попробуйте использовать эти команды с другими файлами и опциями. Если вы забудете, как работает та или иная команда, вы всегда можете воспользоваться справочником man (например, man grep).
Удачи в дальнейшем изучении Linux!



