Вывести сообщение в консоль linux

Обновлено: 30.06.2024

эхо-команда

Существует также отдельная утилита /usr/bin/echo , но обычно встроенная версия оболочки имеет приоритет. Мы рассмотрим встроенную в Bash версию echo .

Синтаксис команды echo следующий:

При использовании команды echo следует учитывать несколько моментов.

echo Примеры

В следующих примерах показано, как использовать команду echo:

Вывести строку текста на стандартный вывод.

Отобразите строку текста, содержащую двойные кавычки.

Чтобы напечатать двойную кавычку, заключите ее в одинарные кавычки или экранируйте символ обратной косой черты.

Отобразите строку текста, содержащую одинарную кавычку.

Чтобы напечатать одинарную кавычку, заключите ее в двойные кавычки или используйте кавычки ANSI-C .

Используйте параметр -e чтобы включить интерпретацию escape-символов.

Символы соответствия шаблону.

Команда echo может использоваться с символами сопоставления с образцом, такими как подстановочные знаки. Например, приведенная ниже команда вернет имена всех файлов .php в текущем каталоге.

Если файл file.txt не существует, команда создаст его. При использовании > файл будет перезаписан, а символ >> добавит вывод в файл .

Используйте команду cat для просмотра содержимого файла:

Отображение переменных

echo также может отображать переменные. В следующем примере мы напечатаем имя текущего вошедшего в систему пользователя:

Отображение вывода команды

Используйте выражение $(command) чтобы включить вывод команды в аргумент echo . Следующая команда отобразит текущую дату :

Отображение в цвете

Используйте escape-последовательности ANSI, чтобы изменить цвета переднего плана и фона или установить свойства текста, такие как подчеркивание и полужирный шрифт.

Выводы

К настоящему времени вы должны хорошо понимать, как работает команда echo .

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

В этом руководстве показано, как вывести текст в окно терминала с помощью команды Linux echo.

Самостоятельно используемая в терминале, команда echo не особенно полезна, но при использовании в качестве части сценария она может использоваться для отображения инструкций, ошибок и уведомлений.

Пример использования команды Linux Echo

В простейшем виде проще всего выводить текст на терминал следующим образом:

Приведенная выше команда выводит слова «hello world» на экран (без кавычек).

По умолчанию оператор echo выводит символ новой строки в конце строки.

Чтобы проверить это, попробуйте следующий оператор в окне терминала:

Вы увидите, что результат выглядит следующим образом:

Вы можете опустить символ новой строки, добавив переключатель минус n (-n) следующим образом:

Результат от вышеупомянутой команды следующий:

Например, попробуйте следующее в окне терминала:

В идеальном мире \ r и \ n будут действовать как специальные символы для добавления новой строки, но они этого не делают. Результат выглядит следующим образом:

Вы можете включить специальные символы с помощью команды echo, включив ключ -e следующим образом:

На этот раз результат будет следующим:

Конечно, вы можете оказаться в ситуации, когда вы пытаетесь вывести строку, которая будет обрабатываться как специальный символ, и вам это не нужно. В этом сценарии используйте капитал e следующим образом:

Какие специальные символы обрабатываются с помощью ключа -e?

  • \ \ обратная косая черта
  • \ оповещение
  • \ B Backspace
  • \ c больше не выводить
  • \ побег
  • \ f подача формы
  • \ n новая строка
  • возврат каретки
  • \ т горизонтальная вкладка
  • вертикальная вкладка
  • Восьмеричное значение \ 0NNN с 1-3 цифрами
  • \ xHH байт с шестнадцатеричным значением

Давайте попробуем пару из них. Запустите следующую команду в терминале:

Приведенная выше команда выдаст следующее:

Очевидно, это не совсем то, что вы хотели бы вывести на экран, но вы понимаете, что обратная косая черта b удаляет предыдущую букву.

Теперь попробуйте следующее в окне терминала:

Эта команда выводит все до обратной косой черты и c. Все остальное опущено, включая новую строку.

Так в чем же разница между символом новой строки и возвратом каретки? Символ новой строки перемещает курсор вниз на следующую строку, тогда как возврат каретки перемещает курсор назад влево.

В качестве примера введите следующее в окно вашего терминала:

Выходные данные вышеупомянутой команды помещают два слова в разные строки:

Теперь попробуйте это в окне терминала:

