Theme Support

Unordered List

Recent Posts

Page Rank


PageRank

Comandos básicos Linux


Comandos básicos

A Shell do Linux

Uma shell oferece uma interface em formato texto com o kernel do sistema operativo. Permite realizar as operações mais habituais a um utilizador tal como: operações sobre ficheiros, gestão do sistema operativo, edição de tecto, desenvolvimento de software, etc. Além disso esta tipo de interface apresenta como principal vantagem em relação a uma interface gráfica a possibilidade de correr programas feitos pelo utilizador utilizando uma linguagem de script. Em Linux existem várias shells à disposição do utilizador:
• Bourne shell (sh), a versão original presente em todos os sistemas Linux;
• C shell (csh), uma versão cujo nome deriva do facto de várias características de programação terem uma sintaxe semelhante à da linguagem de programação C. Tornou-se muito popular devido aos mecanismos de alias (permite criar nomes curtos para sequências de comando longas) e history (guarda os comandos executados e permite a sua re-execução);
• Korn shell (ksh) Tornou-se popular porque mantém a compatibilidade de sintaxe com a Bourne shell e ao mesmo tempo apresenta mecanismos de alias e history como a C shell;
• Bourne Again shell (bash) é uma shell que incorpora as características mais úteis da Bourne shell e da C shell. È uma das mais utilizadas comunidade de utilizadores de Linux.

CONFIGURAÇÃO DA BASH

A configuração da Bash vai para além, dos objectivos desta cadeira no entanto, dada a sua importância para quem utilizar o Linux frequentemente, transcreve-se abaixo um pequeno texto retirado http://freeunix.dyndns.org:8088/site2/howto/Bash.shtml, onde também poderá ser encontrada mais informação, por exemplo sobre como mudar o prompt.

OBTER AJUDA

Para além de material impresso (livros, guias de referência, revistas) ou acessível na Internet, poderemos encontrar ajuda sobre os comandos no próprio sistema Linux. Todas as versões do Linux disponibilizam um comando man (abreviatura de manual) que nos permite obter informação detalhada sobre cada comando instalado no sistema. A ajuda obtém-se executando o comando da seguinte forma:
man comando
Este comando gera uma saída semelhante há existente nos manuais originais do sistema operativo. Podemos-nos movimentar dentro do texto do comando man através das teclas:
Enter    Mover o texto uma linha para baixo
Space    Mover o texto uma página para baixo
q        Sair
PageUp   Mover o texto meia página para cima
pageDown Mover o texto meia página para baixo
End      Mover para o fim do texto
Home     Mover para o início do texto
/        Procura a primeira linha onde se encontra o texto escrito a seguir
n        Move-se para a próxima ocorrência do texto procurado
N        Move-se para a ocorrência anterior do texto procurado
Por vezes o mesmo comando poderá ser utilizado como um comando Linux ou, por exemplo, como uma função utilizada num programa em C. Nestes casos para se consultar outra versão do mesmo comando deve-se utilizar o comando:
man n comando
Em que n representa a versão alternativa da ajuda para esse comando.
Algumas distribuições do Linux permitem outras formas de obtenção de ajuda através do comando help que nos dá uma informação mais abreviada e que pode ser usado de duas maneiras:
help comando           ou       comando --help
Pode-se também obter os comandos relacionados com outro comando através da utilização do comando apropos. O exemplo seguinte refere-se à obtenção dos comandos relacionados com o comando pwd.
>apropos pwd
pwd                    (1)     - print name of current/working directory
pwd                    (n)      - Return the absolute path of the current working directory
pwd [builtins]         (1)     - bash built-in commands, see bash(1)
pwdx                   (1)     - report current working directory of a process

SINTAXE GERAL DOS COMANDOS Linux

$ comando [ opção ... ] [ expressão ] [ ficheiro ... ]
$ - prompt, indicativo de que estamos na shell (normalmente diferente para cada shell) [] - indicam que esta parte do comando é opcional ... - indicam que a parte em causa se pode repetir
opção - parâmetros que condicionam a execução do comando expressão - dados necessários para a execução do comando ficheiro - se o comando opera com ficheiro(s) , estes aparecem sempre no fim do comando
Pode-se também executar vários comando seguidos utilizando como separador o “;” (ponto-e-vírgula):
$ comando1 ; comando2 ; ...
A shell executa-os todos, um de cada vez, como se eles tivessem sido introduzidos individualmente. Alguns comandos Linux poderão necessitar de mais caracteres do que aqueles que podem ser apresentados no ecrã. A shell possibilita-nos lidar com este problema de duas maneiras:
• Quando chegarmos ao limite do ecrã, podemos continuar a escrever. Se o ecrã estiver correctamente configurado, os caracteres surgirão automaticamente no início da linha seguinte. Se não estiver correctamente configurado, o cursor ficará no limite do ecrã, e os caracteres serão continuamente apresentados na última posição da linha, à medida que os formos escrevendo. De qualquer maneira, a shell interpretará correctamente os caracteres introduzidos, sejam eles apresentados correctamente ou não;
• Outra maneira é finalizar a linha com um “\” (backslash) mesmo antes de pressionarmos a tecla “ENTER”. O backslash dá indicações à shell de que o comando continua na linha seguinte. Exemplo:
bash> ls \
> -l 
A alteração do prompt para “>” é uma indicação da shell de que está à espera da conclusão do comando.

ALTERAÇÃO DA PASSWORD

Um novo utilizador pode a sua password quando fizer login. Existe um comando que permite fazer essa operação. É o comando passwd.
$ passwd
Changing password for ubuntupt
Old password:
New password
Re-enter password:
$
Sendo um dos pilares da segurança num sistema Linux, existem algumas regras que devem ser usadas na definição das passwords:
• Deve ter no mínimo 6 caracteres e existe um número máximo de caracteres que são considerados; • Deve ser uma combinação de letras e números; Não pode ser o username, o seu inverso ou o username deslocado de um ou mais caracteres; • Uma nova password deverá ser sempre diferente da anterior.

FICHEIROS E DIRECTÓRIOS

Os ficheiros e os directórios fazem parte do Sistema de Ficheiros. O sistema de ficheiros é o local onde o sistema operativo e os utilizadores guardam e organizam os seus ficheiros. O Linux impõe uma estrutura ao sistema de ficheiros que facilita o armazenamento e a procura posterior.

DIRECTÓRIOS

/          - directório raiz (root)

bin        - comandos principais do Linux
          
dev        - dispositivos (devices) ligados ao computador

etc        - comandos e ficheiros usados pelo administrador do sistema

lib        - bibliotecas (conjunto de ficheiros relacionados contidos num único ficheiro) 
             usadas por compiladores, processadores de texto e outros comandos Linux
          
lost+found - usado pelo comando fsck (file system check). Este comando é usado apenas pelo 
             administrador para verificar o sistema de ficheiros; se o fsck encontra algum ficheiro que 
             pareça não estar ligado a nenhum directório, o comando liga-o ao lost+found, para que posteriormente 
             o administrador decida o que fazer com ele

tmp        - usado por diversos comandos Linux para criação de ficheiros temporários; 
             pode ser usado por qualquer utilizador; este directório é limpo regularmente

usr        - é a parte do sistema de ficheiros pertencente aos utilizadores;
             é a partir deste directório que se estendem os directórios de todos os utilizadores do sistema
 
home       - normalmente contêm os directórios dos utilizadores
    
mnt        - utilizada para permitir o acesso a sistemas de ficheiros temporários (p.e. a uma pen)
 
Proc       - disponibiliza informação sobre os processo que se encontram a correr no sistema

Home Directory: directório ao qual temos acesso logo após o login. Em muitos sistemas, Linux, pode ser abreviado com o sinal “~”, ou $HOME
Current Working Directory (Directório corrente): directório onde “estamos” em cada momento. Quando fazemos login, o nosso home directory é simultaneamente o nosso current working directory.

Comando pwd

Podemos determinar o nosso directório de trabalho executando o comando pwd que nos apresenta o caminho completo desde a raiz (/) até ao nosso directório de trabalho. Por exemplo:
$ pwd
/home/ubuntupt
$

DIRECTÓRIOS ESPECIAIS

Estão presentes em cada um dos directórios:
“.” - (ponto) abreviatura do directório corrente
“..” - (ponto-ponto) abreviatura do directório imediatamente acima do corrente (directório pai)

MUDAR DE DIRECTÓRIO

O comando para mudar de directório é o cd (change directory) cuja sintaxe é a seguinte:
cd [ directório ]
O directório deve existir e temos de ter permissão para lá estar. Se não usarmos nenhum directório, isto é, se executarmos cd sem nenhum parâmetro, mudamos para a nossa home directory. Para subirmos um nível na árvore do sistema de ficheiros podemos recorrer ao directório especial que representa o "pai" (..) fazendo:
cd ..
Se em qualquer altura, após várias mudanças de directório, não tivermos noção do local exacto onde nos encontramos no sistema de ficheiros, deveremos recorrer ao comando pwd (já referido).

CRIAR NOVOS DIRECTÓRIOS

É possível organizarmos os nossos ficheiros no nosso home directory da mesma maneira que o Linux o faz na root directory. Tal é conseguido com o comando mkdir (make directory) cuja sintaxe é a seguinte:
mkdir directório ...
Os nomes a utilizar na criação de directórios seguem as mesmas regras que os nomes dos ficheiros: existe distinção entre maiúsculas e minúsculas. Algumas pessoas seguem a convenção de criar os directórios em maiúsculas o que permite uma mais fácil distinção dos ficheiros. Se tentarmos criar um directório que já existe ou num sítio no qual não temos permissão para o fazer, mkdir apresentará uma mensagem de erro.

ELIMINAR DIRECTÓRIOS

Quando já não precisamos do directório podemos eliminá-lo com o comando rmdir cuja sintaxe é a seguinte:
rmdir directório ...
Para que um directório possa ser eliminado, duas condições devem ser respeitadas:
• o directório tem de estar vazio: é necessário apagar os ficheiros contidos dentro do directório a eliminar antes de proceder à operação
• o directório corrente não pode ser o directório que estamos a tentar eliminar; o que faz sentido: em que parte do sistema de ficheiros seríamos "colocados" se eliminássemos o nosso directório de trabalho corrente?
O rmdir não pede confirmação antes de proceder à eliminação. Como muitos outros comandos de Linux, o rmdir assume que sabemos o que estamos a fazer e deixa-nos fazer quase tudo o que queremos sem nos interromper com mensagens triviais!

LISTAR NOME DE FICHEIROS

O comando ls lista os ficheiros
ls [-aClqrstux] [nome ...]
a – (all) mostra ficheiros começados por “.” l – (long) mostra em formato detalhado h – mostra o tamanho dos ficheiros num formato mais perceptível para humanos (kB, MB, etc). Esta opção apenas funciona quando utilizado em conjunto com o –l, p.e. ls –lh. t – ordena de acordo com a hora de modificação dos ficheiros u – ordena de acordo com a hora de acesso dos ficheiros R – lista recursivamente todas as directorias abaixo da directoria indicada em nome
Para vermos os ficheiros contidos nos directórios usamos o já referido comando ls. Quando usado sem parâmetros, permite ver os ficheiros e os directórios do directório corrente. Eis mais alguns exemplos:
ls dir_name - lista os ficheiros contidos no directório dir_name e não o directório em si;
se quisermos ver os ficheiros de um directório não precisamos de fazer cd

ls –R      - modo recursivo: lista os directórios e respectivos conteúdos.
Exemplo: ls –R / | more
Existem ainda várias outras opções, para além das já referidas, que podem ser usadas com o comando ls. A opção “-l” dá-nos uma lista longa, isto é informação detalhada, de ficheiros e directórios. A seguir apresenta-se um exemplo do resultado possível do comando ls –l e a respectiva explicação:
-r—-r—-r-- 1 root sys 5632 Apr 3 14:59 /etc/passwd
Explicação por ordem.
-r—-r—-r--  - Permissões
1           - Numero de Links
root        - Dono
sys         - grupo
5632        - tamanho
Apr 3 14:59 - Data
/etc/passwd - Nome do ficheiro

VER O CONTEÚDO DE UM FICHEIRO

O comando cat (abreviatura de concatenate and print ) permite visualizar o conteúdo de um ou mais ficheiros. A sintaxe do comando é a seguinte:
cat [-s] [-v [-t] [-e]] ficheiro ...
O comando cat “despeja” tudo para o ecrã, sem qualquer pausa ou separação entre os conteúdos dos diversos ficheiros. A opção –s suprime quaisquer mensagens de erro ou aviso que possam ser geradas pelo comando.
O comando cat é usado para apresentar o conteúdo de ficheiros de texto (ASCII). Se, no entanto, houver caracteres de controlo invisíveis, eles podem ser vistos usando a opção –v, que faz com que esses caracteres sejam precedidos do acento circunflexo (^). Este modo “visual” pode ser usado com mais duas outras opções. A opção –t permite ver os caracteres tab com “Control-I” (^I). A opção –e podemos ver a posição de fim de linha (end of line) com o cifrão ($). Embora seja útil em muitas situações, não é o comando que é normalmente usado para ver o conteúdo de um ficheiro.

VER O CONTEÚDO DE UM FICHEIRO PÁGINA A PÁGINA

O comando more Permite visualizar o conteúdo de um ficheiro, um ecrã de cada vez. A forma mais simples do comando é:
more ficheiro ...
Para avançar para a página seguinte pressionamos a barra de espaços e “Enter” para ver linha a linha.

VER A PARTE FINAL DUM FICHEIRO

Outro comando útil para ver o conteúdo de um ficheiro é o tail. Por padrão, o tail apresenta as últimas 10 linhas do ficheiro. A sintaxe do comando é:
tail [+|-[número] [lbc]] ficheiro
A seguir ao número indicamos l para linhas, b para blocos (1024 bytes) e c para caracteres (ou bytes). Se omitirmos a letra, o Linux assume que pretendemos linhas. Por defeito, o tail executa o equivalente a tail -10l. O número fornecido como parâmetro indica o número de linhas que queremos ver. Se usarmos o sinal “-“, as linhas são contadas do fim para o princípio, para determinar o ponto a partir do qual começa a apresentar as linhas. Se usarmos o sinal “+”, as linhas são contadas do início para o fim.

VER A PARTE INICIAL DUM FICHEIRO

O comando head apresenta características semelhantes ao tail. A sintaxe é a seguinte:
head [-número] ficheiro ...
Por defeito, o comando head apresenta as 10 primeiras linhas. O número passado como parâmetro permite-nos indicar o número de linhas que queremos ver. Por exemplo, para vermos as primeiras 6 linhas do ficheiro:
$ head -6 ficheiro

COPIAR UM FICHEIRO

O Linux permite-nos efectuar cópias de ficheiros com o comando cp usando a sintaxe:
Cópia dum ficheiro para outro:                     cp fich_orig fich_dest
Cópia de ficheiro para directório:                 cp fich_orig dir_dest
Cópia de vários ficheiros para directório:         cp fich_orig1 fich_orig2 ... dir_dest
Quando se copia um ficheiro para outro, o primeiro ficheiro é lido e copiado para o segundo ficheiro. Se o segundo ficheiro não existir, é criado. Se existir, é substituído. Como na maior parte dos comandos Linux, cp não pede confirmação antes de efectuar a cópia. Quando se copia um ou mais ficheiros para um directório, cada ficheiro é lido individualmente e copiado para um ficheiro com o mesmo nome no directório indicado. O directório tem de existir. Se o ficheiro não existir nesse directório, é criado. Se existir é substituído.

MOVER OU RENOMEAR FICHEIRO

O Linux permite mover um ficheiro ou alterar o seu nome através do comando mv.
Mover ou alterar nome dum ficheiro para outro:           mv [-f] fich_orig fich_dest
Mover ficheiro para directório:                          mv [-f] fich_orig dir_dest
Mover vários ficheiros para directório:                  mv [-f] fich_orig1 fich_orig2 ... dir_dest
Quando se “move” um ficheiro para outro, o primeiro ficheiro é lido e copiado para o segundo. O primeiro ficheiro é removido. Se o segundo ficheiro não existir, é criado. Se existir, é substituído. Como na maior parte dos comandos Linux, mv não pede confirmação. Quando se “move” um ou mais ficheiros para um directório, cada ficheiro é lido individualmente e copiado para um ficheiro com o mesmo nome no directório indicado. Os ficheiros originais são removidos. O directório tem de existir. Se o ficheiro não existir nesse directório, é criado. Se existir é substituído. Se se tentar mover um ficheiro para outro ficheiro ou directório, que nos pertence mas para o qual não temos permissão para alterar, o mv pede confirmação para completar a operação. A opção –f elimina estas mensagens de aviso e confirmação bem como quaisquer outras mensagens de erro ou aviso que possam ocorrer durante uma operação de “move”.

ELIMINAR FICHEIROS

O comando rm permite remover, ou eliminar um ficheiro. A sintaxe do comando é a seguinte:
rm [ -fir ] ficheiro ...
Cada ficheiro indicado no comando é removido do sistema de ficheiros. Mais uma vez, o Linux assume que sabemos o que estamos a fazer pelo que não efectua qualquer confirmação antes de proceder à execução do comando. Algumas opções podem ser usadas para modificar a execução do comando rm:
-f    Esta opção, força a execução do comando, isto é, neste caso, a eliminação do ficheiro. Nenhumas 
      perguntas são feitas, nem são apresentados quaisquer avisos ou mensagens de erro.
   
-i Esta opção é a opção de interactividade. Informa o rm para interagir com o utilizador durante a
      operação de eliminação. Antes do ficheiro ser efectivamente eliminado, o rm apresenta o nome do
      ficheiro seguido de um “?”. Se se pretende eliminar, pressiona-se o “y” seguido do “Enter”.
      Qualquer outra resposta “salta” a eliminação do ficheiro.
-r Esta opção permite ultrapassar a limitação do rmdir na eliminação de directórios não vazios. Com
      esta opção, o rm elimina qualquer directório indicado bem como os ficheiros neles contidos. O rm
      desce recursivamente ao longo da estrutura de directórios começando no directório indicado e
      elimina todos os ficheiros e directórios árvore acima, incluindo o directório inicial.

Devido ao facto do Linux ser um sistema multi-utilizador com utilizadores a criar e a eliminar ficheiros constantemente, é praticamente impossível recuperar um ficheiro eliminado. Logo que um ficheiro é eliminado, o sistema de ficheiros verifica que existe algum espaço livre que pode usar. No próximo pedido de espaço que alguém faça, o sistema de ficheiros provavelmente usará o espaço que acabou de libertar. A única possibilidade de recuperação de um ficheiro eliminado é extrair uma cópia a partir de uma cópia de segurança efectuada recentemente.
Atenção ao comando rm. Com apenas 5 teclas podemos colocar o nosso sistema de ficheiros Linux em apuros. O comando rm * remove tudo no directório corrente, e não nos será pedida qualquer confirmação. Pior do que isto, se estivermos logged in como administradores do sistema, nunca deveremos experimentar o comando rm –r / . Se removermos tudo a partir da raiz, perderemos o nosso sistema de ficheiros por inteiro.
Como se pode imaginar, o comando rm não remove efectivamente os dados. Remove uma entrada (um link) na tabela de ficheiros representativa do sistema de ficheiros (conhecida com FAT File Allocation Table). Quando o sistema de ficheiros verifica que não há mais links para o i-node em particular, liberta esse i-node e os blocos de disco a ele alocados para poder ser usado por outro ficheiro.

PERMISSÕES

O sistema de ficheiro do Linux possui alguns mecanismos básicos de permissões de acesso a ficheiros e directórios que permitem controlar quem tem acesso aos mesmos e que tipo de operações pode realizar.

UTILIZADORES E GRUPOS

Cada utilizador que tem acesso ao sistema Linux tem um login id, atribuído pelo administrador do sistema, que o identifica sem ambiguidade perante o sistema. Adicionalmente, cada utilizador pertence ao grupo de utilizadores relacionados que tem um determinado group id. Um grupo é um conjunto de utilizadores que têm uma característica comum, por exemplo, pertencerem ao mesmo departamento. Um utilizador pode pertencer a mais do que um grupo. Um dos motivos principais pelo qual os utilizadores estão relacionados através de um grupo é conceder-lhes a possibilidade de partilhar ficheiros. Deste modo, vários utilizadores poderão aceder e alterar aos mesmos ficheiros partilhando informação e tarefas de interesse comum. Existe um ficheiro, normalmente no directório /etc, onde estão registados os diversos utilizadores autorizados a aceder ao sistema bem como os grupos a que eles pertencem. Esse ficheiro é o /etc/passwd e é basicamente uma base de dados contendo um registo (linha) por cada utilizador. Cada linha é composta por registos separados por “:” que fornecem ao Linux informação importante de cada utilizador.
operator:x:11:0:operator:/var:/bin/sh
games:x:12:100:games:/usr/games:/bin/sh
nobody:x:65534:65534:Nobody:/:/bin/sh
Cada registo de /etc/passwd apresenta os seguintes campos (indicados pela ordem em que aparecem):
• Login id – login que o utilizador usa para aceder ao sistema
• Password encriptada – nenhuma password é guardada no sistema sem ser encriptada
• User id – identificação numérica do utilizador
• Group id – identificação numérica do grupo principal a que o utilizador pertence; informação acerca deste grupo, nomeadamente o seu nome, pode ser encontrada no ficheiro /etc/group
• Comentário – normalmente este campo é usado para o nome completo do utilizador
• Caminho completo para o home directory do utilizador - este campo é usado pelo sistema durante o processo de login para determinar qual o local do sistema de ficheiros onde seremos “colocados”
• Caminho completo do programa inicial – isto identifica qual o programa a ser executado logo após o processo de login; normalmente é identificada aqui a shell usada pelo utilizador.

Outro ficheiro importante é o /etc/group. Enquanto que no ficheiro /etc/passwd é identificado o grupo inicial a que cada utilizador pertence, o /etc/group especifica quais os grupos disponíveis. Este ficheiro é também uma base de dados semelhante a /etc/passwd e é composto pelos seguintes campos:

• Group name – da mesma maneira que cada utilizador tem um nome, cada grupo tem também um nome para mais fácil identificação
• Password encriptada – o Linux permite passwords para grupos da mesma maneira que para utilizadores, de tal maneira que se queremos pertencer ao um grupo teremos que conhecer a respectiva password
• Group id – identificação numérica do grupo e que é usada no ficheiro /etc/passwd; para sabermos a que grupo o utilizador pertence, procuramos neste ficheiro a linha correspondente ao group id definido no registo do utilizador em /etc/passwd
• Lista de login id’s – esta é a lista de utilizadores autorizados a pertencer a um determinado grupo.
Actualmente, é frequente em ambientes com mais de um sistema, existir um mecanismo de autenticação único. Assim consegue-se uma gestão centralizada pelo administrador do sistema.

QUEM ÉS TU E A QUE GRUPO PERTENCES

Podemos saber qual é o nosso login, user id, group name e group id sem ter necessidade de pesquisar o ficheiro /etc/passwd. O comando id apresenta esta informação.
A sintaxe do comando id é a seguinte:
id

PERMISSÕES DE ACESSO

