Как уже упоминалось , / usr / local
, по сути, является префиксом для программного обеспечения, установленного системным администратором, а / usr
должно быть используется для программного обеспечения, устанавливаемого из пакетов дистрибутива.
Идея заключается в том, чтобы избежать конфликтов с распределенным программным обеспечением (например, rpm
и deb
] пакетами) и дать администратору полную власть над «локальным» префиксом.
Это означает, что администратор может устанавливать скомпилированное программное обеспечение, продолжая использовать такой дистрибутив, как debian.
Из FHS
Программное обеспечение, размещенное в / или / usr, может быть перезаписано при обновлении системы (хотя мы рекомендуем, чтобы в этих обстоятельствах дистрибутивы не перезаписывали данные в / etc). По этой причине локальное программное обеспечение нельзя размещать за пределами / usr / local без уважительной причины.
При установке пользовательского программного обеспечения пользователь предлагает использовать $ HOME
в качестве префикса, поскольку это гарантирует, что у вас есть права на запись. Лично я считаю использование $ HOME / .local
более элегантным решением, поскольку оно позволяет избежать загромождения вашего (надеюсь) красивого и аккуратного домашнего каталога!
$ HOME / .local / share
уже используется в спецификации freedesktop.org XDG Base Directory , поэтому нетрудно представить себе добавление $ HOME /. local / bin
в ваш $ PATH
и создайте $ HOME / .local / lib
и т. д., пока вы на нем.
Если вы действительно не хотите, чтобы ваш префикс был скрытым каталогом, вы также можете легко создать на него символическую ссылку, e.g:
ln -s .local ~/local
Стоит отметить, что .config
(а не .local / etc
) является значением по умолчанию для $ XDG_CONFIG_HOME
, используемого для пользовательские файлы конфигурации. Я также должен отметить, что, к сожалению, большая часть программного обеспечения игнорирует XDG и создает файлы конфигурации где угодно (обычно в корне $ HOME
). Также обратите внимание, что $ XDG_CONFIG_HOME
может быть отключен, если требуется значение по умолчанию $ HOME / .config
.
Как ни странно, нет каталога, зарезервированного для файлов конфигурации по умолчанию для дистрибутива, поэтому невозможно узнать, был ли файл в / etc
предоставлен дистрибутивом или отредактирован системным администратором.
Используйте флаг -g/--glob
, как описано в руководстве . Он использует подстановку вместо регулярных выражений, но на практике выполняет то же самое. Например:
rg PM_RESUME -g '*.h'
находит вхождения PM_RESUME
только в заголовочных файлах C при проверке ядра Linux.
ripgrep не позволяет использовать регулярное выражение для сопоставления путей к файлам. Вместо этого вы должны использовать xargs, если вам абсолютно необходимо использовать регулярное выражение:
rg --files -0 | rg '.*\.h$' --null-data | xargs -0 rg PM_RESUME
Разрушение:
rg --files -0
выводит на стандартный вывод все файлы, которые он будет искать, с разделителями NUL
. rg '.*\.h$' --null-data
соответствует только строкам из списка файлов, которые заканчиваются на .h
. --null-data
гарантирует, что мы сохраним наши NUL
байт. xargs -0 rg PM_RESUME
разбивает аргументы с разделителями NUL
и передает их ripgrep, что точно соответствует списку файлов, соответствующих вашему исходному регулярному выражению. Обработка NUL
байт необходима для полной корректности. Если у вас нет пробелов в путях к файлам, то команда проще:
rg --files | rg '.*\.h$' | xargs rg PM_RESUME