Разница между новой строкой и возвратом каретки станет очень очевидной, поскольку в качестве вывода будет показано следующее:

Слово hello было отображено, возврат каретки переместил курсор в начало строки, и слово world было отображено.

Это становится немного более очевидным, если вы попробуете следующее:

Вывод из вышесказанного выглядит следующим образом:

В действительности многие люди все еще используют нотацию \ r \ n при выводе на новую строку. Довольно часто, однако, вы можете сойти с рук только с \ n.

Порой, вывод некоторых терминальных команд может быть огромным. К примеру, список программ, которые могут быть обновлены:

А кто-то просто захочет вести лог выполнения каких-то команд в системе или лог ошибок. В общем, каждый найдет для себя применение этой возможности.

Прежде чем перейти к обсуждению сохранения вывода команд терминала в файл, немножко теории о стандартных потоках вывода Linux.

Стандартные потоки вывода Linux.

Подробнее о стандартных потоках можно прочитать в Википедии:

Если по существу, то в Linux есть 3 стандартных потока:

Когда мы выполняем какую-либо команду в терминале:

Выполнение команд в терминале

Вывод всех, выполненных команд на скриншоте выше, это stdout - стандартный поток вывода.

А вот вывод стандартного потока ошибок stderr:

Вывод стандартного потока ошибок

Как видно на скриншоте, строки с ошибками начинаются с буквы "E:" (error), а предупреждающая информация c W: (warning).

С определениями, названиями стандартных потоков разобрались. Теперь можно перейти к способам сохранения вывода терминала в файл.

Базовый способ сохранения в файл вывода терминала (консоли) Linux.

Стандартный поток вывода перенаправляется с помощью символа ">", то есть самый простой вариант перенаправления вывода терминала в файл будет выглядеть следующем образом:

то есть, после команды ставим > , в результате чего, вывод команды будет сохранен в файл "название_файла.txt".

Реальный пример команды:

После выполнения этой команды в том каталоге, в котором вы находитесь в терминале (по умолчанию это домашний каталог), создастся файл с выводом этой команды, который мы удобно сможем просмотреть c помощью любого текстового редактора:

Cохранения в файл вывода терминала

Cохранения в файл вывода терминала

Cохранения в файл вывода терминала

Если указать одинарный символ ">", то файл будет постоянно перезаписываться при повторном выполнении команды.

Чтобы новая информация добавлялась в конец файла, а не перезаписывался весь файл, нужно использовать двойной символ ">>". Команда будет выглядеть следующим образом:

Cохранения в файл вывода терминала

Cохранения в файл вывода терминала

Мы перенаправляли стандартный поток вывода в файл, но ошибки у нас отображаются в терминале, а в файл текст ошибки добавлен не будет.

Сейчас я описал самый обычный способ перенаправления стандартного потока вывода stdout в текстовый файл. Теперь разберем другие способы.

8 базовых способов сохранения вывода терминала в файл.

Для большой наглядности я нарисовал табличку:

Таблица способов сохранения вывода терминала в файл

Список способов:

1. Стандартный поток вывода будет перенаправлен в файл, в терминале виден не будет. Если файл существует, то будет перезаписан.

2. Стандартный поток вывода будет перенаправлен в файл, в терминале виден не будет. Новая информация будет записана в конец существующего файла.

3. Стандартный поток ошибок будет перенаправлен в файл, в терминале виден не будет. Если файл существует, то будет перезаписан.

4. Стандартный поток ошибок будет перенаправлен в файл, в терминале виден не будет. Новая информация будет записана в конец существующего файла.

5. Стандартный поток вывода и стандартный поток ошибок вместе будут перенаправлены в файл, в терминале видны не будет. Если файл существует, то будет перезаписан.

6. Стандартный поток вывода и стандартный поток ошибок вместе будут перенаправлены в файл, в терминале видны не будет. Новая информация будет записана в конец существующего файла.

7. Стандартный поток вывода будет скопирован в файл, в терминале будет по-прежнему виден. Если файл существует, то будет перезаписан.

8. Стандартный поток вывода будет скопирован в файл, в терминале будет по-прежнему виден. Новая информация будет записана в конец существующего файла.

Как вывести полную информацию о компьютере и сохранить эту информацию в html, pdf.

В Linux есть команда, которая выводит всю информацию о компьютере в терминал lshw (от англ. list hardware).
Её нужно запускать с правами суперпользователя sudo:

