GNU/Linux
 
 
Comandos do Sistema
(comandos do GNU/Linux)

O GNU/Linux é composto com uma infinidade de comandos. Vamos dar uma olhada para verificar qual a função de cada um deles.


Tabela 1: Comandos GNU/Linux

wget http://www.iso.org/linux.iso

wget -O - http://www.iso.org/linux.iso |linux.iso.tar.gz tar -zxvf -
VARIÁVEIS DE AMBIENTE
Descrição
Variável de Ambiente é a atribuição de um determinado valor a uma variável que fica disponível para uso em um ambiente shell. Esta atribuição é feita através de uma igualdade (ex: LINES=70) ou através do comando "export" (ex: export LINES=70). A diferença é que a primeira é uma variável de ambiente local e a outra é global.

As variáveis de ambiente local são as que estao disponíveis somente para shell corrente e que não são acessadas por subprocessos (subshell) do sistema. Já as variáveis de ambiente global são as que estão disponíveis tanto para o shell corrente quanto para os subprocessos (subshell).

Um subshell é um shell acessado dentro de um shell. Um exemplo prático é digitar o comando "bash" em um shell, neste caso está sendo aberto um novo shell que é conhecido como subshell que nada mais é do que um shell aberto dentro de outro shell.

Um exemplo de um subshell muito utilizado é quando executamos um script shell qualquer. Esse script é executado em um subshell. A linha "#!/bin/bash" dentro de um script que define qual shell (subshell) que será usado. Geralmente o "#!/bin/bash" é colocada na primeira linha em um shell script.

Um bom teste para ser feito seria a execução de um script (ex: my_script_shell) que mudasse o diretório atual para um outro qualquer (ex: cd /tmp). Quando o script terminasse seria notado que o diretório atual não mudou. Ao se olhar o processos em execução (ps ax) durante a execução de tal script, veríamos um processo chamando "-bash" e um outro chamado "/bin/bash ./my_script_shell". O primeiro é referente shell o qual estamos e o segunto é ao subshell o qual o script foi executado. Assim, o diretório atual foi mudado no subshell e não no shell o qual estamos. Para fazer com que o script demore o tempo suficiente para ver o que esta acontecendo é utilizacao do comando "sleep" dentro desse script.

Um outro teste seria colocar no "/etc/profile" duas variáveis "export NOME=Hugo" e "SOBRENOME=Azevedo". Criar um arquivo (ex: test.sh) com o conteúdo "#!/bin/bash" e "echo $NOME $SOBRENOME" e torná-lo executável (ex: chmod u+x test.sh). Efetuar logout, login e executar (ex: ./test.sh) será mostrado somente "Hugo". Agora se for executado o comando "echo $NOME $SOBRENOME" será mostrado "Hugo Azevedo". Se for executado o comando "bash" e "echo $NOME $SOBRENOME" novamente será mostrado somente "Hugo".

Dica: para executar um script shell no shell atual sem gerar um subshell pode se usar o comando "source my_script_shell" ou ". my_script_shell". Com esses dois comandos no exemplo acima o diretório seria mudado para o "/tmp". Muitas vezes as variáveis de ambiente são definidas dentro de arquivo de configuração (ex: "/etc/profile") ou através do serviços e comandos que são usados ao iniciar ou acessar (ex: ssh) o sistema operacional.

Dica: os nomes da variáveis de ambiente são sempre em letras MAIÚSCULAS. Vale destacar que um subshell é criado ao executar um script, não importando se a primeira linha tem ou não o "#!/bin/bash". Caso essa linha não exista, o subshell (shell filho) que será aberto será o mesmo (ex:bash) do shell pai (ex: se for o bash). Apesar disso, essas regras para a criação de subshell não vale para arquivos binário, pois eles executam no shell corrente.
env Mostra as variáveis globais de ambiente. Não mostra as variáveis locais. Ex: Faça o seguinte teste: export HUGO=29 ; HUDSON=31 ; env | grep HU. Veja as as variáveis de ambiente HUGO e HUDSON foram exportadas. Contudo, somente será mostrada a variável "HUGO" ao utilizar o comando "env | grep HU". Agora, execute o comando "bash" e digite: env | grep HU. Idem ao resultado anterior. Este último coloquei somente para conhecimento, pois é evidente que o resultado seria o mesmo.
Uma opção muito importante é o "-u NAME_VARIABLE" ou "--unset=NAME_VARIABLE" que remove uma variável de ambiente (NAME_VARIABLE) em tempo de execução. Por exemplo, para executar um script shell chamado “test.sh”, removendo temporariamente a variável de ambiente PATH, basta digitar um dos dois comandos a seguir:
# env –u PATH test.sh
# env --unset PATH test.sh
O comando "env", também, roda um comando/programa com um ambiente modificado em tempo de execução, ou seja, com variáveis de ambiente redefinidas. Ex:
# env LANG=C mrtg
# env EDITOR=vi crontab -e
Também poderia colocar:
# LANG=C mrtg
# EDITOR=vi crontab -e
export Mostra as variáveis globais de ambiente (ex: export) ou exporta globalmente uma variável de ambiente (ex: export EDITOR=vi). Não é pesistente a reboot, logout ou login.
Tanto faz usar o comando "export EDITOR=vi" como simplesmente "EDITOR=vi", pois viram variáveis de ambiente. Faça o teste e depois digite "echo $EDITOR", "set | grep EDITOR" e declare | grep EDITOR, o resultado será o mesmo. O único resultado diferente é quando é executado o seguinte comando "export | grep EDITOR".
Na verdade quando se usa "export EDITOR=vi" a variável de ambiente fica como global, mas quando se usa "EDITOR=vi" a variável de ambiente fica como local. As variáveis podem ser locais: que são as variáveis disponíveis somente pelo shell corrente e que não são acessadas por subprocessos (subshell) do sistema ou as variáveis podem ser globais: que estão disponíveis tanto para o shell corrente quanto para os subprocessos (subshell) que as usam.
Faça o seguinte teste: export HUGO=29 ; HUDSON=31 ; set | grep HUGO ; set | grep HUDSON. Veja as as variáveis de ambiente HUGO e HUDSON foram exportadas. Contudo, digite agora o comando "bash". Agora digite: set | grep HUGO ; set | grep HUDSON. Veja que somente a variável HUGO foi exportada para esse novo shell.
printenv Mostra as variáveis globais.
declare Mostra as variáveis locais e globais de ambiente.. Também exporta/declara variáveis de ambiente. Exemplo variável global: declare -x HUGO=29. Exemplo: variável local: declare HUDSON=31. O comando "export" usa o "declare -x VARIÁVEL" para exportar as variáveis de ambiente.
set Mostra as variáveis locais e globais de ambiente.
unset Remove uma variável de ambiente local e/ou global da memória. Defaz o que o export ou a igualdade fax. Ex: export HUGO=29 ; HUDSON=31 ; unset HUGO ; unset HUDSON ou unset HUGO HUDSON.
LISTAR ARQUIVOS Descrição
ls Comando usado para listar arquivos e diretórios. Por padrão ordena pela ordem alfabética.

OPÇÕES:

