Índice
$LANG
"$PATH
"$HOME
"Eu acho que aprender um sistema de computador é como aprender uma nova língua estrangeira. Apesar dos livros e documentação darem ajuda, você tem que praticar também. De modo a ajudá-lo num iniciar suave, Eu elaborei alguns pontos básicos.
O desenho poderoso da Debian GNU/Linux vem do sistema operativo Unix, isto é, um sistema operativo de multi-utilizador e multi-tarefas. Você precisa aprender a tirar vantagem do poder desta funcionalidades e semelhanças entre Unix e GNU/Linux.
Não se esconda dos textos orientados ao Unix e não se guie somente nos textos do GNU/Linux, por isto rouba-lhe muita informação útil.
![]() |
Nota |
---|---|
Se você tem usado qualquer sistema do tipo Unix por uns tempos com ferramentas de linha de comandos, provavelmente já sabe tudo o que Eu explico aqui. Por favor use isto como um teste de realidade e refrescamento. |
Após arrancar o sistema, é-lhe apresentado o ecrã de login baseado em
caracteres se você não instalar o X Window
System com um gestor de ecrã como o gdm
. Suponha
que o nome da sua máquina é foo
, o aviso de login
parece-se com o seguinte.
foo login:
Se você instalou um ambiente GUI tal como o GNOME ou KDE, então você pode obter o aviso de login com Ctrl-Alt-F1, e você pode regressar ao ambiente GUI via Alt-F7 (veja Secção 1.1.6, “Consolas virtuais” em baixo para mais informação).
No aviso de login, você escreve o seu nome de utilizador, ex
pinguim
, e carrega na tecla Enter, depois escreve a sua
palavra-passe e carrega na tecla Enter mais uma vez.
![]() |
Nota |
---|---|
Seguindo a tradição do Unix, o nome de utilizador e palavra-passe do sistema Debian são sensíveis a maiúsculas/minúsculas. O nome de utilizador é geralmente escolhido apenas em minúsculas. A primeira conta de utilizador é geralmente criada durante a instalação. Podem ser criadas contas de utilizador adicionais com adduser(8) pelo root. |
O sistema inicia com a mensagem de boas vindas armazenada em
"/etc/motd
" (Mensagem do Dia) e apresenta um aviso de
comando.
Debian GNU/Linux lenny/sid foo tty1 foo login: pinguim Password: Last login: Sun Apr 22 09:29:34 2007 on tty1 Linux snoopy 2.6.20-1-amd64 #1 SMP Sun Apr 15 20:25:49 UTC 2007 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. foo:~$
Aqui, a parte principal da mensagem de boas vindas pode ser personalizada ao
editar o ficheiro "/etc/motd.tail
". A primeira linha é
gerada a partir de informação do sistema usando "uname
-snrvm
".
Agora você está na shell. A shell interpreta os seus comandos.
Se você instalou o X Window System com
um gestor de ecrã como o gdm
do GNOME ao seleccionar a tarefa "Ambiente de Trabalho"
durante a instalação, é-lhe apresentado o ecrã de login gráfico após
arrancar o sistema. Você escreve o seu nome de utilizador e a sua palavra
passe para iniciar sessão na conta de utilizador não-privilegiado. Use a
tecla Tab para navegar entre nome de utilizador e palavra-passe ou use o
rato e o clique principal.
Você pode obter o aviso de shell sob X ao iniciar um programa
emulador de terminal x
tal como o
gnome-terminal(1),
rxvt(1)
ou o
xterm(1).
Sob o ambiente de trabalho GNOME, clicar em "Aplicações" → "Acessórios" →
"Terminal" é suficiente.
Pode ver também a secção abaixo Secção 1.1.6, “Consolas virtuais”.
Sob alguns outros sistema de Ambiente de trabalho (como o
fluxbox
), pode não existir um ponto de partida óbvio para
o menu. Se isto acontecer, tente o clique direito no centro do ecrã e espere
que aparece um menu.
A conte de root também é chamada de super utilizador ou utilizador privilegiado. A partir desta conta, você pode executar as seguintes tarefas de administração do sistema.
Lê, escreve e remove quaisquer ficheiros no sistema independentemente das suas permissões
Define o dono e permissões de quaisquer ficheiros no sistema
Define a palavra-passe de quaisquer utilizadores não privilegiados do sistema.
Login em quaisquer contas sem as suas palavras-passe
Este poder ilimitado da conta root querer que você seja atencioso e responsável quando a usa.
![]() |
Atenção |
---|---|
Nunca partilhe a palavra-passe de root com outros. |
![]() |
Nota |
---|---|
As permissões de um ficheiro (incluindo dispositivos de hardware como CD-ROM etc. que os quais são apenas outros ficheiros para o sistema Debian) podem torná-lo não-utilizável ou inacessível para utilizadores não-root. Apesar do uso da conta root ser um modo rápido de testar este tipo de situação, a sua resolução deve ser feita através da definição correcta das permissões do ficheiro e membros do grupos de utilizadores. (veja Secção 1.2.3, “Permissões do sistema de ficheiros”). |
Aqui estão alguns métodos básicos de ganhar o aviso de shell de root ao usar a palavra-passe do root.
Escreva root
no aviso de login baseado em caracteres.
Clique "Aplicações" → "Acessórios" → "Terminal de Root", sob o ambiente de trabalho GNOME.
Escreva "su -l
" no aviso de shell de qualquer utilizador.
Isto não preserva o ambiente do utilizador actual.
Escreva "su
" no aviso de shell de qualquer utilizador.
Isto preserva algum do ambiente do utilizador actual.
Quando o menu do seu ambiente de trabalho não inicia ferramentas GUI de administração do sistema automaticamente com os privilégios apropriados, você pode iniciá-las a partir do aviso de shell de root do emulador dum terminal X, tal como gnome-terminal(1), rxvt(1), ou xterm(1). Veja Secção 1.1.4, “A linha de comandos shell do root” e Secção 7.8.4, “Correr clientes X como root”.
![]() |
Atenção |
---|---|
Nunca inicie o gestor de ecrã/sessão X sob a conta do root ao escrever
|
![]() |
Atenção |
---|---|
Nunca execute programas GUI remotos não-de-confiança sob o X Window quando é mostrada informação critica porque pode "espiar" o seu ecrã X. |
No sistema Debian predefinido, existem seis consolas alternáveis de
caracteres tipo VT100 disponíveis para
arrancar a shell de comandos directamente na máquina Linux. A menos que você
esteja num ambiente GUI, você pode mudar entre consolas virtuais ao
pressionar Left-Alt-key
e umas das teclas
F1
— F6
simultâneamente. Cada consola
de caracteres permite login independente para a conta e oferece o ambiente
de multi-utilizador. Este ambiente de multi-utilizador é uma grande
funcionalidade do Unix, e muito viciante.
Se você está sob o X Window System, pode ganhar acesso à consola 1 ao
pressionar as teclas Ctrl-Alt-F1
, isto é, a
tecla-Ctrl-esquerda
, a
tecla-Alt-esquerda
, e a tecla-F1
são
pressionadas em conjunto. Você pode regressar ao X Window System, que corre
normalmente na consola virtual 7, ao pressionar Alt-F7
.
Você pode alternativamente mudar para outra consola virtual, por exemplo para a consola 1, a partir da linha de comandos.
# chvt 1
Você escreve Ctrl-D
, isto é, a tecla Ctrl
esquerda
e a tecla d
pressionadas em conjunto,
no aviso de comando para fechar a actividade da shell. Se estiver na consola
de caracteres, você retorna ao aviso de login com isto. Mesmo que estes
caracteres de controle sejam referidos como "control D" com letra maiúscula,
você não precisa de pressionar a tecla Shift. A expressão curta,
^D
, também é usada para
Ctrl-D
. Alternativamente, você pode escrever "exit".
Se você está no
emulador-terminal-x(1),
você pode fechar a janela do emulador-terminal-x
com
isto.
Tal como qualquer outro SO moderno onde a operação de ficheiros involve colocar dados em cache em memória para melhoria da performance, o sistema Debian precisa de um processo de desligar apropriado antes que a energia possa ser desligada com segurança. Isto é para manter a integridade dos ficheiros, ao forçar todas as alterações em memória a serem escritas no disco. Se estiver disponível software de controle de energia, o processo de desligar desliga automaticamente a energia do sistema. (Caso contrário, você pode ter de pressionar o botão de energia por alguns segundos após o procedimento de desligar.)
Você pode desligar o sistema sob o modo normal de multi-utilizador a partir da linha de comandos.
# shutdown -h now
Você pode desligar o sistema sob o modo único-utilizador a partir da linha de comandos.
# poweroff -i -f
Alternativamente, você pode teclar Ctrl-Alt-Delete
(A
tecla-Ctrl-esquerda
, a
tecla-Alt-esquerda
, e Delete
são
pressionadas em conjunto) para desligar o sistema se
"/etc/inittab
" possuir
"ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now
"
nele. Veja
inittab(5)
para detalhes.
Quando o ecrã fica agressivo após fazer coisas estranhas tal como
"cat <algum-ficheiro-binário>
", escreva
"reset
" na linha de comandos. Você poderá não ver o
comando a aparecer quando o escreve. Você também pode usar
"clear
" para limpar o ecrã.
Apesar de mesmo uma instalação mínima do sistema Debian sem quaisquer
tarefas de ambiente de trabalho disponibilizar as funcionalidades básicas do
Unix, é uma boa ideia instalar alguns pacotes baseados em linha de comandos
e terminais de caracteres baseados em curses tais como o
mc
e o vim
com o
apt-get(8)
para iniciantes para começar com o seguinte.
# apt-get update ... # apt-get install mc vim sudo ...
Se você já tiver estes pacotes instalados, não serão instalados novos pacotes.
Tabela 1.1. Lista de pacotes de programas de modo de texto interessantes
pacote | popcon | tamanho | descrição |
---|---|---|---|
mc
*
|
V:11, I:26 | 6600 | Um gestor de ficheiro de écran completo em modo de texto |
sudo
*
|
V:44, I:73 | 1365 | Um programa que permite privilégios de root limitados aos utilizadores |
vim
*
|
V:16, I:37 | 1829 | O editor de texto de Unix Vi IMproved, um editor de texto de programadores (versão standard) |
vim-tiny *
|
V:13, I:94 | 766 | O editor de texto de Unix Vi IMproved, um editor de texto de programadores (versão compacta) |
emacs23 *
|
V:4, I:8 | 13009 | O Projecto Emacs do GNU, o editor de texto extensível baseado no Lisp (versão 23) |
w3m
*
|
V:24, I:86 | 1911 | Exploradores WWW de modo de texto |
gpm
*
|
V:2, I:3 | 584 | O cortar-e-colar estilo Unix na consola de texto (daemon) |
Pode ser uma boa ideia ler algumas documentações informativas.
Tabela 1.2. Lista de pacotes de documentação informativa
pacote | popcon | tamanho | descrição |
---|---|---|---|
doc-debian *
|
I:84 | 408 | Documentação do Projecto Debian, (FAQ do Debian) e outros documentos |
debian-policy *
|
I:6 | 3592 | Manual de Politicas Debian e documentos relacionados |
developers-reference *
|
I:0.8 | 1424 | Guias e informação para programadores de Debian |
maint-guide *
|
I:0.5 | 740 | Guia dos Novos Maintainers de Debian |
debian-history *
|
I:0.2 | 3760 | História do Projecto Debian |
debian-faq *
|
I:75 | 1212 | FAQ do Debian |
doc-linux-text *
|
I:83 | 8616 | Manuais de Linux e FAQ (texto) |
doc-linux-html *
|
I:0.5 | 62564 | Manuais de Linux e FAQ (html) |
sysadmin-guide *
|
I:0.2 | 964 | O Guia do Administrador de Sistema Debian |
Você pode instalar alguns destes pacotes com o seguinte.
# apt-get install nome_do_pacote
Se você não deseja usar a sua conta de utilizador principal para as
seguintes actividades de treino, você pode criar uma conta de utilizador
para treinos, por exemplo fish
fazendo o seguinte.
# adduser fish
Responder a todas as questões.
Isto cria uma nova conta chamada fish
. Após praticar,
você pode remover esta conta de utilizador e o seu directório home fazendo o
seguinte.
# deluser --remove-home fish
Para a estação de trabalho típica de único utilizador como o ambiente de
trabalho do sistema Debian no PC portátil, é comum implementar uma
configuração simples do
sudo(8)
como se segue para permitir ao utilizador não-privilegiado,
ex. penguin
, ganhar privilégios administrativos apenas
com a sua palavra passe de utilizador mas sem a palavra passe do root.
# echo "penguin ALL=(ALL) ALL" >> /etc/sudoers
Alternativamente, é também comum fazer como se segue para permitir a um
utilizador não privilegiado, ex. penguin
, ganhar
privilégios administrativos sem qualquer palavra-passe.
# echo "penguin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
Este truque só deve ser usado na estação de trabalho de um único utilizador o qual você administra e onde você é o único utilizador.
![]() |
Atenção |
---|---|
Não configure assim as contas de utilizadores normais numa estação de trabalho de multi-utilizadores porque seria muito mau para a segurança do sistema. |
![]() |
Cuidado |
---|---|
A palavra passe e a conta do |
![]() |
Cuidado |
---|---|
O privilégio administrativo neste contexto pertence a alguém autorizado a executar as tarefas de administração do sistema numa estação de trabalho. Nunca dê tais privilégios a um gestor do departamento Administrativo da sua firma ou ao seu chefe a menos que eles sejam autorizados e capazes. |
![]() |
Nota |
---|---|
Para disponibilizar privilégios de acesso a dispositivos limitados e
ficheiros limitados, você deve considerar usar o group para disponibilizar acesso limitado em vez de
usar os privilégios do |
![]() |
Nota |
---|---|
Com uma configuração mais atenciosa e cuidadosa, o sudo(8) pode garantir privilégios administrativos limitados a outros utilizadores num sistema partilhado sem partilhar a palavra passe do root. Isto pode ajudar com as responsabilidades com máquinas com múltiplos administradores para que você possa saber quem fez o quê. Por outro lado, você pode querer que mais ninguém tenha tais privilégios. |
Agora você está pronto para brincar com o sistema Debian sem riscos desde que use a conta de utilizador sem-privilégios.
Isto porque o sistema Debian é, mesmo após uma instalação predefinida, configurado com permissões de ficheiros apropriadas que previne os utilizadores não privilegiados de danificarem o sistema. É claro, podem ainda existir alguns buracos que possam ser explorados mas aqueles que se preocupam com estes problemas não deveriam ler esta secção e deveria ler o Manual de Segurança Debian.
Nós aprendemos o sistema Debian como um sistema tipo Unix com o seguinte.
Secção 1.2, “Sistema de ficheiros tipo Unix” (conceitos básicos)
Secção 1.3, “Midnight Commander (MC)” (método de sobrevivência)
Secção 1.4, “O ambiente de trabalho estilo Unix básico” (método básico)
Secção 1.5, “O simples comando de shell” (mecanismo da shell)
Secção 1.6, “Processamento de texto estilo Unix” (método de processamento de texto)
No GNU/Linux e noutros sistemas operativos tipo
Unix, os ficheiros estão organizados em
directórios. Todos os ficheiros e
directórios estão organizados num grande árvore que nasce em
"/
". É chamada uma árvore porque se você desenhar o
sistema de ficheiros, parece-se com uma árvore mas está de cabeça para
baixo.
Estes ficheiros e directórios podem estar espalhados por vários
dispositivos. O
mount(8)
serve para anexar o sistema de ficheiros encontrado em algum dispositivo à
grande árvore. Reciprocamente, o
umount(8)
desanexa-os de novo. Nos kernels Linux recentes, o
mount(8)
com algumas opções pode unir parte de uma árvore de ficheiros noutro lugar
ou pode montar um sistema de ficheiros como partilhado, privado, escravo ou
não-unível. AS opções do mount suportadas para cada sistema de ficheiros
estão disponíveis em
"/share/doc/linux-doc-2.6.*/Documentation/filesystems/
".
Os directórios no sistema Unix são
chamados pastas em alguns outros
sistemas. Por favor note também que não existe conceito para drive tal como "A:
" em qualquer
sistema Unix. Existe um sistema de ficheiros, e tudo está incluído
nele. Esta é uma enorme vantagem em comparação com o Windows.
Aqui estão algumas noções básicas de ficheiros Unix.
Os nomes de ficheiro são sensíveis a
maiúsculas/minúsculas. Isto é, "MEUFICHEIRO
" e
"MeuFicheiro
" são ficheiros diferentes.
O directório root (raiz) significa a raiz
do sistema de ficheiros referida simplesmente como
"/
". Não confundir isto com o directório pessoal do
utilizador root: "/root
".
Todos os directórios têm um nome que pode conter quaisquer letras ou
símbolos excepto
"/
". O directório raiz é uma excepção. O seu
nome é "/
" (pronuncia-se "slash" ou "o directório raiz) e
não pode ser renomeado.
Cada ficheiro ou directório é designado por um nome de ficheiro totalmente qualificado, nome de ficheiro absoluto, ou caminho, que fornece a sequência de directórios que têm de ser passados para o alcançar. Este três termos são sinónimos.
Todos os nomes de ficheiro totalmente
qualificados começam com o directório "/
", e
existe um "/
" entre cada directório ou ficheiro no nome
de ficheiros. O primeiro "/
" é o directório de nível de
topo, e os outros "/
"' separam os sub-directórios
sucessivos, até que se chegue à última entrada que é o nome do ficheiro
real. As palavras usadas aqui conseguem ser confusas. Veja o seguinte
nome de ficheiro completamente
qualificado como um exemplo:
"/usr/share/keytables/us.map.gz
". No entanto, as pessoas
também se referem ao seu nome base "us.map.gz
" sozinho
como um nome de ficheiro.
O directório raiz tem alguns ramos, tais como "/etc/
" e
"/usr/
". Estes sub-directórios por sua vez ramificam-se
em mais sub-directórios, tais como "/etc/init.d/
" e
"/usr/local/
". Tudo visto em colectivo é chamada a
árvore de directórios. Você pode pensar
num nome de ficheiro absoluto como a rota desde a base da árvore
("/
") até ao fim de algum ramo (um ficheiro). Também vai
ouvir pessoas a falar da árvore de directórios como se fosse uma árvore de
família: assim os sub-directórios têm
pais, e um caminho mostra a linhagem
completa de de um ficheiro. Existem também caminhos relativos que começam
algures noutro ponto diferente do directório raiz. Você deve lembrar-se que
o directório "../
" refere-se ao directório pai. Esta
terminologia também se aplica a outras estruturas do tipo dos directórios,
tais como estruturas de dados hierárquicos.
Não existe componente especial no nome de caminho que corresponde a um
dispositivos físico, tal como o seu disco rijo. Isto difere de RT-11, CP/M, OpenVMS, MS-DOS, AmigaOS, e Microsoft
Windows, onde o caminho contém um nome de dispositivo tal como
"C:\
". (No entanto, existem entradas nos directórios que
referem-se a dispositivos físicos como parte do sistema de ficheiros
normal. Veja Secção 1.2.2, “Internos do sistema de ficheiros”.)
![]() |
Nota |
---|---|
Apesar de você poder usar quase todas as
letras ou símbolos num nome de ficheiro, na prática é má ideia fazê-lo. É
melhor evitar quaisquer caracteres que geralmente têm significados especiais
na linha de comandos, incluindo espaços, tabs, novas linhas, e outros
caracteres especiais: |
![]() |
Nota |
---|---|
A palavra "root" pode significar o "utilizador root" ou o "directório raiz (root)". O contexto da sua utilização deve torná-lo claro. |
![]() |
Nota |
---|---|
A palavra caminho (path) é usada não apenas o nome-de-ficheiro-totalmente-qualificado como em cima mas também para o caminho de busca de comandos. O significado pretendido é geralmente claro a partir do contexto. |
As melhores práticas detalhadas para a hierarquia de ficheiros estão
descritas no Filesystem Hierarchy Standard
("/usr/share/doc/debian-policy/fhs/fhs-2.3.txt.gz
" e
hier(7)).
Você deve lembrar-se dos seguintes factos como princípio.
Tabela 1.3. Lista de utilização de directórios chave
directório | utilização do directório |
---|---|
/
|
o directório raiz |
/etc/
|
ficheiros de configuração de todo o sistema |
/var/log/
|
ficheiros log do sistema |
/home/
|
todos os directórios home de todos os utilizadores não privilegiados. |
Seguindo a tradição do Unix, o sistema
Debian GNU/Linux disponibiliza o sistema de
ficheiros sob o qual residem os dados físicos em discos rijos e
outros dispositivos de armazenamento, e a interacção com os dispositivos de
hardware como ecrãs de consola e consolas série remotas são representados
num modo unificado sob "/dev/
".
Cada ficheiro, directório, pipe com nome (um modo de dois programas
partilharem dados), ou dispositivo físico num sistema Debian GNU/Linux tem
uma estrutura de dados chamada um inode que
descreve os seus atributos associados como o utilizador que o possui (o
dono), o grupo a que pertence, a hora do último acesso, etc. Se você está
mesmo interessado, veja "/usr/include/linux/fs.h
" para
uma definição exacta de "inode de estrutura
" no sistema
Debian GNU/Linux. A ideia de representar praticamente tudo no sistema de
ficheiros foi uma inovação do Unix, e os kernels modernos de Linux
desenvolveram esta ideia ainda mais. Agora, até informação sobre os
processos que correm no computador pode ser encontrada no sistema de
ficheiros.
Esta representação abstracta e unificada de entidades físicas e processos internos é muito poderosa porque permite-nos usar o mesmo comando para o mesmo tipo de operação em muitos dispositivos totalmente diferentes. É mesmo possível alterar o modo como o kernel funciona ao escrever dados em ficheiros especiais que estão ligados a processos em execução.
![]() |
Dica |
---|---|
Se precisar de identificar a correspondência entre a árvore de ficheiros e a entrada física, execute mount(8) sem argumentos. |
As Permissões de sistemas de ficheiros de sistemas tipo-Unix são definidas por três categorias de utilizadores afectados.
O utilizador que é dono do ficheiro (u)
Outros utilizadores no grupo ao qual o ficheiro pertence (g)
Todos os outros utilizadores (o) também referido como "mundo" e "todos"
Para o ficheiro, cada permissão correspondente permite as seguintes acções.
A permissão read (r) permite ao dono examinar o conteúdo do ficheiro.
A permissão write (w) permite ao dono modificar o ficheiro.
A permissão execute (x) permite ao dono correr o ficheiro como um comando.
Para o directório, cada permissão correspondente permite as seguintes acções.
A permissão read (r) permite ao dono listar o conteúdo do directório.
A permissão write (w) permite ao dono adicionar ou remover ficheiros no directório.
A permissão execute (x) permite ao dono aceder aos ficheiro no directório.
Aqui, a permissão de execute num directório significa não só permitir a leitura dos ficheiros nesse directório mas também permitir visualizar os seus atributos, tais como o tamanho e a hora de modificação.
ls(1)
é usado para mostrar informação de permissões (e mais) para ficheiros de
directórios. Quando é invocado com a opção "-l
", mostra a
seguinte informação na ordem apresentada.
Tipo de ficheiro (primeiro caractere)
Permissão de acesso do ficheiro (nove caracteres, consistindo de três caracteres cada para utilizador, grupo, e os outros por esta ordem)
Número de hard links para o ficheiro
Nome do utilizador que é dono do ficheiro
Nome do grupo ao qual o ficheiro pertence
Tamanho do ficheiro em caracteres (bytes)
Data e hora do ficheiro (mtime)
Nome do ficheiro
Tabela 1.4. Lista do primeiro caractere da saída de "ls -l
"
caractere | significado |
---|---|
-
|
ficheiro normal |
d
|
directório |
l
|
link simbólico |
c
|
nó de dispositivo de caractere |
b
|
nó de dispositivo de bloco |
p
|
pipe nomeado |
s
|
socket |
chown(1)
é usado a partir da conta de root para alterar o dono do
ficheiro.
chgrp(1)
é usado a partir da conta do dono do ficheiro ou da conta root para alterar
o grupo do
ficheiro.
chmod(1)
é usado a partir da conta do dono do ficheiro ou da conta root para alterar
as permissões de acesso ao ficheiro ou directório. A sintaxe básica para
manipular o ficheiro foo
é a seguinte.
# chown <novo_dono> foo # chgrp <novo_grupo> foo # chmod [ugoa][+-=][rwxXst][,...] foo
Por exemplo, você pode fazer com que uma árvore de directórios tenha como
dono o utilizador foo
e seja partilhada pelo grupo
bar
com o seguinte.
# cd /qualquer/localização/ # chown -R foo:bar . # chmod -R ug+rwX,o=rX .
Existem mais três bits de permissão especiais.
O bit set user ID (s ou S em vez do x do utilizador)
O bit set group ID (s ou S em vez do x do grupo)
O bit sticky (t ou T em vez do x dos outros)
Aqui o resultado de "ls -l
" para estes bits é capitalizado se a execução de bits escondidos por
estes resultados estiverem não definidos.
Definir set user ID num ficheiro executável permite a um utilizador executar o ficheiro executável com o ID do dono do ficheiro (por exemplo root). DE modo semelhante, definir set group ID num ficheiro executável permite a um utilizador executar o ficheiro executável com o ID de grupo do ficheiro (por exemplo root). Porque estas definições podem causar riscos de segurança, activá-las requer precauções extra.
Definir set group ID num directório activa o esquema de criação de ficheiros ao estilo BSD onde todos os ficheiros criados no directório pertencem ao grupo do directório.
Definir o sticky bit num directório
previne que um ficheiro nesse directório seja removido por um utilizador que
não seja o dono do ficheiro. De modo a tornar o conteúdo de um ficheiro
seguro em directórios onde todos têm acesso de escrita, como o
"/tmp
" ou em directório onde um grupo tem acesso de
escrita, não basta reiniciar a permissão de escrita do ficheiro mas também definir o sticky bit no directório. Caso contrário, o
ficheiro pode ser removido e pode ser criado um novo ficheiro com o mesmo
nome por qualquer utilizador que tenha acesso de escrita no directório.
Aqui estão alguns exemplos interessantes de permissões de ficheiros.
$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4 crw------- 1 root root 108, 0 2007-04-29 07:00 /dev/ppp -rw-r--r-- 1 root root 1427 2007-04-16 00:19 /etc/passwd -rw-r----- 1 root shadow 943 2007-04-16 00:19 /etc/shadow -rwsr-xr-x 1 root root 700056 2007-04-22 05:29 /usr/sbin/exim4 $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 10 root root 4096 2007-04-29 07:59 /tmp drwxrwsr-x 10 root staff 4096 2007-03-24 18:48 /usr/local drwxrwsr-x 4 root src 4096 2007-04-27 00:31 /usr/src drwxrwsr-x 2 root mail 4096 2007-03-28 23:33 /var/mail drwxrwxrwt 2 root root 4096 2007-04-29 07:11 /var/tmp
Existe um modo numérico alternativo para descrever as permissões do ficheiro com o chmod(1). Este modo numérico usa 3 ou 4 dígitos em numeração octal (radix=8).
Tabela 1.5. O modo numérico para permissões de ficheiros em comandos chmod(1)
digito | significado |
---|---|
1º digito opcional | soma de set user ID (=4), set group ID (=2), e sticky bit (=1) |
2º digito | soma das permissões leitura (=4), escrita (=2), e executável (=1) para o utilizador |
3º digito | idem para grupo |
4º digito | idem para outros |
Isto parece complicado mas na verdade é bastante simples. Se observar as
primeiras colunas (2-10) do resultado do comando "ls -l
"
e lê-las como uma representação binária (radix=2) das permissões do
ficheiros ("-" sendo "0" e "rwx" sendo "1"), os últimos três dígitos do
valor de modo numérico para si deverão fazer sentido como uma representação
octal (radix=8) das permissões do ficheiro.
Por exemplo, tente o seguinte
$ touch foo bar $ chmod u=rw,go=r foo $ chmod 644 bar $ ls -l foo bar -rw-r--r-- 1 penguin penguin 17 2007-04-29 08:22 bar -rw-r--r-- 1 penguin penguin 12 2007-04-29 08:22 foo
![]() |
Dica |
---|---|
Se você precisar aceder a informação mostrada por " |
As permissões que são aplicadas ao criar ficheiros e directórios novos é
restringida pelo comando embutido da shell umask
. Veja
dash(1),
bash(1),
e
builtins(7).
(permissões de ficheiros) = (permissões de ficheiros pedidas) & ~(valor umask)
Tabela 1.6. Exemplos do valor umask
umask | permissões do ficheiro criadas | permissões do directório criadas | utilização |
---|---|---|---|
0022
|
-rw-r--r--
|
-rwxr-xr-x
|
apenas pode ser escrito pelo utilizador |
0002
|
-rw-rw-r--
|
-rwxrwxr-x
|
pode ser escrito pelo grupo |
O sistema Debian usa um esquema de grupo privado de utilizadores (UPG). Um
UPG é criado sempre que um novo utilizador é adicionado ao sistema. Um UPG
tem o mesmo nome que o utilizador para o qual foi criado e esse utilizador é
o único membro do UPG. O esquema UPG torna seguro definir a umask para
0002
já que cada utilizador tem o seu próprio grupo
privado. (Em algumas variantes de Unix, é bastante comum configurar os
utilizadores normais a pertencerem a um único grupo users
e por segurança é uma boa
ideia definir a umask para 0022
nesses casos.)
De modo a fazer com que as permissões de um grupo sejam aplicadas a um
determinado utilizador, esse utilizador precisa de se tornar um membro do
grupo usando "sudo vigr
".
![]() |
Nota |
---|---|
Alternativamente, você pode adicionar dinamicamente utilizadores aos grupos
durante o processo de autenticação ao adicionar a linha " |
Os dispositivos de hardware são apenas outro tipo de ficheiros no sistema Debian. Se tiver problemas a aceder a dispositivos como o CD-ROM e memórias USB a partir de uma conta de utilizador, você deve tornar esse utilizador um membro do grupo relevante.
Alguns grupos notáveis disponibilizados pelo sistema permitem aos seus
membros aceder a ficheiros e dispositivos particulares sem privilégios de
root
.
Tabela 1.7. Lista de grupos notáveis disponibilizados pelo sistema para acesso a ficheiros
grupo | descrição para ficheiros e dispositivos acessíveis |
---|---|
dialout
|
acesso completo e directo a portas série
("/dev/ttyS[0-3] ")
|
dip
|
Acesso limitado a portas série para ligação Dialup IP a peers de confiança |
cdrom
|
drives CD-ROM, DVD+/-RW |
audio
|
dispositivo de áudio |
video
|
dispositivo de vídeo |
scanner
|
scanner(s) |
adm
|
logs (relatórios) de monitorização do sistema |
staff
|
alguns directórios para trabalho administrativo júnior:
"/usr/local ", "/home "
|
![]() |
Dica |
---|---|
Você precisa pertencer ao grupo |
Alguns grupos notáveis disponibilizados pelo sistema permitem aos seus
membros executar comandos particulares sem privilégios de
root
.
Tabela 1.8. Lista de grupos notáveis disponibilizados pelo sistema para execuções de comandos particulares
grupo | comandos acessíveis |
---|---|
sudo
|
executa sudo sem a sua palavra-passe
|
lpadmin
|
executa comandos para adicionar, modificar e remover impressoras das bases de dados de impressoras |
plugdev
|
executa pmount(1) para dispositivos amovíveis tal como as memórias USB |
Para a listagem completa dos utilizadores e grupos disponibilizados pelo
sistema, veja a versão recente do documento "Utilizadores e Grupos" em
"/usr/share/doc/base-passwd/users-and-groups.html
"
disponibilizado pelo pacote base-passwd
.
Veja passwd(5), group(5), shadow(5), newgrp(1), vipw(8), vigr(8), and pam_group(8) para comandos de gestão para o sistema de utilizador e grupo.
Existem três tipos de marcas temporais para um ficheiro de GNU/Linux.
Tabela 1.9. Lista dos tipos de marcas temporais
tipo | significado |
---|---|
mtime |
a hora de modificação do ficheiro (ls -l )
|
ctime |
a hora de alteração de estado do ficheiro (ls -lc )
|
atime |
a hora do último acesso ao ficheiro (ls -lu )
|
![]() |
Nota |
---|---|
ctime não é o tempo de criação do ficheiro. |
Sobrescrever um ficheiro altera todos os atributos mtime, ctime, and atime do ficheiro.
Alterar o dono ou as permissões de um ficheiro altera os atributos ctime e atime do ficheiro.
Ler um ficheiro altera o atime do ficheiro.
![]() |
Nota |
---|---|
Mesmo a simples leitura de um ficheiro no sistema Debian causa normalmente
uma operação de escrita no ficheiro para actualizar a informação atime no inode. Montar um sistema de ficheiros com as opções
" |
Use o comando touch(1) para alterar as marcas temporais de ficheiros existentes.
Para marcas temporais, o comando ls
gera diferentes
strings sob o locale Inglês moderno ("en_US.UTF-8
") a
partir do antigo ("C
").
$ LANG=en_US.UTF-8 ls -l foo -rw-r--r-- 1 penguin penguin 3 2008-03-05 00:47 foo $ LANG=C ls -l foo -rw-r--r-- 1 penguin penguin 3 Mar 5 00:47 foo
![]() |
Dica |
---|---|
Veja Secção 9.2.5, “Amostragem personalizada de hora e data” para
personalizar a saída do " |
Existem dois métodos de associar um ficheiro "foo
" com um
nome de ficheiro diferente "bar
".
Duplica o nome para um ficheiro existente
"ln foo bar
"
Ficheiro especial que aponta para outro ficheiro pelo nome
"ln -s foo bar
"
Veja o seguinte exemplo para alterações nas contagens do link e as
diferenças subtis nos resultados do comando rm
.
$ echo "Conteúdo Original" > foo $ ls -li foo 2398521 -rw-r--r-- 1 penguin penguin 17 2007-04-29 08:15 foo $ ln foo bar # hard link $ ln -s foo baz # symlink $ ls -li foo bar baz 2398521 -rw-r--r-- 2 penguin penguin 17 2007-04-29 08:15 bar 2398538 lrwxrwxrwx 1 penguin penguin 3 2007-04-29 08:16 baz -> foo 2398521 -rw-r--r-- 2 penguin penguin 17 2007-04-29 08:15 foo $ rm foo $ echo "Novo Conteúdo" > foo $ ls -li foo bar baz 2398521 -rw-r--r-- 1 penguin penguin 17 2007-04-29 08:15 bar 2398538 lrwxrwxrwx 1 penguin penguin 3 2007-04-29 08:16 baz -> foo 2398540 -rw-r--r-- 1 penguin penguin 12 2007-04-29 08:17 foo $ cat bar Conteúdo Original $ cat baz Novo Conteúdo
O hardlink pode ser feito dentro do mesmo sistema de ficheiros e partilhar o
mesmo número de inode que o
ls(1)
com a opção "-i
" revela.
O link simbólico tem sempre permissões nominais de acesso ao ficheiro
"rwxrwxrwx
", como mostrado no exemplo em cima, com as
permissões de acesso efectivas ditadas pelas permissões do ficheiro para o
qual aponta.
![]() |
Cuidado |
---|---|
Geralmente é boa ideia não criar links simbólicos complicados ou hardlinks de todo a menos que tenha uma boa razão. Podem causar pesadelos onde a combinação lógica dos links simbólicos resulta em ciclos viciosos no sistema de ficheiros. |
![]() |
Nota |
---|---|
Geralmente é preferível usar links simbólicos em vez de hard links, a menos que tenha boas razões para usar um hardlink. |
O directório ".
" liga ao directório onde ele aparece,
assim a contagem de link de qualquer novo directório começa em 2. O
directório "..
" liga ao directório pai, assim a contagem
de link do directório aumenta com a adição de novos sub-directórios.
Se você está a mover do Windows para Linux, em breve irá ficar claro o quão bem desenhado está a ligação de nomes de ficheiros em Unix está, comparada com o equivalente mais próximo em Windows de "atalhos". Porque está implementado no sistema de ficheiros, as aplicações não conseguem ver nenhuma diferença entre o link para um ficheiro e o original. No caso dos hardlinks, não há realmente nenhuma diferença.
Um pipe nomeado é um ficheiro que age como um pipe. Você coloca algo no ficheiro, e sai pelo outro lado. Assim é chamado um FIFO, ou Primeiro-a-Entrar-Primeiro-a-Sair: a primeira coisa que você coloca no pipe é a primeira coisa a sair pelo lado final.
Se você escrever para um pipe nomeado, o processo que escreve para o pipe
não termina até que a informação que está a ser escrita para o pipe seja
lida a partir do pipe. Se você ler a partir de um pipe nomeado, o processo
que lê espera até que não haja mais nada para ler antes de terminar. O
tamanho do pipe é sempre zero -- não armazena dados, apenas faz a ligação
entre dois processos como o "|
" da shell. No entanto,
como este pipe tem um nome, os dois processos não têm de estar na mesma
linha de comando ou mesmo serem executados pelo mesmo utilizador. Os pipes
são uma inovação de muita influência do Unix.
Por exemplo, tente o seguinte
$ cd; mkfifo mypipe $ echo "hello" >mypipe & # coloca nos bastidores [1] 8022 $ ls -l mypipe prw-r--r-- 1 penguin penguin 0 2007-04-29 08:25 mypipe $ cat mypipe hello [1]+ Done echo "hello" >mypipe $ ls mypipe mypipe $ rm mypipe
Os sockets são usados extensivamente por toda a comunicação da Internet, bases de dados, e pelo próprio sistema operativo. São semelhantes a pipes com nome (FIFO) e permitem aos processos trocarem informação mesmo entre computadores diferentes. Para o socket, esses processos não precisam de estar a correr ao mesmo tempo, nem correrem como filhos do mesmo processo pai. Isto é o ponto final da comunicação inter-processo (IPC). A troca de informação pode ocorrer sobre a rede entre máquinas diferentes. Os dois mais comuns são o socket de Internet e o socket de domínio Unix.
![]() |
Dica |
---|---|
" |
Os ficheiros de Dispositivos referem a
dispositivos físicos ou virtuais no seu sistema, como o seu disco rijo,
placa gráfica, monitor ou teclado. Um exemplo de dispositivo virtual é a
consola, representada por "/dev/console
".
Existem 2 tipos de ficheiros de dispositivo
Dispositivo de Caractere
Acedido a um caractere de cada vez
1 caractere = 1 byte
Ex, teclado, porta série, ...
Dispositivo de Bloco
acedido em unidades maiores chamadas blocos
1 bloco > 1 byte
Ex, o disco rijo, ...
Você pode ler e escrever nos ficheiros de dispositivo, embora o ficheiro
possa muito bem conter dados binários que podem ser uma salada
incompreensível para humanos. Escrever dados directamente nestes ficheiros é
por vezes útil para diagnosticar problemas com ligações de hardware. Por
exemplo, você pode despejar um ficheiro de texto para um dispositivo de
impressora "/dev/lp0
" ou enviar comandos de modem para a
porta série apropriada "/dev/ttyS0
". Mas, a menos que
isto seja feito com cuidado, pode causar problemas maiores. Portanto seja
cauteloso.
![]() |
Nota |
---|---|
Para o acesso normal a uma impressora, use lp(1). |
Os números de nós de dispositivo são mostrados ao executar ls(1) como se segue.
$ ls -l /dev/hda /dev/ttyS0 /dev/zero brw-rw---- 1 root cdrom 3, 0 2007-04-29 07:00 /dev/hda crw-rw---- 1 root dialout 4, 64 2007-04-29 07:00 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 2007-04-29 07:00 /dev/zero
"/dev/hda
" tem o maior número de dispositivo 3 e o menor
número de dispositivo 0 . Isto é acessível para leitura e escrita pelo
utilizador que pertence ao grupo cdrom
.
"/dev/ttyS0
" tem o maior número de dispositivo 4 e o
menor número de dispositivo 64. Isto é acessível para leitura e escrita pelo
utilizador que pertence ao grupo dialout
.
"/dev/zero
" tem o número 1 no maior dispositivo e o
número 5 no menor dispositivo. Isto é acessível para leitura/escrita por
todos.
No sistema Linux 2.6, o sistema de ficheiro sob "/dev/
" é
povoado automaticamente pelo mecanismo
udev(7).
Existem alguns ficheiros de dispositivos especiais.
Tabela 1.10. Lista de ficheiros de dispositivos especiais
ficheiro de dispositivo | acção | descrição da resposta |
---|---|---|
/dev/null
|
ler | retorna o "caractere de fim-de-ficheiro (EOF)" |
/dev/null
|
escrever | retorna nada (um poço de despejo de dados sem fundo) |
/dev/zero
|
ler |
retorna "o caractere \0 (NULO)" (não é o mesmo que o
número zero em ASCII)
|
/dev/random
|
ler | retorna caracteres aleatórios a partir de um gerador verdadeiro de números aleatórios, entregando entropia real (lento) |
/dev/urandom
|
ler | retorna caracteres aleatórios a partir de um gerador de números pseudo-aleatórios criptograficamente seguros |
/dev/full
|
escrever | retorna o erro de disco cheiro (ENOSPC) |
Estes são usados frequentemente em conjunto com o redireccionamento da shell (veja Secção 1.5.8, “Sequências de comandos típicas e redireccionamento da shell”).
Os procfs e sysfs
montados em "/proc
" e "/sys
" são os
pseudo-sistemas-de-ficheiros e expõem estruturas de dados internas do kernel
ao espaço do utilizador. Por outras palavras, estas entradas são virtuais,
significando que elas agem como uma janela de conveniência às operações do
sistema operativo.
O directório "/proc
" contém (entre outras coisas) um
sub-directório para cada processo em execução no sistema, o qual é nomeado
pelo ID do processo (PID). Os utilitários do sistema que cedem a informação
de processos, como o
ps(1),
obtêm a sua informação a partir desta estrutura de directórios.
Os directórios sob "/proc/sys/
" contêm uma interface para
alterar certos parâmetros do kernel durante o funcionamento. (Você pode
fazer o mesmo através do comando especializado
sysctl(8)
ou do seu ficheiro de configuração pré-carregado
"/etc/sysctrl.conf
".)
![]() |
Nota |
---|---|
O kernel Linux pode queixar-se de "Demasiados ficheiros abertos". Você pode
corrigir isto ao aumentar o valor " |
As pessoas entram em pânico frequentemente quando notam num ficheiro em
particular - "/proc/kcore
" - o qual é geralmente
enorme. Isto é (mais ou menos) uma cópia do conteúdo da memória do seu
computador. É usado para depurar o kernel. É um ficheiro virtual que aponta
para a memória do computador, portanto não se preocupe com o seu tamanho.
O directório sobre "/sys
" contém estruturas de dados do
kernel exportadas, os seus atributos, e as suas ligações entre eles. Também
contém a interface para alterar certos parâmetros do kernel durante o
funcionamento.
Veja "proc.txt(.gz)
", "sysfs.txt(.gz)
"
e outros documentos relacionados na documentação do kernel Linux
("/usr/share/doc/linux-doc-2.6.*/Documentation/filesystems/*
")
disponibilizados pelo pacote linux-doc-2.6.*
.
Midnight Commander (MC) é um "Canivete Suíço" do GNU para a consola Linux e outros ambientes de terminal. Isto oferece a novatos uma experiência de consola movida a menus o que é mais fácil de aprender que os comandos standard do Unix.
Você deve precisar de instalar o pacote Midnight Commander que é intitulado
de "mc
" com o seguinte.
$ sudo apt-get install mc
use o comando mc(1) para explorar o sistema Debian. Esta é a melhor maneira de aprender. Por favor explore algumas localizações interessantes apenas usando as teclas do cursor e Enter.
"/etc
" e os seus sub-directórios
e"/var/log
" os seus sub-directórios
"/usr/share/doc
" os seus sub-directórios
"/sbin
" e "/bin
"
De modo a fazer o MC mudar o directório de trabalho ao sair e
cd
para o directório, eu sugiro modificar o
"~/.bashrc
" para incluir um script disponibilizado pelo
pacote mc
.
. /usr/share/mc/bin/mc.sh
Veja
mc(1)
(sob a opção "-P
") para a razão. (Se você não compreende
exactamente o que estou a falar aqui, pode fazer isto mais tarde.)
O MC pode ser arrancado com o seguinte.
$ mc
O MC toma conta de operações de ficheiros através do seu menu, requerendo esforços mínimos do utilizador. Carregue em F1 para obter ajuda. Você pode brincar com o MC apenas com as teclas de cursor e teclas de função.
![]() |
Nota |
---|---|
Em algumas consolas como o
gnome-terminal(1),
teclas de atalho de teclas de função podem ser roubadas pelo programa de
consola. Você pode desactivar estas funcionalidades em "Editar" → "Atalhos
do Teclado" para o |
Se encontrar problemas com a codificação de caracteres que mostram
caracteres de lixo, adicionar "-a
" à linha de comandos do
MC pode ajudar a prevenir problemas.
Se isto não limpar os seus problemas de écran com o MC, veja Secção 9.6.6, “A configuração do terminal”.
A predefinição é dois painéis de directórios que contêm listas de ficheiros. Outro modo útil é definir a janela direita para "informação" para ver informações de privilégios de acesso ao ficheiro, etc. Segue-se algumas teclas de atalho essenciais. Com o daemon gpm(8) em execução, também se pode usar o rato em consolas de caracteres do Linux. (Certifique-se que carrega na tecla shift para obter o comportamento normal de corte e colagem no MC.)
Tabela 1.11. As teclas de atalho do MC
tecla | tecla de atalho |
---|---|
F1
|
menu de ajuda |
F3
|
visualizador de ficheiros interno |
F4
|
editor interno |
F9
|
activa o menu de desenrolar |
F10
|
sair do Midnight Commander |
Tab
|
mover entre duas janelas |
Insert ou Ctrl-T
|
marca o ficheiro para uma operação de múltiplos ficheiros como uma cópia |
Del
|
apaga o ficheiro (tenha cuidado -- configure o MC para modo de apagar seguro) |
Teclas do cursor | auto-explicativo |
O comando cd
altera o directório mostrado no ecrã
seleccionado.
Ctrl-Enter
ou Alt-Enter
copia um nome
de ficheiro para a linha de comandos, Use isto com os comandos
cp(1)
e
mv(1)
em conjunto com a edição de linha de comandos.
Alt-Tab
mostra escolhas de expansão de nomes de ficheiros
da shell.
Pode-se especificar os directórios de inicio para ambas janelas como
argumentos ao MC; por exemplo, "mc /etc /root
".
Esc
+ n-key
→ Fn
(i.e., Esc
+ 1
→
F1
, etc.; Esc
+ 0
→
F10
)
Carregar em Esc
antes da tecla tem o mesmo efeito que
carregar em Alt
e na tecla em conjunto; isto é, carregar
em Esc
+ c
para
Alt-C
. Esc
é chamada uma meta-tecla e
por vezes mencionada como "M-
".
O editor interno tem m esquema de cortar-e-colar interessante. Pressionar
F3
marca o inicio da selecção, um segundo
F3
marca o final da selecção e destaca a selecção. Depois
você pode mover o cursos. Se pressionar F6, a área seleccionada é movida
para a localização do cursor. Se pressionar F5, a área seleccionada é
copiada e inserida na localização do cursor. F2
salva o
ficheiro. F10
fá-lo sair. A maioria das teclas do cursor
funcionam de modo intuitivo.
Este editor pode ser iniciado directamente num ficheiro usando um dos seguintes comandos.
$ mc -e ficheiro_a_editar
$ mcedit ficheiro_a_editar
Este não é um editor de múltiplas janelas, mas pode-se usar múltiplas consolas de Linux para s conseguir o mesmo efeito. Para copiar entre janelas, use as teclas Alt-F<n> para mudar entre consolas virtuais e use "Ficheiro→Inserir ficheiro" or "Ficheiro→Copiar para ficheiro" para mover uma porção de um ficheiro para outro ficheiro.
Este editor interno pode ser substituído por qualquer editor externo à escolha.
E também, muitos programas usam as variáveis de ambiente
"$EDITOR
" ou "$VISUAL
" para decidir
que editor usar. Se você não está inicialmente confortável com o
vim(1)
ou o
nano(1),
você pode definir este para o "mcedit
" ao adicionar as
seguintes linhas ao "~/.bashrc
".
export EDITOR=mcedit export VISUAL=mcedit
Eu recomendo definir isto para "vim
" se possível.
Se você fica desconfortável com o vim(1), você pode continuar a usar o mcedit(1) para a maioria das tarefas de manutenção do sistema.
MC é um visualizador muito inteligente. Esta é uma grande ferramenta para
procurar palavras em documentos. Eu uso sempre isto para ficheiros no
directório "/usr/share/doc
". Esta é a maneira mais rápida
de explorar 'por entre massas de informação de Linux. Este visualizador pode
ser iniciado directamente usando um dos seguintes comandos.
$ mc -v caminho/para/nome_de_ficheiro_a_visualizar
$ mcview caminho/para/nome_de_ficheiro_a_visualizar
Carregue em Enter num ficheiro, e o programa apropriado lida com o conteúdo do ficheiro (veja Secção 9.5.11, “Personalizar o programa a ser arrancado”). Esta é uma funcionalidade muito conveniente do MC.
Tabela 1.12. A reacção à tecla enter no MC
tipo de ficheiro | reacção à tecla enter |
---|---|
ficheiro executável | executa comando |
ficheiro man | canaliza o conteúdo para software de visualização |
ficheiro html | canaliza o conteúdo para explorador web |
ficheiros "*.tar.gz " e "*.deb "
|
explora o seu conteúdo como sendo um sub-directório |
De modo a permitir esta visualização e funcionalidades virtuais de ficheiros funcionem, os ficheiros a visualizar não devem ser executáveis. Mude o seu estado com o chmod(1) ou via menu ficheiro do MC.
O MC pode ser usado para aceder a ficheiros pela Internet usando FTP. Vá ao
menu ao pressionar F9
, depois escreva
"p
" para activar o sistema de ficheiros virtual
FTP. Insira um URL no formato
"nome-de-utilizador:palavra-passe@nome-de-máquina.nome-de-domínio
",
o que obtém um directório remoto que aparece como um local.
Tente "[http.us.debian.org/debian]" como URL e explore o arquivo Debian.
Apesar do MC lhe permitir fazer quase tudo, é muito importante aprender a usar as ferramentas de linha de comandos invocadas do aviso de shell e torna-se familiarizado com o ambiente de trabalho estilo Unix.
Você pode seleccionar a sua shell de login com chsh(1).
Tabela 1.13. Lista de programas da shell
pacote | popcon | tamanho | Shell do POSIX | descrição |
---|---|---|---|---|
bash
*
|
V:90, I:99 | 3536 | Sim | Bash: a GNU Bourne Again SHell (o standard de facto) |
tcsh
*
|
V:3, I:17 | 1308 | Não | Shell TENEX C: uma versão melhorada de Berkeley csh |
dash
*
|
V:64, I:70 | 171 | Sim | Shell Alquimista do Debian. bom para script de shell |
zsh
*
|
V:2, I:5 | 14164 | Sim | Z shell: a shell standard com muitos melhoramentos |
pdksh
*
|
V:0.3, I:1.3 | 388 | Sim | versão de domínio público da Korn shell |
csh
*
|
V:0.5, I:1.9 | 340 | Não | OpenBSD shell C, uma versão do Berkeley csh |
sash
*
|
V:0.2, I:0.8 | 856 | Sim |
Shell standalone com comandos
embutidos (Não destinado para "/bin/sh " standard)
|
ksh
*
|
V:0.5, I:1.7 | 3092 | Sim | a versão AT&T real do Korn shell |
rc
*
|
V:0.09, I:1.1 | 204 | Não | implementação do rc shell AT&T Plan 9 |
posh
*
|
V:0.01, I:0.09 | 228 | Sim |
Policy-compliant Ordinary SHell (derivação da pdksh )
|
Neste capítulo do tutorial, a shell interactiva significa sempre
bash
.
Você pode personalizar o comportamento do
bash(1)
no "~/.bashrc
".
por exemplo, tente o seguinte.
# CD ao MC existente . /usr/share/mc/bin/mc.sh # define CDPATH para uma correcta CDPATH=.:/usr/share/doc:~:~/Desktop:~ export CDPATH PATH="${PATH}":/usr/sbin:/sbin # define PATH para incluir binários privados do utilizador, caso existam if [ -d ~/bin ] ; then PATH=~/bin:"${PATH}" fi export PATH EDITOR=vim export EDITOR
![]() |
Dica |
---|---|
Você pode encontrar mais dicas de personalização da |
No ambiente tipo Unix, existem algumas
combinações de teclas que têm significados especiais. Por favor note que
numa consola de caracteres normal do Linux, apenas as teclas
Ctrl
e Alt
da mão esquerda funcionam
como se espera. Aqui estão algumas combinações de teclas notáveis para
lembrar.
Tabela 1.14. Lista de teclas de atalho para bash
tecla | descrição do atalho da tecla |
---|---|
Ctrl-U
|
apaga a linha antes do cursor |
Ctrl-H
|
apaga um caractere antes do cursor |
Ctrl-D
|
termina a entrada (sai da shell se estiver a usar uma shell) |
Ctrl-C
|
termina um programa em funcionamento |
Ctrl-Z
|
pára temporariamente o programa ao movê-lo para tarefa nos bastidores |
Ctrl-S
|
pára a saída para o écran |
Ctrl-Q
|
reactiva a saída para o écran |
Ctrl-Alt-Del
|
reinicia/pára o sistema, veja inittab(5) |
Left-Alt-key (opcionalmente,
tecla-do-Windows )
|
meta-tecla para o Emacs e a UI semelhante |
Seta-para-cima
|
inicia a busca no histórico de comandos sob bash
|
Ctrl-R
|
inicia o histórico de comandos incremental sob bash
|
Tab
|
completa a entrada do nome de ficheiro para a linha de comandos sob
bash
|
Ctrl-V Tab
|
entrada Tab sem expansão para a linha de comandos sob
bash
|
![]() |
Dica |
---|---|
A funcionalidade terminal de |
As operações do rato ao estilo Unix são baseadas em sistema de rato de 3 botões.
Tabela 1.15. Lista de operações de rato ao estilo Unix
acção | resposta |
---|---|
Clique-esquerdo-e-arrastar do rato | seleccionar e copiar para a área de transferência |
Clique-esquerdo | selecciona o início da selecção |
Clique-direito | selecciona o fim da selecção e copia para a área de transferência |
Clique-central | cola a área de transferência no cursor |
A roda central nos modernos ratos de roda é considerada o botão central do rato e pode ser usada como terceiro botão ou clique-central. Clicar nos botões esquerdo e direito ao mesmo tempo serve como clique-central em situações de sistema de rato de 2 botões. De modo a usar o rato em consolas de caracteres de Linux, você precisa de ter o daemon gpm(8) a correr.
O
less(1)
é o paginador avançado (explorador de conteúdo de ficheiro). Carregue em
"h
" para ajuda. Ele pode fazer muito mais do que o
more(1)
e pode ser ampliado ao executar "eval $(lesspipe)
" ou
"eval $(lessfile)
" no script de arranque de shell. Veja
mais em "/usr/share/doc/lessf/LESSOPEN
". A opção
"-R
" permite saída em caracteres crus e activa sequências
de escape de cores ANSI. Veja
less(1).
Você deve tornar-se conhecedor de uma das variantes do programa Vim ou no Emacs que são populares em sistemas tipo Unix.
Eu acho que habituar-se aos comandos do Vim é a coisa certa a fazer, pois o
editor Vim está sempre presente no mundo Linux/Unix world. (Na verdade, o
vi
original ou o novo nvi
são
programas que vai encontrar em todo o lado. Eu escolho o Vim para novatos
porque lhe oferece ajuda através da tecla F1
enquanto é
suficientemente semelhante e mais poderoso.)
Por sua vez você pode escolher o Emacs ou o XEmacs como o seu editor favorito, essa é realmente uma outra boa escolha, particularmente para programação. O Emacs tem também um leque de outras funcionalidades, incluindo funcionar como um leitor de news, editor de directório, programa de mail, etc. Quando é usado ara programação ou edição de scripts de shell, reconhece inteligentemente o formato daquilo em que você está a trabalhar, e tenta disponibilizar assistência. Algumas pessoas afirmam que o único programa que necessitam em Linux é o Emacs. 10 minutos a aprender Emacs agora pode poupar horas mais tarde. Ter o manual do Emacs GNU para referência quando se aprende Emacs é altamente recomendado.
Todos estes programas vêm normalmente com um programa tutor para que você
aprenda a usá-los pela prática. Arranque o Vim ao escrever
"vim
" e carregue an tecla F1. Você deverá ler pelo menos
as primeiras 35 linhas. Depois faça o curso de treino online ao mover o
cursor para "|tutor|
" e pressionar
Ctrl-]
.
![]() |
Nota |
---|---|
Os bons editores, como o Vim e o Emacs, podem ser usados para lidar com UTF-8 e outros textos com codificação exótica correctamente com a opção própria no emulador de terminal X em X sob locale UTF-8 com definições de tipo de letra apropriadas. Por favor consulte a sua documentação em texto multi-byte. |
Debian vem com um número de editores diferentes. Nós recomendamos instalar o
pacote vim
, como mencionado em cima.
Debian disponibiliza acesso unificado ao editor predefinido do sistema via
comando "/usr/bin/editor
" para que outros programas
(ex.
reportbug(1))
possam invocá-lo. Você pode alterá-lo com o seguinte.
$ sudo update-alternatives --config editor
A escolha de "/usr/bin/vim.basic
" sobre
"/usr/bin/vim.tiny
" é recomendação minha para novatos
porque suporta destaque de sintaxe.
![]() |
Dica |
---|---|
Muitos programas usam as variáveis de ambiente " |
Você pode personalizar o comportamento do
vim(1)
em "~/.vimrc
".
Por exemplo, tente o seguinte
" ------------------------------- " Local configuration " set nocompatible set nopaste set pastetoggle=<f2> syn on if $USER == "root" set nomodeline set noswapfile else set modeline set swapfile endif " filler to avoid the line above being recognized as a modeline " filler " filler
O resultado do comando shell pode sair para fora do seu ecrã e ficar perdido para sempre. É ma boa prática registar em log as actividades da shell num ficheiro para rever mais tarde. Este tipo de registo é essencial quando executa quaisquer tarefas de administração do sistema.
O método básico de gravar a actividade da shell é corrê-la sob script(1).
Por exemplo, tente o seguinte
$ script Script iniciado, ficheiro é typescript
Faz quaisquer comandos de shell sob script
.
Carregue em Ctrl-D
para terminar o
script
.
$ vim typescript
Veja Secção 9.2.3, “Gravar as actividades da shell de modo limpo” .
Vamos aprender comandos básicos do Unix. Aqui Eu uso "Unix" no seu sentido
genérico. Geralmente qualquer SO clone do Unix oferece comandos
equivalentes. O sistema Debian não é excepção. Não se preocupe se alguns
comandos não funcionarem como se deseja por agora. Se for usado
alias
na shell, as saídas dos comandos correspondentes
são diferentes. Estes exemplos não se destinam a ser executados por esta
ordem.
Tente os comandos seguintes a partir da conta de utilizador não-privilegiado.
Tabela 1.16. lista dos comandos Unix básicos
comando | descrição |
---|---|
pwd
|
mostra o nome do directório actual |
whoami
|
mostra o nome do utilizador actual |
id
|
mostra a identidade do utilizador actual (nome, uid, gid, e grupos associados) |
file <foo>
|
mostra o tipo de ficheiro para o ficheiro "<foo> "
|
type -p <nome_do_comando>
|
mostra uma localização de ficheiro do comando
"<nome_do_comando> "
|
which <nome_do_comando>
|
, , |
type <nome_do_comando>
|
mostra informação do comando "<nome_do_comando> "
|
apropos <palavra_chave>
|
mostra comandos relacionados com a
"<palavra_chave> "
|
man -k <palavra_chave>
|
, , |
whatis <nome_do_comando>
|
mostra uma explicação de uma linha para o comando
"<nome_do_comando> "
|
man -a <nome_do_comando>
|
mostra explicação sobre o comando
"<nome_do_comando> " (o estilo Unix)
|
info <nome_do_comando>
|
mostra uma explicação longa do comando
"<nome_do_comando> " (o estilo GNU)
|
ls
|
lista o conteúdo do directório (ficheiros e directórios não escondidos) |
ls -a
|
lista o conteúdo do directório (todos os ficheiros e directórios) |
ls -A
|
lista o conteúdo do directório (quase todos os ficheiros e directórios, isto
é, salta o ".. " e ". ")
|
ls -la
|
lista todo o conteúdo do directório com informação detalhada |
ls -lai
|
lista todo o conteúdo do directório com número de inode e informação detalhada |
ls -d
|
lista todos os directórios sob o directório actual |
tree
|
mostra o conteúdo da árvore de ficheiros |
lsof <foo>
|
lista o estado aberto do ficheiro "<foo> "
|
lsof -p <pid>
|
lista ficheiros abertos pelo ID de processo:
"<pid> "
|
mkdir <foo>
|
cria um novo directório "<foo> " no directório
actual
|
rmdir <foo>
|
remove um directório "<foo> " no directório actual
|
cd <foo>
|
muda o directório para o directório "<foo> " no
directório actual ou no directório listado na variável
"$CDPATH "
|
cd /
|
muda o directório para o directório raiz |
cd
|
muda o directório para o directório home do utilizador actual |
cd /<foo>
|
muda o directório para o directório de caminho absoluto
"/<foo> "
|
cd ..
|
muda o directório para o directório pai |
cd ~<foo>
|
muda o directório para o directório home do utilizador
"<foo> "
|
cd -
|
muda o directório para o directório anterior |
</etc/motd pager
|
mostra o conteúdo de "/etc/motd " usando o paginador
predefinido
|
touch <junkfile>
|
cria um ficheiro vazio "<junkfile> "
|
cp <foo> <bar>
|
copia um ficheiro "<foo> " existente para um novo
ficheiro "<bar> "
|
rm <junkfile>
|
remove um ficheiro "<junkfile> "
|
mv <foo> <bar>
|
renomeia um ficheiro "<foo> " existente para um novo
nome "<bar> " ("<bar> " não
pode existir)
|
mv <foo> <bar>
|
move um ficheiro "<foo> " existente para uma nova
localização <bar>/<foo> " (o directório
"<bar> " tem de existir)
|
mv <foo> <bar>/<baz>
|
move um ficheiro existente "<foo> " para uma nova
localização com um novo nome "<bar>/<baz> " (o
directório "<bar> " tem de existir mas o directório
"<bar>/<baz> " não pode existir)
|
chmod 600 <foo>
|
torna um ficheiro existente "<foo> " proibido de ser
lido e ser escrito por outras pessoas (não executável para todos)
|
chmod 644 <foo>
|
torna um ficheiro existente "<foo> " permissível de
ser lido mas proibido de ser escrito por outras pessoas (não executável para
todos)
|
chmod 755 <foo>
|
torna um ficheiro existente "<foo> " permissível de
ser lido mas proibido de ser escrito por outras pessoas (executável para
todos)
|
find . -name <padrão>
|
procura nomes de ficheiros correspondentes usando um
"<padrão> " de shell (lento)
|
locate -d . <padrão>
|
procura nomes de ficheiros correspondentes usando um
"<padrão> " de shell (mais rápido usando uma base de
dados gerada regularmente)
|
grep -e "<padrão>" *.html
|
procura um "<padrão>" em todos os ficheiros terminados com
".html " no directório actual e mostra-os todos
|
top
|
mostra informação de processos usando ecrã completo, carregue em
"q " para sair
|
ps aux | pager
|
mostra informação dos processos a correr usando saída ao estilo BSD |
ps -ef | pager
|
mostra informação dos processos a correr usando saída ao estilo Unix system-V |
ps aux | grep -e "[e]xim4*"
|
mostra todos os processos que correm "exim " e
"exim4 "
|
ps axf | pager
|
mostra informação de todos os processos a correr com saída em arte de ACSII |
kill <1234>
|
mata todos os processos identificados pelo ID de processo: "<1234>" |
gzip <foo>
|
descomprime "<foo> " para criar
"<foo>.gz " usando a codificação Lempel-Ziv (LZ77)
|
gunzip <foo>.gz
|
descomprime "<foo>.gz " para criar
"<foo> "
|
bzip2 <foo>
|
comprime "<foo> " para criar
"<foo>.bz2 " usando o algoritmo de compressão de
texto organizado em blocos Burrows-Wheeler, e codificação Huffman (melhor
compressão que gzip )
|
bunzip2 <foo>.bz2
|
descomprime "<foo>.bz2 " para criar
"<foo> "
|
xz <foo>
|
comprime "<foo> " para criar
"<foo>.xz " usando o algoritmo de cadeia
Lempel–Ziv–Markov (melhor compressão que bzip2 )
|
unxz <foo>.xz
|
descomprime "<foo>.xz " para criar
"<foo> "
|
tar -xvf <foo>.tar
|
extrai ficheiros do arquivo "<foo>.tar "
|
tar -xvzf <foo>.tar.gz
|
extrai ficheiros do arquivo gzipado "<foo>.tar.gz "
|
tar -xvjf <foo>.tar.bz2
|
extrai ficheiros do arquivo "<foo>.tar.bz2 "
|
tar -xvJf <foo>.tar.xz
|
extrai ficheiros do arquivo "<foo>.tar.xz "
|
tar -cvf <foo>.tar <bar>/
|
arquiva o conteúdo da pasta "<bar>/ " no arquivo
"<foo>.tar "
|
tar -cvzf <foo>.tar.gz <bar>/
|
arquiva o conteúdo da pasta "<bar>/ " no arquivo
comprimido "<foo>.tar.gz "
|
tar -cvjf <foo>.tar.bz2 <bar>/
|
arquiva o conteúdo da pasta "<bar>/ " no arquivo
"<foo>.tar.bz2 "
|
tar -cvJf <foo>.tar.xz <bar>/
|
arquiva o conteúdo da pasta "<bar>/ " no arquivo
"<foo>.tar.xz "
|
zcat README.gz | pager
|
mostra o conteúdo do "README.gz " comprimido usando o
paginador predefinido
|
zcat README.gz > foo
|
cria o ficheiro "foo " com o conteúdo descomprimido de
"README.gz "
|
zcat README.gz >> foo
|
acrescenta o conteúdo descomprimido de "README.gz " ao
final do ficheiro "foo " (se ele não existir, é primeiro
criado)
|
![]() |
Nota |
---|---|
Unix tem a tradição de esconder os nomes de ficheiros que começam com
" |
![]() |
Nota |
---|---|
Para o comando |
![]() |
Nota |
---|---|
O paginador predefinido da vastidão do sistema Debian é o
more(1),
o qual não pode deslocar para trás. A instalar o pacote
|
![]() |
Nota |
---|---|
O " |
Por favor atravesse os directórios e espreite no sistema usando os comandos em cima como treino. Se você tem questões sobre qualquer comando de consola, por favor certifique-se de ler o manual dele.
Por exemplo, tente o seguinte
$ man man $ man bash $ man builtins $ man grep $ man ls
O estilo dos manuais pode ser um pouco difícil de se habituar a eles, porque são bastante concisos, particularmente os antigos muito tradicionais. Mas após se habituar a eles, vai apreciar a sua concisão.
Por favor note que muitos comandos do tipo Unix incluindo aqueles do GNU e BSD mostram informação breve de ajuda se os invocar em uma das seguintes maneiras (ou sem argumentos nalguns casos).
$ <nome_do_comando> --help $ <nome_do_comando> -h
Agora você tem alguma sentido em como usar o sistema Debian. Vamos ver mais fundo no mecanismo da execução de comandos no sistema Debian. Aqui, Eu tenho simplificado a realidade para o novato. Veja bash(1) para a explicação exacta.
Um comando simples é uma sequência de componentes.
Atribuições de variáveis (opcional)
Nome do comando
Argumentos (opcional)
Re-direcções (opcional: >
,
>>
, <
,
<<
, etc.)
Operador de controle (opcional: &&
,
||
, <nova-linha> , ;
,
&
, (
, )
)
Os valores de algumas variáveis de ambiente modificam o comportamento de alguns comandos do Unix.
Os valores predefinidos das variáveis de ambiente são definidos inicialmente pelo sistema PAM e depois alguns deles podem ser reiniciados por alguns programas de aplicação.
O gestor de ecrã como o gdm
reinicia variáveis de
ambiente
A shell nos seus códigos de arranque reinicia variáveis de ambiente em
"~/bash_profile
" e "~/.bashrc
".
O valor completo do locale fornecido à variável "$LANG
"
consiste em 3 partes: "xx_YY.ZZZZ
".
Para códigos de linguagens e códigos de países, veja informação pertinente
em "info gettext
".
Para o conjunto de codificação no sistema Debian moderno, você deverá sempre
defini-lo para UTF-8
a
menos que queira especificamente usar o histórico tendo boas razões e
conhecimentos para o fazer.
Para mais detalhes sobre configuração do locale, veja Secção 8.3, “O locale”.
![]() |
Nota |
---|---|
O " |
Tabela 1.18. Lista de recomendações de locale
recomendação de locale | Linguagem (área) |
---|---|
en_US.UTF-8
|
Inglês(EUA) |
en_GB.UTF-8
|
Inglês(Grã-Bretanha) |
fr_FR.UTF-8
|
Francês(França) |
de_DE.UTF-8
|
Alemão(Alemanha) |
it_IT.UTF-8
|
Italiano(Itália) |
es_ES.UTF-8
|
Espanhol(Espanha) |
ca_ES.UTF-8
|
Catalão(Espanha) |
sv_SE.UTF-8
|
Sueco(Suécia) |
pt_BR.UTF-8
|
Português(Brasil) |
ru_RU.UTF-8
|
Russo(Rússia) |
zh_CN.UTF-8
|
Chinês(Rep._Popular_da_China) |
zh_TW.UTF-8
|
Chinês(Taiwan_R.O.C.) |
ja_JP.UTF-8
|
Japonês(Japão) |
ko_KR.UTF-8
|
Coreano(República_da_Coreia) |
vi_VN.UTF-8
|
Vietnamita(Vietname) |
A execução de comando típica uma sequência de linha de shell como o seguinte.
$ date Sun Jun 3 10:27:39 JST 2007 $ LANG=fr_FR.UTF-8 date dimanche 3 juin 2007, 10:27:33 (UTC+0900)
Aqui, o programa
date(1)
é executado com diferentes valores da variável de ambiente
"$LANG
".
A maioria das execuções de comandos geralmente não têm definições de variáveis de ambiente a preceder. Para o exemplo em cima, você pode executar alternativamente o seguinte.
$ LANG=fr_FR.UTF-8 $ date dimanche 3 juin 2007, 10:27:33 (UTC+0900)
Como pode ver aqui, o resultado do comando é afectado pela variável de ambiente para produzir a saída em Francês. Se você deseja que a variável de ambiente seja hereditária aos sub-processos (ex. quando chama um script de shell), então você precisa de exportá-la com o seguinte.
$ export LANG
![]() |
Dica |
---|---|
Quando preencher um relatório de bug, é uma boa ideia correr e verificar o
comando sob " |
Veja
locale(5)
e
locale(7)
for "$LANG
" e variáveis de ambiente relacionadas.
![]() |
Nota |
---|---|
Eu recomendo-lhe configurar o ambiente do sistema apenas pela variável
" |
Quando você escreve um comando na shell, a shell procura o comando na lista
de directórios contida na variável de ambiente "$PATH
". O
valor da variável de ambiente "$PATH
" também é chamado o
caminho de procura da shell.
Na instalação Debian predefinida, a variável de ambiente
"$PATH
" das contas de utilizadores não deve incluir
"/sbin
" nem "/usr/sbin
". Por exemplo,
o comando ifconfig
precisa de ser chamado com o caminho
completo como "/sbin/ifconfig
". (de modo semelhante, o
comando ip
está localizado em "/bin
".)
Você pode alterar a variável de ambiente "$PATH
" da shell
Bash pelos ficheiros "~/.bash_profile
" ou
"~/.bashrc
".
Muitos comandos armazenam configuração específica do utilizador no
directório home e mudam os seus comportamentos pelo seu conteúdo. O
directório home é identificado pela variável de ambiente
"$HOME
".
Tabela 1.19. Lista de valores "$HOME
"
valor de "$HOME "
|
situação de execução do programa |
---|---|
/
|
programa executado pelo processo de init (daemon) |
/root
|
programa executado a partir da shell de root normal |
/home/<utilizador_normal>
|
programa executado a partir da shell de utilizador normal |
/home/<utilizador_normal>
|
programa executado a partir menu do ambiente GUI do utilizador normal |
/home/<utilizador_normal>
|
programa executado como root com o "programa sudo "
|
/root
|
programa executado como root com o "programa sudo -H "
|
![]() |
Dica |
---|---|
A shell expande " |
Alguns comandos recebem argumentos. Os argumentos que começam com um
"-
" ou "--
" são chamados opções e
controlam o comportamento do comando.
$ date Mon Oct 27 23:02:09 CET 2003 $ date -R Mon, 27 Oct 2003 23:02:40 +0100
Aqui o argumento de linha de comandos "-R
" altera o
comportamento de
date(1)
para gerar uma string da data compatível com RFC2822
Muitas vezes você deseja que um comando funcione com um grupo de ficheiros sem ter que escrevê-los a todos. O padrão de expansão do nome de ficheiro usando a glob da shell , (por vezes referida como wildcards), facilitam esta necessidade.
Tabela 1.20. Padrões glob da shell
padrão glob da shell | descrição de regra de correspondência |
---|---|
*
|
nome de ficheiro (segmento) não iniciado com ". "
|
.*
|
nome de ficheiro (segmento) iniciado com ". "
|
?
|
exactamente um caractere |
[…]
|
exactamente um caractere com qualquer caractere envolvido em colchetes |
[a-z]
|
exactamente um caractere com qualquer caractere entre "a "
e "z "
|
[^…]
|
exactamente um caractere que não seja qualquer caractere envolvido em
colchetes (excluindo "^ ")
|
Por exemplo, tente o seguinte
$ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc] 3.c 4.h $ echo .* . .. .5.txt ..6.txt $ echo .*[^.]* .5.txt ..6.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf junk
Veja glob(7).
![]() |
Nota |
---|---|
Ao contrário da expansão de nome de ficheiro da shell, o padrão de shell
" |
![]() |
Nota |
---|---|
O BASH pode ser moldado a alterar o seu comportamento de glob com as suas
opções shopt embutidas como as " |
Cada comando retorna o seu estado de saída (variável:
"$?
") como o valor de retorno.
Tabela 1.21. Códigos de saída do comando
estado de saída do comando | valor de retorno numérico | valor de retorno lógico |
---|---|---|
sucesso | zero, 0 | TRUE |
erro | não-zero, -1 | FALSE |
por exemplo, tente o seguinte.
$ [ 1 = 1 ] ; echo $? 0 $ [ 1 = 2 ] ; echo $? 1
![]() |
Nota |
---|---|
Por favor note que, no contexto lógico da shell, sucesso é tratado como o VERDADEIRO lógico o qual tem 0 (zero) como valor. De certa maneira isto não é intuitivo e precisa de ser lembrado aqui. |
Vamos tentar lembrar os seguintes idiomas de comando de shell escritos em uma linha como parte de um comando de shell.
Tabela 1.22. Idiomas de comandos de shell
idioma do comando | descrição |
---|---|
comando &
|
execução nos bastidores do
comando na sub-shell
|
comando1 | comando2
|
liga em pipe a saída standard do
comando1 à entrada standard do
comando2 (execução concorrente)
|
comando1 2>&1 | comando2
|
liga em pipe ambos saída standard e erro
standard do comando1 à entrada standard do
comando2 (execução concorrente)
|
comando1 ; comando2
|
executa o comando1 e o comando2
sequencialmente
|
comando1 && comando2
|
executa o comando1 ; se tiver sucesso, executa o
comando2 sequencialmente (retorna sucesso se ambos
comando1 e
comando2 tiverem sucesso)
|
comando1 || comando2
|
executa o comando1 ; se não tiver sucesso, executa o
comando2 sequencialmente (retorna sucesso se o
comando1 ou o
comando2 tiverem sucesso.
|
comando > foo
|
redirecciona a saída standard do comando para o ficheiro
foo (sobrescreve)
|
comando 2> foo
|
redirecciona o erro standard do comando para o ficheiro
foo (sobrescreve)
|
comando >> foo
|
redirecciona a saída standard do comando para o ficheiro
foo (acrescenta)
|
comando 2>> foo
|
redirecciona o error standard do comando para o ficheiro
foo (acrescenta)
|
comando > foo 2>&1
|
redirecciona ambos saída standard e erro standard do
comando para o ficheiro "foo "
|
comando < foo
|
redirecciona a entrada standard do comando para o
ficheiro foo
|
comando << delimitador
|
redirecciona a entrada standard do comando para as
seguintes linhas até que o "delimitador " seja atingido
(aqui documento)
|
comando <<- delimitador
|
redirecciona a entrada standard do comando para as
seguintes linhas até que o "delimitador " seja atingido
(aqui documento, os caracteres tab de inicio são retirados das linhas de
entrada)
|
O sistema Debian é um sistema de multi-tarefa. Os trabalhos nos bastidores
permitem aos utilizadores correr múltiplos programas numa única shell. A
gestão dos processos nos bastidores envolve os embutidos da shell:
jobs
, fg
, bg
, e
kill
. Por favor leia as secções de bash(1) sob "SINAIS",
e "CONTROLE DE TAREFAS", e
builtins(1).
Por exemplo, tente o seguinte
$ </etc/motd pager
$ pager </etc/motd
$ pager /etc/motd
$ cat /etc/motd | pager
Apesar dos 4 exemplos de redireccionamentos de shell mostrarem a mesma
coisa, o último exemplo corre um comando cat
extra e
desperdiça recursos sem nenhuma razão.
A shell permite-lhe abrir ficheiros usando o exec
embutido com um descritor de ficheiro arbitrário
$ echo Hello >foo $ exec 3<foo 4>bar # abrir ficheiros $ cat <&3 >&4 # redireccionar stdin para 3, stdout para 4 $ exec 3<&- 4>&- # fechar ficheiros $ cat bar Hello
Aqui,"n<&-
" e
"n>&-
" significam fechar o
descritor de ficheiro "n
".
O descritores de ficheiro 0-2 são predefinidos.
Tabela 1.23. Descritores de ficheiro predefinido
dispositivo | descrição | descritor de ficheiro |
---|---|---|
stdin
|
entrada standard | 0 |
stdout
|
saída standard | 1 |
stderr
|
erro standard | 2 |
Você pode definir um nome alternativo (alias) para um comando frequentemente usado.
Por exemplo, tente o seguinte
$ alias la='ls -la'
Agora, "la
" funciona como atalho para "ls
-la
" o que lista todos os ficheiros no formato de lista longa.
Você pode listar quaisquer nomes alternativos existentes com o
alias
(veja
bash(1)
sob "COMANDOS EMBUTIDOS NA SHELL").
$ alias ... alias la='ls -la'
Você pode identificar o caminho exacto ou a identidade do comando com
type
(veja
bash(1)
sob "COMANDOS EMBUTIDOS DA SHELL").
Por exemplo, tente o seguinte
$ type ls ls is hashed (/bin/ls) $ type la la is aliased to ls -la $ type echo echo is a shell builtin $ type file file is /usr/bin/file
Aqui o ls
foi procurado recentemente enquanto o
"file
" não foi, assim o "ls
" tem
"hash", isto é, a shell tem um registo interno para o acesso rápido à
localização do comando "ls
".
![]() |
Dica |
---|---|
Em ambientes de trabalho tipo Unix, o processamento de texto é feito ao canalizar texto por correntes de ferramentas standard de processamento de texto. Esta foi outra inovação crucial do Unix.
Existem algumas ferramentas standard de processamento de texto que são muito usadas nos sistemas tipo Unix.
Nenhuma expressão regular é usada:
cat(1) concatena ficheiros e escreve o conteúdo inteiro.
tac(1) concatena ficheiros e escreve-os em reverso.
cut(1) selecciona partes de linhas e escreve-as.
head(1) escreve a parte inicial de ficheiros.
tail(1) escreve a parte final de ficheiros.
sort(1) organiza as linhas de ficheiros de texto.
uniq(1) remove linhas duplicadas de um ficheiro organizado.
tr(1) traduz ou apaga caracteres.
diff(1) compara ficheiros linha a linha.
É usada uma expressão regular básica (BRE):
grep(1) faz coincidir texto com padrões.
ed(1) é um editor de linhas primitivo.
sed(1) é um editor de fluxos.
vim(1) é um editor de écran.
emacs(1) é um editor de écran. (BRE de certo modo extensa)
É usada expressão regular extensa (ERE):
egrep(1) faz coincidir texto com padrões.
awk(1) faz processamento de texto simples.
tcl(3tcl) pode fazer todo o processamento de texto concebível: re_syntax(3). Bastante usado com tk(3tk).
perl(1) pode fazer todo o processamento de texto concebível. perlre(1).
pcregrep(1)
do pacote pcregrep
corresponde texto com padrões Perl Compatible Regular Expressions
(PCRE).
python(1)
com o módulo re
pode fazer todo o processamento de texto
concebível. Veja "/usr/share/doc/python/html/index.html
".
Se você não ter a certeza do que estes comandos fazem, por favor use
"man comando
" para descobri-lo por si.
![]() |
Nota |
---|---|
A ordenação e alcance da expressão dependentes do locale. Se desejar obter o
comportamento tradicional para um comando, use o locale C em vez dos UTF-8 ao preceder o comando com
" |
![]() |
Nota |
---|---|
As expressões regulares Perl
(perlre(1)),
Perl Compatible Regular
Expressions (PCRE), e Python
expressões regulares oferecidas pelo módulo |
As expressões regulares são usadas em muitas ferramentas de processamento de texto. São análogas aos "globs" da shell, mas são mais complicadas e poderosas.
A expressão regular descreve o padrão de correspondência e é feita de caracteres de texto e de meta-caracteres.
O meta-caractere é apenas um caractere com um significado especial. Existem 2 estilos principais, BRE e ERE, dependendo das ferramentas de texto como descrito em cima.
Tabela 1.24. Meta-caracteres para BRE e ERE
BRE | ERE | descrição da expressão regular |
---|---|---|
\ . [ ] ^ $ *
|
\ . [ ] ^ $ *
|
meta-caracteres comuns |
\+ \? \( \) \{ \} \|
|
BRE apenas meta-caracteres 'escapados'
"\ "
|
|
+ ? ( ) { } |
|
ERE apenas meta-caracteres não
'escapados' "\ "
|
|
c
|
c
|
corresponde a não-meta-caractere
"c "
|
\c
|
\c
|
corresponde a um caractere literal "c " mesmo se
"c " é um meta-caractere por si só
|
.
|
.
|
corresponde a qualquer caractere incluindo nova linha |
^
|
^
|
posição no início de uma string |
$
|
$
|
posição no fim de uma string |
\<
|
\<
|
posição no início de uma palavra |
\>
|
\>
|
posição no final de uma palavra |
\[abc…\]
|
[abc…]
|
corresponde a quaisquer caracteres em "abc… "
|
\[^abc…\]
|
[^abc…]
|
corresponde a quaisquer caracteres excepto em "abc… "
|
r*
|
r*
|
corresponde a zero ou mais expressões regulares identificadas por
"r "
|
r\+
|
r+
|
corresponde a uma ou mais expressões regulares identificadas por
"r "
|
r\?
|
r?
|
corresponde a zero ou uma expressão regular identificada por
"r "
|
r1\|r2
|
r1|r2
|
corresponde a uma das expressões regulares identificadas por
"r1 " ou "r2 "
|
\(r1\|r2\)
|
(r1|r2)
|
corresponde a uma das expressões regulares identificadas por
"r1 " ou "r2 " e trata-as como uma
expressão regular entre colchetes
|
A expressão regular do emacs
é basicamente BRE mas foi estendida para tratar
"+
" e "?
" como meta-caracteres como em ERE. Assim, não há necessidade de os 'escapar' com
"\
" na expressão regular do emacs
.
grep(1) pode ser usado para executar a pesquisa de texto usando a expressão regular.
Por exemplo, tente o seguinte
$ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program
![]() |
Dica |
---|---|
Para a expressão de substituição, alguns caracteres têm significados especiais.
Tabela 1.25. A expressão de substituição
expressão de substituição | descrição do texto para substituir a expressão de substituição |
---|---|
&
|
que expressão regular corresponde (use \& no
emacs )
|
\n
|
que n º entre colchetes da expressão regular correspondeu (sendo "n" um número) |
Para string de substituição de Perl, é usado "$n
" em vez
de "\n
" e "&
" não tem nenhum
significado especial.
Por exemplo, tente o seguinte
$ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=&=
Aqui por favor preste atenção extra ao estilo da expressão regular entre colchetes e como as strings correspondentes são usadas no processo de substituição de texto nas diferentes ferramentas.
Estas expressões regulares também podem ser usadas para movimentos do cursor e acções de substituição de texto em alguns editores.
A barra descendente "\
" no fim da linha na linha de
comandos da shell 'escapa' a nova linha como um caractere de espaço em
branco e continua a entrada na linha de comandos da shell na próxima linha.
Por favor leia todos os manuais relacionados para aprender estes comandos.
O comando
ed(1)
pode substituir todas as instâncias de "FROM_REGEX
" por
"TO_TEXT
" em "file
".
$ ed file <<EOF ,s/FROM_REGEX/TO_TEXT/g w q EOF
O comando
sed(1)
pode substituir todas as instâncias de "FROM_REGEX
" por
"TO_TEXT
" em "file
".
$ sed file 's/FROM_REGEX/TO_TEXT/g' | sponge file
![]() |
Dica |
---|---|
O comando
sponge(8)
é uma ferramenta Unix não standard oferecida pelo pacote
|
O comando
vim(1)
pode substituir todas as instâncias de "FROM_REGEX
" com
"TO_TEXT
" em "ficheiro
" ao usar
comandos
ex(1).
$ vim '+%s/FROM_REGEX/TO_TEXT/gc' '+w' '+q' ficheiro
![]() |
Dica |
---|---|
A bandeira " |
Múltiplos ficheiros ("ficheiro1
",
"ficheiro2
",e "ficheiro3
") podem ser
processados com expressões regulares à semelhança com
vim(1)
ou
perl(1).
$ vim '+argdo %s/FROM_REGEX/TO_TEXT/ge|update' '+q' ficheiro1 ficheiro2 ficheiro3
![]() |
Dica |
---|---|
A bandeira " |
$ perl -i -p -e 's/FROM_REGEX/TO_TEXT/g;' ficheiro1 ficheiro2 ficheiro3
no exemplo perl(1), "-i
" é para edição no-lugar,
"-p
" é para ciclo implícito sobre ficheiros.
![]() |
Dica |
---|---|
O uso do argumento " |
![]() |
Nota |
---|---|
ed(1) e vim(1) são BRE; perl(1) é ERE. |
Vamos considerar um ficheiro de texto chamado "DPL
" no
qual alguns nomes de líderes de projectos Debian pré-2004 e os seus dias de
iniciação estão listados num formato separado por espaços.
Ian Murdock August 1993 Bruce Perens April 1996 Ian Jackson January 1998 Wichert Akkerman January 1999 Ben Collins April 2001 Bdale Garbee April 2002 Martin Michlmayr March 2003
![]() |
Dica |
---|---|
Veja "Uma História Breve de Debian" para o histórico de liderança de Debian mais recente. |
O awk é frequentemente usado para extrair dados deste tipo de ficheiros.
Por exemplo, tente o seguinte
$ awk '{ print $3 }' <DPL # month started August April January January April April March $ awk '($1=="Ian") { print }' <DPL # DPL called Ian Ian Murdock August 1993 Ian Jackson January 1998 $ awk '($2=="Perens") { print $3,$4 }' <DPL # When Perens started April 1996
Shells como a Bash também podem ser usadas para analisar este tipo de ficheiro.
Por exemplo, tente o seguinte
$ while read first last month year; do echo $month done <DPL ... os mesmos resultados que no primeiro exemplo do Awk
Aqui, o comando embutido read
usa caracteres em
"$IFS
" (separadores de campo internos) para dividir
linhas em palavras.
Se você alterar "$IFS
" para ":
", você
pode analisar "/etc/passwd
" com a shell facilmente.
$ oldIFS="$IFS" # guarda o valor antigo $ IFS=':' $ while read user password uid gid rest_of_line; do if [ "$user" = "bozo" ]; then echo "$user's ID is $uid" fi done < /etc/passwd bozo's ID is 1000 $ IFS="$oldIFS" # restaura o valor antigo
(Se o Awk é usado para fazer o equivalente, use "FS=':'
"
para definir o campo separador.)
O IFS também é usado pela shell para dividir resultados de expansão de parâmetros, substituição de comandos, e expansão aritmética. Estas não ocorrem em palavras dentro de citações simples ou duplas. O valor predefinido do IFS é <espaço>, <tab>, e <nova-linha> combinados.
Tenha cuidado ao usar estes truques IFS da shell. Podem acontecer coisas estranhas, quando a shell interpreta partes do script como a sua entrada.
$ IFS=":," # usa ":" e "," como IFS $ echo IFS=$IFS, IFS="$IFS" # echo é embutido no Bash IFS= , IFS=:, $ date -R # apenas o resultado do comando Sat, 23 Aug 2003 08:30:15 +0200 $ echo $(date -R) # sub shell --> entrada para a shell principal Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # reset IFS para o predefinido $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200
Os seguintes scripts fazem coisas bonitas como parte de um pipe.
Tabela 1.26. Lista de trechos de script para canalizar comandos em pipe
trecho de script (escrito numa linha) | efeito do comando |
---|---|
find /usr -print
|
encontra todos os sob "/usr "
|
seq 1 100
|
escreve 1 até 100 |
| xargs -n 1 <command>
|
corre o comando repetidamente com cada item do pipe como seu argumento |
| xargs -n 1 echo
|
divide itens separados por espaços do pipe em linhas |
| xargs echo
|
junta todas as linhas do pipe numa linha |
| grep -e <regex_pattern>
|
extrai as linhas do pipe que contêm o <padrão_da_expressão_regular> |
| grep -v -e <regex_pattern>
|
extrai as linhas do pipe que não contêm o <padrão_da_expressão_regular> |
| cut -d: -f3 -
|
extrai do pipe o terceiro campo separado por ": "
(ficheiro passwd etc.)
|
| awk '{ print $3 }'
|
extrai do pipe o terceiro campo separado por espaços |
| awk -F'\t' '{ print $3 }'
|
extrai do pipe o terceiro campo separado por tab |
| col -bx
|
remove os backspace e expande as tabs para espaços |
| expand -
|
expande separadores |
| sort| uniq
|
organiza e remove duplicados |
| tr 'A-Z' 'a-z'
|
converte maiúsculas para minúsculas |
| tr -d '\n'
|
concatena linhas em uma linha |
| tr -d '\r'
|
remove CR |
| sed 's/^/# /'
|
adiciona "# " ao inicio de cada linha
|
| sed 's/\.ext//g'
|
remove ".ext "
|
| sed -n -e 2p
|
escreve a segunda linha |
| head -n 2 -
|
escreve as primeiras duas linhas |
| tail -n 2 -
|
escreve as últimas duas linhas |
Um script de shell de uma linha pode fazer ciclos sobre muitos ficheiros usando o find(1) e xargs(1) para executar tarefas bastante complicadas. Veja Secção 10.1.5, “Idiomas para a selecção de ficheiros” e Secção 9.5.9, “Repetindo um ciclo de comandos sobre ficheiros”.
Quando a utilização dos modos interactivos da shell se torna muito complicada, por favor considere escrever um script de shell (veja Secção 12.1, “O script de shell”).