Существует команда chmod для установки прав доступа к файлам, но можно ли получить права доступа к файлам в восьмеричном режиме (например, 755) из командной строки?
command-line
permissions
Анвар
источник
источник
stat --format "%A" $FILE
дает вам удобочитаемыйdrwxr-x---
формат. что может или не может быть полезным.Ответы:
Ты можешь попробовать
Замените
*
на соответствующий каталог или точное имя файла, которое вы хотите проверить.Со страницы руководства stat ,
Использование:
С файлами:
С папками:
(Ссылка)
источник
stat -f '%A %a %N' *
(кредит: geeklog.adamwilson.info/article/58/… )ls
:for f in $(ls -a); do stat -c "%a %n" $f; done;
ls
- плохая идея. Если вы действительно хотите использовать цикл, вы можете сделатьfor f in *; do stat "%a %n" "$f"; done
Права доступа к файлам в Linux могут отображаться в восьмеричном формате с помощью команды Linux stat.
Просто нажмите Ctrl+ Alt+ Tна клавиатуре, чтобы открыть терминал. Когда он откроется, перейдите в каталог, где вы хотите найти разрешения для файлов в восьмеричном режиме.
% A Права доступа в удобочитаемой форме
% a Права доступа в восьмеричном виде
% n Имя файла
Источник: http://kmaiti.blogspot.com/2011/09/umask-concept.html
источник
Как подробно описано в «755» -Style разрешений с «LS» от Адама Courtemanche на AgileAdam.com , вы можете создать псевдоним
lso
, который действует как ,ls -l
но немного обрабатывает выход 1 с разрешениями дисплея также в восьмеричной системе . Это добавляет начальный столбец, показывающий трехзначные 2 восьмеричные разрешения. Как написано, это работает для большинства файлов и каталогов, но не работает должным образом, если установлены биты sticky или setuid / setgid . 3Это серьезный недостаток, хотя, как techtonik указывает . Вы не можете передавать аргументы этому
lso
псевдониму так же, как иls
команде , потому чтоawk
вместо них они принимаются как дополнительные аргументы . Таким образом, вы не можете запускатьlso
определенный файл или каталог, а также не можете передавать никакие параметры (например-F
, или--color
)lso
.Исправление заключается в том, чтобы определить
lso
как функцию, а не псевдоним.Если вы пытаетесь сделать это интерактивно в своей оболочке, запустите,
unalias lso
чтобы удалить псевдоним - вы можете сделать это либо до, либо после определения функции. Если вы помещаете его в файл с источником, например~/.bashrc
, просто выньтеalias
строку и добавьте определение функции.Почему это работает? В отличие от псевдонимов, функции оболочки bash могут принимать позиционные параметры , то есть аргументы командной строки .
"$@"
расширяется до полного списка аргументов , в результате чего аргументыlso
функции передаютсяls
. (В отличие от определения псевдонима, тело функции не заключено в кавычки; следовательно, необходимо было удалить\
символы до$
и"
.)Так как вы можете передать параметры ,
lso
когда определена таким образом , как функции, вы можете удалить-a
и-G
варианты из определения - вы можете передать их вручную в тех случаях , когда вы хотите их. ( Опция требуется для деталей , таких как права доступа к файлам , которые будут показаны на всех , так что нет никакой пользы для его удаления.)-l
Спасибо techtonik за то, что он указал на ограничение в определении
lso
псевдонима, мотивируя меня расширить этот пост материалом о том, чтобы сделать его вместо этого функцией.1 Можно заметить, что это нарушает общее правило о том, что не
ls
нужно анализировать выходные данные из .ls
производит очень удобочитаемый вывод; это вводит идиосинкразии и ограничения, делающие его вообще непригодным в качестве ввода для других команд. В этом случае мы выполняем синтаксический анализ,ls
поскольку хотим сохранить точное поведение,ls
кроме одного добавленного нами изменения.2 Одно из ограничений этого псевдонима, которое также применяется к версии функции, показанной ниже, и которая может рассматриваться как ошибка, состоит в том, что он отображает только три восьмеричных цифры, даже когда четвертая восьмеричная цифра равна нулю. Как jfmercer уже справедливо указывал , что восьмеричные цифры , показанные здесь , не отражают липкий бит , если он присутствует, ни Setuid или setgid бит.
- Более серьезно , чем просто не показывает четвертую восьмеричную цифры является то , что этот метод предполагает , что они не установлены, и если они есть - если вы видите
t
,s
илиS
в строке разрешения - то вы должны игнорировать восьмеричные цифры . Это связано с тем, что биты выводятся из строки разрешений таким образом, что не учитываются липкие биты setuid / setgid.источник
awk: read error (Is a directory)
--color
параметр для отображения цветовlso() { ls -alG "$@" --color | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'; }
Просто расширяем \ упрощаем предыдущие ответы, связанные с «stat»:
Вы можете просто запустить:
Вывод будет содержать восьмеричное разрешение вместе с другой информацией.
Подробности (версия и пример статистики):
Обратите внимание: ( 0644 / -rw-r - r--)
источник
Для переносимости вы можете использовать
perl
:Если вы хотите заметить, когда происходит ошибка, попробуйте:
источник
Вы можете использовать
find
с-printf
действием.ls
не отображает восьмеричные разрешения, но вы можете использовать этотfind
обходной путь:Например, чтобы проверить мой каталог «Видео»:
Спецификатор
%m
формата указывает-printf
действию печатать восьмеричные разрешения, тогда как%f
спецификатор формата заставляет его печатать имя файла.Вы можете передать несколько имен файлов
find
. Вы можете даже использовать шары (например,find * -printf "%m:%f\n"
).Вам не нужно использовать тест, как
-name
или-iname
; достаточно указать имена файлов или каталогов, которые вас интересуют, в качестве отправных точекfind
. То есть, указывайте их имена в качестве аргументов сразу после словаfind
, как показано выше.find
дает вам большой контроль над тем, как он показывает результат. В частности, есть две модификации, которые могут оказаться полезными:По умолчанию
find
рекурсивные подкаталоги аналогичныls -R
. Если вы не хотитеfind
посещать подкаталоги начальных точек, которые вы передаете ему, вы можете добавить-maxdepth 0
(или использовать-maxdepth
с другими значениями, чтобы указать, насколько глубоко вы хотите, чтобы это пошло).%f
отображает только имя файла, поэтому, еслиfind
требуется выполнить возврат к файлу, вы можете не знать, где он находится. Чтобы показать путь, начиная с любой начальной точки, в которой был найден файл, используйте%p
вместо этого.Смотрите
man find
для получения дополнительной информации об использованииfind
команды.Другой метод (
ls
аawk
)Это может быть использовано для вывода списка всех файлов каталогов с их разрешениями:
По сути, это та же команда, что и в псевдониме Адама Куртманча
lso
, на который приведен этот ответ , она запускается как одна команда. Если вы используете это только один раз или в редких случаях, вы можете не захотеть писать его как псевдоним или функцию оболочки.источник