Consulte o BootPrompt-HOWTO
do LDP para obter informações detalhadas sobre o prompt de inicialização.
É possível iniciar um sistema e logar com a conta do root sem conhecer a senha
do root se você tiver acessso ao teclado do console. (Isto assume que não há
requerimentos de senhas da BIOS e de um carregador de inicialização como o
lilo
que o impediriam de iniciar o sistema.)
Este é um procedimento que não requer discos de inicialização externos e nenhuma mudança nas configurações de inicialização. Aqui, "Linux" é o rótulo para inicializar o kernel Linux na instalação Debian padrão.
Na tela de inicialização do lilo
, assim que boot:
aparecer (você deve pressionar a tecla shift neste momento em alguns sistemas
para prevenir a inicialização automática), digite :
boot: Linux init=/bin/sh
Isso faz com que o sistema inicie o kernel e execute /bin/sh
ao
invés de seu padrão init
. Agora você ganhou privilégios de root e
um shell de root. Uma vez que o /
estará atualmente montado como
somente-leitura e muitas partições de disco ainda não foram montadas, você deve
fazer o seguinte para conseguir um sistema razoavelmente funcional.
init-2.03# mount -n -o remount,rw / init-2.03# mount -avt nonfs,noproc,nosmbfs init-2.03# cd /etc init-2.03# vi passwd init-2.03# vi shadow
(Caso o segundo campo de dados em /etc/passwd
seja "x"
para cada nome de usuário, seu sistema usa senhas shadow e você deve editar o
arquivo /etc/shadow
.) Para desabilitar a senha do root, edite o
segundo campo de dados no arquivo de senhas de maneira a deixá-lo vazio. Agora
o sistema pode ser reiniciado e você pode logar como root sem uma senha.
Quando inicia no nível de execução 1, o Debian (pelo menos depois do Potato)
requer uma senha, o que algumas distribuições mais antigas não requerem.
É uma boa idéia ter um editor mínimo em /bin/
caso o
/usr/
não esteja acessível (consulte Editores de recuperação, Seção
11.2).
Considere também instalar o pacote sash
. Quando o sistema ficar
em um estado não-inicializável, execute :
boot: Linux init=/bin/sash
O sash
funciona como um substituo interativo para o
sh
mesmo quando o /bin/sh
está inutilizável. Ele é
estaticamente ligado e inclui muitos utilitários padrões embutidos (tecle
"help" no prompt para uma lista de referência).
Inicie a partir de qualquer conjunto de disco de boot/root. Caso
/dev/hda3
seja a partição raiz original, os comandos a
seguir irão lhe permitir editar o arquivo de senhas tão facilmente quanto da
maneira citada acima.
# mkdir fixit # mount /dev/hda3 fixit # cd fixit/etc # vi shadow # vi passwd
A vantagem deste método em relação ao método anterior é que você não precisa
conhecer a senha do lilo
(caso exista). Mas para usar este método
você deve ser capaz de acessar o setup da BIOS e permitir o sistema iniciar a
partir de um disquete ou de um CD, caso isto já não esteja configurado.
Sem problemas, mesmo caso você não tenha se preocupado em criar um disco de
inicialização durante a instalação. Caso o lilo
esteja quebrado,
pegue o disco de inicialização do conjunto de instalação Debian e inicie seu
sistema a partir do mesmo. No prompt de inicialização, assumindo que a
partição raiz de sua instalação Linux esteja em
/dev/hda12
e você queira o nível de execução 3, digite
:
boot: rescue root=/dev/hda12 3
Você irá iniciar então em um sistema quase que complementamente funcional usando o kernel no disquete. (Podem existir problemas menores devido a falta de recursos ou módulos do kernel.)
Veja também Instalar um pacote em um sistema não iniciável, Seção 6.3.6 se tiver um sistema quebrado.
Caso você precise de um disquete de inicialização personalizado, siga as
instruções de readme.txt
no disco de recuperação.
Acompanhar a unstable/sid é divertido, mas uns xdm
,
gdm
, kdm
e wdm
com bugs iniciados
durante o processo de inicialização podem lhe deixar mal.
Primeiro obtenha o shell de root informando o seguinte no prompt de inicialização :
boot: Linux vga=normal s
Aqui, Linux é o rótulo para a imagem de kernel através da qual você
está inicializando; "vga=normal" irá certificar-se de que o lilo
execute em vídeo VGA comum e "s" (ou "S") é o parâmetro
passado ao init
para invocar o modo monousuário. Informe a senha
de root no prompt.
Existem algumas maneiras de desabilitar todos os daemons X que iniciam :
/etc/init.d/?dm
.
/etc/rc2.d/S99?dm
para /etc/rc2.d/K99?dm
.
/etc/rc2.d/S99?dm
.
Aqui, o número em rc2.d
deve corresponder ao nível de
execução especificado em /etc/inittab
. Também,
?dm
significa que você precisa executar o comando
várias vezes substituindo-o com todos entre xdm
, gdm
,
kdm
e wdm
.
Somente o primeiro é "a verdadeira maneira" no Debian. O último é
fácil mas funciona somente no Debian e requer que você configure o display
manager novamente depois usando dpkg-reconfigure
. Os outros são
métodos genéricos para desabilitar daemons.
Você ainda pode iniciar o X através do comando startx
a partir de
qualquer console shell.
O sistema pode ser iniciado em um nível de execução e configuração particulares
usando o prompt de inicialização do lilo
. Detalhes são dados no
BootPrompt-HOWTO
(LDP).
Caso você queira iniciar o sistema no nível de execução 4, use o seguinte no
prompt de inicialização do lilo
.
boot: Linux 4
Caso você queira iniciar o sistema em modo monousuário funcionando normalmente
e você conhece a senha de root, um dos exemplos a seguir no prompt de
inicialização do lilo
funcionará.
boot: Linux S boot: Linux 1 boot: Linux -s
Caso você queira iniciar o sistema com uma quantidade de memória inferior a
quantidade de memória que o sistema possui fisicamente (digamos, 48MB para um
sistema com 64MB), use o seguinte no prompt de inicialização do
lilo
:
boot: Linux mem=48M
Certifique-se de não especificar mais do que a quantidade de memória que você
possui fisicamente ou o kernel irá travar. Se você possui mais de 64MB de
memória, por exemplo, 128MB, a menos que você execute mem=128M ou
inclua uma linha adicional similar em /etc/lilo.conf
, kernels
antigos e/ou placas-mãe com uma BIOS antiga não utilizarão a memória acima de
64MB.
O GRUB é um novo gerenciador de inicialização do projeto Hurd e é muito mais flexível do que o Lilo, mas possui uma forma diferente de lidar com os parâmetros de inicialização.
grub> find /vmlinuz grub> root (hd0,0) grub> kernel /vmlinuz root=/dev/hda1 grub> initrd /initrd grub> boot
Aqui, você deve conhecer os nomes de dispositivos Hurd :
o Hurd/GRUB Linux MSDOS/Windows (fd0) /dev/fd0 A: (hd0,0) /dev/hda1 C: (geralmente) (hd0,3) /dev/hda4 F: (geralmente) (hd1,3) /dev/hdb4 ?
Consulte /usr/share/doc/grub/README.Debian
e
/usr/share/doc/grub-doc/html/
para maiores detalhes.
Administração de sistema envolve tarefas muito mais elaboradas em um ambiente Unix do que em um computador pessoal comum. Certifique-se de conhecer os meios mais básicos de configuração caso você precise recuperar um sistema com problemas. Ferramentas de configuração baseados em X11 possuem uma boa aparência e são convenientes mas geralmente não podem ser utilizadas nessas situações de emergência.
Neste contexto, gravar atividades shell é uma boa prática, especialmente como root.
Emacs: Use M-x shell para iniciar gravando em um buffer, e use C-x C-w para gravar o conteúdo do buffer para um arquivo.
Shell: Use o comando screen
com "^A H" como descrito em
Mudança de console com screen
, Seção
8.6.27; ou use o comando script
.
$ script Script started, file is typescript ... faça qualquer coisa ... Ctrl-D $ col -bx <typescript >savefile $ vi savefile
O comando a seguir pode ser usado ao invés do script
:
$ bash -i 2>&1 | tee typescript
Caso você precise gravar a imagem gráfica de uma aplicação X, incluindo um
display xterm, use o gimp
(GUI). Ele pode capturar cada janela ou
a tela toda. Alternativas são o xwd
(xbase-clients
),
import
(imagemagick
) e scrot
(scrot
).
Caso você precise rearranjar a estrutra de arquivos, mova o conteúdo incluindo ligações de arquivos usando :
Método padrão : # cp -a /diretório/fonte /diretório/destino # requer o GNU cp # (cd /diretório/fonte && tar cf - . ) | \ (cd /diretório/destino && tar xvfp - ) Caso uma ligação direta (hard link) esteja envolvida, um método pedante é necessário : # cd /caminho/para/diretório/antigo # find . -depth -print0 | afio -p -xv -0a /ponto/montagem/do/novo/diretório Caso remoto: # (cd /diretório/fonte && tar cf - . ) | \ ssh usuário@máquina.domínio (cd /diretório/destino && tar xvfp - ) Caso não existam arquivos ligados : # scp -pr usuário1@máquina1.domínio:/diretório/fonte \ usuário2@máquina2.domínio:/diretório/destino
Aqui, scp
<==> rcp
e ssh
<==> rsh
.
A comparação informativa a seguir sobre copiar um subdiretório inteiro foi
apresentada por Manoj Srivastava srivasta@debian.org
na lista de
discussão debian-user@lists.debian.org.
cp
Tradicionalmente, o cp
não era um candidato para esta tarefa uma
vez que ele não desreferenciava ligações simbólicas ou preservava ligações
diretas (hard links). Outra coisa a considerar eram arquivos esparsos
(arquivos com buracos).
O cp
GNU superou estas limitações; porém, em um sistema não-GNU, o
cp
poderia continuar a ter problemas. Adicionalmente, você não
pode gerar arquivos pequenos e portáveis usando o cp
.
% cp -a . novodiretório
tar
O Tar superou alguns dos problemas que o cp
tinha com ligações
simbólicas. Porém, apesar do cpio
lidar com arquivos especiais, o
tar
tradicional não o faz.
A maneira do tar
lidar com mútiplas ligações diretas para um
arquivo é colocar somente uma cópia da ligação na fita, mas o nome anexado a
esta cópia é o único que você pode usar para recuperar o arquivo; a
maneira do cpio
é colocar uma cópia para cada ligação, mas você
pode recuperá-lo usando quaisquer dos nomes.
O comando tar
mudou sua opção para arquivos .bz2
entre o Potato e o Woody, portanto, use --bzip2 em scripts ao
invés de sua forma abreviada -I (Potato) ou -j
(Woody).
pax
O novo, cantante e dançante Utilitário de Troca de Arquivos Portável,
compatível com os padrões POSIX (IEEE Std 1003.2-1992, páginas 380–388
(seção 4.48) e páginas 936–940 (seção E.4.48)). O pax
irá
ler, gravar e listar os membros de um arquivo e irá copiar hierarquias de
diretórios. A operação do pax
é independente do formato
específico do arquivo e suporta uma grande variedade de formatos de arquivo.
As implementações do pax
ainda são novas.
# apt-get install pax $ pax -rw -p e . novodiretório ou $ find . -depth | pax -rw -p e novodiretório
cpio
O cpio
copia arquivos em ou de um arquivo cpio
ou
tar
. O arquivo pode ser outro arquivo no disco, uma fita
magnética ou um pipe.
$ find . -depth -print0 | cpio --null --sparse -pvd novo-diretório
afio
O afio
é uma maneira melhor de lidar com arquivo no formato
cpio
. Ele é geralmente mais rápido do que o cpio
,
oferece opções de fita magnética mais diversas e lida de maneira graciosa com
corrupção de dados de entrada. Ele suporta arquivo em múltiplos volumes
durante a operação interativa. O afio
pode criar arquivos
comprimidos que são muito mais seguros do que arquivo comprimidos
tar
ou cpio
. O afio
é melhor usado como
um "mecanismo de arquivo" em um script de backup.
$ find . -depth -print0 | afio -px -0a novo-diretório
Todos os meus backups em fita utilizam o afio
.
Backups diferenciais e sincronização de dados podem ser implementados com diversos métodos :
rcs
: backup e histórico, somente texto
rdiff-backup
: backup e histórico. ligação simbólica OK.
pdumpfs
: backup e histórico dentro de um sistema de arquivos.
Ligação simbólica OK
rsync
: sincronização 1-way
unison
: sincronização 2-way
cvs
: sincronização multi-way com servidor backup e histórico,
somente texto, maduro. Consulte Concurrent
Versions System (CVS) (Sistema de Versões Concorrentes), Seção 12.1.
arch
: sincronização multi-way com servidor backup e histórico, não
existe algo como um "diretório de trabalho".
subversion
: sincronização multi-way com servidor backup e
histórico, Apache.
A combinação de um desses com o método descrito em Copiar e arquivar um subdiretório inteiro, Seção 8.3 e
a atividade regular automatizada descrita em Agendar
atividade (cron
, at
), Seção 8.6.26 farão um bom
sistema de backup.
Explicarei três utilitários de fácil uso.
O rdiff-backup
oferece backup legal e simples com histórico
diferencial para quaisquer tipos de arquivos incluindo ligações simbólicas.
Para fazer backup da maioria de ~/
para /mnt/backup
:
$ rdiff-backup --include ~/tmp/keep --exclude ~/tmp ~/ /mnt/backup
Para restaurar dados de três dias atrás do arquivo para ~/old
:
$ rdiff-backup -r 3D /mnt/backup ~/old
Consulte rdiff-backup(1)
.
pdumpfs
O pdumpfs
é um sistema de backup diário simples similar ao
dumpfs
do Plan9 que preserva todo estado diário. Você pode
acessar estados (snapshots) antigos a qualquer momento para obter um arquivo de
um certo dia. Vamos fazer um backup de seu diretório home com o
pdumpfs
e o cron
!
O pdumpfs
constrói o estado (snapshot) YYYY/MM/DD
(ano/mês/dia) no diretório destino. Todos os arquivos fontes são copiados para
o diretório do snapshot quando o pdumpfs
é executado pela primeira
vez. Na segunda vez e depois, o pdumpfs
copia apenas os arquivos
recém criados ou atualizados e grava os arquivos não modificados como ligações
diretas para os arquivos do snapshot do dia anterior para economizar espaço em
disco.
$ pdumpfs dir-fonte dir-dest [nomebase-dest]
Consulte pdumpfs(8)
.
O Changetrack
irá gravar regularmente as mudanças nos arquivos de
configurações baseados em texto em arquivos RCS. Consulte
changetrack(1)
.
# apt-get install changetrack # vi changetrack.conf
Execute o top
para ver qual processo está agindo de forma
engraçada. Pressione `P' para ordenar por uso de CPU, `M' para ordenar por
memória e `k' para matar um processo. Alternativamente, o comando estilo BSD
ps aux | less ou estilo System V ps -efH | less podem
ser usados. A sintaxe estilo System V exibe o ID (PPID) do
processo pai que pode ser usado para matar os filhos zumbis (defunct).
Use o kill
para matar (ou enviar um sinal para) um processo pelo
ID do processo, killall
para fazer o mesmo por nome de comando do
processo. Sinais freqüentemente usados :
1: HUP, reinicia daemon 15: TERM, kill normal 9: KILL, kill forçado
Garantia contra mal funcionamento do sistema é fornecida pela opção de compilação de kernel "Magic SysRq key". Pressionar Alt-SysRq em um i386, seguido por uma das teclas r 0 k e i s u b, faz a mágica.
Un`r'aw restaura o teclado após coisas como X travarem. Mudar o nível de log
do console para `0' reduz mensagens de erros. sa`k' (tecla de administração de
sistema) mata todos os processos no console virtual atual. t`e'rminate mata
todos os processos no terminal atual exceto o init
. k`i'll mata
todos os processos exceto o init
.
`S'ync, `u'mount e re`b'oot são para se livrar de situações realmente ruins.
Os kernels de instalação padrão Debian não são compilados com essa opção no
momento em que este documento é escrito. Recompile o kernel para ativar esta
função. Informações detalhadas podem ser encontradas em
/usr/share/doc/kernel-doc-versão/Documentation/sysrq.txt.gz
ou /usr/src/kernel-versão/Documentation/sysrq.txt.gz
.
O less
é o paginador padrão (navegador de conteúdo de arquivo).
Pressione `h' para ajuda. Ele pode fazer muito mais do que o
more
. O less
pode ser supercarregado executando
eval $(lesspipe) ou eval $(lessfile) no script de
inicialização do shell. Veja mais em
/usr/share/doc/lessf/LESSOPEN
. A opção -R permite
saída de caracteres raw e habilita seqüências de escape de cores ANSI.
Consulte less(1)
.
O w3m
pode ser um paginador alternativo útil para alguns sistemas
de códigos (EUC).
O free
e o top
oferecem boa informação sobre recursos
de memória. Não se preocupe sobre o tamanho de "used" na linha
"Mem:", e ao invés leia a abaixo dessa (38792 no exemplo abaixo).
$ free -k # para uma máquina de 256MB total used free shared buffers cached Mem: 257136 230456 26680 45736 116136 75528 -/+ buffers/cache: 38792 218344 Swap: 264996 0 264996
A quantidade exata de memória física pode ser confirmada com o comando grep '^Memory' /var/log/dmesg, que nesse caso exibe "Memory: 256984k/262144k available (1652k kernel code, 412k reserved, 2944k data, 152k init)".
Total = 262144k = 256M (1k=1024, 1M=1024k) Livre para o dmesg = 256984k = Total - kernel - reserved - data - init Livre para o shell = 257136k = Total - kernel - reserved - data
Aproximadamente 5MB de memória não pode ser usada pelo sistema devido ao kernel utilizá-la.
# date MMDDhhmmCCYY # hwclock --utc --systohc # hwclock --show
Isto irá definir a hora do sistema e de hardware para MM/DD hh:mm, CCYY. Horas são exibidas em tempo local mas a hora de hardware usa UTC.
Referência : HOWTO
Gerenciando Data e Hora precisos
.
Ajustar o relógio do sistema para a hora correta automaticamente através de um servidor remoto :
# ntpdate servidor
É bom ter esse comando em /etc/cron.daily/
caso seu sistema possua
uma conexão Internet permanente.
Use o pacote chrony
.
Para desabilitar o protetor de tela, use os seguintes comandos.
No console Linux :
# setterm -powersave off
Inicie o console kon2 (kanji) com :
# kon -SaveTime 0
Executando o X :
# xset s off ou # xset -dpms ou # xscreensaver-command -prefs
Leia as páginas de manual correspondentes para controlar outros recursos de
console. Veja também a página de manual stty(1)
para mudar e
mostrar configurações de linha de terminal.
A Glibc oferece o getent(1)
para procurar entradas nas bases de
dados administrativas, isto é, passwd, group, hosts, services, protocols ou
networks.
getent base_de_dados [chave ...]
Sempre é possível desconectar o alto-falante do PC. ;-) Para o shell Bash:
echo "set bell-style none">> ~/.inputrc
Para acabar com as mensagens de erro na tela, o primeiro lugar a checar é
/etc/init.d/klogd
. Defina KLOGD="-c
3" nesse script e execute /etc/init.d/klogd
restart. Um método alternativo é executar dmesg
-n3.
Aqui os níveis de erro significam :
Caso uma mensagem de erro sem utilidade lhe incomode muito, considere fazer um
patch para o kernel trivial como o shutup-abit-bp6
(disponível no
subdiretório de exemplos
).
Outro lugar a olhar pode ser o /etc/syslog.conf
; cheque-o para ver
se alguma mensagem é logada para um dispositivo console.
Telas de console em sistemas semelhantes a Unix são normalmente acessadas
usando as rotinas da biblioteca (n)curses. Estas fornecem ao usuário um método
independente de terminal para atualizar caracteres de tela com razoável
otimização. Consule ncurses(3X)
e terminfo(5)
.
Em um sistema Debian, existem uma porção de entradas pré-definidas :
$ toe | less # todas as entradas $ toe /etc/terminfo/ | less # entradas reconfiguráveis pelo usuário
Exporte sua seleção como a variável de ambiente TERM.
Caso a entrada terminfo para o xterm
não funcione com um
xterm
não-Debian, mude seu tipo de terminal de "xterm"
para uma das versões limitadas em recursos como "xterm-r6" quando
você logar em um sistema Debian remotamente. Consulte
/usr/share/doc/libncurses5/FAQ
para maiores informações.
"dumb" é o menor denominador comum para terminfo.
Quando a tela fica cheia de caracteres estranhos depois de um comando cat algum-arquivo-binário (você pode não ser capaz de ver o comando digitado enquanto você digita) :
$ reset
Converter um arquivo texto DOS (fim-de-linha = ^M^J) para um arquivo texto Unix (fim-de-linha = ^J).
# apt-get install sysutils $ dos2unix arquivo_dos
Substituir todas as instâncias de DE_REGEX por PARA_TEXTO em todos os arquivos ARQUIVOS ...:
$ perl -i -p -e 's/DE_REGEX/PARA_TEXTO/g;' ARQUIVOS ...
-i é para edição "in-place", -p é para "loop implícito sobre ARQUIVOS ...". Caso a substituição seja complexa, você pode tornar a recuperação de erros mais fácil usando o parâmetro -i.bak ao invés de -i; isso irá manter cada arquivo original, adicionando .bak como uma extensão de arquivo.
O script seguinte removerá as linhas 5–10 e linhas 16–20 no local.
#!/bin/bash ed $1 <<EOF 16,20d 5,10d w q EOF
Aqui, os comandos do ed
são os mesmos comandos do command-mode do
vi
. Editar por trás do arquivo facilita a criação do script.
Seguir um desses procedimentos extrairá as diferenças entre dois arquivos fontes e criará arquivos diff unificados arquivo.patch0 ou arquivo.patch1 dependendo da localização dos arquivos:
$ diff -u arquivo.antigo arquivo.novo1 > arquivo.patch0 $ diff -u antigo/arquivo novo1/arquivo > arquivo.patch1
O arquivo diff (alternativamente chamado de arquivo patch) é usado para enviar atualizações de programas. O receptor aplicará esta atualização em outro arquivo usando :
$ patch -p0 arquivo < arquivo.patch0 $ patch -p1 arquivo < arquivo.patch1
Caso você possua três versões do código-fonte, você pode juntá-las mais
efetivamente usando o diff3
:
$ diff3 -m meu.arquivo arquivo.antigo seu.arquivo > arquivo
$ split -b 650m arquivo # divide o arquivo em pedaços de 650MB $ cat x* >arquivogrande # junta arquivos em 1 grande arquivo
Vamos considerar um arquivo texto chamado DPL
em que os nomes de
todos os líderes anteriores do projeto Debian e seus dias de iniciação são
listados em um formato separado por espaços.
Ian Murdock Agosto 1993 Bruce Perens Abril 1996 Ian Jackson Janeiro 1998 Wichert Akkerman Janeiro 1999 Ben Collins Abril 2001 Bdale Garbee Abril 2002 Martin Michlmayr Março 2003
O Awk é usado freqüentemente para extrair dados desses tipos de arquivo.
$ awk '{ print $3 }' <DPL # mês de início Agosto Abril Janeiro Janeiro Abril Abril Março $ awk '($1=="Ian") { print }' <DPL # DPL chamado Ian Ian Murdock Agosto 1993 Ian Jackson Janeiro 1998 $ awk '($2=="Perens") { print $3,$4 }' <DPL # Quando Perens começou Abril 1996
Shells como o Bash também podem ser usados para interpretar esse tipo de arquivo:
$ while read primeiro ultimo mes ano; do echo $mes done <DPL ... mesma saída do primeiro exemplo Awk
Aqui, o comando interno (built-in) read
usa os caracteres em $IFS
(internal field separators) (separadores de campos internos) para dividir as
linhas em palavras.
Se mudar IFS para ":", você pode interpretar o
/etc/passwd
com shell facilmente:
$ oldIFS="$IFS" # salva o valor antigo $ IFS=":" $ while read usuario senha uid gid resto_da_linha; do if [ "$usuario" = "osamu" ]; then echo "O ID de $usuario é $uid" fi done < /etc/passwd O ID de osamu é 1001 $ IFS="$oldIFS" # restaura o valor antigo
(Se o Awk for usado para fazer o mesmo, use FS=":" para definir o separador de campos.)
IFS também é usado pelo shell para dividir resultados de expansão de parâmetros, substituição de comandos, e expansão aritmética. Esses não ocorrem em palavras com aspas duplas ou simples (double or single quoted words). O valor padrão de IFS é <espaço>, <tab> e <nova_linha> combinados.
Tenha cuidado ao usar esses truques do IFS do shell. Coisas estranhas podem acontecer, quando o shell interpreta algumas partes do script como sua entrada.
$ IFS=":," # usa ":" e "," como IFS $ echo IFS=$IFS, IFS="$IFS" # echo é um comando interno (built-in) do Bash IFS= , IFS=:, $ date -R # apenas uma saída de comando Sat, 23 Aug 2003 08:30:15 +0200 $ echo $(date -R) # sub shell --> entrada para shell principal Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # redefine IFS para o padrão $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200
Os scripts a seguir farão coisas legais como parte de um pipe.
find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local" # encontra todos os arquivo em /usr excluindo alguns arquivos xargs -n 1 comando # executa o comando para todos os itens de stdin xargs -n 1 echo | # divide itens separados-por-espaços-em-branco em linhas xargs echo | # mescla todas as linhas em uma linha grep -e padrão| # extrai linhas contendo padrão cut -d: -f3 -| # extrai o terceiro campo separado por : (arquivo passwd etc.) awk '{ print $3 }' | # extrai o terceiro campo separado por espaços awk -F'\t' '{ print $3 }' | # extrai terceiro campo separado por tab col -bx | # remove backspace e expande tabs para espaços expand -| # expande tabs sort -u| # ordena e remove duplicados tr '\n' ' '| # concatena linhas em uma linha tr '\r' ''| # remove CR tr 'A-Z' 'a-z'| # converte maiúsculas em minúsculas sed 's/^/# /'| # torna cada linha um comentário sed 's/\.ext//g'| # remove .ext sed -n -e 2p| # imprime a segunda linha head -n 2 -| # imprime as primeiras 2 linhas tail -n 2 -| # imprime as últimas 2 linhas
As seguintes maneiras de fazer loop para cada arquivo do tipo *.ext asseguram a manipulação apropriada de nomes de arquivos engraçados como aqueles com espaços e executam processo equivalente:
for x in *.ext; do if test -f "$x"; then comando "$x" fi done
find
e xargs
:
find . -type f -maxdepth 1 -name '*.ext' -print0 | \ xargs -0 -n 1 comando
find
com a opção -exec com um comando:
find . -type f -maxdepth 1 -name '*.ext' \ -exec comando '{}' \;
find
com a opção -exec com um script shell curto:
find . -type f -maxdepth 1 -name '*.ext' \ -exec sh -c "comando '{}' && echo 'successful'" \;
Apesar de quaisquer scripts Awk poderem ser reescritos em Perl usando
a2p(1)
, scripts Awk de uma linha são melhor convertidos para
scripts perl de uma linha manualmente. Por exemplo
awk '($2=="1957") { print $3 }' |
é equivalente a qualquer uma das seguintes linhas:
perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' | perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' | perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' | perl -lane 'print $F[2] if $F[1] eq "1957"' |
Como todos os espaços nos argumentos para o perl
na linha acima
podem ser removidos, e tomando vantagem das conversões automáticas entre
números e strings no Perl:
perl -lane 'print$F[2]if$F[1]eq+1957' |
Veja perlrun(1)
para detalhes sobre opções de linha de comando.
Se quiser mais scripts Perl loucos, http://perlgolf.sourceforge.net
pode ser interessante.
O comando a seguir irá ler uma página web em um arquivo texto. Muito útil quando copiando configurações da Web.
$ lynx -dump http://www.remote-site.com/help-info.html >arquivotexto
O links
e o w3m
podem ser usados aqui também, com
pequenas diferenças na renderização.
Caso esteja lidando com um arquivo de lista de discussão, use o
munpack
para obter conteúdos mime do texto.
O comando a seguir irá imprimir uma página Web em um arquivo/impressora Postscript :
$ apt-get install html2ps $ html2ps URL | lpr
Consulte lpr
/lpd
, Seção
3.6.1. Confira também os pacotes a2ps
e mpage
para criar arquivos Postscript.
O comando a seguir irá imprimir uma página de manual em um arquivo/impressora Postscript :
$ man -Tps alguma-página-de-manual | lpr $ man -Tps alguma-página-de-manual | mpage -2 | lpr
Você pode juntar arquivos PostScript ou PDF.
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \ -sOutputFile=bla.ps -f foo1.ps foo2.ps $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf
Exibir o tempo usado por um processo.
# time algum-comando >/dev/null real 0m0.035s # tempo no relógio de parede (tempo real decorrido) user 0m0.000s # tempo em modo de usuário sys 0m0.020s # tempo em modo kernel
nice
Use o nice
(do pacote GNU shellutils
) para definir um
valor de nice de um comando quando iniciá-lo. O renice
(bsdutils
) ou o top
podem fazer o renice de um
processo. Um valor nice de 19 representa o processo mais lento (a menor
prioridade); valores negativos são "não-nice", com -20 sendo um
processo bem rápido (alta prioridade). Somente o superusuário pode definir
valores de nice negativos.
# nice -19 top # muito "nice" # nice --20 cdrecord -v -eject speed=2 dev=0,0 disk.img # muito rápido
Algumas vezes um valor de nice extremo traz mais problemas do que melhorias para o sistema. Use esse comando com cuidado.
cron
, at
)
Use o cron
e o at
para agendar tarefas sob o Linux.
Consulte at(1)
, crontab(5)
e crontab(8)
.
Execute o comando crontab -e para criar ou editar um arquivo crontab para configurar eventos regularmente agendados. Exemplo de um arquivo crontab :
# use /bin/sh para executar comandos, não importando o que o /etc/passwd diga SHELL=/bin/sh # envie por mail qualquer saída para `paul', não importando de quem seja esse crontab MAILTO=paul # Min Hora DiaDoMês Mês DiaDaSemana comando (Dia... são OU) # executa às 00:05, todos os dias 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # executa às 14:15 no primeiro dia de cada mês -- saída enviada para paul 15 14 1 * * $HOME/bin/monthly # executa às 22:00 em dias de semana(1-5), saída para Joe. % para nova linha, último % para cc: 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Onde estão suas crianças?%.%% 23 */2 1 2 * echo "executa 23 minutos depois de 0am, 2am, 4am ..., em 1 de Fevereiro" 5 4 * * sun echo "executa às 04:05 todo domingo" # executa às 03:40 na primeira Segunda-feira de cada mês 40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && comando -argumentos
Execute o comando at
para agendar uma atividade a ser executada
apenas uma vez :
$ echo 'comando -argumentos'| at 3:40 monday
screen
O programa screen
lhe permite executar múltiplos
terminais virtuais, cada um com seu próprio shell interativo, em um
único terminal físico ou janela de emulação de terminal.
Mesmo caso você use consoles virtuais Linux ou múltiplas janelas xterm, vale a
pena explorar o screen
devido a seu abundante conjunto de
recursos, os quais incluem
screen
inteira
de seu terminal e anexá-la posteriormente.
Caso você freqüentemente logue em uma máquina Linux de um terminal remoto ou
usando um programa de terminal VT100, o screen
irá tornar sua vida
mais fácil com o recurso de detach.
screen
complexa com editores e outros programas abertos em
diversas janelas.
screen
separe e faça o logout dele mesmo.)
screen
irá magicamente anexar todas
as janelas que você deixou abertas.
screen
típicos
Uma vez que você inicia o screen
, toda a entrada de teclado é
enviada para sua janela atual exceto as teclas de comando, por padrão
^A. Todos os comandos screen
são informados
digitando ^A mais uma única tecla [mais quaisquer parâmetros].
Comandos úteis :
^A ? exibe uma tela de ajuda (exibe os mapeamentos de teclas) ^A c cria uma nova janela e muda para ela ^A n vai para a próxima janela ^A p vai para a janela anterior ^A 0 vai para a janela número 0 ^A w exibe uma lista de janelas ^A a envia um Ctrl-A para a janale atual como entrada de teclado ^A h grava uma cópia "hard" da janela atual para arquivo ^A H inicia/finaliza log da janela atual para arquivo ^A ^X trava o terminal (protegido por senha) ^A d separa sessão screen do terminal ^A DD separa a sessão screen e faz um logout
Isto é somente um pequeno subconjunto dos comandos e recursos do
screen
. Caso exista alguma coisa que você queira que o
screen
seja capaz de fazer, as chances são que que possa fazê-lo !
Consulte screen(1)
para maiores detalhes.
screen
Se você achar que o backspace e/ou o Ctrl-H não funcionam corretamente quando
você está executando o screen
, edite /etc/screenrc
,
encontre a linha contendo
bindkey -k kb stuff "\177"
e comente-a (ou seja, adicione "#" como o primeiro caracter).
screen
para X
Confira o xmove
. Consulte xmove(1)
.
Instale os pacotes netkit-ping
, traceroute
,
dnsutils
, ipchains
(para kernel 2.2),
iptables
(para kernel 2.4) e net-tools
e :
$ ping yahoo.com # checa a conexão Internet $ traceroute yahoo.com # rastrea pacotes IP $ ifconfig # checa configuração do host $ route -n # checa configuração de roteamento $ dig [@servidor-dns.com] host.domínio [{a|mx|any}] |less # checa os registros DNS de host.domínio usando servidor-dns.com # para um registro a {mx|any} $ ipchains -L -n |less # checa o filtro de pacotes (kernel 2.2) $ iptables -L -n |less # checa o filtro de pacotes (kernel 2.4) $ netstat -a # encontra todas as portas abertas $ netstat -l --inet # encontra as portas em escuta $ netstat -ln --tcp # encontra todas as portas TCP em escuta (numérico)
Para fazer um flush das mensagens do spool local :
# exim -q # faz flush em mensagens aguardando # exim -qf # faz flush em todas as mensagens # exim -qff # faz flush até mesmo em mensagens congeladas
-qff pode ser melhor como uma opção no script
/etc/ppp/ip-up.d/exim
.
Para remover mensagens congeladas do spool local com uma mensagem de erro de entrega :
# exim -Mg `mailq | grep frozen | awk '{ print $3 }'`
Você precisa entregar manualmente mensagens para caixas de mensagens ordenadas
em seu diretório home a partir de /var/mail/username
caso seu diretório home fique lotado e o procmail falhe. Depois de liberar
espaço em disco no diretório home, execute :
# /etc/init.d/exim stop # formail -s procmail </var/mail/nomedeusuário # /etc/init.d/exim start
Para limpar o conteúdo de um arquivo como um arquivo de log, não use o rm para apagar o arquivo e então criar um novo arquivo vazio porque o arquivo pode estar sendo acessado no intervalo entre os comandos. O comando a seguir é uma maneira mais segura de limpar o conteúdo de um arquivo :
$ :>arquivo-a-ser-limpo
Os comandos a seguir criarão arquivos falsos ou vazios :
$ dd if=/dev/zero of=nomedearquivo bs=1k count=5 # 5KB de conteúdo zero $ dd if=/dev/urandom of=nomedearquivo bs=1m count=7 # 7MB de conteúdo randômico $ touch nomedearquivo # cria arquivo de 0B (caso o arquivo exista, atualiza seu mtime)
Por exemplo, os seguintes comandos executados a partir do shell do disco de
inicialização do Debian apagarão todo o conteúdo do disco rígido
/dev/hda
completamente para muitos usos práticos.
# dd if=/dev/urandom of=/dev/hda ; dd if=/dev/zero of=/dev/hda
chroot
O programa chroot
, chroot(8)
, nos possibilita
executar diferentes instâncias do ambiente GNU/Linux em um único sistema
simultaneamente sem reiniciar.
Pode-se também executar um programa que exija muitos recursos como o
apt-get
ou o dselect
sob o chroot de uma máquina host
rápida enquanto montando por NFS uma máquina satélite lenta no host como
leitura/escrita e o ponto de chroot sendo o ponto de montagem da máquina
satélite.
chroot
Um ambiente Debian chroot pode ser criado facilmente pelo comando
debootstrap
no Woody. Por exemplo, para criar um chroot Sid em
/sid-root tendo acesso rápido à Internet:
main # cd / ; mkdir /sid-root main # debootstrap sid /sid-root http://ftp.debian.org/debian/ ... assista-o baixar o sistema inteiro main # echo "proc-sid /sid-root/proc proc none 0 0" >> /etc/fstab main # mount proc-sid /sid-root/proc -t proc main # cp /etc/hosts /sid-root/etc/hosts main # chroot /sid-root /bin/bash chroot # apt-setup # configure /etc/apt/sources.list chroot # vi /etc/apt/sources.list # aponte a fonte para unstable chroot # dselect # você pode usar aptitude, instalar o mc e o vim :-)
Nesse ponto você deve ter um sistema Debian completamente funcional, onde pode mexer sem medo de afetar sua instalação Debian principal.
Esse truque do debootstrap
também pode ser usado para instalar o
Debian em um sistema sem usar o disco de instalação do Debian, mas usando um de
outra distribuição GNU/Linux. Veja http://www.debian.org/releases/stable/i386/ch-preparing#s-linux-upgrade
.
chroot
Digitar chroot /sid-root /bin/bash é fácil, mas isso mantém todos os tipos de variáveis de ambiente atribuídas que você pode não desejar, e tem outros problemas. Uma maneira muito melhor é executar outro processo de login em um terminal virtual separado onde você pode logar no chroot diretamente.
Como em sistemas Debian padrões, do tty1 ao tty6 são
executados consoles Linux e no tty7 é executado o Sistema X
Window, vamos definir o tty8 para um console chroot'ado como um
exemplo. Depois de criar o sistema chroot como descrito em Executar um sabor diferente do Debian com
chroot
, Seção 8.6.34.1, digite a partir do shell root do
sistema principal:
main # echo "8:23:respawn:/usr/sbin/chroot /sid-root "\ "/sbin/getty 38400 tty8" >> /etc/inittab main # init q # recarrega o init
chroot
Você quer executar o X e o GNOME mais novos seguramente em seu chroot? Isso é perfeitamente possível! O exemplo seguinte fará o GDM executar em um terminal virtual vt9.
Primeiro instale um sistema chroot usando o método descrito em Executar um sabor diferente do Debian com
chroot
, Seção 8.6.34.1. A partir do root do sistema
principal, copie os arquivos de configuração chaves para o sistema chroot.
main # cp /etc/X11/XF86Config-4 /sid-root/etc/X11/XF86Config-4 main # chroot /sid-root # ou use console chroot chroot # apt-get install gdm gnome x-window-system chroot # vi /etc/gdm/gdm.conf # faça s/vt7/vt9/ na seção [servers] chroot # /etc/init.d/gdm start
Aqui, o arquivo /etc/gdm/gdm.conf
foi editado para alterar o
primeiro console virtual do vt7 para o vt9.
Agora você pode alternar facilmente entre os ambientes X completos no sistema chroot e em seu sistema principal apenas alternando entre terminais virtuais Linux; por exemplo usando Ctrl-Alt-F7 e Ctrl-Alt-F9. Divirta-se!
[FIXME] Adicionar um comentário e ligar ao script init do ambiente gdm chroot'ado.
chroot
Um ambiente chroot de outra distribuição pode ser criado facilmente. Você
instala um sistema em partições separadas usando o instalador da outra
distribuição. Se a partição raiz dela estiver em
/dev/hda9
.
main # cd / ; mkdir /outra-dist main # mount -t ext3 /dev/hda9 /outra-dist main # chroot /outra-dist /bin/bash
Então proceda como em Executar um sabor diferente do
Debian com chroot
, Seção 8.6.34.1, Configurando o login para chroot
, Seção
8.6.34.2, e Configurando o X para o
chroot
, Seção 8.6.34.3.
chroot
Existe um pacote chroot mais especializado, o pbuilder
, que
constrói um sistema chroot e compila um pacote dentro do chroot. Esse é um
sistema ideal para ser usado para checar se as dependências de compilação de um
pacote estão corretas, e para se certificar que dependências de compilação
desnecessárias ou incorretas não existirão no pacote gerado.
Você pode checar se dois arquivos são o mesmo arquivo com duas ligações diretas (hard links) usando :
$ ls -li arquivo1 arquivo2
mount
em um arquivo de uma imagem de disco rígido
Se arquivo.img
contém uma imagem de um disco rígido e o
disco rígido original possuía uma configuração de disco que tinha
xxxx = (bytes/setor) * (setores/cilindro), então o comando a seguir
irá montá-lo em /mnt
:
# mount -o loop,offset=xxxx arquivo.img /mnt
Note que a maioria dos discos rígidos possui 512 bytes/setor.
O básico para obter arquivos do Windows:
# mount -t smbfs -o username=meunome,uid=my_uid,gid=my_gid \ //servidor/compartilhamento /mnt/smb # monta arquivos Windows para o Linux # smbmount //servidor/compartilhamento /mnt/smb \ -o "username=meunome,uid=my_uid,gid=my_gid" # smbclient -L 192.168.1.2 # lista os compartilhamentos em um computador
Vizinhos Samba podem ser checados a partir do Linux usando:
# smbclient -N -L endereço_IP_de_seu_PC | less # nmblookup -T "*"
Muitos sistemas de arquivo não nativos têm suporte no kernel Linux, então podemos acessá-los simplesmente montando dispositivos que contêm o sistema de arquivos. Para alguns sistemas de arquivos, há também algumas ferramentas especializadas para acessar os sistemas de arquivos sem montar os dispositivos. Isso é feito com programas de espaço de usuário, de forma que não é necessário suporte para o sistema de arquivos no kernel.
mtools
: para sistema de arquivo MSDOS (MS-DOS, Windows)
cpmtools
: para sistema de arquivo CP-M
hfsutils
: para sistema de arquivo HFS (Macintosh nativo)
hfsplus
: para sistema de arquivo HFS+ (Macintosh moderno)
Para criar e verificar sistema de arquivos MS-DOS FAT, o pacote
dosfstools
é útil.
Aqui há alguns exemplos de ações perigosas. Os impactos negativos serão aumentados se você estiver usando a conta privilegiada: root.
Em "rm -rf .*", ".*" expande para incluir "." e "..", e se você tiver privilégios de escrita no diretório pai então você acabará removendo também todos os diretórios próximos ao seu diretório atual.
A perda de alguns arquivos importantes como /etc/passwd
por
estupidez é ruim. O sistema Debian faz cópias de segurança deles regularmente
em /var/backups
. Quando você tiver que restaurar esses arquivos,
você pode ter que ajustar as permissões apropriadas manualmente.
# cp /var/backups/passwd /etc/passwd # chmod 644 /etc/passwd
Veja também Recuperação dos dados de seleção de pacotes, Seção 6.3.4.
Referência Debian
CVS, Seg Abr 3 22:58:08 UTC 2005osamu@debian.org
pormenese@uol.com.br