Инструменты пользователя

Инструменты сайта


linux:overall:views

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:overall:views [2022/11/21 07:11]
admin
linux:overall:views [2024/02/10 14:58] (текущий)
admin [sed]
Строка 1: Строка 1:
 ====== Фильтрация вывода ====== ====== Фильтрация вывода ======
- 
- 
 ===== grep ===== ===== grep =====
 <code> <code>
Строка 7: Строка 5:
 grep [опции] [-e шаблон | -f файл] [файл ...] grep [опции] [-e шаблон | -f файл] [файл ...]
 </code> </code>
- 
   * **grep 'ключевое слово'** - поиск заданного слова/строки.   * **grep 'ключевое слово'** - поиск заданного слова/строки.
   * **-B (-A)** - кол-во строк до (после) вхождения.   * **-B (-A)** - кол-во строк до (после) вхождения.
Строка 19: Строка 16:
   * **-w [--word-regexp] (-x [--line-regexp])** - совпадение только всего слова (всей строки)   * **-w [--word-regexp] (-x [--line-regexp])** - совпадение только всего слова (всей строки)
  
-:!: Пример: Извлечение IP адреса 
-<code bash> 
-# echo -e "3.123.32.24\nFirst\n567" | grep -Eo "([0-9]{0,3}\.){3}[0-9]{0,3}" 
-</code> 
  
-:!: Пример: Извлечение IP адресов с ошибкой авторизации из auth.log+<details> 
 +<summary>:!: Примеры</summary>
 <code bash> <code bash>
-sudo cat /var/log/auth.log | grep Failed | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort --unique > ip.list+  Извлечение IP адреса 
 +echo -e "3.123.32.24\nFirst\n567" | grep -Eo "([0-9]{0,3}\.){3}[0-9]{0,3}" 
 +  # Извлечение IP адресов с ошибкой авторизации из auth.log 
 +cat /var/log/auth.log | grep Failed | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort --unique > ip.list 
 +  # Убрать из вывода пустые и закоментированные строки 
 +cat /etc/telegraf/telegraf.conf | grep -Ev "^#|^  #|^$" 
 +  # Список IP активных подключений 
 +ss -ntlua | grep "8086" | awk '{print $6}' | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort --unique
 </code> </code>
  
-<details> +: Скриптом добавить эти адреса в блок
-<summary>:!: Пример: Скриптом добавить эти адреса в блок </summary>+
 <code bash> <code bash>
-#!/bin/bash +  # Сначала создаем отдельную цепочку для этого и ставим ее в начало "входа" INPUT
-# Сначала создаем отдельную цепочку для этого и ставим ее в начало "входа" INPUT+
 iptables -N BLACKLIST iptables -N BLACKLIST
 iptables -I INPUT -j BLACKLIST iptables -I INPUT -j BLACKLIST
- +  # Затем читаем из файла список адресов и добавляем правила
-# Затем читаем из файла список адресов и добавляем правила+
 readarray lst < /../ip.list readarray lst < /../ip.list
 for i in "${lst[@]}" for i in "${lst[@]}"
Строка 51: Строка 49:
 Общий синтаксис: **"pattern {action}"**, действием могут быть: **exit**, **next**, **print**, **printf**.\\ Общий синтаксис: **"pattern {action}"**, действием могут быть: **exit**, **next**, **print**, **printf**.\\
 Регулярные выражения обрамляются слэшами **"/regex pattern/ {action}"**.\\ Регулярные выражения обрамляются слэшами **"/regex pattern/ {action}"**.\\
- 
   * **$№** - указывает номер поля для вывода, разделяются пробелами.   * **$№** - указывает номер поля для вывода, разделяются пробелами.
       * $0 - вся строка       * $0 - вся строка
Строка 59: Строка 56:
   * **-F** - указать разделитель во входных данных, вместо пробела   * **-F** - указать разделитель во входных данных, вместо пробела
   * **substr (s, a, b)** - подстрока строка-s, кол-во- b, начать с- a. Используется внутри 'print'   * **substr (s, a, b)** - подстрока строка-s, кол-во- b, начать с- a. Используется внутри 'print'
 +  * 
 +  * **Встроенные переменные:**
 +  * **NF** - Количество полей в записи
 +  * **NR** - Номер текущей записи
 +  * **FILENAME** - Имя входного файла, который в данный момент обрабатывается
 +  * **FS** - Разделитель полей
 +  * **RS** - Разделитель записей
 +  * **OFS** - Разделитель выходных полей
 +  * **ORS** - Разделитель выходной записи
  
-:!: Пример: Напечатать только первое и третье слова из каждой строки +<details> 
-<code bash> +<summary>:!: Поиск и замена</summary> 
-# cat 'text' | awk {'print $1,$3'+Преимущество перед sed в том что сразу экранируются некоторые символы, но к сожалению не все\\ 
-</code>+Пропустил / а вот & b \ тоже не пропустил 
  
