Ответ 1
install -m 777 /dev/null filename.txt
Я использую следующие 2 команды для создания 0B файла и установки его extn в 644
touch filename.ext
chmod 777 filename.txt
Мой вопрос заключается в том, есть ли какая-либо одна команда в unix (оболочка korn), которая будет делать две вещи вместе, то есть создать файл 0B с желаемым разрешением?
install -m 777 /dev/null filename.txt
Для bash
просто используйте chmod
с перенаправлением файлов и расширением истории:
chmod 777 filename.txt>>!#:2
Для ksh
и zsh
вам нужно отказаться от расширения истории (как показано выше, могут быть другие способы) и использовать:
chmod 644 filename>>filename
Для скриптов любой оболочки у вас нет (и действительно не нужно) расширения истории, поэтому используйте вышеприведенную там.
Прежде всего, вы НИКОГДА не должны устанавливать что-либо для 777
разрешений. Это огромная проблема безопасности, и в этом нет необходимости. Для целей этого вопроса я предполагаю, что вы хотите создать файл с более безопасными разрешениями, чем значения по умолчанию, скажем 600
.
Не существует единого способа безопасного создания и изменения разрешений файла с использованием большинства инструментов bash. Даже сложный трюк перенаправления в ответе Павла на самом деле мгновенно создает файл с разрешениями по умолчанию перед их сбросом. Все новые файлы создаются с использованием любого значения umask системы, если программа создания не отправляет очень специфические запросы в операционную систему во время создания узла. Маска из 133
распространена, что означает, что ваши файлы создаются с 644
разрешениями из коробки.
Помимо использования команды chmod
для установки прав доступа к файлу после создания файла, вы также можете сообщить системе, какие значения по умолчанию вы хотите использовать с помощью команды umask
.
$ umask 077
$ touch test_file
$ ls -l test_file
-rw------- 1 user group 0 Jan 24 22:43 test_file
Вы заметите, что файл был создан с 600
правами доступа.
Это останется в силе для всех команд, запущенных в оболочке, пока вы не закроете эту оболочку или вручную не установите другое значение. Если вы хотите использовать эту конструкцию для запуска одной команды (или даже небольшого набора из них), может быть полезно изолировать команды в подоболочке
$ (umask 077 ; touch test_file)
Обратите внимание, что все, что вы помещаете внутри parens, будет использовать этот umask, но как только вы его закроете, вы вернетесь в свою предыдущую среду.
Вы можете создать свою собственную команду:
create () {
touch "$1"
chmod "$2" "$1"
}
create filename.ext 644
Единственная причина, по которой ваши файлы не созданы с разрешениями 666 сразу же - это umask. Так что, если вы отключите Umask:
umask 0
затем, когда вы дотронетесь до файла, он автоматически получит права 666. Не было бы хорошей идеей сделать текстовые файлы исполняемыми обычно. Каталоги получат разрешение 777 с отключенным umask.
[email protected] /tmp $ umask
0022
[email protected] /tmp $ touch x
[email protected] /tmp $ mkdir xx
[email protected] /tmp $ umask 0
[email protected] /tmp $ touch y
[email protected] /tmp $ mkdir yy
[email protected] /tmp $ ls -ld x xx y yy
-rw-r--r-- 1 chicks chicks 484 Jan 24 14:37 x
drwxr-xr-x 2 chicks chicks 4096 Jan 24 14:37 xx
-rw-rw-rw- 1 chicks chicks 0 Jan 24 14:37 y
drwxrwxrwx 2 chicks chicks 4096 Jan 24 14:37 yy
@MiliBoy Ваше решение работает нормально и действительно просто.
просто
touch filename.txt && chmod 755 filename.txt