- вывод команды не вмещающийся в экран
- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Работа с текстовыми выводами в Linux
- Команда cat
- Команда cut
- Команда expand
- Команда fmt
- Команда head
- Команда od
- Команда join
- Команда less
- Команда nl
- Команда paste
- Команда pr
- Команда sed
- Команда sort
- Команда split
- Команда tail
- Команда tr
- Команда unexpand
- Команда uniq
- Команда wc
вывод команды не вмещающийся в экран
Можно ли как то в bash-е сделать следующее — если вывод не помещается на весь экран то автоматом перенаправлять например в less, если вмещается то не перенаправлять.
Может, ты хочешь more?
cat /proc/cpuinfo | more
Виталик, тебе терминал с прокруткой не завезли?
Мож у него tmux.
Виталик, тебе терминал с прокруткой не завезли?
если надо посмотреть только начало вывода команды. с прокруткой надо докрутить до начала, а так сразу посмотрел наччало вывода нажал «q» и всё.
я имел ввиду что бы автоматом подставлялось если вывод выходит за рамки экрана и не подставлялось если полность помещается в экран.
Если я верно понимаю суть, такое не реализовать без твиков терминала, т.к. при запуске команды невозможно предсказать, поместится ли ее вывод в экран или нет, а когда она уже запущена, захватывать и перенаправлять вывод средствами баша (что и делается при вызовах вида ls | less ) невозможно. Поэтому такое поведение не реализовать без саморучного написания и накладывания патчей, которые будут реализовывать желаемое тобой поведение.
Единственное, что может тебе помочь, быстро жать если вывода много, чтобы приостановить его, а возобновлять по нажатию . Но это, очевидно, не то, что ты хочешь.
я так понимаю надо сделать следующее: вывод запоминается в некотором буфере, потом проводится анализ поместится вывод полностью на экран — анализируется разрешение экрана, размер шрифта и т.д. после этого когда становится ясно поместится он или нет предпринимается соответствующее действие. Если поместится то просто из буфера выводится на экран, а если нет то перенаправляется например в команду less. Естественно что для этого надо менять и дописывать исходники bash, но может кто то уже это сделал и есть соответствующие патчи. Если кто знает дайте пожалуйста ссылку на них.
Странно, кстати, что баш до сих пор так не делает. Скажем, обычная консолька не умеет дофига данных хранить, поэтому из выхлопа частенько только хвост остается.
может кто то уже это сделал.
tmux не умеет прокрутку? А мне говорили, что он более фичастый чем screen.
tmux не умеет прокрутку? А мне говорили, что он более фичастый чем screen.
Похоже я ерунду сказал.
Просто для прокрутки я раньше включал/выключал поддержку мыши. А с включенной мышью нереально выделить текст и скопировать его в буфер обмена (тупит как-то и соскакивает). Если прокручивать по Ctrl+B PgUp/PgDn, то копирование нормально работает. Ввел в заблуждение народ.
если надо посмотреть только начало вывода команды.
Приведи конкретный кейс когда это нужно?
Мне такое нужно было только в одном случае: когда команду нужно было запускать периодически и там правда нужно было только начало. Ну так watch в помощь:
Про less -F тебе уже сказали.
Еще есть такой функционал как ScrollLock — блокирует прокрутку. Нажимаешь второй раз — переходит вконец. Но там нужно жать кнопку, я так понял ты хочешь от этого избавится.
Короче, повторю вопрос: назови конкретный кейс; уверен, что нужный инструментарий найдется.
в общем маны читаю не до конца. да less -F подходит, теперь осталось прибумать как сделать что бы к любой команде дописывалось | less -F
Странно, но при коротком выводе вообще ничего на экран не выводит, сжирает вывод.
Странно, но при коротком выводе вообще ничего на экран не выводит, сжирает вывод.
у меня нормально, всё выводит и как написано в мане возвращает командную строку. Версия:
у меня работает, правда я запускал из под рута
Странно, но при коротком выводе вообще ничего на экран не выводит, сжирает вывод.
А если -X добавить, т.е. ls / -l | less -FX ?
Тогда работает как ожидается.
Баг в less, у меня из-под Putty на некоторых старых AIX-ах такое тоже бывает. Сильно зависит от терминала и/или termcap, я так и не определил.
к любой команде дописывалось | less -F
Уж тогда 2>&1 | less -F , а то stderr потеряте. И к любой особо не допишешь, есть ведь ″mc″, ″make menuconfig″ и пр.
Странно, кстати, что баш до сих пор так не делает. Скажем, обычная консолька не умеет дофига данных хранить, поэтому из выхлопа частенько только хвост остается.
поставь себе нормальный терминал, xfce4-terminal к примеру. Ну или konsole, если кедераст.
Он и стоит, но в настройках я 1000 строк сделал, чтобы не засирать сильно память.
А теперь представь выхлоп больше 1000 строк.
konsole пишет на диск, например
Это ж тормоза жуткие! 12309 еще никто не отменял.
Кстати, насчет 12309: пока у меня на буке SSD стояла, я и думать забыл об этом баге (даже решил, что с железом на буке этого нет), но только лишь сгорел SSD и я воткнул туда винт, как пошло-поехало. Теперь загрузка не 8 секунд, а 30 (и то, это я еще proftpd, апач и кое-какие другие велосипеды не поднял); а уж как запущу emerge-webrsync , так вообще труба — как в том анекдоте про Билли и дискетку.
не замечаю, как отрабатывает в фоне на hdd. меняй говножелезо
ну или отлаживай ядро, как посаны
more это же ссылка на less, не?
Причём по умолчанию, less не во всех дистрах есть.
Только что глянул на рабочем сервере — там нет, даже в разных местах находятся (/bin/more и /usr/bin/less). Дома ещё гляну, там система посвежее.
Можешь не смотреть — это совершенно разные утилиты.
Собственно в man’ах можно всё почитать. more — совместимый ещё со старыми BSD’шными, less — отдельная, значительно более функциональная утилита.
Да это как бы и в использовании очевидно.
1. Читать ABS до посинения
2. screen C-a Esc
3. настроить количество строк буфера твоего эмулятора терминала
Может я ошибаюсь но на сколько я понял по нажатию на Ctrl+m вставится | less — это то же не то.
Как сказал mky здесь действительно не всё так просто. Мало того что не понятно как подкинуть | less -F к каждой вводимой в bash команде, так ещё и подкидывать этот less надо не ко всем командам — то есть надо ещё как то определить к каким командам подкидывать, а к каким нет. По моему в zsh в алиасах можно назначить глобальный алиас и при помощи него подкинуть к каждой команде, но из-за того что надо ещё определять к какой надо подкидывать, а какой не надо, то этот вариант не подходит.
как определить?
если перед выполнением команды посчитать размера терминала с помощью легких наркотиков
В этом нет смысла. Всё решается проще при помощи less -F проблема в другом, как это подкинуть к командам и при этом ещё не подкидывать к командам которые не выводят ничего или выводят (скажем так специфическую информацию) например mc. Наверное это не решить стандартными средствами, скорее всего придётся править исходники bash. Если править исходники bash можно сделать ещё лучше, например если вывод не вмещается, то показать его начало и всё то что вместилось, вывести приглашение командной строки, но при этом (что бы не нажимать например «q» для возврата командной строки) стрелками и PageUp PageDown можно было бы пролистывать вывод.
Источник
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Работа с текстовыми выводами в Linux
10 минут чтения
Цель стати разобраться с текстовыми потоками. А также рассмотреть фильтрование текстовых выводы логов их редактирование, журналов сообщений и т.д. Проще говоря, рассмотреть фильтрация и корректировка выводимого на экран текста. Текстовый поток так называется, потому что это выводимая информация может быть не просто статичный текстовый файл, а те текстовые файлы, которые постоянно меняются или дополняются в режиме реального времени.
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Список стандартных команд, которые понадобятся для достижения цели:
Для начала создадим пару текстовых файлов. Переходим в домашнюю корневую папку пользователя root. Переключение пользователя sudo su , и cd
. В любом текстовом редакторе создаем 2 файла hello1.txt и hello2.txt с содержанием как на скриншотах.
Первый. И второй ниже.
Команда cat
Начнем с команды, с которой уже не однократно встречались, команда cat. Сначала посмотрим справку по данной команде. man cat . Тут мы можем увидеть, что данная команда предназначена для объединения файлов и печати на стандартный вывод информации. Под стандартным выводом подразумевается вывод на консоль информации. Так же можно увидеть, что у данной команды есть ключи.
Самое простое применение данной команды. Вводим cat hello1.txt команда показывает то, что на скриншоте выше.
Проведем маленький эксперимент и выведем сразу информацию из двух созданных файлов.
А в справке было написано, что команда может объединять содержимое файлов. Попробуем:
Мы вывели на стандартный вывод (консоль) содержимое файлов и передали то, что на экране в новый файл hello3.txt. А затем просто вывели на консоль. Результат можно посмотреть на скриншоте ниже.
Если нам файл более не нужен можно воспользоваться командой для удаления файлов
Команда cat более часто используется для объединения файлов, для просмотра содержимого чаще используются другие команды.
Команда cut
Данная команда предназначена для удаления секций из строчек файлов. Если посмотреть на ключи, то мы можем увидеть, что данная команда может удалять по различным признакам. По полям, по символам, по байтам, это интересная команда, которая позволяет нам вырезать части из файлов. Небольшой пример:
Данной командой мы говорим, что при выводе на экран нам необходимо «вырезать» перечисленные символы и вывести оставшееся на экран. Замечу, что команда cut не является текстовым редактором и поэтому фалы не правит! А только правит вывод в консоль. Если посмотреть командой cat hello1.txt файл остался неизменным.
Все команды, про которые речь в статье не редактируют исходные файлы, они только фильтруют или редактируют стандартный вывод информации. Для редактирования файлов используются текстовые редакторы.
Мы посмотрели, как данная команда редактирует вывод, на практике мы можем редактировать колонки, столбцы, вывода в каком-то конкретном логе или таблице. Т.е. мы можем выводить на экран только то, что нам нужно. Например, у нас есть лог события, какого-то, мы можем вывести только дату и события, остальное все лишнее отрезать данной командой в выводе.
Команда expand
Данная команда редко используется. Она необходима для конвертации символов табуляции в пробелы. Пример: expand hello2.txt и все табуляции превратились в пробелы. На практики редко применяемая команда.
Команда fmt
Как написано в мануале это текст форматер. Это серьезная команда, она умеет форматировать вывод текста различными способами.
Теперь посмотрим, как данной командой пользоваться.
Например, написать fmt hello1.txt , как вы видите команда сделала вывод в одну строчку. Следовательно, команда без указания ключа, команда игнорирует все символы переноса каретки.
Т.е. все «enter» и перехода на новую строку он убрал.
Мы можем сказать, чтобы команда отформатировала текст так. чтобы на одной строке не было не более 5 символов, но это без переносов, если первое слово на 20 символов он его не перенесет, а если 2 слова по 2 символа, то оба оставит на этой строке.
Ничего не произошло, а если мы дадим fmt w 10 hello1.txt , то мы видим, что команда осуществила перенос. Таким образом можно просматривать длинные логи в удобном для нас виде, т. к. лог может уходить очень далеко в сторону, а через данную команду мы можем разбить на удобные абзацы для нас.
Команда head
Показывает первую часть файлов. Очень удобная команда, для просмотра того, что было в начале файла. По умолчанию показывает первые 10 строк файла.
Для изменения, количества выводимых строк необходимо использовать ключ n и за ним указать необходимое количество строк.
Команда od
Превращает файлы в другие форматы. Грубо говоря это программа конвертор. Редко используется на практике.
Используя данную команду по умолчанию, мы можем превратить файл в восьмеричный код od hello1.txt . Или с использованием ключа c превратить в формат ASCII, od c hello1.txt . это может понадобится для конвертации файла, например для другой машины со специфичным форматом данных.
Команда join
Данная команда, объединяет строчки файлов по общему полю. Для того, чтобы понять, как работает данная команда необходимо создать 2 текстовых файла touch <1,2>.txt . Создаем сразу 2 файла 1.txt и 2.txt. И с помощью редактора nano редактируем. При применении команды join мы видим произошло объединение по полю нумерации.
Это удобно, например, для слияния файлов, особенно логов, например, два файла логов и вам необходимо их сопоставить по времени.
Команда less
В описании команды говорится, что эта команда противоположна команде more. По сути это команда, которая позволяет читать файл.
Можно посмотреть работу ее на примере. Например, cat /var/log/syslog при запуске этой, команды мы получим очень большой вывод на несколько экранов. Если мы воспользуемся командой less /var/log/syslog , то вывод даст возможность листать постранично, через pgdn. Согласитесь, это намного упрощает чтение и просмотр файла. Бывает такое, что работа идет в консоли, в которой нету прокрутки, через мышку, то в таком случае данная команда становится вообще не заменимой. Если посмотреть описание, данная команда еще умеет делать небольшой поиск по файлу.
Команда nl
Нумерация строк. Простой пример. Берем файл и говорим пронумеровать строки. На картинке наглядно показано, как работает команда.
Команда paste
Команда вставка умеет вставлять построчно вставлять какие-то строки в файлы. Объединяет строки файлов, как написано в мануале.
У нас есть 2 файла 1.txt и 2.txt. Команда join их объединяла по определенному полю. Если мы применим команду paste мы увидим, что команда paste объединила их построчно.
Т.е. это может быть очень удобно. У нас объединились первые строки, вторые строки и т.д. Например, если мы сопоставляем какие-нибудь события или файлы и т.д.
Команда pr
Данная команда конвертирует текстовые файлы для вывода на печать. Очень наглядно можно увидеть, как работает данная команда, если ее применить к большому файлу. Например, pr /var/log/syslog
Как можно убедится, команда разбила вывод на страницы и подготовила данный вывод для печати.
Команда sed
Потоковый редактор для фильтрации и трансформирования текста. Это практически полноценный текстовый редактор, но опять же он не редактирует файлы, а работает с выводом.
Как его использовать, пример следующий заменим в файле 2.txt слово socks на слово people получается примерно так:
Функционал у команды очень большой, вывод можно для себя очень сильно изменить, заменить слова, удалить, отредактировать, отрезать, добавить, все это можно делать с помощью данной команды. При этом содержимое файла не меняется. Меняется только для нас вывод.
Команда sort
Сортирует строки в файлах по какому-то признаку. Поработаем с файлом hello1.txt. Если мы применим команду к данному файлу sort hello1.txt, то мы увидим, что вывод отсортировал строчки по алфавиту. А если применить ключик r, то от сортируется в обратном порядке. Это удобно использовать так же в совокупности с другими командами, отсортировать лишнее.
Команда split
Данная команда бьет файл на куски. Даная команда работает следующим образом. Даная команда разбивает файл на части, но при этом исходный не меняет. Например разобьем по строчкам фал 1.txt. split -l 2 1.txt . Разбивку делаем на 2 строчки. И мы видим, что у нас исходный файл остался неизменным, а появилось еще 2 файла xaa и xab. Они как раз и содержат разбиение.
Данную команду удобно применять к большим файлам и использовать ключик для разбивки по размеру, например, по байтам b и указываем на какие куски разбить в байтах. Пример:
Команда tail
В отличии от команды head, данная команда показывает последнюю часть файла. Например, tail /var/log/syslog нам покажет последнюю часть лога событий.
Добавляем ключ -n и число, мы получим число последних событий, которых мы указали. Очень полезный ключ -f, который говорит показывать добавление в файл на «живую», т.е в реальном времени. Очень удобно для диагностики, события пишутся в лог и сразу выводится на экран. Например, запись лога прокси сервера. Прерывание такого режима ctr+C.
Команда tr
Переводит или удаляет символы. Посмотрим на прямом выводе текста. Введем echo Hello. Далее введем echo Hello | tr -t A-Z a-z и заглавные буквы будут заменены строчными. Echo Hello | tr -t l L и маленькие l будет заменены на L. Echo Hello | tr -d l и буквы l будут удалены.
Мощный трансформатор текста. Работает непосредственно с текстом, ключей у него полно их можно посмотреть в мануале.
Команда unexpand
Работает в противоположную сторону команде expand. Конвертирует пробелы в знаки табуляции.
Обычно работают в паре expand и unexpand, для раздвижения столбцов.
Команда uniq
Даная команда ищет уникальные и дублирующийся линии, т.е. она смотрит что у нас в строчках есть одинакового и разного. Для примера, я в файл 1.txt добавлю повторяющуюся строчку. И сделаю вывод uniq 1.txt команда покажет только уникальные строчки, а затем uniq c 1.txt и команда покажет строчки с числом повторений. Можно сказать, чтобы показала команда только дублирующиеся строчки uniq d 1.txt или неповторяющиеся uniq u 1.txt. Применение заключается в том. что если у нас есть файлы с повторяющееся информацией мы можем таким образом ее фильтровать.
Команда wc
Показывает число строк, байт, слов и т.д. для определенного файла. Например: wc 1.txt показывает 4 строки, 8 слов, 28 символов.
Можно использовать с ключом w покажет количество слов. И т.д., можно получить информацию полностью по папке:
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Источник