10

Я упаковываю папку с большим количеством подпапок и файлов в Windows с помощью 7zip, загружаю в VPS и затем запускаю команду:

tar -xvzf file.tar.gz

тогда все распакованные файлы и папки имеют права доступа 777. Как получить, чтобы папки имели права доступа 755, а файлы 644?

5 ответов5

13

Если вы используете tar(1) как обычный пользователь, он по умолчанию применяет ваш umask . Если вы запускаете tar(1) от имени пользователя root , вы можете задать параметр командной строки --no-same-permissions чтобы попросить tar(1) соблюдать umask .

Итак: либо запустите это как обычный пользователь:

umask 022
tar zxvf file.tar.gz

или запустите это как root:

umask 022
tar zxvf file.tar.gz --no-same-permissions

Возможно, вы захотите вставить umask 022 в ваш ~/.bashrc , ~/.bash_profile или ~/.profile . (См. Man- страницу bash(1) для получения полной информации о файлах запуска). Это сложно.)

Подробную информацию о umask можно найти на странице руководства вашей оболочки, на странице управления системными вызовами umask(2) или на странице управления служебной программой, предоставляемой umask(1posix) POSIX (если у вас установлен manpages-posix ).

5

Выполните следующие команды в корне каталога, чтобы установить необходимые разрешения для ваших каталогов и файлов:

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Помните о расстоянии между закрывающей фигурной скобкой и обратной косой чертой

2

Я нашел это решение, которое сработало для меня. Для папок и подпапок:

chmod -R 777 */

И для всех файлов (также в папках и подпапках):

find . -type f -name "*" | xargs chmod 644

Все комментарии приветствуются, если это не очень хороший способ сделать это. Я только начал изучать Linux.

После комментариев, более надежное решение, которое хорошо обрабатывает специальные символы:

find . -type f -print0 | xargs -0 chmod 644  # For files
find . -type d -print0 | xargs -0 chmod 755  # For directories
1

Если вы используете прописную букву X в chmod вы можете использовать ее для установки разрешений на выполнение только для каталогов. т.е.

chmod -R ugo+X .
0

находить . -type f -exec chmod 644 {} \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .