15 dicas rápidas para o terminal

Dicas curtas publicadas no meu perfil do Twitter em um formato que privilegia somente o exemplo de uso.

Alguns exemplos estão duplicados com um artigo anterior.

  1. Servindo arquivos locais via HTTP
server $ cat hello.txt
Hello World!
server $ python -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...

client $ curl http://server.local:8000/hello.txt
Hello World!
  1. Finalizando uma sessão ssh congelada
local $ man ssh  # search for 'ESCAPE CHARACTERS'
local $ ssh remote
remote $ # frozen ssh session...
~.<ENTER>

local $ # use ~<SPACE>.<ENTER> in keyboards with deadkey accents
  1. Formatando arquivos JSON
$ cat msg.json
{"meta": {"fmt": "msg", "type": "json"}, "files": ["m1.json"]}
$ cat msg.json | python -m json.tool --indent 2
{
  "meta": {
    "fmt": "msg",
    "type": "json"
  },
  "files": [
    "m1.json"
  ]
}
$ cat msg.json | jq  # syntax highlight
  1. Truncando arquivos
$ # bash
$ echo "Hello World!" > hello.txt
$ du hello.txt
8 hello.txt
$ > hello.txt
$ du hello.txt
0 hello.txt

$ # bash
$ du new
du: new: No such file or directory
$ > new
$ du new
0 new
$ ./highlander
Who wants to live forever?
Who wants to live forever?
^C
^C
^C
^\
Quit: 3
$ # CTRL-C sends a SIGINT, and CTRL-\ (or CTRL-4) sends a SIGQUIT to the process
$ stty -a | sed -n '/^cchars/,$p'  # print all control characters
  1. Recuperando terminal quebrado
$ cat ./bin_file
����@��
       �@�0����X
� H__PAGEZERO__TEXT@@	__text__TEXT�7�7�__stubs__TEXT�;T��__stub_
^C
^C
�@�0����X $ # broken terminal (you aren't seeing this message :P)
$ reset
$ # restored terminal
  1. Abrindo o navegador em uma página via linha de comando
$ python -m webbrowser -t example.com  # open new tab browser at example.com
$ python -m webbrowser -n example.com  # open new window browser at example.com
  1. Copiando árvores de diretórios mais rapidamente
$ time cp -r ./src/* ./target/
real0m2.193s
$ rm -rf ./target/*
$ time ((cd ./src/; tar cf - .) | tar xfp -)
real0m1.920s
  1. Tecla de atalho para limpar o terminal
$ # lots of things on terminal
$ clear
$ # ... and again...
linux $ ^L  # CTRL-L on Linux -> clear terminal
macos $ CMD-K  # COMMAND-K on macOS -> clear terminal
  1. Apagando muitos arquivos
dir1 $ rm *
-bash: /bin/rm: Argument list too long
dir1 $ find . -type f -exec rm {} \;
dir1 $ cd ../dir2
dir2 $ rm *
-bash: /bin/rm: Argument list too long
dir2 $  find . -type f | while read f; do rm "$f"; done
  1. Duplicando a saída de um comando
$ find / > files.log 2> /dev/null
???
^C
$ find / | tee files.log 2> /dev/null
... all files ...
^C
$ cat files.log
... all files again ...
  1. Lidando com arquivos com nome iniciado por -
$ ls
-z
$ # what is inside of '-z' file?
$ cat -z
cat: illegal option -- z
$ cat '-z'
cat: illegal option -- z
$ cat "-z"
cat: illegal option -- z
$ cat -- -z
Hi! I'm the '-z' file.
$ cat ./-z
Hi! I'm the '-z' file.
  1. Localizando o path de um determinado utilitário
$ python
Python [version]...
>>> ^D
$ which python  # which python am I running by default?
/.../pyenv/shims/python
  1. Alterando o título na janela do terminal
$ echo -ne "\e]0;My custom terminal title\a"
  1. Voltando para o diretório anterior
$  find .
.
./A
./B

$ cd A
./A $ cd ../B

./B $ cd -
/.../A

./A $

Bom dia osantana,

Obrigado por compartilhar as dicas!

Acha que valeria a pena criar uma pequena descrição para cada uma das dicas?

A ideia é que a interação no 'terminal' descrevesse o que acontece. Mas vou tentar acrescentar uma descrição textual para facilitar.
Feito. Veja se ficou melhor :)
Seria interessanete mesmo, no caso sem testar não saberia para que serve.

Utilizo muito o grep, history e less.