Al crear directorios, mkdir -m <mode> <dir>
permite crear uno o más directorios con el modo / permisos establecidos (atómicamente).
¿Hay un equivalente para crear archivos, en la línea de comando?
Algo parecido a:
open("file", O_WRONLY | O_APPEND | O_CREAT, 0777);
¿El uso touch
seguido de chmod
mi única opción aquí?
Editar: Después de probar la sugerencia de Teppic a su uso install
, lo corrió a través strace
de ver lo cerca que atómica que era. La respuesta es, no muy:
$ 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
...
Aún así, es un comando de shell único y uno que no conocía antes.
shell
permissions
files
quornian
fuente
fuente
install
install
, por-m 755
lo que no es necesario.touch
siempre crea el archivo si no existe, siempre sigue enlaces simbólicos y siempre hace que el archivo no sea ejecutable. Puede decidir los bits de lectura y escritura a través de la umask .La creación de archivos atómicos "seguros" (en particular, con
O_NOFOLLOW
) no es posible con las herramientas de shell tradicionales. Puedes usarsysopen
en perl. Si tiene lamktemp
utilidad inspirada en BSD , crea un archivo atómicamente conO_NOFOLLOW
; tendrá que llamarchmod
después si el modo predeterminado de 600 no es el correcto.fuente
touch
tuviera la opción de crear archivos ejecutables, eso es realmente lo que busco. Entoncesumask
podría usarse para adaptar los detalles. Lamentablemente no hay forma conumask
ytouch
para crear ejecutables.touch
seguido dechmod +x
.Tengo un script bash en mi directorio de inicio que
/home/anthony/touchmod.sh
contiene:Entonces, si necesito crear
readme.txt
con 644 permisos, puedo escribir:fuente