Почему вы этого ожидали?
Из справочной страницы man setfacl
:
Утилита setfacl распознает следующий ACL форматы ввода (для ясности вставлены пробелы):
[d [efault]:] [u [ser]:] uid [: perms]
Разрешения указанного пользователя. Разрешения владельца файла, если uid пуст.
[d [efault]:] g [roup]: gid [: perms]
Разрешения указанной группы. Разрешения группы-владельца, если gid пуст.{{1} }
[d [efault]:] m [ask] [:] [: perms]
Маска действующих прав
[d [efault]:] o [ther] [:] [: perms]
Разрешения других лиц.
ACL отделены от традиционных элементов управления доступом Unix - владельца, группы и маски прав для владельца, группы и других.
Хотя мы не можем придумать ни одной причины, по которой вам может понадобиться ACL с тем же пользователем или группой, что и традиционные средства управления доступом, решение о том, что это должно быть запрещено, не входит в философию Unix. setfacl
с радостью позволяет вам это делать; KISS хорош.
Если вам не нравится такое поведение, и вы бы предпочли, чтобы утилита «автоматически определяла» эту ситуацию, вы можете написать свою собственную оболочку вокруг setfacl
. В сценарии оболочки вы можете использовать stat -c% U FILE
для получения имени владельца и stat -c% G FILE
для имени группы файла или каталога. ФАЙЛ
. По моему опыту, в организациях со сложным набором пользователей и групп такие оболочки - не только для setfacl
, но и для всего управления владением файлами - повсеместны.
В настоящее время вы сортируете всю строку, но похоже, что вы хотите сортировать только первый столбец. В том виде, в котором ваша команда написана сейчас, столбцы будут в основном сгруппированы вместе, например:
Cyb5 157.426 -> Cyb5157426
Cyb561 0.425933 -> Cyb5610425933
vs
Cyb561 7.11003 -> Cyb561711003
Cyb5 64.074 -> Cyb564074
Чтобы отсортировать только первый столбец, вам нужно использовать следующую команду:
sort -d -k1,1
Cyb5 157.426
сортирует до Cyb561 0.425933
, а Cyb5 64.074
сортирует после Cyb561 7.11003
, потому что в вашем языковом стандарте пробелы игнорируются на первом проходе упорядочивания, поэтому порядок ближе к английскому словарю.
Например, в словаре у вас будет a priori
между пасекой
и прибытием
.
Здесь при сравнении Cyb5 157.426
с Cyb561 0.425933
сравнивается первый Cyb5157.426
с Cyb5610.425933
на первом проходе, потому что первый вес символа пробела - IGNORE .
Если вы хотите избежать этой специальной обработки, вы можете изменить локаль на C
, где порядок основан исключительно на значениях кодовых точек символов.
LC_ALL=C sort -d file
Или, как сказал @Swiss, сортировать только по первому полю:
sort -d -k1,1 file
Однако обратите внимание, что разделитель полей - это переход от непустого к пустому, а пробелы включены в поля.
Итак:
b x
a x
с sort -d -k1,1
все равно будет отсортирован как
a x
b x
в вашем регионе, потому что пробелы игнорируются, но как:
b x
a x
В локали C как пробел сортирует перед a
.
Вы можете добавить параметр -b
, чтобы начальные пробелы всегда игнорировались независимо от локали. Или снова установите языковой стандарт на C, если вы хотите, чтобы сначала сортировались строки, начинающиеся с пробелов.