При создании каталогов mkdir -m <mode> <dir>
предусматривает создание одной или нескольких папок с заданным режимом / разрешениями (атомарно).
Есть ли эквивалент для создания файлов в командной строке?
Что-то похожее на:
open("file", O_WRONLY | O_APPEND | O_CREAT, 0777);
Использование с touch
последующим chmod
моим единственным вариантом здесь?
Изменить: После того, как опробовал предложение Teppic использовать install
, я пробежал его, strace
чтобы увидеть, насколько это было близко к атомному. Ответ не очень:
$ strace install -m 777 /dev/null newfile
...
open("newfile", O_WRONLY|O_CREAT|O_EXCL, 0666) = 4
fstat(4, {st_mode=S_IFREG|0666, st_size=0, ...}) = 0
...
fchmod(4, 0600) = 0
close(4) = 0
...
chmod("newfile", 0777) = 0
...
Тем не менее, это единственная команда оболочки, которую я не знал раньше.
shell
permissions
files
quornian
источник
источник
install
install
, поэтому-m 755
не требуется.touch
всегда создает файл, если он не существует, всегда следует по символическим ссылкам и всегда делает файл неисполняемым. Вы можете решить биты чтения и записи через umask .«Безопасное» создание атомарного файла (в частности, с помощью
O_NOFOLLOW
) невозможно с помощью традиционных инструментов оболочки. Вы можете использоватьsysopen
в Perl. Если у вас естьmktemp
утилита, вдохновленная BSD , она создает файл атомарно сO_NOFOLLOW
; Вам придется позвонитьchmod
позже, если режим по умолчанию 600 не является правильным.источник
touch
бы у меня была возможность создавать исполняемые файлы, это действительно то, что мне нужно. Затемumask
может быть использован для настройки деталей. К сожалению, нет никакого способаumask
иtouch
для создания исполняемых файлов.touch
последующимchmod +x
.В моем домашнем каталоге есть скрипт bash,
/home/anthony/touchmod.sh
содержащий:Поэтому, если мне нужно создать
readme.txt
с 644 разрешениями, я могу набрать:источник