Fundamentos do sistema Linux - comandos do Linux Autor: Davidson Rodrigues Paulo <davidsonpaulo at gmail.com> Data: 28/05/2006 Manipulação de arquivos e diretórios ls O comando ls exibe arquivos ou o conteúdo de um ou vários diretórios. $ ls [opções] [arquivo] -a: Exibe arquivos ocultos; -A: Não exibe os diretórios. e..; --author: Mostra o autor (criador) de cada arquivo; -b: Exibe caracteres de escape octais no lugar dos caracteres que não podem ser vistos, como o espaço em branco; --block-size=[tamanho]: Exibe o tamanho dos arquivos em múltiplos do número de bytes especificado nesse parâmetro; -B: Não exibe arquivos de backup (terminados com ~); -c: Lista os arquivos por ordem da data da última modificação; -C: Exibe a listagem em colunas; --color=[quando]: Controla quando as cores devem ser usadas para distinguir os tipos de arquivos. Os valores aceitos são: never: Não usa cores pra nenhum tipo de arquivo; always: Usar cores para todo tipo de arquivo; auto: Seleciona quais arquivos serão exibidos em cores. -d: Exibe o diretório especificado, e não o seu conteúdo; -f: Ativa os parâmetros -a e -U e desabilita os parâmetros -l, -s e -t; -F: Acrescenta um caracter gráfico ao final de cada arquivo para identificar o seu tipo; -G: Não exibe informações dos grupos a que os arquivos pertencem; -h: Exibe os tamanhos dos arquivos em uma forma legível (2K, 21M, 1G); --si: Semelhante ao -h, mas usa múltiplos de 1000 bytes ao invés de 1024; -H: Exibe os arquivos para os quais os links simbólicos apontam, ao invés de listar só o link;
-i: Exibe o número de índice (I-node) dos arquivos; -I: Não exibe entradas que contiverem o padrão informado; -k: Equivalente a --block-size=1k; -l: Listagem detalhada, com diversas informações sobre os arquivos; -L: Quando listar links simbólicos, lista o local para onde o link aponta, e não o link propriamente dito; -m: Lista os arquivos em linhas, separando cada item com uma vírgula; -n: O mesmo que o parâmetro -l, mas mostra as UID's e GID's ao invés dos nomes dos grupos; -o: O mesmo que o parâmetro -l, mas não exibe as informações sobre o grupo; -p: Adiciona um caracter para identificar o tipo do arquivo. O mesmo que -F, mas não utiliza o caracter * (asterisco); -Q: Exibe os nomes das entradas entre " (aspas duplas); -r: Organiza a lista na ordem inversa; -R: Lista recursivamente o conteúdo dos diretórios e subdiretórios do diretório atual; -s: Exibe o tamanho de cada arquivo, em múltiplos de blocos (especificados com o parâmetro --block-size=[tamanho]); -S: Organiza a lista de acordo com o tamanho do arquivo; -t: Lista pela data de modificação; -u: Organiza a listagem pela data do último acesso; -U: Não organiza a listagem, exibindo os arquivos na seqüência em que estão gravadas no diretório; -w: Ajusta o tamanho da tela para o número de colunas especificado; -X: Organiza a listagem em ordem alfabética; -1: Lista apenas um arquivo por linha; Em [arquivo], devemos informar quais arquivos (arquivos, diretórios, dispositivos, links, etc.) devem ser listados. Se não for informado nada, será listado o conteúdo do diretório atual (.). Pode-se também utilizar curingas para filtrar os arquivos que serão listados. Por exemplo, podemos usar ls *.sxw para listar somente os arquivos terminados em.sxw. cd O comando cd, sigla de change directory (selecionar diretório), serve para acessar um determinado diretório. $ cd [diretório] Lembrando a lista dos diretórios do sistema:..: Diretório acima do atual. Se você estiver no diretório /home/aluno/ e quiser acessar o diretório /home/, digite cd... Se quiser acessar o diretório /home/davidson/, digite cd../davidson/; ~: Diretório pessoal do usuário atual, ou seja, /home/[usuário]/;
-: Diretório anterior. Se você estava no diretório /etc/ e mudou para o diretório /home/, digite cd - para voltar ao diretório /etc/. Se for usado sem parâmetro, ou seja, apenas cd, você será redirecionado para o diretório pessoal do usuário atual. mkdir O comando mkdir, abreviatura de make directory (criar diretório), é usado para criar um novo diretório. $ mkdir [opções] [novo diretório] -m: Especifica as permissões que do novo diretório terá; -p: Cria todos os diretórios e subdiretórios necessários; -v: Exibe uma mensagem para cada diretório criado. Em [novo diretório] devemos colocar os diretórios que queremos criar. Não é necessário digitar o caminho completo, caso queiramos criar um diretório dentro do diretório atual. Podemos criar vários diretórios com um único comando, bastando separá-los com espaços. Se quiser que o nome do novo diretório tenha espaços em branco, escreva-o entre aspas duplas, dessa forma: $ mkdir /home/davidson/"diretório com espaços em branco" rmdir Esse comando é utilizado para apagar um diretório vazio. $ rmdir [opções] [diretório] -p: Remove os diretórios-pai do diretório selecionado, se possível. Assim, o comando rmdir -p a/b/c/ vai apagar o diretório a/b/c/, depois o diretório a/b/ e por fim o diretório a/, se possível; -v: Mostra os detalhes da remoção dos diretórios.
Podem ser especificados mais de um diretório por vez. O rmdir só remove diretório vazios. pwd O pwd, sigla de print working directory (exibir diretório de trabalho), exibe o diretório atual. É equivalente a echo $PWD. Uso: $ pwd cat O comando cat concatena arquivos e imprime na saída padrão (exibe na tela). Em arquivos, usamos o cat para listar seu conteúdo na tela. Com o uso de direcionadores, podemos usá-lo para unir diferentes arquivos em um só, dentre outra funções. $ cat [opções] [arquivo] -b: Numera as linhas, com exceção das linhas em branco; -E: Mostra um "$"? (cifrão) para indicar fim de linha; -n: Numera todas as linhas, incluindo as em branco; -s: Não mostra mais do que uma linha em branco. Se houver duas ou mais linhas em branco consecutivas, elas são truncadas e apenas uma é mostrada; -T: Substitui tabulações pelos caracteres "^I"?; -v: Substitui os caracteres não imprimíveis por símbolos, exceto tabulações e final de linha. $ cat [arquivo1 arquivo2 arquivo3... arquivon] > [arquivo] Isso pode ser usado em qualquer tipo de arquivo, inclusive arquivos binários. É prática comum utilizar isso para juntar arquivos de vídeo grandes, como filmes, que muitas vezes são divididos em várias partes. Veja no exemplo abaixo, como unir as 2 partes do filme Matrix em um único arquivo: $ cat the-matrix_part-1.mpeg the-matrix_part-2.mpeg > the-matrix.mpeg Vale lembrar que tal procedimento não é corretamente executado com arquivos AVI.
tac O tac faz o mesmo que o cat, mas exibe o arquivo pela ordem inversa, ou seja, começando pela última linha e terminando com a primeira. Uso: $ tac [arquivo] touch O comando touch é usado atualizar as informações sobre as datas de último acesso e última modificação de um arquivo. $ touch [opções] [arquivo] Se o arquivo não existir, ele é criado, por padrão. Isso faz o touch ser muito utilizado para criar arquivos vazios, através do comando touch [arquivo]. -a: Modifica apenas a data do último acesso; -c: Não cria arquivos, caso eles não existam; -m: Modifica apenas a data de modificação; -t: A data e hora a ser utilizada para o último acesso ou última modificação. O formato utilizado é MMDDhhmm (mês, dia, hora e minuto); cp O cp, abreviação de copy (copiar), é utilizado para copiar arquivos e diretórios de um local para outro, com o mesmo nome ou com nome diferente. $ cp [opções] [origem] [destino] -b: Cria um arquivo dos arquivos de destino se eles estiverem para ser sobrescritos; -P: Quando tratar de links simbólicos, copia o link, e não o local para onde o link aponta; -f: Operação forçada. Se um dos arquivos de destino não puder ser aberto, apaga-o e repete a operação;
-i: Pede confirmação antes de sobrescrever um arquivo; -L: Quando tratar de links simbólicos, copia o local para o onde o link aponta, e não o link; -p: Preserva as propriedades do arquivo (permissões, dono e datas); --preserve=[propriedade]: Escolhe quais propriedades preservar, separadas por vírgula. Podem ser: mode: Preserva as permissões; ownership: Preserva a informação de dono do arquivo; timestamp: Preserva as datas de acesso e modificação. --no-preserve=[propriedade]: Escolhe quais propriedades não devem ser preservadas. As opções são as mesmas que do parâmetro --preserve; -R ou -r: Modo recursivo, copia todos os arquivos e subdiretórios do diretório especificado. Esse parâmetro deve ser usado para copiar diretórios inteiros; --target-directory=[diretório]: Especifica para qual diretório devem ser copiados os arquivos/diretórios especificados; -u: Copia apenas os arquivos novos. Se um arquivo que estiver sendo copiado já existir no diretório de destino, sua cópia será ignorada; -v: Mostra os detalhes da cópia dos arquivos. Para copiar o arquivo file.gz para o diretório /tmp/: $ cp file.gz /tmp Para para fazer uma cópia do arquivo file.gz com o nome file-copia.gz: $ cp file.gz file-copia.gz Para copiar os arquivos file1, file2 e file3 para o diretório /home/davidson/doc/: $ cp file1 file2 file3 /home/davidson/doc Para copiar o diretório img/ para o diretório /tmp/upload/: $ cp -r img /tmp/upload Para copiar os arquivos file1, file2 e file3 e o diretório img/ para o diretório /tmp/upload/: $ cp -r file1 file2 fil3 img /tmp/upload mv Utilizamos o mv mover ou renomear arquivos.
$ mv [opções] [destino] -b: Cria um backup dos arquivos de destino, se eles forem sobrescritos; -f: Força as operações, sem fazer perguntas caso seja necessário sobrescrever arquivos e outros; -i: Modo interativo, pede confirmação para sobrescrever arquivos; --target-directory=[diretório]: especifica o diretório de destino para os arquivos; -u: Só move os arquivos novos. Se o arquivo que está sendo movido já estiver presente no diretório de destino, ele é ignorado; -v: Mostra os detalhes do processo de movimentação. Para mover o arquivo file1 para o diretório /home/davidson/doc/: $ mv file1 /home/davidson/doc Para mover o diretório /home/davidson/doc/ para /tmp/upload/: $ mv /home/davidson/doc /tmp/upload Para renomear o arquivo package.tar.gz para pacote.tar.gz: $ mv package.tar.gz pacote.tar.gz Para mover o arquivo file1 e o diretório img/ para o diretório /tmp/upload/: $ mv file1 img /tmp/upload rm O rm é utilizado para excluir arquivos. $ rm [opções] [arquivo] -f: Modo forçado, não pede confirmação para realizar as operações; -i: Pede confirmação antes de remover qualquer arquivo; -R, -r: Exclui recursivamente todo o conteúdo do diretório e o próprio diretório. Quando quiser excluir um diretório que não está vazio, utilize esse parâmetro; -v: Mostra os detalhes das exclusões.
cmp Esse comando é utilizado para comparar dois arquivos e mostrar a primeira diferença entre eles. Use para certificar-se de que dois arquivos possuem ou não o mesmo conteúdo. $ cmp [opções] [arquivo1] [arquivo2] -b: Imprime os bytes que são diferentes entre si; -i [n]: Não considera os primeiros [n] bytes de cada arquivo; -l: Mostra os número dos bytes e os valores diferentes; -s: Não mostra nenhum detalhe, apenas sai com status 1 se alguma diferença for encontrada. Vamos comparar os arquivos file1 e file2: $ cmp file1 file2 file1 file2 differ: byte 10, line 2 diff Esse comando compara dois arquivos de texto e mostra as diferenças entre eles. $ diff [opções] [arquivo1] [arquivo2] -i: Ignora as diferenças de letras maiúsculas/minúsculas; -E: Ignora as diferenças de tabulação; -b: Ignora diferenças na quantidade de espaço em branco; -w: Ignora qualquer espaço em branco; -B: Ignora linhas em branco a mais ou a menos; -a: Compara os arquivos como arquivos de texto, ainda que não sejam; -u [n]: Mostra [n] linhas do conteúdo final do arquivo1, adicionadas as diferenças do arquivo2; -q: Mostra apenas se o conteúdo dos arquivos são ou não diferentes;
-y: Mostra os arquivos em duas colunas, indicando as diferenças; -t: Expande as tabulações, convertendo-as em espaços, na saída; -r: Compara recursivamente todo o conteúdo de um diretório; -S [arquivo]: Quando comparar diretórios, inicia a comparação pelo arquivo especificado. Vamos considerar os arquivos file1 e file2, com o seguinte conteúdo: $ cat file1 5 f j 33 diferença 2 a c 1 1 t 4 f 6 b c _ 10 i r 3 $ cat file2 5 f j 33 2 a c 1 1 t 4 f 6 b c _ 10 i r 3 outra diferença Aplicando o diff nos dois arquivos, temos o seguinte retorno: $ diff file1 file2 2d1 < diferença 6a6 > outra diferença O diff exibe informações sobre o que é necessário fazer para que o conteúdo de file1 seja igual ao de file2. Nesse caso, 2d1 quer dizer que a diferença foi encontrada na linha 2, e que é necessário apagar (d = delete) a palavra diferença do arquivo file1. O 6a6 nos diz que a diferença foi encontrada na linha 6, e que é necessário adicionar (a = add) a linha outra diferença no arquivo file1. O parâmetro -y exibe esses parâmetros de forma mais clara: $ diff -y file1 file2 5 f j 33 5 f j 33 diferença < 2 a c 1 2 a c 1 1 t 4 f 1 t 4 f 6 b c _ 6 b c _ 10 i r 3 10 i r 3 > outradiferença
Veja que os sinais de maior e menor (>, <) sempre apontam para a linha que é diferente. Se a diferença estiver no primeiro arquivo, listado à esquerda, ela deve ser apagada. Se a diferença estiver no segundo arquivo, listado à direita, ela deve ser adicionada. O diff, quando usado em conjunto com o utilitário patch, fornece uma grande funcionalidade para atualizações. Um grande exemplo é o código-fonte do kernel Linux. Ao invés de gravar a nova versão do kernel inteira, é possível gravar a penas as diferenças entre eles, algo como: $ diff [kernel-antigo] [kernel-novo] > diferenças.diff E depois utilizar o utilitário patch para gravar as diferenças no kernel-antigo, fazendo-o ficar com o mesmo conteúdo de kernel-novo. A grande vantagem é que não é necessário o usuário baixar todo o kernel, que é muito grande, mas apenas o arquivo com as diferenças, bem pequeno. patch Utilizamos esse comando para atualizar as diferenças geradas através do comando diff. Suponhamos os arquivos file1 e file2, que são diferentes. Podemos criar as diferenças entre os dois arquivos com o comando diff: $ diff file1 file2 > file.diff Esse comando gera um arquivo file.diff com as diferenças entre os arquivos file1 e file2. Podemos agora usar o comando patch para aplicar as diferenças no arquivo file1, fazendo seu conteúdo ficar igual ao de file2: $ patch file1 file.diff $ patch [opções] [arquivo] [arquivo de patch] (para arquivos) $ patch [opções] < [arquivo de patch] (para diretórios) -p [n]: Nível do diretório onde será aplicado o patch. Se [n] for 0, o patch será aplicado no diretório atual. Se for 1, será aplicado no diretório acima (..), se 2, 2 diretórios acima (../..) e assim por diante; -b: Cria cópias dos arquivos originais antes de aplicar o patch; -binary: Lê e grava usando o modo binário; -d [diretório]: Muda para o diretório especificado antes de aplicar o patch; -E: Remove arquivos vazios após a aplicação do patch; -n: Interpreta o arquivo de patch como um.diff normal; -N: Não desfaz patches já aplicados; -s: Modo silencioso, não exibe mensagens de erro; -u: Interpreta o patch em formato unificado. Use isso se o arquivo de patch foi gerado com diff -u.
Manipulação e filtragem de texto more Usamos esse comando para realizar a paginação de arquivos de texto cujo conteúdo não cabe na tela. $ more [opções] [arquivo] -d: Exibe as mensagens [Press space to continue, 'q' to quit] (pressione espaço para continuar, 'q' para sair). Ao se pressionar espaço, a tela rola uma página inteira. Se for pressionada alguma tecla inválida, é exibida a mensagem [Press 'h' for instructions.] (pressione 'h' para instruções.); -l: Evita que ocorram pausas toda vez que seja encontrado o caracter "^L" (alimentação de formulário) no texto; -s: Se houver múltiplas linhas em branco num arquivo, trunca elas em apenas uma; +/[padrão]: Começa a mostrar o texto a partir da primeira linha que contém o padrão informado; +[número]: Especifica qual linha deve ser a primeira a ser mostrada; -[número]: Especifica o tamanho da tela, em linhas. Assim, quando quiser ler um texto muito extenso sem precisar abrir um editor de textos para isso, use o more. O texto será exibido até ocupar a tela inteira, e então aparecerá um prompt escrito "-- More--(xx%)". Presssione Enter para rolar o texto linha por linha. Se quiser cancelar a exibição e voltar para o prompt de comando, pressione "q". É possível usar o more para exibir vários arquivos seqüencialmente. Basta informar todos os arquivos separados por espaço. less O less tem a mesma utilidade do more, com a vantagem de poder rolar o texto exibido para cima e para baixo através do uso dos direcionais, além de contar com um localizador de texto. Para digitar o padrão que você deseja procurar precedido de / (barra). $ less [arquivo] Pesquisa e informações
find O find (procurar, em inglês) é uma ferramenta que utilizamos para localizar arquivos ou diretórios no sistema de arquivos. $ find [opções] [caminho] [expressão] [ações] -amin [n]: Procura arquivos que foram acessados há [n] minutos atrás; -anewer [arquivo]: Procura arquivos que foram acessados depois do [arquivo]; -atime [n]: Procura arquivos que foram acessados há [n] dias atrás; -cmin [n]: Procura arquivos que tiveram seu status alterado há [n] minutos atrás; -cnewer [arquivo]: Procura arquivos que tiveram seu status alterado depois do [arquivo]; -empty: Procura arquivos vazios e que sejam como arquivos regulares ou diretórios; -fstype [tipo]: Procura apenas arquivos que estejam gravados em sistemas de arquivos do tipo especificado; -gid [n]: Procura por arquivos cujo GID seja [n]; -group [grupo]: Procura por arquivos que pertençam ao grupo informado; -inum [n]: Procura o arquivo cujo I-node seja [n]; -mmin [n]: Procura arquivos que foram modificados a [n] minutos atrás; -mtime [n]: Procura arquivos que foram modificados a [n] dias atrás; -name [expressão]: Procura arquivos cujo nome coincida com a expressão digitada; -newer [arquivo]: Procura arquivos que foram modificados depois do [arquivo]; -nouser: Procura arquivos cuja UID não esteja registrada no sistema; -nogroup: Procura arquivos cuja GID não esteja resgistrada no sistema; -path [expressão]: Realiza a busca nos diretórios que coincidam com a expressão informada; -perm [permissões]: Procura arquivos que contenham as permissões informadas, no modo octal ou literal; -perm [-/+][permissões]: Aplica as permissões informadas para os arquivos encontrados; -regex [expressão]: Localiza os arquivos que coincidirem com a expressão regular informada. Lembre-se que expressões simples são diferentes de expressões regulares; -size [n][b/c/k/w]: Localiza os arquivos cujo tamanho seja [n] múltiplos de: b: 512 bytes; c: 1 byte; k: 1 kilobyte; w: 2 bytes. -type [tipo]: Procura por arquivos que sejam de um tipo específico: b: dispositivo de bloco; c: dispositivo de caracter; d: diretório; p: duto nomeado (FIFO); f: arquivo regular;
l: link simbólico; s: soquete. -uid [número]: Procura por arquivos cuja UID seja igual ao [número]; -used [n]: Procura por arquivos que tenham sido acessados [n] dias após seu status ter sido modificado; -user [usuário]: Procura por arquivos cujo dono seja o [usuário]. O caminho é o diretório dentro do qual se vai realizar a busca. Para buscar em todo o sistema de arquivos, deve-se colocar /. Se a busca for feita no diretório atual, pode-se ignorar esse parâmetro. A expressão deve ser o nome do arquivo que se está procurando, com ou sem curingas. Essa expressão pode ser omitida dependendo da opção de pesquisa que se esteja utilizando. Ações: É possível realizar ações com os arquivos encontrados. Isso é muito útil quando é necessário realizar uma determinada operação com todos os arquivos do sistema que tenham determinadas características. As principais ações que podem ser executados são: -exec [comando] [prefixo]{}[sufixo] \;: Executa o comando nos arquivos encontrados. O comando pode ser qualquer programa do sistema. Os caracteres {} são substituídos pelo nome do arquivo encontrado. [prefixo] e [sufixo] são opcionais; -ok [comando] [prefixo]{}[sufixo] \;: O mesmo que -exec, mas pergunta para o usuário antes de executar o comando em cada arquivo. whereis Localiza o executável, arquivo/diretório de configuração, diretórios de bibliotecas, arquivos compartilhados, código-fonte e caminho da página de manual do programa especificado. $ whereis [opções] [programa] -b: Procura apenas pelo executável do programa; -m: Procura apenas pela páginas de manual; -s: Procura apenas pelo diretório do código-fonte; -u: Procura no diretório atual por arquivos que não possuam alguma das entradas informadas.
Para ver a localização dos arquivos e diretórios do GIMP, utilizamos o whereis da seguinte forma: $ whereis gimp gimp: /usr/bin/gimp /etc/gimp /usr/lib/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz Onde: /usr/bin/gimp: Executável; /etc/gimp: Diretório contendo os arquivos de configuração; /usr/lib/gimp: Diretório contendo as bibliotecas; /usr/share/gimp: Diretório contendo os arquivos compartilhados; /usr/share/man/man1/gimp.1.gz: Localização da página de manual. Para saber apenas a localização da página de manual, utilizamos a opção -m: $ whereis -m gimp gimp: /usr/share/man/man1/gimp.1.gz which Exibe o caminho completo para o comando selecionado. $ which [comando] Para sabermos o caminho completo para comando grep, usamos: $ which grep /bin/grep uname Mostra o nome e a versão do kernel em uso. $ uname [opções]
-a: Exibe todas as informações; -s: Exibe apenas o nome do kernel; -n: Exibe apenas o nome da máquina na rede; -r: Exibe apenas a série do kernel; -v: Exibe apenas a versão do kernel; -m: Exibe apenas a arquitetura de hardware; -o: Exibe apenas o nome do sistema operacional. $ uname -a Linux bozo-athlon 2.6.8-2-k7 #1 Mon Jan 24 03:29:52 EST 2005 i686 GNU/Linux reboot Reinicia o computador. Por padrão, somente o root pode executar esse comando. # reboot shutdown Usado para desligar o sistema. Por padrão, somente o root pode executar o shutdown. # shutdown [opções] [hora] [mensagem de alerta] -t [tempo]: Espera o tempo especificado (em segundos) entre matar os processos e mudar de nível de execução; -k: Não desliga o sistema, apenas envia a mensagem de alerta a todos os usuários que estão conectados; -r: Reinicia o sistema após o desligamento; -h: Desliga o computador; -f: Não roda o utilitário fsck no caso de reiniciar o sistema; -F: Força o uso do fsck no reinício do sistema; -c: Cancela um processo de desligamento que esteja sendo executado no momento. Em [hora] você pode especificar o horário exato para o sistema desligar, como 12:34, por exemplo, ou então utilizar +[n], para desligar o sistema daqui a [n] minutos. Para desligar o sistema imediatamente, use +0 ou a palavra now.
A mensagem de alerta será enviada a todos os usuários conectados ao sistema, para que eles tenham tempo de salvar seus arquivos e se desconectarem. O uso mais comum do shutdown é para desligar o sistema o computador imediatamente: # shutdown -h now Utilitários de terminal clear Limpa a tela do terminal. Uso: $ clear history O comando history (histórico) mostra a lista dos últimos comandos executados pelo usuário corrente. Isso é útil quando há a necessidade de executar um comando extenso, com muitos parâmetros, do qual não consigamos nos lembrar, ou para fazer auditoria. $ history [opções] $ history