Как перенаправить вывод telnet в файл
Всё в Linux — это файлы, в том числе — ввод и вывод. Операционная система идентифицирует файлы с использованием дескрипторов. Каждому процессу позволено иметь до девяти открытых дескрипторов файлов. Оболочка bash резервирует первые три дескриптора с идентификаторами 0, 1 и 2. Вот что они означают.
- 0, STDIN — стандартный поток ввода
- 1, STDOUT — стандартный поток вывода
- 2, STDERR — стандартный поток ошибок
STDIN
STDIN — это стандартный поток ввода оболочки. Для терминала стандартный ввод — это клавиатура. Когда используется символ перенаправления ввода — < , Linux заменяет дескриптор файла стандартного ввода на тот, который указан в команде. Система читает файл и обрабатывает данные так, будто они введены с клавиатуры.
Многие команды bash принимают ввод из STDIN , если в командной строке не указан файл, из которого надо брать данные. Например, это справедливо для команды cat .
Когда вы вводите команду cat в командной строке, не задавая параметров, она принимает ввод из STDIN . После того, как вы вводите очередную строку, cat просто выводит её на экран. И останавливается после того как получает EOF . EOF вводится нажатием сочетания клавиш Ctrl+D.
STDOUT
Можно осуществить перенаправление вывода в файл с добавлением в конец с помощью >> . При этом информация, хранящаяся в файле не будет удалена, а вся новая информация будет добавлена в конец этого файла.
STDERR
Устаревшая форма записи:
Оболочка определяет порядок перенаправления потоков в командной строке слева направо, поэтому приведенный выше пример нельзя записать так:
В этом случае сначала вывод ошибок перенаправляется в стандартный вывод (на экран), а потом стандартный вывод перенаправляется в файл data-error.txt . То есть, ошибки будут выведены в консоль, а данные — в файл.
Для дозаписи в файл data-error.txt
Перенаправление вывода в скриптах
Существует два метода перенаправления вывода в сценариях командной строки:
- Временное перенаправление, или перенаправление вывода одной строки
- Постоянное перенаправление, или перенаправление всего вывода сценария
Временное перенаправление вывода
Если запустить этот скрипт, обе строки попадут на экран, так как, как вы уже знаете, по умолчанию ошибки выводятся туда же, куда и обычные данные.
Запустим скрипт так, чтобы вывод STDERR попадал в файл:
Постоянное перенаправление вывода
Если в скрипте нужно перенаправлять много выводимых на экран данных, добавлять >&2 к каждому вызову echo неудобно. Вместо этого можно задать перенаправление вывода в определённый дескриптор на время выполнения скрипта, воспользовавшись командой exec :
После запуска сценария весь вывод будет перенаправлен в файл output.txt .
Команду exec можно использовать не только в начале скрипта, но и в других местах:
Перенаправление ввода в скриптах
Для перенаправления ввода можно воспользоваться тем же способом, который использовался для перенаправления вывода. Например, команда exec позволяет сделать источником данных для STDIN какой-нибудь файл:
Эта команда указывает оболочке на то, что источником вводимых данных должен стать файл data.txt , а не обычный STDIN . Посмотрим на перенаправление ввода в действии:
Подавление вывода
Тот же подход используется, если, например, надо очистить файл, не удаляя его:
У меня работает устройство посещаемости Linux OS . Я могу подключить это устройство через сеанс Telnet. В устройстве есть несколько файлов, которые я хотел бы загрузить и загрузить с новыми файлами. Как я могу это сделать? У меня очень низкие знания по ОС Linux. Не могли бы вы помочь!
Это зависит от того, какие инструменты установлены на клиентском устройстве / поддерживаются ядром.
Возможные способы передачи файлов (неупорядоченные):
- ssh / sftp
- кодирование двоичных файлов в отображаемый формат с помощью base64 / uuencode, а затем копирование из / в окно терминала telnet.
- через простое соединение TCP с netcat или socat или с bash и / dev / tcp
- загрузка / загрузка с wget или curl с веб-сервера
- FTP-сервер с командной строкой FTP-клиент
- Samba или NFS Mount
Скопируйте desktop.jpg с устройства на компьютер с помощью метода netcat / nc:
На вашем компьютере временно отключите (или перенастройте, если возможно) любой брандмауэр и запустите
и на устройстве
где вам нужно заменить ABCD на IP-адрес вашего компьютера. Как только передача прошла успешно, процесс netcat на вашем компьютере должен автоматически остановиться. Если нет, то что-то не так, и вы можете остановить это с Ctrl+C
По другому направлению просто обменяюсь < и > с обеих сторон. Сделайте сначала резервную копию оригинала desktop.jpg ( cp desktop.jpg desktop_orig.jpg ).
Я попробовал утилиту WinSCP и попытался подключить устройство по протоколу ftp / sftp / scp. но это не связано. Я могу подключить устройство с помощью команды telnet и увидеть файлы, которые хочу получить, и снова загрузить их на устройство. Возможно, на вашем устройстве не запущен ssh или ftp сервер. Ну, я не знаю, что .. Есть ли другой способ получить / загрузить файлы с этого устройства? Вы также можете использовать sz для отправки файлов через терминал. Вам это понадобится с обеих сторон.У меня нет ssh или ftp (или т. Д.) На устройстве.
Итак, я делаю следующее:
- telnet a.b.c.d | tee telnet.log
- войдите и перейдите к файлу
- cat file.txt
- закрыть сеанс (закрываю панель tmux)
- очистить telnet.log от мусора
Должно быть легко написать утилиту для загрузки / выгрузки файла через telnet
Попробуй с rcp командой.
Используйте man rcp для получения дополнительной информации, если вы хотите автоматизировать переводы.
Кстати, вы знаете, это очень небезопасно , верно?
Я только что загрузил файл прошивки размером
7 Кбайт во встроенную систему Linux на базе BusyBox через последовательный порт.
Нет сетей, нет утилит для передачи файлов; Нет Base64 утилит или что-нибудь удаленно полезное на устройстве.
На хосте я тривиально зашифровал прошивку в следующий формат; своего рода шестнадцатеричный дамп, состоящий из литералов оболочки в сочетании с printf командами:
в основном printf команды оболочки с \x escape-последовательностями, которые printf интерпретируют. На устройстве я сделал:
затем использовал minicom файл ASCII для отправки ( Ctrl-A S ) для отправки этого файла на хост. Я мог бы просто использовать копирование и вставку, так как объем данных невелик.
Затем помечаем исполняемый файл и запускаем printf скрипт:
Проверено с помощью BusyBox, md5sum что firmware.bin контрольная сумма на устройстве соответствует исходному образу прошивки на хосте.
PS Синтаксис двойных кавычек оболочки проходит \x дословно, потому что это не распознанная escape-последовательность; следовательно, нам не нужно удваивать обратную косую черту.
@jofel и все остальные, большое спасибо за вашу помощь. Я думаю, что устройство имеет настроенную ОС, так как распознает только некоторые конкретные команды Linux. Netcat не распознается устройством. Однако сегодня мне удалось передать файл с помощью команды tftp. Я успешно заменил файл desktop.jpg этой командой. То, что я сделал, создал tftp сервер в оконной системе. Войдите в систему через telnet на устройстве и выполните следующие команды:
скачать файл tftp -l -p tftp -l desktop.jpg - 192.168.0.249 69
загрузить файл tftp -l desktop.jpg -g 192.168.0.249 69
Я сделал это сейчас с помощью этих методов:
Создайте ftp сервер (установив solerwinds) в оконной системе. Войдите в систему через telnet на устройстве и выполните следующие команды:
Одна из самых интересных и полезных тем для системных администраторов и новых пользователей, которые только начинают разбираться в работе с терминалом - это перенаправление потоков ввода вывода Linux. Эта особенность терминала позволяет перенаправлять вывод команд в файл, или содержимое файла на ввод команды, объединять команды вместе, и образовать конвейеры команд.
В этой статье мы рассмотрим как выполняется перенаправление потоков ввода вывода в Linux, какие операторы для этого используются, а также где все это можно применять.
Как работает перенаправление ввода вывода
Все команды, которые мы выполняем, возвращают нам три вида данных:
В Linux все субстанции считаются файлами, в том числе и потоки ввода вывода linux - файлы. В каждом дистрибутиве есть три основных файла потоков, которые могут использовать программы, они определяются оболочкой и идентифицируются по номеру дескриптора файла:
Перенаправление ввода / вывода позволяет заменить один из этих файлов на свой. Например, вы можете заставить программу читать данные из файла в файловой системе, а не клавиатуры, также можете выводить ошибки в файл, а не на экран и т д. Все это делается с помощью символов "<" и ">".
top -bn 5 > top.log
Опция -b заставляет программу работать в не интерактивном пакетном режиме, а n - повторяет операцию пять раз, чтобы получить информацию обо всех процессах. Теперь смотрим что получилось с помощью cat:
top -bn 5 >> top.log
По умолчанию для перенаправления используется дескриптор файла стандартного вывода. Но вы можете указать это явно. Эта команда даст тот же результат:
top -bn 5 1>top.log
ls -l /root/ 2> ls-error.log
$ cat ls-error.log
Чтобы добавить данные в конец файла используйте тот же символ:
ls -l /root/ 2>>ls-error.log
ls -l /root/ >ls-error.log 2>&1
Сначала будет отправлен вывод команды ls в файл ls-error.log c помощью первого символа перенаправления. Дальше в тот же самый файл будут направлены все ошибки. Второй метод проще:
ls -l /root/ &> ls-error.log
Также можно использовать добавление вместо перезаписи:
ls -l /root/ &>> ls-error.log
Стандартный ввод из файла
Большинство программ, кроме сервисов, получают данные для своей работы через стандартный ввод. По умолчанию стандартный ввод ожидает данных от клавиатуры. Но вы можете заставить программу читать данные из файла с помощью оператора "<":
sort <domains.list >sort.output
Таким образом, мы в одной команде перенаправляем ввод вывод linux.
Использование тоннелей
Можно работать не только с файлами, но и перенаправлять вывод одной команды в качестве ввода другой. Это очень полезно для выполнения сложных операций. Например, выведем пять недавно измененных файлов:
ls -lt | head -n 5
С помощью утилиты xargs вы можете комбинировать команды таким образом, чтобы стандартный ввод передавался в параметры. Например, скопируем один файл в несколько папок:
echo test/ tmp/ | xargs -n 1 cp -v testfile.sh
Здесь параметр -n 1 задает, что для одной команды нужно подставлять только один параметр, а опция -v в cp позволяет выводить подробную информацию о перемещениях. Еще одна, полезная в таких случаях команда - это tee. Она читает данные из стандартного ввода и записывает в стандартный вывод или файлы. Например:
echo "Тест работы tee" | tee file1
В сочетании с другими командами все это может использоваться для создания сложных инструкций из нескольких команд.
Выводы
Всё в Linux — это файлы, в том числе — ввод и вывод. Операционная система идентифицирует файлы с использованием дескрипторов. Каждому процессу позволено иметь до девяти открытых дескрипторов файлов. Оболочка bash резервирует первые три дескриптора с идентификаторами 0, 1 и 2. Вот что они означают.
- 0, STDIN — стандартный поток ввода
- 1, STDOUT — стандартный поток вывода
- 2, STDERR — стандартный поток ошибок
STDIN
STDIN — это стандартный поток ввода оболочки. Для терминала стандартный ввод — это клавиатура. Когда используется символ перенаправления ввода — < , Linux заменяет дескриптор файла стандартного ввода на тот, который указан в команде. Система читает файл и обрабатывает данные так, будто они введены с клавиатуры.
Многие команды bash принимают ввод из STDIN , если в командной строке не указан файл, из которого надо брать данные. Например, это справедливо для команды cat .
Когда вы вводите команду cat в командной строке, не задавая параметров, она принимает ввод из STDIN . После того, как вы вводите очередную строку, cat просто выводит её на экран. И останавливается после того как получает EOF . EOF вводится нажатием сочетания клавиш Ctrl+D.
STDOUT
Можно осуществить перенаправление вывода в файл с добавлением в конец с помощью >> . При этом информация, хранящаяся в файле не будет удалена, а вся новая информация будет добавлена в конец этого файла.
STDERR
Устаревшая форма записи:
Оболочка определяет порядок перенаправления потоков в командной строке слева направо, поэтому приведенный выше пример нельзя записать так:
В этом случае сначала вывод ошибок перенаправляется в стандартный вывод (на экран), а потом стандартный вывод перенаправляется в файл data-error.txt . То есть, ошибки будут выведены в консоль, а данные — в файл.
Для дозаписи в файл data-error.txt
Перенаправление вывода в скриптах
Существует два метода перенаправления вывода в сценариях командной строки:
- Временное перенаправление, или перенаправление вывода одной строки
- Постоянное перенаправление, или перенаправление всего вывода сценария
Временное перенаправление вывода
Если запустить этот скрипт, обе строки попадут на экран, так как, как вы уже знаете, по умолчанию ошибки выводятся туда же, куда и обычные данные.
Запустим скрипт так, чтобы вывод STDERR попадал в файл:
Постоянное перенаправление вывода
Если в скрипте нужно перенаправлять много выводимых на экран данных, добавлять >&2 к каждому вызову echo неудобно. Вместо этого можно задать перенаправление вывода в определённый дескриптор на время выполнения скрипта, воспользовавшись командой exec :
После запуска сценария весь вывод будет перенаправлен в файл output.txt .
Команду exec можно использовать не только в начале скрипта, но и в других местах:
Перенаправление ввода в скриптах
Для перенаправления ввода можно воспользоваться тем же способом, который использовался для перенаправления вывода. Например, команда exec позволяет сделать источником данных для STDIN какой-нибудь файл:
Эта команда указывает оболочке на то, что источником вводимых данных должен стать файл data.txt , а не обычный STDIN . Посмотрим на перенаправление ввода в действии:
Подавление вывода
Тот же подход используется, если, например, надо очистить файл, не удаляя его:
Читайте также: