unix - будущие разрешения chmod для файлов по умолчанию - PullRequest
2 голосов
/ 02 марта 2012

Я понимаю, что по умолчанию, когда файлы создаются с разрешениями chmod 644. Есть ли возможность изменить это так, чтобы любые файлы, созданные в определенной папке, были по умолчанию 664?

Ответы [ 2 ]

4 голосов
/ 02 марта 2012

Утилита для управления режимом создания файлов в системах POSIX называется umask.Я не думаю, что вы можете применить маски создания файлов для каждой папки, просто так.Но вы можете использовать umask внутри скрипта.Маски, определенные в подоболочке, не влияют на ваши обычные настройки umask (0002).

Если вы хотите автоматически изменять настройки маски при cd в специальном каталоге, вы можете добавить следующеевам скрипт bash (я взял подсказку по функции chdir() из этой ТАКОЙ записи):

chdir() {
    local action="$1"; shift
    case "$action" in
        # popd needs special care not to pass empty string instead of no args
        popd) [[ $# -eq 0 ]] && builtin popd || builtin popd "$*" ;;
        cd|pushd) builtin $action "$*" ;;
        *) return ;;
    esac
    #
    # now do stuff in the new pwd
    #
    SPECIAL_DIRS="/tmp/blah1 /tmp/blah2"
    DEFAULT_MASK="0002"
    for dir in $SPECIAL_DIRS
    do
      if [[ "$PWD" == "$dir" ]]
      then
          umask 0007
          echo "[*] special mask settings applied - $(umask -S)"
      else
          umask $DEFAULT_MASK
      fi
    done
    #
    #
}
alias cd='chdir cd'
alias pushd='chdir pushd'
alias popd='chdir popd

Как видите, я определил /tmp/blah1 и /tmp/blah2 какспециальные каталоги.Теперь, если я выберу cd /tmp/blah1 из обычного bash, мои настройки umask будут соответственно изменены.

[22:45:43] user@host1:[~]$ cd /tmp/blah1
[*] special mask settings applied - u=rwx,g=rwx,o=
[22:45:49] user@host1:[/tmp/blah1]$ cd /tmp/blah2
[*] special mask settings applied - u=rwx,g=rwx,o=
[22:46:03] user@host1:[/tmp/blah2]$ 
1 голос
/ 02 марта 2012

Нет, но вы можете установить группу по умолчанию для вновь создаваемых файлов и каталогов в группу родительской папки, что , вероятно, для решения вашей проблемы: chmod g+s <parent-directory>.Все, что будет создано в <parent-directory>, будет по умолчанию обладать группой <parent-directory>.

...