Выполнение команды lshw в терминале

Но не совсем удобно читать эту информацию в терминале.

У данной команды есть параметр -html, который позволяет вывести данную информацию в html. Теперь, когда мы научились перенаправлять вывод команд терминала в файл, давайте выведем информацию о системе и компьютере в удобно читаемый html файл:

В текущем каталоге создастся html файл, который можно открыть любым, установленным у вас в системе, браузером:

Полная информация о компьютере в html файле

И теперь, если мы хотим сохранить в pdf эту информацию, то выбираем печать (CTRL-P), формат pdf и нажимаем "Печать".

Всем привет! Меня зовут Саша, и я больше шести лет занимаюсь тестированием бэкенда (сервисы Linux и API). Мысль о статье у меня появилась после очередной просьбы знакомого тестировщика подсказать ему, что можно почитать по командам Linux перед собеседованием. Обычно от кандидата на позицию QA инженера требуют знание основных команд (если, конечно, подразумевается работа с Linux), но как понять, про какие команды стоит почитать во время подготовки к собеседованию, если опыта работы с Linux мало или вовсе нет?

Поэтому, хоть про это уже и много раз написано, я всё же решился написать ещё одну статью «Linux для новичков» и перечислить здесь базовые команды, которые нужно знать перед любым собеседованием в отдел (или компанию), где используют Linux. Я подумал, какие команды и утилиты и с какими параметрами я использую чаще всего, собрал фидбек от коллег, и скомпоновал это всё в одну статью. Статья условно делится на 3 части: сначала краткая информация об основах ввода-вывода в терминале Linux, затем обзор самых базовых команд, а в третьей части описывается решение типовых задач в Linux.

У каждой команды есть много опций, здесь все они перечислены не будут. Всегда можно ввести `man <команда>` или `<команда> --help`, чтобы узнать о команде подробнее.

Если какая-то команда выполняется слишком долго, её можно завершить, нажав в консоли Ctrl+C (процессу посылается сигнал SIGINT).


Если мы выведем содержимое файла man_signal, то мы увидим, что оно идентично тому, что было бы при простом запуске команды `man signal`.


Операция перенаправления `2>&1` означает перенаправление stderr туда же, куда направлен stdout.

Еще один удобный инструмент для работы с вводом-выводом (а точнее, это удобное средство межпроцессного взаимодействия) — pipe (или конвейер). Конвейеры часто используются для связи нескольких команд: stdout команды перенаправляется в stdin следующей, и так по цепочке:

Вывести текущую (рабочую) директорию.

Вывести текущую дату и время системы.

Данная команда показывает, кто залогинен в системе. Помимо этого также на экран выводится uptime и LA (load average).

Вывести содержимое директории. Если не передать путь, то выведется содержимое текущей директории.


Лично я часто использую опции -l (long listing format — вывод в колонку с дополнительной информацией о файлах), -t (сортировка по времени изменения файла/директории) и -r (обратная сортировка — в сочетании с -t наиболее «свежие» файлы будут внизу):

Есть 2 специальных имени директории: "." и "..". Первое означает текущую директорию, второе — родительскую директорию. Их бывает удобно использовать в различных командах, в частности, ls:


Также есть полезная опция для вывода скрытых файлов (начинаются на ".") — -a:


И еще можно использовать опцию -h — вывод в human readable формате (обратите внимание на размеры файлов):

Изменить текущую директорию.


Если не передавать имя директории в качестве аргумента, будет использоваться переменная окружения $HOME, то есть домашняя директория. Также может быть удобно использовать `

` — специальный символ, означающий $HOME:

mkdir


Иногда нужно создать определенную структуру директорий: например, директорию в директории, которой не существует. Чтобы не вводить несколько раз подряд mkdir, можно использовать опцию -p — она позволяет создать все недостающие директории в иерархии. Также с этой опцией mkdir не вернет ошибку, если директория существует.


Опция -r позволяет рекурсивно удалять директории со всем их содержимым, опция -f позволяет игнорировать ошибки при удалении (например, о несуществующем файле). Эти опции позволяют, грубо говоря, гарантированно удалить всю иерархию файлов и директорий (если на это есть права у пользователя), поэтому, их нужно использовать с осторожностью (классический пример-шутка — "rm -rf /", при определенных обстоятельствах удалит вам если не всю систему, то очень много важных для её работоспособности файлов).

