Intereting Posts
обновить параметры nm-апплета в командной строке Ubuntu Вложение cmap в moinmoin самовосстанавливающийся туннель ssh через соединение не 100% Как настроить формат вывода для журнала linux при просмотре журнала? Как запустить скрипт от имени пользователя root и текущего пользователя одновременно? Найти и заменить строку в именах каталогов Создание сертификата * .local ssl Сеть или Wi-Fi случайно опускаются, что может быть проблемой? Как захватить IP-адрес клиентов на мой сервер через обратный туннель ssh. как начать с моего shell-скрипта xterm, который запускает mplayer и воспроизводит файлы, которые являются аргументом скрипта Возможно ли сохранить содержимое виртуальной консоли Linux и прокрутку в файле? Как изменить цвет фона приложений curses? Что находится в разделе fsck в fstab? Raspbian отключить mount & automount USB-накопитель tmux: общий сеанс, один пользователь в панели, другой в другой панели, два разных курсора

Как получить номер разрешения по строке: -rw-r-r–

Мне нужно установить тот же chmod, как получить номер для -rw-r-r– ?

Пожалуйста, проверьте вывод stat :

 # stat .xsession-errors File: '.xsession-errors' Size: 839123 Blocks: 1648 IO Block: 4096 regular file Device: 816h/2070d Inode: 3539028 Links: 1 Access: (0600/-rw-------) Uid: ( 1000/ lik) Gid: ( 1000/ lik) Access: 2012-05-30 23:11:48.053999289 +0300 Modify: 2012-05-31 07:53:26.912690288 +0300 Change: 2012-05-31 07:53:26.912690288 +0300 Birth: - 
 r=4 w=2 x=1 

в каждой группе. Ваш пример равен 6 (r + w = ​​4 + 2) 4 (r = 4) 4 (r = 4).

Полный номер режима разрешений – это 4-значное восьмеричное число, но большую часть времени вы используете только 3 наименее значимых цифры. Добавьте каждую группу в строку разрешений, взяв r = 4, w = 2, x = 1. Например:

  421421421 -rwxr-xr-- \_/ -- r+w+x = 4+2+1 = 7 \_/ -- r+_+x = 4+0+1 = 5 \_/ -- r+_+_ = 4+0+0 = 4 => 0754 

Теперь, иногда вы увидите странную скромность:

 -rwsr-xr-T 

Четвертая цифра перегружена на x бит в modestring. Если вы видите букву, отличную от x , то это означает, что установлен один из этих «специальных» бит четвертой разряды, а если буква имеет нижний регистр, тогда также устанавливается x для этой позиции. Таким образом, перевод для этого:

  4 2 1 421421421 -rwsr-xr-T + + + -- s+_+T = 4+0+1 = 5 \_/ -- r+w+s = 4+2+1 = 7 (s is lowercase, so 1) \_/ -- r+_+x = 4+0+1 = 5 \_/ -- r+_+T = 4+0+0 = 4 (T is uppercase, so 0) => 05754 

Стандартный UNIX способ показать, что число равно восьмеричному, – это запустить его с нулем. GNU chmod будет считать, что режим, который вы даете, восьмеричный, но безопаснее добавлять ноль.

Наконец, если вы видите + в конце скромности:

 -rwxr-xr-x+ 

то это означает, что файл имеет расширенные разрешения, и вам потребуется больше, чем chmod . Посмотрите на команды setfacl и getfacl , для начала.

Это может быть просто

 -bash-3.2$ stat --format=%a sample_file 755 

Получите список файлов с их значениями значений строк и шестнадцатеричных значений. Положив% N в конец, чтобы результат мог быть помещен в Excel проще.

 stat -c "%A %a %N" * -rw-r--r-- 644 `file2.txt' -rw-r--r-- 644 `file3.txt' -rw-r--r-- 644 `file4.txt' -rw-r--r-- 644 `file.txt' drwxr-xr-x 755 `hsperfdata_root' -rw-r--r-- 644 `junk.txt' drwx------ 700 `vmware-root' 

Это найдет все файлы с определенным разрешением hex.

 find /tmp1 -user root -perm 644 

Разрешения – это просто строковое представление двоичного числа.
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))" 

Для всех параллельных файлов в Dir

 -bash-4.1$ chmod -R 640 * 

Для всех файлов

 -bash-4.1$ chmod 640 *