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

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


linux:overall:views

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:overall:views [2021/12/10 10:29]
admin
linux:overall:views [2024/02/10 14:58] (текущий)
admin [sed]
Строка 1: Строка 1:
-====== Просмотр файлов ====== +====== Фильтрация вывода ======
- +
-  * **cat** - содержимое файла в поток вывода. +
-  * **tail** - заданное кол-во строк с конца файла + интерактивное обновление. +
-  * **head** - заданное кол-во строк с начала файла. +
-  * **less** - постраничный просмотр. +
- +
- +
-=====cat===== +
-Для записи в файл можно использовать перенаправление ввода **>>**. +
- +
-  * **-n (-b)** - нумеровать строки (только не пустые). +
-  * **-s** - удалять пустые строки. +
-  * **-E** - показывать символ $ в конце каждой строки+
-  * **-T** - отображать символ табуляции. +
- +
- +
-=====tail===== +
-  * **-f [--pid]** - авто-обновление [закрыться с процессом]. +
-  * **-s сек** - частота обновления. +
-  * **-n** - кол-во строк (10 по умолчанию). +
- +
- +
-=====head===== +
-  * **-n** - кол-во строк (10 по умолчанию). +
-  * **--lines=[-]NUM** - весь текст, кроме последних NUM строк. +
-  * **-z** - символ новой строки. +
- +
- +
-=====less===== +
-  * **-i (-I)** - игнорировать регистр паттерна +
-  * **-n (-N)** - не выводить (выводить) номера строк +
- +
- +
-====== Фильтрация ====== +
 ===== grep ===== ===== grep =====
 <code> <code>
Строка 40: Строка 5:
 grep [опции] [-e шаблон | -f файл] [файл ...] grep [опции] [-e шаблон | -f файл] [файл ...]
 </code> </code>
- 
   * **grep 'ключевое слово'** - поиск заданного слова/строки.   * **grep 'ключевое слово'** - поиск заданного слова/строки.
   * **-B (-A)** - кол-во строк до (после) вхождения.   * **-B (-A)** - кол-во строк до (после) вхождения.
Строка 52: Строка 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[@]}"
Строка 78: Строка 43:
 </code> </code>
 </details> </details>
 +
  
  
Строка 83: Строка 49:
 Общий синтаксис: **"pattern {action}"**, действием могут быть: **exit**, **next**, **print**, **printf**.\\ Общий синтаксис: **"pattern {action}"**, действием могут быть: **exit**, **next**, **print**, **printf**.\\
 Регулярные выражения обрамляются слэшами **"/regex pattern/ {action}"**.\\ Регулярные выражения обрамляются слэшами **"/regex pattern/ {action}"**.\\
- 
   * **$№** - указывает номер поля для вывода, разделяются пробелами.   * **$№** - указывает номер поля для вывода, разделяются пробелами.
       * $0 - вся строка       * $0 - вся строка
Строка 91: Строка 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>
 +<summary>:!: Поиск и замена</summary>
 +Преимущество перед sed в том что сразу экранируются некоторые символы, но к сожалению не все\\
 +Пропустил / а вот & b \ тоже не пропустил 
  
-:!: Пример: Напечатать только первое и третье слова из каждой строки 
 <code bash> <code bash>
-cat 'textawk {'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> <code bash>
-# cat 'text' | awk 'OFS="-" {print $1,$3}' +cat 'text' | awk {'print $1,$3'
-</code>+  Задать разделитель 
 +cat 'text' | awk 'OFS="-" {print $1,$3}' 
 +  # Вывод имени файла и кол-во строк 
 +awk 'END { print "File", FILENAME, "contains", NR, "lines." }' teams.txt
  
 +awk 'length $0 > 2' letters.txt
 +awk 'BEGIN { print "HI" } { print $0 } END { print "BYE!" }' letters.txt
  
-==== Встроенные переменные ====+awk 'BEGIN { printf "%-10s %s\n", "Col1", "Col2";
 +              printf "%-10s %s\n", "----", "------" } \ 
 +            { printf "%-10s %s\n", $1, $2 }' mail-data
  
-  * **NF** - Количество полей в записи +awk '/[aeiou]{5}/' /usr/share/dict/words 
-  * **NR** - Номер текущей записи +</code>
-  * **FILENAME** - Имя входного файла, который в данный момент обрабатывается +
-  * **FS** - Разделитель полей +
-  * **RS** - Разделитель записей +
-  * **OFS** - Разделитель выходных полей +
-  * **ORS** - Разделитель выходной записи+
  
-:!: Пример: Вывод имени файла и кол-во строк+Группировка и сложение
 <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>
 +
  
  
Строка 130: Строка 148:
   * **-r** - поддержка расширенного синтаксиса рег выражений   * **-r** - поддержка расширенного синтаксиса рег выражений
   * **-s** -  несколько файлов рассматривать как отдельные потоки, а не один сплошной   * **-s** -  несколько файлов рассматривать как отдельные потоки, а не один сплошной
- 
 У утилиты есть **два буфера**, **активный** и **дополнительный**. Выполняется заданное условие для каждой строки.\\ У утилиты есть **два буфера**, **активный** и **дополнительный**. Выполняется заданное условие для каждой строки.\\
 Очередная строка попадает сначала в активный буфер, выполняются команды, выводится в поток вывода и буфер очищается, в доп буфере хранится предыдущая строка.\\ Очередная строка попадает сначала в активный буфер, выполняются команды, выводится в поток вывода и буфер очищается, в доп буфере хранится предыдущая строка.\\
