Linux commands

O que é Linux?
O Linux é um sistema operacional derivado do Unix (sistema operacional utilizado em grandes corporações) feito para rodar em computadores pessoais. O Linux faz tudo o que você poderia esperar de um Unix moderno e completo. Suporta multitarefa real, memória virtual, bibliotecas dinâmicas, redes TCP/IP, nomes de arquivos com até 255 caracteres e proteção entre processos (crash protection), além de muitas outras funcionalidades que deixariam esta lista extensa demais. Um grande atrativo que o Linux oferece é o fato de poder trabalhar tanto como servidor de aplicações quanto como estação de trabalho, sem que haja necessidade de grandes modificações no seu sistema.

Como surgiu o Linux?
O Linux foi originalmente desenvolvido como um passatempo, ou até mesmo como um desafio de Linus Torvalds. Ele queria um sistema operacional que fosse semelhante a um Unix, com todas as suas funcionalidades e, ainda, que pudesse utilizá-lo num PC. A partir dessa idéia, Linus começou a trabalhar nesse que seria o futuro kernel do sistema operacional que hoje denominamos Linux. Isso tudo aconteceu em meados de 1991, quando Linus cursava a faculdade de Computação na Finlândia. Em 5 de outubro de 1991 a seguinte mensagem circulou na usenet (sistema de News, mural on-line):

“…Como eu mencionei há um mês, estou trabalhando em uma versão free de um sistema semelhante ao Minix para computadores AT-386. Ele já alcançou o estagio de ser usável (embora possa não ser, dependendo do que você quer fazer), e pretendo distribuir o código fonte. É apenas a versão 0.02… mas já consegui rodar nele o bash, gcc, gnu-make, gnu-sed, compress, etc.”

Esta mensagem era assinada por Linus Torvalds, e ninguém advinharia que ela estaria marcando o início de um movimento que, menos de dez anos depois, já tem mais de trinta milhões de seguidores. Assim surgiu o que seria o primeiro kernel utilizável do Linux. Faz-se necessária aqui uma explicação sobre o que é o kernel do Linux, para evitar concepções errôneas do que é o kernel e o que é o Linux propriamente dito. O kernel é o núcleo do sistema operacional, é a parte que controla diretamente o hardware da máquina. Quando falamos de Linux, estamos nos referindo somente ao kernel do sistema. Tudo que existe ao redor do kernel são aplicativos que compõem uma distribuição do Linux.

O que é uma Distribuição Linux?
Pelo fato de o Linux ser um software de livre distribuição, muitas pessoas e até mesmo empresas se empenham em organizar o kernel e mais uma série de aplicativos e manuais para que o sistema fique cada vez mais amigável. A esse conjunto de aplicativos mais o kernel dá-se o nome de distribuição Linux. Algumas distribuições Linux são maiores que outras, dependendo da quantidade de aplicativos e a finalidade a que se propõem. Existem desde distribuições que cabem num disquete de 1.44 até distribuições que ocupam vários CDs. Cada uma delas tem seu público-alvo e finalidades específicas. As minidistribuições têm como objetivo desde a recuperação de um sistema danificado até o monitoramento de uma rede de computadores. Entre as grandes distribuições podemos citar: Conectiva, Mandrake, SuSE, Debian, Red Hat e inúmeras distribuições. O que diferencia uma distribuição da outra é a maneira como são organizados e preconfigurados os aplicativos que cada uma contém, além de incluírem ferramentas de configuração que facilitam a vida do administrador do sistema.

Comandos e atalhos essenciais do Linux
<CTRL><ALT><F1>
Muda para o primeiro terminal de texto. Em LINUX podemos ter vários terminais abertos ao mesmo tempo.

<CTRL><ALT><Fn> (n=1..6)
Muda para o n-ésimo terminal.

<CTRL><ALT><F7>
Muda para o primeiro terminal Gráfico (se houver algum a rodando nesse momento).

<Tab>
Autocompleta o comando (num terminal). Este é um dos melhores atalhos em LINUX.

<ArrowUp> / <ArrowDown>
Lista um por um e permite edição do historico de comandos executados. Pressione <ENTER> para executar o comando escolhido.

<Shift><PgUp>
Visualiza as “janelas” anteriores do terminal. Trabalha também no prompt de login, onde podemos visualizar as mensagens de bootup.

<Shift><PgDown>
Visualiza as “janelas” seguintes do terminal.

<CTRL><ALT><+> (em X-window)
Muda para a próxima resolução de X-server (se tivermos configurado o X-server para mais do que uma resolução).

<CTRL><ALT><-> (em X-window)
Muda para a resolução anterior do X-server.

<CTRL><ALT><BkSpc> (em X-window)
Mata (kill) o servidor X-window atual. Usa-se quando o X-window bloqueia e não podemos sair normalmente.