Sempre que um ficheiro ou directório é criado, o sistema operativo Linux atribui-lhe um conjunto de permissões de acesso. Estas permissões estão definidas por defeito, mas esse valor de defeito pode ser alterado pelo utilizador para os seus ficheiros. Também em qualquer altura o utilizador pode alterar as permissões dos seus ficheiros e directórios como se verá nas próximas secções. As permissões são conjuntos de 10 caracteres divididos em 4 conjuntos que podem ser visualizadas no primeiro campo impresso no ecran pelo comando ls –l.
- | r w x | r w - | r - -
Primeiro "-" :
“-” – ficheiro de dados “d” – directório “c” – dispositivo de caracteres “b” – dispositivos de blocos “p” – ficheiro pipe “l” – link
Segundo "r w x":
Dono (owner)
Terceiro "r w -":
Grupo (group)
Quarto "r - -":
Todos os outros (others)
Podemos constatar que é possível atribuir diferentes permissões a diferentes tipos de utilizadores:
• Owner – o dono do ficheiro é normalmente a pessoa que o criou
• Group – o grupo do ficheiro é normalmente o grupo a que o utilizador pertencia no momento em que criou o ficheiro, e refere-se aos utilizadores que pertencem ao mesmo grupo que o dono
• Others – os outros são simplesmente todas as pessoas que não são o dono nem pertencem ao mesmo grupo que ele
Cada uma das 3 posições dos caracteres na secção das permissões tem um significado especial que corresponde a 3 diferentes tipos de permissões que cada ficheiro ou directório possui e tem um determinado significado:
• Read – a existência da permissão de leitura indica que é possível ler o conteúdo do ficheiro
• Write – a existência da permissão de escrita indica que é possível escrever ou alterar o conteúdo do ficheiro
• Execute – a existência da permissão de execução indica que é possível, pelo menos, fazer uma tentativa para executar (“correr”) o ficheiro como um comando Linux ou um utilitário
Estas permissões são óbvias quando se referem a ficheiros: é necessário ter permissão de read (“r”) para fazer o cat do conteúdo do ficheiro, é necessário ter permissão de write (“w”) para editar e é necessário ter permissão de execute (“x”) nos ficheiros criados executáveis ou contendo scripts Linux para que seja possível “executá-los”. Mas já não são tão óbvias quando se referem a directórios: read (“r”) permite ver o conteúdo do directório, isto é, os ficheiros nele contidos, write (“w”) permite copiar ficheiros para o directório ou apagá-los do directório, execute (“x”) também designada permissão de pesquisa permite “ir para” o directório com o comando cd ou usar o directório em qualquer tipo de pathname.

ALTERAR PERMISSÕES DE ACESSO

Se as permissões atribuídas por defeito pelo sistema operativo não forem adequadas, podemos alterá-las como o comando chmod (change mode). Este comando permite alterar as permissões de cada ficheiro ou directório que nos pertença. A sintaxe do comando é a seguinte:
chmod expressão_permissões ficheiro ...
Octal Tipo de Permissão     Representação Binário
                                Linux
 0          nenhuma                 -      (000)
 1           execute                x      (001)
 2            write                 w      (010)
 3       write e execute           wx      (011)
 4             read                 r      (100)
 5       read e execute            rx      (101)
 6        read e write             rw      (110)
 7    read, write e execute       rwx      (111)
Existe outro tipo de expressão que pode ser usado com o comando chmod. Esse tipo de expressão usa mnemónicas para especificar permissões.
Uma série de códigos mnemónicos podem ser usados em vez de números em octal e são apresentados nos quadros seguintes:
Classes de utilizadores
 u   User (dono)
 g   Group (grupo)
 o   Others (outros)
 a   All (todos)
Operações de permissões
 +   adiciona
 -   retira    
 =   estabelece
Valores das permissões
 r   read
 w   write
 x   execute

UTILIZAÇÃO DO INTERPRETADOR DE COMANDOS (SHELL)

INTERPRETAÇÃO E EXECUÇÃO DE COMANDOS

Após a introdução do um comando a shell divide o comando em palavras (considerando como separador entre palavras o caracter “espaço”). De seguida define o que é comando, opções e nomes de ficheiros. Isto designa-se por executar o parsing do comando. Também procura metacaracteres, ou seja, caracteres com significado especial, como por exemplo o asterisco (*). Metacaracter: caracter com um significado especial para a shell. Quando a shell encontra um metacaracter vai tomar as acções que conhece para esse caracter. Podem ser acções de expansão (substituição por um conjunto de caracteres), de redireccionamento, etc. Há também metacaracteres que permitem que não se interpretem os metacaracteres (metacaracteres de "disfarce"). O próximo passo é o de carregar para memória o comando, passar-lhe todas as opções e nomes de ficheiros e esperar que o comando termine. Enquanto o comando é processado pelo sistema operativo a shell fica bloqueada.

LOCALIZAÇÃO DOS COMANDOS

Um comando é um ficheiro no sistema de ficheiros e como tal, para ser executado, é necessário que este seja localizado previamente. Contudo esta localização não é uma preocupação do sistema operativo Linux mas sim da shell. A shell é responsável por encontrar os comandos pelo que é necessário um mecanismo que possibilite que ela obtenha tal informação. Para encontrar comandos a shell recorre a uma lista de directórios onde deve ir procurar os comandos. A essa lista chama-se path e está armazenada numa variável de ambiente com o mesmo nome. A pesquisa de um comando é efectuado sequencialmente na path; caso não seja encontrado a shell reporta que não encontrou o comando (“Command not found.”), o que não significa necessariamente que este não existe, mas apenas que não se encontra em nenhum directório da lista. No caso de se indicar o pathname completo, por exemplo /bin/ls –l, a shell não vai recorrer à variável path.

METACARACTERES DE EXPANSÃO

A maioria dos comandos que operam com ficheiros pode fazê-lo com vários ficheiros ao mesmo tempo. Se os ficheiros estão relacionados ou têm nomes semelhantes (Ex.: capitulo1, capitulo2, etc.) pode tirar-se partido de tais padrões de semelhança recorrendo a metacaracteres de expansão. O comportamento da shell quando encontra um metacaracter é o seguinte:
   1. Retira a palavra com o metacaracter.
   2. Procura ficheiros no sistema de ficheiros que correspondem ao padrão.
   3. Constrói um lista com esses ficheiros.
   4. Introduz a lista no lugar da palavra que continha o metacaracter.
De seguida explico os metacaracteres mais comuns.
ASTERISCO ( * )
Este caracter especial de expansão pode ser usado em qualquer posição de um nome ou pathname e representa zero ou mais ocorrências de qualquer caracater.
Ex: Ub*tu pode equivaler a: ubuntu, ubuah4tu, ubkdhyaks57384tu
PONTO DE INTERROGAÇÃO ( ? )
Também pode ser usado em qualquer posição de um nome de um ficheiro ou pathname, mas apenas representa uma ocorrência de um qualquer caracter.
Ex: ubuntu? pode representar ubuntup, ubuntuz, ubuntu1, ubuntu5
PARÊNTESIS RECTO ( [ ] )
Também podem ser usados em qualquer posição de um nome de um ficheiro ou pathname, mas apenas representa uma ocorrência de um caracter que conste entre os parêntesis rectos.
Ex: ubuntu[123] representa: ubuntu1, ubuntu2, ubuntu3
Este conceito também pode ser utilizado para representar intervalos de letras ou números, recorrendo a um hífen para representar um intervalo. Por exemplo, todas as letras minúsculas podem ser representadas por [a-z], como analogamente todos os números, ou apenas parte de um intervalo de letras ou números, por exemplo [5-15].
CHAVETAS ( { } )
Este modo é semelhante ao anterior, contudo permite que sejam definidos não apenas um conjunto de possibilidades para um caracter mas um conjunto de possibilidades para vários conjuntos de caracteres, em que cada conjunto está separado dos restantes por vírgulas.
Ex: {k,u,f,x}buntu representa kubuntu, ubuntu, fubuntu, xubuntu
TIL ( ~ )
Este caracter especial de expansão representa o pathname completo do homedirectory do utilizador.
OS CARACTERES DE "DISFARCE" ( \ , " ", ' ' )
Se por qualquer razão não se pretender que a shell interprete e substitua os metacaracteres com significado especial deve-se recorrer a caracteres de "disfarce”. Assim:
\   - retira o significado ao caracter seguinte
" " - retira o significado a todos os caracteres entre as aspas, excepto aos caracteres $, ‘ e \
' ' - retira o significado a todos os caracteres entre as plicas

Comandos básicos Linux


Comandos básicos

A Shell do Linux

Uma shell oferece uma interface em formato texto com o kernel do sistema operativo. Permite realizar as operações mais habituais a um utilizador tal como: operações sobre ficheiros, gestão do sistema operativo, edição de tecto, desenvolvimento de software, etc. Além disso esta tipo de interface apresenta como principal vantagem em relação a uma interface gráfica a possibilidade de correr programas feitos pelo utilizador utilizando uma linguagem de script. Em Linux existem várias shells à disposição do utilizador:
• Bourne shell (sh), a versão original presente em todos os sistemas Linux;
• C shell (csh), uma versão cujo nome deriva do facto de várias características de programação terem uma sintaxe semelhante à da linguagem de programação C. Tornou-se muito popular devido aos mecanismos de alias (permite criar nomes curtos para sequências de comando longas) e history (guarda os comandos executados e permite a sua re-execução);
• Korn shell (ksh) Tornou-se popular porque mantém a compatibilidade de sintaxe com a Bourne shell e ao mesmo tempo apresenta mecanismos de alias e history como a C shell;
• Bourne Again shell (bash) é uma shell que incorpora as características mais úteis da Bourne shell e da C shell. È uma das mais utilizadas comunidade de utilizadores de Linux.

CONFIGURAÇÃO DA BASH

A configuração da Bash vai para além, dos objectivos desta cadeira no entanto, dada a sua importância para quem utilizar o Linux frequentemente, transcreve-se abaixo um pequeno texto retirado http://freeunix.dyndns.org:8088/site2/howto/Bash.shtml, onde também poderá ser encontrada mais informação, por exemplo sobre como mudar o prompt.

OBTER AJUDA

Para além de material impresso (livros, guias de referência, revistas) ou acessível na Internet, poderemos encontrar ajuda sobre os comandos no próprio sistema Linux. Todas as versões do Linux disponibilizam um comando man (abreviatura de manual) que nos permite obter informação detalhada sobre cada comando instalado no sistema. A ajuda obtém-se executando o comando da seguinte forma:
man comando
Este comando gera uma saída semelhante há existente nos manuais originais do sistema operativo. Podemos-nos movimentar dentro do texto do comando man através das teclas:
Enter    Mover o texto uma linha para baixo
Space    Mover o texto uma página para baixo
q        Sair
PageUp   Mover o texto meia página para cima
pageDown Mover o texto meia página para baixo
End      Mover para o fim do texto
Home     Mover para o início do texto
/        Procura a primeira linha onde se encontra o texto escrito a seguir
n        Move-se para a próxima ocorrência do texto procurado
N        Move-se para a ocorrência anterior do texto procurado
Por vezes o mesmo comando poderá ser utilizado como um comando Linux ou, por exemplo, como uma função utilizada num programa em C. Nestes casos para se consultar outra versão do mesmo comando deve-se utilizar o comando:
man n comando
Em que n representa a versão alternativa da ajuda para esse comando.
Algumas distribuições do Linux permitem outras formas de obtenção de ajuda através do comando help que nos dá uma informação mais abreviada e que pode ser usado de duas maneiras:
help comando           ou       comando --help
Pode-se também obter os comandos relacionados com outro comando através da utilização do comando apropos. O exemplo seguinte refere-se à obtenção dos comandos relacionados com o comando pwd.
>apropos pwd
pwd                    (1)     - print name of current/working directory
pwd                    (n)      - Return the absolute path of the current working directory
pwd [builtins]         (1)     - bash built-in commands, see bash(1)
pwdx                   (1)     - report current working directory of a process

SINTAXE GERAL DOS COMANDOS Linux

$ comando [ opção ... ] [ expressão ] [ ficheiro ... ]
$ - prompt, indicativo de que estamos na shell (normalmente diferente para cada shell) [] - indicam que esta parte do comando é opcional ... - indicam que a parte em causa se pode repetir
opção - parâmetros que condicionam a execução do comando expressão - dados necessários para a execução do comando ficheiro - se o comando opera com ficheiro(s) , estes aparecem sempre no fim do comando
Pode-se também executar vários comando seguidos utilizando como separador o “;” (ponto-e-vírgula):
$ comando1 ; comando2 ; ...
A shell executa-os todos, um de cada vez, como se eles tivessem sido introduzidos individualmente. Alguns comandos Linux poderão necessitar de mais caracteres do que aqueles que podem ser apresentados no ecrã. A shell possibilita-nos lidar com este problema de duas maneiras:
• Quando chegarmos ao limite do ecrã, podemos continuar a escrever. Se o ecrã estiver correctamente configurado, os caracteres surgirão automaticamente no início da linha seguinte. Se não estiver correctamente configurado, o cursor ficará no limite do ecrã, e os caracteres serão continuamente apresentados na última posição da linha, à medida que os formos escrevendo. De qualquer maneira, a shell interpretará correctamente os caracteres introduzidos, sejam eles apresentados correctamente ou não;
• Outra maneira é finalizar a linha com um “\” (backslash) mesmo antes de pressionarmos a tecla “ENTER”. O backslash dá indicações à shell de que o comando continua na linha seguinte. Exemplo:
bash> ls \
> -l 
A alteração do prompt para “>” é uma indicação da shell de que está à espera da conclusão do comando.

ALTERAÇÃO DA PASSWORD

Um novo utilizador pode a sua password quando fizer login. Existe um comando que permite fazer essa operação. É o comando passwd.
$ passwd
Changing password for ubuntupt
Old password:
New password
Re-enter password:
$
Sendo um dos pilares da segurança num sistema Linux, existem algumas regras que devem ser usadas na definição das passwords:
• Deve ter no mínimo 6 caracteres e existe um número máximo de caracteres que são considerados; • Deve ser uma combinação de letras e números; Não pode ser o username, o seu inverso ou o username deslocado de um ou mais caracteres; • Uma nova password deverá ser sempre diferente da anterior.

FICHEIROS E DIRECTÓRIOS

Os ficheiros e os directórios fazem parte do Sistema de Ficheiros. O sistema de ficheiros é o local onde o sistema operativo e os utilizadores guardam e organizam os seus ficheiros. O Linux impõe uma estrutura ao sistema de ficheiros que facilita o armazenamento e a procura posterior.

DIRECTÓRIOS

/          - directório raiz (root)

bin        - comandos principais do Linux
          
dev        - dispositivos (devices) ligados ao computador

etc        - comandos e ficheiros usados pelo administrador do sistema

lib        - bibliotecas (conjunto de ficheiros relacionados contidos num único ficheiro) 
             usadas por compiladores, processadores de texto e outros comandos Linux
          
lost+found - usado pelo comando fsck (file system check). Este comando é usado apenas pelo 
             administrador para verificar o sistema de ficheiros; se o fsck encontra algum ficheiro que 
             pareça não estar ligado a nenhum directório, o comando liga-o ao lost+found, para que posteriormente 
             o administrador decida o que fazer com ele

tmp        - usado por diversos comandos Linux para criação de ficheiros temporários; 
             pode ser usado por qualquer utilizador; este directório é limpo regularmente

usr        - é a parte do sistema de ficheiros pertencente aos utilizadores;
             é a partir deste directório que se estendem os directórios de todos os utilizadores do sistema
 
home       - normalmente contêm os directórios dos utilizadores
    
mnt        - utilizada para permitir o acesso a sistemas de ficheiros temporários (p.e. a uma pen)
 
Proc       - disponibiliza informação sobre os processo que se encontram a correr no sistema

Home Directory: directório ao qual temos acesso logo após o login. Em muitos sistemas, Linux, pode ser abreviado com o sinal “~”, ou $HOME
Current Working Directory (Directório corrente): directório onde “estamos” em cada momento. Quando fazemos login, o nosso home directory é simultaneamente o nosso current working directory.

Comando pwd

Podemos determinar o nosso directório de trabalho executando o comando pwd que nos apresenta o caminho completo desde a raiz (/) até ao nosso directório de trabalho. Por exemplo:
$ pwd
/home/ubuntupt
$

