3.1.1. O Início
A inicialização do Linux é muito importante... Primeiro porque você está iniciando o melhor
sistema existente, segundo porque as mensagens que aparecem durante o boot serão muito úteis na
hora de executar algumas tarefas no Linux: tais como montar dispositivos (partições, CD-ROMs),
ver o que está sendo iniciado automaticamente, o que está sendo reconhecido pelo kernel e outras
coisas mais que com certeza veremos mais à frente.
É indispensável que você observe as mensagens de boot atentamente... Mas tem um probleminha, se
tudo passa muito rápido, ou você quer consultar as mensagens de boot depois (e não quer ter de
reiniciar a máquina pra ver...), existe um comando que mostra as mensagens de boot do kernel. Este
comando é o dmesg, ele vai mostrar o processo de boot do kernel todo sem problemas.
Logo após todas as mensagens de boot, você será presenteado com uma tela de login do usuário.
Como veremos mais adiante, o Linux é multi-usuário, ou seja, suporta vários usuários. Dependendo
da configuração usada na instalação, esta tela de login pode ser em modo gráfico ou texto. É aqui
que começa o nosso uso no sistema!
Na instalação você deve ter escolhido uma senha para o root e deve também ter criado um usuário
normal (se não criou, é recomendável que você criasse, mas isso podemos fazer depois). Logue-se
como root ou como usuário normal usando o nome do usuário e a senha escolhida. Você ou cairá
na interface gráfica, ou na texto (dependendo da distribuição)... Mas antes de usar vamos entender
mais conceitos? É o que trataremos nas seções à seguir.
3.1.2. Multi-Tarefa e Multi-Usuário
O Linux é multi-tarefa e multi-usuário, mas o que isso quer dizer? Multi-tarefa é a capacidade que
o sistema tem de executar várias tarefas de uma só vez, dividindo assim o uso da memória.
Enquanto multi-usuário é a capacidade do sistema lhe dar com várias pessoas ou usuários, cada um
com suas preferências, cada um com seus arquivos, suas permissões e assim por diante.
Como um exemplo de multi-tarefa, podemos citar que você pode consultar um arquivo texto que
está no diretório X, enquanto acessa o disquete e o CD-ROM, tudo ao mesmo tempo. Ou seja, você
faz as coisas, mas não fica preso somente a elas, pode executar outras tarefas enquanto uma já
estiver sendo executada. Todos os sistemas atuais são multi-tarefa, então este conceito não deve ser
muito novo para você. Um exemplo de sistema que não é multi-tarefa é o DOS (ugh).
É muito importante destacar o multi-usuário do Linux. Tudo vai ser dividido por usuários e junto
com essas divisões haverá também as restrições. Há um usuário principal no Linux, chamado root.
Este usuário pode acessar, controlar e fazer tudo no sistema. Enquanto os usuários normais só
poderão acessar seus documentos, ou os que o sistema (root) permitir. Uma ética importante para o
Linux é nunca usar o usuário root... Então é recomendável que você crie um usuário primeiro e use
ele, só utilize o root para tarefas administrativas! Por que isso? O usuário root tem o poder em tudo,
inclusive de fazer muita besteira no sistema... Você não quer fazer besteira, ou quer? :)
3.1.3. A interface texto (Console)
A interface texto do Linux é indispensável para o uso do sistema. É nesta interface que você vai
encontrar uma quantidade enorme de utilitários e comandos que irão lhe ajudar na administração do
dia a dia. Se a tela de login for no modo texto, você se logará e logo após será presenteado com o
interpretador de comando, onde você poderá mexer realmente no sistema. A interface texto não é
tão amigável como a gráfica, mas certamente tem suas utilidades e é recomendado que todos os
usuários não fiquem só presos a interface gráfica e que conheçam bem o modo texto. Outro nome
que podemos dar à interface texto é console.
Então vamos ao que interessa, o modo texto é dividido inicialmente em 6 telas, em cada tela poderá
se logar um usuário. Experimente apertar a combinação de teclas Alt-F1, Alt-F2, ..., Alt-F6. Isto o
levará para os consoles 1, 2, 3, 4, 5 e 6. A partir do 7, o Linux reserva especialmente para as
interfaces gráficas funcionarem. Como o Linux é um sistema multi-tarefa e multi-usuário, você
pode se logar em todos ao mesmo tempo, com quaisquer usuários. Você pode por exemplo se logar
como root no console 1 para qualquer emergência e ficar usando um usuário normal no console 2.
Caso você esteja no modo gráfico e queira passar para os consoles do modo texto, basta apenas
você utilizar a combinação de teclas Ctrl-Alt-F1, Ctrl-Alt-F2 e por aí vai.
Lembre-se sempre que a interface texto é o poder do Linux! Você pode estar se perguntando como
pode conviver com o ambiente texto, mas eu posso te garantir que você convive muito bem.
Existem vários programas para o modo texto que você provavelmente vai querer usar... Você vai
poder usar IRC (BitchX, irsii), WWW (lynx ou links), ICQ (micq), visualizar imagens (zgv), jogar
joguinhos (quake, overkill, dopewars), editar arquivos (vim, emacs, nano ou joe) e um monte de
coisas mais. A interface texto do Linux, ao contrário da do DOS, é bem poderosa :) Vá se
acostumando com a idéia de querer usar ela.
3.1.4. A interface gráfica (X-Window)
A interface gráfica vem crescendo cada vez mais no Linux. O que permite que o Linux tenha estes
recursos gráficos todos é o servidor X (X-Window). Em todas as atuais distribuições Linux é
incluído o Xorg (ou XFree86, a sua versão mais antiga), um servidor X totalmente gratuito para
Linux/Unix. Mas o servidor X é apenas quem vai fornecer o recurso de gerar a interface gráfica.
Para que haja um desktop, é necessário também a existência de um gerenciador de janelas (ou
Window Managers) que são programas que usam a biblioteca do X-Window para gerar as
aplicações, as janelas, a aparência do modo gráfico no Linux.
Por exemplo, o WindowMaker é um gerenciador de janelas, ele usa a biblioteca do X-Window
para gerar suas janelas e seus programas, como o dock. Sem um gerenciador de janelas, é inútil se
usar um servidor X, pois ele rodará, mas o usuário não poderá fazer nada nele. Quer ver?
Experimente executar o comando X. Irá se abrir uma interface gráfica, com o mouse, mas o usuário
não vai ter controle nenhum. Para finalizar esta seção aperte Ctrl-Alt-Backspace (combinação de
teclas que encerra forçadamente o servidor X).
Outros exemplos de gerenciadores de janelas: KDE, GNOME, Fluxbox, BlackBox, IceWM,
XFCE, Enlightenment e por aí vai.
Iremos falar das interfaces gráficas mais adiante, por enquanto ficaremos aprendendo como mexer
no console, que é a parte mais emocionante e a que mais se aprende.
3.1.5. Estrutura de diretórios no Linux
Diretórios! Ou pastas? Eis a questão! A raiz do Linux fica no diretório / e dentro deste diretório
existem vários outros, cada um significando uma coisa. Vamos aqui aprender o significado de cada
um para sabermos onde usar as coisas e onde colocar os arquivos adequadamente e
organizadamente. A estrutura de diretórios no Linux é basicamente dividida assim:
Pastas do LINUX e seu conteúdo
Agora
vamos
tentar
listar
para
que
servem
cada
um
destes
diretórios:
/sbin: Neste diretório estão localizados os arquivos vitais ao sistema Linux,
referentes a administração e manutenção de hardware e software. Um exemplo de um
arquivo que consta nesta pasta do sistema é o ifconfig, responsável pelas
configurações de endereçamento IP. Os arquivos desta pasta são utilizados por
todos
os
usuários
que
efetuem
login
neste
computador.
/bin: Ao contrário do que muita gente pensa, este diretório contém comandos que
não são somente utilizados pelo root (system administrator). Esta pasta contém
também arquivos que serão utilizados por usuários sem privilégios de root. O
diretório /bin armazena arquivos de shell como bash e csh e comandos bastante
utilizados
como
cp,
mv,
rm,
cat,
etc.
/usr/sbin: Esta pasta contém arquivos binários utilizados pelo administrador do
sistema, como network daemons e outros binários que apenas o administrador do
sistema tem acesso. O mais importante: estes arquivos não são vitais para a
manutenção
ou
reparação
do
sistema
Linux.
/usr/bin: Neste diretório estão contidos outros arquivos binários referentes aos
usuários. Estes binários não são essenciais ao usuários se comparados com a
pasta
/bin.
/boot: Este diretório contém o arquivo system.map e o kernel do Linux. Os
bootloaders (LILO e GRUB) colocam o backup do setor de boot neste diretório.
/dev: Este é um diretório muito importante ao sistema Linux. Nele estão contidos
os arquivos que representam partições, devices, dentre outros dispositivos. Aqui
encontramos arquivos como hda1, hda2, fd0, cdrom, etc. E cada arquivo representa
um
dispositivo
reconhecido
e
instalado
no
Linux.
/etc: Neste diretório ficam todos os arquivos de configuração de seu sistema
Linux. Aqui você encontra arquivos para configurar o Lilo (lilo.conf), BIND
(named.conf), resolução de DNS (resolv.conf), dentre outros. Vale ressaltar a
existência do subdiretório X11 utilizado para configuração do seu ambiente
gráfico, /etc/rc.d que é utilizado para adicionar ou modificar scripts
executados na inicialização do Linux. Este diretório deve entrar em seu sistema
de
backup,
como
parte
importante
dentro
do
Linux.
/home: Aqui ficam armazenadas as pastas de cada usuário (Home Directory). O
usuário root (system administrator) consegue enxergar e ter livre acesso a todas
as subpastas deste diretório, porém os demais usuários acessam somente sua
própria pasta. Dentro de cada pasta de usuário residem arquivos de configuração
para
programas
como
FTP,
IRC,
etc.
/lib: Contém todas as libraries que devem ser comuns a todo sistema
(compartilhadas). Este diretório pode ser comparado ao diretório System32 ou
System do Windows, utilizado para armazenar e compartilhar as DLLs (Dynamic Link
Libraries).
/lost+found: Sempre que seu sistema "crashar" ou tiver um shutdown forçado, o
Linux irá tentar recuperar o que está corrompido no próximo boot. Caso um
arquivo
esteja
corrompido,
ele
será
colocado
aqui
neste
diretório.
/mnt ou /media: Este é um diretório chamado de "mount point" (ponto de
montagem), onde serão colocados (apontados) todos as montagens do sistema
operacional. Este diretório usualmente conterá mount points ou subdiretórios
onde você poderá montar disquetes ou seu cdrom. Você pode também criar mount
points adicionais, caso você necessite, pois não existe uma limitação de mount
points.
/opt: Este diretório contém todos os softwares e pacotes de add-ons que não
fazem parte da instalação padrão do seu Linux. Geralmente você poderá encontrar
neste
diretório
softwares
como
o
KDE
ou
StarOffice.
/proc: Este é um diretório muito especial e muito complexo do sistema e que pode
render um único artigo só para ele. Para não confundir, podemos dizer que o
diretório /proc é um pseudo-diretório, que faz track de processos ativos na
máquina, status do sistema, dentre outras informações. Prometo fazer um artigo
para
explicar
para
que
serve
o
diretório
/proc
por
completo.
/root: Este é o home directory do usuário root. Não confunda a pasta /root com o
Root Directory ("/"), que é o topo do nosso sistema de arquivos. O /root é uma
pasta para armazenar arquivos pertinentes ao usuário root, onde somente ele tem
acesso.
/tmp: Este diretório armazena os arquivos que são utilizados por um curto
período de tempo (temporários). Alguns programas utilizam dele para guardar os
lock-files, usados para "prender" alguma funcionalidade, registro de dados, etc.
Este diretório é limpo durante o boot e shutdown de seu sistema. Não é
aconselhável guardar arquivos importantes aqui. Use somente para arquivos
temporários.
/usr: Este é um outro diretório muito importante ao sistema Linux. Neste
diretório
estão
armazenados
arquivos
binários
dos
usuários,
arquivos
relacionados ao sistema "X", programas como telnet, ftp, dentre outros, são
encontrados em subpastas do /usr. Vale ressaltar que o diretório /usr/doc contém
grande parte da documentação do Linux, e o diretório /usr/src/linux, que
armazena
o
código
fonte
do
Kernel.
/var: Este diretório contém dados de spool, como e-mail e outputs de daemons de
impressão. Este é o diretório padrão dos logs do sistema também, caso você não
tenha mudado de lugar. Um arquivo importante de log é o /var/log/messages, que
armazena logs do sistema, regras de iptables, etc. Um dos subdiretórios do /var
é o /var/named, que armazena as bases de dados DNS, do BIND.
Tabela 3.1. Estrutura de diretórios no Linux
Cada diretório tem seus subdiretórios com muita coisa para explorar. Você já pode ir dando uma
olhada para ver como tudo é organizado.
3.1.6. O interpretador de comandos (Shell)
Pronto. Você acaba de se logar no sistema, o que fazer agora? A primeira coisa que você tem de
saber é o com o que você está usando: um interpretador de comandos. Você estará num prompt
parecido com alguns destes:
madoka:/home/hugo$
[hugo@madoka hugo]$
Você está dentro de um interepretador de comandos, que no caso é o bash. O interpretador de
comandos é um mediador entre o usuário e a máquina. Você digita algum comando e o
interpretador lê o que você digitou e executa a tarefa correspondente. Sem um interpretador de
comandos, não haveria possibilidade de o usuário interagir com o sistema. Os interpretadores mais
comuns são: sh, bash, ash, csh, tcsh e ksh. Na maioria dos casos, você estará usando o bash (que
na minha opinião é realmente o melhor!).
Nota
Nos prompts do Linux, quando se acaba com o símbolo $, isto quer dizer que você está
logado com um usuário normal. Se você estiver logado com o root, ao invés do símbolo $, no
final do prompt existirá o símbolo #
Você pode ir testando seu interpretador de comandos executando comandos simples, ou fazendo
scripts shell, ou o que seja. Caso você queira usar outro interpretador de comandos, você pode
mudar a entrada no arquivo /etc/passwd para o usuário, ou pode simplesmente executar a shell
dentro de uma shell. Por exemplo, se você digitar csh, você entrará nesta shell. Quando quiser sair
da shell, utilize o comando exit (ou logout, ou também apertando Ctrl-D). Experimente testando
todas os interpretadores que citamos aqui.
3.1.7. Documentação
Índice
3.1.7.1. As páginas de manual
3.1.7.2. Documentos disponíveis
3.1.7.3. Comandos de ajuda
3.1.7.4. Listas de discussão
Ler é sempre importante! Da mesma forma que você deve estar lendo este manual, existem muitas
coisas para se ler e aprender no Linux.
3.1.7.1. As páginas de manual
O que você faz quando está confuso com algum comando? Não sabe como ele funciona, quais são
seus parâmetros, o que ele faz e essas coisas... No Linux há uma maneira bem fácil de entender
melhor e detalhadamente os comandos. Este método são as páginas de manual (manpages). Cada
comando tem sua página de manual e dentro desta há a descrição do comando, para que ele serve,
quais são seus autores, quais são seus parâmetros, bugs conhecidos, arquivos e outros comandos
relacionados, etc. Para acessar uma página de manual, você utiliza o seguinte comando:
$ man comando
Por exemplo, se você está com dúvida sobre o comando ls, simplesmente digite man ls e
aparecerá um manual falando apenas deste comando, com seus parâmetros e tudo mais. Este recurso
é muito bom porque o usuário consegue uma ajuda bem rápida e referencial.
3.2. Usando a Shell do Linux (Bash)
Índice
3.2.1. Características da shell
3.2.2. Configurando o PATH
3.2.3. Editando arquivos
Como dito anteriormente, na interface console há o que chamamos de interpretador de comandos,
ou shell. Existem vários tipos de shell, mas aqui explicarei um pouco sobre a shell bash, que é a
shell padrão da grande maioria das distribuições.
Antes de mais nada, só quero dizer que se você é um usuário comum que não quer nem saber de
obter sempre mais conhecimento e se aperfeiçoar, aprender sobre o console nem será tão útil... O
modo console é sempre bom para você sempre saber o que está acontecendo por trás das coisas: ele
te dá o poder da liberdade no seu sistema. Nem sempre é bom ficar preso atrás das janelas, né?
Lembre que essa seção e a Seção 3.3, “Comandos” estão interligadas. Uma complementa a outra e é
bom ler essa parte e ir praticando também com os comandos demonstrados :)
3.2.1. Características da shell
Algumas características do Linux em si e sua shell:
•
•
•
•
•
•
•
•
Nos prompts do Linux, quando se acaba com o símbolo $, isto quer dizer que você está
logado com um usuário normal. Se você estiver logado com o root, ao invés do símboloa $,
no final do prompt existirá o símbolo #
Nos nomes dos arquivos, os caracteres MAIÚSCULOS e minúsculos fazem a diferença. Isso
quer dizer que por exemplo: os arquivos PROGRAMA.tar.gz e programa.tar.gz são dois
arquivos completamente diferentes! Ou então: ls é um comando e LS é um erro :)
No Linux, não existem extensões .EXE, .COM especial para programas executáveis. Ao invés
disso, os arquivos têm permissão de executável ou não. O comando ls (Seção 3.3.1.2, “ls Listar arquivos”) e a parte Seção 3.6, “Permissões de arquivos” explicam isso melhor.
Além de arquivos comuns, no Linux existem os chamados links simbólicos, que são nada
mais nada menos que uma espécie de atalhos. A parte Seção 3.3.1.9, “ln - Linkando
arquivos” explica melhor isso.
O Linux é um sistema multi-tarefa, por isso, ele pode ser acessado por vários consoles ao
mesmo tempo, assim como pode ser rodado vários programas ao mesmo tempo. Para mudar
o console do 1 a 6, utilize Alt-N, onde o N corresponde ao número do console. Exemplo:
Alt-F1, Alt-F2, Alt-F3, Alt-F4, Alt-F5 e Alt-F6.
Depois de logado, se quiser sair, utilize o comando exit, ou o comando logout ou ainda a
combinação de teclas Ctrl-D.
Se algum programa estiver rodando no seu console, aperte as teclas Ctrl-Z para suspender
esse programa e voltar para o prompt. Para voltar pro programa, utilize o comando fg. Para
listar os programas suspendidos na sessão atual, utilize o comando jobs.
Exite um recurso muito interessante nas shells do Linux, que é o tab completion. Com ele
você pode completar comandos ou nomes de arquivos mais rapidamente sem precisar digitar
tudo. Para utilizar esse recurso, basta apenas digitar as primeiras letras do comando ou
arquivo e apertar a tecla Tab. O Linux irá completar o comando ou arquivo para você. Caso
haja mais de um arquivo começando com as letras que você digitou, apertando Tab mais
uma vez irá lhe dar todas as opções. Tente! Muito legal né? Quando você for digitar, seus
amigos vão ficar impressionados em como você digita tão rápido os comandos e arquivos! ;)
3.2.2. Configurando o PATH
Quando falamos em PATH, queremos dizer se um determinado diretório está acessivel sempre, de
qualquer lugar, para executar comandos. Quando um comando está dentro de um diretório PATH,
quer dizer que de qualquer lugar você poderá executá-lo. Você poderá querer mudar o PATH para
colocar algum diretório de algum programa qe você instalou ou coisa parecida e isso é feito na shell
bash. Para ver os atuais diretórios que estão no PATH da sua shell, digite o seguinte comando:
$ echo $PATH
Se o diretório desejado não estiver na lista, coloque-o dessa maneira:
$ PATH=$PATH:/diretorio/a/ser/colocado/no/path
Isso colocará o /diretorio/a/ser/colocado/no/path no PATH.
Dica
Essas instruções são válidas somente para uma seção! Ou seja, são temporários. Se você
quiser colocar um PATH permanente para o seu usuário, coloque num profile pessoal,
incluindo o comando mostrado no arquivo /home/usuario/.bashrc. Se quiser ser um PATH
global, coloque o comando no arquivo /etc/profile.
3.2.3. Editando arquivos
Você sempre vai precisar editar arquivos no Linux. Isso fará com que você aprenda ainda mais
sobre o funcionamento dos programas e serviços que funcionam nele. Para editar um arquivo na
shell, você precisará de um editor de texto para console. Nas distribuições atuais, existem os
seguintes editores de arquivos disponíveis para você usar:
•
•
•
•
vim
emacs
joe
nano
3.3.1.1. cd - Navegando entre diretórios
cd [nome_do_diretório]
Este comando acima mudará o diretório atual de onde o usuário está. Há também algumas
abreviações de diretórios no Linux para a facilitação, estes são:
Abreviação
. (ponto)
Significado
Diretório atual
.. (dois pontos) Diretório anterior
~ (til)
Diretório HOME do usuário
/ (barra)
Diretório Raiz
- (hífen)
Último diretório
Tabela 3.2. Parâmetros do comando cd
Por exemplo, se eu quero ir para o meu diretório home, faço o seguinte:
$ pwd
/usr/games
$ cd ~
$ pwd
/home/hugo
Ou seja, eu estava no diretório /usr/games e com um simples cd para o diretório ~, fui para o meu
diretório home (/home/hugo). Quando você deseja saber o caminho completo do diretório em que
você está, utilize o comando pwd. Se você deseja ir para um diretório que está na raiz diretamente,
você usa o / antes, exemplo:
$ pwd
/usr/local/bin
$ cd /etc/rc.d
$ pwd
/etc/rc.d
$ cd $ pwd
/usr/local/bin
Eu estava no diretório /usr/local/bin e quis ir para o diretório /etc/rc.d que está na raiz. Note
depois que eu usei o hífen e fui de volta para o último diretório em que eu estava.
3.3.1.2. ls - Listar arquivos
ls [opções] [arquivo/diretório]
Este comando lista os arquivos, nada mais que isso. Se você executar apenas o ls sozinho, ele vai
mostrar todos os arquivos existentes no diretório atual. Há também as opções extras:
Parâmetro
Significado
-l
Lista os arquivos em formato detalhado.
-a
Lista os arquivos ocultos (que começam com um .)
-h
Exibe o tamanho num formato legível (combine com -l)
Parâmetro
-R
Significado
Lista também os subdiretórios encontrados
Tabela 3.3. Parâmetros do comando ls
Exemplo de uma listagem detalhada:
$ ls -l
total 9916
drwxrwxr-x
-rw-r--r--rw-r--r--rw-r--r--
5
1
1
1
hugo
hugo
hugo
hugo
hugo
1302 Aug
hugo 122631 Jul
hugo 2172065 Jul
hugo 2023315 Jul
16
12
12
12
10:15
08:20
08:20
08:20
CursoC_UFMG
Database.pdf
MySQL.pdf
PHP.pdf
Podemos também usar no ls os wildcards, ou seja, caracteres que substituem outros. Exemplo: eu
quero listar todos os arquivos que têm a extensão .txt, faço o seguinte:
$ ls *.txt
debian-install.txt
ipfw.txt
manualito.txt
mouse.txt
named.txt
placa_de_video.txt
plip.txt
rede.txt
seguranca.txt
sis.txt
O wildcard é o *, que representa "tudo".txt. Existem outros wildcards, exemplo disso é o ponto
de interrogação (?), que substitui apenas 1 caractere, exemplo:
$ ls manual?.txt
manual1.txt
manual2.txt
manual3.txt
manualx.txt
manualP.txt
Existe outro wildcard, que envolve os colchetes. Por exemplo:
$ ls manual[3-7].txt
manual3.txt
manual4.txt
manual6.txt
manual7.txt
Lista todos os arquivos que tiverem como manual?.txt, onde o ? pode ser substituído por 3, 4, 5, 6
e 7.
3.3.1.3. mkdir - Cria um diretório
mkdir <nome_do_diretório>
Cria um diretório. Exemplo:
$ mkdir ~/paginas
Esse comando cria um diretório dentro do HOME do usuário que o executou.
3.3.1.4. rmdir - Remove um diretório vazio
rmdir <nome_do_diretorio>
Apaga um diretório que esteja vazio. Exemplo:
$ rmdir /tmp/lixo
Isto apagará o diretório /tmp/lixo apenas se ele estiver vazio. Para apagar um diretório com seu
conteúdo, use o comando rm.
3.3.1.5. cp - Cópia de arquivos e diretórios
cp [opções] <arquivo_origem> <arquivo_destino>
O comando cp copia arquivos e diretórios. Como opções dele, podemos ver:
Parâmetro
Significado
-i
Modo interativo. Pergunta se você quer sobrescrever ou não (confirmações)
-v
Mostra o que está sendo copiado.
-R
Copia recursivamente (diretórios e subdiretórios)
Tabela 3.4. Parâmetros do comando cp
Exemplos:
Quero copiar brasil.txt para livro.txt, com a opção de modo interativo.
$ cp -i brasil.txt livro.txt
cp: sobrescrever `livro.txt'?
Como o arquivo livro.txt já existia, ele pergunta se quer sobrescrever, responda y (sim) ou n
(não). Agora eu quero copiar o diretório /home/ftp com tudo dentro (até seus subdiretórios) para
/home/ftp2, faço o seguinte:
$ cp -R /home/ftp /home/ftp2
3.3.1.6. mv - Move arquivos e diretórios
mv <arquivo_origem> <arquivo_destino>
Este comando simplesmente move algum arquivo para outro lugar. Ele também é usado para
renomear um arquivo. Por exemplo, se eu quero renomear o industria.txt para fabrica.txt, eu
faço o seguinte:
$ mv industria.txt fabrica.txt
Se eu quiser mover o industria.txt para /home/usuario com o mesmo nome, faço:
$ mv industria.txt /home/usuario
3.3.1.7. rm - Deleta arquivos e diretórios
rm [opções] <arquivo>
Este comando apaga definitivamente o arquivo ou diretório. Exemplo:
$ rm arquivo.bin
Para apagar um diretório com todo seu conteúdo, usa-se a opção -r, assim:
$ rm -r /tmp/lixo
Cuidado
O comando rm -rf / é muito perigoso. Tente nunca usá-lo, senão todo seu sistema será
apagado ;)
3.3.1.8. find - Procurando arquivos
find <diretorio> [-name nomedoarquivo]
O comando find procura por arquivos no diretório especificado. Em seu uso mais simples, ele
procura pelos nomes dos arquivos, mas pode também procurar por permissões, última modificação,
etc. Como base, usaremos um exemplo para procurar o nome de um arquivo:
$ find /home/eitch -name arquivo.txt
Isso irá procurar o arquivo.txt dentro do diretório /home/eitch. Os wildcards mostrados no
comando ls (Seção 3.3.1.2, “ls - Listar arquivos”) também podem ser usados:
$ find /home/eitch -name documento*.odp
O find irá procurar todos os arquivos que tem o nome que começam com documento e terminam
com .odp.
3.3.1.9. ln - Linkando arquivos
ln -s <arquivo_origem> [link simbólico]
Este comando é usado para gerar links simbólicos, ou seja, que se comportam como um arquivo ou
diretório, mas são apenas redirecionadores que mandam seu comando para outro arquivo ou
diretório, por exemplo:
$ ln -s /manual /home/linux-manual
Este comando criará o link /home/linux-manual, se você der um ls -l você verá que o diretório
/home/linux-manual está apontando para /manual. Se você ir para o /home/linux-manual, você
na verdade estará no /manual, mas como é um link, não há diferença.
3.3.1.10. cat - Exibe o conteúdo de um arquivo ou direciona-o para outro
cat <arquivo>
Este comando existe para mostrar o conteúdo de um arquivo, ou para fazer a cópia deste arquivo, ou
uma junção. Vejamos um exemplo, se eu quiser mostrar o conteúdo de /home/usuario/contato,
eu digito:
$ cat /home/hugo/contato
Aparecerá o conteúdo do arquivo contato:
Hugo Cisneiros
hugo_arroba_devin_ponto_com_ponto_br
http://www.devin.com.br/eitch/
Este comando pode também servir de direcionador para outro arquivo. Indicadores são usados para
isso.
Indicador > faz uma cópia, exemplo:
$ cat contato1 > contato2
Indicador >> acrescenta um arquivo ao outro, exemplo:
$ cat contato1 > contato2
O cat pode fazer coisas que nem você imagina, como tocar sons. Para fazer isso é simples, ele
direciona o arquivo som para o dispositivo de áudio (que no linux é representado por um arquivo).
Primeiro vamos gravar com um microfone o seu som:
$ cat gravacao.au < /dev/audio
Agora escute o som que voce gravou com o comando:
$ cat gravacao.au > /dev/audio
3.3.1.11. file - Indicando o tipo de arquivo
file <arquivo>
Este comando identifica o tipo de arquivo ou diretório indicado pelo usuário conforme os padrões
do sistema operacional. Há varios tipos de retorno, vamos aqui ver alguns mais importantes:
ASCII text
directory
data
C Program source
ELF-Executable
Bourn-again shell-script
Apenas um exemplo deste comando:
$ file linux.txt
ASCII Text
3.3.2. Comandos sobre processos no sistema
Índice
3.3.2.1. ps - Listando processos
3.3.2.2. top - Listando processos em tempo real
3.3.2.3. kill - Matando um processo
3.3.2.4. killall - Matando processos pelo nome
3.3.2.5. w - Lista os usuários logados
Cada programa executado no Linux gera um processo no sistema. Cada um desses processos tem
um número de identificação próprio, chamado de PID (Process ID). Neste tópico, aprenderemos
alguns comandos para mexer com esses processos.
3.3.2.1. ps - Listando processos
ps [opções]
Quando um programa é executado no sistema, ele recebe um número de identificação, o chamado
PID. Este comando lista esses processos executados e apresenta o PID. Além do PID, ele também
mostra o comando executado (CMD) e também o STAT (status atual do processo executado, veja nota
abaixo), além de outros.
O status do processo é identificado por letras, aqui segue uma tabela com as definições de cada
letra:
Letra
Definição
0 (Zero) Não existente (Fruto da sua imaginação ou horas sem dormir)
S
Descansando, não ativo (Sleeping)
R
Rodando (Running)
I
Intermediando (Intermediate)
Z
Terminando (Zumbi, muito sinistro)
T
Parado (Stopped)
W
Esperando (Waiting)
Tabela 3.5. Status dos processos no comando ps
Agora um exemplo para este comando:
$ ps aux
USER
COMMAND
root
root
PID %CPU %MEM
1
2
0.0
0.0
0.0
0.0
VSZ
1120
0
RSS TTY
52 ?
0 ?
STAT START
TIME
S
SW
0:05 init
0:00 [kflushd]
Dec25
Dec25
root
root
root
root
hugo
hugo
hugo
hugo
hugo
hugo
hugo
3
4
1004
1007
1074
1263
1271
1275
2461
9618
12819
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.9
6.7
0.0
0
0 ?
0.0
0
0 ?
0.0 10820
48 ?
0.0 2852
0 ?
0.0 1736
0 tty1
0.0 1632
0 tty1
0.0 2304
0 tty1
2.4 4312 1360 tty1
0.0 1636
0 tty1
4.9 5024 2688 pts/1
6.9 5580 3796 ?
SW
SW
SN
SW
SW
SW
SW
S
SW
S
S
Dec25
Dec25
Dec25
Dec25
Dec25
Dec25
Dec25
Dec25
07:09
09:56
10:03
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:16
0:00
0:06
0:13
[kupdate]
[kpiod]
[mysqld]
[smbd]
[bash]
[startx]
[xinit]
wmaker
[netscape]
vim d03.html
mpg123 King Diam
3.3.2.2. top - Listando processos em tempo real
top
O comando top é um programinha que mostra ao usuário os processos ativos no sistema. Ele é uma
interface para o ps, ou seja, ele mostra as mesmas informações que o ps, só que em tempo real e na
ordem de uso (quanto mais em cima, mais o processo está gastando processamento e memória).
Experimente!
3.3.2.3. kill - Matando um processo
kill [-SINAL] <PID>
O comando kill é bastante importante. A função deste comando é muito conhecida de quem usa
Windows: ela mata um processo existente, principalmente quando o processo está travado (por isso
os usuários Windows utilzam bastante). Este comando pode ser usado não apenas para forçar o
término de um processo, como também enviar sinais para ele (Reiniciar, recarregar os arquivos de
configuração, terminar normalmente, etc).
Por exemplo, eu tenho um programa rodando (vim) e quero que ele seja morto natoralmente, sem
confirmação, nem nada. Eu forço essa ação com o seguinte comando:
$ ps aux | grep vim
hugo
4213
pt_BR.xml
0.1
0.6
9364
3544 pts/4
S+
12:46
0:02 vim tlm4.0-
Uma vez obtido o PID do processo, mato com o comando:
$ kill -9 4213
Com esse segundo comando, o sinal -9 foi mandado para o processo, matando-o sem piedade!
Agora vamos usar o comando kill para mandar terminar normalmente um processo:
$ kill -15 666
Ao invés do sinal 9, enviei o sinal 15, que significa terminar normalmente. Se fosse num ambiente
gráfico por exemplo, isso é o equivalente a clicar em um Fechar Janela ou algo do gênero :)
Dica
Ao invés de usar uma numeração para os sinais, é possível também usar os sinais escritos. Por
exemplo, o nome equivalente ao sinal -9 é -KILL, o -15 é -TERM.
Para obter uma lista dos sinais, use o comando:
$ man 7 signal
3.3.2.4. killall - Matando processos pelo nome
killall [-SINAL] <comando>
Faz a mesma coisa que o kill, só que a vantagem aqui é que você não precisa saber o PID do
processo e sim o nome. A desvantagem é que se tiver dois processos com o mesmo nome, os dois
são finalizados. Seguindo o exemplo do comando kill:
$ ps aux | grep vim
hugo
4213
pt_BR.xml
0.1
0.6
9364
3544 pts/4
S+
12:46
0:02 vim tlm4.0-
Uma vez obtido o PID do processo, mato com o outro comando:
$ killall -9 vim
E lá se vai nosso vim de novo, coitado :)
3.3.2.5. w - Lista os usuários logados
w
Com este comando, é possível você ver quais usuários estão atualmente logados no seu sistema,
além de informações como "O que ele está fazendo", "aonde está fazendo", "desde quando está
logado", etc. Vejamos um exemplo aqui da minha máquina:
$ w
15:16:47 up 6:28,
USER
TTY
hugo
:0
/usr/bin/startkde
hugo
pts/0
hugo
pts/1
hugo
pts/2
hugo
pts/3
hugo
pts/4
pt_BR.xml
hugo
pts/5
pt_BR.xml
7 users,
FROM
-
load average: 0.15, 0.27, 0.26
LOGIN@
IDLE
JCPU
PCPU WHAT
08:49
?xdm? 40:10
0.06s /bin/sh
-
08:49
13:07
14:05
15:16
12:26
6:26m
57:46
41:48
0.00s
10.00s
0.00s 22.68s kded
0.02s 0.00s man 7 signal
0.05s 0.03s ssh aeris
0.02s 0.00s w
0.45s 0.43s vim tlm4.0-
-
12:56
55:37
0.26s
3.3.3. Outros comandos diversos
0.23s vim tlm4.0-
Índice
3.3.3.1. Descompactar arquivos
3.3.3.2. Compactar arquivos
3.3.3.3. Espaço em disco
3.3.3.4. Informações do sistema
A seguir alguns comandos diversos que é bem útil saber, mas que não se encaixam em alguma
categoria que defini acima :)
3.3.3.1. Descompactar arquivos
Para arquivos .tar.gz:
$ tar zxpvf arquivo.tar.gz
Para arquivos .tar:
tar xpvf arquivo.tar
Para arquivos .zip:
unzip arquivo.zip
Para arquivos .rar:
unrar e arquivo.rar
Nota
Para a extensão .rar, é necessário um programa especial: o unrar. Ele é proprietário (mas
gratuito) e pode ser encontrado no endereço:
http://www.rarlab.com
3.3.3.2. Compactar arquivos
Empacotando um diretório em .tar:
tar cvf arquivo.tar diretorio/
Empacotando e compactando um diretório em .tar.gz:
tar zcvf arquivo.tar.gz diretorio/
3.3.3.3. Espaço em disco
Comando
Descrição
df -h
Mostra o espaço em disco das partições montadas
du -hs
Mostra o espaço ocupado pelo diretório atual
Tabela 3.6. Comandos de Espaço em Disco
3.3.3.4. Informações do sistema
Comando
Descrição
date
Mostra a data e hora atual
cal
Mostra um calendário com o dia atual
uptime
Mostra quanto tempo seu sistema está rodando
free
Exibe a memória livre, a usada e os buffers da memória RAM
uname -a
Mostra informações de versão do kernel
Tabela 3.7. Comandos para informações do sistema
3.5. Dispositivos
Índice
3.5.1. Listagem de dispositivos
3.5.2. Montando dispositivos (Disquete, HD, CD-ROM, etc)
3.5.3. Formatando partições e dispositivos
3.5.4. Verificando se existem badblocks
3.5.5. Outras dicas sobre dispositivos
Um dispositivo é todo o componente de hardware e do sistema operacional. Um dispositivo é algo
especial que é compartilhado com o kernel, ou seja, um exemplo de dispositivo são as impressoras,
CD-ROMs, modems, portas, mouse, HDs, etc. No Linux, os dispositivos físicos são tratados como
arquivos. Estes arquivos são um tipo especial no sistema de arquivos e se encontram no diretório
/dev. Se você der um ls neste diretório, verá que existe um pouquinho de arquivos (Bota
pouquinho nisso :)). Cada arquivo neste diretório corresponderá a um dispositivo de acordo com o
seu tipo.
3.5.1. Listagem de dispositivos
Índice
3.5.1.1. /dev/hdxx
3.5.1.2. /dev/sdxx
3.5.1.3. /dev/fdX
3.5.1.4. /dev/ttyX
3.5.1.5. /dev/ttySX
3.5.1.6. /dev/lpX
3.5.1.7. /dev/plipX
3.5.1.8. /dev/null
3.5.1.9. /dev/dsp
3.5.1.10. Outros dispositivos
3.5.1.1. /dev/hdxx
Aqui é correspondete as Interfaces IDEs, ou seja, tudo que tiver conectado nos cabos IDEs :)
Exemplos, podemos citar HDs e CD-ROMs. O primeiro x corresponde a qual IDE e o segundo x
(opcional) corresponde a partição. Veja a tabela à seguir:
Dispositivo
/dev/hda
Descrição
IDE Primária Master
— /dev/hda1 Partição 1 da IDE Primária Master
— /dev/hda2 Partição 2 da IDE Primária Master
/dev/hdb
IDE Primária Slave
— /dev/hdb1 Partição 1 da IDE Primária Slave
— /dev/hdb2 Partição 2 da IDE Primária Slave
/dev/hdc
IDE Secundária Master
— /dev/hdc1 Partição 1 da IDE Secundária Master
— /dev/hdc2 Partição 2 da IDE Secundária Master
/dev/hdd
IDE Secundária Slave
— /dev/hdd1 Partição 1 da IDE Secundária Slave
— /dev/hdd2 Partição 2 da IDE Secundária Slave
/dev/hde
Geralmente IDE adicional (RAID na placa-mãe, etc)
[...]
E vai se extendendo.
Tabela 3.10. Listagem de dispositivos - /dev/hdxx
Nota
Apesar de que na listagem anterior só se mostrou duas partições por IDE, pode-se ter muito
mais. Usando apenas partições primárias, podemos ter de 1 a 4 (/dev/hda1 a /dev/hda4).
Usando também partições extendidas, podemos ter até 254!
3.5.1.2. /dev/sdxx
Já o /dev/sdxx é a mesma coisa que os /dev/hdxx com a diferença que ao invés de ser IDE, é
SCSI ou Serial-ATA. As mesmas regras servem pra esse dispositivo também.
3.5.1.3. /dev/fdX
Este dispositivo representa o drive de disquete. O x representa o número do drive começando do
zero. Em outras palavras, se você tiver um drive de disquete no seu computador, o dispositivo dele
vai ser /dev/fd0, se tiver mais de 1, o segundo vai ser /dev/fd1 e por aí vai.
3.5.1.4. /dev/ttyX
Se você já se logou na interface texto (console), com certeza você já utilizou este dispositivo. Eles
são uma representação dos terminais de console... Por exemplo, na tela de console 1 (combinação
de teclas Alt-F1), o dispositivo é o /dev/tty1. A tela 2 (Alt-F2) é o dispositivo /dev/tty2 e assim
por diante. Para demonstrar isso, na interface texto e como root, o comando:
# echo "sou um console fantasma... Bu..." > /dev/tty12
Irá colocar a mensagem acima no console 12 (utilize o Alt-F12 para visualizar). Experimente!
3.5.1.5. /dev/ttySX
Portas seriais! As portas seriais são aquelas portas (já antigas) onde se liga um mouse serial, um
modem, ou até um cabo serial para conectar dois computadores. Hoje em dia, as portas seriais não
são tão comuns como antigamente e foram substituídas por portas PS/2 ou USB.
Fazendo uma comparação com o Windows/DOS, temos a seguinte equivalência:
Descrição
Dispositivo
/dev/ttyS0 COM1 (Porta serial 1)
/dev/ttyS1
COM2 (Porta serial 2)
/dev/ttyS2
COM3 (Porta serial 3)
/dev/ttyS3
COM4 (Porta serial 4)
Tabela 3.11. Listagem de dispositivos - /dev/ttySX
Saiba também que não se restringe a apenas 4 portas. Se por exemplo você tiver uma placa multiserial, as portas podem ir mais 8, 16 e por aí vai. Mas esse tipo de equipamento já está fora de moda
;)
3.5.1.6. /dev/lpX
Corresponde a porta da impressora ou porta de um serviço paralelo. X é o número correspondente a
porta... 0 = LPT1 por exemplo.
3.5.1.7. /dev/plipX
Esse dispositivo corresponde a uma conexão de cabo paralelo. O X será o número correspondente a
porta, como no exemplo anterior.
3.5.1.8. /dev/null
Este é um dispositivo muito especial e que você poderá usar bastante. Como o nome diz, é um
dispositivo nulo, ou seja, tudo que você referenciar ou redirecionar à ele, será efetivamente anulado
e mandado pro inferno!
3.5.1.9. /dev/dsp
Este dispositivo faz referência ao som (utilizando o modo OSS do som no kernel, mas com uma
compatibilidade do ALSA que é utilizado nos mais novos kernels). Na Seção 3.3.1.10, “cat - Exibe o
conteúdo de um arquivo ou direciona-o para outro” mostra como utilizar um dispositivo como este
para gravar e tocar sons!
Nota
As distribuições Linux mais atuais utilizam um sistema de arquivos feito especialmente para
os dispositivos do /dev. Este sistema se chama udev e cria os dispositivos de acordo com o
que está disponível na máquina e ajuda a trabalhar com o hotplug para que a remoção e
adição de dispositivos na máquina (exemplo: USB) seja mais prática.
3.5.2. Montando dispositivos (Disquete, HD, CD-ROM, etc)
Primeiro eu espero que você tenha lido sobre o que é um dispositivo. Agora vamos saber como se
usar um dispositivo, ou seja, um HD, um disquete, um CD-ROM, etc. O comando que usaremos
aqui é o mount, que pelo próprio nome, podemos ver que ele serve para "montar" dispositivos em
um certo lugar.
Vamos falar primeiro sobre como montar um disquetinho. Supondo que temos apenas um drive de
disquete, o nosso disquete estará representado no arquivo /dev/fd0. Então para montar o disquete,
colocamos o disquete e executamos o seguinte comando:
# mount /dev/fd0 /diretorio_onde_o_disco_vai_ser_montado
O diretório_onde_o_disco_vai_ser_montado tem que existir e tem que estar totalmente vazio.
Este diretório, que você pode nomear como quiser funciona como se você estivesse no disquete.
Agora se você quer montar outro disquete, você terá que desmontar o disquete montado primeiro,
para depois poder montar outro. Para desmontar, usa-se o comando umount:
# umount /dev/fd0
...ou...
# umount /diretorio_onde_o_disco_esta_montado
Agora vamos montar uma partição. É o mesmo esquema de montar o disquete, só que o arquivo do
dispositivo é diferente. Para partições em um HD IDE, os nomes dos dispositivos são /dev/hdxx e
para partições em um HD SCSI ou Serial-ATA, os nomes são /dev/sdxx. Se eu quero montar a
partição /dev/hda2 (HD número 1, partição número 2), eu faço:
# mount /dev/hda2 /diretorio
E para desmontar, usa-se o comando umount:
# umount /dev/hda2
...ou...
# umount /diretorio
Existe também no comando mount, o parâmetro -t, que vai indicar que tipo de sistema de arquivos
a partição usa (FAT32, FAT16, minix, ext2, UMSDOS, etc). Se você não colocar esta opção, o
comando força uma compatibilidade para a montagem. O recomendado é colocar esta opção, pois
às vezes o mount não consegue detectar qual o sistema de arquivos e gera um erro. Um exemplo do
uso da opção -t seria:
# mount -t vfat /dev/hda2 /diretorio
Este comando montará uma partição FAT32 em /diretorio. Agora vamos montar um CD-ROM.
O mesmo esquema, só que você deve saber qual o dispositivo referente ao seu CD-ROM, que tem
como nome /dev/hdx, onde x é a letra correspondente à posição do CD-ROM na IDE. Para montar
um exemplo, façamos:
# mount /dev/cdrom /mnt/cdrom
Para desmontar, a mesma coisa de sempre:
# umount /dev/cdrom
...ou...
# umount /mnt/cdrom
Nota
Se você der uma olhada no arquivo /dev/cdrom, você verá que ele não é um dispositivo e
sim um link simbólico para o dispositivo correspondente ao CD-ROM (/dev/hdx). Isso
quer dizer que você pode substituir o /dev/cdrom pelo /dev/hdx tranqüilamente, assim
como pode também modificar o link simbólico para apontar para outro dispositivo.
Existe outro método de montagem muito mais prático do que os citados acima... É uma préconfiguração de montagem no arquivo /etc/fstab. Este arquivo contém as informações de
montagem para os dispositivos e seus diretórios. Por exemplo, quando a sua distribuição inicia, ela
procura no /etc/fstab para saber onde está a raiz do seu sistema e vai montar no / (raiz). Também
contém informações de montagem para os diretórios especiais como o /proc e até mesmo para o
uso da memória swap. Vejamos aqui o meu arquivo /etc/fstab como exemplo para estudarmos
ele:
$ cat /etc/fstab
/dev/hda2
/dev/hda5
/dev/hda1
/dev/fd0
/dev/cdrom
none
none
swap
/
/boot
/mnt/floppy
/mnt/cdrom
/proc
/dev/pts
swap
ext3
ext3
auto
iso9660
proc
devpts
defaults
defaults
defaults
user,noauto
user,noauto,ro
defaults
gid=5,mode=620
0
0
1
0
0
0
0
0
0
1
0
0
0
0
Viu este exemplo? Peguemos a segunda linha. Esta segunda linha é a minha raiz, que está na
partição /dev/hda5, será montada automaticamente (defaults) no diretório / (raiz) durante a
inicialização. E esta partição tem o sistema de arquivos ext3. Na primeira temos a montagem da
memória swap... E vejamos a linha que começa com /dev/cdrom. Aqui facilita as coisas porque os
parâmetros user,noauto,ro significam que qualquer usuário pode montar o CD-ROM (user), não
é montado automaticamente na inicialização (noauto) e é montado como somente leitura (ro).
Qual a diferença? O comando mount só pode ser usado pelo root, mas com essa opção no
/etc/fstab, um usuário comum pode montar o CD-ROM apenas com o comando mount
/mnt/cdrom, ou mount /dev/cdrom. A sintaxe deste arquivo não é muito difícil e vendo este
exemplo aqui, você pode muito bem criar suas próprias configurações para dar mais praticidade no
seu uso com os dispositivos no Linux!
Cuidado
Mexa à vontade no /etc/fstab, mas nunca nas linhas que já vêm, pois se não o Linux pode
não achar sua partição e poderá não conseguir iniciar o sistema e você terá de bootar com um
bootdisk para consertar isto... Então mexa, mas pense duas vezes antes de mexer e sempre
faça backups! Na verdade esse aviso serve para qualquer coisa que você faça, fazer backup é
sempre uma boa prática! :)
3.6. Permissões de arquivos
Índice
3.6.1. Visualizando e entendendo as permissões
3.6.2. Mudando as permissões com o chmod
3.6.3. Mudando o dono dos arquivos com o chown
Um clássico tutorial sobre permissões de arquivos! No Linux, como em outros sitemas Unix, cada
arquivo tem uma permissão. As permissões são atributos dos arquivos que especificarão se ele pode
ser lido, executado e/ou escrito. Estas permissões vão definir o que um usuário pode fazer ou não.
3.6.1. Visualizando e entendendo as permissões
Para saber se um programa é executável ou não, execute um ls -l e veja no lado esquerdo se o
arquivo tem um x nos seus argumentos, como no exemplo abaixo:
# ls -l
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxrwxr-x
dr-xr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
-rwxr--r--rw-rw-r--rw-rw-rw-
2
2
2
3
2
11
11
3
2
1
1
1
root
root
root
root
root
root
root
root
root
root
killer
hugo
root
root
root
root
root
root
root
root
root
root
users
visits
1024
1024
1024
8192
1024
2048
2048
1024
12288
57
2342
23412
Dec
Dec
Dec
Mar
Feb
Mar
Feb
Feb
Nov
Mar
Mar
Mar
23
31
6
11
27
11
23
23
2
10
10
09
15:22
05:48
15:51
10:17
13:52
10:19
19:08
19:13
11:25
03:44
03:12
22:22
bin
boot
cdrom
dev
dosa
etc
home
lib
lost+found
make-backup
teste.txt
teste2.txt
No exemplo acima todos os arquivos tem como dono o root e como grupo-dono também o root,
com exceção do teste.txt que o dono é killer e o grupo é users e também teste2.doc, no qual
hugo é o dono e o grupo visits também é dono. Como você pode ver do lado esquerdo de cada
arquivo/diretório existe um série de letras r, w, x ou d! Vamos ver o que representa cada uma delas:
drwxrwxrwx
0111222333
No caso acima, a primeira coluna significa (número 0) se o nome listado é um diretório ou não, caso
não seja um diretório ele será exibido da seguinte maneira:
-rwxr--r-1 root
root
57 Mar 10 03:44 make-backup
\--------> Não contém a letra 'd', não é diretório e sim arquivo
O exemplo abaixo mostra o que seria um diretório:
drwxr--r-1 root
root
1 Mar 10 01:12 bin
\----------> Contém a letra 'd' na primeira coluna, é um diretório
Também há casos em que no lugar do d, aparecem outras letras que indicam outros tipos de
arquivos. A letra l significa que é um link simbólico, as letras c e b correspondem à dispositivos
(/dev). Veja alguns exemplos abaixo:
crw-rw---brw-rw---lrwxrwxrwx
1 hugo
2 hugo
1 root
audio
cdrom
root
14,
22,
4 Dec 2 1999 audio
64 May 5 1998 hdd
8 Oct 17 22:53 cdrom -> /dev/hdd
Continuando, na segunda coluna (números 1 de acordo com o exemplo mais acima) temos as
definições para o dono do arquivo, como mostra o exemplo:
-rwxr--r-1 killer
||\--------> O dono do
|\---------> O dono do
\----------> O dono do
users
1231 Mar 09 12:12 teste.txt
arquivo (killer) pode executar o arquivo, x=executable!
arquivo (killer) pode gravar no arquivo, w=writable!
arquivo (killer) pode ler o arquivo, r=readable!
Seguindo, na terceira coluna (números 2 de acordo com o exemplo lá em cima) temos as definições
para o grupo que é dono do arquivo, como mostra o exemplo:
-r--rwxr-1 fernando visits
||\-----> O grupo dono do arquivo
|\------> O grupo dono do arquivo
\-------> O grupo dono do arquivo
212 Mar 01 12:42 exemplo.sxi
(visits) pode executar o arquivo!
(visits) pode gravar no arquivo!
(visits) pode ler o arquivo!
Finalmente, temos a quarta coluna (composto pelos números 3), essa coluna se refere às permissões
para todos os outros usuários do sistema, sem ser os donos e grupos-donos dos mesmos, exemplo:
-r--r--rwx
1 fernando visits
1231 Mar 03 12:42 exemplo2.doc
||\--> Todos os usuários (exceto fernando e usuários do grupo visits)
||
tem permissão para acessar o arquivo!
|\---> Todos os usuários (exceto fernando e usuários do grupo visits)
|
tem permissão para gravar no arquivo!
\----> Todos os usuários (exceto fernando e usuários do grupo visits)
tem permissão para ler o arquivo!
Quando nos referimos a diretório ao invés de arquivos, o flag x (executável) diz se o diretório é ou
não acessível, já que não podemos executar diretórios... Exemplo:
drwxr--r-- 1 root
root
2134 Mar 01 12:54 exemplo3
||||| \----> Todos os usuários podem ler o interior do diretório, mas não
|||||
podem usar o comando 'cd' para entrar nele, pois não existe
|||||
o FLAG 'x' para a quarta coluna!
||||\-------> Usuários do grupo 'root' podem ler o interior do diretório,
||||
mas também não podem usar 'cd' para entrar no diretório!
|||\--------> O usuário 'root' pode usar 'cd' para entrar no diretório!
||\---------> O usuário 'root' pode gravar arquivos nesse diretório!
|\----------> O usuário 'root' pode ler o interior desse diretório!
\-----------> Indica que o nome listado é um diretório!
3.6.2. Mudando as permissões com o chmod
O comando chmod pode ser usado para mudar os flags rwx dos arquivos e/ou diretórios, a sintaxe
básica do comando é:
chmod [ugoa]{-+}[rwx] <nome_do_arquivo_ou_diretório>
Então vamos a um exemplo. Se eu quero mudar a permissão para o dono do arquivo (u=user) poder
ler e gravar (rw) no arquivo1.txt, faço o seguinte:
$ chmod u+rw arquivo1.txt
Caso você queira desfazer o comando, você faria: chmod u-rw arquivo1.txt. Como se vê, o + ou
- define se as flags serão ativadas ou desativadas! Outros exemplos:
$ chmod a+r arquivo2.txt
Acima, todos os usuários (a=all) podem ler o arquivo2.txt. Outro exemplo:
$ chmod o+w arquivo3.txt
Neste caso outros usuários (o=others) sem ser o dono e o grupo dono do arquivo, podem gravar no
arquivo3.txt. Outro exemplo:
$ chmod g+x netscape
Acima, o grupo-dono do arquivo (g=group) pode executar o arquivo netscape.
O comando chmod também pode ser usado com números, em vez das flags. Este método é chamado
de octal, veja o exemplo abaixo:
$ chmod 664 arquivo.txt
O que quer dizer cada um desses números? Veja abaixo:
Número
Significado
Número
Significado
0
Nenhuma permissão
1
Permissão para executar
2
Permissão para gravar
3
Permissão para gravar e executar
4
Permissão para ler
5
Permissão para ler e executar
6
Permissão para ler e gravar
7
Permissão para ler, gravar e executar
Tabela 3.12. Permissões em Octal
No exemplo o comando informou que o arquivo.txt pode ser lido e gravado pelo seu dono
(numero 6 na primeira coluna), informou que pode também ser lido e gravado pelos usuários que
compõem o grupo-dono (número 6 na segunda coluna) e informou que pode ser lido por todos os
outros usuários do sistema (número 4 na última coluna).
3.6.3. Mudando o dono dos arquivos com o chown
O comando chown é simples e pode ser usado para mudar o dono e o grupo dono de um
arquivo/diretório. E é usado da seguinte maneira:
chown <usuario.grupo> <arquivo_ou_diretorio>
Como exemplo, vamos definir que um arquivo teste4.txt terá como dono killer e como grupo
users:
$ chown killer.users teste4.txt
Outros exemplos:
$ chown mrdvs.visits teste5.txt
$ chown hugo.users teste6.txt
Download

Linux - Treinamento