Продолжаем изучать основы работы с командной строкой Linux.
С первой частью курса можно ознакомится тут.
Курс называется Learn the Command Line, и пройти его можно тут
Перенаправление вывода
Под таким термином подразумевается не просто вывод результата выполнения команды на экран, а передача его в другие команды или запись в файл.
Вывод на экран
Для отображения текста на экране(в консоли) можно использовать команду echo, она выведет на экран строку (прям как в PHP).
Например:
echo "Hello golos"
Сохранение в файл и чтение из него
Для записи в файл после основной команды следует поставить кавычку > и после неё указать имя файла.
Например:
echo "Hello Golos" > hello.txt
Такая команда запишет строку Hello в файл hello.txt. Если этого файла не существует - он будет создан.
Командой cat можно прочитать содержимое файла
cat hello.txt
Содержимое одного файла можно прочитать и сразу же положить в другой файл.
Давайте создадим пустой файл и запишем в него содержимое другого файла.
touch 1.txt
cat 1.txt
cat oceans.txt > 1.txt
cat 1.txt
Как видите - файл 1.txt был пустым, а потом в него было записано содержимое файла oceans.txt
Важно. Есть разница между операторами > и >>.
- перезапишет файл
- допишет в конец файла
Передача данных в команду
Что если нам нужно не просто записать строку в файл, а скажем узнать её размер?
Для передачи вывода в команду используется оператор | (вертикальная черта).
Например
cat volcanoes.txt | wc
Такой командой мы прочитаем содержимое файла volcanoes.txt и передадим его в команду wc, которая выведет на экран число переводов строк, слов и байт в файле volcanoes.txt.
Оператор | можно использовать несколько раз.
К примеру
cat volcanoes.txt | wc | cat > islands.txt
Такая команда прочитает файл volcanoes.txt, передаст его в функцию wc, затем результат будет передан в функцию cat, которая потом запишет его в файл islands.txt
Работа с содержимым файла
Сортировка строк файла
Если строки в файле необходимо отсортировать - сделать это можно командой sort
Попробуем прочитать файл обычным cat и sort:
cat lakes.txt
sort lakes.txt
Разница видна.
Ну и опираясь на пройденный материал вы легко сможете записать отсортированную выдачу в новый файл:
cat lakes.txt | sort > sorted-lakes.txt
Конечно можно сделать это и короче
sort lakes.txt > sorted-lakes.txt
Результат будет одинаковым.
Уникализация строк файла
По аналогии с функцией sort можно пользоваться функцией uniq:
uniq deserts.txt
Для наглядности сравним её с выдачей cat
Как вы можете заметить - строка Sahara Desert пропала из выдачи.
Комбинировать команды достаточно просто. К примеру:
sort deserts.txt | uniq > uniq-deserts.txt
Такой командой мы отсортируем содержимое файла deserts.txt, затем уникализируем вдачу и запишем в файл uniq-deserts.txt.
Поиск строки в файле
Для поиска строки в файле используется команда grep
После команды через пробел указываем строку для поиска и потом опять через пробел имя файла в котором искать.
Пример:
grep Mount mountains.txt
Так в файле mountains.txt будет искаться строка Mount.
На экран выведены все строки, в которых встречается Mount.
Если добавить аргумент i - то поиск будет регистронезависимым
grep -i Mount mountains.txt
Если вам необходимо найти строку во всех файлах в папке - нужно искать в этой папке рекурсивно(как удаление файлов)
grep -R Arctic /home/ccuser/workspace/geography
Такая команда будет искать строку Arctic во всех файлах в папке /home/ccuser/workspace/geography.
На выходе мы видим имя файла и найденную строку.
Замена строк в файле
Для поиска с заменой следует использовать оператор sed.
Первым аргументом ему передаётся строка для поиска и строка замены, а вторым файл, в котором нужно провести замену.
Например:
sed 's/snow/rain/' forests.txt
Такая команда найдёт в каждой строке файла forests.txt слово snow и заменит его на rain. Важно - заменено будет только первое вхождение.
Если вам нужно заменить все вхождения - добавьте вконце g(global)
sed 's/snow/rain/g' forests.txt
Возможности работы с командами
Настройки окружения
Редактор nano
Для того, чтобы отредактировать файл в редакторе nano следует просто написать nano и имя файла
nano hello.txt
Далее в редакторе пишите что вам нужно и для записи строки жмёте Ctrl+O
Выйти из редактора можно сочетанием клавиш Ctrl+X
Давайте создадим файл .bash_profile в домашней директории:
nano ~/.bash_profile
Затем пропишем в нём:
echo "Welcome, Jane Doe"
Затем запускаем:
source ~/.bash_profile
Создание алиасов
Добавим в начало файла:
alias pd="pwd"
Теперь запустим файл. Потом попробуем выполнить команду pd
pd
Как видите - алиас команды pwd сработал.
Давайте попробуем сделать другие алиасы:
alias ll="ls -la"
alias hy="history"
Работать это будет так:
Создание переменных окружения
Добавим в начале файла:
export USER="Jane Doe"
После сохранения файла запустите его. Затем пишите:
echo $USER
Так мы выведем на экран переменную, описанную в файле
Так же в консоли доступны уже существующие переменные. Например $PATH(хранит список каталогов) или $HOME(путь к домашнему каталогу). Так же доступна команда env - вернёт список переменных, которые можно использовать.
Окружение схематично можно представить так
Заглавное лого с сайта icon-icons.com
Отзыв о курсе
В данном материале рассмотрена работа с переменными окружения, создание алиасов команд. Если дополнить это оперированием входных и выходных потоков команд - можно писать полноценные скрипты. Создание скриптов таких подробно описано. Данный курс помог мне отточить навыки работы с командной строкой, несмотря на то, что я уже не один год ей активно пользуюсь.
Конспект подготовлен для Академии Голоса @academy
!Не ну вы правда все вот это понимаете?)))
Вы гений))))
Это только на первый взгляд выглядит сложным) Домохозяйки это называют "чёрный блокнот" :)
Командная строка - это фактически прямое общение с операционной системой компьютера, с его ПО. Посылать ей несложные команды достаточно просто. Синтаксис простой, но с рутовым доступом можно всё-всё случайно стереть:))
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
knopki, litrbooh, mishka, neo, chiliec, gildar, vik, tristamoff, chika25, gromozeka, voltash, sharps, vika-teplo, sva-lana, borisss, lenutsa, felicita, dmitrijv, sareon, dimas102, nerengot, lokkie, verdon, evgeniy1989
Поэтому я тоже проголосовал за него!
Если Вы проголосуете за этот комментарий, то поможете сделать "Доброго Кита" сильнее!