touch
cria um novo arquivo vazio se o arquivo não existir, porque foi para isso que ele foi projetado. O utilitário precisa conter código para lidar com esse caso especificamente. O utilitário apareceu no Unix V7 ; seu manual descreveu assim:
touch - data da atualização da última modificação de um arquivo
touch
tenta definir a data modificada de cada arquivo . Isso é feito lendo um caractere do arquivo e escrevendo-o novamente. Se um ** arquivo * não existir, será feita uma tentativa de criá-lo, a menos que a -c
opção seja especificada.
(Não sei o que touch
fez se o arquivo estivesse vazio. A chamada do sistema subjacente veio mais tarde.)
Não sei ao certo por que touch
foi projetado para fazer o arquivo existir, mas suspeito que seja por causa disso make
. Por que você deseja definir o horário de modificação de um arquivo para o horário atual? Há casos em que pode ser útil definir o horário da modificação para um horário específico, mas essa capacidade veio depois, o original touch
só pode definir o horário da modificação para o horário atual. Um motivo para fazer isso é executar novamente uma make
regra que depende do arquivo.
Ou seja, suponha que você tenha um arquivo foo
e um makefile que declara um comando para gerar bar
a partir foo
. Quando você digita make bar
, o comando é executado e bar
criado. Se bar
existe e é mais recente que foo
, make bar
não faz nada, porque make
assume que bar
já foi gerado. No entanto, se bar
for mais antigo que foo
, make pensa que bar
não está atualizado e precisa ser regenerado.
Mas e se as regras a serem geradas bar
mudarem? Então você tem duas opções:
rm bar; make bar
touch foo; make bar
Você precisaria foo
existir para gerar bar
, caso contrário, o comando normalmente não funcionaria.
A terminologia “touch” também estava presente no make
utilitário: make -t bar
apenas fingiria executar os comandos, ou seja, definiria o tempo de modificação bar
para o tempo atual sem realmente executar o comando para gerar bar
(você faria isso se achasse que as alterações foo
não devem afetar bar
). O touch
utilitário era, portanto, uma versão autônoma do make -t
recurso.
touch /forcefsck
para criar um arquivo vazio chamado/forcefsck
para forçar os sistemas de arquivos a serem verificados quanto a erros na próxima reinicialização. O arquivo em si não precisa conter nada, apenas precisa existir. Semtouch
, eu precisaria usarvi
ounano
salvar um arquivo em branco. Muito mais rápido de usartouch
.