-:!: Пример: Разделитель 
 <code bash> <code bash>
-cat 'textawk 'OFS="-" {print $1,$3}'+  Просто замена, PRINT для вывода результата на консоль 
 +awk '{gsub(/<USER_NAME>/,"this_is_uname"); print }file 
 + 
 +  # Сохранить резы в тот же файл, чтобы сразу нет такого параметра 
 +awk '{gsub(/<USER_NAME>/,"this_is_uname"); print }' file > tmp && mv tmp file 
 + 
 +  # Тоже самое только групповая замена  
 +awk '{
 + gsub(/<DATABASE_USER_NAME>/,"this_is_uname");
 + gsub(/<DATABASE_USER_PASSWORD>/,"this_is_passwd");
 + gsub(/<APP_URL>/,"https://my-site");
 + print }' file > tmp && mv tmp file 
 + 
 +  # Сохранить изменения в этом же файле !! Это уже другая утилита 
 +gawk -i inplace '{ gsub(/<APP_URL>/"https://my-site") }; { print }' file
 </code> </code>
 +</details>
  
  
  
-==== Встроенные переменные ====+<details> 
 +<summary>:!: Примеры</summary> 
 +<code bash> 
 +cat 'text' | awk {'print $1,$3'
 +  # Задать разделитель 
 +cat 'text' | awk 'OFS="-" {print $1,$3}' 
 +  # Вывод имени файла и кол-во строк 
 +awk 'END { print "File", FILENAME, "contains", NR, "lines." }' teams.txt
  
-  * **NF** - Количество полей в записи +awk 'length $0 > 2' letters.txt 
-  * **NR** - Номер текущей записи +awk 'BEGIN { print "HI" } { print $0 } END { print "BYE!" }' letters.txt
-  * **FILENAME** - Имя входного файла, который в данный момент обрабатывается +
-  * **FS** - Разделитель полей +
-  * **RS** - Разделитель записей +
-  * **OFS** - Разделитель выходных полей +
-  * **ORS** - Разделитель выходной записи+
  
-:!: Пример: Вывод имени файла и коло строк+awk 'BEGIN { printf "%-10s %s\n", "Col1", "Col2";
 +              printf "%-10s %s\n", "----", "------" } \ 
 +            { printf "%-10s %s\n", $1, $2 }' mail-data 
 + 
 +awk '/[aeiou]{5}/' /usr/share/dict/words 
 +</code> 
 + 
 +Группировка и сложение
 <code bash> <code bash>
-awk 'END print "File", FILENAME"contains"NR"lines." }' teams.txt+US|A|1000|2000 
 +US|B|1000|2000 
 +US|C|1000|2000 
 +UK|1|1000|2000 
 +UK|1|1000|2000 
 +UK|1|1000|2000 
 + 
 +awk 'BEGIN FS=OFS=SUBSEP="|"}{arr[$1,$2]+=$3+$4 }END {for (i in arr) print i,arr[i]}' myfile 
 + 
 +US|A|3000 
 +US|B|3000 
 +US|C|3000 
 +UK|1|9000 
 + 
 +  # Вариации 
 +  # Сложить кол-во указанное напротив значений 
 +awk 'BEGIN { FS=OFS} {arr[$1]+=$2 }END {for (i in arr) print i,arr[i]}' myfile | sort -rnk2 
 +  # Два столбца 
 +awk 'BEGIN { FS=OFS} {arr[$1]+=$2; arr2[$1]+=$3 }END {for (i in arr) print i,arr[i],arr2[i]}' myfile | sort -rnk2
 </code> </code>
 +</details>
  
  
Строка 100: Строка 148:
   * **-r** - поддержка расширенного синтаксиса рег выражений   * **-r** - поддержка расширенного синтаксиса рег выражений
   * **-s** -  несколько файлов рассматривать как отдельные потоки, а не один сплошной   * **-s** -  несколько файлов рассматривать как отдельные потоки, а не один сплошной
- 
 У утилиты есть **два буфера**, **активный** и **дополнительный**. Выполняется заданное условие для каждой строки.\\ У утилиты есть **два буфера**, **активный** и **дополнительный**. Выполняется заданное условие для каждой строки.\\
 Очередная строка попадает сначала в активный буфер, выполняются команды, выводится в поток вывода и буфер очищается, в доп буфере хранится предыдущая строка.\\ Очередная строка попадает сначала в активный буфер, выполняются команды, выводится в поток вывода и буфер очищается, в доп буфере хранится предыдущая строка.\\
Строка 123: Строка 170:
  
 Можно передавать несколько команд, для этого нужно разделить их точкой с запятой или две опции -e.\\ Можно передавать несколько команд, для этого нужно разделить их точкой с запятой или две опции -e.\\
 +
 +<details>
 +<summary> :!: Поиск и замена </summary>
 +:!: **Не прпускает символ амперсанд и оба слеша**\\
 +
 +<code bash>
 +  # -i чтобы сохранить в тот же файл
 +sed -i 's/<USER_NAME>/this_uname/g' file
 +
 +</code>
 +</details>
 +
  
 <details> <details>
Строка 147: Строка 206:
 ===== RegEx ===== ===== RegEx =====
 Относится как к **grep** так и к **awk**.\\ Относится как к **grep** так и к **awk**.\\
- 
   * **\** - экранирование   * **\** - экранирование
   * **^($)** - начало (конец) строки   * **^($)** - начало (конец) строки
Строка 170: Строка 228:
   * **a | b** - "либо"   * **a | b** - "либо"
   * **i** - не учитывать регистр   * **i** - не учитывать регистр
-  * ** ** -+  * **\K** - задает условное начало строки от найденного фрагмента
  
  
Строка 196: Строка 254:
 </code> </code>
 </details> </details>
- 
  
 <details> <details>
Строка 203: Строка 260:
 # Вывод только имени пользователя, из записей в логе, в уникальном списке # Вывод только имени пользователя, из записей в логе, в уникальном списке
 sudo cat /var/log/auth.log.1 | grep -oP 'USER=\K[^;]*' | sort -u sudo cat /var/log/auth.log.1 | grep -oP 'USER=\K[^;]*' | sort -u
 +
 +# Список подключений из ss
 +sudo ss -ntlua | grep "8086" | awk '{print $6}' | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort --unique
 </code> </code>
-</details> 
  
 +Вывод файла, сортировка, подсчет вхождения, вывод таблицей
 +<code bash>
 +cat list.csv | sort | uniq -c | [column -t |] sort -r
 +</code>
  
 +</details>
  
  
-====== Просмотр файлов ====== 
  
 +====== Просмотр файлов ======
   * **cat** - содержимое файла в поток вывода   * **cat** - содержимое файла в поток вывода
   * **tail** - заданное кол-во строк с конца файла + интерактивное обновление   * **tail** - заданное кол-во строк с конца файла + интерактивное обновление
Строка 217: Строка 281:
   * **column** - вывод в табличном виде   * **column** - вывод в табличном виде
  
- +<details> 
-===== cat =====+<summary>**cat**</summary>
 Для записи в файл можно использовать перенаправление ввода **>>**. Для записи в файл можно использовать перенаправление ввода **>>**.
- 
   * **-n (-b)** - нумеровать строки (только не пустые).   * **-n (-b)** - нумеровать строки (только не пустые).
   * **-s** - удалять пустые строки.   * **-s** - удалять пустые строки.
   * **-E** - показывать символ $ в конце каждой строки.   * **-E** - показывать символ $ в конце каждой строки.
   * **-T** - отображать символ табуляции.   * **-T** - отображать символ табуляции.
 +</details>
  
  
-===== tail =====+<details> 
 +<summary>**tail**</summary>
   * **-f [--pid]** - авто-обновление [закрыться с процессом].   * **-f [--pid]** - авто-обновление [закрыться с процессом].
   * **-s сек** - частота обновления.   * **-s сек** - частота обновления.
   * **-n** - кол-во строк (10 по умолчанию).   * **-n** - кол-во строк (10 по умолчанию).
 +</details>
  
  
-===== head =====+<details> 
 +<summary>**head**</summary>
   * **-n** - кол-во строк (10 по умолчанию).   * **-n** - кол-во строк (10 по умолчанию).
   * **--lines=[-]NUM** - весь текст, кроме последних NUM строк.   * **--lines=[-]NUM** - весь текст, кроме последних NUM строк.
   * **-z** - символ новой строки.   * **-z** - символ новой строки.
 +</details>
  
  
-===== less ===== +<details> 
-  * **-i (-I)** - игнорировать регистр паттерна+<summary>**less**</summary> 
 +* **-i (-I)** - игнорировать регистр паттерна
   * **-n (-N)** - не выводить (выводить) номера строк   * **-n (-N)** - не выводить (выводить) номера строк
 +</details>
 +  
  
- +<details> 
-===== column =====+<summary>**column**</summary>
 Можно перенаправлять вывод, можно подавать файлы. Гуглятся целый ряд всяких параметров но что то нихрена толком не работает Можно перенаправлять вывод, можно подавать файлы. Гуглятся целый ряд всяких параметров но что то нихрена толком не работает
   * **-t** - для табличной формы   * **-t** - для табличной формы
   * **-s "symb"** - символ для разделения   * **-s "symb"** - символ для разделения
 +</details>
  
 +
 +<details>
 +<summary>**uniq**</summary>
 +https://losst.pro/komanda-uniq-linux\\
 +
 +</details>
  
  
linux/overall/views.1669014675.txt.gz · Последнее изменение: 2022/11/21 07:11 — admin