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 |
/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 |
/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
После установки, переходим к настройке.