Qual é a diferença entre o arquivo de toque e o arquivo?

16

Eu sou um novato no Linux e gostaria de saber se > e touch têm o mesmo efeito. Quero dizer, os dois comandos a seguir têm o mesmo efeito?:

$ > file.txt

$ touch file.txt

Nesse caso, seria ótimo saber que posso digitar "> file.txt 'para criar novos arquivos.

    
por lmiguelvargasf 30.09.2016 / 04:22

3 respostas

24

Tanto touch como > criarão um novo arquivo se ele não existir. Como os seguintes comandos de terminal mostram quando você touch um arquivo existente, o acesso / hora da última modificação é atualizado. Mas se você > para um arquivo existente for truncado e a hora da última modificação for atualizada (o tempo de acesso não é). Observe que > não exclui / desvincula o arquivo. O inode permanece o mesmo - e é por isso que > / ou truncate são comumente usados para limpar arquivos de log, mesmo com um identificador de arquivo aberto.

rick@dell:~$ > EmptyFile

rick@dell:~$ touch EmptyFile2

rick@dell:~$ ls Empty*
EmptyFile  EmptyFile2

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

rick@dell:~$ echo Hello > EmptyFile

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

rick@dell:~$ > EmptyFile

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

rick@dell:~$ echo Hello > EmptyFile

rick@dell:~$ touch EmptyFile

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:32 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

Como mencionado nos comentários, touch é um comando externo e só opera em arquivos. > é um recurso interno do shell que serve a muitos propósitos diferentes. Normalmente, você o veria como cat source.fil > target.fil .

Um formulário longo para esvaziar um arquivo seria:

cat /dev/null > emptyme.fil

Usar > emptme.fil realiza a mesma coisa em um formato compacto de redirecionar nada para o arquivo.

    
por WinEunuuchs2Unix 30.09.2016 / 04:53
14

Existe uma diferença substancial entre os dois. Touch é um comando usado para registrar o tempo em um arquivo. O símbolo > é um redirecionador de saída padrão.

Uso dos dois explicados

Uso do toque

Se o arquivo não existir, ele criará o arquivo.

O toque é comumente usado para criar sinalizadores. Por exemplo, se você quiser encontrar todos os arquivos entre duas vezes no seu sistema, você pode usar esta sequência de comandos:

$ touch -t 201609292200 starttime 
$ touch -t 201609292300 endtime

Isso criará os seguintes arquivos (ou alterará o registro de data e hora, se existirem):

-rw-rw-r-- 1 ljames ljames 0 Sep 29 23:00 endtime
-rw-rw-r-- 1 ljames ljames 0 Sep 29 22:00 starttime

Agora você pode usar o comando find para exibir ou processar todos os arquivos que foram modificados nessa hora (horário entre esses dois registros de data e hora, ou seja, entre 22h e 23h de 29 de setembro de 2016).

$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n"

Esta é uma saída parcial do comando find acima:

-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/[email protected]_groups.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/[email protected]
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/address_book_backups/abook.mab.bak
-rw-rw-r-- 09/29 23:00 00 /home/users/l/j/ljames/endtime
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/Temp
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi/1.337.0_0

Uso do redirecionamento de saída

O símbolo de redirecionamento redirecionará a saída padrão para o arquivo especificado. Dependendo de suas configurações de clobber / noclobber, se houver falha. O Noclobber só criará o arquivo se ele não existir.

Existem várias versões da saída de redirecionamento que incluem:

>   - Redirect standard output. Create or overwrite the existing file.
>>  - Redirect append.  Create or append to existing file.
>&  - Redirect both standard output and standard error.
>>& - Redirect/Append both standard output and standard error

Poderíamos usar nosso comando find acima para redirecionar o conteúdo de todos os arquivos criados dentro da hora especificada para um arquivo que poderíamos registrar e estudar mais tarde:

$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n" > ~/files.log
    
por L. D. James 30.09.2016 / 06:24
9

> é o operador de redirecionamento de saída do shell, usado para redirecionar o STDOUT do (s) comando (s) anterior (es) para o descritor de arquivo mencionado após > . Se o arquivo estiver presente, o conteúdo será truncado, como o arquivo com open(2) -ed com O_TRUNC flag e, se o arquivo não existir, ele será criado.

Importante notar que, este operador de redirecionamento será manipulado pelo shell antes do comando anterior ser executado, portanto, isso não depende de nenhum comando e é tratado pelo próprio shell.

Observe que alguns shells (por exemplo, zsh ) se comportarão de maneira diferente com o redirecionamento vazio, como:

 >file.txt

Uma solução típica é adicionar o comando : ( true ) no-op:

 : >file.txt

Tradicionalmente, o objetivo principal de touch é alterar o registro de data e hora de um arquivo, não criar um arquivo.

touch cria um arquivo, somente quando o (s) arquivo (s) mencionado (s) no argumento não existe, caso contrário ele altera a hora da modificação do arquivo para o registro de data e hora atual. Você também pode alterar o tempo de acesso e o tempo de criação de inode usando touch .

    
por heemayl 30.09.2016 / 12:06