Главная


Saturday, 21 November 2020

Различия между grep, egrep и fgrep.


Всем привет.

Одним из известных инструментов поиска в Linux системах, которые можно использовать для поиска всего, будь то файл или строка или несколько строк в файле, - это утилита grep. Он очень обширен в функциональности, за счет большого количества поддерживаемых им опций, таких как: поиск с использованием строкового шаблона или регулярных выражений шаблон или perl based регулярных выражений  и т.д.

Из-за его различных функциональных возможностей инструмент grep имеет множество вариантов, включая egrep (Extended GREP), fgrep (Fixed GREP), pgrep (Process GREP), rgrep (рекурсивный GREP) и т.д. Но эти варианты имеют незначительные отличия от оригинального grep. Давайте разберемся с различиями между тремя основными вариантами: «grep», «egrep» и «fgrep». Чтобы мы знали, что выбирать в соответствии со своими требованиями.

Некоторые специальные метасимволы grep:

+ - эквивалентно одному или нескольким вхождениям предыдущего символа.

? - это означает хотя-бы одно повторение предыдущего символа. Так запись «a?» будет соответствовать «a» или «aa».

(- начало выражения чередования.

) - конец выражения чередования.

| - сопоставление любого из выражений, разделенных символом ‘|‘. Например: «(a | b) cde» будет соответствовать «acde», либо «bcde».

{- этот метасимвол указывает начало спецификатора диапазона. Например: «a {2}» соответствует вхождению «aa» в файле 2 раза.

} - этот метасимвол указывает конец спецификатора диапазона.

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

grep is acommand that can be used on unix-like systems. 

it searches for any string in list of strings or file. 

It is very fast. 

(f|g)ile 

Friday, 20 November 2020

Zip в командной строке Windows 10.

Всем приветик. 

А у меня новость. Новость для меня, но может и для вас.) Ну то что Windows 10 умеет открывать и создавать zip-архивы из коробки вы наверняка знаете. Но вчера мне понадобилось это же сделать из командной строки. Вот так вот, а здесь и оказался сюрприз.

Традиционно это можно сделать в Powershell:

# example 1

Compress-Archive in.txt out.zip

# example 2

Expand-Archive out.zip

А в строке вот так:

# example 1

tar.exe -a -c -f out.zip in.txt

# example 2

tar.exe -x -f out.zip

Что? Не может быть - tar?! Да, именно так - теперь tar присутствует и в Windows 10. Но если вам такое соседство противно, то ставьте бесплатный 7-Zip и пользуйтесь им:

"C:\Program files\7-Zip\7z.exe" e d:\dest\out.zip

Успехов.

Thursday, 19 November 2020

Читаем журналы Linux #5 - ротация.


Всем привет.

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

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

Ротация выполняется при помощи утилиты «logrotate».

Конфигурационный файл logrotate.

Как и rsyslog, logrotate зависит от конфигурационного файла по имени logrotate.conf, который находится в /etc.

Wednesday, 18 November 2020

Vagrant и proxy.


Всем привет.

Используя vagrant в своей DevOps-практике я столкнулся с проблемой его работы через прокси. Установив версию vagrant 2.2.10 я попытался добавить бокс alpine-сборки Linux:

vagrant box add generic/alpine38

На что получил ошибку resolving-а в отношении портала vagrant. Тогда я по подсказке самого портала прописал в моем окружении переменные для vagrant:

set http_proxy=http://UserName01:password10@proxy2.forza.com:9090

set VAGRANT_HTTP_PROXY=%http_proxy%

set VAGRANT_HTTPS_PROXY=%http_proxy%

set VAGRANT_NO_PROXY="127.0.0.1"


И попробовал добавить бокс alpine-сборки еще раз. Увы, ошибка resolving-а повторилась.

Тогда я переключил vagrant в режим отладки:

VAGRANT_LOG=info vagrant up

vagrant up --debug &> vagrant.log


И получил вот такую вот строку в конце продолжительного журнала vagrant.log:

C:/HashiCorp/Vagrant/embedded/mingw64/lib/ruby/2.6.0/net/http/response.rb:122:in 

`error!': 407 "authenticationrequired" (Net::HTTPServerException)


Что говорит о том что моему vagrant-у нужна авторизация для того чтобы пробиться в интернет.

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

  config.vm.box = "alpine/latest"

  if Vagrant.has_plugin?("vagrant-proxyconf")

     config.proxy.http     = "http://UserName01:password10@proxy2.forza.com:9090"

     config.proxy.https    = "http://UserName01:password10@proxy2.forza.com:9090"

     config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"

  end


Замечательно. "Наконец то решение!" решил я. И поспешил его установить.

Я пробовал так:

vagrant plugin install vagrant-proxyconf

И так:

vagrant plugin install --plugin-clean-sources --plugin-source https://rubygems.org vagrant-proxyconf

И даже так:

vagrant plugin install C:\HashiCorp\Vagrant\vagrant-proxyconf-2.0.10.gem


Меня ждало разочарование. Оказалось чтобы установить проски-плагин vagrant требует все тот же прокси. Круг замкнулся. Попытка решить мою проблему через issue с разработчиком к результату не привела.

Возможно вы знаете ответ?



Tuesday, 17 November 2020

Читаем журналы Linux #4 - rsyslog.


Всем привет.

Центром механизма журналирования является демон Rsyslog:  (R)ocket-fast (Sys)tem for (log) processing. Данный сервис отвечает за прослушивание зарегистрированных сообщений различных частей системы Linux и маршрутизацию сообщения к соответствующему журналу в каталоге /var/log. Он также может передавать зарегистрированные сообщения другому серверу Linux. Весьма подробно настройка rsyslog показана здесь.

Особенности Rsyslog:

-многопоточный

-TCP, SSL, TLS, RELP, etc.

-сохранение логов в базы данных (MySQL, PostgreSQL, Oracle, etc.)

-фильтрация по любой части лога

-полностью настраиваемый формат вывода.


Конфигурационный файл rsyslog.

Демон rsyslog получает конфигурации из файла «rsyslog.conf», который находится в каталоге /etc.

В основном, файл rsyslog.conf говорит демону, где хранить сообщения. Данная информация имеет вид серии строк, состоящих из двух частей. Под двумя частями строк подразумеваются селектор и действие (selector и action). Они разделяются пробельным символом. Селектор указывает на  источник и важность сообщения, а действие говорит, что нужно сделать с данным сообщением. Сам селектор также разделен на 2 части символом точки (.). Часть перед символом точки называется объектом (источник сообщения), а часть за символом называется приоритетом (степень важности сообщения). Комбинация объекта-приоритета и действия говорит rsyslog, что делать, если сообщение соответствует указанным параметрам.

Вот отрывок из файла rsyslog.conf на CentOS:

# rsyslog v5 configuration file

...

# Include all config files in /etc/rsyslog.d/

IncludeConfig /etc/rsyslog.d/*.conf

#### RULES ####

# Log all kernel messages to the console.

# Logging much else clutters up the screen.

#kern.*  /dev/console

# Log anything (except mail) of level info or higher.

# Don't log private authentication messages!

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.

authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.

mail.*                                                  -/var/log/maillog

# Log cron stuff

cron.*                                                  /var/log/cron

# Everybody gets emergency messages

*.emerg                                                 *

# Save news errors of level crit and higher in a special file.

uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log

local7.*                                                /var/log/boot.log

...

Версия на печать

Популярное