DIRECTÓRIOS ESPECIAIS

Estão presentes em cada um dos directórios:
“.” - (ponto) abreviatura do directório corrente
“..” - (ponto-ponto) abreviatura do directório imediatamente acima do corrente (directório pai)

MUDAR DE DIRECTÓRIO

O comando para mudar de directório é o cd (change directory) cuja sintaxe é a seguinte:
cd [ directório ]
O directório deve existir e temos de ter permissão para lá estar. Se não usarmos nenhum directório, isto é, se executarmos cd sem nenhum parâmetro, mudamos para a nossa home directory. Para subirmos um nível na árvore do sistema de ficheiros podemos recorrer ao directório especial que representa o "pai" (..) fazendo:
cd ..
Se em qualquer altura, após várias mudanças de directório, não tivermos noção do local exacto onde nos encontramos no sistema de ficheiros, deveremos recorrer ao comando pwd (já referido).

CRIAR NOVOS DIRECTÓRIOS

É possível organizarmos os nossos ficheiros no nosso home directory da mesma maneira que o Linux o faz na root directory. Tal é conseguido com o comando mkdir (make directory) cuja sintaxe é a seguinte:
mkdir directório ...
Os nomes a utilizar na criação de directórios seguem as mesmas regras que os nomes dos ficheiros: existe distinção entre maiúsculas e minúsculas. Algumas pessoas seguem a convenção de criar os directórios em maiúsculas o que permite uma mais fácil distinção dos ficheiros. Se tentarmos criar um directório que já existe ou num sítio no qual não temos permissão para o fazer, mkdir apresentará uma mensagem de erro.

ELIMINAR DIRECTÓRIOS

Quando já não precisamos do directório podemos eliminá-lo com o comando rmdir cuja sintaxe é a seguinte:
rmdir directório ...
Para que um directório possa ser eliminado, duas condições devem ser respeitadas:
• o directório tem de estar vazio: é necessário apagar os ficheiros contidos dentro do directório a eliminar antes de proceder à operação
• o directório corrente não pode ser o directório que estamos a tentar eliminar; o que faz sentido: em que parte do sistema de ficheiros seríamos "colocados" se eliminássemos o nosso directório de trabalho corrente?
O rmdir não pede confirmação antes de proceder à eliminação. Como muitos outros comandos de Linux, o rmdir assume que sabemos o que estamos a fazer e deixa-nos fazer quase tudo o que queremos sem nos interromper com mensagens triviais!

LISTAR NOME DE FICHEIROS

O comando ls lista os ficheiros
ls [-aClqrstux] [nome ...]
a – (all) mostra ficheiros começados por “.” l – (long) mostra em formato detalhado h – mostra o tamanho dos ficheiros num formato mais perceptível para humanos (kB, MB, etc). Esta opção apenas funciona quando utilizado em conjunto com o –l, p.e. ls –lh. t – ordena de acordo com a hora de modificação dos ficheiros u – ordena de acordo com a hora de acesso dos ficheiros R – lista recursivamente todas as directorias abaixo da directoria indicada em nome
Para vermos os ficheiros contidos nos directórios usamos o já referido comando ls. Quando usado sem parâmetros, permite ver os ficheiros e os directórios do directório corrente. Eis mais alguns exemplos:
ls dir_name - lista os ficheiros contidos no directório dir_name e não o directório em si;
se quisermos ver os ficheiros de um directório não precisamos de fazer cd

ls –R      - modo recursivo: lista os directórios e respectivos conteúdos.
Exemplo: ls –R / | more
Existem ainda várias outras opções, para além das já referidas, que podem ser usadas com o comando ls. A opção “-l” dá-nos uma lista longa, isto é informação detalhada, de ficheiros e directórios. A seguir apresenta-se um exemplo do resultado possível do comando ls –l e a respectiva explicação:
-r—-r—-r-- 1 root sys 5632 Apr 3 14:59 /etc/passwd
Explicação por ordem.
-r—-r—-r--  - Permissões
1           - Numero de Links
root        - Dono
sys         - grupo
5632        - tamanho
Apr 3 14:59 - Data
/etc/passwd - Nome do ficheiro

VER O CONTEÚDO DE UM FICHEIRO

O comando cat (abreviatura de concatenate and print ) permite visualizar o conteúdo de um ou mais ficheiros. A sintaxe do comando é a seguinte:
cat [-s] [-v [-t] [-e]] ficheiro ...
O comando cat “despeja” tudo para o ecrã, sem qualquer pausa ou separação entre os conteúdos dos diversos ficheiros. A opção –s suprime quaisquer mensagens de erro ou aviso que possam ser geradas pelo comando.
O comando cat é usado para apresentar o conteúdo de ficheiros de texto (ASCII). Se, no entanto, houver caracteres de controlo invisíveis, eles podem ser vistos usando a opção –v, que faz com que esses caracteres sejam precedidos do acento circunflexo (^). Este modo “visual” pode ser usado com mais duas outras opções. A opção –t permite ver os caracteres tab com “Control-I” (^I). A opção –e podemos ver a posição de fim de linha (end of line) com o cifrão ($). Embora seja útil em muitas situações, não é o comando que é normalmente usado para ver o conteúdo de um ficheiro.

VER O CONTEÚDO DE UM FICHEIRO PÁGINA A PÁGINA

O comando more Permite visualizar o conteúdo de um ficheiro, um ecrã de cada vez. A forma mais simples do comando é:
more ficheiro ...
Para avançar para a página seguinte pressionamos a barra de espaços e “Enter” para ver linha a linha.

VER A PARTE FINAL DUM FICHEIRO

Outro comando útil para ver o conteúdo de um ficheiro é o tail. Por padrão, o tail apresenta as últimas 10 linhas do ficheiro. A sintaxe do comando é:
tail [+|-[número] [lbc]] ficheiro
A seguir ao número indicamos l para linhas, b para blocos (1024 bytes) e c para caracteres (ou bytes). Se omitirmos a letra, o Linux assume que pretendemos linhas. Por defeito, o tail executa o equivalente a tail -10l. O número fornecido como parâmetro indica o número de linhas que queremos ver. Se usarmos o sinal “-“, as linhas são contadas do fim para o princípio, para determinar o ponto a partir do qual começa a apresentar as linhas. Se usarmos o sinal “+”, as linhas são contadas do início para o fim.

VER A PARTE INICIAL DUM FICHEIRO

O comando head apresenta características semelhantes ao tail. A sintaxe é a seguinte:
head [-número] ficheiro ...
Por defeito, o comando head apresenta as 10 primeiras linhas. O número passado como parâmetro permite-nos indicar o número de linhas que queremos ver. Por exemplo, para vermos as primeiras 6 linhas do ficheiro:
$ head -6 ficheiro

COPIAR UM FICHEIRO

O Linux permite-nos efectuar cópias de ficheiros com o comando cp usando a sintaxe:
Cópia dum ficheiro para outro:                     cp fich_orig fich_dest
Cópia de ficheiro para directório:                 cp fich_orig dir_dest
Cópia de vários ficheiros para directório:         cp fich_orig1 fich_orig2 ... dir_dest
Quando se copia um ficheiro para outro, o primeiro ficheiro é lido e copiado para o segundo ficheiro. Se o segundo ficheiro não existir, é criado. Se existir, é substituído. Como na maior parte dos comandos Linux, cp não pede confirmação antes de efectuar a cópia. Quando se copia um ou mais ficheiros para um directório, cada ficheiro é lido individualmente e copiado para um ficheiro com o mesmo nome no directório indicado. O directório tem de existir. Se o ficheiro não existir nesse directório, é criado. Se existir é substituído.

MOVER OU RENOMEAR FICHEIRO

