web-dev-qa-db-fra.com

Les fichiers peuvent-ils être créés avec des autorisations définies sur la ligne de commande?

Lors de la création de répertoires, mkdir -m <mode> <dir> prévoit la création d'un ou plusieurs répertoires avec le jeu de mode/autorisations donné (atomique).

Y a-t-il un équivalent pour créer des fichiers, sur la ligne de commande?

Quelque chose de ressemblant à:

open("file", O_WRONLY | O_APPEND | O_CREAT, 0777);

Utilise touch suivi d'un chmod ma seule option ici?


Edit : Après avoir essayé la suggestion de Teppic à utiliser install, je l'ai couru via strace pour voir à quelle distance l'atomique était. La réponse est, pas très:

$ 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
...

Néanmoins, il s'agit d'une seule commande de shell et celui que je ne savais pas auparavant.

38
quornian

Vous pouvez utiliser la commande install (partie de GNU corutils) avec un fichier factice, par exemple.

install -b -m 755 /dev/null newfile

Les -b option sauvegarde newfile s'il existe déjà. Vous pouvez utiliser cette commande pour définir le propriétaire également.

48
teppic