Nmap – Сканирование портов на Linux: как пользоваться Nmap для сканирования сети.



























1.7/5 — (12 голосов)

Nmap – это очень популярный сканер сети с открытым исходным кодом. Nmap — свободная утилита, предназначенная для разнообразного настраиваемого сканирования IP-сетей с любым количеством объектов, определения состояния объектов сканируемой сети (портов и соответствующих им служб).

Что такое анализ локальной сети

Комплекс мер по изучению параметров соединения между компьютерами в домашней или корпоративной сети называется анализом локальной сети (АЛС). Процесс включает в себя:

  • измерение скорости сети;
  • просмотр IP-адресов подключённых устройств;
  • анализ трафика сети — процесс, который позволяет выявить конфликтную машину или неисправность паутины в определённом узле.

Эта процедура может обнаружить вредоносное программное обеспечение и изолировать его распространение на всю сеть. Поэтому АЛС стоит проводить даже в профилактических целях.

Что такое сканер портов?

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

Сканирование портов представляет собой способ определения, какие порты в сети открыты. Поскольку порты на компьютере – это место, где информация отправляется и принимается, сканирование портов аналогично стуку в дверь, чтобы увидеть, находится ли кто-то дома. Выполнение сканирования портов в локальной сети или на сервере позволяет определить, какие порты открыты и находятся в режиме прослушивания (listening) (получения информации), а также выявить наличие таких устройств безопасности, как межсетевые экраны, которые находятся между отправителем и целью. Этот метод известен как дактилоскопия (fingerprinting). Это также полезно для тестирования сетевой безопасности и надежности брандмауэра системы. Благодаря этой функциональности, это также популярный инструмент разведки для злоумышленников, ищущих слабую точку доступа для проникновения в компьютер или сервер.

Порты различаются по своим назначениям. Они пронумерованы от 0 до 65535, но определенные диапазоны используются чаще. Порты с 0 по 1023 идентифицируются (https://ru.wikipedia.org/wiki/Список_портов_TCP_и_UDP), как «общеизвестные порты» или стандартные порты и были назначены для определенных служб, агентством по присвоению номеров в Интернете (IANA). Некоторые из наиболее известных портов и назначенных им служб включают в себя:

  • Порт 20 (UDP) – протокол передачи файлов (FTP) для передачи данных
  • Порт 22 (tcp) – протокол Secure Shell (SSH) для безопасного входа, FTP и переадресации портов
  • Порт 23 (tcp) – протокол Telnet для не зашифрованных текстовых коммутаций
  • Порт 53 (UDP) – Система доменных имен (DNS) переводит имена всех компьютеров в Интернете в IP-адреса
  • Порт 80 (tcp) – Всемирная паутина HTTP

Как провести сканирование скорости

Первый параметр, который стоит просмотреть на предмет ошибок, — это скорость передачи данных. Если при обмене пакетами информации в ЛС происходят сбои, замедления потери команд, то налицо нарушение протоколов или конфликт адресов. В таких случаях стоит начинать искать неполадку. Просмотреть информацию о скорости передачи данных можно через «Командную строку» или стороннее ПО.

С помощью «Командной строки»

Терминал «Командной строки» — уникальный инструмент для управления компьютером и вывода необходимой информации пользователю. Консоль также может помочь с АЛС, в частности вывести отчёт о скорости доступа в ЛС:

  1. Чтобы запустить «Командную строку», открываем меню «Пуск», переходим в папку «Служебные» и кликаем по иконке «Командная строка».
  2. В терминале прописываем первую команду ipconfig /all. Внимательно смотрим на выведенную информацию и находим строку «Основной шлюз», где будет указан сетевой адрес роутера. Это значение нам понадобится для дальнейших действий.Как узнать основной шлюз через консоль «Командной строки»

    Прописываем команду ipconfig /all и находим основной шлюз компьютера

  3. Запускаем команду Ping, указывая адрес шлюза (в данном случае команда имеет вид Ping 192.168.137.1), и ожидаем несколько секунд, пока произойдёт обмен пакетов с маршрутизатором. Результат будет опубликован почти мгновенно, сразу же после обработки данных.Как узнать скорость в ЛС через консоль «Командной строки»

    Через команду Ping основного шлюза узнаём скорость обмена данных с роутером

Если максимальное значение будет больше 1500 мсек даже в беспроводной сети, имеет смысл провести анализ трафика, а также проверить каждый компьютер на наличие вредоносного ПО антивирусными программами.

С помощью сторонних программ

Не только с помощью «Командной строки» можно узнать скорость внутри ЛС. Существуют дополнительные инструменты в виде сторонних программ. По интернету их гуляет огромное количество и большинство схожи между собой как по интерфейсу, так и по выводимым данным. Одной из таких утилит является LAN Speed Test. Утилита на должном уровне справляется с анализом скорости, имеет простой и понятный интерфейс.

  1. Скачиваем, устанавливаем и запускаем программу.
  2. На главной странице приложения нажимаем кнопку Start Test.LAN Speed Test

    В интерфейсе программы LAN Speed Test нажимаем кнопку Start Test

  3. В течение пары секунд получаем исчерпывающую информацию о возможностях передачи данных в ЛС.Вывод данных о скорости в программе LAN Speed Test

    Данные о скорости в сети выводятся в виде таблицы

Также для анализа можно использовать другие утилиты, к примеру, Iperf или LAN Bench.

Первая весьма полезная для домашней и небольшой корпоративной сети. Приложение можно установить на все машины и следить за пингом. Оно весьма полезно, так как может производить мониторинг и вести записи продолжительное время.

Iperf

Iperf — это программа для слежки за пингом и выявления небольших неполадок в ЛС

LAN Bench — это минималистическая утилита, похожая на LAN Speed Test. Ею очень легко мониторить скорость и пинг в сети, достаточно открыть интерфейс и нажать кнопку Test. Ниже сразу начнут появляться результаты.

LAN Bench

LAN Bench — это простейшая утилита для оценки скорости ЛС

Как посмотреть список IP-адресов, подключённых к ЛС

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

С первым всё довольно просто: существует простейшая утилита под названием Wireless Network Watcher. Она, как IP-сканер локальной сети, прекрасно справляется с анализом адресатов сети и выводит на экран всю доступную информацию о них.

Wireless Network Watcher

Через программу Wireless Network Watcher можно увидеть список всех подключённых к сети устройств

Однако у программы есть два минуса:

  • для её работы необходимо проводное подключение к роутеру;
  • инструментарий программы ограничивается только выводом информации. Если нарушитель будет обнаружен, она ничего не сможет с ним сделать. То же касается и аналогичных программ. Заблокировать доступ к сети можно только внутри веб-админки роутера.

Для просмотра информации о подключённых устройствах через веб-админку маршрутизатора необходимо сначала её открыть:

  1. На тыльной стороне устройства знакомимся с реквизитами для входа.Как узнать реквизиты для входа в роутер

    На тыльной стороне роутера знакомимся с реквизитами для входа

  2. Вводим данные в браузере и авторизуемся в сервисе управления.Как попасть в админку роутера

    Через браузер открываем панель управления маршрутизатором

  3. В свойствах админки находим вкладку «Беспроводной режим», а в ней пункт «Статистика беспроводного режима».Как посмотреть список подключённых к сети устройств

    Находим пункт «Статистика беспроводного режима» и знакомимся со всеми подключёнными устройствами

  4. Проверяем IP-адресы всех известных устройств, остальные же можно «Запретить». Только не стоит забывать о подключённых телевизорах, телефонах и планшетах, они также имеют собственный индикатор в этой вкладке настроек.

Как сканировать LAN, узнать IP и MAC-адреса.

Порядок действий по сканированию адресов и получению другой информации:

  1. Первым делом рекомендуется первоначальная настройка установленного ПО, сделать это можно в соответствующем пункте меню.
  2. Advanced ip scanner
  3. Во вкладке «Производительность» выбрать наиболее подходящую для себя (и своего ПК) скорость сканирования. Не рекомендуется выбирать максимальную скорость на офисных ПК или ноутбуках, в таком случае прога может работать нестабильно. При наличии редких и специфичных девайсов (различных сетевых касс, специфичного оборудования для бизнеса или откровенно китайских и никем не поддерживаемых девайсов) рекомендуется поставить галочку «Высокая точность сканирования». При использовании стандартных устройств её можно не ставить.Advanced ip scanner
  4. Теперь можно переходить к непосредственному поиску гаджетов, указав необходимый диапазон IP-адресов (по умолчанию у большинства коммутаторов или роутеров используется диапазон от 192.168.0.1 до 192.168.0.254), и нажать кнопку «Сканировать». В некоторых случаях диапазон адресов может быть изначально изменён вручную, поэтому вводить нужно будет именно его (сканирование стандартных ip практически ничего не даст).Advanced ip scanner
  5. В нашем случае было определено три устройства: ПК, на котором запущен сканер, беспроводной роутер и смартфон, подключенный по Wi-Fi. По каждому из гаджетов присутствует полная информация, такая как текущий ip-адрес (при желании его можно поменять), производитель техники и MAC адрес.

Advanced ip scanner

Методы сканирования портов

Сканирование портов отправляет тщательно подготовленный пакет на каждый номер порта назначения. Основные методы, которые может использовать программное обеспечение для сканирования портов:

  • Ваниль (Vanilla) – самый простой скан; попытка подключиться ко всем 65 536 портам по по очереди. Ванильное сканирование – это полное сканирование соединения, то есть оно отправляет флаг SYN (запрос на подключение) и после получения ответа SYN-ACK (подтверждение подключения) отправляет обратно флаг ACK. Этот обмен SYN, SYN-ACK, ACK включает квитирование TCP. Полное сканирование подключений является точным, но очень легко обнаруживается, поскольку все подключения всегда регистрируются брандмауэрами.

Vanilla scan port

  • Сканирование SYN (SYN Scan) – также называется полуоткрытым сканированием, оно только отправляет SYN и ожидает ответа SYN-ACK от цели. Если ответ получен, сканер никогда не отвечает. Так как соединение TCP не было установлено, система не регистрирует взаимодействие, но отправитель узнал, открыт порт или нет.
  • Сканирование XMAS и FIN (XMAS and FIN Scans) – набор сканирований, используемых для сбора информации без регистрации в целевой системе. При сканировании FIN незапрошенный флаг FIN (обычно используемый для завершения установленного сеанса) будет отправлен на порт. Ответ системы на этот случайный флаг может показать состояние порта или брандмауэр. Например, закрытый порт, который получает незапрошенный пакет FIN, ответит пакетом RST (мгновенный прерывание), но открытый порт проигнорирует его. Сканирование XMAS просто отправляет набор всех флагов, создавая бессмысленное взаимодействие. Ответ системы может быть интерпретирован для лучшего понимания портов системы и брандмауэра.
  • Сканирование отказов FTP (FTP Bounce Scan) – позволяет замаскировать местоположение отправителя путем пересылки пакета через FTP-сервер. Это также предназначено для отправителя, чтобы остаться незамеченным.

Сканирование отказов FTP (FTP Bounce Scan)

  • Сканирование развертки (Sweep scan) – пингует один и тот же порт на нескольких компьютерах, чтобы определить, какие компьютеры в сети активны. Это не раскрывает информацию о состоянии порта, а сообщает отправителю, какие системы в сети активны. Таким образом, его можно использовать как предварительное сканирование.

Sweep scan

Описание NMap

Nmap – бесплатная программа для защиты сетей. Она поддерживает работу с разными протоколами безопасности и сканирует любые порты. Утилита использует различные методы проверки. Это позволяет находить уязвимости сетей и устранять их.

Nmap – одна из лучших программ в своем роде. Она поддерживает работу с TCP, ICMP, UDP, FTP proxy, SYN и другими протоколами. В программе нет ограничений на проверку сетей по размерам или сложности. После проверки можно сравнить результаты анализа и задействовать фильтр хостов.

Работа осуществляется как через командную строку, так и через графическую оболочку с пользовательским интерфейсом. Поэтому использовать Nmap могут как новички, так и профессионалы. Софт совместим с версиями Windows от XP до 10.

Преимущества и недостатки

  • Обходит многие фаерволы
  • Позволяет проверять доступность серверов
  • Работа в анонимном режиме

  • Запрещена в некоторых странах

Как работает Nmap?

В компьютерных сетях все подключенные устройства имеют свой ip адрес. Каждый компьютер поддерживает протокол ping, с помощью которого можно определить подключен ли он к сети. Мы просто отправляем ping запрос компьютеру, и если он отзывается, то считаем, что он подключен. Nmap использует немного иной подход. Компьютеры также определенным образом реагируют на те или иные сетевые пакеты, утилита просто отправляет нужные пакеты и смотрит какие хосты прислали ответ.

Но об этом вы, наверное, уже знаете. Более интересно то как Nmap узнает какие сервисы запущены на машине. Суть работы всех сетевых программ основана на портах. Чтобы получить сообщение из сети, программа должна открыть порт на вашем компьютере и ждать входящих соединений. А для отправки сообщения по сети нужно подключиться к уже другой программой (адресатом) порту. Затем программе необходимо будет открыть порт, на котором она будет ждать ответа.

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

Сканирование сети с помощью nmap – немного теории

nmap – свободная утилита, предназначенная для разнообразного настраиваемого сканирования IP-сетей с любым количеством объектов, определения состояния объектов сканируемой сети.

nmap была написана с помощью C, C++, Python, Lua и предустановлена в Kali Linux, который мы с вами уже обозревали.

Изначально утилита была разработана для систем UNIX, сейчас же не составляет проблем установить её и на Windows.

nmap используется злоумышленниками для сканирования сетей WiFi, LAN и обнаружения открытых портов на подключенных устройствах для проведения различных атак.

Если на подключенном устройстве открыты порты, то оно считается уязвимым и легко поддаётся атакам с помощью различных X-sploits. Одним из самых распространнёных является Metasploit.

Metasploit Project – проект, посвящённый информационной безопасности. Создан для предоставления информации об уязвимостях, помощи в создании сигнатур для IDS, создания и тестирования эксплойтов.

Также вы можете прочитать о скрипте для Termux, с помощью него можно легко установить Network Mapper на ваш смартфон.

Зачем нужна команда nmap?

Основная задача команды nmap – сканирование сетевых портов указанных компьютеров для определения, какие из них используются (прослушиваются) программами-серверами. Для подавляющего числа сетевых демонов (служб) определены их стандартные порты по-умолчаню, которые они используют для своей работы. По этому признаку можно делать выводы, о том какие серверные программы запущены на том или ином компьютере в сети.

Также команда nmap – это самый доступный инструмент в руках злоумышленников для организации подготовки хакерской атаки на сеть. Ведь с помощью этой команды очень легко получить информацию, на основе которой можно судить о слабых и уязвимых местах в атакуемой системе.

Возможности nmap и примеры сканирования

Синтаксис Network Mapper

nmap [Тип сканирования] [Параметры] {Целевая спецификация}

В качестве целевой спецификации может быть имя хоста, IP-адрес, сеть и т.п.

Список параметров можно получить написав в терминале команду nmap.

Как вы знаете, роутеры сами раздают IP-адреса в диапазоне 192.168.0(1).0 – 192.168.0(1).255, это функция DHCP.

Для сканирования всего радиуса нам необходимо написать команду:

nmap -sL 192.168.1.1/24

-sL – параметр, запускает сканирование списка

24 в IP-адресе – это 24-битная подсетка, которая имеет нужный нам радиус в 256 символов. То есть сканирование пройдёт от 10.0.0.0 – 10.0.0.255.

Для сканирования подключенных устройств мы использует параметр -sn, в таком случае -sL нам не требуется.

nmap -sn 192.168.1.1/24

Как вы можете увидеть, в моей сети из было просканировано 256 хостов и 3 из них используются. Важно, что 192.168.0.1 – это роутер. Далее идёт мой телефон и ПК.

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

nmap -Pn {цель}

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

Однако просканировав роутер, мы видим, что 2 порта открыто, 80 и 1900.

Также можно просканировать и все 256 хостов, однако это займет намного больше времени.

Узнаем версию ОС нашего ПК и роутера. Сканирование на операционную систему требует root привелегий и наличия открытых портов. В случае если порты закрыты, конкретного результата не будет и об этом будет предупреждение. С роутером проблем не возникло и все вывелось корректно, также мы видим MAC-адрес роутера/

#1: Сканирование одного хоста или IP адреса (IPv4)

### Сканирование одного IP nmap 192.168.1.1 ## Сканирование хоста nmap randomsite.com ## Сканирование хоста с дополнительной информацией nmap -v randomsite.com

#2: Сканирование нескольких IP-адресов или подсети(IPv4)

nmap 192.168.1.1 192.168.1.2 192.168.1.3 nmap 192.168.1.1,2,3

Вы также можете сканировать диапазон IP-адресов:

nmap 192.168.1.1-20 nmap 192.168.1.*

Наконец, вы можете сканировать всю подсеть:

nmap 192.168.1.0/24

#3: Чтение списка хостов/сетей из файла (IPv4)

Опция -iL позволяет вам читать список целевых систем, используя текстовый файл. Это полезно для сканирования большого количества хостов / сетей. Создайте текстовый файл следующим образом:

cat > /tmp/test.txt

Заполните его:

randomsite.com 192.168.1.0/24 192.168.1.1/24 10.1.2.3 localhost

Запустите сканирование:

nmap -iL /tmp/test.txt

#4: Исключение хостов/сетей (IPv4)

При сканировании большого количества хостов/сетей вы можете исключить хосты из проверки:

nmap 192.168.1.0/24 –exclude 192.168.1.5 nmap 192.168.1.0/24 –exclude 192.168.1.5,192.168.1.254

Или исключить список с помощью файла /tmp/exclude.txt

nmap -iL /tmp/scanlist.txt –excludefile /tmp/exclude.txt

#5: Включить скрипт сканирования ОС и ее версии (IPv4)

nmap -A 192.168.1.254 nmap -v -A 192.168.1.1 nmap -A -iL /tmp/scanlist.txt

#6: Узнать, защищен ли хост брандмауэром

nmap -sA 192.168.1.254

nmap -sA randomsite.com

#7: Сканирование хоста, если он защищен брандмауэром

nmap -PN 192.168.1.1

nmap -PN randomsite.com

#8: Сканирование хоста/адреса IPv6

Опция -6 включает сканирование IPv6. Синтаксис:

nmap -6 IPv6-Address-Here

nmap -6 randomsite.com

nmap -6 2607:f0d0:1002:51::4

nmap -v A -6 2607:f0d0:1002:51::4

#9: Сканирование сети и поиск работающих устройств

nmap -sP 192.168.1.0/24

Пример вывода:

Host 192.168.1.1 is up (0.00035s latency).

MAC Address: BC:AE:C5:C3:16:93 (Unknown)

Host 192.168.1.2 is up (0.0038s latency).

MAC Address: 74:44:01:40:57:FB (Unknown)

Host 192.168.1.5 is up.

Host nas03 (192.168.1.12) is up (0.0091s latency).

MAC Address: 00:11:32:11:15:FC (Synology Incorporated)

Nmap done: 256 IP addresses (4 hosts up) scanned in 2.80 second

#10: Быстрое сканирование

nmap -F 192.168.1.1

#11: Показать причину, по которой порт находится в определенном состоянии

nmap –reason 192.168.1.1

nmap –reason randomsite.com

#12: Показывать только открытые (или возможно открытые) порты

nmap –open 192.168.1.1

nmap –open randomsite.com

#13: Показать все отправленные и полученные пакеты

nmap –packet-trace 192.168.1.1

nmap –packet-trace randomsite.com

#14: Показать интерфейсы и маршруты хоста

nmap –iflist

Пример вывода:

Starting Nmap 5.00 ( http://nmap.org ) at 2012-11-27 02:01 IST

************************INTERFACES************************

DEV (SHORT) IP/MASK TYPE UP MAC

lo (lo) 127.0.0.1/8 loopback up

eth0 (eth0) 192.168.1.5/24 ethernet up B8:AC:6F:65:31:E5

vmnet1 (vmnet1) 192.168.121.1/24 ethernet up 00:50:56:C0:00:01

vmnet8 (vmnet8) 192.168.179.1/24 ethernet up 00:50:56:C0:00:08

ppp0 (ppp0) 10.1.19.69/32 point2point up

**************************ROUTES**************************

DST/MASK DEV GATEWAY

10.0.31.178/32 ppp0

209.133.67.35/32 eth0 192.168.1.2

192.168.1.0/0 eth0

192.168.121.0/0 vmnet1

192.168.179.0/0 vmnet8

169.254.0.0/0 eth0

10.0.0.0/0 ppp0

0.0.0.0/0 eth0 192.168.1.2

#15: Сканирование определенных портов

nmap -p [port] hostName ## Сканирование 80 порта nmap -p 80 192.168.1.1 ## TCP сканирование 80 порта nmap -p T:80 192.168.1.1 ## UDP сканирование 80 порта nmap -p U:53 192.168.1.1 ## Сканирование двух портов nmap -p 80,443 192.168.1.1 ## Сканирование диапазона портов nmap -p 80-200 192.168.1.1 ## Комбинирование всех параметров nmap -p U:53,111,137,T:21-25,80,139,8080 192.168.1.1 nmap -p U:53,111,137,T:21-25,80,139,8080 randomsite.com nmap -v -sU -sT -p U:53,111,137,T:21-25,80,139,8080 192.168.1.254 ## Сканирование всех портов с помощью * nmap -p “*” 192.168.1.1 ## Сканирование популярных портов, нужно указать количество nmap –top-ports 5 192.168.1.1 nmap –top-ports 10 192.168.1.1

Пример вывода:

Starting Nmap 5.00 ( http://nmap.org ) at 2012-11-27 01:23 IST Interesting ports on 192.168.1.1: PORT STATE SERVICE 21/tcp closed ftp 22/tcp open ssh 23/tcp closed telnet 25/tcp closed smtp 80/tcp open http 110/tcp closed pop3 139/tcp closed netbios-ssn 443/tcp closed https 445/tcp closed microsoft-ds 3389/tcp closed ms-term-serv MAC Address: BC:AE:C5:C3:16:93 (Unknown) Nmap done: 1 IP address (1 host up) scanned in 0.51 seconds

#16: Самый быстрый способ проверить все ваши устройства на наличие открытых портов

nmap -T5 192.168.1.0/24

#17: Определение ОС

Вы можете идентифицировать приложения и ОС удаленного хоста, используя опцию -O:

nmap -O 192.168.1.1

nmap -O –osscan-guess 192.168.1.1

nmap -v -O –osscan-guess 192.168.1.1

Пример вывода:

Starting Nmap 5.00 ( http://nmap.org ) at 2012-11-27 01:29 IST

NSE: Loaded 0 scripts for scanning.

Initiating ARP Ping Scan at 01:29

Scanning 192.168.1.1 [1 port]
Completed ARP Ping Scan at 01:29, 0.01s elapsed (1 total hosts)

Initiating Parallel DNS resolution of 1 host. at 01:29

Completed Parallel DNS resolution of 1 host. at 01:29, 0.22s elapsed

Initiating SYN Stealth Scan at 01:29

Scanning 192.168.1.1 [1000 ports]
Discovered open port 80/tcp on 192.168.1.1

Discovered open port 22/tcp on 192.168.1.1

Completed SYN Stealth Scan at 01:29, 0.16s elapsed (1000 total ports)

Initiating OS detection (try #1) against 192.168.1.1

Retrying OS detection (try #2) against 192.168.1.1

Retrying OS detection (try #3) against 192.168.1.1

Retrying OS detection (try #4) against 192.168.1.1

Retrying OS detection (try #5) against 192.168.1.1

Host 192.168.1.1 is up (0.00049s latency).

Interesting ports on 192.168.1.1:

Not shown: 998 closed ports

PORT STATE SERVICE

22/tcp open ssh

80/tcp open http

MAC Address: BC:AE:C5:C3:16:93 (Unknown)

Device type: WAP|general purpose|router|printer|broadband router

Running (JUST GUESSING) : Linksys Linux 2.4.X (95%), Linux 2.4.X|2.6.X (94%), MikroTik RouterOS 3.X (92%), Lexmark embedded (90%), Enterasys embedded (89%), D-Link Linux 2.4.X (89%), Netgear Linux 2.4.X (89%)

Aggressive OS guesses: OpenWrt White Russian 0.9 (Linux 2.4.30) (95%), OpenWrt 0.9 – 7.09 (Linux 2.4.30 – 2.4.34) (94%), OpenWrt Kamikaze 7.09 (Linux 2.6.22) (94%), Linux 2.4.21 – 2.4.31 (likely embedded) (92%), Linux 2.6.15 – 2.6.23 (embedded) (92%), Linux 2.6.15 – 2.6.24 (92%), MikroTik RouterOS 3.0beta5 (92%), MikroTik RouterOS 3.17 (92%), Linux 2.6.24 (91%), Linux 2.6.22 (90%)

No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).

TCP/IP fingerprint:

OS:SCAN(V=5.00%D=11/27%OT=22%CT=1%CU=30609%PV=Y%DS=1%G=Y%M=BCAEC5%TM=50B3CA

OS:4B%P=x86_64-unknown-linux-gnu)SEQ(SP=C8%GCD=1%ISR=CB%TI=Z%CI=Z%II=I%TS=7

OS:)OPS(O1=M2300ST11NW2%O2=M2300ST11NW2%O3=M2300NNT11NW2%O4=M2300ST11NW2%O5

OS:=M2300ST11NW2%O6=M2300ST11)WIN(W1=45E8%W2=45E8%W3=45E8%W4=45E8%W5=45E8%W

OS_6=45E8)ECN(R=Y%DF=Y%T=40%W=4600%O=M2300NNSNW2%CC=N%Q=)T1(R=Y%DF=Y%T=40%S

OS:=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%R

OS_D=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=

OS:0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=N)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID

OS:=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD=S)

Uptime guess: 12.990 days (since Wed Nov 14 01:44:40 2012)

Network Distance: 1 hop

TCP Sequence Prediction: Difficulty=200 (Good luck!)

IP ID Sequence Generation: All zeros

Read data files from: /usr/share/nmap

OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .

Nmap done: 1 IP address (1 host up) scanned in 12.38 seconds

Raw packets sent: 1126 (53.832KB) | Rcvd: 1066 (46.100KB)

#18: Как определить версии служб?

nmap -sV 192.168.1.1

Пример вывода:

Starting Nmap 5.00 ( http://nmap.org ) at 2012-11-27 01:34 IST Interesting ports on 192.168.1.1: Not shown: 998 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh Dropbear sshd 0.52 (protocol 2.0) 80/tcp open http? 1 service unrecognized despite returning data.

Синтаксис команды nmap и особенности её работы

Команда nmap довольно проста в использовании и каким-то сложным синтаксисом не отличается:

nmap [Тип сканирования…] [Опции] {цель сканирования}

Чего нельзя сказать о количестве, функциональности её ключей и неисчерпаемых возможностях их применения. Официальная документация, доступная на страницах man-руководства (команда man nmap), кроме того, что очень подробная (трудно встретить ещё подробнее), так ещё и имеет качественный перевод (локализации, в том числе и на русском языке) в большинстве Linux-дистрибутивов.

Не всегда утилита nmap предустановлена в системе, поэтому для её использования требуется установка соответствующего пакета, который обычно имеет имя nmap:

$ sudo apt-get install nmap

Или в Centos/Redhat

$  yum install nmap -y

Пример:

$ nmap -sT localhost

Nmap

Столбец STATE показывает состояние порта: он может быть открыт (open), когда связан с использующими его службами (соединениями), закрыт (closed), когда порт не используется ни одним сервером. Также доступны состояния: unfiltered, когда nmap не смогла определить состояние порта. А также filtered – когда порт защищён (или заблокирован) брандмауэром.

Для задания хоста можно также использовать цифровую запись в виде IP-адреса. Отчёт из данного примера сформирован для самого обычного компьютера, для которого не была сконфигурирована какая-то защита. Как можно видеть, для прослушивания 80 и 443 портов для работы протоколов HTTP и HTTPS соответственно, запущен веб-сервер. Сервер баз данных (БД) MySQL также работает по стандартному порту.

Примеры команды nmap

Для поиска устройств, подключенных к сети, пользователю необходимо узнать маску локальной сети. Эта информация будет доступна после ввода команды:

$ ip addr show

В открывшемся окне, напротив слова «inet» запомните число, указанное, после слеша. Например, 24. Это число понадобится вам в дальнейшем. Теперь нужно задать команду для сканирования сети с указанием сохраненного числа и IP маршрутизатора:

$ nmap -sL 192.168.1.1/24

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

$ nmap -sn 192.168.1.1/24

Теперь в открывшемся окне должны появиться результаты сканирования. Далее следует провести сканирование портов нужного узла без добавления каких-либо опций. Запуск утилиты:

# nmap 192.168.1.1

В открывшемся окне будут указаны все порты, используемые различными сервисами на ПК. Не забывайте о том, что каждый из этих портов может послужить уязвимым местом в системе. Если вас не устраивает сжатый вид найденной информации о подключенных портах, попробуйте заполучить развернутые данные. Это можно выполнить данным способом:

# nmap -sV 192.168.1.1

Для осуществления проверки конкретного порта понадобится команда в виде:

# nmap -sC 192.168.56.102 -p 21

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

# find /usr/share/nmap/scripts/ -name ‘*.nse’ | grep ftp

Чтобы утилита функционировала в агрессивном режиме (при таком раскладе в окне будет указана развернутая информация о портах, вызванная всего лишь одной командой, что особенно удобно для неопытного владельца Linux), нужно добавить специальную опцию в стандартную команду. А именно:

# nmap -A 192.168.1.1

Использование nmap

При первом запуске Zenmap мы увидим основное окно. Что же неоходимо нам для того, чтобы начать анализ сети?

nmap

Первый шаг– нам нужно указать Цель (Target). Это то, что мы будем анализировать. Допустим, нам нужно просмотреть сеть вида 192.168.0.100. Мы можем просканировать ее целиком – для этого введем диапазон 192.168.0.* в поле Target. В этом случае будут проанализированы все доступные адреса локальной сети этого диапазона.

Второй шаг – это выбор Профиля сканирования. Поле Профиль (Profile) имеет выпадающий список, в котором находятся шаблоны (наборы предустановленных параметров Nmap) для анализа сети – от простого пингования до интенсивного сканирования. Хочу вас предупредить – последний вариант профиля может быть причиной выхода из строя оборудования в небольших сетях. Если у вас имеются роутеры или маршрутизаторы, то при сканировании они могут стать узким местом (в смысле – пропускной способности).

nmap

Когда вы выбираете профиль, то можете обратить внимание на происходящие изменения в строке Command. В зависимости от выбранного профиля меняются опции, с которыми запускается Zenmap. Точно такую же строку вы можете ввести в терминале. Другими словами, запуск Nmap с определенными параметрами в командной строке аналогичен запуску Zenmap с соотвествующим профилем.

И так, профиль выбран. Нажимаем кнопку Scan. Процесс сканирования начался. В левом окне будут отображаться обнаруженные IP-адреса (хосты), в правом – лог сканирования.

Внимание! Обязательно дождитесь окончания сканирования, прежде чем переключаться на другие вкладки! Иначе процесс может преждевременно прерваться или вообще завершиться крахом Zenmap. И вы не получите нужных результатов.

На правой панели находятся различные вкладки. Каждая из них служит своей определенной цели.

  • Nmap Output: Вкладка по умолчанию. Выводит все команды, выполняемые программой Nmap.
  • Ports Hosts: Показывает, какие порты на IP-адресах (хостах) открыты.
  • Topology: Представляет в графическом режиме (картинка) топологию сети.
  • Host details: Подробная информация о каждом отдельно выбранном хосте. Для того, чтобы выбрать нужный хост, достаточно просто щелкнуть на нем мыщью в левом окне программы.
  • Scans: Список всех сканирований, выполненных программой. Вы можете заново запустить любой из них, выбрав его из списка и щелкнув мыщью на кнопке Scan.

Установка nmap на Linux

По умолчанию nmap не установлен в операционною систему Линукс, поэтому его нужно установить.

Centos  8:

dnf install nmap

Для Дебиан / Убунту:

# apt update

# apt install nmap

Centos  7 / Redhat /Fedora

yum install nmap

Сканирование чужих узлов.

В примерах выше для сканирования были выбраны локальный маршрутизатор и одна из рабочих станций, потому что мы имели право на их сканирование. Однако, будет плохой идеей запуск множественного сканирования чужого узла, если вы их не контролируете или не имеете прав для сканирования. Для экспериментов Nmap имеет общедоступный тестовый сервер scanme.nmap.org который Вы можете использовать.

Многие администраторы не любят несанкционированного сканирования их серверов, так что лучшим вариантом будет ограничение сканирования узлов своей локальной сети или тех для которых у вас есть права на сканирование. Также в некоторых случаях вы можете нарушить договор с вашим провайдером, при использовании некоторых особо агрессивных методов сканирования Nmap, поэтому будьте осторожны.

Сканирование нескольких узлов.

Вы можете сканировать больше чем один узел за раз, используя nmap. Если вы производите сканирование по IP-адресу вы можете определить диапазон 10.0.0.1-6 или 10.0.0.0/24.Используя диапазон 10.0.0.1-6 будут сканироваться узлы от 10.0.0.1 до 10.0.0.6. Используя определение /24 будет сканироваться весь диапазон узлов от 10.0.0.0 до 10.0.0.255. Для примера, если нужно просканировать узлы от 10.0.0.1 до 10.0.0.42 и узнать какая ОС вероятно запущена используйте:

nmap –O 10.0.0.1-42

Если у вас есть некоторый список доменных имен вместо IP адресов, вы можете разделить их в командной строке, вот так:

nmap -O host1.target.com host2.target.com

Проверка открытых портов с помощью nmap

Если вы запустите nmap вообще без опций и укажите какой то узел, то он будет сканировать порты и покажет все найденные открытые порты и сервисы запущенные на них. Например запустите:

nmap target.hostname.com

после чего он должен выдать что то похожее на это:

Interesting ports on target.hostname.com (10.0.0.88):

Not shown: 1711 closed ports

PORT STATE SERVICE

22/tcp open ssh

80/tcp open http

3306/tcp open mysql

Nmap done: 1 IP address (1 host up) scanned in 0.228 seconds

Nmap выдаст больше информации если использовать опцию -v (verbose).

Сканирование запущенных сервисов с помощью nmap

Если вы хотите узнать какой сервис возможно запущен попробуйте опцию –sV. Эта опция произведет более агрессивное сканирование и попытается выяснить какая версия сервисов запущена на данном узле, а также может помочь более точно определить какая ОС запущена. Для пример запустим nmap –sV на тестовый сервер и получим следующий ответ:

Starting Nmap 5.21 ( nmap.org ) at 2010-02-28 00:15 EST

Nmap scan report for test.host.net (XX.XXX.XXX.XX)

Host is up (0.090s latency).

Not shown: 965 closed ports, 33 filtered ports

PORT STATE SERVICE VERSION

22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)

80/tcp open http Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.10 with Suhosin-Patch)

Service Info: OS: Linux

Service detection performed. Please report any incorrect results at nmap.org/submit .

Nmap done: 1 IP address (1 host up) scanned in 11.43 seconds

Как вы видите, Nmap может проанализировать пакеты и определить версию запущенного приложений на SSH и HTTP портах. Здесь вы можете увидеть что опрашиваемая система это Ubuntu с Apache 2.2.8 и OpenSSH 4.7p1. Эта информация может быть полезна по ряду причин. Nmap сканирование может идентифицировать систему под управлением устаревших сервисов которые могут быть уязвимы для известных эксплойтов.

Профили сканирования

Для анализа сети в Zenmap вы можете использовать как профили по умолчанию (предустановленные), так и создавать свои собственные. Для того, чтобы создать свой профиль, щелкните на Profile, затем выберите Новыйпрофиль (NewProfile) или Команда (Command) или Редактироватьсуществующийпрофиль (EditCurrentProfile). Если вы хотите внести небольшие изменения, достаточно выбрать необходимый профиль и затем отредактировать его. Например, на скриншоте показан измененный профиль, в который добавлена информация об операционной системе. Чтобы добавить эту информацию, выберите профиль, затем Profile > EditCurrentProfile. В новом окне открываем вкладку Scan и затем выбираем опцию “OS”. Кнопка SaveChanges сохраняет изменения и закрывает окно редактирования.

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

Главные особенности и функции ZenMap

Мощность

У Zenmap отсутствуют ограничения в масштабах сканирования — от одного ПК до нескольких сотен тысяч машин, объединенных в одну большую сеть.

Простота использования

Работать в Zenmap может профессионал, используя самые сильные инструменты, и новичок. Причём пользователь может работать в обоих режимах — консоль или графический интерфейс. Сайт разработчика предлагает массу готовых пакетов для пользования в различных операционных системах специально для тех, кто не имеет желания или возможности собственноручно компилировать программу из исходных данных.

Свобода

Zenmap — бесплатная лицензированная программа, которая содержит в себе полный пакет всех исходников.

Поддержка разработчиков

Программа не даёт пользователям гарантию, однако сообщество разработчиков готово отвечать на любые вопросы пользователей. Наиболее часто используемые варианты сканирования могут быть сохранены в профили, чтобы обеспечить их лёгкий неоднократный запуск в дальнейшем. Мастер создания команд позволяет задавать команды в диалоговом режиме. Результаты сканирования сохраняются в базе данных. Это позволяет легко найти нужный результат, а также сравнивать результаты друг с другом. Благодаря активному сообществу разработчиков и хорошей документации Zenmap очень популярен. О высоком качестве этой программы говорят и многочисленные награды. Zenmap стал практически стандартом среди бесплатных программ для аудита сетей.

Установка и аудит сетей

Прежде чем скачать бесплатно «Зенмап», полезно знать — приложение поддерживает различные методы аудита сетей, включая в сканирование портов, определение наименования и точной версии операционной системы. Zenmap невероятно мощный. Ему «по зубам» компьютерная сеть любого размера, он быстро сканирует сеть даже в сто тысяч узлов. Любые преграды, будь то IP-фильтры, маршрутизаторы или что-то ещё, Zenmap с успехом преодолеет. Несмотря на то что он разрабатывался специально для больших сетей, при желании может точно так же применяться и на единичном сервере.

Установить Zenmap в большинство современных дистрибутивов достаточно просто, если используется готовый установочный пакет с запуском из репозиториев. Удобнее всего запускать из-под рут, потому что для полного пакета Nmap требуются привилегии Superuser.

Интерфейс пользователя

Для начала потребуется цель проверки. Предположим, что нужно отсканировать сеть с IP-адресами, используя маску 192.168.101.*:

  • данное клише вводится в поле Target;
  • затем в раскрывающемся списке «Профиль» нужно подобрать из предоставленных профиль, который лучше всего подойдёт для сканирования;
  • нужно иметь в виду, что сканирование с применением функции «Интенсивного анализа», возможно, навредит некоторым сетевым устройствам, таким как роутеры или свичи. С данными устройствами нужно обращаться крайне осторожно;
  • после подбора соответствующего профиля также поменяются данные поля Command, которое содержит nmap с установленными параметрами;
  • если есть необходимость, то содержимое команды всегда можно скорректировать под себя.

Когда место назначения установлено и профиль сканирования выбран, следует нажать «Сканировать» и заняться своими делами (а может и нет, все будет зависеть от объёма данной задачи nmap и быстроты сети). Как только сканирование завершится, список хостов, которые были найдены, отобразится на левой панели.

На правой панели можно заметить 5 вкладок:

  • nmap output — изначально открывается вкладка, которая отображает вывод текста nmap;
  • порты/хосты — в этой вкладке можно посмотреть открытые порты и на каких хостах они открыты;
  • topology — эта вкладка отображает топологию данной сети в форме графиков и диаграмм;
  • сведения о хосте — здесь отображается вся информация о данных сканирования хоста;
  • сканирование — эта вкладка содержит все ранее использованные команды скана, то есть историю.

Зайдя во вкладку Topology, можно отыскать самый занимательный пункт Zenmap. Тут находится топология рассматриваемой сети, которая изображается в формате кластера окружностей с названиями хостов или их сетевыми адресами. Если проверенная сеть довольно велика, разглядеть круги будет практически невозможно.

В таком случае нужно нажать кнопку «Управление», которая находится сверху, и использовать кнопки Zoom и Ring Gap, расположенные справа, чтобы настроить дисплей наилучшим способом. Также можно воспользоваться флажками в разделе «Вид», чтобы выбрать нужную информацию о хосте, отображаемую на карте.

Для комфортного использования новичками Nmap существует официальный графический интерфейс сканера безопасности – Zenmap. Новички зачастую сталкиваются с проблемой, когда невозможно пользоваться программой так же, как и опытным пользователям. Теперь неопытные пользователи без проблем могут использовать все расширенные возможности, которые доступны профессионалам.

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

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

Программа Nmap разработана и создана для быстрого и безопасного сканирования как одного ПК, так и целых компьютерных сетей. Nmap и Zenmap совместимы с большинством операционных сетей. Могут работать и в консольном режиме, и в режиме графического интерфейса.

Zenmap отличает наличие необходимой документации. Установка не представляет собой каких-либо сложностей. Официальный сайт Zenmap публикует установщики для всех распространённых операционных систем — Linux, Windows, FreeBSD.

Выводы и рекомендации по использованию nmap

В заключение хочется сказать, что утилита nmap нередко используется злоумышленниками и я не в коем случае не призываю к действию, данная статья написана в образовательных целях и автор не несет ответственности за ваши действия.

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

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


[spoiler title=”Источники”]

  • https://itmaster.guru/nastrojka-interneta/analiz-lokalnoy-seti.html
  • http://pyatilistnik.org/port-scanner-on-the-local-network/
  • https://ip-scaner.ru/
  • https://www.softslot.com/software-2862-nmap.html
  • https://KtonaSoft.ru/nmap/
  • https://losst.ru/kak-polzovatsya-nmap-dlya-skanirovaniya-seti
  • https://www.make-info.com/nmap/
  • https://ITProffi.ru/skanirovanie-setevyh-portov-v-linux-komanda-nmap/
  • https://mordeniuss.ru/nmap-commands-examples/
  • https://www.vseprolinux.ru/nmap-skaner
  • http://rus-linux.net/nlib.php?name=/MyLDP/lvs/nmap/zenmap.html
  • https://habr.com/ru/post/88064/
  • https://ZenMap.ru/


[/spoiler]


2020-12-22T10:34:30
Linux

Изучаем команды Linux: команда sed Linux



























3.4/5 — (5 голосов)

Команда sed – это потоковый редактор текста, работающий по принципу замены. Его можно использовать для поиска, вставки, замены и удаления фрагментов. Утилиту sed называют потоковым текстовым редактором. В интерактивных текстовых редакторах, наподобие nano, с текстами работают, используя клавиатуру, редактируя файлы, добавляя, удаляя или изменяя тексты. Sed позволяет редактировать потоки данных, основываясь на заданных разработчиком наборах правил.

Команда sed в Linux

Сначала рассмотрим синтаксис команды:

$ sedопции-e командыфайл

А вот её основные опции:

  • -n, –quiet – не выводить содержимое буфера шаблона в конце каждой итерации;
  • -e – команды, которые надо выполнить для редактирования;
  • -f – прочитать команды редактирования из файла;
  • -i – сделать резервную копию файла перед редактированием;
  • -l – указать свою длину строки;
  • -r – включить поддержку расширенного синтаксиса регулярных выражений;
  • -s – если передано несколько файлов, рассматривать их как отдельные потоки, а не как один длинный.

Установка

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

$ sed –version

В моей системе эта команда показывает, что у меня установлен GNU sed 4.2.1 плюс дает ссылку на домашнюю страницу программы и другие полезные сведения. Пакет называется “sed” независимо от дистрибутива, кроме Gentoo, где он присутствует неявно.

Концепции

Перед тем, как идти дальше, мы считаем важным акцентировать внимание на том, что делает “sed”, так как словосочетание “потоковый редактор” мало что говорит о его назначении. sed принимает на входе текст, выполняет заданные операции над каждой строкой (если не задано другое) и выводит модифицированный текст. Указанными операциями могут быть добавление, вставка, удаление или замена. Это не так просто, как выглядит: предупреждаю, что имеется большое количество опций и их комбинаций, которые могут сделать команду sed очень трудной для понимания. Поэтому мы рекомендуем вам изучить основы регулярных выражений, чтобы понимать, как это работает. Перед тем, как приступить к руководству, мы хотели бы поблагодарить Eric Pement и других за вдохновление и за то, что он сделал для всех, кто хочет изучать и использовать sed.

Как работает sed

Теперь нужно понять как работает команда sed. У утилиты есть два буфера, это активный буфер шаблона и дополнительный буфер. Оба изначально пусты. Программа выполняет заданные условия для каждой строки в переданном ей файле.

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

Когда всё команды будут выполнены и не указана опция -n, содержимое буфера шаблона выводится в стандартный поток вывода перед этим добавляется обратно символ перевода строки. если он был удален. Затем запускается новая итерация цикла для следующей строки.

Если не используются специальные команды, например, D, то после завершения одной итерации цикла содержимое буфера шаблона удаляется. Однако содержимое предыдущей строки хранится в дополнительном буфере и его можно использовать.

Адреса sed

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

  • номер – позволяет указать номер строки, в которой надо выполнять команду;
  • первая~шаг – команда будет выполняется для указанной в первой части сроки, а затем для всех с указанным шагом;
  • $ – последняя строка в файле;
  • /регулярное_выражение/ – любая строка, которая подходит по регулярному выражению. Модификатор l указывает, что регулярное выражение должно быть не чувствительным к регистру;
  • номер, номер – начиная от строки из первой части и заканчивая строкой из второй части;
  • номер, /регулярное_выражение/ – начиная от сроки из первой части и до сроки, которая будет соответствовать регулярному выражению;
  • номер, +количество – начиная от номера строки указанного в первой части и еще плюс количество строк после него;
  • номер, ~число – начиная от строки номер и до строки номер которой будет кратный числу.

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

Синтаксис

Синтаксис данной утилиты не отличается сложностью. Он представлен в виде:

sed [параметры]  [команды] (файл)

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

  • «-n» – дает возможность не выводить содержимое, присутствующее в буфере шаблона после каждой итерации.
  • «-e» – позволяет выполнить команды, которые необходимы для редактирования текста.
  • «-f» – дает возможность прочесть команды, которые были использованы при изменении файла.
  • «-l». Опция позволяет указать требуемую длину строки.
  • «-r». Опция применяется для включения поддержки синтаксиса расширенного типа, распространяющегося на активно используемые выражения.
  • «-i». Функция предназначена для создания копии файла (в резерве) перед тем, как он будет отредактирован.
  • «-s». Опция позволяет изучить несколько файлов единовременно. Они будут просмотрены не как длинные потоки, а как отдельные.

Чтобы выполнить несколько действий, используется аргумент “-e”.

sed -e [команды] (файл)

Первоначально кажется, что данная утилита очень сложная. На самом деле это не так, ей сможет пользоваться даже новичок в сфере программирования.

Стоит отметить, что данная утилита имеет два отдельно обособленных буфера – это основной и вспомогательный буфер (активного и пассивного плана). Первоначально они абсолютно пусты. Специальная программа передает предварительно определенные условия для всех строк передаваемого файла.

Первоначально программа «sed» изучает одну строку. Из нее удаляются все завершающие данные, а также символы, присутствующие в новой строке. Обрабатываемая стока помещается в главный буфер.

Далее выполняются команды, которые были переданы пользователем в параметрах. За каждой определенной командой закрепляется адрес. Он используется в качестве своеобразного условия. Команда пройдет лишь в том случае, если данное условие будет соблюдено.

После выполнения всех предписанных команд, содержимое буфера шаблона попадает в классический поток вывода. Это происходит в том случае, если предварительно не была указана функция «-n», которая ограничивает вывод содержимого.

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

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

Особенности адресов, предающихся утилите «sed»

Все команды получают свой адрес. Именно он указывает на строки, для которых выполняется команда:

  • «номер». В данном случае прописывается номер определенной строки, где в последующем будет выполняться команда.
  • «первая~шаг». Здесь команда выполняется для изначальной части строки, а далее – для всех остальных. В обязательном порядке указывается шаг.
  • «$». Обрабатывается последняя строка, которая относится к выбранному вами файлу.
  • «/часто используемое_выражение/». Здесь используется любая строка, подходящая по регулярному выражению. Оно не должно зависеть от особенностей регистра.
  • «номер, номер». Обработка начинается с начала первой строки, а заканчивается концом второй строки.
  • «номер,/регулярное_выражение/». Обработка начинается с первоначальной строки, заканчивается в той, которая соответствует информации в часто используемых фразах.
  • «номер+количество». Обработка начинается с верхней строки, длится до той поры, пока не будет исчерпано предварительно указанное число строк.
  • «номер~число». Обработка начинается со строки с определенным номеров. Она заканчивается той строкой, которая кратна определенному числовому обозначению.

Когда пользователь не желает задавать определенный адрес для программы «sed», она распространяется на все строки в файле. Если передается один адрес, команда выполняется до той строки, которая расположена по указанному адресу.

Есть возможность передавать диапазон адресов. Информация разделяется запятыми, а команда осуществляется для тех адресов, которые находятся в требуемом диапазоне.

Использование специальных символов:

Можно использовать спецсимволы:

^ – начало строки

$ – конец строки

. – обозначение одного символа

Полный набор не ограничен только этими тремя. Sed прекрасно понимает регулярные выражения (regular expressions).

Следующая команда заменит root на Admin в тех строках, которые начинаются с user:

sed ‘/^user/s/root/Admin/g’ имя_файла

Следующая команда заменит root на Admin в тех строках, которые заканчиваются словом data:

sed ‘/data$/s/root/Admin/g’ имя_файла

В том, случае если Вам нужно использовать какой-либо спецсимвол в sed ( $, ^, /, пробел, точка, ‘, и т.д.) его нужно экранировать с помощью .

С помощью следующей конструкции слово root с пробелом после него будет заменено на Admin с двоеточием:

sed ‘s/root /Admin:/g’ имя_файла




В случае использования символа(pipe) в качестве разделителя спецсимволы экранировать не нужно, но при этом регулярные выражения работать не будут

sed ‘s|root |Admin:|g’ имя_файла

Регулярные выражения

Убрать все цыфры из вывода:

sed ‘s/[0-9][0-9]//g’

Продублировать отсеченное значение:

sed ‘s/root/& &/g’

Попробуйте выполнить:

echo`123 abc` | sed ‘s/[0-9][0-9]*/&-&/’

Регулярное выражение [0-9]* определят 0 или больше цыфр.

Регулярное выражение [0-9][0-9]* определят 1 или больше цыфр.

Если Вам нужно использовать первое слово из строки текста – обзначьте его экранированой цыфрой:

sed ‘s/([a-z]*).*/1/’

Проверьте сами:

echo’abcd qwer zxc 123’| sed ‘s/([a-z]*).*/1/’

Для того что бы поменять местами первое и второе слово – воспользуйтесь следующей конструкцией:

sed ‘s/([a-z]*) ([a-z]*)/2 1/’

Пробел в левой части выражения может быть заменен на любой другой разделитель.

Для теста:

echo’abcd qwer zxc 123’| sed -r’s/([a-z]+) ([a-z]+)/2 1/’

и

echo’abcd_qwer_zxc_123’| sed -r’s/([a-z]+)_([a-z]+)/2**_**1/’echo’abcd_qwer_zxc_123’| sed -r’s/([a-z]+)**_**([a-z]+)/2 1/’

Замена текства между двумя словами:

sed -ure’s/**word1**.+?**word2**/**word1** замена **word2**/g’-i файл

Использование переменных в выражениях sed

При написании bash скриптов мы используем переменные. Иногда возникает необходимость использовать эти переменные в выражениях sed.

Самый простой подход – использование двойных кавычек для обертки выражения:

sed ‘s/$var1/$var2/g’

Двойные кавычки не сработают, есть в $var1 или $var2 присутвствуют спецсимволы. Лучше всего – исключать переменные из обертки:

sed ‘s/”$var1”/”$var2”/g’

Основные команды Sed

Для того чтобы применить SED достаточно ввести в командную строку

echo ice | sed s/ice/fire/

Результат:

fire

Замена слова в файле

Обычно SED применяют к файлам, например к логам или конфигам.

Предположим, что у нас есть файл input.txt следующего содержания

Here is a StringHere is an IntegerHere is a Float

Мы хотим заменить слово Here на There

sed ‘s/Here/There/’ input.txt

Результат будет выведен в консоль:

There is a String

There is an Integer

There is a Float

Если нужно не вывести в консоль а изменить содержание файла – используем опцию -i

sed -i ‘s/Here/There/’ input.txt

В этом случае перепишется исходный файл input.txt

Рассмотрим пример посложнее. Файл input.txt теперь выглядит так:

Here is an Apple. Here is a Pen. Here is an ApplePenInteger is HereHere is a FloatHere is a Pen. Here is a Pineapple. Here is a PineapplePen

sed ‘s/Here/There/’ input.txt

Как Вы сейчас увидите, замена произойдёт только по одному разу в строке

There is an Apple. Here is a Pen. Here is an ApplePen

Integer is There

There is a Float

There is a Pen. Here is a Pineapple. Here is a PineapplePen

Чтобы заменить все слова нужна опция g

sed ‘s/Here/There/g’ input.txt

There is an Apple. There is a Pen. There is an ApplePen

Integer is There

There is a Float

There is a Pen. There is a Pineapple. There is a PineapplePen

Замена слова в файле и вывод результата в другой файл

Та же замена, но с выводом в новый текстовый файл, который мы назовём output:

sed ‘s/Here/There/’ input.txt > output.txt

Замена слова в нескольких файлах одновременно

Если нужно обработать сразу несколько файлов: например файл 1.txt с содержанием

First File: Here

И файл 2.txt с содержанием

Second File: Here

Это можно сделать используя *.txt

sed ‘s/Here/There/’ *.txt > output.txt

На выходе файл output.txt будет выглядеть так

First File: ThereSecond File: There

Отбросить всё, что левее определённого слова

Предположим, что у нас есть файл input.txt следующего содержания

Here is a String it has a NameHere is an Integer it has a NameHere is a Float it has a Name

Мы хотим отбросить всё, что находится левее слова it, включая слово it, и записать в файл.

sed ‘s/^.*it//’ input.txt > output.txt

^ означает, что мы стартуем с начала строки Результат:

 has a Name

has a Name

has a Name

Для доступности объясню синтаксис сравнив две команды. Посмотрите внимательно, когда мы заменяем слово Here на There.

There находится между двумя слэшами. Раскрашу их для наглядности в зелёный и красный.

sed ‘s/Here/There/

А когда мы хотим удалить что-то, мы сначала описываем, что мы хотим удалить. Например, всё от начала строки до слова it.

Теперь в правой части условия, где раньше была величина на замену, мы ничего не пишем, т.е. заменяем на пустое место. Надеюсь, логика понятна.

sed ‘s/^.*it//‘ > output.txt

Отбросить всё, что правее определённого слова

Предположим, что у нас есть файл input.txt следующего содержания

Here is a String / it has a NameHere is an Integer / it has a NameHere is a Float / it has a Name

Мы хотим отбросить всё, что находится правее слова is, включая слово is, и записать в файл.

sed ‘s/is.*//’ > output.txt

Результат:

HereHereHere

Экранирование символов в sed

Специальные символы экранируются с помощью

Предположим, что у нас есть файл input.txt следующего содержания

Here is a String / it has a NameHere is an Integer / it has a NameHere is a Float it / has a Name

Мы хотим отбросить всё, что находится левее /a, включая /a, и записать в файл.

sed ‘s/^.*/a//’ > output.txt

В результате получим ошибку

-e expression #1, char 15: unknown option to `s’

Чтобы команда заработала нужно добавить перед /

sed ‘s/^.*/a//’ > output.txt

Результат:

Here is a StringHere is an IntegerHere is a Float

Два условия одновременно в Sed

Предположим, что у нас есть файл input.txt следующего содержания

Here is a String /b it has a NameHere is an Integer /b it has a NameHere is a Float /b it has a Name

Мы хотим отбросить всё, что находится левее /b, включая /b, и всё, что правее has.

Таким образом, в каждой строчке должно остаться только слово it.

Нужно учесть необходимость экранирования специального символа / а также мы хотим направить вывод в файл.

sed ‘s/^.*/b// s/has.*//’ input.txt > output.txt

Результат:

ititit

Удаление переходов на новую строку

sed ‘:a;N;$!ba;s/n//g’ file

Удалить всё после определённой строки

Допустим Вы хотите удалить все строки после третьей

sed 3q input.txt > output.txt

Удаление текста

Можно легко удалить текст, который мы выводили в предыдущем примере, заменив команду “p” на команду “d”. Команда «-n» нам больше не нужна, потому что при использовании команды удаления утилита выводит все, что не удалено. Это позволяет нам видеть, что происходит. Изменим последнюю команду из предыдущего раздела так, чтобы она удаляла все нечетные строки, начиная с первой. В результате мы должны получить все строки, которые не были выведены в прошлый раз.

sed ‘1~2d’ BSD All rights reserved. Redistribution and use in source and binary forms, with or without are met: notice, this list of conditions and the following disclaimer. notice, this list of conditions and the following disclaimer in the 3. Neither the name of the University nor the names of its contributors without specific prior written permission. . . . . . .

При этом исходный файл не меняется. Результаты редактирования просто выводятся на экран. Если результат нужно сохранить, можно перенаправить стандартный вывод в файл:

sed ‘1~2d’ BSD > everyother.txt

Открыв этот файл командой cat, мы увидим тот же результат, который был на экране после выполнения предыдущей команды. По умолчанию sed не редактирует исходный файл в целях безопасности. Это можно изменить при помощи опции «-i», которая означает редактирование на месте. Исходный файл будет изменен. Давайте попробуем отредактировать только что созданный нами файл «everyother.txt». Снова удалим все нечетные строки:

sed -i ‘1~2d’ everyother.txt

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

Опция “-i” может быть опасной, но утилита предоставляет возможность создания резервной копии перед редактированием. Для этого сразу после опции “-i” укажите расширение резервной копии “.bak”:

sed -i.bak ‘1~2d’ everyother.txt

Будет создан файл резервной копии с расширением “bak”, а затем выполнено редактирование исходного файла.

Замена текста

Чаще всего sed используется для замены текста. Редактор позволяет осуществлять поиск текста по шаблону при помощи регулярных выражений. А затем заменять найденный текст. В простейшем варианте можно заменить одно слово на другое, используя следующий синтаксис:

‘s/старое_слово/новое_слово/’

Параметр «s» – это команда замены. Три слэша (/) нужны для разделения различных текстовых полей. Если вам удобно, вы можете использовать для этого другие символы. Например, если нам нужно изменить имя веб-сайта, удобнее использовать другой разделитель, так как URL содержат слэши. Воспользуемся командой echo для передачи примера:

echo “http://www.example.com/index.html” | sed ‘s_com/index_org/home_’ http://www.example.org/home.html

Здесь секция «com/index» заменяется на «org/home». В качестве разделителя используется нижнее подчеркивание «_». Не забудьте про последний разделитель, иначе sed выдаст ошибку.

echo “http://www.example.com/index.html” | sed ‘s_com/index_org/home’ sed: -e expression #1, char 22: unterminated `s’ command

Создадим файл для отработки замен:

echo “this is the song that never ends yes, it goes on and on, my friend some people started singing it not knowing what it was and they’ll continue singing it forever just because…” > annoying.txt

Теперь заменим «on» на «forward»

sed ‘s/on/forward/’ annoying.txt this is the sforwardg that never ends yes, it goes forward and on, my friend some people started singing it not knowing what it was and they’ll cforwardtinue singing it forever just because…

Стоит обратить внимание на ряд моментов. Во-первых, мы заменяем шаблоны, а не слова. “on” в слове “song” было заменено на “forward”. Во-вторых, второе “on” в строке 2 заменено не было. Это произошло потому, что по умолчанию команда “s” обрабатывает первое совпадение в строке. А затем переходит к следующей строке. Для замены каждого “on”, а не только первого в строке, можно указать команде замены флаг “g” после шаблонов:

sed ‘s/on/forward/g’ annoying.txt this is the sforwardg that never ends yes, it goes forward and forward, my friend some people started singing it not knowing what it was and they’ll cforwardtinue singing it forever just because…

Теперь были заменены все “on”. Чтобы заменить только вторые “on” в каждой строке, вместо “g” нужно указать “2”:

sed ‘s/on/forward/2’ annoying.txt this is the song that never ends yes, it goes on and forward, my friend some people started singing it not knowing what it was and they’ll continue singing it forever just because…

Если нам нужно вывести только те строки, где выполнялась замена, для отмены автоматического вывода можно снова воспользоваться опцией «-n». Затем мы можем передать флаг “p” для вывода строк, в которых производились замены.

sed -n ‘s/on/forward/2p’ annoying.text yes, it goes on and forward, my friend

Пример показывает, что флаги в конце команды можно комбинировать. Чтобы игнорировать регистр, нужно указать флаг “i”.

sed ‘s/SINGING/saying/i’ annoying.txt this is the song that never ends yes, it goes on and on, my friend some people started saying it not knowing what it was and they’ll continue saying it forever just because…

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

grep ‘текс’ -P -R -I -l  * | xargs sed -i ‘s/текст_который_нужно_искать/текст/g’

Примеры использования sed





























































































Синтаксис командыОписание
sed ‘s/Nick/John/g’ report.txtЗаменяет каждое вхождение Nick на John в файле report.txt
sed ‘s/Nick|nick/John/g’ report.txtЗаменяет каждое вхождение Nick или nick на John.
sed ‘s/^/ /’ file.txt > file_new.txtДобавляет 8 пробелов слева от текста для улучшения качества печати.
sed -n ‘/Of course/,/attention you pay/p’ myfileВыводит все абзацы, начинающиеся с “Of course” и заканчивающиеся на “attention you pay”.
sed -n 12,18p file.txtВыводит только строки 12-18 файла file.txt
sed 12,18d file.txtВыводит весь файл file.txt за исключением строк с 12 по 18
sed G file.txtВставляет пустую строку после каждой строки в file.txt
sed -f script.sed file.txtЗаписывает все команды в script.sed и выполняет их.
sed ‘5!s/ham/cheese/’ file.txtЗаменяет ham на cheese в file.txt за исключением 5-й строки
sed ‘$d’ file.txtУдаляет последнюю строку
sed -n ‘/[0-9]{3}/p’ file.txtПечатает только строки с тремя последовательными цифрами
sed ‘/boom/s/aaa/bb/’ file.txtЕсли найден “boom”, заменить aaa на bb
sed ’17,/disk/d’ file.txtУдаляет все строки, начиная с 17-й, до “disk”. Если строк с “disk” несколько, удаляет до первой из них.
echo ONE TWO | sed “s/one/unos/I”Заменяет one на unos независимо от регистра, поэтому будет напечатано “unos TWO”
sed ‘G;G’ file.txtВставляет две пустые строки после каждой строки в file.txt
sed ‘s/.$//’ file.txtСпособ замены dos2unix :). В общем случае удаляет последний символ в каждой строке.
sed ‘s/^[ t]*//’ file.txtУдаляет все пробелы/табы перед каждой строкой в file.txt
sed ‘s/[ t]*$//’ file.txtУдаляет все пробелы/табы в конце каждой строки в file.txt
sed ‘s/^[ t]*//;s/[ t]*$//’ file.txtУдаляет все пробелы/табы в начале и в конце каждой строки в file.txt
sed ‘s/foo/bar/’ file.txtЗаменяет foo на bar только в первом вхождении в строке.
sed ‘s/foo/bar/4’ file.txtЗаменяет foo на bar только в четвертом вхождении в строке.
sed ‘s/foo/bar/g’ file.txtЗаменяет foo на bar для всех вхождений в строке.
sed ‘/baz/s/foo/bar/g’ file.txtЗаменить foo на bar только если строка содержит baz.
sed ‘/./,/^$/!d’ file.txtСжать все последовательные пустые строки до одной. Пустой строки сверху не остается.
sed ‘/^$/N;/n$/D’ file.txtСжать все последовательные пустые строки до одной, но оставить верхнюю пустую строку.
sed ‘/./,$!d’ file.txtУдалить все начальные пустые строки
sed -e :a -e ‘/^n*$/{$d;N;};/n$/ba’ file.txtУдалить все замыкающие пустые строки
sed -e :a -e ‘/$/N; s/n/ /; ta’ file.txtЕсли строка заканчивается обратным сплешем, соединить ее со следующей (полезно для скриптов оболочки)
sed -n ‘/regex/,+5p’ file.txtВыводит 5 строк после строки содержащей regex
sed ‘1~3d’ file.txtУдалить каждую третью строку, начиная с первой.
sed -n ‘2~5p’ file.txtПечатать каждую пятую строку, начиная со второй.
sed ‘s/[Nn]ick/John/g’ report.txtДругой способ записи некоторых приведенных выше примеров. Вы можете предложить свой?
sed -n ‘/RE/{p;q;}’ file.txtПечатает строку с первым соответствием RE (регулярного выражения)
sed ‘0,/RE/{//d;}’ file.txtУдаляет строку с первым соответствием
sed ‘0,/RE/s//to_that/’ file.txtИзменяет только первое соответствие
sed ‘s/^[^,]*,/9999,/’ file.csvЗаменяет на 9999 все значения в первой колонке CSV-файла
s/^ *(.*[^ ]) *$/|1|/; s/” *, */”|/g; : loop s/| *([^”,|][^,|]*) *, */|1|/g; s/| *, */||/g; t loop s/ *|/|/g; s/| */|/g; s/^|(.*)|$/1/;Скрипт sed для конвертирования CSV-файла в файл с вертикальной чертой в качестве разделителя (работает только с некоторыми типами CSV, со встроенными кавычками и запятыми).
sed ‘:a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/12,3/g;ta’ file.txtМеняет формат чисел в file.txt с 1234.56 на 1.234.56
sed -r “s/<(reg|exp)[a-z]+/U&/g”Переводит любое слово, начинающееся с reg или exp в верхний регистр.
sed ‘1,20 s/Johnson/White/g’ file.txtПроизводит замену Johnson на White только в строках 1 – 20.
sed ‘1,20 !s/Johnson/White/g’ file.txtПредыдущий пример наоборот (заменяет везде, кроме строк 1-20)
sed ‘/from/,/until/ { s//magenta/g; s//cyan/g; }’ file.txtЗаменяет только между “from” и “until”. Если областей “from”-“until” несколько, заменяет в каждой из них.
sed ‘/ENDNOTES:/,$ { s/Schaff/Herzog/g; s/Kraft/Ebbing/g; }’ file.txtЗаменяет только со слова “ENDNOTES:” и до EOF
sed ‘/./{H;$!d;};x;/regex/!d’ file.txtПечатает абзац только если он содержит regex
sed -e ‘/./{H;$!d;}’ -e ‘x;/RE1/!d;/RE2/!d;/RE3/!d’ file.txtПечатает абзацы только если они содержат RE1, RE2 и RE3. Порядок RE1, RE2 и RE3 не имеет значения.
sed ‘s/14″/fourteen inches/g’ file.txtТак вы сможете использовать двойные кавычки
sed ‘s//some/UNIX/path//a/new/path/g’ file.txtРабота с путями Unix
sed ‘s/[a-g]//g’ file.txtУдаляет все символы, начиная с a и заканчивая g из файла file.txt
sed ‘s/(.*)foo/1bar/’ file.txtЗаменяет только последнее в строке соответствие foo на bar
sed ‘1!G;h;$!d’Замена команды tac
sed ‘/n/!G;s/(.)(.*n)/&21/;//D;s/.//’Замена команды rev
sed 10q file.txtЗамена команды head
sed -e :a -e ‘$q;N;11,$D;ba’ file.txtЗамена команды tail
sed ‘$!N; /^(.*)n1$/!P; D’ file.txtЗамена команды uniq
sed ‘$!N; s/^(.*)n1$/1/;t; D’ file.txtОбратная команда (что эквивалентно uniq -d)
sed ‘$!N;$!D’ file.txtЭквивалент tail -n 2
sed -n ‘$p’ file.txt… tail -n 1 (или tail -1)
sed ‘/regexp/!d’ file.txtЭквивалент grep
sed -n ‘/regexp/{g;1!p;};h’ file.txtПечатает строку, находящуюся перед первым соответствием регулярному выражению, но не включающую само соответствие
sed -n ‘/regexp/{n;p;}’ file.txtПечатает строку, находящуюся после первого соответствия регулярному выражению, но не включающую само соответствие
sed ‘/pattern/d’ file.txtУдаляет строки, соответствующие шаблону pattern
sed ‘/./!d’ file.txtУдаляет все пустые строки из файла
sed ‘/^$/N;/n$/N;//D’ file.txtСжимает все последовательные пустые строки до двух пустых. Одинарные пустые строки не изменяются.
sed -n ‘/^$/{p;h;};/./{x;/./p;}’ file.txtУдаляет последнюю строку каждого абзаца
sed ‘/^$/q’Получает заголовок письма. Другими словами – удаляет все после первой пустой строки.
sed ‘1,/^$/d’Получает тело письма. Другими словами – удаляет все до первой пустой строки.
sed ‘/^Subject: */!d; s///;q’Получает тему письма
sed ‘s/^/> /’Цитирует сообщение, вставляя “> ” перед каждой строкой
sed ‘s/^> //’Обратная команда (убирает цитирование из сообщения)
sed -e :a -e ‘s/<[^>]*>//g;/Удаляет HTML-теги
sed ‘/./{H;$!d;};x;s/n/={NL}=/g’ file.txt | sort | sed ‘1s/={NL}=//;s/={NL}=/n/g’Сортирует абзацы в file.txt в алфавитном порядке
sed ‘s@/usr/bin@&/local@g’ path.txtЗаменяет /usr/bin на /usr/bin/local в path.txt
sed ‘s@^.*$@<&>>>@g’ path.txtПопробуйте и увидите 🙂
sed ‘s/(/[^:]*).*/1/g’ path.txtПри условии, что path.txt содержит $PATH, выводит только первый путь в каждой строке
sed ‘s/([^:]*).*/1/’ /etc/passwdЗамена awk – показывает только пользователей из файла passwd
echo “Welcome To The Geek Stuff” | sed ‘s/(b[A-Z])/(1)/g’Понятно без объяснений – (W)elcome (T)o (T)he (G)eek (S)tuff
sed ‘/./{H;$!d;};x;s/n/={NL}=/g’ file.txt | sed ‘/END$/s/hills/mountains/g’ | sed ‘1s/={NL}=//;s/={NL}=/n/g’Заменяет “hills” на “mountains”, но только в блоках текста, начинающихся с пустой строки и заканчивающихся строкой с тремя символами “END”, включительно.
sed -e ‘/^#/d’ /etc/services | moreПоказывает файл services без закомментированных строк
sed ‘$s@([^:]*):([^:]*):([^:]*)@3:2:1:@g’ path.txtМеняет порядок первых трех элементов в последней строке файла path.txt на обратный
sed ‘/regex/{x;p;x;}’ file.txtВставляет новую строку выше каждой строки, соответствующей регулярному выражению
sed ‘/AAA/!d; /BBB/!d; /CCC/!d’ file.txtИщет строки содержащие AAA, BBB и CCC в любом порядке
sed ‘/AAA.*BBB.*CCC/!d’ file.txtИщет строки содержащие AAA, BBB и CCC в заданном порядке
sed -n ‘/^.{65}/p’ file.txtПечатает строки длиной 65 символов и более
sed -n ‘/^.{65}/!p’ file.txtПечатает строки длиной 65 символов и менее
sed ‘/regex/G’ file.txtВставляет пустую строку под каждой строкой, содержащей regex
sed ‘/regex/{x;p;x;G;}’ file.txtВставляет пустую строку над и под каждой строкой, содержащей regex
sed = file.txt | sed ‘N;s/n/t/’Нумерует строки в file.txt
sed -e :a -e ‘s/^.{1,78}$/ &/;ta’ file.txtВыровнять текст по правому краю
sed -e :a -e ‘s/^.{1,77}$/ &/;ta’ -e ‘s/( *)1/1/’ file.txtВыровнять текст по центру

В окружении UNIX: конвертируем новые строки DOS (CR/LF) в формат Unix.

Предполагаем, что все строки оканчиваются на CR/LF

sed ‘s/.$//’

В bash/tcsh, нажмите Ctrl-V затем Ctrl-M

sed ‘s/^M$//’

Работает на ssed, gsed 3.02.80 или выше

sed ‘s/x0D$//’

В окружении UNIX: конвертируем новые строки Unix (LF) в формат DOS.

Командная строка под ksh

sed “s/$/`echo -e r`/”

Командная строка под bash

sed ‘s/$’”/`echo r`/”

Командная строка под zsh

sed “s/$/`echo r`/”

gsed 3.02.80 или выше

sed ‘s/$/r/’

В окружении DOS: конвертируем новые строки Unix (LF) в формат DOS.

Метод 1

sed “s/$//”

Метод 2

sed -n p

В окружении DOS: конвертировать DOS переводы строк (CR/LF) в формат Unix.

Может быть только сделано с UnxUtils sed, версии 4.0.7 или выше. Версию UnxUtils можно узнать пользовательским свичем “–text”, который появляется когда вы используете свич “–help”. В других случаях изменение перевода строк DOS в перевод строк Unix не может быть выполнено в окружении DOS. Используйте вместо этого “tr”.

UnxUtils sed v4.0.7 или выше

sed “s/r//” infile >outfile

GNU tr версия 1.22 или выше

tr -d r outfile

Удалить пустоту в начале (пробелы, табуляции) от передней части каждой строки выравнивает весь текст по левому краю

sed ‘s/^[ t]*//’

Удаление пустоты (пробелы, табуляции) в конце каждой строки

Удаление пустоты как в начале, так и в конце каждой строки

sed ‘s/^[ t]*//;s/[ t]*$//’

Вставка 5 пробелов в начале каждой строки (сделать отступ страницы)

sed ‘s/^/ /’

Выравнять весь текст заподлицо справа на 79-ом столбце по ширине

sed -e :a -e ‘s/^.{1,78}$/ &/;ta’ # установить в 78 плюс 1 пробел

Центрировать весь текст в середине на 79-ом столбце по ширине

В первом методе пробелы в начале строки имеют значение, и в конце строки добавляются пробелы.

sed -e :a -e ‘s/^.{1,77}$/ & /;ta’

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

sed -e :a -e ‘s/^.{1,77}$/ &/;ta’ -e ‘s/( *)1/1/’

Подстановка (поиск и замена “foo” на “bar” в каждой строке

Заменить только первое вхождение в строке

sed ‘s/foo/bar/’

Заменить только четвёртое вхождение в строке

sed ‘s/foo/bar/4’

Заменить ВСЕ вхождения в строке

sed ‘s/foo/bar/g’

Заменяет следующее-на-последнее вхождение (the next-to-last case)

sed ‘s/(.*)foo(.*foo)/1bar2/’

Поменять только последний случай

sed ‘s/(.*)foo/1bar/’

Поменять “foo” на “bar” ТОЛЬКО для строк, которые содержат “baz”

sed ‘/baz/s/foo/bar/g’

Заменить “foo” на “bar” КРОМЕ строк, которые содержат “baz”

sed ‘/baz/!s/foo/bar/g’

Поменять “scarlet” или “ruby” или “puce” на “red”

Большинство sed

sed ‘s/scarlet/red/g;s/ruby/red/g;s/puce/red/g’

Только GNU sed

gsed ‘s/scarlet|ruby|puce/red/g’

Обратный порядок строк (эмулирует “tac”) баг/фича в HHsed v1.5 приводит к тому, что пустые строки удаляются

Метод первый

sed ‘1!G;h;$!d’

Метод второй

sed -n ‘1!G;h;$p’

Обратный порядок всех символов в строке (эмулирует “rev”)

sed ‘/n/!G;s/(.)(.*n)/&21/;//D;s/.//’

Соединить пары строк (наподобие “paste”)

sed ‘$!N;s/n/ /’

Если строка заканчивается на обратный слэш, прикрепить к ней следующую строку

sed -e :a -e ‘/$/N; s/n//; ta’

Если строка начинается со знака равно, прикрепить её к предыдущей строке и заменить “=” на пробел

sed -e :a -e ‘$!N;s/n=/ /;ta’ -e ‘P;D’

Добавить запятые в цифровую строку, замена “1234567” на “1,234,567”

GNU sed

gsed ‘:a;s/B[0-9]{3}>/,&/;ta’

Другие seds

sed -e :a -e ‘s/(.*[0-9])([0-9]{3})/1,2/;ta’

Добавить запятые к номерам, в том числе содержащим десятичные точки и знаки минус (GNU sed)

gsed -r ‘:a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/12,3/g;ta’

Добавить пустую строку каждые 5 строк (после каждых 5, 10, 15, 20 и т. д. строк)

Только GNU sed

gsed ‘0~5G’

Другие sed

sed ‘n;n;n;n;G;’

Выборочная печать конкретных строк:

Напечатать первые 10 строк файла (эмулирует поведение “head”)

sed 10q

Напечатать первую строку файла (эмулирует “head -1″)

sed q

Напечатать последние 10 строк файла (эмулирует “tail”)

sed -e :a -e ‘$q;N;11,$D;ba’

Напечатать последние 2 строки файла (эмулирует “tail -2″)

sed ‘$!N;$!D’

Напечатать последнюю строку файла (эмулирует “tail -1″)

Первый метод

sed ‘$!d’

Второй метод

sed -n ‘$p’

Напечатать строки файла начиная с последней

Для файла в одну строку напечатать пустую строку

sed -e ‘$!{h;d;}’ -e x

Для файла в одну строку, напечатать эту строку:

sed -e ‘1{$q;}’ -e ‘$!{h;d;}’ -e x

Для файла в одну строку ничего не печатать

sed -e ‘1{$d;}’ -e ‘$!{h;d;}’ -e x

Печатать только строки, которые соответствуют регулярному выражению (эмулирует “grep”)

Метод 1

sed -n ‘/regexp/p’

Метод 2

sed ‘/regexp/!d’

Печатать только строки, которые НЕ соответствуют регулярному выражению (эмулирует “grep -v”)

Метод 1, соответствует вышеприведённому

sed -n ‘/regexp/!p’

Метод 2, упрощённый синтаксис

sed ‘/regexp/d’

Печатать строку, которая идёт перед строкой, удовлетворяющей регулярному выражению, но не строку, содержащую регулярное выражение

sed -n ‘/regexp/{g;1!p;};h’

Печатать строку, которая идёт сразу после регулярного выражения, но не строку, содержащую регулярное выражение

sed -n ‘/regexp/{n;p;}’

Печатать по одной строке перед и после регулярного выражения, с номером строки, показывающей где встретилось регулярное выражение (наподобии “grep -A1 -B1″)

sed -n -e ‘/regexp/{=;x;1!p;g;$!N;p;D;}’ -e h

grep для AAA и BBB и CCC (в любом порядке)

sed ‘/AAA/!d; /BBB/!d; /CCC/!d’

grep для AAA и BBB и CCC (в таком порядке)

sed ‘/AAA.*BBB.*CCC/!d’

grep для AAA или BBB или CCC (эмулирует “egrep”)

Большинство sed

sed -e ‘/AAA/b’ -e ‘/BBB/b’ -e ‘/CCC/b’ -e d

Только GNU sed

gsed ‘/AAA|BBB|CCC/!d’

Напечатать параграф, если он содержит AAA (параграфы разделяют пустые строки) HHsed v1.5 должен вставить ‘G;’ после ‘x;’ в следующих трёх скриптах ниже

sed -e ‘/./{H;$!d;}’ -e ‘x;/AAA/!d;’

Напечатать параграф, если он содержит AAA и BBB и CCC (в любом порядке)

sed -e ‘/./{H;$!d;}’ -e ‘x;/AAA/!d;/BBB/!d;/CCC/!d’

Напечатать параграф, если он содержит AAA или BBB или CCC

sed -e ‘/./{H;$!d;}’ -e ‘x;/AAA/b’ -e ‘/BBB/b’ -e ‘/CCC/b’ -e d

Только GNU sed

gsed ‘/./{H;$!d;};x;/AAA|BBB|CCC/b;d’

Напечатать только строки длинной 65 символов или длиннее

sed -n ‘/^.{65}/p’

Напечатать только строки, которые короче 65 символов

Метод 1, соответствует вышеприведённому

sed -n ‘/^.{65}/!p’

Метод 2, упрощённый синтаксис

sed ‘/^.{65}/d’

Напечатать секцию файла от регулярного выражения до конца файла

sed -n ‘/regexp/,$p’

Напечатать секцию файла, включающую номера строк (строки 8-12, включая и 8 и 12)

Метод 1

sed -n ‘8,12p’

Метод 2

sed ‘8,12!d’

Напечатать строку с номером 52

Способ 1

sed -n ’52p’

Способ 2

sed ’52!d’

Способ 3, эффективен на больших файлах

sed ’52q;d’

Начиная со строки 3, печатать каждую седьмую строку

Только GNU sed

gsed -n ‘3~7p’

Другие sed

sed -n ‘3,${p;n;n;n;n;n;n;}’

Напечатать раздел файла между двумя регулярными выражениями (включая)

sed -n ‘/Iowa/,/Montana/p’ # чувствительно к регистру

Выборочное удаление конкретных строк:

Напечатать весь файл КРОМЕ секции между двумя регулярными выражениями 2

sed ‘/Iowa/,/Montana/d’

Удалить дубликаты последовательных строк файла (эмулирует “uniq”). Первая строка из двух дублирующих сохраняется, остальное удаляется.

sed ‘$!N; /^(.*)n1$/!P; D’

Удалить дубликаты непоследовательных строк из файла. Остерегайтесь переполнения буфера или используйте GNU sed.

sed -n ‘G; s/n/&&/; /^([ -~]*n).*n1/d; s/n//; h; P’

Удалить все строки, кроме дублирующих строк (эмулирует “uniq -d”).

sed ‘$!N; s/^(.*)n1$/1/; t; D’

Удалить первые 10 строк файла

sed ‘1,10d’

Удалить последние строки файла

sed ‘$d’

Удалить последние 2 строки файла

sed ‘N;$!P;$!D;$d’

Удалить последние 10 строк файла

Способ 1

sed -e :a -e ‘$d;N;2,10ba’ -e ‘P;D’

Способ 2

sed -n -e :a -e ‘1,10!{P;N;D;};N;ba’

Удалить каждую восьмую строку файла

Только GNU sed

gsed ‘0~8d’

Другие sed

sed ‘n;n;n;n;n;n;n;d;’

Удалить строки, содержащие паттерн

sed ‘/pattern/d’

Удалить ВСЕ пустые строки из файла (то же самое что и “grep ‘.’ “)

Способ 1

sed ‘/^$/d’

Способ 2

sed ‘/./!d’

Удалить все ПОСЛЕДОВАТЕЛЬНЫЕ пустые строки из файла, кроме первой, также удаляет все пустые строки в начале и в конце файла (эмулирует “cat -s”)

Способ 1, позволяет 0 пустых строк вверху, 1 в EOF

sed ‘/./,/^$/!d’

Способ 2, позволяет 1 пустую строку вверху, 0 в EOF

sed ‘/^$/N;/n$/D’

Удалить все ПОСЛЕДОВАТЕЛЬНЫЕ пустые строки из файла кроме первых двух:

sed ‘/^$/N;/n$/N;//D’

Удалить все первые пустые строки в файле

sed ‘/./,$!d’

Удалить все конечные пустые строки в файле

sed -e :a -e ‘/^n*$/{$d;N;ba’ -e ‘}’ # works on all seds

Удалить последнюю строку каждого параграфа

sed -n ‘/^$/{p;h;};/./{x;/./p;}’

Заключение

Мы рассмотрели основы использования sed. Теперь вы можете быстро редактировать текстовые документы при помощи соответствующих команд sed.


[spoiler title=”Источники”]

  • https://losst.ru/komanda-sed-linux
  • http://rus-linux.net/MyLDP/consol/sed.html
  • https://www.vseprolinux.ru/linux-sed
  • https://www.tech-notes.net/sed-examples/
  • https://www.AndreyOlegovich.ru/IT/sed/
  • https://ITProffi.ru/komanda-sed-v-linux-vyvod-teksta-udalenie-zamena/
  • https://ZaLinux.ru/?p=266


[/spoiler]


2020-12-22T10:34:30
Linux

Изучаем команды Linux: dd. Некоторые особенности использования системной утилиты dd и её модифицированных версий



























3/5 — (1 голос)

Некоторые особенности использования системной утилиты dd и её модифицированных версий. В UNIX системах есть одна очень древняя команда, которая называется dd. Она предназначена для того, чтобы что-то куда-то копировать побайтово. dd (dataset definition) — программа UNIX, предназначенная как для копирования, так и для конвертации файлов. Название унаследовано от оператора DD (Dataset Definition) из языка JCL.

Несколько слов о резервном копировании файлов

Бэкапы (от английского «Backup») – это метод создания запасной копии важной информации на компьютере либо сервере. Его можно проводить ручным способом или автоматическим в соответствии с регулярным расписанием.

Утилитой DD можно воспользоваться для ОС семейства Линукс, ее команды помогают с копированием файлов через определенные операнды. Это одна из наиболее давних утилит, ее бэкапы можно открыть разнообразным софтом. Версия под операционную систему Виндовс отличается меньшим функционалом, чем версия для Линукс. К примеру, в ней отсутствует поддержка конвертации файлоы и использования блочных устройств.

Что такое утилита dd?

Резервное копирование (backup) — создание запасных копий серверов, может быть настроено по регулярному расписанию, а может выполняться однократно в удобный для пользователя момент.

Утилита dd является аналогом одноименной утилиты для Linux систем. Команда dd копирует файл, в соответствии с указанными операндами. Программа генерирует необработанные файлы, которые могут быть прочитаны многими другими программами. dd является самой старой утилитой для создания образов и не обладает некоторыми полезными опциями, но при этом все еще используется. Версия для Windows является урезанной по сравнению с родительской под Linux, например, не поддерживается конвертация данных и нельзя использовать блочные устройства.

Примеры использования dd

Если вы работали с командой dd в Linux, то у вас не возникнет сложностей при её использовании в операционной системе Windows.

Для того чтобы открыть страницу помощи перейдите в каталог с исполняемым файлом, откройте консоль PowerShell и выполните команду:

./dd.exe –list

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

./dd.exe if=<исходный_диск> of=<полное_имя_копии> bs=1440k

Пример создания образа диска f на диск e:

./dd.exe if=.f: of=e:tempdisk1.img bs=8M

Результат:

rawwrite dd for windows version 0.5. Written by John Newbigin <jn@it.swin.edu.au>This program is covered by the GPL. See copying.txt for details 7279+1 records in 7279+1 records out

  1. if=/dev/sda – копируем весь жесткий диск sda;
  2. of=/mnt/backup/sda.img – копируем в /mnt/backup/sda.img, где каталог /mnt/backup точка монтирования диска, на котором будет содержаться образ;
  3. bs=8M – задаем размер кэша жесткого диска для ускорения процедуры копирования (иначе данные будут сбрасываться малыми порциями по 512 байт).

Примечание: на целевом диске должно быть достаточно места, т.е. не менее того объема, который занимает исходный диск.

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

./dd.exe if=<полное_имя_копии> of=<целевой_диск> bs=8M

Например:

./dd.exe if=e:tempdisk1.img of=.f: bs=8M

Результат:

rawwrite dd for windows version 0.5. Written by John Newbigin <jn@it.swin.edu.au>This program is covered by the GPL. See copying.txt for details 1279+1 records in 1279+1 records out

Создавать резервную копию очень удобно по настроенному расписанию, о том как настроить планировщик Windows читайте в нашей статье. Это позволит автоматизировать создание копий сервера или данных.

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

</jn@it.swin.edu.au></jn@it.swin.edu.au>

Команда dd

Синтаксис утилиты достаточно необычен, но в то же время очень прост, после того как вы его запомните и привыкнете:

$ dd if=источник_копирования of=место_назначенияпараметры

С помощью параметра if вам нужно указать источник, откуда будут копироваться блоки, это может быть устройство, например, /dev/sda или файл – disk.img. Дальше, с помощью параметра of необходимо задать устройство или файл назначения. Другие параметры имеют такой же синтаксис, как if и of.

Теперь давайте рассмотрим дополнительные параметры:

  • bs – указывает сколько байт читать и записывать за один раз;
  • cbs – сколько байт нужно записывать за один раз;
  • count – скопировать указанное количество блоков, размер одного блока указывается в параметре bs;
  • conv – применить фильтры к потоку данных;
  • ibs – читать указанное количество байт за раз;
  • obs – записывать указанное количество байт за раз;
  • seek – пропустить указанное количество байт в начале устройства для чтения;
  • skip – пропустить указанное количество байт в начале устройства вывода;
  • status – указывает насколько подробным нужно сделать вывод;
  • iflag, oflag – позволяет задать дополнительные флаги работы для устройства ввода и вывода, основные из них: nocache, nofollow.

Это были все основные опции, которые вам могут понадобиться. Теперь перейдем ближе к практике и рассмотрим несколько примеров как пользоваться утилитой dd linux.

Почему dd?

Мы выбрали dd как первого соискателя в нашей серии, потому что это очень полезная утилита, имеющая, как вы увидите ниже, множество опций. Это делает ее практически швейцарским армейским ножом в мире Linux.

Как работает команда dd?

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

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

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

Как загрузить утилиту dd

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

В загруженном архиве будет несколько файлов, запустить утилиту позволит приложение dd.exe.

Синтаксис команды dd

У данной утилиты странный и слегка сложный синтаксис. Несмотря на это, он весьма прост. Пользоваться программой легко, вы быстро запомните алгоритм и привыкнете к нему.

dd if=[что копировать] of=[куда копировать] параметры

С использованием параметра «if» потребуется прописать что копировать (источник). В “of” можно написать файл или устройство, например флешку или HDD диск.

Основные параметры:

  • «bs» – количество байт, которые будут читаться и записываться за один раз.
  • «cbs» – число байт, записываемых за один раз.
  • «count» – число скопированных блоков. Размер блока прописывается в опции «bs».
  • «ibs» – чтение определенного числа байт за 1 раз.
  • «obs» – записывание определенного числа байт за 1 раз.
  • «seek» – пропуск определенного числа байт в самом начале устройства во время чтения.
  • «skip» – пропуск определенного числа байт в самом начале при выводе.
  • «status» – подробность вывода.
  • «iflag», «oflag» – создание дополнительных флагов, которые нужны для ввода или вывода.
  • –help – показывает справку.
  • –version – показывает информацию о версии утилиты.

Выше описаны наиболее популярные функции, которые могут потребоваться вам при использовании программы dd Linux.

Примеры команды linux dd

Утилита чаще всего применяется для формирования образов DVD- и CD-дисков. Для их сохранения в виде образа iso существуют определенные команды. Чтобы программа не реагировала на ошибки, можно запустить фильтр noerror. Далее создается образ, который в последующем сохраняется на диск.

Чтобы сделать образ, узнаем разметку диска, с помощью dh.

df -h

Сделаем образ раздела /home, файловая разметка /dev/sda6 в каталог /root/home.iso. В качестве аргумента укажем “noerror” – не выдавать ошибки. Также ограничим  максимальный размер файла на 4096 байт.

dd if=/dev/sda6 of=/root/home.iso bs=4096 conv=noerror

Таким образом делаются образы жестких дисков, флешек, оптических приводов.

Как видно из примера выше, в каталоге /root появился файл home.iso. В дальнейшем его можно развернуть. Он позволит восстановить испорченную в ходе использования систему, в нашем случае файлы каталога home.

Весьма полезный параметр – «bs». Он в значительной мере влияет на скорость работы самой программы. Этот аргумент дает возможность установить размер блока во время передачи информации. Предварительно задается цифровое значение, где указывается один из модификаторов.

Как было сказано выше,  dd Linux позволяет записать информацию на диск или в определенный раздел именно в двоичном виде. В этом случае записываются как нули, так и единицы. Для очистки диска достаточно наполнить его нулями.

Создадим образ диска. Пусть /dev/cdrom1 это наш оптический привод, cdrom.

# dd if=/dev/cdrom1 of=/home/samba/disk/obraz.iso

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

Как пользоваться dd?

Обычные пользователи используют команду dd чаще всего для создания образов дисков DVD или CD.

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

$ dd if=/dev/sda of=~/disk.img

В вашей домашней папке будет создан файл с именем disk1.img, который в будущем можно будет развернуть и восстановить испорченную систему.

Чтобы записать образ на жесткий диск или раздел достаточно поменять местами адреса устройств:

$ dd if=/dev/sda of=~/disk.img bs=5M

Команда dd linux

Следующий параметр — это count. С помощью него можно указать сколько блоков необходимо скопировать.

Например, мы можем создать файл размером 512 мегабайт, заполнив его нулями из /dev/zero или случайными цифрами из /dev/random:

$ sudo dd if=/dev/sda of=mbr.img bs=1b count=1

Команда dd linux

Использование параметров, управляющих размерами и количеством блоков

Важными параметрами команды dd являются bs (block size) и count. Первый упрвляет размером блока, второй — количеством блоков, подвергающихся обработке. Например, можно выполнить следующую команду

# dd if=/dev/zero of=/dev/null bs=1M count=32768 32768+0 записей считано 32768+0 записей написано скопировано 34359738368 байт (34 GB), 2,35194 c, 14,6 GB/c

дающую представленеие о скорости передачи данных “процессор-память”.

Другое, более полезное применение параметров изменения размера и количества блоков — создание образа MBR (Master Boot Record):

dd if=/dev/sda of=/home/user/archive/MBR.image bs=512 count=1

С помощью dd можно также при необходимости тестировать и анализировать производительность жёсткого диска при выполнении операций последовательного чтения/записи с блоками заданного размера, например, с блокми по 1024 байта

dd if=/dev/zero bs=1024 count=1000000 of=/home/user/tmp/1Gb.file dd if=/home/user/tmp/1Gb.file bs=64k | dd of=/dev/null

Параметры пропуска блоков

Когда необходимо игнорировать некоторые данные из входного файла и не переносить их в выходной файл, на помощь приходит параметр skip, который позволяет пропустить заданное количество блоков перед началом копирования (даже на устройствах, на которых невозможна операция seek</strong>; при этом “пропускаемые” блоки считываются, но никак не используются).

Например, информацию в BIOS, располагающууюся по адресам с C:0000 по F:FFFF можно просмотреть следующим образом:

dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8

А вот пример преобразования файла образа диска, созданного программой Nero (Nero Image File) в обычный ISO-формат (команда просто удаляет 300-килобайтный заголовок при записи нового образа):

dd if=nero_image.nrg bs=1k skip=300 of=image.iso

Параметр seek позволяет пропускать заданное количество блоков в выходном файле. Это может оказаться полезным при “склейке” большого файла, который может быть считан лишь фрагментарно (то есть, не всё содержимое можно получить за одну операцию чтения). Хороший пример подобного применения параметра seek приведён в википедии. Иногда необходимо зараезервировать свободное место в начале выходного файла или имитировать “большой” файл. В этом случае также помогает seek:

dd if=small.file seek=100 of=pseudo_big.file

Параметр conv в данной статье не рассматривается в подробностях, а упомянут он здесь лишь для того, чтобы отметить один из его аргументов, noerror — продолжать после ошибок чтения. Дело в том, что при указании conv=noerror при наличии слишком большого количества ошибок во входных файлах (на устройствах) возникают затруднения и даже потенциальные опасности для оборудования при выполнении команды dd.

Утилита dd_rescue

Программа dd_rescue выполняет те же задачи, что и dd, но делает это более эффективно и с меньшим риском. В общем виде её выполнение выглядит так:

dd_rescue /dev/sda1 local_sda1.img

Следует обратить внимание на то, что здесь не используется формат параметров dd, то есть части “if=” и “of=” не нужны. По умолчанию dd_rescue копирует стандартный ввод в стандартный вывод, то есть, так же, как и dd, является фильтром и может участвовать в конвейерах команд:

dd_rescue /dev/sda1 – | bzip2 > /dir/local_sda1.img.bz2

Ещё один пример, с передачей файла образа раздела диска по сети:

dd_rescue /dev/sda1 – | ssh user@remote.host “cat – > /remote/destination/my_sda1.img”

В целом операции и действия похожи на dd. Но главным отличием dd_rescue от dd является то, что эта утилита не прекращает работу при возникновении ошибок и не пытается выполнять чтение (или запись) с ошибкой до бесконечности, а обрабатывает возникающие ошибки наилучшим возможным в конкретной ситуации образом. Здесь можно определить обнуление “плохого” блока после определённого количества попыток чтения/записи, фиксацию номеров “плохих” блоков в log-файле и запись либо отказ от записи блоков, обнулённых при ошибках. Такой подход делает программу весьма полезной при извлечении данных с устройств, при чтении которых возникает слишком много ошибок ввода/вывода.

Описание всех ключей можно получить, выполнив команду dd_rescue -h.

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

В предыдущем примере мы вводили текст в stdin (стандартный поток ввода). Однако, всегда можно использовать входные и выходные файлы. Чтобы указать имена входного и выходного файла, используются опции if и of, соответственно. Например, если вам нужно перевести в верхний регистр текст из файла file1 и записать его в файл file2, можно выполнить следующую команду:

dd if=file1 of=file2 conv=ucase

Командой dd также можно создавать файлы различных объемов, например для тестов. Следующая команда создаст файл объемом 1 ГБ заполненный случайными данными

dd if=/dev/urandom of=bigfile bs=1M count=1000

Или файл заполненный нулями

dd if=/dev/null of=bigfile bs=1M count=1000

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

Например, следующая команда полностью копирует диск /dev/sda на диск /dev/sdb:

dd if=/dev/sda of=/dev/sdb bs=4096 conv=noerror,sync

Аргумент noerror опции conv позволяет программе продолжать копирование даже при наличии ошибок, а sync задаёт использование синхронизированного ввода/вывода. Размер блока должен быть кратным 1 Кб (1024 байта), а выходной диск равен по объему входному или больше.

Аналогично можно создать образ CD или DVD, вместе с загрузочным сектором:

dd if=/dev/cdrom of=/mycd.iso

Опция -o loop команды mount позволяет смонтировать файл как обычное устройство. Так можно подключить созданный образ:

mount -o loop /mycd.iso /mnt/cd

Сокращение вывода в stderr

Можно ограничить объём информации, выводимой в поток stderr, при помощи опции status. Например, если требуется сообщать только об ошибках, нужно указать эту опцию с аргументом none:

dd if=file1 of=file3 status=none

Другие возможные значения — noxfer, исключающее вывод конечной статистики, и progress, исключающее вывод текущей статистики.

Действия с выходными файлами

Чтобы команда работала только в том случае, если выходного файла ещё не существует, в качестве аргумента опции conv можно указать значение excl.

dd if=file1 of=file3 conv=excl

По умолчанию dd перезаписывает выходной файл, если он уже существует. Если требуется обновление с записью в конец файла, укажите значение append для опции oflag и значение notrunc для опции conv, например:

dd if=file1 of=file2 oflag=append conv=notrunc

При необходимости можно также отключить создание выходного файла, если такого файла не существует. Для этого используется аргумент nocreat опции conv:

dd if=file1 of=file10 oflag=append conv=nocreat

Изменение регистра текста

Наиболее простой пример, на котором можно рассмотреть работу команды — скопировать текст с заменой регистра символов (большие буквы вместо маленьких или наоборот).

Допустим, у вас есть несколько строк текста, написанного в нижнем регистре, а вам нужно перевести его в верхний регистр. Для этого можно воспользоваться опцией conv с аргументом ucase:

dd conv=ucase

Здесь мы видим команду и введённый текст. Чтобы показать dd, что ввод текста завершён, мы воспользовались комбинацией клавиш Ctrl+D, и команда вывела следующий результат:

Введённый текст был переведён в верхний регистр, последние три строки — это статистика операции. Аналогичным образом можно перевести текст в нижний регистр.

Пропуск части входных данных

При необходимости можно задать команде пропустить несколько начальных байтов входных данных. Это осуществляется при помощи опции skip с целочисленным аргументом. Например, если значение этого аргумента N, то dd пропустит N блоков размера ibs. Это ещё одна опция команды, которая определяет число байтов, считываемых за раз (по умолчанию 512).

Если вам требуется пропустить первые 4 байта входного файла, нужно задать ibs равным 4, а аргумент skip равным 1. Таким образом при чтении файла команда пропустит один блок размером 4 байта.

dd if=file1 of=file2 ibs=4 skip=1

Сравним файлы командой grep

grep -v -f file1 file2

Видно, что часть текста при считывании файла file1 были пропущены, поэтому в файле file2 их нет.

Утилита dcfldd

Программа dcfldd является дальнейшим развитием клона dd с расширенной функциональностью и множеством дополнительных параметров, краткое описание которых можно получить с помощью команды dcfldd –help. В дополнение к типовым операциям dd утилита dcfldd может выполнять следующие действия: хэширование копируемых данных “на лету”, разделять вывод данных в несколько различных файлов, осуществлять проверку соответствия создаваемого образа оргинальному устройству “бит-в-бит”. Кроме того, dcfldd выводит индикатор прогресса выполняемой работы, фиксирует свои действия в log-файле и, разумеется, может быть составной частью конвейера, как и положено члену семейства dd.

Типичный пример использования программы dcfldd на первый взгляд может показаться несколько ошеломляющим, но при проходе по каждому параметру всё становится гораздо проще:

dcfldd if=/dev/sdb4 hash=md5,sha256 hashwindow=10G md5log=md5.txt sha256log=sha256.txt hashconv=after bs=512 conv=noerror,sync split=10G splitformat=aa of=sdb4image.dd

Здесь считываются 10 Гб данных с устройства /dev/sdb4, и эти данные записываются в файл sdb4image.dd.aa. При этом также вычисляется MD5-хэш и sha256-хэш для копируемого фрагмента данных. Затем считываются следующие 10 Гб данных и записываются в файл sdb4image.dd.ab и т.д. Вычисленные хэши сохраняются в файлах md5.txt и sha256.txt соответственно. Само вычисление хэш-сумм выполняется после всех прочих преобразований. Размеры блока хэширования и блока, записываемого в выходные файлы (различные), совпадают. Размер блока копирования 512 байтов. После ошибок чтения выполнение команды не прерывается, по умолчанию dcfldd записывает в такие блоки нули.

Заключение

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


[spoiler title=”Источники”]

  • https://serverspace.by/support/help/dd-utility-for-windows-backup/
  • https://1cloud.ru/help/windows/rezervnoe-kopirovanie-windows-utilita-dd
  • https://losst.ru/komanda-dd-linux
  • http://rus-linux.net/MyLDP/consol/dd.html
  • https://j4web.ru/linux/komanda-dd.html
  • https://www.vseprolinux.ru/dd-linux
  • https://www.ibm.com/developerworks/ru/library/os-dd_util/index.html
  • https://www.ibm.com/developerworks/ru/library/os-dd_util/
  • https://ITProffi.ru/komanda-dd-v-linux/


[/spoiler]


2020-12-22T10:34:30
Linux

Что такое LAMP: установка LAMP – стека на Ubuntu

LAMP — акроним, обозначающий набор (комплекс) серверного программного обеспечения. LAMP назван по первым буквам входящих в его состав компонентов (Linux-Apache-MySQL-PHP), который включает в себя Linux, Apache

Читать

Что такое grep и с чем его едят – примеры команды grep в Linux



























Rate this post

Команда grep (расшифровывается как global regular expression print) – одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU. Grep это утилита командной строки Linux, который даёт пользователям возможность вести поиск строки. С его помощью можно даже искать конкретные слова в файле.

Применение grep в Linux

Одна из более полезных и многофункциональных команд в терминале Linux – бригада «grep». Grep – это акроним, какой расшифровывается как «global regular expression print» (то имеется, «искать везде соответствующие постоянному выражению строки и выводить их»).

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

Назначение grep — поиск строк согласно условию, изображенному регулярным выражением. Существуют изменения классического grep — egrep, fgrep, rgrep. Все они отточены под конкретные цели, при этом способности grep перекрывают весь функционал. Самым несложным примером использования команды представляется вывод строки, удовлетворяющей шаблону, из файла. Пример мы хотим найти строку, сохраняющую ‘user’ в файле /etc/mysql/my.cnf. Для этого воспользуемся последующей командой:

grep user /etc/mysql/my.cnf

Grep сможет просто искать конкретное словечко:

grep Hello ./example.cpp

Или строку, но в таком варианте её нужно заключать в кавычки:

grep ‘Hello world’ ./example.cpp

В добавление альтернативами программы являются egrep и fgrep, которые являются тем же самым, что и, соответственно, grep -E и grep -F. Варианты egrep и fgrep являются устаревшими, но работают для обратной совместимости. Вместо устаревших вариантов рекомендуется использовать grep -E и grep –F.

Команда grep сопоставляет строки исходных файлов с шаблоном, этим базовым регулярным выражением. Если файлы не указаны, используется стандартный ввод. Как как обычно каждая успешно сопоставленная строка копируется на стандартный вывод; если

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

Использование egrep в Linux

Egrep или grep -E — это другая версия grep или Extended grep. Эта версия grep превосходна и быстра, когда дело доходит до поиска шаблона регулярных выражений, поскольку она обрабатывает метасимволы как есть и не заменяет их как строки. Egrep использует ERE или Extended Extended Expression.

egrep — это урезанный вызов grep c ключом -E Отличие от grep заключается в возможности использовать расширенные непрерывные выражения с использованием символьных классов POSIX. Часто возникает задача поиска словечек или представлений, принадлежащих к одному типу, но с возможными вариациями в написании, такие как даты, фамилии файлов с некоторым расширением и стандартным названием, e-mail адреса. С другой стороны, имеется задачи по пребыванию вполне определенных слов, которые могут иметь различное начертание, либо розыск, исключающий отдельные символы или классы символов.

Для этих целей истины созданы некоторые системы, основанные на описании текста при помощи шаблонов. К таким системам причисляются и постоянные выражения. Два очень полезные спецсимвола — это ^ и $, которые обозначают начало и конец строки. Например, мы хотим получить всех пользователей, зарегистрированных в нашей системе, имя которых начинается на s. Тогда можно применить регулярное выражение «^s». Вы можете использовать бригаду egrep:

egrep “^s” /etc/passwd

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

egrep -i Hello ./example.cpp ./example2.cpp

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

egrep -v ^/[/*] ./example.cpp

В виде egrep, даже если вы не избегаете метасимволы, команда будет относиться к ним как к специальным символам и заменять их своим особым значением вместо того, чтобы рассматривать их как часть строки

Использование fgrep в Linux

Fgrep или Fixed grep или grep -F — это еще одна версия grep, какой-никакая необходима, когда дело доходит до поиска всей строки вместо регулярного понятия, поскольку оно не распознает ни регулярные выражения, ни метасимволы. Для поиска любой строки напрямую выбирайте эту версия grep.

Fgrep ищет полную строку и не распознает специальные символы как часть непрерывного выражения, несмотря на то экранированы символы или нет.

fgrep -C 0 ‘(f|g)ile’ check_filefgrep -C 0 ‘(f|g)ile’ check_file

Использование sed в Linux

sed (от англ. Stream EDitor) — потоковый текстовый редактор (а также язычок программирования), использующий различные предопределённые текстовые преобразования к последовательному потоку текстовых этих. Sed можно утилизировать как grep, выводя строки по шаблону базового регулярного выражения:

sed -n /Hello/p ./example.cpp

Может быть использовать его для удаления строк (удаление всех пустых строк):

sed /^$/d ./example.cpp

Основным инструментом работы с sed является выражение типа:

sed s/искомое_выражение/чем_заменить/имя_файла

Так, образчик, если выполнить команду:

sed s/int/long/ ./example.cpp

Выше рассмотрены различия меж «grep», «egrep» и «fgrep». Невзирая на различия в наборе используемых регулярных представлений и скорости выполнения, параметры командной строчки остаются одинаковыми для всех трех версий grep.

Синтаксис для команды grep

  • -i: Используется для игнорирования соответствующего регистра.
  • -c: выводит количество совпадающих строк.
  • -l: отображает список имен файлов.
  • -n: количество совпавших строк и номера их строк.
  • -v: количество линий, которые не соответствуют шаблону.
  • -w: соответствовать всему слову

Как использовать команду Grep?

Принадлежащая к семейству Unix команда grep является одним из самых универсальных и полезных инструментов. Эта утилита выполняет поиск в текстовом файле за заданным нами паттерном. Другими словами, с помощью grep вы можете найти необходимое вам слово или значение. А содержащие ваш запрос строки или строка будут выведены в терминал.

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

Сначала давайте подключимся к VPS с помощью SSH. Вот статья, в которой показано, как это сделать с помощью PuTTY SSH.

ssh vash-user@vash-server

Если на вашем компьютере вы используете Linux, просто откройте терминал.

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

grep [опции] значение [ФАЙЛ]

  • grep — команда
  • [опции] — модификаторы команды
  • значение — поисковый запрос
  • [ФАЙЛ] — файл, в котором вы выполняете поиск

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

grep –help

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

  • -i — поиск не будет чувствителен к регистру. То есть, если вы хотите найти слово «автомобиль», написанные как «АВТОМОБИЛЬ» слова тоже будут найдены.
  • -c — покажет только количество строк, содержащих поисковый запрос
  • -r — включает рекурсивный поиск в текущем каталоге
  • -n — выведет номера строк, содержащих поисковый запрос
  • -v — обратный поиск, выводит только строки, в которых нет указанного поискового запроса

Подготовительные работы

Все дальнейшие действия будут производиться через стандартную консоль, она же позволяет открывать файлы только путем указания полного пути к ним либо если «Терминал» запущен из необходимой директории. Узнать родительскую папку файла и перейти к ней в консоли можно так:

    1. Запустите файловый менеджер и переместитесь в нужную папку.

    1. Нажмите правой кнопкой мыши на требуемом файле и выберите пункт «Свойства».

    1. Во вкладке «Основные» ознакомьтесь со строкой «Родительская папка».

    1. Теперь запустите «Терминал» удобным методом, например, через меню или зажатием комбинации клавиш Ctrl + Alt + T.

    1. Здесь перейдите к директории через команду cd /home/user/folder, где user — имя пользователя, а folder — название папки.

Задействуйте команду cat + название файла, если хотите просмотреть полное содержимое. Детальные инструкции по работе с этой командой ищите в другой нашей статье по ссылке ниже.

Благодаря выполнению приведенных выше действий вы можете использовать grep, находясь в нужной директории, без указания полного пути к файлу.

Стандартный поиск по содержимому

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

    1. В командной строке введите grep word testfile, где word — искомая информация, а testfile — название файла. Когда производите поиск, находясь за пределами папки, укажите полный путь по примеру /home/user/folder/filename. После ввода команды нажмите на клавишу Enter.
    2. Осталось только ознакомиться с доступными вариантами. На экране отобразятся полные строки, а ключевые значения будут выделены красным цветом.

    1. Важно учитывать и регистр букв, поскольку кодировка Linux не оптимизирована для поиска без учета больших или маленьких символов. Если вы хотите обойти определение регистра, впишите grep -i “word” testfile.

    1. Как видите, на следующем скриншоте результат изменился и добавилась еще одна новая строка.

Пример использования

Допустим, требуется быстро найти фразу «our products» в HTML-файлах на компьютере. Начнем с поиска в одном из них. В данном случае ШАБЛОН – это «our products», а ФАЙЛ – product-listing.html

$ grep “our products” product-listing.html

You will find that all of our products are impeccably designed and meet the highest manufacturing standards available anywhere.

$

Была найдена одна строка, содержащая указанный шаблон, и grep выводит всю соответствующую строку на терминал. Строка длиннее ширины окна терминала, поэтому текст переносится на следующие строки, но данный вывод соответствует ровно одной строке в файле.

Важно: ШАБЛОН интерпретируется grep как регулярное выражение. В рассмотренном выше примере все использованные символы (буквы и пробел) интерпретируются в регулярных выражениях буквально, поэтому выполняется только поиск точной фразы. Однако, у других символов, например, некоторых знаков препинания, может быть особое значение.

1. Простой поиск в файле

Давайте рассмотрим пример в файле “/etc/passwd” для поиска строки в файле. Чтобы найти слово “system” при помощи команды grep, используйте команду:


[root@destroyer ~]# cat /etc/passwd|grep system

Пример вывода:

systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin

2. Подсчет появления слов.

В приведенном выше примере мы имеем в системе поиск слов в файл

е “/etc/passwd”. Если мы хотим знать количество или число появлений слова в файле, то используйте опцию ниже:


[root@destroyer ~]# cat /etc/passwd|grep -c system 2 [root@destroyer ~]#

Выше указанно, что слово появилось два раза в файле “/etc/passwd”.

3. Игнорировать регистрозависимые слова

Команда grep чувствительна к регистру, это означает, что он будет искать только данное слово в файле. Чтобы проверить эту функцию, создайте один файл с именем «test.txt» и с содержанием, как показано ниже:


[root@destroyer tmp]# cat test.txt AndreyEx andreyex ANDREYEX Andreyex [root@destroyer tmp]#

Теперь, если вы попытаетесь найти строку «andreyex», то команда не будет перечислять все слова «andreyex» с разными вариантами, как показано ниже:


[root@destroyer tmp]# grep andreyex test.txt andreyex [root@destroyer tmp]#

Этот результат подтверждает, что только один вариант будет показан, игнорируя остальную часть слова «andreyex» с разными вариантами. И если вы хотите игнорировать этот случай, вам нужно использовать параметр «-i» с grep, как показано ниже:


[root@destroyer tmp]# grep -i andreyex test.txt AndreyEx andreyex ANDREYEX Andreyex

4. Две разные строки внутри файла с командой grep

Теперь, если вы хотите найти два слова или строки с помощью команды grep, то вы должны задать расширенные. В следующей команде мы находим две строки «system» и «nobody» в файле /etc/passwd.


[root@destroyer ~]# grep ‘system|nobody’ /etc/passwd nobody:x:89:89:Nobody:/:/sbin/nologin systemd-bus-proxy:x:899:897:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:898:896:systemd Network Management:/:/sbin/nologin [root@destroyer ~]#

5. Рекурсивный поиск

Допустим, вы хотите найти слово или строку рекурсивно в любом месте каталога, тогда используйте опцию -r. Например, если вы хотите найти слово «check_oracle» рекурсивно в каталоге /etc, то используйте следующую команду:


[root@destroyer ~]# grep -r “check_oracle” /etc/ /etc/selinux/targeted/contexts/files/file_contexts:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches /etc/selinux/targeted/modules/active/file_contexts:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 /etc/selinux/targeted/modules/active/file_contexts.template:/usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 [root@destroyer ~]

В выводе выше мы можем иметь возможность видеть имя файла, в котором мы нашли строку, и если вы хотите убрать имя файла в конечном результате, то используйте опцию «-h», как показано ниже:


[root@destroyer ~]# grep -hr “check_oracle” /etc/ /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 Binary file /etc/selinux/targeted/contexts/files/file_contexts.bin matches /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 /usr/lib/nagios/plugins/check_oracle — system_u:object_r:nagios_services_plugin_exec_t:s0 [root@destroyer ~]#

6. Вывод команды grep.

Если вы хотите найти строку или слово в любом выводе команды, то вы должны использовать оператор «|», а затем <строка> в grep. Допустим, вы хотите найти в памяти, связанные слова вывода команды dmesg, то используйте следующую команду.


[root@destroyer ~]# dmesg |grep memory [ 0.000000] Base memory trampoline at [ffff880000098000] 98000 size 19456 [ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff] [ 0.000000] init_memory_mapping: [mem 0x3fe00000-0x4fffffff] [ 0.000000] init_memory_mapping: [mem 0x3c000000-0x4fdfffff] [ 0.000000] init_memory_mapping: [mem 0x00100000-0x4bffffff] [ 0.000000] kexec: crashkernel=auto resulted in zero bytes of reserved memory. [ 0.000000] Early memory node ranges [ 0.000000] PM: Registered nosave memory: [mem 0x0003e000-0x0003ffff] [ 0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff] [ 0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff] [ 0.000000] please try ‘cgroup_disable=memory’ option if you don’t want memory cgroups [ 0.030181] Initializing cgroup subsys memory [ 0.862358] Freeing initrd memory: 23532k freed [ 1.064599] Non-volatile memory driver v1.3 [ 1.069351] crash memory driver: version 1.1 [ 1.186673] Freeing unused kernel memory: 1430k freed [ 5.567780] [TTM] Zone kernel: Available graphics memory: 480345 kiB [root@destroyer ~]#

7. Инвертирование с помощью команды grep в Linux

Допустим, если вы хотите отобразить все слова в файле, который не содержит какое-либо конкретное слово, то используйте опцию «-v». Это позволяет создать один файл с содержимым, как показано ниже:


[root@destroyer tmp]# cat test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex LinuxRoutes Linux [root@destroyer tmp]#

Если мы не хотим печатать строки, содержащие слово Linux, то используйте следующую команду.


[root@destroyer tmp]# grep -v Linux test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex

8. Точное совпадение слова

В соответствии с примером, приведенным в пункте 7, если мы ищем Andreyex, то он будет печатать все вхождение Andreyex как «Andreyex12», «Andreyex454», «Andreyex34343», а также «Andreyex», как показано ниже:


[root@destroyer tmp]# grep Andreyex test.txt Andreyex12 Andreyex454 Andreyex34343 Andreyex [root@destroyer tmp]#

тогда, если мы хотим найти точное слово «Andreyex» вместо этого, чтобы перечислить весь вывод выше, то используйте опцию «-w», как показано ниже:


[root@destroyer tmp]# grep -w Andreyex test.txt Andreyex [root@destroyer tmp]#

Количество совпадающих линий

Вы можете отобразить количество совпадающих строк, используя команду grep с -. В итоге, выполнив следующую команду, вы найдете количество строк Linuxvsem в names.txt файле:

grep -c Linuxvsem name.txtКоличество совпадающих линий Grep linux

Инвертирование совпадений в команде Grep

Параметр Invert match ( -v) используется для инвертирования вывода grep. Команда отобразит строки, которые не соответствуют заданному шаблону.

Чтобы отобразить строки, которые не совпадают со строкой Linuxvsem в файле names.txt, выполните следующую команду.

grep -v Linuxvsem name.txtИнвертирование совпадений в команде Grep

Строка поиска в стандартном выводе

Если необходимо найти строку в выводе команды — это можно сделать, комбинируя команду grep с другой командой.

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

ifconfig | grep inet6Строка поиска в стандартном выводе Grep linux

Рекурсивный поиск

Для поиска заданной строки во всех файлах внутри каталога -rиспользуется опция -recursive.

В приведенном ниже примере строка «Linuxvsem» будет найдена во всех файлах внутри каталога linux:

grep -r Linuxvsem / Documents/ linux

Рекурсивный поиск Grep linux

Используя опцию, -R вы также можете искать файлы символьных ссылок внутри каталогов:

grep -R Linuxvsem / Документы / linux

Для поиска строки во всех каталогах вы можете запустить следующую команду:

grep -r » Linuxvsem » *

Просмотр номеров строк, содержащих совпадения

Еще полезнее может быть информация о месторасположении строки с совпадением в файле. Если указать опцию –n, grep перед каждой содержащей совпадение строкой будет выводить ее номер в файле:

$ grep –-color -n “bla bla” listing.txt 18:You will find that all of bla bla are impeccably designed and meet the highest manufacturing standards available

Перед содержащей соответствие строкой выведено «18:», что соответствует 18-й строке.

Выполнение поиска без учета регистра

Допустим, фраза «string search» расположена в начале предложения или набрана в верхнем регистре. Для поиска без учета регистра можно указать опцию –i:

$ grep –-color –n -i “string search” listing.txt 18:

You will find that all of string search are impeccably designed and meet the highest manufacturing standards available anywhere.

23:

String search are manufactured using only the finest top-grain leather.

$

С опцией -i grep находит также совпадение в строке 23.


[spoiler title=”Источники”]

  • https://www.linux16.ru/articles/regulyarnye-vyrazheniya-grep-egrep-sed-v-linux.html
  • https://linuxvsem.ru/commands/grep-linux
  • https://www.hostinger.ru/rukovodstva/komanda-grep-v-linux/
  • https://lumpics.ru/linux-grep-command-examples/
  • https://ITProffi.ru/utilita-grep-v-os-linux/
  • https://andreyex.ru/operacionnaya-sistema-linux/polnoe-rukovodstvo-komanda-grep-v-linux/


[/spoiler]


2020-12-22T10:34:30
Linux

Как вывести список установленных пакетов в Linux

Вы могли установить много приложений в вашей системе Linux. Это краткое руководство объясняет, как вывести список всех установленных пакетов в Linux из командной строки с примерами.

Команды для отображения всех установленных пакетов различаются в зависимости от типа используемого вами менеджера пакетов. Я включил примеры команд для всех популярных менеджеров пакетов.

1. Вывести список установленных пакетов в Arch Linux с помощью команды pacman

Pacman — это менеджер пакетов по умолчанию для Arch Linux и его производных, таких как Manjaro Linux.

Чтобы вывести список всех установленных пакетов, используемых pacman в Arch Linux и его вариантах, запустите:

$ pacman -Q

Пример вывода:

Если вы хотите просмотреть страницу вывода за страницей, направьте вывод в команду more, как показано ниже:

$ pacman -Q | more

Чтобы перечислить только явно установленные пакеты и версии:

$ pacman -Qe

Чтобы перечислить только общее количество установленных пакетов в Arch Linux, направьте вывод pacman в команду wc:

$ pacman -Q | wc -l

134

Как видно из вышеприведенного вывода, я установил 134 пакета в свою систему Arch Linux.

2. Список установленных пакетов в Alpine Linux с помощью команды apk

Apk, сокращение от Alpine Package Manager, является менеджером пакетов по умолчанию для Alpine Linux.

Команда для просмотра списка установленных пакетов в Alpine Linux:

$ apk info

Если вы хотите просмотреть список установленных пакетов, а также номер версии и описание пакета, используйте флаг -vv, как показано ниже:

$ apk info -vv

Пример вывода:

lm_sensors-3.4.0-r6 - Collection of user space tools for general SMBus access and hardware monitoring.

man-1.14.3-r0 - dummy package for upgrade compatibility. this can safely be removed

libcrypto1.1-1.1.1i-r0 - Crypto library from openssl

libssl1.1-1.1.1i-r0 - SSL shared libraries

[...]

Чтобы перечислить только общее количество всех установленных пакетов в Alpine Linux, передайте вывод apk info в команду wc, как показано ниже:

$ apk info | wc -l

86

3. Перечислите установленные пакеты в Debian, Ubuntu с помощью команды apt

Apt предоставляет интерфейс командной строки высокого уровня для системы управления пакетами в Debian, Ubuntu и других системах на основе Debian.

Чтобы отобразить список установленных пакетов в Debian, Ubuntu, Linux Mint и других системах на основе DEB, запустите:

$ apt list —installed

Пример вывода:

Отобразите общее количество установленных пакетов в системах на основе Debian, направьте вывод команды apt команде wc, как показано ниже:

$ apt list --installed | wc -l

2575

4. Перечислите установленные пакеты в Debian, Ubuntu с помощью команды dpkg.

Dpkg — это инструмент командной строки для установки, сборки, удаления пакетов Debian и управления ими.

Чтобы вывести список всех установленных пакетов с версиями и подробностями с помощью команды dpkg, запустите:

$ dpkg -l

Кроме того, вы можете использовать команду dpkg-query для вывода списка всех установленных пакетов Debian.

$ dpkg-query -l

Укажите только общее количество установленных пакетов в системах на основе Debian:

$ dpkg -l | wc -l

2668

$ dpkg-query -l | wc -l

2668

5. Перечислите установленные пакеты в RHEL, Fedora, CentOS с помощью команды yum.

Yum, расшифровывается как Yellowdog Updater, Modified, — это утилита управления из командной строки для установки и управления пакетами в системах на основе Red Hat. Теперь он заменен на dnf в последних версиях RHEL и CentOS.

Чтобы найти список установленных пакетов в Fedora, RHEL и его клонах, таких как CentOS, запустите:

$ yum list installed

Список только общее количество установленных пакетов с использованием команд yum и wc:

$ yum list installed | wc -l

347

6. Перечислите установленные пакеты в RHEL, Fedora, CentOS с помощью команды dnf

DNF — это версия YUM следующего поколения, и он был менеджером пакетов по умолчанию, начиная с Fedora 22, RHEL 8 и CentOS 8. Использование DNF такое же, как и в Yum.

Чтобы найти список установленных пакетов в RHEL, Fedora, CentOS с помощью dnf, выполните:

$ dnf list installed

Если вы хотите отобразить только общее количество пакетов с помощью команды dnf, запустите:

$ dnf list installed | wc -l

7. Список установленных пакетов в openSUSE с помощью команды zypper

Zypper — это менеджер пакетов командной строки по умолчанию для установки и управления пакетами в SUSE и openSUSE.

Чтобы просмотреть список установленных пакетов в openSUSE zypper, запустите:

$ zypper se --installed-only

8. Вывести список установленных пакетов в Linux с помощью команды rpm

RPM команда, означает Red Hat Package Manager, используется для установки и управления приложениями из командной строки в системах Redhat основе.

Чтобы вывести список всех пакетов RPM, установленных в вашей системе, выполните:

$ rpm -qa

Чтобы просмотреть вывод страницы за страницей, направьте вывод по конвейеру в moreкоманду:

$ rpm -qa | more

Вы также можете все установленные пакеты, самые свежие из которых находятся вверху, используя флаг --last, как показано ниже:

$ rpm -qa --last

Следующие два метода являются универсальными. Вы можете использовать эти команды в любых системах, в которых установлены инструменты snapили flatpak.

9. Список пакетов, установленных с помощью оснастки в Linux

Snap — это система развертывания программного обеспечения и управления пакетами, разработанная Canonical.

Чтобы вывести список всех приложений Snap, установленных в вашей системе, запустите:

$ snap list

Пример вывода:

Name Version Rev Tracking Publisher Notes

chromium 87.0.4280.88 1424 latest/stable canonical* -

core 16-2.48 10444 latest/stable canonical* core

core18 20201210 1944 latest/stable canonical* base

gnome-3-26-1604 3.26.0.20200529 100 latest/stable/… canonical* -

gnome-3-28-1804 3.28.0-19-g98f9e67.98f9e67 145 latest/stable canonical* -

gnome-3-34-1804 0+git.3556cb3 60 latest/stable canonical* -

gnome-system-monitor 3.36.0-12-g35f88a56d7 148 latest/stable/… canonical* -

gtk-common-themes 0.1-50-gf7627e4 1514 latest/stable/… canonical* -

multipass 1.5.0 2907 latest/stable canonical* -

10. Вывести список пакетов, установленных с помощью Flatpak в Linux

Flatpak — это независимая от платформы система управления пакетами для создания, установки и запуска изолированных настольных приложений и сред выполнения в Linux.

Чтобы вывести список всех установленных приложений Flatpak в Linux, запустите:

$ flatpak list --app

Пример вывода:

Name Application ID Version Branch Installation

Fondo com.github.calo001.fondo 1.5.1 stable system

Flatseal com.github.tchx84.Flatseal 1.6.5 stable system

FontFinder io.github.mmstick.FontFinder 2.0.0 stable system

Giara org.gabmus.giara 0.3 stable system

Solanum org.gnome.Solanum 1.1.0 stable system

Обратите внимание, что в приведенной выше команде будут перечислены только пакеты, которые установлены исключительно с приложением flatpak.

Для получения дополнительных сведений смотрите справочные страницы соответствующих команд.



2020-12-22T10:24:42
Вопросы читателей