O Linux permite mover um ficheiro ou alterar o seu nome através do comando mv.
Mover ou alterar nome dum ficheiro para outro:           mv [-f] fich_orig fich_dest
Mover ficheiro para directório:                          mv [-f] fich_orig dir_dest
Mover vários ficheiros para directório:                  mv [-f] fich_orig1 fich_orig2 ... dir_dest
Quando se “move” um ficheiro para outro, o primeiro ficheiro é lido e copiado para o segundo. O primeiro ficheiro é removido. Se o segundo ficheiro não existir, é criado. Se existir, é substituído. Como na maior parte dos comandos Linux, mv não pede confirmação. Quando se “move” um ou mais ficheiros para um directório, cada ficheiro é lido individualmente e copiado para um ficheiro com o mesmo nome no directório indicado. Os ficheiros originais são removidos. O directório tem de existir. Se o ficheiro não existir nesse directório, é criado. Se existir é substituído. Se se tentar mover um ficheiro para outro ficheiro ou directório, que nos pertence mas para o qual não temos permissão para alterar, o mv pede confirmação para completar a operação. A opção –f elimina estas mensagens de aviso e confirmação bem como quaisquer outras mensagens de erro ou aviso que possam ocorrer durante uma operação de “move”.

ELIMINAR FICHEIROS

O comando rm permite remover, ou eliminar um ficheiro. A sintaxe do comando é a seguinte:
rm [ -fir ] ficheiro ...
Cada ficheiro indicado no comando é removido do sistema de ficheiros. Mais uma vez, o Linux assume que sabemos o que estamos a fazer pelo que não efectua qualquer confirmação antes de proceder à execução do comando. Algumas opções podem ser usadas para modificar a execução do comando rm:
-f    Esta opção, força a execução do comando, isto é, neste caso, a eliminação do ficheiro. Nenhumas 
      perguntas são feitas, nem são apresentados quaisquer avisos ou mensagens de erro.
   
-i Esta opção é a opção de interactividade. Informa o rm para interagir com o utilizador durante a
      operação de eliminação. Antes do ficheiro ser efectivamente eliminado, o rm apresenta o nome do
      ficheiro seguido de um “?”. Se se pretende eliminar, pressiona-se o “y” seguido do “Enter”.
      Qualquer outra resposta “salta” a eliminação do ficheiro.
-r Esta opção permite ultrapassar a limitação do rmdir na eliminação de directórios não vazios. Com
      esta opção, o rm elimina qualquer directório indicado bem como os ficheiros neles contidos. O rm
      desce recursivamente ao longo da estrutura de directórios começando no directório indicado e
      elimina todos os ficheiros e directórios árvore acima, incluindo o directório inicial.

Devido ao facto do Linux ser um sistema multi-utilizador com utilizadores a criar e a eliminar ficheiros constantemente, é praticamente impossível recuperar um ficheiro eliminado. Logo que um ficheiro é eliminado, o sistema de ficheiros verifica que existe algum espaço livre que pode usar. No próximo pedido de espaço que alguém faça, o sistema de ficheiros provavelmente usará o espaço que acabou de libertar. A única possibilidade de recuperação de um ficheiro eliminado é extrair uma cópia a partir de uma cópia de segurança efectuada recentemente.
Atenção ao comando rm. Com apenas 5 teclas podemos colocar o nosso sistema de ficheiros Linux em apuros. O comando rm * remove tudo no directório corrente, e não nos será pedida qualquer confirmação. Pior do que isto, se estivermos logged in como administradores do sistema, nunca deveremos experimentar o comando rm –r / . Se removermos tudo a partir da raiz, perderemos o nosso sistema de ficheiros por inteiro.
Como se pode imaginar, o comando rm não remove efectivamente os dados. Remove uma entrada (um link) na tabela de ficheiros representativa do sistema de ficheiros (conhecida com FAT File Allocation Table). Quando o sistema de ficheiros verifica que não há mais links para o i-node em particular, liberta esse i-node e os blocos de disco a ele alocados para poder ser usado por outro ficheiro.

PERMISSÕES

O sistema de ficheiro do Linux possui alguns mecanismos básicos de permissões de acesso a ficheiros e directórios que permitem controlar quem tem acesso aos mesmos e que tipo de operações pode realizar.

UTILIZADORES E GRUPOS

Cada utilizador que tem acesso ao sistema Linux tem um login id, atribuído pelo administrador do sistema, que o identifica sem ambiguidade perante o sistema. Adicionalmente, cada utilizador pertence ao grupo de utilizadores relacionados que tem um determinado group id. Um grupo é um conjunto de utilizadores que têm uma característica comum, por exemplo, pertencerem ao mesmo departamento. Um utilizador pode pertencer a mais do que um grupo. Um dos motivos principais pelo qual os utilizadores estão relacionados através de um grupo é conceder-lhes a possibilidade de partilhar ficheiros. Deste modo, vários utilizadores poderão aceder e alterar aos mesmos ficheiros partilhando informação e tarefas de interesse comum. Existe um ficheiro, normalmente no directório /etc, onde estão registados os diversos utilizadores autorizados a aceder ao sistema bem como os grupos a que eles pertencem. Esse ficheiro é o /etc/passwd e é basicamente uma base de dados contendo um registo (linha) por cada utilizador. Cada linha é composta por registos separados por “:” que fornecem ao Linux informação importante de cada utilizador.
operator:x:11:0:operator:/var:/bin/sh
games:x:12:100:games:/usr/games:/bin/sh
nobody:x:65534:65534:Nobody:/:/bin/sh
Cada registo de /etc/passwd apresenta os seguintes campos (indicados pela ordem em que aparecem):
• Login id – login que o utilizador usa para aceder ao sistema
• Password encriptada – nenhuma password é guardada no sistema sem ser encriptada
• User id – identificação numérica do utilizador
• Group id – identificação numérica do grupo principal a que o utilizador pertence; informação acerca deste grupo, nomeadamente o seu nome, pode ser encontrada no ficheiro /etc/group
• Comentário – normalmente este campo é usado para o nome completo do utilizador
• Caminho completo para o home directory do utilizador - este campo é usado pelo sistema durante o processo de login para determinar qual o local do sistema de ficheiros onde seremos “colocados”
• Caminho completo do programa inicial – isto identifica qual o programa a ser executado logo após o processo de login; normalmente é identificada aqui a shell usada pelo utilizador.

Outro ficheiro importante é o /etc/group. Enquanto que no ficheiro /etc/passwd é identificado o grupo inicial a que cada utilizador pertence, o /etc/group especifica quais os grupos disponíveis. Este ficheiro é também uma base de dados semelhante a /etc/passwd e é composto pelos seguintes campos:

• Group name – da mesma maneira que cada utilizador tem um nome, cada grupo tem também um nome para mais fácil identificação
• Password encriptada – o Linux permite passwords para grupos da mesma maneira que para utilizadores, de tal maneira que se queremos pertencer ao um grupo teremos que conhecer a respectiva password
• Group id – identificação numérica do grupo e que é usada no ficheiro /etc/passwd; para sabermos a que grupo o utilizador pertence, procuramos neste ficheiro a linha correspondente ao group id definido no registo do utilizador em /etc/passwd
• Lista de login id’s – esta é a lista de utilizadores autorizados a pertencer a um determinado grupo.
Actualmente, é frequente em ambientes com mais de um sistema, existir um mecanismo de autenticação único. Assim consegue-se uma gestão centralizada pelo administrador do sistema.

QUEM ÉS TU E A QUE GRUPO PERTENCES

Podemos saber qual é o nosso login, user id, group name e group id sem ter necessidade de pesquisar o ficheiro /etc/passwd. O comando id apresenta esta informação.
A sintaxe do comando id é a seguinte:
id

PERMISSÕES DE ACESSO

