Formas de pagamento Abuse

Comando Time no Linux

18.03.2022, 01:39

Por vezes, quando se trabalha com o terminal Linux, é necessário saber a hora de execução de certos comandos, por exemplo, para localizar problemas. Existe um utilitário chamado time para este fim. Vamos dizer-lhe como funciona o comando time do Linux e qual é a sua sintaxe. Em seguida, passaremos à descrição das opções disponíveis. E, no final, mencionaremos alguns cenários populares de utilização.

Sintaxe e opções

O utilitário executa um comando definido pelo utilizador e, em seguida, apresenta informações sobre o seu tempo de execução. A sua sintaxe é bastante conveniente. Primeiro, é necessário especificar as opções para o tempo, depois o comando a executar e, por fim, os argumentos para o mesmo:

$ time [options] command_to_execute [arguments]

Vamos considerar a lista de opções disponíveis:

  • -o, --output - guarda os dados no ficheiro selecionado em vez da saída padrão no terminal. Neste caso, os dados antigos no ficheiro serão substituídos.
  • -a, --append - adiciona nova informação ao ficheiro em vez de substituir a antiga. A opção só é útil em combinação com -o.
  • -f, --format - seleciona um formato de saída específico. Detalhes sobre a formatação são descritos na próxima secção deste artigo.
  • -p, --profitably - usa um formato de saída de dados para estar em conformidade com o padrão POSIX 1003.2.
  • -v, --verbose - produz informação detalhada sobre a execução do programa.
  • -V, --version - mostra a versão do utilitário de tempo.

Esta lista contém apenas as opções básicas. Pode obter informações detalhadas com o comando:

$ man time

Opções de formatação da saída

Por defeito , o time pode produzir informação num formato que não é confortável para a leitura,

É desejável definir opções de formatação de saída, que serão discutidas agora. Há três delas no total. Vamos tomar o comando apt-get update como exemplo.

A opção -v é utilizada para produzir informação detalhada:

$ sudo time -v apt-get update

A opção -p é necessária para produzir dados num formato compatível com POSIX 1003.2:

$ sudo time -p apt-get update

A linha de dados de formatação normalmente inclui especificadores de recursos e texto simples. O sinal % indica que o caractere seguinte deve ser tratado como um especificador de recurso.

O sinal é utilizado para especificar o carácter delimitador. Existem três opções disponíveis: t - tabulação, n - nova linha, \ - barra invertida. Se especificar qualquer outro carácter depois de , o terminal mostrará um ponto de interrogação (?), o que indica um erro de introdução.

O resto do texto na cadeia de formato é completamente copiado para o campo de saída. Neste caso, o time começa sempre a produzir dados a partir de uma nova linha após a informação sobre a execução do próprio comando.

Vamos considerar os especificadores de recursos disponíveis:

  • % - literal %. Ou seja, para emitir um sinal de percentagem, deve especificar %% no comando.
  • C - nome do comando e argumentos utilizados.
  • D - tamanho médio da área de dados não dividida. É apresentado em kilobytes.
  • E - tempo real de execução do comando no formato de hora habitual. É apresentado como [Hours:]<imutes:segundos.
  • N - número de erros maiores ou de E/S que ocorreram durante a execução do processo.
  • I - número de acessos ao sistema de ficheiros.
  • K - valor médio da memória usada para código(texto), dados inicializados(dados) epilha (pilha). É apresentado em kilobytes.
  • M - tamanho máximo do conjunto residente durante a execução do processo em kilobytes.
  • O - número de saídas do sistema de ficheiros.
  • P - percentagem de carga da CPU (unidade central de processamento).
  • R - número de erros menores.
  • S - tempo em segundos durante o qual a CPU foi usada pelo sistema em nome do processo no modo supervisor(modokernel).
  • U - tempo em segundos durante o qual a CPU foi utilizada pelo processo diretamente no modode utilizador.
  • W - quantas vezes o processo foi descarregado da RAM.
  • Z - tamanho da página do sistema. Este valor é uma constante, mas varia entre sistemas.
  • c - número de trocas involuntárias de contexto durante a execução do processo.
  • e - tempo real de execução do comando no formato de hora habitual. É apresentado em segundos.
  • k - número de sinais que chegaram ao processo.
  • p - tamanho médio da pilha não partilhada do processo, em kilobytes.
  • r - número de mensagens de socket recebidas.
  • s - número de mensagens de socket enviadas.
  • t - tamanho médio do conjunto de residentes do processo, em kilobytes.
  • w - número de trocas voluntárias de contexto durante a execução do processo
  • x - código de retorno do comando.

Estes foram todos os especificadores de recursos usados ao escolher a formatação para o tempo. Passemos agora aos cenários de utilização do comando.

Tempo de execução do comando LINUX

Vejamos três exemplos básicos que são bastante utilizados: saída para o terminal, saída para um ficheiro separado e saída com formatação.

Saída do tempo de execução para o terminal

Como exemplo, vamos utilizar o comando sleep, que faz uma pausa durante um determinado período de tempo. Será um exemplo muito claro, porque o tempo de pausa coincidirá com o tempo de execução do comando no tempo:

$ time sleep 3

O tempo é escrito imediatamente em três colunas. Vamos analisar cada uma delas:

real - o tempo total desde o início da execução do processo até a sua conclusão.

user - o tempo durante o qual o processo foi executado em modode utilizador.

sys - tempo durante o qual o processo esteve envolvido no modo supervisor(modokernel).

O próximo cenário útil é produzir o tempo que leva para carregar o cabeçalho de uma página da Web por meio do utilitário curl. Tomemos o nosso sítio Web como exemplo:

$ time curl -I https://losst.ru

Devemos mencionar uma situação em que a execução do comando coloca a janela do terminal num modo diferente, como quando executa o editor nano para modificar o ficheiro /home/root-user/script.txt:

$ time nano /home/root-user/scripts/main_script.txt

Depois de o editor terminar, verá o tempo total que trabalhou no ficheiro.

Agora já sabe como ver o tempo de execução de um comando Linux.

Saída do ficheiro

As informações sobre os resultados do comando time podem ser salvas em um arquivo separado usando a opção-o. Nesse caso, elas não serão exibidas na janela do terminal. Tomemos o exemplo de extrair o conteúdo do arquivo ~/data/data.tar.gz usando o utilitário tar. Vamos guardar a informação sobre o tempo de execução num novo ficheiro ~/data/data_data_time.txt. Também adicionaremos a opção-v ao comando para obter informações detalhadas:

$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data

O ficheiro terá o seguinte conteúdo.

Se utilizar a opção -o, lembre-se que esta substitui a informação antiga no ficheiro de saída pela nova informação. Isto é aplicável quando se criam novos ficheiros, mas não é adequado para o registo. Com a opção opcional -a, a substituição do conteúdo é substituída pela adição de novas informações:

$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data

Saída com formatação

A opção original de formatação de dados não é adequada em todos os casos. Como exemplo, vamos utilizar o comando anteriormente utilizado para extrair um arquivo, mas não vamos guardar os dados num ficheiro. Ao executá-lo, estamos interessados em:

  • Informações sobre o próprio comando e as opções dadas - este é o especificador%C.
  • Carga da CPU - especificador%P.
  • Tempo total de execução em segundos - especificador%e.

Para uma perceção confortável, cada item será apresentado numa linha separada utilizando o separador n. Ao mesmo tempo, todos eles serão assinados de forma compreensível.

Eis o aspeto da versão final do comando:

sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data

Todo o texto, exceto os caracteres a seguir a %, é totalmente apresentado no terminal. Esta é uma forma conveniente de marcar