обратные ссылки в `rename` regex

При определении разрешений на доступ с использованием разрешений в стиле Unix текущий пользователь сравнивается с владельцем файла, затем с группой, и применяемые разрешения совпадают с разрешениями первого совпадающего компонента. Таким образом, владелец файла имеет права владельца (и только те), члены группы файла имеют права группы (и только те), все остальные имеют права «других пользователей».

Таким образом:

  • У Джона нет прав доступа к этому файлу.
  • Побеждает наиболее конкретное совпадение разрешений, а не наиболее разрешающее (права доступа не суммируются).
  • С разрешениями 642 Джон мог читать файл.
  • Существуют причины для предоставления разрешений, например 604 : это позволяет исключить группу, что может быть удобно в некоторых ситуациях - я видел это в академических системах с учениками , где сотрудники могли создавать файлы, доступные всем, кроме студентов.

root имеет доступ ко всему, независимо от разрешений, определенных для файла.

Для более сложного контроля доступа вам следует изучить списки ACL SELinux и POSIX . (SELinux, в частности, может даже ограничить доступ к root ).

4
20.01.2016, 00:15
2 ответа

Стандартный инструмент, который это делает, - pax - хотя он лучше работает с жесткими ссылками и копиями, чем с прямыми перемещениями. Конечно, все действия сводятся к созданию новой ссылки и удалению старой.

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

спросил POSIXly, вы можете сделать:

pax -rwls'|^\(bar\)_\(foo\).txt$|\2_\1.txt|' -s'|.*||' *_*.txt .

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

И стиль регулярных выражений sed , vim является стандартным BRE

0
27.01.2020, 20:55
  1. С помощью util-linux переименовать , нет, здесь выполняется только базовая замена строк. Используя Perl переименовать , да, см. ответ choroba .

  2. С помощью zsh zmv :

     autoload -U zmv # поместите это в свой ~ / .zshrc 
    zmv '(*) _ (*). (*)' '$ {2} _ $ 1. $ 3 '
    zmv -w' * _ *. * '' $ {2} _ $ 1. $ 3 '
     

    Два zmv вызовы выше эквивалентны. Чтобы действовать и в подкаталогах, вы можете использовать zmv -w '** / * _ *. *' '$ 1 / $ {3} _ $ 2. $ 4'

  3. Vi (m) и sed использовать (расширения of) основные регулярные выражения . См. Также Почему мое регулярное выражение работает в X, но не в Y?

0
27.01.2020, 20:55

Теги

Похожие вопросы