Введение
Добро пожаловать на практическую лабораторную работу по выполнению команд и обработке текста в Linux! Если вы новичок в Linux, не волнуйтесь — мы будем сопровождать вас на каждом этапе. В этой лабораторной работе мы изучим, как эффективно запускать несколько команд и использовать мощные инструменты для обработки текста. К концу занятия вы научитесь объединять команды, выполнять поиск по тексту и манипулировать данными как профессионал!
Последовательное выполнение команд
В Linux можно запускать несколько команд одну за другой в одной строке. Это особенно полезно, когда нужно выполнить ряд связанных задач.
Начнем с простого примера. Мы выведем текущую дату, а затем список содержимого вашего домашнего каталога:
date && ls ~
Вот что делает эта команда:
date: отображает текущую дату и время.&&: этот символ означает «и». Он указывает Linux выполнить следующую команду только в том случае, если первая завершилась успешно.ls ~: выводит содержимое вашего домашнего каталога (символ~представляет ваш домашний каталог).
Введите эту команду в терминале и нажмите Enter. Вы должны увидеть сегодняшнюю дату, за которой последует список файлов и папок в вашем домашнем каталоге.
Если после даты вы не видите списка файлов, не волнуйтесь! Возможно, ваш домашний каталог пуст. Вы можете попробовать ls /home/labex, чтобы убедиться, что вывод есть.
Условное выполнение команд
На этом этапе мы изучим, как использовать условные операторы для управления выполнением команд в зависимости от успеха или неудачи предыдущих команд.
Сначала попробуем выполнить условную команду с программой, которая еще не установлена:
which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"
В этой последовательности команд:
which cowsayпроверяет, установлена ли программаcowsay.&&— это логический оператор И, который выполняет следующую команду только в том случае, если предыдущая завершилась успешно.cowsay "Hello, LabEx"выводит ASCII-арт коровы, говорящей "Hello, LabEx".||— это логический оператор ИЛИ, который выполняет следующую команду только в том случае, если предыдущая завершилась с ошибкой.echo "cowsay is not installed"выводит сообщение о том, что cowsay не установлена.
Вы должны увидеть сообщение "cowsay is not installed", так как программа cowsay еще не установлена в системе.
Теперь давайте установим cowsay:
sudo apt-get update && sudo apt-get install -y cowsay
и снова выполним ту же команду:
which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"
На этот раз вы должны увидеть ASCII-арт коровы, говорящей "Hello, LabEx".
Этот пример демонстрирует, как использовать && и || для создания последовательностей с условиями. && означает «выполнить, если предыдущая команда успешна», а || означает «выполнить, если предыдущая команда завершилась с ошибкой».
Разберем, что произошло:
До установки:
which cowsayзавершилась с ошибкой, так какcowsayне была установлена.- Поскольку левая часть
&&не выполнилась,cowsay "Hello, LabEx"не была запущена. - Неудачное выражение
which cowsay && cowsay "Hello, LabEx"активировало||, поэтому выполнилась командаecho "cowsay is not installed".
После установки:
which cowsayзавершилась успешно, поэтому выполниласьcowsay "Hello, LabEx".- Выполнять команду после
||не потребовалось.
Попробуйте создать свои собственные последовательности команд с использованием этих операторов!
Введение в конвейеры (pipelines)
Конвейеры — это мощная функция в Linux, позволяющая соединять вывод одной команды с вводом другой. Это делается с помощью символа | (pipe).
Начнем с простого примера:
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: показать только первые 5 строк вывода.
Вы должны увидеть вывод, похожий на этот:
root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
Каждая строка показывает имя пользователя и его домашний каталог, разделенные двоеточием.
Комбинирование grep с конвейерами и последовательностями команд
На этом этапе мы изучим, как использовать grep в сочетании с конвейерами и последовательностями команд для более продвинутой обработки текста.
Начнем с поиска всех строк, содержащих "PATH" в вашем файле .zshrc, и подсчитаем их:
grep "PATH" ~/.zshrc | wc -l
Этот конвейер сначала использует grep для поиска строк с "PATH", а затем передает вывод в wc -l для подсчета строк.
Теперь используем последовательность команд, чтобы проверить, существует ли "PATH", и затем показать строки, содержащие "HOME", только если первая проверка прошла успешно:
grep -q "PATH" ~/.zshrc && grep "HOME" ~/.zshrc
Опция -q заставляет первый grep работать в тихом режиме, поэтому он проверяет наличие совпадения, не выводя строки с "PATH". Если первая команда завершается успешно, второй grep выводит строки, содержащие "HOME".
Попробуем более сложный пример. Мы будем искать строки, содержащие "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 указывает wc подсчитывать строки. Вы должны увидеть число, за которым следует имя файла.
Теперь подсчитаем количество слов в первых 10 строках /etc/passwd:
head -n 10 /etc/passwd | wc -w
Этот конвейер выполняет два действия:
head -n 10 /etc/passwd: получает первые 10 строк файла.wc -w: подсчитывает слова в этих строках.
Вы должны увидеть число, представляющее количество слов.
Сортировка с помощью sort
Команда sort используется для сортировки строк текста. Давайте используем ее для сортировки файла /etc/passwd по третьему полю (идентификатор пользователя):
sort -t: -k3 -n /etc/passwd | head -n 5
Вот что делает каждая часть:
-t:: использовать:в качестве разделителя полей.-k3: сортировать на основе третьего поля.-n: сортировать численно (вместо алфавитного порядка).| head -n 5: показать только первые 5 строк вывода.
Вы должны увидеть первые пять строк /etc/passwd, отсортированные по идентификатору пользователя (третье поле).
Удаление дубликатов с помощью uniq
Команда uniq используется для удаления или идентификации повторяющихся строк в отсортированном тексте. Давайте используем ее, чтобы найти уникальные типы оболочек (shell) в /etc/passwd:
cut -d: -f7 /etc/passwd | sort | uniq
Этот конвейер выполняет три действия:
cut -d: -f7 /etc/passwd: извлекает 7-е поле (оболочку) из каждой строки.sort: сортирует строки в алфавитном порядке.uniq: удаляет повторяющиеся строки.
Вы должны увидеть список уникальных путей к оболочкам, используемым в системе.
Теперь давайте подсчитаем, сколько пользователей используют каждую оболочку:
cut -d: -f7 /etc/passwd | sort | uniq -c
Опция -c добавляет перед строками количество их вхождений. Вы должны увидеть каждый путь к оболочке, перед которым стоит число, указывающее, сколько пользователей используют эту оболочку.
Резюме
Поздравляем! Вы завершили эту лабораторную работу по выполнению команд и обработке текста в Linux. Давайте повторим то, что вы узнали:
- Вы можете запускать команды последовательно с помощью
&&и условно с помощью||. - Конвейеры (
|) позволяют соединять несколько команд, передавая вывод одной в качестве ввода для следующей. cutотлично подходит для извлечения определенных частей строк в файле.grepпомогает искать определенные шаблоны в тексте.wcможет подсчитывать строки, слова и символы в тексте.sortупорядочивает строки текста в определенном порядке.uniqудаляет дубликаты из отсортированного текста и может подсчитывать вхождения.
Эти инструменты являются фундаментальными для обработки текста в Linux. Продолжая свой путь в Linux, вы найдете бесчисленное множество способов комбинировать эти команды для решения сложных задач обработки текста. Не бойтесь экспериментировать и пробовать новые комбинации!
Помните, что практика — залог успеха. Попробуйте использовать эти команды с разными файлами и опциями, чтобы углубить свое понимание. Если вы когда-нибудь забудете, как работает команда, вы всегда можете использовать команду man (например, man grep), чтобы просмотреть ее руководство.
Продолжайте исследовать и удачного обучения Linux!



