Почему grep может получить минимальное количество символов в строке, но не максимальное?

Проблема была вызвана неправильным контекстом файла /usr/bin/mount:samba_share_t.

Изменение контекста файла было вызвано не какой-то ошибкой из-за полной перезагрузки, а... моим неосторожным решением последовать первому предложению SELinux Alert Browser. Смотрите скриншот ниже.enter image description here

Это первое предложение состояло в том, чтобы изменить контекст файла /usr/bin/mountна samba_share_t, чтобы разрешить smbd доступ к getattr.

Решение было:

  1. удалить неверный контекст файла, восстановить значение по умолчанию и переименовать файл :
    [root@atlas ~]# ls -Z /usr/bin/mount
    system_u:object_r:samba_share_t:s0 /usr/bin/mount
    [root@atlas ~]# semanage fcontext -d /usr/bin/mount
    [root@atlas ~]# restorecon -v /usr/bin/mount
    Relabeled /usr/bin/mount from system_u:object_r:samba_share_t:s0 to system_u:object_r:mount_exec_t:s0
    [root@atlas ~]# ls -Z /usr/bin/mount
    system_u:object_r:mount_exec_t:s0 /usr/bin/mount
    
  2. перезагрузить систему.

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

Когда я проверил измененные контексты файлов SELinux (, см. стр. 10 моего первоначального поста )я заметил, что контекст монтирования выглядит подозрительно. На данный момент я понял, что незадолго до того, как проблема началась, я неосторожно последовал первому предложению SELinux Alert Browser изменить контекст файла монтирования. Такое же предложение появилось сейчас, после восстановления и перезапуска системы, поэтому я смог прикрепить скриншот ниже.

Спасибо @sourcejedi за указание на то, что SELinux может быть причиной проблемы, и за его любезную помощь!

0
04.02.2020, 06:59
2 ответа
grep ".\{0,81\}" foo.txt

Любая строка будет соответствовать этому. Если строка имеет 82 символа, она также имеет 81 символ. Вам нужно либо:

  • оберните регулярное выражение в ^и $так, чтобы от начала строки до конца строки было от 0 до 81 символа, или
  • используйте -x, чтобы указать, что строка должна точно соответствовать этому регулярному выражению (эквивалентно приведенной выше опции)

Так:

grep "^.\{0,81\}$" foo.txt
grep -x ".\{0,81\}" foo.txt
3
28.04.2021, 23:24

Использование любого awk в любой оболочке на каждом компьютере UNIX:

$ printf 'abcdef\nABC\n' | awk 'length($0) > 3'
abcdef
$ printf 'abcdef\nABC\n' | awk 'length($0) < 3'
$
$ printf 'abcdef\nABC\n' | awk 'length($0) <= 3'
ABC

Будьте проще и помните поговорку:

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

0
28.04.2021, 23:24

Теги

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