shell - listar - Único comando para crear un archivo y establecer su permiso.
crear carpeta en linux consola (5)
Estoy usando los siguientes 2 comandos para crear un archivo 0B y establecer su extn a 644
touch filename.ext
chmod 777 filename.txt
Mi pregunta es si hay un solo comando en unix (korn shell) que haga las dos cosas juntas, es decir, crear un archivo 0B con el permiso deseado.
En primer lugar, NUNCA debe configurar nada a los permisos 777
. Este es un gran problema de seguridad y simplemente no hay necesidad de hacerlo. Para los fines de esta pregunta, asumiré que desea crear un archivo con permisos más seguros que los valores predeterminados, por ejemplo, 600
.
No existe una forma única de crear y cambiar de forma segura los permisos de un archivo con la mayoría de las herramientas de bash. Incluso el complicado truco de redireccionamiento en la respuesta de Paul en realidad crea momentáneamente un archivo con los permisos predeterminados antes de restablecerlos. Todos los archivos nuevos se crean con el valor de umask del sistema, a menos que el programa creador envíe solicitudes muy específicas al sistema operativo en el momento de la creación del nodo. Una máscara de 133
es común, lo que significa que sus archivos se crean con 644
permisos fuera de la caja.
Además de usar el comando chmod
para configurar los permisos de archivo después de crear un archivo, también puede decirle al sistema qué valores predeterminados desea usar con el comando umask
.
$ umask 077
$ touch test_file
$ ls -l test_file
-rw------- 1 user group 0 Jan 24 22:43 test_file
Notarás que el archivo ha sido creado con 600
permisos.
Esto se mantendrá vigente para todos los comandos que se ejecutan en un shell hasta que cierre ese shell o establezca manualmente otro valor. Si desea usar esta construcción para ejecutar un solo comando (o incluso un pequeño conjunto de ellos), puede ser útil aislar los comandos en una subshell
$ (umask 077 ; touch test_file)
Tenga en cuenta que cualquier cosa que ponga dentro del paréns usará esa umask, pero tan pronto como la cierre, volverá a su entorno anterior.
La única razón por la que sus archivos no se crean con permisos 666 desde el principio es la umask. Así que si desactivas la umask:
umask 0
luego, cuando tocas el archivo, terminará con los permisos 666 automáticamente. No sería una buena idea hacer archivos de texto ejecutables por lo general. Los directorios terminarían con el permiso 777 con umask desactivado.
chicks@freecandy /tmp $ umask
0022
chicks@freecandy /tmp $ touch x
chicks@freecandy /tmp $ mkdir xx
chicks@freecandy /tmp $ umask 0
chicks@freecandy /tmp $ touch y
chicks@freecandy /tmp $ mkdir yy
chicks@freecandy /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
Para bash
, simplemente use chmod
con la redirección de archivos y la expansión del historial:
chmod 777 filename.txt>>!#:2
Para ksh
y zsh
, debe abandonar la expansión del historial (como se muestra arriba, puede haber otras formas) y usar:
chmod 644 filename>>filename
Para las secuencias de comandos de cualquier shell, no tiene (y realmente no necesita) la expansión del historial, así que use lo anterior también.
Puedes crear tu propio comando:
create () {
touch "$1"
chmod "$2" "$1"
}
create filename.ext 644
install -m 777 /dev/null filename.txt