-l (long. Mostra os atributos de um arquivo como: se é um "arquivo/diretório/link/bloco/caractere/named pipe/etc", "quantidade de diretórios/links absolutos", "permisões", "usuário", "grupo", "tamanho", "data/hora de criação/última modificação" e mostra o próprio nome do "arquivo/diretório/link" (se for link simbólico mostra também o caminho real do link). O atributo "quantidade de diretórios/links absolutos" em diretórios mostra a quantidade de diretórios dentro de um diretório, incluindo o ".", ".." e diretórios ocultos (não inclui links simbólicos de diretórios). O atributo "quantidade de diretórios/links absolutos" em arquivos mostra a quantidade de hard links (ln) que estão associados a um arquivo (1 = nenhum, 2 = um hard link associado, 3 = dois hard links associados, ...). Na verdade, o atributo "quantidade de diretórios/links absolutos" em arquivos mostra quantos arquivos estão associados ao mesmo "inode" (ls -i) daquele arquivo. Por isso, todo arquivo por padrão já está com o atributo "quantidade de diretórios/links absolutos" igual a "1". Só para conhecimento com a opção "-l" também é visualizada na primeira linha a quantidade em bytes do que é mostrado no diretório corrente.

-lu (idem, só que mostra a data/hora do último acesso)

-lut (idem, só que ordena pela data/hora do último acesso)

-u (access time. Sozinho, ordena pela data/hora do último acesso. Com o "-l" mostra a data/hora do último acesso, mas não ordena. Para ordenar, mostrando a data/hora do último acesso é necessário a acrescentar o "-t". atime = access time, ou seja, é a data do último acesso em um arquivo. Ex: cat /tmp/test.txt. Com esse comando o "atime" é atualizado)

-t (ordena pela data/hora de modificação. Com "-ul" ordena com a data/hora do último acesso)

-c (change time. Sozinho, ordena pela data/hora da última troca de permissão de um arquivo ou diretório. Com o "-l" mostra a data/hora, mas não ordena. Para ordenar, mostrando a data/hora da última troca de permissão é nessário acrescentar o "-t". ctime = change time, ou seja, é a data da última troca de permissões em um arquivo. Ex: "chown root /tmp/test.txt" ou "chmod o+w /tmp/test.txt". Com esses comandos o "ctime" é atualizado. O "ctime" também é atualizado se usarmos o comando "echo 3 > /tmp/test.txt". )

-X (mostra em ordem alfabética da extensão)

--author (com o "-l" mostra o author)

-d (lista o diretório em vez do conteúdo. Se colocado o wildcard '*' lista diretórios e arquivo juntamente com o caminho relativo. ex: ls -d /*)

-s (mostra do tamanho in blocks)

-S (ordena pelo tamanho)

-h (mostra o tamanho em formato mais humano -> K, M, G etc)

-r (inverte a ordem da lista)

-R (recursividade)

-i (mostra o inode - número de indexação dos arquivos e diretórios)

-Z | --context (mostra o contexto de segurança do SELinux)

INFORMAÇÕES DE ARQUIVOS Descrição
stat Comando usado para mostrar informações/status de arquivos e diretórios. Essas informações são conhecidas como metadados.

PROCURAR ARQUIVOS Descrição
find Comando bastante versátil usado para procura de arquivos e diretórios. Sozinho, o "find" lista recursivamente o diretório atual, mostrando o caminho relativo do que é achado (arquivos, diretórios, links, arquivos ocultos etc). Também pode mostrar o caminho completo (ex: find /root).

# find / -perm 755 (comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão 7 (rwx) para o usuário, permissão 5 (r-x) para o grupo e permissão 5 (r-x) para outros)
# find / -user root -perm 755 (comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" que têm como usuário o "root" e com permissão 7 (rwx) para o usuário, permissão 5 (r-x) para o grupo e permissão 5 (r-x) para outros)
# find / -uid 0 -perm 755 (idem, só que usa o “uid” do usuário em vez do nome)
# find / -group root -perm 755 (comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" que têm como grupo o "root" e com permissão 7 (rwx) para o usuário, permissão 5 (r-x) para o grupo e permissão 5 (r-x) para outros)
# find / -gid 0 -perm 755 (idem, só que usa o “gid” do grupo em vez do nome)
# find / -group root -perm 0755 (idem. A posição onde número “0” está, é usado para definir o SUID, SGID e/ou StickyBit. Nesse caso e a dos comandos anteriores, serão procurados por permissões que coincidirem exatamente com “-rwxr-xr-x”).
Obs: o número “0” é usado para quando não há permissão de leitura, escrita e execução (---) ou recurso (SUID, SGID ou StickyBit) definido nas permissões dos arquivos e diretórios. Ex: o “0755” = “-rwxrw-rw-”, sendo que também é igual “755” = “-rwxrw-rw-”. O “0705” = “-rwx---rwx”, sendo que também é igual a “705” = “-rwx---rwx”.
# find / -user root -perm -755 (muito diferente dos outros anteriores e será explicado mais a frente)

------------------------------------------------------------------------

# find / -perm 4755 (acha o SUID. Comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão 47 (rws) para o usuário, permissão 5 (r-x) para o grupo e permissão 5 (r-x) para outros)
# find / -perm 2755 (acha o SGID. Comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “rwx” para o usuário, permissão “r-s” para o grupo e permissão “r-x“ para outros)
# find / -perm 1755 (acha o StickyBit. Comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “rwx” para o usuário, permissão “r-x“ para o grupo e permissão “r-t” para outros)
# find / -perm 6755 (acha o SUID e SGID. Comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “rws” para o usuário, permissão “r-s” para o grupo e permissão 5 “r-x“ para outros)
# find / -perm 7755 (acha o SUID, SGID e StickyBit. Comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “rws” para o usuário, permissão “r-s” para o grupo e permissão “r-t” para outros)
# find / -perm 5755 (acha o SUID e StickyBit. Comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “rws” para o usuário, permissão “r-x” para o grupo e permissão “r-t” para outros)
# find / -perm 3755 (acha SGID e StickyBit. Comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “rwx” para o usuário, permissão “r-s” para o grupo e permissão “r-t” para outros)

------------------------------------------------------------------------

# find / -perm -6000 (procura por arquivos e diretorios que tenham o SUID e SGID setado, nao importanto com as permissoes de acesso)
# find / -perm +6000 (procura por arquivos e diretorios que tenham o SUID ou SGID setado, nao importanto com as permissoes de acesso)

------------------------------------------------------------------------

# find / -perm u=rwx (comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “rwx” para o usuário, permissão “---“ para o grupo e permissão “---“ para outros. Contudo, dificilmente vai ser achado um arquivo com essas permissões “rwx------“, use o comando a seguir)
# find / -perm -u=rwx (seria mais interessante usar esse comando em vez do anterior. Esse comando é usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “rwx” ou “rws” para o usuário, permissão “qualquer uma“ para o grupo e permissão “qualquer uma“ para outros)

# find / -perm u=rws (deveria, mas não funcionou. Esse comando deveria ser usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “rwx” para o usuário, permissão “---“ para o grupo e permissão “---“ para outros, mas não funcionou. Contudo, mesmo que funcionasse, dificilmente vai ser achado um arquivo com essas permissões “rws------“, use o comando a seguir)
# find / -perm -u=rws (use esse comando em vez do anterior. Comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “rwx” para o usuário, permissão “---“ para o grupo e permissão “---“ para outros, mas não funcionou)
# find / -perm g=w (comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “0020”. Contudo, dificilmente vai ser achado um arquivo com essas permissões “----w----“, use o comando a seguir)
# find / -perm -g=w (seria mais interessante usar esse comando em vez do anterior. Comando usado para achar todos os arquivos e diretórios recursivamente a partir do "/" com permissão “qualquer um” para o usuário, permissão “-w-“ para o grupo e permissão “qualquer um“ para outros)
# find / -uid 0 -perm +4000 ()
# find / -gid 501 -perm +4000 ()
# find / -perm -0020 (idem. Faz um AND)
# find / -perm /0020 (idem)
# find / -perm +0020 (obsoleto. Fax um OR)
Obs: quando são usados os sinais “-” e “/” o número “0” significa que naquela posição a permissão ou recurso pode ser qualquer um.

------------------------------------------------------------------------

# find /root (lista recursivamente o conteúdo do diretório "/root", mostrando o caminho completo dos arquivos, diretórios, links etc inclusive o "/root")
# find /root -type f (lista recursivamente o conteúdo do diretório "/root", mostrando o caminho completo dos arquivos -> regular file)
# find /root -type l (lista recursivamente o conteúdo do diretório "/root", mostrando o caminho completo dos links)
# find /root -type d (lista recursivamente o conteúdo do diretório "/root", mostrando o caminho completo dos diretórios inclusive o "/root")

------------------------------------------------------------------------

# find /root -size 48c (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios com tamanhos de 48 bytes [caracteres])
# find /root -size +48c (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios com tamanhos maiores que 48 bytes [caracteres], ou seja, 49-50-51-... bytes)
# find /root -size -48c (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios com tamanhos menores que 48 bytes [caracteres], ou seja, 47-46-45-... bytes)
# find /root -size 3k (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios com tamanhos de 3 Kilobytes [caracteres], ou seja, 47-46-45-... bytes)

------------------------------------------------------------------------

# find -mtime 13 (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios que tem a data de modificação de 13 dias atrás)
# find -mtime +13 (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios que tiverem a data de modificação maior que 13 dias atrás)
# find -mtime -13 (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios que tiverem a data de modificação menor que 13 dias atrás)

Obs: mtime = modification time, ou seja, é a data da última modificação em um arquivo. Ex: echo 3 > /tmp/test.txt. Com esse comando o "mtime" é atualizado.

------------------------------------------------------------------------

# find -atime 13 (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios que tem a data do último acesso de 13 dias atrás)
# find -atime +13 (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios que tiverem a data do último acesso maior que 13 dias atrás)
# find -atime -13 (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios que tiverem a data do último acesso menor que 13 dias atrás)

Obs: atime = access time, ou seja, é a data do último acesso em um arquivo. Ex: cat /tmp/test.txt. Com esse comando o "atime" é atualizado.

------------------------------------------------------------------------

# find -ctime 13 (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios que tem a data da última troca de permissões de 13 dias atrás)
# find -ctime +13 (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios que tiverem a data da última troca de permissões maior que 13 dias atrás)
# find -ctime -13 (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios que tiverem a data da última troca de permissões menor que 13 dias atrás)

Obs: ctime = change time, ou seja, é a data da última troca de permissões em um arquivo. Ex: "chown root /tmp/test.txt" ou "chmod o+w /tmp/test.txt". Com esses comandos o "ctime" é atualizado. O "ctime" também é atualizado se usarmos o comando "echo 3 > /tmp/test.txt".

------------------------------------------------------------------------

# find /root -maxdepth 1 (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios do primeiro nível - profundidade 1)
# find /root -maxdepth 2 (lista recursivamente o conteúdo do diretório "/root", mostrando os arquivos e diretórios do primeiro e segundo nível - profundidade 2)

# find / -maxdepth 1 | xargs ls -lhd

# find / -maxdepth 1 -group root ! -iname tmp | xargs ls -lhd

------------------------------------------------------------------------

ACELERAÇÃO DE BUSCAS, CÓPIAS, DELETAÇÃO, FILTROS ETC
# find /tmp/ -ok rm \; (a sintax é "-ok command ;". Esse comando vai pedir confirmação para apagar o diretório "/tmp" e o seu conteúdo)

# find /tmp/ -ok rm {} \; (idem)
locate arquivo Comando bastante útil usado para procura de arquivos e diretórios. Em primeiro lugar é necessário instalar "apt-get install locate" e depois executar o comando "updatedb". Esse comando "updatedb" vai gerar um banse de dados de todos os arquivos e diretórios do disco. Essa base será usa pelo comando "locate". Perceba que essa base de dados é estática, sendo que necessário executado "updatedb" para trazer as novas modificações em termos de arquivos e diretórios.

# updatedb (atualiza a base de dados de nome de arquivos e diretórios)
# locate skel (procura o padrão "skel" no nome de arquivos e diretórios)
# locate -i skel (idem, só que case-insensitive)

Obs: o interessante do locate é a rapidez na procura de arquivos. Isso devido a utilização de uma base de dados.

EXECUÇÃO ARQUIVOS Descrição
. nome_arquivo
source nome_arquivo
Executa o arquivo mesmo que não tenha permissão para execução. Executa tudo o que tem dentro do arquivo. Não cria um subshell para tal executação, ou seja, é executado no shell corrente.
./nome_arquivo O "." representa diretório atual. Ele segue a mesma lógica do ".." que representa o diretório anterior (para testar digite no shell: "ls .", "ls ..", "cd ." e "cd .."). Para um melhor entendimento, será utilizado o diretório "/tmp/bin/local/" e o arquivo executável "/tmp/bin/teste" como exemplo ditático.
Para executar um arquivo no GNU/Linux é necessário digitar o caminho completo ou o caminho parcial, ou seja, é preciso trabalhar com a hierarquia de diretórios. Seguindo este raciocínio para executar um arquivo chamado "teste" que está dentro de "/tmp/bin/", basta digitar "/tmp/bin/teste" (caminho completo). Agora, se estivéssemos em "/tmp/" poderíamos digitar "bin/teste", se estivéssemos em "/tmp/bin/local/", poderíamos digitar "../teste", "../../../tmp/bin/teste" ou "../../bin/teste" (caminhos parciais).
No entando, se estivéssemos dentro do diretório "/tmp/bin/", não seria possível executá-lo simplesmente digitando "teste", pois como foi dito, é necessário digitar o caminho completo ou o parcial que requerem uma hierarquia de diretórios (poderíamos digitar, então, "../bin/teste" etc para executá-lo).
Contudo, como foi dito anteriormente o sinal de ponto final representa o diretório atual. Assim, se digitarmos dentro do "/tmp" "./teste" consiguiríamos executá-lo. Tal execução ocorreu, pois informamos com o caractere "." que o arquivo "teste" está no diretório atual e confirmamos o caminho parcial (hierarquia de diretórios) com o "/".
Se digitássemos .teste, não consiguiríamos executá-lo, pois o sistema o entenderia como arquivo oculto. Dessa maneira o "/" também tem outra função que é informar que o arquivo "teste" não é um arquivo oculto (.teste). Só para constar, para executar um arquivo oculto chamado ".teste" que está no diretório atual, bastar digira "./.teste"
sh nome_arquivo X
run-parts Roda todos os executáveis dentro de um diretório. Ex: "run-parts --report /etc/cron.daily"
REMOVER ARQUIVOS E DIRETÓRIOS Descrição
rm Remove arquivos e diretórios.
rm nome_arquivo Remove o arquivo.
rm nome_diretório
rm nome_diretório/
Não remove o diretório, independente se existe algo dentro de tal diretório. Aparece a mensagem "rm: cannot remove 'nome_diretório': Is a directory".
rm -f nome_diretório
rm -f nome_diretório/
Idem.
rm -r nome_diretório
rm -r nome_diretório/
Remove o diretório, independente se existe algo dentro de tal diretório. Age recursivamente.
rm nome_diretório/* Remove todos os arquivos dentro de "nome_diretório", mas não remove os arquivos/subdiretórios ocultos e os subdiretórios e seus conteúdos, sendo que aparece a mensagem "rm: cannot remove 'nome_subdiretório': Is a directory" para os subdiretórios que foram encontrados dentro de "nome_diretório".
rm -f nome_diretório/* Idem.
rm -r nome_diretório/* Remove todos os arquivos e subdiretórios dentro de "nome_diretório", mas não remove os arquivos/subdiretórios ocultos. Age recursivamente.
rm -r nome_arq_dir* Remove todos os arquivos e diretórios iniciados com "nome_arq_dir", independente se existe algo dentro de tais diretórios. Age recursivamente.
rmdir Remove diretórios vazios.
rmdir nome_diretorio Remove o diretório, mas somente se não existir arquivos e subdiretórios dentro dele.
rmdir nome_diretorio/nome_subdiretorio Remove o subdiretório, mas somente se não existir arquivos ou diretórios no subdiretório.
rmdir -p nome_diretorio/nome_subdiretorio Remove o diretório e subdiretório, mas somente se não existir arquivos ou diretórios no subdiretório. Caso exista algo no diretório, somente o subdiretório será removido.
COPIANDO ARQUIVOS E DIRETÓRIOS Descrição
cp Copia arquivos e diretórios.
cp nome_arquivo Nada faz. Aparece um erro "cp: missing destination file operand after nome_arquivo".
cp nome_arquivo .
cp nome_arquivo ./
Nada faz. Aparece um erro "cp: nome_arquivo and ./nome_arquivo are the same file".
cp nome_arquivo1 nome_arquivo2
cp nome_arquivo1 ./nome_arquivo2
Faz uma cópia do nome_arquivo1 para nome_arquivo2 no diretório atual, independente se já existe o arquivo.
cp nome_arquivo1 .nome_arquivo2 Faz uma cópia do nome_arquivo1 para .nome_arquivo2 no diretório atual que na verdade é um arquivo oculto, independente se já existe o arquivo.
USUÁRIOS Descrição
adduser Adiciona um novo usuário, criando um novo grupo e um diretório em "/home" com o mesmo nome. Será solicitada uma senha e informações opcionais (full name, room number, work phone etc). Ao criar um novo usuário com esse comando, uma nova entrada será adiciona em "/etc/passwd", "/etc/shadow" e "/etc/group". O arquivo de configuração que manipula esse comando é o "/etc/adduser.conf".
useradd Adiciona um novo usuário, criando um novo grupo com o mesmo nome. Não será solicitada a digitação de uma senha e informações opcionais (full name, room number, work phone etc). Também, não será criado um diretório em "/home". Ao criar um novo usuário com esse comando, uma nova entrada será adiciona em "/etc/passwd", "/etc/shadow" e "/etc/group". Esse comando é muito útil para criação de usuários para administração do sistema ou que manipulam serviços. Cai na LPI-1.

Adicionar um usuário chamado "hugo", definindo o seu diretório com o mesmo nome em "/etc/passwd":
# useradd hugo

Adicionar um usuário especificando um grupo primario:
# useradd hugo -g suporte

Adicionar um usuário especificando uma data para a conta expirar:
# useradd hugo -e 2011-07-28

Colocar todas as opções em um só comando:
# useradd hugo -e 2011-07-28 -g suporte

Mostra e configura os valores defaults para o comando useradd:
# useradd -D

Adiciona um usuário chamado "hugo", define o diretório padrão com o mesmo nome em "/etc/passwd" e cria um diretório em "/home/" com o mesmo nome:
# useradd hugo -m

Adiciona um usuário chamado "hugo" e define o diretório padrão "/home/suporte" em "/etc/passwd". Só não cria um diretório em "/home/":
# useradd hugo -d /home/suporte

Idem, só que cria um diretório "/home/suporte":
# useradd hugo -md /home/suporte

Adiciona um usuário chamado "hugo" e define uma data para expiração da senha
# useradd -e xxx hugo

Prefira usar useradd, userdel, groupadd e groupdel, pois existem em todas as distribuições.

Esse comando é usado para adicionar usuário ou adicionar usuário modificando as informações padrão. Se o usuário já existir, um erro aparecerá, ou seja, esse comando não muda informações de conta de usuário já existente.
deluser Remove usuários, incluindo as entradas em "/etc/passwd", "/etc/shadow" e "/etc/group". Mas mantém o diretório do usuário em "/home". O arquivo de configuração que manipula esse comando é o "/etc/deluser.conf". Com a opção "--remove-home" também será removido o diretório do usuário em "/home". Com a opção "--remove-all-files" será removido o diretório do usuário em "/home" e todos os arquivos pertencentes ao usuário no sistema.
userdel Remove usuários, incluindo as entradas em "/etc/passwd", "/etc/shadow" e "/etc/group". Mas mantém o diretório do usuário em "/home". Ao excluir usuários, nenhuma mensagem é mostrada na tela. Com a opção "-r" ou "--remove" também será removido o diretório do usuário em "/home". Cai na LPI-1.
usermod Modifica as informações de usuários, incluindo as informações de expiração de senha.

Ex1: "usermod -G|--groups suporte hugo" --> adiciona o usuário "hugo" no grupo "suporte".
Ex2: "usermod -d|--home /home/suporte hugo" --> modifica o diretório "home" do usuário "hugo".
Ex3: "usermod -e|--expiredate 2010-12-01 hugo" --> modifica a data de expiração da senha do usuário "hugo".
Ex4: "usermod -L|--lock hugo" --> tranca a senha usuário "hugo", não sendo possível logar.
Ex5: "usermod -U|--unlock hugo" --> destranca a senha do usuário "hugo".
Ex6: "usermod -p 1234 hugo" --> modifica a senha do usuário "hugo" para "1234" sem utilizar criptografia no arquivo "/etc/shadow".

Para setar o tempo de vida máximo da senha (expiração) para uma determinada data utilize:
Ex1: "usermod -e|--expiredate 2010-12-01 hugo"

Muda o grupo primário do usuário “king” para “mktg”:
Ex2: usermod king –g mktg

Adiciona o usuário "hugo" no grupo "suporte":
Ex3: usermod hugo -G|--groups suporte
id Mostra a identificação númerica (uid e gid) e nomial (nome do usuário e dos grupos) do usuário corrente. Duas chaves interessante seriam -g | –group e -G | --groups que mostram o grupo e os grupos do usuário corrente.
passwd Troca/modifica as senhas do usuarios ou as informações de expiração das mesmas.

Com a opção "-l" ou "--lock" é desabilitada/trancada a senha, não sendo possível logar. Somente o usuário "root" poderá logar com uma senha no estado de "lock".
Para desabilitar/trancar, basta usar a chave "-l" ou "--lock":
Ex1: passwd -l hugo
Para habilitar/destrancar, basta usar a chave "-u" ou "--unlock":
Ex2: passwd -u hugo

Uma outra alternativa para desabilitar um usuário de logar é colocar o sinal "#" como o primeiro caractere na entrada do usuário em "/etc/passwd" . O sinal "#" é conhecido como jogo da velha, cerquilha, sustenido, hash mark ou pound sign. Outra maneira também é colocar em "/etc/passwd" o "/bin/false" como interpretador de comando de um usuário, com isso, ele não consiguirá logar. Se for criado o arquivo "/etc/nologin", somente o root poderá logar no sistema e o que estiver nesse arquivo será exibido caso outro usuário tente logar. Também se pode coloca o "!" (exclamação) antes da senha encriptada no arquivo "/etc/shadow" para fazer um lock (os comandos "passwd -l" ou "usermod -L" fazem isso).

Para verificar o status da senha de um usuário utiliza o seguinte comando:
Ex3: "passwd -S hugo".
Para setar o tempo de vida mínimo da senha para 5 dias utilize:
Ex4: "passwd -n 5 hugo".
Para setar o tempo de vida máximo da senha (expiração) para 30 dias utilize:
Ex5: "passwd -x 30 hugo".
chage Modifica as informações de expiração das senhas.
Ex: "chage -d 2010-07-31 -m 3 -M 2 -W 5 -I 1 -E 2010-08-02 hugo":
  • -d | --lastday: terceiro campo das linhas do "/etc/shadow". days since Jan 1, 1970 that password was last changed. Os formatos aceitos são AAAA-MM-DD ou a quantidade de dias em decimal;
  • -m | --mindays: quarto campo das linhas do "/etc/shadow". days before password may be changed;
  • -M | --maxdays: quinto campo das linhas do "/etc/shadow". days after which password must be changed;
  • -W | --warndays: sexto campo das linhas do "/etc/shadow". days before password is to expire that user is warned;
  • -I | --inactive: sétimo campo das linhas do "/etc/shadow". days after password expires that account is disabled. Se for colocado "-1" significa que não existe data de expiração para essa conta, ou seja, o campo relacionado em "/etc/shadow" ficará em branco;
  • -E | --expiredate: oitavo campo das linhas do "/etc/shadow". days since Jan 1, 1970 that account is disabled. Os formatos aceitos são AAAA-MM-DD ou a quantidade de dias em decimal;
  • hugo: nome de usuário;
Com o comando anterior a linha relacionada ao usuário "hugo" no "/etc/shadow" ficaria assim:
"hugo:$1$2n3SYMU/$DHdGOwkqke57IxCtMC3ej.:14821:3:2:5:1:14823:".

Também se poderia usar o comando "chage hugo" que seria exibido um menu iterativo para alteração das informações de senha. Para saber as informações atuais num formato agradável, use a opção "-l | --list".
Ex: "chage -l hugo".

Para setar o tempo de vida máximo da senha (expiração) para 30 dias utilize:
Ex1: "chage -M 30 hugo".
pwconv, pwunconv, grpconv e grpunconv Converte e desconverte as senhas em texto puro que ficavam em "/etc/passwd" para um formato criptografado que fica em "/etc/shadow". Comandos em desuso, pois as senhas por padrão já estão sendo armazenadas criptograficamente. convert to and from shadow passwords and groups
su Muda de usuário:
  • su: muda para o "root". Não preserva as variáveis de ambiente do usuário atual;
  • su hugo: muda para o "hugo". Não preserva as variáveis de ambiente do usuário atual;
  • su - | -l | --login : muda de usuário, como se estiver logando diretamente nele, ou seja, como se estivesse no prompt do getty. Não preserva ambiente do usuário atual, como as variáveis de ambiente, os comandos já digitados (history), diretório atual etc. É oposto do "su -p". Ao usar o "-", ele deve ser a última opção especificada. As outras (-l e --login) não tem essa restrição/ordem;
  • su -p | -m | --preserve-environment: muda de usuário, mas preserva ambiente do usuário atual como as variáveis de ambiente, os comandos já digitados (history), diretório atual etc. É o oposto do "su -";
  • su -c | --command route: executa o comando "route" como "root". Contudo, mantém o login atual;
  • su -c | --command "route -n": idem;
  • su -c | --command "route -n" &: idem, só que em background;
  • su -s | --shell /bin/csh -c | --command "route -n" &: idem, só que especifica o shell a ser usado para executar o comando "route";

    Ao usar o comando "su" sempre será solicitada a senha do usuário de destino (geralmente a do "root");
sudo Executa um comando como um outro usuário:
  • sudo route -n: executa o comando como "root";
  • sudo -u hugo route -n: executa o comando como "hugo";
  • sudo -l: mostra os direitos de execução do usuário atual;
  • sudo -b updatedb: executa o comando em background;

    Ao usar o comando "sudo", por padrão, sempre será solicitada a senha do usuário atual;
/etc/sudoers Arquivo de configuração do sudo, seguindo o padrão:
username hostname=(as_user) commands ;
username hostname=(as_user:as_group) commands (mais atual);
    Exemplos:
  • hugo ALL=(ALL) ALL: permite que o usuário "hugo" execute em qualquer máquina, com qualquer usuário, qualquer comando;
  • hugo ALL=(root) ALL: permite que o usuário "hugo" execute em qualquer máquina, como root, qualquer comando;
  • hugo ALL=ALL: idem;
  • %suporte ALL=(ALL) ALL: permite que o grupo "suporte" execute em qualquer máquina, com qualquer usuário, qualquer comando;
  • %suporte ALL=NOPASSWD: ALL permite que o grupo "suporte" execute em qualquer máquina, com qualquer usuário, qualquer comando sem precisar autenticar;
  • %suporte ALL=ALL permite que o grupo "suporte" execute em qualquer máquina, como root, qualquer comando;
  • hugo SERVERS=(jose) /sbin/route, (root) /bin/kill permite que o usuário "hugo" na máquina "SERVERS" (na verdade isso é um alias e é explicado logo abaixo) execute comando "/bin/route" como "jose", mas execute /bin/kill como "root";

    Existem 4 alias que pode ser utilizados: User_Alias, Runas_Alias, Host_Alias e Cmnd_Alias onde cada um está relacionado a um alias/apelido (ex: WEBMASTERS) e uma lista que o representa (ex: hugo, jose, joao):
    Ex1: User_Alias WEBMASTERS = hugo, jose, joao
    Ex2: Host_Alias SERVERS = srv01, srv02, srv03
    Ex3: Runas_Alias DB = juvenal, bill, linus
    Ex4: Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown, /sbin/poweroff;

  • hugo SERVERS=(jose) /sbin/route, (root) /bin/kill, /sbin/ifconfig permite que o usuário "hugo" na máquina "SERVERS" execute comando "/sbin/route" como "jose", mas execute "/bin/kill" e "/sbin/ifconfig" como "root";
  • hugo SERVERS=NOPASSWD: (jose) /sbin/route, (root) /bin/kill, /sbin/ifconfig idem, só que não será necessário se autenticar;

    Ao usar o comando "sudo", por padrão, sempre será solicitada a senha do usuário atual;

    Obs: o campo "hostname" é necessário, pois em alguns caso o arquivo "sudoers" é compartilhado entre diversos servidores de rede ;
GRUPOS Descrição
addgroup Adiciona grupos no sistema. Ex: addgroup financeiro. Ao adicionar um grupo os arquivos "/etc/group" e "/etc/gshadow" serão modificados.
groupadd Adiciona grupos no sistema. Ex: groupadd financeiro. Ao adicionar um grupo os arquivos "/etc/group" e "/etc/gshadow" serão modificados. Ao adicionar grupos, nenhuma mensagem é mostrada na tela. Cai na LPI-1.
delgroup Deleta grupos do sistema. Ex: delgroup financeiro. Ao remover um grupo os arquivos "/etc/group" e "/etc/gshadow" serão modificados.
groupdel Deleta grupos do sistema. Ex: groupdel financeiro. Ao remover um grupo os arquivos "/etc/group" e "/etc/gshadow" serão modificados. Ao remover grupos, nenhuma mensagem é mostrada na tela. Cai na LPI-1.
groupmod Modifica as definições de grupos.
Ex1: "groupmod suporte -n manutencao" --> muda o nome do grupo "suporte" para "manutencao".
Ex2: "groupmod manutencao -g 5555" --> modifica o GID do grupo "manutencao" para "5555".
Ex3: "groupmod -p 1234 manutencao" --> modifica a senha do grupo "manutencao" para "1234" sem utilizar criptografia no arquivo "/etc/gshadow".
gpasswd Modifica a senha de grupos utilizando criptografia. O algoritmo padrão é o DES, mas existem os de hash (MD5, SHA256 e SHA512).
Ex1: "gpasswd suporte" --> modifica o arquivo "/etc/gshadow".
groups Mostra os grupos que o usuário corrente pertence.
id Mostra a identificação númerica (uid e gid) e nomial (nome do usuário e dos grupos) do usuário corrente. Duas chaves interessante seriam -g | –group e -G | --groups que mostram o grupo e os grupos do usuário corrente.
EMPACOTAMENTO E COMPACTAÇÃO Descrição
tar Empacotador de arquivos. Em outras palavras, ele guarda dentro de um mesmo pacote (arquivo) vários outros arquivos. O "tar" é somente um empacotador e NÃO um compactor como muitos pesam. Contudo, se pode usa a opção "-z" (entre outras) para compactar. Nesse caso dessa opção está se usado o "gzip" para compactar.

tar -zcvf destino.tar.gz origem (empacotando com o "tar" e compactando com o "gzip")

tar -zcvf etc.tar.gz /etc/* (empacotando e compactando o diretório "/etc" no arquivos "etc.tar.gz")

tar -zcvf etc.tar.gz /etc/ (idem)
FILTROS Descrição
xargs O "xargs" lê itens da entrada padrão, delimitados por espaços em branco ou linhas novas, e executa um comando (padrão é o /bin/echo) uma ou mais vezes, seguidos pelos itens lidos da entrada padrão. Linhas em branco na entrada padrão são ignoradas.

-0 (devido aos nomes de arquivos Unix poderem conter espaços em branco e linhas novas, esse padrão do "xargs" é problemático. Isso porque o "xargs" interpretará incorretamente esses espaços em branco e linhas novas. Para previnir isso existe a opção "-0". Ver o manual do "xargs" para mais detalhes)

EXEMPLOS
# find / -maxdepth 1 | xargs ls -lhd

# find / -maxdepth 1 -group root ! -iname tmp | xargs ls -lhd
paste O "paste" faz união de linhas entre arquivos.

-s | --serial (transforma linhas em TABs)

-d | --delimiters (delimitadores)

EXEMPLOS
# paste -s /etc/passwd (serializa as linhas, ou seja, troca linhas por TABs)

# paste -s -d "|" /etc/passwd (idem, só que troca linha pelo caractere "|")

# paste /etc/passwd /etc/shadow (faz a união linha a linha desses dois arquivos)

# paste /etc/passwd /etc/shadow /etc/group (faz a união linha a linha desses três arquivos)

# cat /etc/passwd | cut -f3 -d: | paste -s -d '+'

# cat /etc/passwd | cut -f3 -d: | xargs | tr ' ' '+' (idem)
grep Usado para encontrar um padrão/expresão no conteúdo de arquivos.

-l | --files-with-matches (mostra somente o arquivo onde a padrão/expressão foi encontrado)

EXEMPLOS
# grep -l alias /root/.* (nesse caso mostrará somente o arquivo que contém a expressão "alias")
cut Usado para delimitar, em cada linha no conteúdo de arquivos, a procura.

-b, --bytes=LIST (mostra o(s) byte(s) de cada linha de um arquivo)

EXEMPLOS
# cut -b 1 /etc/passwd (nesse caso mostrará somente o primeiro bytes do "/etc/passwd")

# cut -c 1 /etc/passwd (idem, só que tabs e espaços serão tratados como caractere)
TERMINAL Descrição
tput Usado para manipular o terminal.

cup row column (coloca o prompt do terminal na linha row e coluna column)

reset (redimenciona o terminal de acordo com os rs1, rs2, rs3, rsf)

init (redimenciona o terminal de acordo com outros parâmetros)

longname (see)

EXEMPLOS
# tput cup 10 5 (coloca o prompt do terminal na linha 10 e coluna 5)
wget Download em modo texto.
ROTEAMENTO Descrição
route Comando que faz o roteamento estático no sistemas Unix-Like, mostrando e manipulando a tabela de roteamento IP. Se utilizar só esse comando é mostrada a tabela de roteamento.
netstat -r idem.
route -n idem, só que mostra o IP em vez de nome.
netstat -nr idem.
ip route show idem.
route add default gw 172.16.200.1 eth0

route add -net default gw 172.16.200.1 eth0

route add -net default gw 172.16.200.1 dev eth0

route add -net 0.0.0.0 gw 172.16.200.1 dev eth0
Os quatro comandos fazem a mesma coisa. Ele adiciona um rota (route add) dizendo que qualquer tráfego em direção a Internet (default) tem como gateway (gw) o IP 172.16.200.1 e a interface da máquina local que tal trafégo deve sair é a eth0. O "add" significa adicionar, "-net" rede, "gw" gateway, "dev" device. As vezes não há necessidade de colocá-los. O "default" ou "0.0.0.0" significa que qualquer tráfego que não se encaixe em algum das rotas estáticas deve-se ser enviado para ele. Em outras palavras é a rede quando a tabela de roteamente não sabe para onde enviar tal tráfego, ela manda para o outro gateway resolver o problema. Esse outro é conhecido como "default gateway" ou "gateway padrão". O "default gateway" geralmente é o roteador que sai para a Internet. O único comando que não funcionará iguais aos outros é "route add 0.0.0.0 gw 172.16.200.1 eth0 ", pois o Genmask ficará 255.255.255.255.
route add -net 192.168.1.0 netmask 255.255.255.0 gw 172.16.200.1 dev eth0

route add -net 192.168.1.0/24 gw 172.16.200.1 dev eth0

route add -net 192.168.1.0/24 gw 172.16.200.1 eth0

route add -net 192.168.1.0/24 gw 172.16.200.1

ip route show

ip route ls ip route add 192.168.1.0/24 via 172.16.200.1 dev eth0

ip route add 192.168.1.0/24 via 172.16.200.1

ip route add 192.168.1.0/255.255.255.0 via 172.16.200.1
O comando adiciona (add) uma rota estática (route), dizendo que todo tráfego em direção a rede (-net) 192.168.1.0 com a mascara (netmask) 255.255.255.0 deve ser encaminhado para o gateway (gw) IP que tem o IP 172.16.200.1 e sai pela dispositivo (dev) local de rede chamado eth0.
route add -net 192.168.1.0/24 gw 172.16.200.1 dev eth0 Idem, só que usa uma outra notação para definir a máscara de sub-rede.
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0 Esse comando diz que todo tráfego em direção a rede 192.168.1.0 com netmask 255.255.255.0 tem que ser enviado para o dispositivo "eth0". Geralmente esse tipo de roteamente já é configurado automaticamente ao definir um IP para uma interface de rede, mas em alguns momentos essa rota pode ser perdida. Então, aí está a maneira de como colocá-la de volta.
route add -host 192.168.1.31 gw 172.16.200.1 dev eth0 Esse comando diz que todo tráfego em direção ao host 192.168.1.31 tem que ser enviado para o gateway 172.16.200.1 pelo dispositivo "eth0". A opção "-host" não aceita "netmask".
route add -host 192.168.1.31 dev eth0 Esse comando diz que todo tráfego em direção ao host 192.168.1.31 tem que ser enviado para o dispositivo "eth0". A opção "-host" não aceita "netmask".
INFORMAÇÕES DE USUÁRIOS LOGADOS Descrição
who .
w .
users .
ulimit Comando que mostra e configura limites de uso de recursos do sistema operacional que são utilizados pelos usuários. Esse é um comando build-in, ou seja, nativo do shell. Na verdade, esse comando pode controlar os recursos disponíveis para processos iniciados pelo shell. Ao executá-lo podem aparecer três valores: soft, hard ou unlimit. Para saber mais digite “help ulimit”.

Ex: ulimit (mostra limites (restrições) do sistema)

Ex: ulimit -a (idem, só que detalha todos o limites do sistema, inclusive mostrando as unidades (bytes, blocos, seconds etc) usada para cada limite)

Ex: ulimit -f (mostra o tamanho máximo dos arquivos. A unidade aqui [e blocos, ou seja, se deve verificar quantos bytes tem um bloco no seu filesystem)

Ex: ulimit -f 100 (especifica para 100 blocos o tamanho máximo dos arquivos)

Ex: ulimit -Sf 100 -Hf 200 (idem, definindo os limites de Soft e Hard)

Ex: ulimit -u (mostra o número máximo de processos que cada usuário pode abrir)

Ex: ulimit -u 100 (especifica o número máximo de processos por usuário)

Ex: ulimit -Su 100 -Hu 200 (idem, definindo os limites de Soft e Hard)

Ex: ulimit -n (mostra o número máximo de arquivos abertos)

Ex: ulimit -n 300 (especifica o número máximo de arquivos abertos)

Ex: ulimit -v 128000 (especifica o número máximo em Kbytes de memória virtual que pode ser usado. Nesse caso 128MB)

Ex: /etc/security/limits.conf (arquivo que define os limites dos sistema para cada usuário. Dois limites interessantes que podem ser configurados aqui é o número máximo de logins efetuados no sistema "maxsyslogins" e o número máximo de logins do mesmo usuário "maxlogins"). Segue o padrão:

domain type item value

hugo hard maxlogins 1

ftp hard nproc 0
SYSTEM TIME Descrição
date Mostra ou modifica a data e a hora.

Ex: date 12302359 (MMDDhhmm (MêsDiaHoraMinuto). Nesse exemplo, a data e hora vão ser mudados para o mês 12, dia 30, 23 horas e 59 minutos)

Ex: date 123023592012 (MMDDhhmmAAAA -> MêsDiaHoraMinutoAno). Nesse exemplo, a data e hora vão ser mudados para o mês 12, dia 30, 23 horas, 59 minutos e ano 2012)

Ex: date 12302012 (MMDDAAAA -> MêsDiaAno). Nesse exemplo, a data vai ser mudada para o mês 12, dia 30 e ano 2012)

Ex: date -s | --set 11:01:09 (hh:mm:ss -> HoraMinutoSegundo)

Ex: date -s | --set 11:01 (hh:mm -> HoraMinuto)

Ex: date -s Qua ( -> Muda o dia da semana)

Ex: date -s "11/25/2012 14:00" ( -> muda a data e hora)

Ex: date -s "-1 hours" ( -> diminui 1 hora)
hwclock Mostra e configura o relógio do hardware/BIOS.

Ex: hwclock -> exibe a data e hora do hardware/BIOS;

Ex: hwclock --utc -> idem;

Ex: hwclock --debug -> idem, mas no modo debug;

Ex: hwclock --localtime -> exibe a data e hora do meridiano de Greenwich;

Ex: hwclock -w -> grava a hora do sistema operacional no hardware/BIOS;
KERNEL Descrição
apt-get install kernel-image-xxxxx instala o kernel e é no /boot/ o local onde fica tal kernel depois da instalação. Observe que esse kernel que está sendo instalado e que vai para o /boot/ é o kernel pre-compilado.
apt-get install linux-headers instala os sources/código fonte do kernel e eles ficam em “/usr/src/” do Debian. Um programa que utiliza os headers do Kernel [e o VMWare.
yum install kernel-devel instala os sources/código fonte do kernel e eles ficam em “/usr/src/” do RedHat .
PROCESSOS, CONEXÕES, BIBLIOTECAS etc Descrição
ps x
ldd Mostra as bibliotecas compartilhadas que um binário depende.
Ex: ldd /sbin/ifconfig
Ex: ldd /usr/sbin/named
lsof Mostra detalhes de arquivos abertos por daemon e processos. Ótimo comando para verificar com mais detalhes as conexões abertas. Isso porque ao abrir conexões são acessados vários arquivos (bibliotecas, logs, dispositivos, executáveis, diretórios etc) e com o "lsof" se pode saber quais foram, qual o usuário, tipo, PID etc. Por exemplo, vamos supor que você utilizou o comando “netstat -tunap” e viu que a porta 888 está aberta e existem várias conexões estabelecidas nela. Contudo, não está muito claro que serviço ou processo está rodando nessa porta. Então, use o lsof (ex: lsof | grep –i processo) para descobrir:

Ex: lsof -u hugo especifica o usuário a ser procurado

Ex: lsof -c ssh -> especifica o processo/comando a ser procurado

Ex: lsof /home/hugo -> verifica dentro do diretório o uso de algum arquivo

Ex: lsof -i -> comando usado para listar os pseudo arquivos associados com conexões de rede
REDE Descrição
ping Serve para testar a comunicação entre dois host através do ICMP (request e reply).

Ex: ping 10.1.1.1

Ex: ping -c 5 10.1.1.1 -> faz 5 pings

Ex: ping -b 172.16.200.255 -> permite pingar em endereços de broadcast. O ping para saber se um endereço é broadcast, ele verifica a tabela de roteamento da própria máquina.

Ex: ping -f 10.1.1.1 -> flood ping. Faz uma inundação de pings.

Ex: ping -i 3 10.1.1.1 -> intervalo em segundo para cada ping.

Ex: ping -R 10.1.1.1 -> mostra a rota que o ping usará.
ftp FTP (File Transfer Program/Protocol).

Ex: ftp 10.1.1.1

Ex: ftp -p 10.1.1.1 -> modo passivo. Geralmente usado quando a conexão tem que atravessar um firewall que faz NAT.
dig Faz perguntas DNS. Comandos como "nslookup", "host" e "dig" não fazem cache no cliente, isso é de extrema importância para pegar sempre as informações atuais. Diferentemente do comando "ping" que sempre faz cache no cliente.

dig debian.org -> faz pergunta detalhada ao DNS (/etc/resolv.conf) sobre o "debian.org"

dig debian.org 10.1.1.1 -> faz pergunta detalhada ao DNS sobre o "debian.org" e "10.1.1.1"

dig debian.org @10.1.1.1 -> faz pergunta detalhada ao DNS 10.1.1.1 sobre o "debian.org"

dig MX debian.org -> faz pergunta detalhada ao DNS sobre os MX do "debian.org"

dig -x 192.168.1.2 -> faz pergunta reversa (PTR) detalhada ao DNS sobre o IP "192.168.1.2"

dig NS debian.org -> faz pergunta detalhada ao DNS sobre os NS do "debian.org"

dig -> mostra informações sobre o DNS ROOT

dig +short debian.org -> faz pergunta ao DNS (/etc/resolv.conf) sobre o "debian.org"

dig +short MX debian.org -> faz pergunta ao DNS sobre os MX do "debian.org"

dig +short +identify MX debian.org -> idem, mas informa o servidor DNS que foi pesquisado

dig +nocmd +nocomments +nostats +noquestion MX debian.org -> idem, mas retira todos os "lixos".
nslookup Faz perguntas DNS. Comandos como "nslookup", "host" e "dig" não fazem cache no cliente, isso é de extrema importância para pegar sempre as informações atuais. Diferentemente do comando "ping" que sempre faz cache no cliente.

nslookup debian.org -> faz pergunta ao DNS (/etc/resolv.conf) sobre o "debian.org"

nslookup debian.org 10.1.1.1 -> faz pergunta ao DNS 10.1.1.1 sobre o "debian.org"

nslookup -q=any debian.org -> faz pergunta detalhada ao DNS sobre o "debian.org"

nslookup -q=mx debian.org -> faz pergunta detalhada ao DNS sobre o MX do "debian.org"

nslookup -q=ns debian.org -> faz pergunta detalhada ao DNS sobre o NS do "debian.org"

nslookup -> entre no ambiente "nslookup" para realizar perguntas DNS.
host Faz perguntas DNS. Comandos como "nslookup", "host" e "dig" não fazem cache no cliente, isso é de extrema importância para pegar sempre as informações atuais. Diferentemente do comando "ping" que sempre faz cache no cliente.

host debian.org -> faz pergunta ao DNS (/etc/resolv.conf) sobre o "debian.org"

host debian.org 10.1.1.1 -> faz pergunta ao DNS 10.1.1.1 sobre o "debian.org"

host -a debian.org -> faz pergunta detalhada ao DNS sobre o "debian.org"

host -v debian.org -> faz pergunta mais detalhada ao DNS sobre o "debian.org"

host -t AXFR debian.org -> faz pergunta ao DNS sobre o "debian.org", mostrando todos os registros inseridos na zona (debian.org). Na verdade, essa opcao faz uma transferencia de zona, utilizando inclusive o TCP na porta 53 para isso.

host -t IXFR debian.org -> idem, so que num formato mais proximo da linguagem humana.

host -t MX debian.org -> faz pergunta ao DNS sobre o MX do "debian.org"

host -t NS debian.org -> faz pergunta ao DNS sobre o NS do "debian.org"

host -t A debian.org -> faz pergunta ao DNS sobre os A do "debian.org"

host -t SOA debian.org -> faz pergunta ao DNS sobre os SOA do "debian.org"

host -t TXT debian.org -> faz pergunta ao DNS sobre o TXT do "debian.org". O TXT é um registro relacionado ao SPF que provê mais segurança ao transmitir e-mails.

host -t SPF debian.org -> faz pergunta ao DNS sobre o SPF do "debian.org". O SPF provê mais segurança ao transmitir e-mails. O registro TXT e SPF são equivalente, a única diferença é que o SPF é mais atual. Sempre é um boa prática colocar os dois nos servidores DNS.

host -t PTR 128.31.0.51 -> faz pergunta ao DNS sobre os PTR do IP "128.31.0.51". O PTR sempre trabalha com IP.
resolveip Faz perguntas ao DNS.

resolveip debian.org -> faz pergunta ao DNS (/etc/resolv.conf) sobre o "debian.org"

resolveip debian.org, www.google.com.br www.hugoazevedo.eti.br www.globo.com -> faz pergunta ao DNS (/etc/resolv.conf) sobre o "debian.org", "www.google.com.br", "www.hugoazevedo.eti.br" e "www.globo.com".

resolveip 128.31.0.51 -> faz pergunta ao DNS sobre os PTR do IP "128.31.0.51". O PTR sempre trabalha com IP.
whois Faz perguntas DNS e muito mais.

whois debian.org -> faz pergunta ao DNS sobre o "debian.org" e traz muitas outras informações que são opcionais como as informações do proprietário e de gerenciamento.
traceroute, tracert,
traceproto ou traceroute6
exibe informações das rotas que o pacote passa.
traceroute debian.org

traceroute 10.1.1.1 -> para obter as informações das rotas até alcançar o IP 10.1.1.1, usará a port 33434 e o UDP

traceroute -p 80 10.1.1.1 -> idem, só que usará a port 80 e o UDP

traceroute -I 10.1.1.1 -> idem, só que usará o ICMP

traceroute -I -n 10.1.1.1 -> idem, só que não faz resolução de nome - DNS
tracepath
tracepath6
exibe informações das rotas que o pacote passa e o MTU (Maximum Trasmission Unit) dos roteadores.
tracepath debian.org

tracepath 10.1.1.1

tracepath -n 10.1.1.1 -> não faz resolução de nome - DNS
mtr [E um "traceroute" em tempo real.
ifconfig

ip address
exibe informações ou configura as interfaces de rede. Ao levandar ou derrubar um interface de rede, o DHCP não é consultado.
ifconfig

ifconfig

ifconfig eth0

ifconfig eth0:0

ifconfig eth0 172.16.200.22 netmask 255.255.255.0

ifconfig eth0:0 172.16.200.22 netmask 255.255.255.0

ifconfig eth0:0 172.16.200.22 netmask 255.255.255.0 broadcast 172.16.200.255

ifconfig eth0:0 172.16.200.22 netmask 255.255.255.0 broadcast 172.16.200.255 up -> idem

ifconfig eth0 down

ifconfig eth0:0 down

ifconfig eth0 up

ifconfig eth0:0 up

ifconfig eth0 mtu 1492

ifconfig eth0 mtu 1492 up --> idem

ip address show

ip address ls

ip address add 172.116.200.22/30 dev eth0 | ip address del 172.116.200.22/30 dev eth0

ip address add 172.116.200.23/30 dev eth0 label eth0:0 | ip address del 172.116.200.23/30 dev eth0 label eth0:0

ip address add 172.116.200.22 brd + dev eth0 -> VER

ip address add 172.116.200.22 brd + dev eth0 label eth0:0 -> VER
ifup / ifdown Levanta ou derruba uma interface de rede. Ao levandar ou derrubar um interface de rede, o DHCP é consultado.

ifdown eth0

ifup eth0
ipmaddr Mostra os enderecos fisico (MAC) da interfaces de rede, enderecos de multicast etc.
mii-tool Ferramenta muito boa para mostrar informacoes sobre as interfaces de rede e para configura-las.
ethtool Ferramenta muito boa para mostrar informacoes sobre as interfaces de rede e para configura-las.
plipconfig Ferramenta para configurar dispositivos PLIP.
iptunnel Configuracoes de tuneis.
netstat Status das conexões de rede.

netstat -tunap - conexões ativas (-a) ALL

netstat -tunlp - conexões aberta (-l) LISTEN
iptraf [E um excelente visualizador do que est[a acontencendo nas interfaces de rede em tempo real. Perfeito para descobrir onde o gargalo de rede est[a ocorrendo.
nmap Scanner de portas e auditor de rede e segurança.

nmap 10.1.1.1 - verifica quais portas estão abertas

nmap -O 10.1.1.1 - idem, mas verifica também qual é o sistema operacional, kernel, uptime etc.

nmap -sP 172.16.200.0/24 - verifica quais hosts estão on-line na rede especificada.

nmap -p 80,443 10.1.1.1 - especificando as portas a serem procuradas.

nmap -sV 10.1.1.1 - verifica quais portas estão abertas e as versões dos protocolos/programas que as abrirão.
chkconfig habilita ou desbilita serviços/daemons a serem iniciados/startados durante a inicialização do sistema.

chkconfig -l | --list -> lista.

chkconfig klogd on -> habilita.

chkconfig klogd off -> desabilita.
x x
x x
x x
 
 


Hugo Azevedo de Jesus
ETI - Especialista em Tecnologia da Informação