Lors de la création de répertoires, mkdir -m <mode> <dir>
permet de créer un ou plusieurs répertoires avec le mode / autorisations défini (de manière atomique).
Existe-t-il un équivalent pour la création de fichiers sur la ligne de commande?
Quelque chose qui ressemble à:
open("file", O_WRONLY | O_APPEND | O_CREAT, 0777);
Est-ce que l'utilisation touch
suivie de chmod
ma seule option est ici?
Edit: Après avoir essayé la suggestion de teppic à utiliser install
, je l’ai parcourue strace
pour voir à quel point elle était atomique. 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
...
Pourtant, il s’agit d’une seule commande shell, une commande que je ne connaissais pas auparavant.
la source
install
install
, il-m 755
n'est donc pas nécessaire.touch
crée toujours le fichier s'il n'existe pas, suit toujours les liens symboliques et rend toujours le fichier non exécutable. Vous pouvez décider des bits de lecture et d'écriture via umask .La création de fichiers atomiques «sécurisés» (en particulier avec
O_NOFOLLOW
) n'est pas possible avec les outils de shell traditionnels. Vous pouvez utilisersysopen
perl. Si vous avez l'mktemp
utilitaire inspiré de BSD , il crée un fichier de manière atomique avecO_NOFOLLOW
; vous devrez appelerchmod
après si le mode par défaut de 600 n'est pas le bon.la source
touch
j'avais la possibilité de créer des fichiers exécutables, c'est vraiment ce que je recherche. Ensuite,umask
pourrait être utilisé pour adapter les détails. Malheureusement , il n'y a aucun moyen avecumask
ettouch
de créer des exécutables.touch
suivi dechmod +x
.J'ai un script bash dans mon répertoire personnel
/home/anthony/touchmod.sh
contenant:Donc, si je dois créer
readme.txt
avec 644 autorisations, je peux taper:la source