Linux для всех подпапок

[BASH] перебор всех подпапок

Сабж. Как сделать перебор всех папок в дирректории в которой выполняется скрипт (с выполнением одного и того же действия в каждой папке).

Re: [BASH] перебор всех подпапок

Re: [BASH] перебор всех подпапок

find . -type d -exec ;

Re: [BASH] перебор всех подпапок

> for i in `find -type d` > do > > done > > или что-то в этом духе

Неработает, скажем хочу я создать в каждой из подпапок новую папку:

for i in `find . -depth -type d` do cd $i mkdir bla-bla cd ../ done

> find . -type d -exec ; аналогично

Re: [BASH] перебор всех подпапок

Re: [BASH] перебор всех подпапок

Re: [BASH] перебор всех подпапок

find ./ -depth -type d -exec mkdir -p <>/subdir \;

отработало. Создало в каждом из подкаталогов subdir.

[slavaz@slavaz-nb find-test]$ uname -a
Linux slavaz-nb.home 2.6.25.10-47.fc8 #1 SMP Mon Jul 7 18:39:51 EDT 2008 i686 i686 i386 GNU/Linux
[slavaz@slavaz-nb find-test]$

Re: [BASH] перебор всех подпапок

роботает, но только почему он создает не только в подпапках но и в самой дирректории в которой запускается? Можно как то этого избежать?

Re: [BASH] перебор всех подпапок

1) find ./ -depth -type d ! -wholename ‘./’ -exec mkdir -p <>/subdir \;

Источник

Linux для всех подпапок

Просто блог. Памятки, прежде всего для себя, о том как была решена та или иная задача.

February 3, 2011

Как рекурсивно массово установить chown на папки и файлы?

Предположим, нам необходимо рекурсивно установить пользователя-владельца some_user (принадлежащего к группе some_group) для всех подпапок и файлов, находящихся в некой директории /home/some_dir. Для этого воспользуемся командой chown, от англ. change owner — сменить владельца.

Заходим в целевую директорию:

Массово устанавливаем владельцем файлов пользователя some_user из some_group рекурсивно (флаг -R) для абсолюно всего, что лежит в текущей директории (маска *)

5 comments:

Иногда лучше использовать конструкцию вида:
$ find . -type f -exec chown ИМЯ_ПОЛЬЗОВАТЕЛЯ <> \;
Чтобы присвоить нового владельца только для фалов (миную каталоги)

Не работает для скрытых файлов, имя которых начинается с точки (хотя хз, может это debian stable такой тормознутый). Сработала команда chown -R some_user:some_group .*

У меня тоже не сработала на имена с точки. Но все норм, маска .* прокатила

Нельзя использовать маску .* для скрытых файлов. Это регулярка, а не просто символы. В результате смена владельца затронет так же все каталоги на уровень выше текущего!

Имхо, лучшее решение — подняться на уровень целевого каталога и выполнить процедуру оттуда

cd /home
chown -R some_user:some_group some_dir

Минус решения в том, что основной каталог тоже сменит владельца.

Источник

Права на файлы и папки в Linux, FreeBSD и MacOS

Сегодня хочется задеть одну очень скользкую тему: права (и обязанности) на файлы в системах, основанных на Unix.

Сегодня хочется задеть одну очень скользкую тему: права (и обязанности) на файлы в системах, основанных на Unix.

Как всегда, хочется рассказать интересно и не упустить важные моменты. Но многим это просто не надо. Им нужен очередной stackoverflow с ответами, в которые не надо вдумываться… Вжух-вжух и ты ботнет.

Чтобы сменить владельца файлов в директории и во всех поддиректориях (рекурсивно), выполните:

Например, чтобы apache смог в какой-то папке сохранять файлы, выполняем:

Чтобы дать права на чтение файла для всех, выполните:

Чтобы сделать это для всей папки и подпапок (рекурсивно):

Чтобы для всех файлов в папке (рекурсивно) выставить права «владелец может читать и менять, остальные — только читать»:

Чтобы для папки и подпапок (рекурсивно) выставить права «владелец может просматривать содержимое и создавать файлы и папки, остальные — только просматривать»:

Чтобы проверить, что у пользователя есть права, самое простое — зайти под ним:

— прочитать файл / создать файл прямо под этим пользователем.

Ну и самое интересное, что я нашёл в популярных вопросах:

— замените user на имя пользователя (не «Иван Иванович Иванов», а «ivanov»), а «:group» можно не указывать.

А на самом деле…

Файлы в Unix

Начнём с того, что файлы в Unix бывают разные. Идеология «всё есть файл» предполагает, что файлы — не то, чем кажутся.

  1. Обычный файл — как раз всё то, что мы называем файлом.
  2. Директория — она же «папка», она же «каталог».
  3. Символическая ссылка — этакий ярлык на другой «файл».
  4. Блочное устройство — те же жёсткие диски, флешки.
  5. Символьное устройство — например, терминалы tty.
  6. Канал (fifo) — один из вариантов межпроцессорного взаимодействия.
  7. Unix сокет — ещё один из вариантов межпроцессорного взаимодействия.
Читайте также:  Настройка сетевых настроек linux

Так что даже с понятием «файл» не так уж и просто. Зато есть возможность на всех них единообразно раздавать права, пользоваться ими. Например, можно сделать cat на устройство, echo для записи в сеть и т. д.

Во FreeBSD я успешно делал cat на директорию, правда получал не особо читаемую информацию. Но и её можно было использовать для получения нужной информации о файле типа «каталог».

В особо весёлых Unix-ах, например Plan9 можно использовать вместо интерфейса сокетов файлы типа /net/tcp. В общем, как всегда идеология «всё есть что-то» не имеет границ здравого смысла. И это прекрасно!

Права в Unix

Здесь мы рассмотрим базовую модель прав в Unix (модель дискреционного управления доступом), без всяких расширений типа атрибутов файлов, эффективных прав и прочих липких битов.

Суть модели прав довольно проста:

  1. У каждого файла есть владелец. Владелец устанавливает права доступа на свои файлы (например, командой chmod).
  2. В системе есть супер-пользователь (root), который устанавливает владельцев файлов (например, командой chown).

Теперь подробнее по первому пункту.

Доступ по пользователям делится на 3 группы

  1. Владелец (user) — тот самый, что имеет возможность изменять права доступа.
  2. Группа (group) — какая-то группа пользователей, которая должна иметь определённые права на файл. Посмотреть группы пользователя можно командой

— пользователь gosha состоит в группах: gosha adm cdrom sudo dip plugdev lpadmin sambashare libvirtd .

С другой стороны можно посмотреть всех пользователей, состоящих в группе:

Не самый элегантный способ, но работает на всех Unix. Также можно использовать утилиты lid и members .

  • Все другие (other) — любой пользователь, существующий в системе.
  • Сами права доступа также делятся на 3 группы

    1. Права на чтения (read или «4» в битовой маске) — право читать файл или читать содержимое директории.
    2. Права на запись (write или «2» в битовой маске) — право писать в файл или создавать файлы в директории.
    3. Право на исполнение (execute или «1» в битовой маске) — право запускать файл (программу, записанную в файле) или переходить по директории вглубь (например, сделать cd в поддиреторию).

    Битовая маска прав доступа

    Давайте посмотрим права на папку /bin, например, с помощью команды ls -l / | grep bin :

    Кроме указанного представления полномочий доступа (символьного), существует так же и числовое представление. Для общего понимания, приведу таблицу соответствия числового (двоичного и десятичного) значения прав доступа и буквенного:

    владелец группа остальные
    буквенное rwx r-x r-x
    числовое (десятичное) 421 401 401
    итоговое (сумма) 7 5 5

    В приведенной таблице показано, что право чтения, соответствует значению 4, право записи — 2, право выполнения — 1, отсутствие права — 0, складывая данные показатели, можно представлять и назначать права в числовом виде. Таким образом, вместо drwxr-xr-x можно написать 755 . Часто можно увидеть именно числовое определение прав доступа — теперь вы понимаете, что это значит.

    Часто можно увидеть на файле права 644 — постарайтесь понять, что это значит, чтобы закрепить полученные знания.

    Источник

    Как установить chmod для папки и всех ее подпапок и файлов? [закрытый]

    есть ли способ установить chmod 755 на /opt/lampp/htdocs и все его содержимое, включая вложенные папки и файлы?

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

    это работает, но только для этой папки:

    16 ответов

    другие ответы верны, в том, что chmod -R 755 будет установить эти разрешения для всех файлов и вложенных папок в дереве. но с какой стати ты хочешь этого?—8—>? Это может иметь смысл для каталогов, но зачем устанавливать бит execute для всех файлов?

    Я подозреваю, что вы действительно хотите установить каталоги в 755 и либо оставить файлы в покое, либо установить их в 644. Для этого вы можете использовать . Например:

    изменить все директорий 755 ( drwxr-xr-x ):

    изменить все файлы 644 ( -rw-r—r— ):

    в будущем вы можете сэкономить много времени, сначала проверив man-страницу:

    если вы хотите установить разрешения на все файлы a+r и все каталоги к a+x , и сделайте это рекурсивно через полное дерево подкаталогов, используйте:

    на X (то есть капитал X , не маленький x !) не учитывается для файлов (если они не являются исполняемыми для кого-то уже), но используется для каталогов.

    можно использовать -R С chmod для рекурсивного обхода всех файлов и вложенных папок.

    Читайте также:  Система windows защитила ваш компьютер при установке

    вам может понадобиться sudo, поскольку это зависит от лампы устанавливается текущим пользователем или другим:

    для установки во все подпапки (рекурсивно) используйте-R

    и используйте umask для установки по умолчанию новых папок / файлов cd / папка umask 755

    chmod 755 -R /opt/lampp/htdocs будет рекурсивно задать права доступа. Невозможно установить разрешения для файлов автоматически только в этом каталоге, который создается после установки разрешений, но вы можете изменить системные разрешения по умолчанию, установив umask 022 .

    правильная рекурсивная команда:

    -R : измените каждую подпапку, включая текущую папку

    возможно, вы захотите рассмотреть этот ответ дал ник на суперпользователя и использовать «один chmod» для всех файлов / папок, как это:

    однако будьте осторожны с этим. Это действительно может повредить вам, если вы измените разрешения для файлов/папок.

    вот еще один способ установить каталоги 775 и файлы 664.

    это может выглядеть долго, но это довольно круто по трем причинам:

    1. сканирует файловую систему только один раз, а не два.
    2. обеспечивает лучший контроль над тем, как файлы обрабатываются против how каталоги обрабатываются. Это полезно при работе с специальные режимы например Sticky бит, который вы вероятно, хотите применить к каталогам, но не к файлам.
    3. использует технику прямо из man «страницы» (см. ниже).

    обратите внимание, что я не подтвердил разницу в производительности (если таковая имеется) между этим решением и простым использованием двух команд find (как в решении Питера Мортенсена). В то же время отрадно видеть аналогичный пример в руководстве.

    пример man find страницы:

    chmod -R 755 directory_name работает,но как бы вы сохранили новые файлы до 755? Разрешения файла становятся разрешениями по умолчанию.

    вы хотите убедиться, что соответствующие файлы и каталоги являются chmod-ed/разрешения для тех, которые подходят. Для всех каталогов, которые вы хотите

    и для всех изображений, JavaScript, CSS, HTML. ну, ты не должен их казнить. Так что используйте

    но для всего логического кода (например, PHP-кода) Вы должны установить разрешения так, чтобы пользователь не мог видеть этот код:

    для Mac OS X 10.7 (Lion), это:

    и да, как говорят все остальные, будьте осторожны при этом.

    Я думаю, Адам спрашивал, как изменить значение umask для всех процессов, которые связывают работать на

    есть два ответа на поиск файлов и применение chmod к ним. Первый — find файл и применить chmod как он находит (как предложено @WombleGoneBad).

    второе решение-создать список всех файлов с find команда и введите этот список в chmod команда (как предложено @lamgesh).

    обе эти версии работают хорошо, пока количество файлов, возвращаемых мал. Второй решение отлично смотрится на глаз и более читабельно, чем первое. Если есть большое количество файлов, второе решение возвращает ошибку : Argument list too long.

    Итак, мое предложение

    1. использовать chmod -R 755 /opt/lampp/htdocs если вы хотите изменить разрешения для всех файлов и каталогов одновременно.
    2. использовать find /opt/lampp/htdocs -type d -exec chmod 755 <> \; если количество файлов, которые вы используете, очень велико. The -type x опция ищет только определенный тип файла, где d используется для поиска каталога, f для файла и я по ссылке.
    3. использовать chmod 755 $(find /path/to/base/dir -type d) иначе
    4. лучше использовать первый в любой ситуации

    Это очень просто.

    в терминале перейдите в файловый менеджер. пример: sudo nemo . Go /opt/ нажмите кнопку Разрешение → Свойства. а потом . —5—>другое. Наконец, изменить, чтобы создать и удалить и файл acess для чтения и записи и нажмите на кнопку Применить. И работать.

    Источник

    Как изменить разрешения для папки и всех ее подпапок и файлов за один шаг в Linux? [закрыто]

    Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме переполнения стека.

    Закрыто 5 лет назад .

    Я хотел бы изменить права доступа к папке и всем ее подпапкам и файлам за один шаг (команду) в Linux.

    Я уже попробовал приведенную ниже команду, но она работает только для указанной папки:

    Есть ли способ , чтобы установить chmod 755 для /opt/lampp/htdocs и все его содержимое , включая вложенные папки и файлы?

    Кроме того, в будущем, если я создам новую папку или файл внутри htdocs , как автоматически могут быть установлены разрешения для этого 755 ?

    Я тоже посмотрел эту ссылку:

    Другие ответы верны, в этом chmod -R 755 будут установлены эти разрешения для всех файлов и подпапок в дереве. Но с какой стати вы хотите ? Это может иметь смысл для каталогов, но зачем устанавливать бит выполнения для всех файлов?

    Я подозреваю, что вы действительно хотите сделать, это установить каталоги на 755 и либо оставить файлы в покое, либо установить их на 644. Для этого вы можете использовать find команду. Например:

    Чтобы изменить все каталоги на 755 ( drwxr-xr-x ):

    Чтобы изменить все файлы на 644 ( -rw-r—r— ):

    Проверьте опцию -R

    В будущем вы можете сэкономить много времени, проверив сначала справочную страницу:

    Читайте также:  Security 4624 microsoft windows security auditing

    Итак, в этом случае:

    Если вы хотите установить разрешения для всех файлов a+r и всех каталогов a+x и сделать это рекурсивно через полное дерево подкаталогов, используйте:

    X (То есть капитал X , не мало x !) Игнорируется для файлов (если они не являются исполняемыми для кого — то уже есть ) , но используется для каталогов.

    Вы можете использовать -R с chmod для рекурсивного обхода всех файлов и подпапок.

    Вам может понадобиться sudo, так как это зависит от того, установлен LAMP текущим пользователем или другим пользователем:

    Правильная рекурсивная команда:

    -R : изменить каждую подпапку, включая текущую папку

    Чтобы установить все подпапки (рекурсивно), используйте -R

    И используйте umask для установки по умолчанию новых папок / файлов cd / folder umask 755

    → umask -S u=rwx,g=rx,o=rx λ

    chmod 755 -R /opt/lampp/htdocs будет рекурсивно устанавливать разрешения. Невозможно автоматически установить разрешения для файлов только в этом каталоге, который создается после установки разрешений, но вы можете изменить общесистемные разрешения для файлов по умолчанию с помощью параметра umask 022 .

    Возможно, вы захотите рассмотреть этот ответ, данный nik для суперпользователя, и использовать «один chmod» для всех файлов / папок, например:

    Однако будьте осторожны с этим. Это может действительно навредить вам, если вы измените права доступа к неправильным файлам / папкам.

    Вот еще один способ установить каталоги на 775 и файлы на 664.

    Это может выглядеть долго, но довольно круто по трем причинам:

    1. Сканирует файловую систему только один раз, а не дважды.
    2. Обеспечивает лучший контроль над тем, как обрабатываются файлы , и как обрабатываются каталоги . Это полезно при работе со специальными режимами, такими как закрепление , которое вы, вероятно, хотите применить к каталогам, но не к файлам.
    3. Использует технику прямо из man страниц (см. Ниже).

    Обратите внимание, что я не подтвердил разницу в производительности (если есть) между этим решением и простым использованием двух команд поиска (как в решении Питера Мортенсена). Тем не менее, увидеть подобный пример в руководстве обнадеживает.

    Пример со man find страницы:

    chmod -R 755 directory_name работает, но как бы вы сохранили новые файлы на 755? Разрешения файла становятся разрешением по умолчанию.

    Для Mac OS X 10.7 (Lion) это:

    И да, как и все другие говорят, будьте осторожны при этом.

    Вы хотите убедиться, что соответствующие файлы и каталоги имеют права chmod-ed / permissions для них. Для всех каталогов вы хотите

    И для всех изображений, JavaScript, CSS, HTML . ну, вы не должны их выполнять. Так что используйте

    Но для всего логического кода (например, PHP-кода) вы должны установить разрешения таким образом, чтобы пользователь не мог видеть этот код:

    Я думаю, что Адам спрашивал, как изменить значение umask для всех процессов, над которыми связывается работа /opt/lampp/htdocs каталогом.

    Маска пользовательского режима создания файлов (umask) используется для определения прав доступа для вновь создаваемых файлов. Его можно использовать для управления разрешением по умолчанию для новых файлов.

    так что если вы будете использовать какую-то программу ftp для загрузки файлов в /opt/lampp/htdocs вам необходимо настроить ваш ftp-сервер так, чтобы он использовал umask, который вы хотите.

    Если файлы / каталоги создаются, например, с помощью php, вам нужно изменить код php

    если вы создадите новые файлы / папки из вашего сеанса bash, вы можете установить значение umask в своем профиле оболочки

    / .bashrc. Или вы можете настроить umask /etc/bashrc или /etc/profile файл для всех пользователей. добавьте в файл следующее: umask 022

    А для изменения прав доступа к уже созданным файлам вы можете использовать find. Надеюсь это поможет.

    Есть два ответа на поиск файлов и применение chmod к ним. Первый — find это файл, который применяется chmod как он находит (как предложено @WombleGoneBad).

    Второе решение — создать список всех файлов с помощью find команды и предоставить этот список chmod команде (как предложено @lamgesh).

    Обе эти версии работают хорошо, если количество файлов, возвращаемых find командой, мало. Второе решение выглядит привлекательно и более читабельно, чем первое. Если существует большое количество файлов, второе решение возвращает ошибку: Argument list too long.

    Итак, мое предложение

    1. использование chmod -R 755 /opt/lampp/htdocs если вы хотите изменить права доступа ко всем файлам и каталогам одновременно.
    2. Используйте, find /opt/lampp/htdocs -type d -exec chmod 755 <> \; если количество файлов, которые вы используете, очень велико. -type x опции поиск определенного типа только файл, где d используется для поиска каталога, F для файла и л для ссылки.
    3. использование chmod 755 $(find /path/to/base/dir -type d) иначе
    4. Лучше использовать первый в любой ситуации

    Это очень просто

    В Терминале зайдите в файловый менеджер. Пример: sudo nemo . Перейдите, /opt/ затем нажмите Свойства → Разрешение . а потом Другое . Наконец, перейдите к созданию и удалению и доступу к файлу для чтения и записи и нажмите кнопку «Применить». И работа.

    Источник

    Оцените статью