Основы linux от основателя gentoo. часть 2 (2/5): назначения папок, поиск файлов

15. Поиск locate по регулярным выражениям

Команда locate по умолчанию использует поиск по паттернам (образцам). Если вы хотите сделать поиск по регулярным выражениям, то для этого имеется две опции:

  -r, --regexp REGEXP    поиск по базовым регулярным выражениям вместо паттернов
      --regex            образцы – это расширенные регулярные выражения

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

locate -b --regex "^{1,3}{3}$"
/home/mial/t.txt
/opt/wine64/drive_c/Python27/Lib/test/cjkencodings/hz.txt
/usr/lib/go/src/compress/testdata/e.txt
/usr/lib/go/src/compress/testdata/pi.txt
/usr/lib/modules/4.10.11-1-ARCH/build/include/config/blk/dev/3w/xxxx
/usr/lib/node_modules/bluebox-ng/node_modules/require-dir/test/duplicates/c.txt
/usr/lib/node_modules/bluebox-ng/node_modules/require-dir/test/simple/d.txt
/usr/lib/python2.7/test/cjkencodings/hz.txt
/usr/lib/python3.5/site-packages/pbr/tests/testpackage/data_files/a.txt
/usr/lib/python3.5/site-packages/pbr/tests/testpackage/data_files/b.txt
/usr/lib/python3.6/test/cjkencodings/hz.txt
/usr/share/davtest/tests/pl.txt
/usr/share/iptv/languages/it.txt
/usr/share/pasv-agrsv/notes/db.txt
/usr/share/snoopy-ng/setup/sn.txt
/usr/share/uniscan/c.txt

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

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

Где в Linux диски C, D, E?

Если задаться вопросов, где диск C в Linux, то его можно обнаружить сразу в двух местах. Во-первых, поскольку в Linux все физические устройства являются файлами, то диск C будет представлен файлом, например, с именем /dev/sda. Первая часть в этом имени — /dev/ — это директория, в которой расположены файлы, обозначающие устройства (о всех директориях будет рассказано далее). А sda — это уже непосредственно имя диска. Если однотипных дисков несколько, то последующим присваиваются другие буквы: /dev/sdb, /dev/sdc и т. д. Имя диска указывает на вид носителя. Например, буквы sd означают Solid Drive, то есть твердотельный диск. Если имя /dev/hda, то буквы hd означают Hard Drive (жёсткий диск).

Допустим имя диска /dev/hdc, что можно сказать о нём? Можно утверждать, что это жёсткий диск и он третий в системе.

Диски могут иметь и другие имена, например, у меня системный диск называется /dev/nvme0n1 — я погуглил, оказывается это новый вид твердотельных дисков NVM Express (NVMe).