<CTRL><ALT><DEL>
Desliga o sistema e faz reboot. Executa o comando
shutdown normal.

<CTRL>c
Mata (kill) o processo corrente.

<CTRL>d
Sai da sessão atual.

<CTRL>d
Envia [End-of-File] para o processo corrente.

<CTRL>s
Para a transferência para o terminal.

<CTRL>q
Retoma a transferência para o terminal. Tentar este atalho quando o terminal deixar de responder misteriosamente…

<CTRL>z
Suspende a execução interativa do processo corrente. O comando da shell
fg retoma a execução do processo em modo interativo (em foreground). O comando bg retoma a execução do processo em modo não-interativo (em background).

reset
Restaura um terminal “estragado” (com caracteres esquisitos) para as definições de default. Usa-se, por exemplo, quando se executa o comando
cat num arquivo binário. Podemos não ver o comando enquanto o escrevemos.

~ (til)
Muda para a home directory. Por exemplo,
cd ~/minha_dir muda para o diretório minha_dir situada abaixo da nossa home directory. Digitar apenas cd é o equivalente ao comando cd ~.

Comandos comuns do Linux – Informações de Sistema
pwd

Exibe o nome do diretório corrente.

hostname
Exibe o nome da máquina onde estamos trabalhando (hostname). Usa-se o comando
netconf para mudar o nome da máquina.

whoami
Exibe o nosso username (nome de login).

who am i
Exibe o nosso username (nome de login) com detalhes adicionais.

id username
Exibe o user id (uid), o group id (gid), id efetivo (se for diferente do uid) e todos os grupos suplementares relacionados com o utilizador especificado na variável username.

date
Exibe ou modifica a data e hora do sistema.
Por exemplo, para mudar a data e hora para 2000-12-31 23:57, usa-se o comando
date com desta forma:
date 123123572000
Para modificar o relógio de hardware (hardware clock) a partir do relógio do sistema, usa-se o comando
setclock.

time
Determina o tempo que demora a completar um determinado processo, além de outra informação. Não confundir com o comando
date. Por exemplo, podemos saber quanto tempo demora para exibir o conteúdo de um diretório, usando o comando time da seguinte forma:
time ls

who
Exibe uma lista com os utilizadores que estão “logados” (logged in) à máquina.

rwho -a
Exibe uma lista com todos os utilizadores que estão ligados à nossa rede. O serviço rwho deve estar a rodando para que o comando funcione. Se não estiver, inicia-se o comando
setup como root para “ligar” o serviço rwho.

finger username
Exibe informação detalhada sobre um determinado utilizador, especificado na variável username. Por exemplo,
finger root dá-nos toda a informação sobre o utilizador root.

last
Exibe uma lista com os últimos utilizadores que se logaram (logged in) ao sistema. Se usarmos o comando
last em conjunto com less, podemos “navegar” nessa lista:
last | less
Se, por outro lado, usarmos o comando desta forma:
last -n, obtemos uma lista com os últimos n logins ao sistema.

uptime
Tempo que passou desde o último reboot.

ps
Lista os processos que estão rodando neste momento pelo utilizador corrente.

ps aux | more
ps aux | less

Lista todos os processos que estão a rodando na máquina neste momento, inclusive aqueles que não têm controle no terminal, juntamente com a informação sobre o utilizador que iniciou cada um deles.

top
Exibe uma lista com os processos que estão rodando na máquina neste momento, ordenados decrescentemente por tempo de CPU gasto.

uname –a
Informação sobre o servidor.

free
Informação de memória (em kilobytes).

df –h
Exibe informação sobre os discos de todos os sistemas de arquivos (filesystems), numa linguagem entendida pelos humanos…

du / -bh | more
Exibe uma lista detalhada do uso do disco para cada subdiretório, começando pelo diretório /, em linguagem legível.

cat /proc/cpuinfo
Informação sobre a CPU. Note-se que os arquivos no diretório /proc não o são na realidade. Tratam-se somente de “ganchos” (hooks) para visualizar informação disponível no kernel.

cat /proc/interrupts
Exibe uma lista com os interrupts em uso.

cat /proc/version
Versão do LINUX e outras informações.

cat /proc/filesystems
Exibe uma lista com os sistemas de arquivos (filesystems) em uso neste momento.

cat /etc/printcap
Exibe o setup das impressoras ligadas ao sistema.

lsmod (como root)
Exibe uma lista com os módulos de kernel carregados neste momento.

Operações básicas
comando –help | more / comando –help | less
Exibe uma ajuda simples ao comando (aplica-se à maior parte dos comandos LINUX). “–help” é semelhante ao switch “/h” do DOS. As pipes | “more” e “less” usam-se quando a informação ocupa mais do que uma tela, sendo que a opção “more” permite ver página a página, sem no entanto podermos voltar atrás, e a opção “less”, permite-nos navegar linha a linha, para a frente e para trás.

