Comandos linux
Introdução: Man
O comando man ([man]ual), nos permite acessar uma pequena documentação acerca do comando especificado.
Ex: man <comando> -> man ls
Introdução 2: tá bom.. longo demais, nem li :)
Ok, use o comando para instalar o tldr (Too long, didn’t read):
# npm install -g tldr
-g (global) -> instala o tldr para todos os diretórios, não só para o projeto atual.
Esse programa permite você acessar uma manual bem mais objetivo e sucinto acerca dos comandos linux, com as recomendações mais populares da comunidade e comandos mais utilizados no dia-a-dia.
Ex: tldr <comando> -> tdlr ls
Tá, mas o que tem aqui?: $ ls
O comando ls permite [l]i[s]tar todos os diretórios e arquivos filhos do diretório pai que você está no momento, ou seja, mostra todos os seus arquivos irmãos.
Ex: ls <options> <directory> -> ls -la -> ls -la /bin
-l (long) -> mostra os detalhes
-a (all) -> mostra tudo, mesmo os que começam com “.”, que no linux indica um arquivo escondido
Exemplo de STDOUT do ls
drwxrwxrwx 1 llara llara 512 Jun 27 21:08 Desktop
drwxrwxrwx -> permissões do arquivo (xxx-yyy-zzz)
1 -> Número de atalhos para o arquivo
llara -> Dono do arquivo
llara -> Grupo do arquivo
512 -> Tamanho do arquivo
Jun 27 21:08 -> Data de criação
Desktop -> Nome do arquivo
Eu não quero estar aqui, mude o diretório: $ cd
Change directory (cd), é um comando que permite tornar um determinado diretório o seu atual diretório de trabalho.
Ex: cd home (vai para a pasta irmã home)
Ex: cd . (vai para a pasta atual)
Ex: cd .. (vai para a pasta pai)
Ex: cd / (Vai para o diretório raiz)
Ex: cd ~ (Vai para a pasta home)
Peraí.. aonde eu to ?: $ pdw
Print Working Directory (pwd), basicamente nos mostra em que parte da árvore de arquivos estamos, mostrando o diretório pai, avô, bisavô etc.
Ex: ~$ pwd
retorna: /home/<nomeDeUsuário>
Crie um mundo onde você queira viver, ou ao menos o lugar aonde esse mundo será construído, alguma coisa assim… : $ mkdir
Make Directory (mkdir), é um comando que permite criar diretórios.
Ex: mkdir <nomeDoDiretório> -> mkdir ovo
Ex: mkdir -p paiDoOvo/ovo
-p (parents) -> permite criar um estrutura de pastas com pais e filhos.
-v (verbose) -> opção normalmente utilizada para permitir que o comando exiba verbalmente o que está fazendo.
Hoje teremos revolução, destrua os diretórios que se opoem ao regime: $ rmdir
Remove Directory (rmdir), remove o diretório apontado pelo comando.
Ex: rmdir <nomeDoDiretório> -> rmdir ovo
Ex: rmdir -rf /bin (Nem tenta, se der certo vai ser a pior coisa que você pode fazer)
-r (recursive) -> remove recursivamente todos os diretórios dentro do diretório apontado.
-f (force) -> remove a força sem perguntar,
(perigoso), #rm -rf é muito perigoso pois pode destruir em milésimos de segundos todas as suas fotos de família, e para recuperar isso é um caso pois não existe lata de lixo no terminal de comando.
Vai pra lá, Vai pra lá: $ mv
Move (mv), move um arquivo.
Ex: mv <loop(arquivo/diretório>) <nomeDoDestino> -> mv ovo.js /ovos
Ex: mv ovo.js ovo.css ovo.html /ovo
(Move todos os arquivos para o último argumento, o diretório)
Aceita: — force e — verbose
-n (no-clobber) -> não sobrescreve arquivos
-i (interactive) -> pede por confirmação antes de sobrescrever arquivos, segurança.
Funcionalidade especial, mover arquivos para o mesmo diretório tem a função de renomear eles
Ex: mv ovo.js ovo.css (Renomeia ovo.js para ovo.css)
Vish, tem dois: $ cp
Copy(cp), copia arquivos para o diretório especificado.
Ex: cp <loop(arquivos)> <diretório> -> cp ovo /ovos (copia ovo para ./ovos)
Ex: cp ovo1 ovo2 ovo3 /ovos (copia ovo1,ovo2 e ovo3 para ./ovos)
Ex: cp ovo ovoCopía (faz uma cópia de ovo com o ovo de ovoCópia)
Dica: o nome da cópia pode ou não ser especificado no diretório destino.
Aceita: — verbose, — recursive e — interactive
Deixe uma impressão digital na data e hora do arquivo (bizarro né? um dos comandos mais famosos não é usado para fazer o que originalmente foi feito para fazer, mas tá bom o título tá grande demais já): $ touch
Touch (touch), é um comando utilizado para alterar a data e a hora de acesso de determinado arquivo, tipo um funcionário fantasma batendo ponto com sua impressão digital e depois voltando para a casa com dinheiro de imposto na mão fazer churrasco com óculos de sol na cara tmj vlw.
Ex: touch <nomeDoArquivo> -> touch ovo.txt
(cria o arquivo ovo.txt e define sua data para a data atual.)
Ex: touch -t yyyymmddhhmm.ss ovo.txt (muda a data do arquivo)
Obs: De longe o comando mais mal interpretado de todo o linux, mas fazer oque né, o comando de mover é usado para mudar o nome do arquivo :0, se bem que mover e mudar o nome do arquivo são quase a mesma coisa pois apenas alteram o cabeçalho do arquivo, mas aí é um papo de filesystem…
Acha isso aqui para mim sobrinho: $ find
Find (find), nos dá a possibilidade de achar arquivos de maneira rápida.
Ex: find <loop(nomeDosDiretórios)> <argumentos> -> find . -name ‘ovo.js’
Opa, esqueci de falar mas esse tal de loop() que eu venho colocando nos exemplos é só um pseudocódigo pra indicar que múltiplos argumentos podem ser passados, nesse caso, múltiplos diretórios.
Ex: find /mnt /etc -name “*.js” acha todos os arquivos que terminam em .js que existem em /mnt e /etc.
Detalhe: O find aceita múltiplos diretórios para um nome, diferente dos outros comandos que aceitam múltiplos nomes para um diretório cp e mv por exemplo.
-name (nome) <nomeDoArquivo/Expressão> (Obrigatório)
-type <tipo> (tipo) (Especifica se você quer d(diretório) ou f(arquivo))
-type f -empty (vazio) (Acha apenas arquivos vazios)
-delete (deleta) (Deleta os arquivos que achou)
-size <+/- xy> (tamanho) (Acha arquivos acima ou abaixo de um determinado tamanho)
+(maior que), — (menor que)
Você não tem programas na sua área de trabalho, você tem atalhos: $ ln
Link (ln), permite criar hard/soft links que apontam para um diretório, caso o link seja modificado, o arquivo original também será.
HARD LINK -> Aponta para os endereços na memória (inode) onde o arquivo está guardado.
obs: Arquivos linux são compostos de “head e body”.
O head guarda metadados e o caminho do arquivo.
O body é o arquivo em si jogado em algum canto do HD, o hardlink aponta para o body.
Por causa disso, é impossível ter um hardlink apontando para pastas, pois pastas não possuem body, elas existem apenas no head dos arquivos.
Também por causa disso, quando o arquivo original for deletado, o hard link permanecerá intacto, pois funciona como um ponteiro para endereços de memória onde está o arquivo em si.
Detalhe: arquivos raramente são deletados de verdade, o que acontece é uma destruição de cabeçalho, arquivos sem cabeçalho são bytes jogados aleatoriamente no HD, prontos para terem seu valor atribuído por outro arquivo.
Ou seja, hard links só podem apontar para arquivos da mesma partição, pois o fornecido é apenas o conjunto de endereços de memória e HDS concorrentes possuem endereços de memória iguais.
E por fim, hard links são indistinguíveis do arquivo original, pois o arquivo original também é um hard link.
obs: Quando se cria um arquivo, duas coisas são criadas:
O inode, ou seja, o conteúdo do arquivo.
Um hard link para o inode, que chamamos de o arquivo em si.
E por fim de verdade agora, criar um hard link nada mais é do que manualmente fazer o que o seu sistema já faz por padrão ao criar um arquivo.
ufa.. e por último
SOFT LINK -> É um arquivo contendo o diretório do arquivo apontado.
Ou seja, o soft link pode apontar para qualquer coisa, pois o caminho, diferente do inode, possui a especificação de em qual disco o arquivo está.
Ex: <disco>/home/llara ou, no windows, C:\\Users\pedro\
E por causa disso, como o soft link é um link para um link que possui o endereço do inode, caso o arquivo original (hard link) seja deletado, o que resta para o soft link é o caminho para um hard link que não existe mais, tornando o soft link inacessível.
Ou seja, o soft link não sabe onde está o arquivo, ele conhece alguém que sabe. Se esse alguém desaparecer, ele não sabe mais.
Ou também, o soft link pode apontar para um diretório, sem um hard link específico.
Ex: ln <nomeDoArquivo> <nomeDoHardLink>
Ex: ln -s <nomeDoArquivo/Diretório> <nomeDoSoftLink>
Aceita: -f
Obs: os atalhos do windows são similares aos soft links, pois quando você deleta o .exe original, o atalho morre. Soft links possuem @ no final, só por curiosidade, e são coloridos diferente.
Comprime e descomprime arquivo (não arquivos, arquivo): $ gzip
GNU Zip (gzip), comprime o arquivo, substituindo-o pela versão comprimida.
Ex: gzip <arquivo> -> gzip ovo.jpg
-c (stdout) — Standard output, envia o conteúdo comprimido para a saída padrão. Pode ser redirecionado para um arquivo ou outro comando com o símbolo >
Ex: gzip <arquivo> -c > <destino.gz>
-k (keep) — Mantém o arquivo original, fazendo o mesmo que o comando de cima.
-l (list) — Para cada arquivo comprimido, exiba informações
-<número> () — índica o nível de compressão de 1–9, padrão é 6
-r (recursive) — Não para até compactar todos os arquivos da pasta
-v (verbose) — Mostra o andamento do processo em %
-d (decompress) — Descomprime o arquivo
Só descomprime arquivos: $ gunzip
O nome é bem intuitivo
Ex: gunzip <arquivo>
Aglomera múltiplos arquivoS: $ tar
Tape archive (tar), é usado para juntar múltiplos arquivos em um só.
Ex: tar -cf <nomeDoTar> <loop(arquivos)>
-cf (create file) — Cria um arquivo tar contendo os arquivos subsequentes
-czf (create gzip file) — Cria um arquivo tar contendo os arquivos subsequentes comprimidos em gzip.
-xf (extract file) — Extrai o conteúdo de um arquivo .tar ou .tar.gz
-tfv (list files verbose) — Lista o conteúdo do arquivo tar
Isso, isso.. ALIÁS isso aqui: $ alias
Alias (apelido), serve para criar um apelido para um comando com suas determinadas especificações e argumentos.
Ex: alias comprime = ’tar czf’ -> comprime ovo.tar.gz ovo1 ovo2 ovo3 ovo4
Essas alterações são temporárias, para fazê-las eternas adicione o comando no ~/.bashrc
Algumas pessoas acham que é catch, mas não é: $ cat
Cat([C]onc[at]enate) — é um comando usado para concatenar dois ou mais arquivos juntos, caso não seja explicitado um stdout, ele jogará para o terminal, caso apenas um arquivo seja especificado, ele ainda jogará o stdout para o terminal mesmo sem outro para concatenar, ou seja:
Ex: cat <loop(arquivo)> -> cat ovo.txt
$ conteúdo do ovo
Cat é usado para ver o que tem dentro dos arquivos. Usando o operador > pode-se jogar o resultado do stdout para o arquivo especificado, com o operador >> joga-se o stdout para o final do arquivo especificado ou seja:
> — apaga o conteúdo do arquivo original e o substitui pelo novo.
>> — não apaga, apenas coloca no final
| — pega o stdout do comando anterior e joga para o stdin do próximo
-n (number) — Mostra o número das linha
Antes tinha o mais, agora tem o menos, more is less: $ less
Less(menos), filho do comando more, o less abre um arquivo grande e permite que você navegue intuitivamente por ele usando as setas do teclado.
Ex: less <nomeDoArquivo>
v (vim) — abre o editor padrão do sistema para editar o arquivo
q (quit) — sai do arquivo
f (follow) — segue as mudanças do arquivo em tempo real
Só a cauda do arquivo: $ tail
Tail(cauda), mostra o final do arquivo, geralmente usado com o -f(follow) para ver o final do arquivo em tempo real (suas mudanças).
Ex: tail -f <nomeDoArquivo>
Pega aquilo ali: $ grep
Grep([G]lobal [r]egular [e]xpression [p]rint) — Pega alguma ocorrência num arquivo, ou stdout.
Ex: grep <ocorrência> <arquivo> -> grep ovo ovo.txt
-n (number) — Mostra o número de linhas.
-i (insensitive) — Torna a procura case insensitive.
-v (invert-match) — Faz o contrário, pega todas as linhas que não condizem.
Organize: $ sort
Sort (sort), organiza em ordem alfabética as linhas de um arquivo.
Ex: sort <arquivo> -> sort ovo.txt
-n (numeric), Leva em consideração valores numéricos.
-r (reverse), Inverte a ordem
Junte linhas adjacentes e iguais: $ uniq
Uniq ([Uniq]ue), serve para apagar linhas que sejam iguais e que estejam uma atrás ou na frente a outra, provavelmente deve ser usado junto com o comando anterior, sort, pois o sort deixará as linhas iguais juntas, do contrário, o uniq não é tão útil.
Ex: uniq <arquivo> -> uniq .txt
Ex: cat ovo.txt | sort | uniq
-c (count), Agora sim, com isso o comando uniq conta quantas ocorrências existem da mesma linha.
Delta: $ diff
Diff ([Diff]erence), Pega a diferença entre dois arquivos ou diretórios, similar ao que o git faz.
Ex: diff <local1> <local2> -> diff ovo.txt ovo2.txt
Jogue no STDOUT: $ echo
Echo (reverberar), é responsável por retornar ao stdout o conteúdo fornecido, podendo ser uma string, uma variável de ambiente ou até mesmo um comando.
Ex: echo ovo -> $ ovo
Ex: echo ~ -> <diretórioDoUsuário> -> /home/llara
Ex: echo $(ls)
Mude o dono: $ chown
Chown (Change Owner) -> Responsável por mudar o dono e o grupo de um diretório ou arquivo
Ex: chown <usuário> <arquivo> -> chrown pllara ovo.txt
Ex: chown <usr>:<grp> <file/folder> -> chown pedro:alunos ovo.txt
Ex: chown <usr>:<grp> <file/folder> -> chown pedro:alunos ./ovo -R
Não muda a moderação, mas as permissões da mesma : $ chmod
Chmod ([Ch]ange [Mod]e) — Esse comando serve para mudar as permissões de leitura(read), modificação (write) e execução (no caso de bash files) do usuário(user), grupo (group) e outros(other).
Sintaxe — X-UUU-GGG-OOO
X — Indica se é uma pasta ou arquivo
U — Permissões do usuário
G — Permissões do grupo
O — Permissões de outros
*A — Todos
1ª forma de usar
UGOA <+,-,=> rwx
Ex: chmod a+rwx <arquivo> -> chmod a+rwx ovo.txt
> Esse comando adiciona as permissões de ler, editar e executar ovo.txt
Ex: chmod ug=rw <arquivo> -> chmod ug=rw ovo.txt
> Esse comando transforma as permissões do grupo e do usuário para ler e editar.
2ª Forma de usar
XYZ -> {0..7} -> número binário -> { 000 … 111 }
Ex: chmod 777(111 111 111 )(rwx rwx rwx) -
Eu não entendi o que o nome significa, mas tamo aí, mude as permissões que são definidas por padrão para novos arquivos : $ umask
Umask ([U]ser [M]ask ) — Agora que vimos como modificar as permissões do arquivo, percebemos que os mesmos já vêm com algumas configurações de acesso pré-definidas, essas configurações podem ser definidas através deste comando.
Ex: Umask -> $ número — não use o comando assim, retornará um número chato de se ler
Ex: Umask -S -> $ u=xxx, g=yyy, o=zzz (Retorna as permissões padrão atribuídas aos arquivos)
Ex: Umask u=rwx
Qual o espaço ocupado por essa pasta?: $ du
DU ([D]isk [U]sage), Serve para calcular o tamanho ocupado por arquivos e diretórios