Итак, мы уже нашли диск C? Не совсем. Имя /dev/sda это всего лишь обозначение устройства, которое предполагает использование имени для управления самим устройством. Например, если мы хотим создать новый раздел на диске или изменить размеры существующих, то мы откроем соответствующую программу, и в качестве параметра передадим ей имя диска, с которым хотим работать. Мы не можем открывать файлы обращаясь к диску по имени вида /dev/*

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

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

Во время установки пакета mlocate создается задание cron, которое запускает команду updatedb каждые 24 часа. Это гарантирует, что база данных регулярно обновляется. Для получения дополнительной информации о работе cron проверьте файл /etc/cron.daily/mlocate.

Базу данных можно обновить вручную, выполнив команду updatedb от имени пользователя root или пользователя с привилегиями sudo:

sudo updatedb

Процесс обновления займет некоторое время, в зависимости от количества файлов и каталогов и скорости вашей системы.

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

По сравнению с более мощной командой find, которая выполняет поиск в файловой системе, locate работает намного быстрее, но не имеет многих функций и может выполнять поиск только по имени файла.

Установка команды locate (команда locate не найдена)

В зави­си­мо­сти от дис­три­бу­ти­ва и от того, как была предо­став­ле­на ​​систе­ма, пакет locate может быть или не быть пред­ва­ри­тель­но уста­нов­лен в вашей систе­ме Linux.

Что­бы про­ве­рить, уста­нов­ле­на ​​ли ути­ли­та locate в вашей систе­ме, открой­те тер­ми­нал, вве­ди­те locate и нажми­те Enter. Если пакет уста­нов­лен, систе­ма отоб­ра­зит locate: no pattern to search for specified, в про­тив­ном слу­чае вы уви­ди­те что-то вро­де locate command not found.

Если locate не уста­нов­лен, вы може­те лег­ко уста­но­вить его с помо­щью мене­дже­ра паке­тов ваше­го дистрибутива.

YAML

sudo apt updatesudo apt install mlocate

1 sudoaptupdatesudoaptinstallmlocate

Статьи по теме тега: «updatedb locate»

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>style=»padding-top:6px;padding-bottom:6px;»>

В разделе / ​​nfs может быть много файлов (веб-страница или данные изображений и т. д.). Поэтому нельзя индексировать файлы в этом разделе. Один тратит ресурсы ЦП, другой — тратит ресурсы ввода-вывода…

Некоторые версии Linux-систем используют locate для быстрого поиска пути к файлу, и будет сообщено о следующей ошибке: Причина в том, что пакет mlocate не установлен Установка: yum -y установить mloca…

Чаще всего в Linux используется find для поиска файлов. Если он используется с командой xargs и конвейером, команда find line может сыграть большую роль. Единственная проблема в том, что она будет оче…

Найдите формат команды Поиск в базе данных фоновой базы данных в базе данных, скорость поиска быстрее #Locate Command Shinarable фоновой базы данных Обновление базы данных /etc/updatedb.comf Файл конф…

1. Введение команды         locateКоманда (locate) используется для поиска файлов или каталогов. Команда locate работает намного быстрее, чем команда find -name, пот…

Найдите поиск Файл 1, найдите установку 2, найдите файл поиска 1, найдите установку 2, найдите файл поиска Справка: Одна команда Linux каждый день (18): найдите команду…

Функция поиска строки LOCATE () Сцены LOCATE(substr,str) , LOCATE(substr,str,pos) Первый синтаксис возвращает первое вхождение подстроки substr в строку str. Второй синтаксис возвращает первое вхожден…

Немного каждый день возможна практическая работа в записи Получить содержимое перед запятой в MySQL Хотите получить слово «Alipay recharge», напишите в mysql: Добавьте условие оценки, когд…

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

1. locate Если он не установлен, сначала установите его:  yum -y install mlocate Команда поиска: найти имя файла Поиск по имени файла в фоновой базе данных, скорость поиска выше    /var…

Команда поиска Суммировать…

Здесь мы вводим команду locate, которая используется для поиска файлов. Configuration Конфигурация установки】 Установить Mlocate Создать файл данных БД # up…

При установке приложения в системе ubuntu произошла ошибка:Unable to locate package Причина проблемы — недавно установленная система ubuntu, причины для обновления нет, используйте следующую команду: …

Описание проблемы: Идея Windows выполняет ошибку при разработке искры Could not locate executable null\bin\winutils.exe in the Hadoop binaries (Примечание. Эта ошибка, как правило, не трубка, но если …

Тестирование Cassandra кластера

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

Данное действие необходимо выполнить на всех узлах кластера!

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

Получил ошибку:

Исправлением служит следующие действия…. Находим файл cassandra-env.sh и нужно его отредактировать:

PS: можно заюзать locate для поиска этого файла — Установка locate и updatedb в Unix/Linux

Находим в нем:

И приводим к виду ( пример):

И так на каждой из нод.

На одной из нод, получил еще ошибку:

Решение:

Потом:

И:

Запускаем кассандру и выполняем сново проверку:

Получаем:

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

PS: Нужно отключить или настроить SELinux:

Как отключить SELinux на CentOS

И, если используется IPtables, то настроить его:

Когда locate не катит.

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

	$ locate somefile.txt        <-- ищем файл somefile.txt которого нет
	$ touch /tmp/somefile.txt    <-- создаем его
	$ locate /tmp/simefile.txt   <-- пытаемся его найти, он не находится
	$ su                         <-- тогда логинимся под root,
	Password:
	# updatedb                    -- и обновляем базу locate
	# exit                        -- после чего возвращаемся
	exit
	$ locate somefile.txt        <-- теперь поиск успешен
	/tmp/somefile.txt
	$ mv /tmp/somefile.{txt,old} <-- переименовываем
	$ locate /tmp/somefile.txt   <-- под старым именем не находим
	$ locate /tmp/somefile.old   <-- под новым тоже не находим
	$ su                         <-- еще раз обновляем базу под root-ом
	Password:
	# updatedb
	# exit
	$ locate /tmp/somefile.old   <-- теперь все OK под новым именем находится
	/tmp/somefile.old
	$ locate /tmp/somefile.txt    -- под старым нет
	$

В случае если вы и пользователь или root в одном лице, то проблема
решается обновлением базы руками, иначе придется пользоваться чемто
более мощным, типа find.

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

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

$ cat /tmp/l
locate -f proc / |  xargs -n 1000 ls -ld

$ cat /tmp/f
find / -ls 2>/dev/null

$ time /tmp/f >/dev/null
3.83user 2.80system 0:06.99elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (358major+147minor)pagefaults 0swaps

$ time /tmp/l >/dev/null
5.41user 5.92system 0:11.62elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (28176major+11719minor)pagefaults 0swaps

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

На этом разрешите откланяться. До новых встреч.

Использование locate и updatedb в Unix/Linux

Обновляем список файлов:

И после чего можно пользоваться, например мне нужно найти расположение файла datedetector.py (для добавление конфигурации fail2ban), то для этого нужно выполнить:

updatedb

Данное руководство документирует версию GNU о updatedb, которая обновляет базы данных всех имен для файлов, используемые GNU locate. Базы данных имен всех файлов содержат списки файлов, которые были найдены в ходе сканирования данной утилиты. Имя файла базы данных по умолчанию определяется при установке и настройке locate и updatedb. Частота, с которой выполняется обновление баз и каталогов, для которых они содержат записи зависит от того, как часто updatedb запускается и так же от аргументов которые переданы в конфиге.

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

Новый GNU locate можно прочитать и старые, и новые форматы баз данных.

Опции для  updatedb.

-uСоздать slocate базу данных, начиная с корневого каталога. Это происходит по умолчанию, если вызывается updatedb.

-U pathСоздать slocate базу данных, начиная с указанного пути.

-e dirsИсключить каталоги разделенными запятыми из базы данных slocate.

-f fstypesИсключить файловые системы, разделенные запятыми  из базы данных slocate.

-lУровень безопасности. -l 0 означает что проверки безопасности выключены, что сделает поиск быстрее. -l 1 означает что проверки безопасности включены. Это по умолчанию.

-qТихий режим; Сообщения об ошибках подавляются.

-vПодробный режим; Показать файлы которые индексируются при создании базы данных.

—helpРаспечатать список опций для slocate и выйти.

—versionВывести номер версии slocate и выйти.

—output=dbfileФайл базы данных, чтобы построить. По умолчанию зависит от системы, но обычно это/usr/local/var/locatedb.

—netuser=userПользователю говорится искать сетевые каталоги, как, используя SU. По умолчанию

—old-formatСоздание базы данных в старом формате вместо нового.

locate project

Показывает все файлы, которые содержат строку «project». Если эта команда не работает, вам нужно будет выполнить команду:

Эта команда создает slocate базу данных, которая позволит вам использовать команду найти (slocate). Это может занять несколько минут.

Опции для  locate.

-uСоздать slocate базу данных, начиная с пути /.

-U dirСоздать slocate базу данных, начиная с пути.

-eИсключить каталоги из базы данных slocate.

-fИсключить файлы на конкретной файловой системы из базы данных slocate.

-cРазпарсить «/etc/updatedb.conf» при обновлении базы данных slocate.

-lУровень безопасности. 0 означает что проверки безопасности выключена. Это сделает Осуществляет поиск быстрее. 1 означает что проверки безопасности включены. Это по умолчанию.

-iДелает поиск без учета регистра.

-qТихий режим. Сообщения об ошибках подавляются.

-nОграничьте количество результатов.

-r—regexp= Поиск по базе данных с помощью базовых регулярных выражений в POSIX.

-o—output= Указывает базу данных, чтобы создать ее.

-d—database= Указывает путь базы данных для поиска.

-h—help вывод помощи.

-v—verbose Подробный режим. Отображение файлов при создании базы данных.

-V—version Отображение версии.

На этом, моя тема «Установка locate и updatedb в Unix/Linux» подошла к завершению.

Используйте команду updatedb

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

Сначала создайте общую системную базу данных с правами root:

Это займет несколько минут, в зависимости от того, сколько файлов в вашей системе. Оттуда найдите файл с mlocate. Например:

Обратите внимание на количество мусора, который появляется? Вы можете, если вы решите исключить определенные каталоги с флагом -e

Если вы хотите увидеть, какие файлы добавляются в базу данных, используйте флаг -v .

Теперь, чтобы запустить updatedb как обычный пользователь, используйте флаг -l со значением 0, чтобы исключить все, к чему у вашего пользователя нет доступа. Затем укажите локальный вывод в вашем домашнем каталоге с флагом -o .

Для поиска в этой пользовательской базе данных вместо системной используйте флаг -d, чтобы указать пользовательскую.

Это наиболее распространенные способы работы с updatedb. Для более полной разбивки см. Полное техническое руководство ниже.

Синтаксис и основные опции

Син­так­сис коман­ды locate следующий:

YAML

locate . . . PATTERN . . .

1 locate…PATTERN…

Ути­ли­та про­из­во­дит поиск фай­лов, име­на кото­рых сов­па­да­ют с ука­зан­ным в пара­мет­ре PATTERN шаб­ло­ном и выво­дит най­ден­ные соот­вет­ствия. Опции, задан­ные пара­мет­ром OPTION, управ­ля­ют спе­ци­фич­ным пове­де­ни­ем ути­ли­ты locate.

Опция Зна­че­ние
-S, —statistics Выво­дит ста­ти­сти­ку по исполь­зу­е­мой ути­ли­той locate БД.
-i, —ignore-case Про­во­дит поиск без учё­та реги­стра сим­во­лов в шаб­лоне поиска.
-0, —null Отклю­ча­ет фор­ма­ти­ро­ва­ние (пере­вод стро­ки для каж­до­го сов­па­де­ния) в выводе.
-r, —regexp Зада­ние шаб­ло­на поис­ка с помо­щью регу­ляр­но­го выражения.
-c, —count Выво­дит толь­ко коли­че­ство сов­па­де­ний без подроб­ной информации.
-e, —existing Выво­дит резуль­та­ты толь­ко для суще­ству­ю­щих в ФС фай­лов и каталогов.

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

Син­так­сис коман­ды locate следующий:

YAML

locate PATTERN…

1 locatePATTERN…

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

Напри­мер, что­бы най­ти файл с име­нем .bashrc, введите:

YAML

locate .bashrc

1 locate.bashrc

Вывод будет вклю­чать име­на всех фай­лов, содер­жа­щих стро­ку .bashrc в их именах:

YAML

/etc/bash.bashrc
/etc/skel/.bashrc
/home/andreyex/.bashrc
/usr/share/base-files/dot.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc

1
2
3
4
5
6

/etc/bash.bashrc
/etc/skel/.bashrc
/home/andreyex/.bashrc
/usr/share/base-files/dot.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc

Файл /root/.bashrc не будет пока­зан, так как мы запу­сти­ли коман­ду как обыч­ный поль­зо­ва­тель, кото­рый не име­ет пра­во досту­па к ката­ло­гу /root.

Если спи­сок резуль­та­тов длин­ный, для луч­шей чита­е­мо­сти вы може­те напра­вить вывод в коман­ду less:

YAML

locate .bashrc | less

1 locate.bashrc|less

Коман­да locate так­же при­ни­ма­ет шаб­ло­ны, содер­жа­щие сим­во­лы-заглуш­ки, такие как под­ста­но­воч­ный знак *. Когда шаб­лон не содер­жит сим­во­лов-гло­бу­сов *PATTERN*, кото­рые ищет коман­да, поэто­му в преды­ду­щем при­ме­ре отоб­ра­жа­лись все фай­лы, содер­жа­щие шаб­лон поис­ка в сво­их именах.

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

YAML

locate *.md

1 locate*.md

Что­бы огра­ни­чить резуль­та­ты поис­ка, исполь­зуй­те -nпа­ра­метр, за кото­рым сле­ду­ет коли­че­ство резуль­та­тов, кото­рые вы хоти­те отоб­ра­зить. Напри­мер, сле­ду­ю­щая коман­да будет искать все фай­лы .py и отоб­ра­жать толь­ко 10 результатов:

YAML

locate -n 10 *.py

1 locate-n10*.py

По умол­ча­нию locate выпол­ня­ет поиск с уче­том реги­стра. Опция -i( –ignore-case) ука­зы­ва­ет locate на игно­ри­ро­ва­ние реги­стра и запуск поис­ка без уче­та регистра.

YAML

locate -i readme.md

1 locate-ireadme.md

YAML

/home/andreyex/p1/readme.md
/home/andreyex/p2/README.md
/home/andreyex/p3/ReadMe.md

1
2
3

/home/andreyex/p1/readme.md
/home/andreyex/p2/README.md
/home/andreyex/p3/ReadMe.md

Что­бы отоб­ра­зить коли­че­ство всех сов­па­да­ю­щих запи­сей, исполь­зуй­те пара­метр -c( –count). Сле­ду­ю­щая коман­да вер­нет номер всех фай­лов, содер­жа­щих­ся .bashrc в их именах:

YAML

locate -c .bashrc

1 locate-c.bashrc

YAML

6

1 6

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

Что­бы отоб­ра­зить толь­ко име­на фай­лов, кото­рые суще­ству­ют в дан­ный момент, в locate исполь­зуй­те пара­метр -e( –existing). Напри­мер, сле­ду­ю­щее вер­нет толь­ко суще­ству­ю­щие фай­лы .json:

YAML

locate -e *.json

1 locate-e*.json

Если вам нуж­но выпол­нить более слож­ный поиск, вы може­те исполь­зо­вать опцию -r( –regexp), кото­рая поз­во­ля­ет выпол­нять поиск, исполь­зуя базо­вое регу­ляр­ное выра­же­ние вме­сто шаб­ло­нов. Эта опция может быть ука­за­на несколь­ко раз.
Напри­мер, для поис­ка всех фай­лов .mp4 и .avi в вашей систе­ме и игно­ри­ро­ва­ния реги­стра вы долж­ны выполнить:

YAML

locate —regex -i «(\.mp4|\.avi)»

1 locate—regex-i»(\.mp4|\.avi)»

Утилиты gzip — gunzip

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

paul@rhel55 ~$ ls -lh text.txt 
-rw-rw-r-- 1 paul paul 6.4M апр 17 13:11 text.txt
paul@rhel55 ~$ gzip text.txt 
paul@rhel55 ~$ ls -lh text.txt.gz 
-rw-rw-r-- 1 paul paul 760K апр 17 13:11 text.txt.gz

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

paul@rhel55 ~$ gunzip text.txt.gz 
paul@rhel55 ~$ ls -lh text.txt
-rw-rw-r-- 1 paul paul 6.4M апр 17 13:11 text.txt

Настройка и использование Lsyncd в Unix/Linux

Чтобы все хорошо работало, нужно сгенерировать RSA ключ и положить его на удаленный сервер. Я пропущу данный шаг, т.к я это уже сделал, а если не знаете как это сделать вот статья:

Настройка и использование Lsyncd на Mac OS X

И так, я у себя на mac OS X хотел бы настроить lsyncd таким образом, чтобы он синхронизировал все изменения.

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

$ mkdir /usr/local/var/log/lsyncd

И создаю нужные файлы:

$ touch /usr/local/var/log/lsyncd/lsyncd.{log,status}

PS: В ОС Linux они могут лежать в /var/log/lsyncd. Если не имеется такой папки, то создаем.

Далее, я создаю каталог lsyncd в /etc/ для настройки конфига:

$ sudo mkdir /etc/lsyncd

После создания данной папки, я создаю конфигурационный файл:

# vim /etc/lsyncd/linux_notes.conf.lua

Содержание следующее:

settings  {
    logfile = "/usr/local/var/log/lsyncd/lsyncd.log",
    statusFile = "/usr/local/var/log/lsyncd/lsyncd.status",
    statusInterval = 1,
    nodaemon = off
}
sync {
    default.rsyncssh,
    source = "/Users/captain/tmp",
    host = "captain@31.187.70.238",
    targetdir = "/home/captain/",
    excludeFrom="/etc/lsyncd/linux_notes.exclude",
    delay=3,
    rsync = {
        sparse = true,
        update = true,
        links = true,
        times = true,
        protect_args = false,
        archive = true,
        compress = true,
        whole_file = false,
        acls = true,
        verbose = true
    },
    ssh = {
        port = 22,
        _extra = {"/usr/bin/ssh -l captain -p 22 -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no"}
    }     

}

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

# vim /etc/lsyncd/linux_notes.exclude
.git/*
.*

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

$ sudo lsyncd /etc/lsyncd/linux_notes.conf.lua -delay 0

Настройка и использование Lsyncd на CentOS

Вот еще пример (проверялось на CentOS 7):

# vim  /etc/lsyncd.conf

И прописываем:

settings  {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status",
    statusInterval = 1
}
sync {
    default.rsyncssh,
    source = "/var/www/html",
    host = "31.187.70.238",
    targetdir = "/home/backups/",
    rsync = {
        sparse = true,
        update = true,
        temp_dir="/tmp/",
        links = true,
        times = true,
        protect_args = false,
        archive = true,
        compress = true,
        whole_file = false,
        acls = true,
        verbose = true
     },
     ssh = {
        port = 22,
        _extra = {"/usr/bin/ssh -l captain -p 22 -i /home/captain/.ssh/id_rsa -o StrictHostKeyChecking=no"}
    }     

}

ИЛИ, если использовать RSYNC:

settings = {
 logfile = "/var/log/lsyncd/lsyncd.log",
 statusFile = "/var/log/lsyncd/lsyncd.stat",
 statusInterval = 2,
},
sync{
 default.rsync,
 source="/var/www/html",
 target="31.187.70.238:/home/captain/", 
 rsync={rsh ="/usr/bin/ssh -l captain -i /home/captain/.ssh/id_rsa",}
}

Запускаем демон:

# service lsyncd restart

Добавляем в автозагрузку ОС:

# chkconfig lsyncd on

Если используете CentOS 7:

# systemctl restart lsyncd

И

# systemctl enable lsyncd

Подключаемся к серверу и проверяем папки. Так же, можно посмотреть логи.

Репликация в 2 стороны

Чтобы работала репликация и в обратную сторону — на сервере в другом регионе проведите такие же настройки, но в файле конфигурации lsyncd укажите адрес первого сервера. Проверьте, что данные реплицируются и в обратном направлении. В конфигурации lsyncd уже указана временная директория temp_dir, использование которой необходимо для двусторонней синхронизации.

Репликация на несколько серверов

Вот пример конфиругации:

settings = {
   delay        = 1,
   maxProcesses = 3,
   logfile = "/var/log/lsyncd/lsyncd.log",
   statusFile = "/var/log/lsyncd/lsyncd.stat",
}

targetlist = {
 "66.66.66.10:/var/www/html", 
 "66.66.66.20:/var/www/html"
}

for _, server in ipairs(targetlist) do
  sync{ default.rsync,
    source="/var/www/html",
	rsyncOps="-rltvupgo"
    target=server
  }
end

На этом, у меня все, статья  «Установка Lsyncd в Unix/Linux» завершена.

Использование команды в числовом виде

Права записываются одной строкой сразу для трёх типов пользователей:

  • владельца файла (u);
  • других пользователей, входящих в группу владельца (g);
  • всех прочих пользователей (o);

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

Пример: в числовом виде, установить права rwx-rx-rx:

chmod 755 filename

Пример — значение права «755»

Владелец Группа Остальные
восьмеричное значение 7 5 5
символьная запись rwx r-x r-x
обозначение типа пользователя u g o

Таким образом, права «755» записываются в символьном виде как «rwxr-xr-x». При этом для понимания сути задания прав в Unix-системах полезно знать представление чисел в двоичной системе счисления.

Варианты записи прав пользователя

двоичная восьмеричная символьная права на файл права на директорию
000 нет нет
001 1 —x выполнение чтение файлов и их свойств
010 2 -w- запись нет
011 3 -wx запись и выполнение всё, кроме чтения списка файлов
100 4 r— чтение чтение имён файлов
101 5 r-x чтение и выполнение доступ на чтение
110 6 rw- чтение и запись чтение имён файлов
111 7 rwx все права все права

Часть разрешений имеет смысл только в сочетании с другими. Из первых четырёх пунктов (не дающих права на чтение файла) для файлов обычно используется только «—», то есть полный запрет доступа к файлу данному типу пользователей. Для директорий из всего списка обычно применяются только 0, 5 и 7 — запрет, чтение и выполнение, и полный доступ.

Суммировав эти коды для трёх типов пользователей, можно получить числовую или символьную запись. Например, chmod 444 {имяфайла}: 400+40+4=444 — все имеют право только на чтение (идентично «r—r—r—»).

Помимо стандартных разрешений ‘rwx’, команда chmod осуществляет также управление битами SGID, SUID и T. Установленные атрибуты SUID или SGID позволяют запускать файл на выполнение с правами владельца файла или группы соответственно.

Для SUID вес — 4000, а для SGID — 2000. Данные атрибуты имеют смысл при установленном соответствующем бите исполнения и обозначаются при символьной записи буквой «s»: и соответственно.

Пример: chmod 4555 {имяфайла} — все имеют право на чтение и выполнение, но запускаться файл на исполнение будет с правами владельца.

Установка SGID для директории приведёт к установке принадлежности каждого нового создаваемого файла к той же группе, к которой принадлежит сама директория, а не к основной группе владельца, как это происходит по умолчанию. SUID для директории не имеет смысла.
sticky bit или restricted deletion flag (t-бит) используется только с директориями. Когда t-бит для директории не установлен, файл в данной директории может удалить (переименовать) любой пользователь, имеющий доступ на запись к данному файлу. Устанавливая t-бит на директорию, мы меняем это правило таким образом, что удалить (переименовать) файл может только владелец этого файла. Следуя приведённой выше кодировке, t-бит имеет вес 1000.

Примечание: Право на запись (w) даёт пользователю возможность записывать или изменять файл, а право на запись для каталога — возможность создавать новые файлы или удалять файлы из этого каталога. Если на каталоге стоит возможность записи (w), то файл внутри этого каталога можно будет удалить, даже если право на запись для него не установлено. (В соответствии с концепцией файловой системы POSIX).

Популярные значения

— Владелец имеет право чтения; никто другой не имеет права выполнять никакие действия — Все пользователи имеют право чтения; владелец может редактировать — Владелец и группа могут читать и редактировать; остальные не имеют права выполнять никаких действий — Все пользователи имеют право чтения; владелец и группа могут редактировать — Все пользователи могут читать и редактировать — Владелец может читать, записывать и запускать на выполнение; никто другой не имеет права выполнять никакие действия — Каждый пользователь может читать, владелец имеет право редактировать и запускать на выполнение — Каждый пользователь имеет право читать и запускать на выполнение; владелец может редактировать — Каждый пользователь может читать, редактировать и запускать на выполнение — Каждый пользователь имеет право читать и запускать на выполнение; удалить файл может только владелец этого файла — Каждый пользователь имеет право читать и запускать на выполнение с правами группы(user group) владельца файла — Владелец и группа имеет право чтения никто другой не имеет права выполнять никакие действия — Каждый пользователь имеет право читать и запускать на выполнение с правами владельца файла

Поиск файлов с четко заданным именем

По умолчанию при поиске файла с помощью locate переданное имя, такое, как , будет автоматически преобразовываться в в шаблон поиска . Например, при поиске файла с именем будут выведены все имена файлов, соответствующие шаблону поиска :

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

$ locate -r /testfile$

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

Установка Lsyncd в Unix/Linux

Процесс установки очень прост и не требует очень больших усилий. Я приведу несколько примеров по установки данной утилиты на различные Unix/Linux ОС.

Установка Lsyncd в Debian/Ubuntu

# apt-get update -y && apt-get update -y

Выполним установку:

# apt-get install lsyncd -y

После установки, переходим к настройке.

Установка Lsyncd в CentOS/RedHat/Fedora

# yum -y update

Выполним установку:

# yum install lsyncd -y

И, установим дополнительные пакеты:

# yum install lua lua-devel pkgconfig gcc asciidoc -y

После установки, переходим к настройке.

Установка Lsyncd в Mac OS X

Ставим себе на машину homebrew:

И выполняем установку:

$ brew install lsyncd

После установки, переходим к настройке.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: