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.
- 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!
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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 ...
- 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.
- Localizando o path de um determinado utilitário
$ python
Python [version]...
>>> ^D
$ which python # which python am I running by default?
/.../pyenv/shims/python
- Alterando o título na janela do terminal
$ echo -ne "\e]0;My custom terminal title\a"
- Voltando para o diretório anterior
$ find .
.
./A
./B
$ cd A
./A $ cd ../B
./B $ cd -
/.../A
./A $