Копировать файл или директорию.


У этой команды также есть опции -r и -f, их можно использовать, чтобы гарантированно скопировать иерархию директорий и папок в другое место.

Переместить или переименовать файл или директорию.

Вывести содержимое файла (или файлов).


Также стоит обратить внимание на команды head (вывести n первых строк или байт файла) и tail (о ней — далее).

Вывести n последних строк или байт файла.


Очень полезной является опция -f — она позволяет выводить новые данные в файле в реальном времени.

Иногда текстовый файл слишком большой, и неудобно выводить его командой cat. Тогда можно открыть его с помощью команды less: файл будет выводиться по частям, доступна навигация по этим частям, поиск и прочий простой функционал.


Также может оказаться удобным вариант использования less с конвейером (pipe):

Вывести список процессов.


Я сам обычно использую BSD опции "aux" — вывести все процессы в системе (так как процессов может быть много, я вывел только первые 5 из них, использовав конвейер (pipe) и команду head):


Многие также используют BSD опции "axjf", что позволяет вывести дерево процессов (здесь я убрал часть вывода для демонстрации):


У этой команды много различных опций, так что при активном использовании рекомендую ознакомиться с документацией. Для большинства же случаев хватит просто знать "ps aux".

Послать сигнал процессу. По умолчанию посылается сигнал SIGTERM, который завершает процесс.


Так как процесс может иметь обработчики сигналов, kill не всегда приводит к ожидаемому результату — моментальному завершению процесса. Чтобы «убить» процесс наверняка, нужно послать процессу сигнал SIGKILL. Однако это может привести к потере данных (например, если процесс перед завершением должен сохранить какую-то информацию на диск), так что нужно пользоваться такой командой осторожно. Номер сигнала SIGKILL — 9, поэтому короткий вариант команды выглядит так:


Помимо упомянутых SIGTERM и SIGKILL существует еще множество различных сигналов, их список можно легко найти в интернете. И не забывайте, что сигналы SIGKILL и SIGSTOP не могут быть перехвачены или проигнорированы.

Послать хосту ICMP пакет ECHO_REQUEST.


По умолчанию ping работает, пока его не завершить вручную. Поэтому может быть полезна опция -c — количество пакетов, после отправки которых ping завершится самостоятельно. Ещё одна опция, которую я иногда использую — -i, интервал между посылками пакетов.

OpenSSH SSH клиент, позволяет подключаться к удаленному хосту.


Есть много нюансов в использовании SSH, также этот клиент обладает большим количеством возможностей, поэтому при желании (или необходимости) можно почитать про это более подробно.

Копировать файлы между хостами (для этого используется ssh).

rsync

Также для синхронизации директорий между хостами можно использовать rsync (-a — archive mode, позволяет скопировать полностью всё содержимое директории «как есть», -v — вывод на консоль дополнительной информации):

Вывести на экран строку текста.


Здесь заслуживают внимания опции -n — не дополнять строку переносом строки в конце, и -e — включить интерпретацию экранирования с помощью "\".


Также с помощью этой команды можно выводить значения переменных. Например, в Linux exit code последней завершенной команды хранится в специальной переменной $?, и таким образом можно узнать, какая именно ошибка произошла в последнем запущенном приложении:

telnet

Клиент для протокола TELNET. Используется для коммуникации с другим хостом.


Если нужно использовать протокол TLS (напомню, что SSL давно устарел), то telnet для этих целей не подойдёт. Зато подойдёт клиент openssl:

Пример использования openssl с выводом ответа на GET запрос

Изменить владельца файла

Изменить владельца файла или директории можно с помощью команды chown:


В параметр этой команде нужно отдать нового владельца и группу (опционально), разделенных двоеточием. Также при изменении владельца директории может быть полезна опция -R — тогда владельцы изменятся и у всего содержимого директории.

Изменить права доступа файла

Эта задача решается с помощью команды chmod. В качестве примера приведу установку прав «владельцу разрешено чтение, запись и исполнение, группе разрешено чтение и запись, всем остальным — ничего»:


Первая 7 (это 0b111 в битовом представлении) в параметре означает «все права для владельца», вторая 6 (это 0b110 в битовом представлении) — «чтение и запись», ну и 0 — это ничего для остальных. Битовая маска состоит из трёх битов: самый младший («правый») бит отвечает за исполнение, следующий за ним («средний») — за запись, и самый старший («левый») — за чтение.
Также можно выставлять права с помощью специальных символов (мнемонический синтаксис). Например, в следующем примере сначала убираются права на исполнение для текущего пользователя, а затем возвращаются обратно:


У этой команды есть много вариантов использования, поэтому советую прочитать про неё подробнее (особенно про мнемонический синтаксис, например, здесь).

Вывести содержимое бинарного файла

Это можно сделать с помощью утилиты hexdump. Ниже приведены примеры её использования.


С помощью этой утилиты можно вывести данные и в других форматах, однако наиболее часто могут пригодиться именно такие варианты её использования.

Искать файлы

Найти файл по части имени в дереве каталогов можно с помощью команды find:


Также доступны другие опции и фильтры поиска. Например, так можно найти файлы в папке test, созданные более 5 дней назад:

Искать текст в файлах


Один из популярных способов использования команды grep — использование её в конвейере (pipe):


Опция -v позволяет сделать эффект grep'а обратным — будут выводиться только строки, не содержащие паттерн, переданный в grep.

Смотреть установленные пакеты

Универсальной команды нет, потому что всё зависит от дистрибутива Linux и используемого пакетного менеджера. Скорее всего вам поможет одна из следующих команд:

Посмотреть, сколько места занимает дерево директорий

Один из вариантов использования команды du:


Можно менять значение параметра -d, чтобы получать более подробную информацию о дереве директорий. Также можно использовать команду в комбинации с sort:


Опция -h у команды sort позволяет сортировать размеры, записанные в human readable формате (например, 1K, 2G), опция -r позволяет отсортировать данные в обратном порядке.

«Найти и заменить» в файле, в файлах в директории

Данная операция выполняется с помощью утилиты sed (без флага g в конце заменится только первое вхождение «old-text» в строке):


Можно использовать её для нескольких файлов сразу:

Вывести колонку из вывода


При этом надо иметь ввиду, что awk обладает гораздо более богатым функционалом, так что при необходимости работы с текстом в командной строке стоит почитать об этой команде подробнее.

Узнать IP адрес по имени хоста

С этим поможет одна из следующих команд:

Сетевая информация

Можно использовать ifconfig:


А можно и ip:


При этом, если, например, вас интересует только IPv4, то можно добавить опцию -4:

Посмотреть открытые порты

Для этого используют утилиту netstat. Например, чтобы посмотреть все слушающие TCP и UDP порты с отображением PID'а процесса, слушающего порт, и с числовым представлением порта, нужно использовать ее со следующими опциями:

Информация о системе

Получить данную информацию можно с помощью команды uname.


Чтобы понять, в каком формате производится вывод, можно обратиться к help'у данной команды:

Информация о памяти

Чтобы понять, сколько оперативной памяти занято или свободно, можно воспользоваться командой free.

Информация о файловых системах (свободное место на дисках)

Команда df позволяет посмотреть, сколько места свободно и занято на примонтированных файловых системах.


Опция -T указывает, что нужно выводить тип файловой системы.

Информация о задачах и различной статистике по системе

Для этого используется команда top. Она способна вывести разную информацию: например, топ процессов по использованию оперативной памяти или топ процессов по использованию процессорного времени. Также она выводит информацию о памяти, CPU, uptime и LA (load average).


Эта утилита обладает богатым функционалом, так что если вам надо часто ей пользоваться, лучше ознакомиться с её документацией.

Дамп сетевого трафика

Для перехвата сетевого трафика в Linux используется утилита tcpdump. Чтобы сдампить трафик на порте 12345, можно воспользоваться следующей командой:


Опция -A говорит о том, что мы ходим видеть вывод в ASCII (поэтому это хорошо для текстовых протоколов), -i any указывает, что нас не интересует сетевой интерфейс, port — трафик какого порта дампить. Вместо port можно использовать host, либо комбинацию host и port (host A and port X). И еще полезной может оказаться опция -n — не конвертировать адреса в хостнеймы в выводе.
Что если трафик бинарный? Тогда нам поможет опция -X — выводить данные в hex и ASCII:


При этом надо учитывать, что в обоих вариантах использования будут выводиться IP пакеты, поэтому в начале каждого из них будут бинарные заголовки IP и TCP. Вот пример вывода для запроса "123" посланного в сервер, слушающий порт 12345:

Читайте также: