Разрешения — это просто строковое представление двоичного числа. 0
в основном представлено -
, остальные буквы.
Для базовых разрешений:
Преобразуйте все -
и заглавные буквы S
или T
в 0
, остальные должны представлять 1
.
Результирующее двоичное число, построенное таким образом, должно быть напечатано как восьмеричное :
$ a=-rw-r--r--
$ b=${a//[ST-]/0}
$ b=${b//[!0]/1}
$ printf '%04o\n' $((2#$b))
0644
В одну строку:
$ b=${a//[ST-]/0}; b=${b//[!0]/1}; printf '%04o\n' $((2#$b))
0644
Исправление ошибок и обнаружение остальных 3 битов 1000
, 2000
или 4000
требуют дополнительного кода:
#!/bin/bash
Say (){ printf '%s\n' "$@"; }
SayError(){ a=$1; shift; printf '%s\n' "$@" >&2; exit "$a"; }
e1="Permission strings should have 10 characters or less"
e2="Assuming first character is the file type"
e3="Permission strings must have at least 9 characters"
e4="Permission strings could only contain 'rwxsStT-'"
a=$1
((${#a}>10)) && SayError 1 "$e1"
((${#a}==10)) && { Say "$e2"; a=${a#?}; }
((${#a}<9)) && SayError 2 "$e3"
a=${a//[^rwxsStT-]}
((${#a}<9)) && SayError 3 "e4"
b=${a//[ST-]/0}; b=${b//[!0]/1}; c=0
[[ $a =~ [sS]......$ ]] && c=$((c|4))
[[ $a =~ [sS]...$ ]] && c=$((c|2))
[[ $a =~ [tT]$ ]] && c=$((c|1))
printf '%04o\n' "$((2#$b|c<<9))"
Ваша система разрешает (и пытается использовать )IPv6. Вероятно, ваша система использует только IPv4. Чтобы отключить IPv6 на yum, добавьте строку ip _resolve = 4 в раздел «main» файла /etc/yum.conf