Строка 150: Строка 167:
   * **y/символы/символы** - замена символов   * **y/символы/символы** - замена символов
   * **w** - записать содержимое буфера в шаблона в файл   * **w** - записать содержимое буфера в шаблона в файл
 +  * **i** - сохранять изменения в файл
  
 Можно передавать несколько команд, для этого нужно разделить их точкой с запятой или две опции -e.\\ Можно передавать несколько команд, для этого нужно разделить их точкой с запятой или две опции -e.\\
 +
 +<details>
 +<summary> :!: Поиск и замена </summary>
 +:!: **Не прпускает символ амперсанд и оба слеша**\\
 +
 +<code bash>
 +  # -i чтобы сохранить в тот же файл
 +sed -i 's/<USER_NAME>/this_uname/g' file
 +
 +</code>
 +</details>
 +
  
 <details> <details>
Строка 168: Строка 198:
 </code> </code>
 </details> </details>
 +
 +Удалить все пробелы
 +<code bash>$ echo "string" | sed -r 's/\s+//g'</code>
 +
  
  
 ===== RegEx ===== ===== RegEx =====
 Относится как к **grep** так и к **awk**.\\ Относится как к **grep** так и к **awk**.\\
- 
   * **\** - экранирование   * **\** - экранирование
   * **^($)** - начало (конец) строки   * **^($)** - начало (конец) строки
   * **.** - любой одиночный символ   * **.** - любой одиночный символ
-  * **[]** -  список символов, конкретный перечень, либо диапазон, можно несколько диапазонов, что бы исключить символпоставьте перед ним \+  * **[]** - перечень/диапазон символов, можно несколько диапазонов, что бы исключить символ поставьте перед ним \
       * например: [A-Za-z0-9\F]       * например: [A-Za-z0-9\F]
   * ***** - любое кол-во вхождения пред выражения   * ***** - любое кол-во вхождения пред выражения
Строка 183: Строка 216:
   * **{n} {n,} {,m} {n,m}** - повторы вхождения пред выражения   * **{n} {n,} {,m} {n,m}** - повторы вхождения пред выражения
   * **|** - оператор ИЛИ   * **|** - оператор ИЛИ
-  * **** - + 
 + 
 + 
 +===== RegEx (Perl) ===== 
 +Синтаксис в целом соответствует 
 +  * **^ ($)** - Начало (конец) строки 
 +  * **. (*)** - любой одиночный символ (ноль или более вхождений пред выражения) 
 +  * **[...] ([^...])** - любой одиночный символ в скобках (не указанный в скобках) 
 +  * **+ (?)** - 1 одно или несколько вхождений (0 или 1 вхождение) 
 +  * **{n}, {n,}, {n,m}** - ровно n, n или несколько вхождений, ровно от n до m 
 +  * **a | b** - "либо" 
 +  * **i** - не учитывать регистр 
 +  * **\K** - задает условное начало строки от найденного фрагмента 
  
  
Строка 208: Строка 254:
 </code> </code>
 </details> </details>
- 
  
 <details> <details>
Строка 215: Строка 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>
 +
 +Вывод файла, сортировка, подсчет вхождения, вывод таблицей
 +<code bash>
 +cat list.csv | sort | uniq -c | [column -t |] sort -r
 +</code>
 +
 </details> </details>
  
  
  
 +====== Просмотр файлов ======
 +  * **cat** - содержимое файла в поток вывода
 +  * **tail** - заданное кол-во строк с конца файла + интерактивное обновление
 +  * **head** - заданное кол-во строк с начала файла
 +  * **less** - постраничный просмотр
 +  * **column** - вывод в табличном виде
 +
 +<details>
 +<summary>**cat**</summary>
 +Для записи в файл можно использовать перенаправление ввода **>>**.
 +  * **-n (-b)** - нумеровать строки (только не пустые).
 +  * **-s** - удалять пустые строки.
 +  * **-E** - показывать символ $ в конце каждой строки.
 +  * **-T** - отображать символ табуляции.
 +</details>
 +
 +
 +<details>
 +<summary>**tail**</summary>
 +  * **-f [--pid]** - авто-обновление [закрыться с процессом].
 +  * **-s сек** - частота обновления.
 +  * **-n** - кол-во строк (10 по умолчанию).
 +</details>
 +
 +
 +<details>
 +<summary>**head**</summary>
 +  * **-n** - кол-во строк (10 по умолчанию).
 +  * **--lines=[-]NUM** - весь текст, кроме последних NUM строк.
 +  * **-z** - символ новой строки.
 +</details>
 +
 +
 +<details>
 +<summary>**less**</summary>
 +* **-i (-I)** - игнорировать регистр паттерна
 +  * **-n (-N)** - не выводить (выводить) номера строк
 +</details>
 +  
 +
 +<details>
 +<summary>**column**</summary>
 +Можно перенаправлять вывод, можно подавать файлы. Гуглятся целый ряд всяких параметров но что то нихрена толком не работает
 +  * **-t** - для табличной формы
 +  * **-s "symb"** - символ для разделения
 +</details>
 +
 +
 +<details>
 +<summary>**uniq**</summary>
 +https://losst.pro/komanda-uniq-linux\\
 +
 +</details>
  
  
linux/overall/views.1639132146.txt.gz · Последнее изменение: 2021/12/10 10:29 — admin