Ao criar diretórios, mkdir -m <mode> <dir>
prevê a criação de um ou mais diretórios com o conjunto de modo / permissões fornecido (atomicamente).
Existe um equivalente para criar arquivos na linha de comando?
Algo semelhante a:
open("file", O_WRONLY | O_APPEND | O_CREAT, 0777);
Está usando touch
seguido por uma chmod
minha única opção aqui?
Edit: Depois de experimentar a sugestão de teppic para uso install
, eu corri-lo através strace
de ver o quão perto atômica que era. A resposta é não muito:
$ 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
...
Ainda assim, é um único comando shell e um que eu não conhecia antes.
shell
permissions
files
quorniano
fonte
fonte
install
install
, portanto,-m 755
não é necessário.touch
sempre cria o arquivo se ele não existir, sempre segue links simbólicos e sempre torna o arquivo não executável. Você pode decidir os bits de leitura e gravação através do umask .A criação atômica de arquivos "seguros" (em particular com
O_NOFOLLOW
) não é possível com as ferramentas tradicionais de shell. Você pode usarsysopen
em perl. Se você possui omktemp
utilitário inspirado no BSD , ele cria um arquivo atomicamente comO_NOFOLLOW
; você precisará ligarchmod
depois se o modo padrão 600 não for o correto.fonte
touch
tivesse a opção de criar arquivos executáveis, é isso que realmente procuro. Entãoumask
poderia ser usado para personalizar os detalhes. Infelizmente não há nenhuma maneira comumask
etouch
para criar arquivos executáveis.touch
seguido porchmod +x
.Eu tenho um script bash no meu diretório pessoal que
/home/anthony/touchmod.sh
contém:Portanto, se eu precisar criar
readme.txt
com 644 permissões, digite:fonte