Sempre que um ficheiro ou directório é criado, o sistema operativo Linux atribui-lhe um conjunto de permissões de acesso. Estas permissões estão definidas por defeito, mas esse valor de defeito pode ser alterado pelo utilizador para os seus ficheiros. Também em qualquer altura o utilizador pode alterar as permissões dos seus ficheiros e directórios como se verá nas próximas secções. As permissões são conjuntos de 10 caracteres divididos em 4 conjuntos que podem ser visualizadas no primeiro campo impresso no ecran pelo comando ls –l.
- | r w x | r w - | r - -
Primeiro "-" :
“-” – ficheiro de dados “d” – directório “c” – dispositivo de caracteres “b” – dispositivos de blocos “p” – ficheiro pipe “l” – link
Segundo "r w x":
Dono (owner)
Terceiro "r w -":
Grupo (group)
Quarto "r - -":
Todos os outros (others)
Podemos constatar que é possível atribuir diferentes permissões a diferentes tipos de utilizadores:
• Owner – o dono do ficheiro é normalmente a pessoa que o criou
• Group – o grupo do ficheiro é normalmente o grupo a que o utilizador pertencia no momento em que criou o ficheiro, e refere-se aos utilizadores que pertencem ao mesmo grupo que o dono
• Others – os outros são simplesmente todas as pessoas que não são o dono nem pertencem ao mesmo grupo que ele
Cada uma das 3 posições dos caracteres na secção das permissões tem um significado especial que corresponde a 3 diferentes tipos de permissões que cada ficheiro ou directório possui e tem um determinado significado:
• Read – a existência da permissão de leitura indica que é possível ler o conteúdo do ficheiro
• Write – a existência da permissão de escrita indica que é possível escrever ou alterar o conteúdo do ficheiro
• Execute – a existência da permissão de execução indica que é possível, pelo menos, fazer uma tentativa para executar (“correr”) o ficheiro como um comando Linux ou um utilitário
Estas permissões são óbvias quando se referem a ficheiros: é necessário ter permissão de read (“r”) para fazer o cat do conteúdo do ficheiro, é necessário ter permissão de write (“w”) para editar e é necessário ter permissão de execute (“x”) nos ficheiros criados executáveis ou contendo scripts Linux para que seja possível “executá-los”. Mas já não são tão óbvias quando se referem a directórios: read (“r”) permite ver o conteúdo do directório, isto é, os ficheiros nele contidos, write (“w”) permite copiar ficheiros para o directório ou apagá-los do directório, execute (“x”) também designada permissão de pesquisa permite “ir para” o directório com o comando cd ou usar o directório em qualquer tipo de pathname.

ALTERAR PERMISSÕES DE ACESSO

Se as permissões atribuídas por defeito pelo sistema operativo não forem adequadas, podemos alterá-las como o comando chmod (change mode). Este comando permite alterar as permissões de cada ficheiro ou directório que nos pertença. A sintaxe do comando é a seguinte:
chmod expressão_permissões ficheiro ...
Octal Tipo de Permissão     Representação Binário
                                Linux
 0          nenhuma                 -      (000)
 1           execute                x      (001)
 2            write                 w      (010)
 3       write e execute           wx      (011)
 4             read                 r      (100)
 5       read e execute            rx      (101)
 6        read e write             rw      (110)
 7    read, write e execute       rwx      (111)
Existe outro tipo de expressão que pode ser usado com o comando chmod. Esse tipo de expressão usa mnemónicas para especificar permissões.
Uma série de códigos mnemónicos podem ser usados em vez de números em octal e são apresentados nos quadros seguintes:
Classes de utilizadores
 u   User (dono)
 g   Group (grupo)
 o   Others (outros)
 a   All (todos)
Operações de permissões
 +   adiciona
 -   retira    
 =   estabelece
Valores das permissões
 r   read
 w   write
 x   execute

UTILIZAÇÃO DO INTERPRETADOR DE COMANDOS (SHELL)

INTERPRETAÇÃO E EXECUÇÃO DE COMANDOS

Após a introdução do um comando a shell divide o comando em palavras (considerando como separador entre palavras o caracter “espaço”). De seguida define o que é comando, opções e nomes de ficheiros. Isto designa-se por executar o parsing do comando. Também procura metacaracteres, ou seja, caracteres com significado especial, como por exemplo o asterisco (*). Metacaracter: caracter com um significado especial para a shell. Quando a shell encontra um metacaracter vai tomar as acções que conhece para esse caracter. Podem ser acções de expansão (substituição por um conjunto de caracteres), de redireccionamento, etc. Há também metacaracteres que permitem que não se interpretem os metacaracteres (metacaracteres de "disfarce"). O próximo passo é o de carregar para memória o comando, passar-lhe todas as opções e nomes de ficheiros e esperar que o comando termine. Enquanto o comando é processado pelo sistema operativo a shell fica bloqueada.

LOCALIZAÇÃO DOS COMANDOS

Um comando é um ficheiro no sistema de ficheiros e como tal, para ser executado, é necessário que este seja localizado previamente. Contudo esta localização não é uma preocupação do sistema operativo Linux mas sim da shell. A shell é responsável por encontrar os comandos pelo que é necessário um mecanismo que possibilite que ela obtenha tal informação. Para encontrar comandos a shell recorre a uma lista de directórios onde deve ir procurar os comandos. A essa lista chama-se path e está armazenada numa variável de ambiente com o mesmo nome. A pesquisa de um comando é efectuado sequencialmente na path; caso não seja encontrado a shell reporta que não encontrou o comando (“Command not found.”), o que não significa necessariamente que este não existe, mas apenas que não se encontra em nenhum directório da lista. No caso de se indicar o pathname completo, por exemplo /bin/ls –l, a shell não vai recorrer à variável path.

METACARACTERES DE EXPANSÃO

A maioria dos comandos que operam com ficheiros pode fazê-lo com vários ficheiros ao mesmo tempo. Se os ficheiros estão relacionados ou têm nomes semelhantes (Ex.: capitulo1, capitulo2, etc.) pode tirar-se partido de tais padrões de semelhança recorrendo a metacaracteres de expansão. O comportamento da shell quando encontra um metacaracter é o seguinte:
   1. Retira a palavra com o metacaracter.
   2. Procura ficheiros no sistema de ficheiros que correspondem ao padrão.
   3. Constrói um lista com esses ficheiros.
   4. Introduz a lista no lugar da palavra que continha o metacaracter.
De seguida explico os metacaracteres mais comuns.
ASTERISCO ( * )
Este caracter especial de expansão pode ser usado em qualquer posição de um nome ou pathname e representa zero ou mais ocorrências de qualquer caracater.
Ex: Ub*tu pode equivaler a: ubuntu, ubuah4tu, ubkdhyaks57384tu
PONTO DE INTERROGAÇÃO ( ? )
Também pode ser usado em qualquer posição de um nome de um ficheiro ou pathname, mas apenas representa uma ocorrência de um qualquer caracter.
Ex: ubuntu? pode representar ubuntup, ubuntuz, ubuntu1, ubuntu5
PARÊNTESIS RECTO ( [ ] )
Também podem ser usados em qualquer posição de um nome de um ficheiro ou pathname, mas apenas representa uma ocorrência de um caracter que conste entre os parêntesis rectos.
Ex: ubuntu[123] representa: ubuntu1, ubuntu2, ubuntu3
Este conceito também pode ser utilizado para representar intervalos de letras ou números, recorrendo a um hífen para representar um intervalo. Por exemplo, todas as letras minúsculas podem ser representadas por [a-z], como analogamente todos os números, ou apenas parte de um intervalo de letras ou números, por exemplo [5-15].
CHAVETAS ( { } )
Este modo é semelhante ao anterior, contudo permite que sejam definidos não apenas um conjunto de possibilidades para um caracter mas um conjunto de possibilidades para vários conjuntos de caracteres, em que cada conjunto está separado dos restantes por vírgulas.
Ex: {k,u,f,x}buntu representa kubuntu, ubuntu, fubuntu, xubuntu
TIL ( ~ )
Este caracter especial de expansão representa o pathname completo do homedirectory do utilizador.
OS CARACTERES DE "DISFARCE" ( \ , " ", ' ' )
Se por qualquer razão não se pretender que a shell interprete e substitua os metacaracteres com significado especial deve-se recorrer a caracteres de "disfarce”. Assim:
\   - retira o significado ao caracter seguinte
" " - retira o significado a todos os caracteres entre as aspas, excepto aos caracteres $, ‘ e \
' ' - retira o significado a todos os caracteres entre as plicas
←  Anterior Proxima  → Inicio

Total de visualizações

Seguidores