man topico
Exibe o conteúdo das páginas do manual do sistema sobre o assunto tópico. Tente usar o comando
man man primeiro. Pressione a tecla q para cancelar a visualização. O comando info topic funciona aproximadamente como o comando man e pode conter informações mais atualizada. As páginas do manual podem ser de difícil leitura. Use o comando topic –help para páginas de ajuda mais curtas e fáceis de ler. Se necessitar de mais ajuda, consulte o diretório /usr/doc.

ls
Exibe o conteúdo do diretório corrente.
Opções:
-l : lista o conteúdo do diretório exibindo detalhes de cada arquivo
-a : lista arquivos ocultos “.<nomedoarquivo>”
-R : lista o conteúdo do diretório e dos subdiretorios de forma recursiva

cd diretório
Navega entre os diretórios
cd <diretório> : entra em um diretório
cd .. : retorna ao diretório anterior
cd : retorna para o diretório home

cp fonte destino
Copia arquivos entre a fonte e o destino.

mv fonte destino
Move ou altera o nome de arquivos. O mesmo comando é usado para mover ou alterar nomes de diretórios ou arquivos.

mkdir diretório
Cria um diretório chamado diretório.

rm arquivo
Remove (apaga) o arquivo especificado na variável arquivo
rm -f : remove sem pedir confirmação

rm -r : apaga de forma recursiva um diretório, removendo todos os arquivos e subdiretórios
pertencentes a esse diretório.

rmdir diretório
Remove o diretório especificado na variável diretório.

cat arquivo
Exibe o conteúdo de um arquivo de texto chamado arquivo. Se, por engano, tentarmos visualizar o conteúdo de um arquivo binário, e só aparecerem caracteres esquisitos, usa-se o comando
reset para voltar ao normal.

>
Redirecionamento, redireciona a saída de um comando > para outro

less arquivo
Para navegar no conteúdo de um arquivo de texto. Para terminar a nossa navegação, pressione a tecla q.

head [nome do arquivo]
Lista as 10 primeiras linhas do arquivo.
head -20 [nome do arquivo] (-20 lista as 20 primeiras linhas)

tail [nome do arquivo]
Lista as 10 últimas linhas do arquivo.
tail -6 [nome do arquivo] (lista as 6 últimas linhas do arquivo)

wc [nome do arquivo]
Mostra a quantidade de linhas do arquivo
wc -c numero de bytes
wc -w numero de palavras
wc -l numero de linhas

ln fonte destino
Cria um hard link chamado destino que aponta para o arquivo chamado fonte. O link aparenta ser uma cópia do arquivo original, mas na realidade, apenas uma cópia do arquivo é mantida, sendo que existem duas (ou mais) entradas para o arquivo no diretório. Qualquer alteração ao arquivo fonte é imediatamente visível no destino. Quando uma entrada no diretório é removida, as outras se mantêm. Limitações dos hard links: os arquivos têm de estar obrigatoriamente no mesmo filesystem. É impossível criar hard links para diretórios ou arquivos especiais.

ln –s fonte destino
Cria um link simbólico (symbolic link) chamado destino a apontar para o arquivo fonte. O link simbólico apenas especifica o caminho (path) para o arquivo fonte. Ao contrário dos hard links, a fonte e o destino não precisam pertencer ao mesmo filesystem.
Limitações dos symbolic links: Se o arquivo original for removido, o link “parte-se” (broken link). Os symbolic links podem também criar referências circulares (como as de bases de dados e folhas de cálculo).

tar
Compactador de arquivos Tar
-c : Cria um novo arquivo
-f : Indica o nome do arquivo final (que será o arquivo compactado)
-t : Lista o conteúdo do arquivo
-r : Acrescenta um arquivo qualquer ao arquivo compactado
-x : Descompacta o arquivo
-v : Mostrar os arquivos que estão sendo processados
-z : Filtra o arquivo a ser processado com o arquivo é compactado com o tar + gzip
tar –xvf arquivo.tar : Descompacta um arquivo (*.tar).
tar –zxvf arquivo.tar.gz : Descompacta um arquivo (*.tar.gz ou *.tgz)

gzip arquivo
Usa-se o
gzip para compactar os arquivos.

gunzip arquivo.gz
Descompacta um arquivo “zipado” (*.gz ou *.z).

bzip2 arquivo
Compacta um arquivo com o compactador bzip2

bunzip2 arquivo.bz2
Descompacta um arquivo (*.bz2). Normalmente é um método de compressão mais eficiente do que o obtido com o gzip.

unzip arquivo.zip
Descompacta um arquivo (*.zip) compactado com um utilitário compatível com o pkzip do DOS.

find / -name “arquivo
Procura o arquivo chamado arquivo a partir do diretório /. A variável filename pode conter wildcards (*, ?).

