The touch utility sets the modification and access times of files to the
current time of day. If the file doesn't exist, it is created with
default permissions.
Em geral, criar qualquer arquivo 1 regular no Linux envolve open(2), openat(2)ecreat(2) chamadas de sistema (e especificamente com O_CREATsinalizadores). Isso significa que se você chamar qualquer utilitário de linha de comando que faça essas chamadas de sistema, poderá criar um novo arquivo vazio.
Mais comumente, o novo nome de arquivo é criado com algo assim:
touch /tmp/new_file
: > /tmp/new_file
true > /tmp/new_file
> /tmp/new_file(somente shell bash)
touch é um utilitário autônomo. Sua finalidade original é atualizar o tempo de acesso e modificação de um arquivo, porém se o arquivo não existir - ele será criado. Observe também que um nome de arquivo -é tratado especialmente, portanto, se você quiser criar um arquivo chamado literalmente -, precisará colocá-lo entre aspas simples ou duplas.
Por outro lado, >é um operador de redirecionamento de shell para stdout stream . O >operador chama especificamente a chamada do openat()sistema com O_WRONLY|O_CREAT|O_TRUNC sinalizadores. Isso significa que, se o nome do arquivo não existir - ele será criado e, se existir - os dados serão truncados (e, portanto, desaparecerão, portanto, >devem ser usados com cuidado). Na maioria dos shells hoje em dia trueou :é um built-in , fazer isso : > /tmp/new_fileserá mais eficiente, embora marginalmente comparado ao touch /tmp/new_file.
Mas é claro que não para por aí. Como mencionado, qualquer coisa que possa executar open(), openat()e create()syscalls criará um arquivo. Assim, podemos fazer:
true|dd of=/tmp/newfile
truncate --size 0 /tmp/new_filename.txt
cp /dev/null /tmp/null_file
true|tee /tmp/some_other_file
mktempou tempfile(para criar arquivos temporários que não precisam existir entre as reinicializações!)
Obviamente, todos os utilitários mencionados acima não criam arquivos exclusivamente. Mas eles realizam o syscall necessário e isso nos permite adaptar os comandos.
É claro que, no nível de programação ou script, podemos querer criar um arquivo também, especialmente para fins de eficiência (porque chamar comandos externos, como touchde um script Perl ou Python, exigirá recursos adicionais).
Python one-liner:
$ python -c 'import sys,os;f=sys.argv[1];os.utime(f,None) if os.path.exists(f) else open(f,"a").close' myfile.txt
1 Outros tipos de arquivos, como hard/soft links, caracteres ou dispositivos especiais de bloco, diretório, pipes nomeados ou soquetes requerem syscalls totalmente diferentes.
Use o
touch
comando:Exemplo:
Também criará um arquivo vazio. Se o arquivo já existir, ele será truncado (esvaziado). Para manter o conteúdo do arquivo, use
>>
para anexar como em:Mesmo que o arquivo exista, o conteúdo permanecerá intocado.
Edit : Se você não tiver nenhum conteúdo para digitar, este é mais rápido:
Observação.
:
é o comando aqui. Não faz parte do prompt.a maneira exata também há outra maneira
A diferença é que file1.ext terá zero bytes e file2.ext será um byte. Você pode verificar isso por
Usando
vim
o editor, você também pode criar um arquivo vazio.Em seguida, salve
O comando
cria um arquivo vazio, se sua versão
echo
suportar a opção -n.Ou você poderia usar
printf
Em geral, criar qualquer arquivo 1 regular no Linux envolve
open(2)
,openat(2)
ecreat(2)
chamadas de sistema (e especificamente comO_CREAT
sinalizadores). Isso significa que se você chamar qualquer utilitário de linha de comando que faça essas chamadas de sistema, poderá criar um novo arquivo vazio.Mais comumente, o novo nome de arquivo é criado com algo assim:
touch /tmp/new_file
: > /tmp/new_file
true > /tmp/new_file
> /tmp/new_file
(somente shell bash)touch é um utilitário autônomo. Sua finalidade original é atualizar o tempo de acesso e modificação de um arquivo, porém se o arquivo não existir - ele será criado. Observe também que um nome de arquivo
-
é tratado especialmente, portanto, se você quiser criar um arquivo chamado literalmente-
, precisará colocá-lo entre aspas simples ou duplas.Por outro lado,
>
é um operador de redirecionamento de shell para stdout stream . O>
operador chama especificamente a chamada doopenat()
sistema comO_WRONLY|O_CREAT|O_TRUNC
sinalizadores. Isso significa que, se o nome do arquivo não existir - ele será criado e, se existir - os dados serão truncados (e, portanto, desaparecerão, portanto,>
devem ser usados com cuidado). Na maioria dos shells hoje em diatrue
ou:
é um built-in , fazer isso: > /tmp/new_file
será mais eficiente, embora marginalmente comparado aotouch /tmp/new_file
.Mas é claro que não para por aí. Como mencionado, qualquer coisa que possa executar
open()
,openat()
ecreate()
syscalls criará um arquivo. Assim, podemos fazer:true|dd of=/tmp/newfile
truncate --size 0 /tmp/new_filename.txt
cp /dev/null /tmp/null_file
true|tee /tmp/some_other_file
mktemp
outempfile
(para criar arquivos temporários que não precisam existir entre as reinicializações!)Obviamente, todos os utilitários mencionados acima não criam arquivos exclusivamente. Mas eles realizam o syscall necessário e isso nos permite adaptar os comandos.
É claro que, no nível de programação ou script, podemos querer criar um arquivo também, especialmente para fins de eficiência (porque chamar comandos externos, como
touch
de um script Perl ou Python, exigirá recursos adicionais).Python one-liner:
Podemos torná-lo mais curto com isso:
E em Perl:
1 Outros tipos de arquivos, como hard/soft links, caracteres ou dispositivos especiais de bloco, diretório, pipes nomeados ou soquetes requerem syscalls totalmente diferentes.