grep
Pesquisa uma determinada palavra dentro de um arquivo ou resultado de tela

locate arquivo
Procura o arquivo que contém o texto arquivo. Mais fácil de usar e mais rápido que o comando
find.

ssh - l <login> <host name>
Conexão remota a um terminal Linux

ftp servidor
Acede a outra máquina via protocolo FTP. Também existe o
ncftp, que acrescenta algumas funcionalidades extra ao FTP normal, (e o gftp para GUI). O FTP é bom para copiar arquivos para/de um servidor. Deve-se tentar o utilizador “anonymous” (quando não temos conta aberta no sistema remoto). Após a conexão estar feita, use o comando? para exibir uma lista de comandos disponíveis. Os comandos principais são: ls (exibir o conteúdo do diretório corrente do sistema remoto), ascii, binary (para mudar o modo de transferência de arquivos para texto ou binário), get (copia um arquivo do sistema remoto para o sistema local), mget (copia vários arquivos ao mesmo tempo, do sistema remoto para o sistema local), put (copia um arquivo do sistema local para o sistema remoto), mput (copia vários arquivos, do sistema local para o sistema remoto), bye (desconecta-se do sistema remoto).

./programa
Roda um arquivo executável.

startx
Inicia um servidor X-window, juntamente com o gestor de janelas por default.

shutdown –h now (como root)
Desliga o sistema e não reinicializa.

shutdown –r now (como root)
Desliga e reinicializa o sistema. Pode, em alternativa, usar a combinação de teclas <CTRL><ALT><DEL> para executar o comando na máquina.

halt / reboot (como root)
Usado para desligar o sistema e não reinicializar (halt) ou para fazer um reboot ao sistema (reboot). Mais fácil de usar (e decorar) do que os dois comandos anteriores.

apropos topico
Exibe uma lista de comandos que tenham alguma relação com o topico.

Editor de Texto vi
vi [nome_do_arquivo]

Cria ou abre um arquivo
Modo Edição
i :entra no modo edição do vi
esc : sai do modo edição
Comandos
I : entra no modo edição do vi
dd : apaga uma linha
ndd : apaga n linhas
20 dd : apaga 20 linhas
x : apaga um caracter <Del>
J (Maiúsculo)-> apaga o caracter de final de linha
u : desfaz a última alteração
Copia
yy -> copia uma linha
10 yy ->copia 10 linhas
n yy ->copia n linhas
Colar
p (minúsculo) ->cola na linha de abaixo da atual
P (maiúsculo) ->cola na linha acima da atual
r (minúsculo)->sobreescrevendo
Comandos Extentidos, começam por : (Pressionar <Enter> no final)
:w : salva o arquivo
:w[nome do arquivo] : salva o arquivo com outro nome
:w teste.c : salva o conteúdo do arquivo atual com o nome de teste.c
:q : sai sem salvar, caso o arquivo não for alterado
:q! : sai do vi ignorando as alterações
:wq : salva o arquivo e sai do vi
:wq [nome do arquivo] ->salva com um novo nome e sai do vi
:set number : coloca numeração nas linhas
:r [nome o arquivo] : ê um novo arquivo
:help : ajuda
:q : sai do help

Controle de processos
ps
Exibe uma lista com os processos ativos no sistema com os respectivos identificadores – PID (Process ID). Use
ps –aux para exibir uma lista semelhante mas com mais informação – todos os processos e respectivos utilizadores. Use top para “manter” a listagem visível e “on-line”.

fg PID
Passa um processo que está a correr em “background” para “foreground”.

bg PID
Processo inverso ao anterior: passa um processo para “background”.

kill -9 PID
Mata programas pelo seu PID

killall nome_programa
“Mata” programas pelo nome.

lpc (como root)
Verifica e controla a(s) impressora(s).

lpq
Exibe o conteúdo da “queue” de impressão. Em KDE (X-Window), podemos usar o “Print Queue” GUI disponível nos utilitários.

lprm job#
Remove um trabalho de impressão da “queue”.

nice nome_programa
Corre o nome_programa ajustando a sua prioridade. Como a prioridade não é especificada neste exemplo, ela é ajustada com o valor 10 (o processo vai correr mais lentamente) a partir do valor de default (usualmente o 0 – zero). Quanto mais baixo for o número, mais alta é a prioridade. Este número pode variar entre –20 e 19, sendo que só o utilizador root pode definir prioridades com valores negativos. Use o comando
top para exibir as prioridades dos processos activos.

renice –1 PID(como root)
Muda a prioridade de um processo ativo para -1. Utilizadores normais só podem mudar valores de prioridade para os seus processos, e só para valores superiores ao atual (tornando-os mais lentos).

Preste atenção aos shortcuts <CTRL>C, <CTRL>Z, <CTRL>S e <CTRL>Q. Eles foram descritos anteriormente.