-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcap2.tex
executable file
·2298 lines (1953 loc) · 109 KB
/
cap2.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\chapter{Iniciando com o GNU/Linux}
\label{cap:iniciando}
Agora que já temos uma boa compreensão do que veio antes de nós,
podemos seguir a diante.
A idéia desse capítulo é que veremos comandos básicos que nos permitam
usar o sistema GNU/Linux de maneira rápida, para podermos passar
adiante. Na realidade, não é o objetivo nosso aqui tornar o usuário um
mestre em GNU/Linux, pois não seria possível em um curso de Introdução
lidar com todos os comandos e utilitários do GNU/Linux, além de haver
farta documentação do GNU/Linux disponível na Internet.
De qualquer modo, nosso objetivo é oferecer a você o suficiente em
comandos para que você consiga seguir adiante sem maiores
problemas.
Então, seja bem vindo ao GNU/Linux. Você vai gostar, pode crer :D
\section{Entrando no sistema}
Ao inicializar o computador, o GNU/Linux apresenta algumas mensagens
sobre informações do sistema, assim como o resultado a alguns comandos
especiais iniciais: coisas como checagens de sistemas de arquivos,
\emph{``levantar''} (inicializar) servidores e \emph{firewall},
realizar configurações de rede \ldots Neste momento, basta saber que o
GNU/Linux realiza uma série de configurações básicas para que o
sistema esteja pronto para rodar.
Uma vez que tais configurações e checagens tenham sido executadas, o
sistema irá o entregar um \emph{login}. Vamos primeiro entender porque
ele faz isso, depois vamos ver como passar pelo \emph{login} e entrar
normalmente no sistema.
\subsection{Filosofia do sistema}
\label{sec:filosofiaLinux}
O GNU/Linux é um Unix-\emph{Like}, ou seja, um sistema operacional
\emph{similar} ao Unix, embora não seja um Unix. Como todo sistema
similar ao Unix, o GNU/Linux é multi-usuário e multi-tarefa, o que
quer dizer que vários usuários podem estar usando o mesmo sistema ao
mesmo tempo, e realizando várias operações ao mesmo tempo. Um
determinado usuário pode estar ouvindo MP3 e editando um texto,
enquanto outro pode estar compilando um programa e baixando arquivos
da Internet, e um terceiro estar editando planilhas, lendo mensagens
recebidas dentro da Internet e navegando via Web para obter
informações necessárias ao seu documento.
Para que um usuário não interfira no ambiente do outro, garantir que
usuários inexperientes não causem danos acidentais ao sistema, e para
garantir que todos os usos do sistema possam ser controlados e
auditados, o Unix adota um sistema de \emph{usuários}. Sistemas Unix
não podem ser acessados sem uma \emph{conta de usuário}. Cada conta de
usuário é protegida por uma \emph{senha}. Algumas contas para usuários
ocasionais podem ser criadas (por exemplo, é comum em instalações Unix
a existência de uma conta \texttt{guest} -- \emph{convidado}) com
senhas publicamente conhecidas, mas o normal é que a senha de um
usuário seja conhecida \emph{apenas} por ele.
A cada usuário o sistema estabelece alguns \emph{privilégios}, ou
seja, o que ele pode ou não realizar dentro do sistema. O ambiente
Unix possui um esquema de privilégios muito simples, mas muito
poderoso quando bem utilizado. Esse sistema permite que usuários
convencionais não tenham acessos a ferramentas de administração, mas
possam tranqüilamente trabalhar em um ambiente seguro e confiável. Boa
parte da segurança do Unix vêm desse sistema, desenvolvido a mais de
40 anos e que continua sendo usado em muitas corporações.
Em geral, existem usuários mais privilegiados, os
\emph{administradores}, que podem manipular arquivos de configuração e
ajustar parâmetros do sistema. Mas mesmos estes possuem operações que
não podem ser realizadas. Para essas situações, existe uma conta de
usuário especial, a conta \texttt{root}.
\subsubsection{O usuário \texttt{root}}
\label{sec:rootUser}
O \texttt{root} é também chamado de conta de
\emph{super-usuário}. Esse usuário é o primeiro e mais importante a
ser criado em uma instalação Unix em geral (e Linux em particular),
pois ele tem acesso pleno a \emph{todos} os programas, recursos e
arquivos do sistema.
O \texttt{root} é a mais poderosa conta, pois ele pode reparticionar
discos e partições, formatar discos, configurar arquivos de acesso
básico ao sistema, realizar procedimentos de instalação de programas
de baixo nível, entre outras funções.
\subsubsection{Cuidados com o \texttt{root}}
O \texttt{root} deve ser usado \emph{o mínimo possível}, pois uma das
características mais poderosas (e portanto perigosas) do \texttt{root}
é que ele \emph{ignora \textbf{totalmente} a proteção oferecida pelos
privilégios do Unix}. Portanto, comandos aleatórios lançados como
\texttt{root} possuem uma grande chance de causar problemas. Na
prática, o ideal seria \emph{nunca, \textbf{jamais}} use o
\texttt{root} como conta cotidiana, mesmo que você seja o
administrador do sistema. Crie uma conta comum para uso cotidiano, e
deixe o \texttt{root} para situações importantes. Veremos mais adiante
como alternar para super-usuário enquanto logado como usuário
normal. No caso, peça para uma pessoa criar uma conta de usuário comum
ou logue-se como \texttt{root} de qualquer modo. Se fizer o último,
tome \emph{muito}, \textsc{muito} cuidado mesmo com os comandos que
for realizar. E lembre-se: \emph{você foi avisado!!}
\subsection{\emph{Login}}
\label{sec:login}
Agora voltemos ao GNU/Linux: atualmente, a maioria dos \emph{logins}
são feitos por meio de ferramentas como o GDM (\emph{GNOME Desktop
Manager}). Mas vamos trabalhar na Linha de Comando, de modo a
mostrar os principais comandos do GNU/Linux. Além disso, pode ser que
o seu ambiente, principalmente se for um servidor ou efetuar
um \emph{login} remoto, você receberá uma mensagem como a abaixo:
\begin{codigo}[h]
\begin{Verbatim}[frame=single]
Mandriva Linux release 2006.0 (Official) for i586
Kernel 2.6.12-12mdk on a i686/tty1
hufflepuff login:
\end{Verbatim}
\caption{Exemplo de mensagem de \emph{Login}}
\end{codigo}
\sloppy{A primeira linha indica qual o ambiente em uso. No caso, é um
GNU/Linux, distribuição Mandriva Linux, versão 2006.0, para
computadores PC (i586).}
\fussy{A segunda é uma informação específica do sistema. No caso, o
sistema possui um \emph{kernel} Linux versão 2.6.12, com versão
interna `12mdk' e está rodando em um sistema i686 (AMD Semprom) e que
esse é o 1$^{\circ}$ Terminal do sistema. }
A terceira linha é o prompt do \emph{login}. No caso, ele apresenta
primeiro o nome da máquina (no caso, \texttt{hufflepuff}) e em seguida
a mensagem \texttt{login:}, indicando que ele está pronto para receber
o seu nome de usuário. Digite-o. Logo em seguida você receberá uma
mensagem pedindo a sua senha:
% inserir aqui o exemplo de pass
\begin{codigo}[h]
\begin{Verbatim}[frame=single,commandchars=+||]
Password: +hfill
\end{Verbatim}
\caption{\emph{Prompt} do \emph{password}}
\end{codigo}
Digite sua senha. Diferentemente do nome de usuário, a sua senha
\emph{não} será ecoada (ou seja, mostrada na tela). Essa é uma das
maneiras do GNU/Linux (e dos Unixes em geral) garantir uma boa
segurança quanto ao acesso ao sistema: alguns especialistas consideram
que o eco de asteriscos (muito comum em sites da Web) não é uma boa
idéia, pois dá a um invasor em potencial, principalmente um que esteja
vendo o usuário se logar, uma idéia do tamanho de sua senha e do
esforço que ele terá para a quebrar.
Se você digitar erroneamente sua senha, você receberá uma mensagem de
erro como a seguinte:
% inserir aqui a mensagem de erro
\begin{codigo}[h]
\begin{Verbatim}[frame=single,commandchars=+\[\]]
Login incorrect +hfill
\end{Verbatim}
\end{codigo}
\textbf{Atenção:} apesar de ser uma boa idéia digitar sua senha
rapidamente, \emph{tome cuidado}: a maioria dos sistemas Unix
(GNU/Linux incluído) possui um limite de quantas tentativas
(normalmente 3) um usuário pode fazer de se logar com senhas erradas
antes da conta ser bloqueada por algum tempo (ou até um administrador
ou o \texttt{root} a reativar). Isso foi feito para impedir (ou ao
menos dificultar) ataques de força bruta\footnote{Um ataque de força
bruta é um ataque ao sistema aonde o invasor, através de programas
ou \emph{scripts}, tenta logar em um sistema selecionando um nome de
usuário aleatório (ou não) e tentando todas as combinações de senhas
possíveis, até que o invasor adentre o sistema e/ou bloqueie a conta
de usuário}.
Se você fez tudo corretamente, você irá receber o
\emph{prompt}\footnote{\emph{Prompt} é uma espécie de indicador que o
sistema está pronto para receber novos comandos} do sistema. Ele
será similar ao seguinte.
% inserir o prompt do bash
\begin{codigo}[h]
\begin{Verbatim}[frame=single, commandchars=+||]
Last login: Wed Apr 12 00:06:43 on tty1
[fecosta@hufflepuff ~]$
\end{Verbatim}
%$
\caption{\emph{Prompt} do \emph{shell}}
\label{code:shellprompt}
\end{codigo}
O \emph{prompt} do \emph{shell} poderá variar bastante, conforme as
configurações do sistema em questão.
Você acaba de entrar o Linux, passando para o \emph{shell}.
\section{O \emph{Shell}}
O \emph{shell}, ou Interpretador de Comandos, é o programa principal
que o usuário irá manipular. Ele recebe os comandos do operador e
executa as funções que o operador estipulou, retornando informações
desejadas ou mensagens de erro sobre comandos mau sucedidos.
Na prática, o \emph{shell} atua como um tradutor dos comandos do
usuário para operações internas do sistema. Em geral, o \emph{shell}
oferece uma linguagem de \emph{scripts}\footnote{programas simples
interpretados, que automatizam funções do sistema} para a automação de
tarefas do sistema. Essa linguagem pode ser simples ou poderosa,
dependendo apenas dos desenvolvedores do \emph{shell}
Existem muitos \emph{shells} diferentes para o GNU/Linux. O principal
é o \texttt{bash}, ou \emph{Bourne Again Shell}, desenvolvido a partir
do \emph{Bourne Shell} (\texttt{sh}) original. Além dele, outros
\emph{shells} de importância são o \texttt{tcsh}, um \emph{shell}
baseado no \emph{C Shell} (\texttt{csh}) original e o \texttt{ksh}, ou
\emph{Korn Shell}, um shell aparentado ao \texttt{sh} original e ao
\texttt{bash}.
\section{Obtendo ajuda de comandos}
Parece uma bobagem, mas antes de seguirmos adiante, veremos um pouco
sobre como obter ajuda dentro do GNU/Linux para seus comandos. Mas
essa opção tem seu motivo: quase todos os comandos e utilitários do
GNU/Linux possuem ajuda através dos sistemas de ajuda do GNU/Linux, o
\texttt{man} e o \texttt{info}, além de boa parte das bibliotecas do
sistema e arquivos de configuração. Saber usar convenientemente essa
ajuda é uma ``mão na roda'' quando se está com dúvidas ou não se sabe
usar um determinado comando ou utilitário. Desse modo, saber usá-las
corretamente é quase tão importante quanto saber usar outros
comandos. Vamos a elas então.
\subsection{\texttt{man}}
A principal ferramenta de ajuda do mundo Unix, incluindo o GNU/Linux,
o \texttt{man} (redução de \emph{manual}) exibe na tela uma página de
informações sobre o programa conhecida no mundo Unix como
\emph{manpage}. Para acessar a \emph{manpage} de um determinado
comando, você utiliza o comando \texttt{man <comando>}. Por exemplo,
se você quiser chamar a \emph{manpage} do\emph{shell} \texttt{bash},
digite:
\begin{codigo}[h]
\begin{Verbatim}[frame=single]
[fecosta@hufflepuff ~]$ man bash
\end{Verbatim}
%$
\caption{Exemplo do comando \texttt{man}}
\end{codigo}
Que ele retornará uma janela com as informações sobre o comando, como
a apresentada no Código \ref{code:manpage}, na Página
\pageref{code:manpage}.
\begin{codigo}[htb]
\scriptsize
\begin{Verbatim}[frame=single]
BASH(1) BASH(1)
NAME
bash - GNU Bourne-Again SHell
SYNOPSIS
bash [options] [file]
COPYRIGHT
Bash is Copyright (C) 1989-2004 by the Free Software Foundation, Inc.
DESCRIPTION
Bash is an sh-compatible command language interpreter that executes
commands read from the standard input or from a file. Bash also incor-
porates useful features from the Korn and C shells (ksh and csh).
+ldots
SEE ALSO
Bash Reference Manual, Brian Fox and Chet Ramey
The Gnu Readline Library, Brian Fox and Chet Ramey
The Gnu History Library, Brian Fox and Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell and Utili-
ties, IEEE
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)
+ldots
Array variables may not (yet) be exported.
GNU Bash-3.0 2004 June 26 BASH(1)
\end{Verbatim}
\caption{Resultado de \texttt{man bash}}
\label{code:manpage}
\end{codigo}
Uma coisa importante a se notar no exemplo do Trecho de Código
\ref{code:manpage} é na seção \emph{See also}, aonde ele mostra
algumas outras \emph{manpages} que o usuário pode consultar. Perceba
que o formato apresentado é \texttt{emacs(1)}. Isso é importante, pois
todos as \emph{manpages} são divididas em grupos, ou \emph{seções},
aonde cada seção é sobre um determinado assunto. Isso ajuda
principalmente em casos aonde um comando ou utilitário tem o mesmo
nome, por exemplo, de uma chamada de sistema (\emph{system
call}\footnote{\emph{system call} é uma rotina interna do
\emph{kernel} que o usuário só pode acessar através de $(a)$ um
utilitário, como um \emph{shell} ou; $(b)$ programação direta}), de
modo que você pode usar esse número que vêm após o comando (chamado de
número de seção) para acessar a informação desejada. No caso, você
utilizará o comando \texttt{man <seção> <comando>}. Por exemplo, se
você quiser acessar a \emph{manpage} do \texttt{ksh(1)} (\emph{Korn
Shell}), digite o comando indicado no Trecho de Código
\ref{code:sectionmanpage}, na página \pageref{code:sectionmanpage}.
\begin{codigo}[htb]
\begin{Verbatim}[frame=single]
[fecosta@hufflepuff ~]$ man 1 ksh
\end{Verbatim}
%$
\caption{Exemplo do comando \texttt{man} com número de seção}
\label{code:sectionmanpage}
\end{codigo}
No caso, as seções padronizadas pelo POSIX\footnote{\emph{Portable
Operating System Interface}, uma Interface padronizada adotada por
todos os sistemas Unix} são como mostradas na Tabela
\ref{table:mansections}, na página \pageref{table:mansections}.
\begin{table}
\begin{center}
\begin{tabular}{|c|l|}
\hline
{\centering \textbf{\textsc{Seção}}} & {\centering \textbf{\textsc{Documentações}}}\\
\hline\hline
0 & Todas as Seções \\
1 & Comandos \\
2 & Chamadas do Sistema \\
3 & Funções de Bibliotecas C \\
4 & Arquivos de Configuração ou Especiais \\
5 & Formatos e Conversões de arquivo \\
6 & Jogos (apenas Linux) \\
7 & Convenções e Pacotes de Macro \\
8 & Pacotes de Gerenciamento \\
9 & Rotinas do Kernel \\
\hline
\end{tabular}
\caption{Seções de \emph{manpages}}
\label{table:mansections}
\end{center}
\end{table}
\subsubsection{Navegando pela \emph{manpage}}
O \texttt{man} utiliza o editor \texttt{vi} como visualizador de
arquivos ao exibir as \emph{manpages}. No caso, vamos ensinar apenas
alguns truques básicos.
Use as setas direcionais do teclado para mover-se pelo
sistema. Pode-se usar também as teclas \keystroke{H}, \keystroke{J},
\keystroke{K} e \keystroke{L} para navegar pelo texto,
respectivamente, para a esquerda, para baixo, para cima e para a
direita. Para sair da \emph{manpage}, aperte \Esc, e em seguida use
\texttt{:q}.
Se quiser procurar alguma informação dentro da \emph{manpage}, aperte
\Esc e em seguida digite / e o texto a ser localizado.
Isso é o básico do básico, mas deve dar informações suficientes para
que você possa consultar as \emph{manpages} sempre que precisar.
\subsection{\texttt{info}}
Algumas aplicações, porém, não possuem \emph{manpages}, ou possuem uma
documentação tão complexa que seria impossível usar apenas uma
\emph{manpage} para realizar toda a documentação do sistema. Para
isso, o projeto GNU criou um novo sistema de documentação, o
Texinfo. Seu navegador é o \texttt{info}.
Para navegar em uma página \texttt{info} de um programa, basta digitar
\texttt{info <comando>}. Em alguns casos, o comando estará incluído em
um pacote de documentação. Nesse caso, utilize o comando \texttt{info
<pacote> <comando>}. Um exemplo disso é o comando \texttt{cat}, para
mostrar e concatenar (ajuntar) arquivos, que faz parte do pacote
\texttt{coreutils}. Portanto, para chamar a ajuda do \texttt{cat},
digite o comando do Trecho de Código \ref{code:infoexample}, na Página
\pageref{code:infoexample}. Você receberá uma janela similar à do
Trecho de Código \ref{code:inforesult}, na Página
\pageref{code:inforesult}.
Você também pode pesquisar por um determinado assunto dentro das
\emph{infopages} usando o caomando \texttt{info --apropos=<assunto>}.
Por exemplo, para pesquisar-se nas \emph{infopages} por \texttt{cat},
digite o comando do Trecho de Código \ref{code:infoaproposexample},
Página \pageref{code:infoaproposexample}.
\begin{codigo}[htp]
\begin{Verbatim}[frame=single]
[fecosta@hufflepuff ~]$ info coreutils cat
\end{Verbatim}
%$
\caption{Exemplo do comando \texttt{info}}
\label{code:infoexample}
\end{codigo}
\begin{codigo}[htp]
\scriptsize
\begin{Verbatim}[frame=single]
File: coreutils.info, Node: cat invocation, Next: tac invocation, Up: Output\
of entire files
3.1 `cat': Concatenate and write files
======================================
`cat' copies each FILE (`-' means standard input), or standard input if
none are given, to standard output. Synopsis:
cat [OPTION] [FILE]...
The program accepts the following options. Also see *Note Common
options::.
`-A'
`--show-all'
Equivalent to `-vET'.
`-B'
`--binary'
On MS-DOS and MS-Windows only, read and write the files in binary
mode. By default, `cat' on MS-DOS/MS-Windows uses binary mode
--zz-Info: (coreutils.info.bz2)cat invocation, 84 lines --Top-------------------
Welcome to Info version 4.8. Type ? for help, m for menu item.
\end{Verbatim}
\caption{Resultado do comando \texttt{info coreutils cat}}
\label{code:inforesult}
\end{codigo}
\begin{codigo}[htp]
\begin{Verbatim}[frame=single]
[fecosta@hufflepuff ~]$ info --apropos=cat
\end{Verbatim}
%$
\caption{Exemplo do comando \texttt{info --apropos}}
\label{code:infoaproposexample}
\end{codigo}
\subsection{Navegando na \emph{infopage}}
O GNU \texttt{info} é baseado em um \emph{subset} de comandos do
editor de texto GNU \texttt{emacs}, portanto seus comandos de
navegação são diferentes dos do \texttt{man}, baseado no
\texttt{vi}. Se desejar, pode forçar a navegação no \texttt{info} a
ser igual a do \texttt{man} com o uso da opção \texttt{--vi-keys}.
O deslocamento dentro de uma página \texttt{info} é feito com as setas
direcionais do teclado, ou com as combinações de tecla
\Ctrl+\keystroke{n},\Ctrl+\keystroke{p}, \Ctrl+\keystroke{b} e
\Ctrl+\keystroke{f}, para ir-se para a baixo, para cima, para a
direita e para a esquerda, respectivamente. Pode-se usar anda \Home e
\End para ir ao início e para o fim de uma linha, ou então
\Ctrl+\keystroke{a} e \Ctrl+\keystroke{e}. Para ir palavra por
palavra, use \Alt+\keystroke{f} e \Alt+\keystroke{b}\footnote{na
verdade, os atalhos são \keystroke{Meta}+\keystroke{f} e
\keystroke{Meta}+\keystroke{b}, mas na maioria dos sistemas GNU/Linux
essa tecla especial, que existe em algumas \emph{workstations} Unix,
foi mapeada para a tecla \Alt.}. Use \Spacebar para rolar o texto da
ajuda uma janela para baixo e \Del para voltar o texto uma
janela. Essas funções podem ser feitas também com as teclas \PgUp e
\PgDown respectivamente. Para sair do \texttt{info}, digite
\Ctrl+\keystroke{x} e depois \Ctrl+\keystroke{c}.
Todas as \emph{infopages} são divididas em \emph{nós}. Principalmente
na ajuda de programas grandes, como o \texttt{emacs} é importante
atentar para esse detalhe, na medida em que você poderá precisar
navegar de nó em nó, utilize as teclas \keystroke{n} ou
\keystroke{p}. Use \keystroke{t} para ir ao nó raiz do nó atual (ou
seja, para a lista de tópicos da seção atual) e keystroke{d} para
voltar para a lista de \emph{infopages} disponível. Use \keystroke{<}
para ir ao primeiro nó do pacote selecionado e \keystroke{>} para ir
ao último nó. Se quiser saltar diretamente para um determinado nó,
digite \keystroke{g} e digite o nome do nó em questão. Para saltar
diretamente a um determinado nó, digite o número do nó.\Tab leva a
navegação entre as referências a nós dentro do nó atual. Pressionando
\Enter, você vai até o nó que está sendo referenciado no momento.
Para pesquisar alguma informação dentro do nó atual, use \keystroke{s}
ou \keystroke{S}, se desejar que a pesquisa seja \emph{case-sensitive}
(diferencie maiúsculas de minúsculas). Para continuar procurando o
mesmo item, utilize \Ctrl+\keystroke{n}, ou \Ctrl+\keystroke{N} para
ir para itens anteriores.
Você também pode usar a linha que fica abaixo da janela que mostra o
nó para inserir o comandos manualmente. Para ir até ela, digite
\Alt+\keystroke{x} (\keystroke{Meta}+\keystroke{x}). Digite o comando
desejado e pressione \Enter. Um exemplo de comando é
\texttt{print-node}, que imprime o conteúdo do nó atual. Caso queira
abortar um comando ou operação que esteja nessa linha (o
\emph{minibuffer}), digite \Ctrl+\keystroke{G}.
Esse é o básico de \texttt{info} que você precisa saber para pesquisar
informações sobre comandos do GNU/Linux. Para mais informações,
recomendamos que consulte o manual do info, digitando \texttt{info
info}, ou então indo até \cite{INFO2006}.
\section{Alguns comandos básicos}
Essa seção tem como objetivo apresentar uma série de comandos básicos
para a manipulação, acesso e visualização de arquivos no sistema. No
caso, utilizaremos como referência o \emph{shell} padrão do GNU/Linux,
o \texttt{bash}. No caso de outros \emph{shells}, o melhor a ser feito
é consultar suas \emph{manpages} ou páginas \texttt{info}.
\begin{quotation}
\sloppy{\textbf{Atenção:} No GNU/Linux, comandos, nomes de arquivos e
opções são \emph{case-sensitive}, ou seja, fazem diferenciação de
maiúsculas e minúsculas. Portanto, \texttt{man} é diferente de
\texttt{Man} e de \texttt{MAN}, por exemplo.}
\end{quotation}
\subsection{Listando arquivos: \texttt{ls}}
\fussy{De início, você sempre precisará saber aonde seus arquivos
estão. Os Unix em geral, incluindo aqui o GNU/Linux, incluem o comando
\texttt{ls}, que lista o conteúdo de um diretório para o usuário,
exibindo na tela os arquivos disponíveis dentro do diretório.}
\begin{quotation}
\textbf{Atenção:} No GNU/Linux, todos os diretórios são separados por
\texttt{/}, e o diretório mais importante é o \texttt{/}
(\emph{raiz}). Portanto, utilize a \texttt{/} para separar um
diretório do outro, e não a \texttt{$\backslash$}, como seria normal
de imaginar-se\footnote{baseando-se na experiência de uso no Windows}.
\end{quotation}
O comando básico é simplesmente \texttt{ls}, que irá lhe retornar uma
lista contendo os arquivos que estão dentro do diretório atual, de
maneira similar à mostrada no Trecho de Código \ref{code:lsexample},
na Página \pageref{code:lsexample}. Você também pode utilizar
\texttt{ls <diretório>} para visualizar os arquivos contidos em outro
diretório. Mas o \texttt{ls} possui uma série de opções bastante
úteis quando precisamos de mais informações.
\begin{codigo}[htp]
\footnotesize
\begin{Verbatim}[frame=single]
[fecosta@hufflepuff ~]$ ls
aif-mount/ #.emacs# InstallShield/ QLOG
comanche3-0b4/ Fotos/ KDE/ street2.sta
Desktop/ GNUstep/ mac-3.99-u4-b4/ tmp/
Documentos/ GUI.cs mac-3.99-u4-b4.tar.gz* Vídeo/
Download/ HelloWorld.cs Música/ vpd.properties
drakx/ HelloWorld.exe* nohup.out x.log
\end{Verbatim}
%$
\caption{Exemplo do comando \texttt{ls}}
\label{code:lsexample}
\end{codigo}
\begin{quotation}
\textbf{Atenção:} Todos os comandos do GNU/Linux, e no Unix em geral,
permitem que opções sejam combinadas. Por exemplo, o comando
\texttt{foo} pode ter as opções \texttt{-x}, \texttt{-y} e
\texttt{-z}. Nesse caso, caso se você quiser usar as opções
\texttt{-x} e \texttt{-y} você pode usar tanto \texttt{foo -x -y}
quanto \texttt{foo -xy}.
\end{quotation}
A primeira opção seria a \texttt{-R}(\emph{recursive}), que lista o
conteúdo do diretório apontado e de \emph{todos} os subdiretórios
abaixo dele. Isso ajuda quando você precisa saber, por exemplo, se uma
página Web já está com todos os arquivos dentro dele.
\sloppy{Outra opção útil é a opção \texttt{-a}(\emph{all files}, todos
os arquivos), que mostra os arquivos \emph{ocultos} (também chamados
de terminologia Unix de \emph{desinteressantes}) do sistema. Um
arquivo em Unix é considerado oculto quando ele começa com um
`\texttt{.}'(ponto). Em geral, usa-se isso para ocultar
arquivos/diretórios de configuração.}
\fussy{A opção \texttt{-1}(\emph{one file per line}, um arquivo por
linha), mostra um arquivo por linha apresentada. Essa opção é útil
quando se usa um \emph{shell script}\footnote{``programa'' que é
interpretado pelo \emph{shell}} para automatizar-se alguma função e
exige-se uma listagem dos arquivos a serem manipulados. O
comportamento normal do \texttt{ls} é exibir o máximo de comandos por
linha, formando colunas de arquivos.}
Uma opção presente em algumas versões do \texttt{ls}\footnote{na
verdade, do \emph{shell} que o implementa} é a opção \texttt{--color},
que gera uma listagem \emph{colorida} dos arquivos, sendo que essa cor
muda conforme o tipo de arquivo (executável, oculto, diretório,
arquivo comum, \ldots).
A opção \texttt{-h}(\emph{human readable}, legível pelo ser humano)
mostra os tamanhos de arquivo (se visível) em um formato mais
compreensível pelas pessoas. Em geral, o \texttt{ls} (e demais
comandos que envolvam tamanhos em disco) representa os tamanhos do
arquivos em número de \emph{inodes}\footnote{i-nodos, ou nós dentro da
estrutura do sistema de arquivos}. Embora um \emph{inode} em geral
ocupe 512 bytes, isso é muito dependente de implementação, sistema de
arquivos adotado e formatação adotada, portanto essa representação nem
sempre é a melhor disponível. O \texttt{-h} obriga o \texttt{ls} a
determinar o tamanho aproximado do arquivo ao listá-lo. No Trecho de
Código \ref{code:lslhexample}, na Página \pageref{code:lslhexample},
mostramos um exemplo aonde o tamanho dos arquivos é apresentado de
maneira mais legível.
Mas talvez a opção mais importante que o \texttt{ls} possui é a
\texttt{-l}(\emph{Long description}, descrição Longa), que apresenta
todas as informações relacionadas ao arquivo. Nesse caso, cada
``coluna'' rempresenta uma informação diferente:
\begin{enumerate}
\item Informações de arquivo, incluindo permissões de arquivos
(veremos mais sobre isso logo a seguir);
\item Arquivos ou diretórios dentro desse diretório. O valor mínimo é
2, graças aos diretórios especiais \texttt{.} e \texttt{..}. Para
arquivos em geral, esse valor é 1.
\item Dono do arquivo (usuário que o criou ou ao qual foi passada a
posse do arquivo --- veremos mais sobre isso adiante, na Seção
\ref{sec:chown}, na página \pageref{sec:chown});
\item Grupo do arquivo (grupo que pode manipular esse arquivo com
maiores permissões --- veremos mais sobre isso adiante, na Seção
\ref{sec:chgrp}, na página \pageref{sec:chgrp});
\item Tamanho (descrito em \emph{inodes}, a não ser que as opções
\texttt{-k} ou \texttt{-h} estejam ativas);
\item Data da última alteração do arquivo;
\item Nome do arquivo;
\end{enumerate}
No Trecho de Código \ref{code:lslhexample}, na Página
\pageref{code:lslhexample}, mostramos um exemplo aonde o tamanho dos
arquivos é apresentado de maneira mais legível.
\begin{codigo}[htp]
\scriptsize
\begin{Verbatim}[frame=single]
[fecosta@hufflepuff CursoGNULinux]$ ls -lh
total 1,6M
-rwxrwxrwx 1 root root 865 Abr 13 11:46 cap10.aux*
-rwxrwxrwx 1 root root 92 Abr 10 16:41 cap10.tex*
-rwxrwxrwx 1 root root 1,8K Abr 13 11:46 cap11.aux*
-rwxrwxrwx 1 root root 449 Abr 10 16:46 cap11.tex*
-rwxrwxrwx 1 root root 448 Abr 10 16:43 cap11.tex~*
-rwxrwxrwx 1 root root 855 Abr 13 11:46 cap12.aux*
-rwxrwxrwx 1 root root 88 Abr 10 16:44 cap12.tex*
-rwxrwxrwx 1 root root 2,4K Abr 13 11:46 cap1.aux*
-rwxrwxrwx 1 root root 0 Abr 11 00:42 cap1.bbl*
-rwxrwxrwx 1 root root 866 Abr 11 00:42 cap1.blg*
-rwxrwxrwx 1 root root 24K Abr 10 15:54 cap1.log*
-rwxrwxrwx 1 root root 31K Abr 11 17:41 cap1.tex*
-rwxrwxrwx 1 root root 31K Abr 11 16:50 cap1.tex~*
-rwxrwxrwx 1 root root 5,8K Abr 13 11:46 cap2.aux*
-rwxrwxrwx 1 root root 262K Abr 12 17:00 cap2.log*
-rwxrwxrwx 1 root root 34K Abr 13 11:45 cap2.tex*
-rwxrwxrwx 1 root root 32K Abr 13 11:18 cap2.tex~*
-rwxrwxrwx 1 root root 2,1K Abr 13 11:46 cap3.aux*
-rwxrwxrwx 1 root root 597 Abr 10 16:02 cap3.tex*
-rwxrwxrwx 1 root root 1,1K Abr 13 11:46 cap4.aux*
-rwxrwxrwx 1 root root 243 Abr 10 16:13 cap4.tex*
-rwxrwxrwx 1 root root 2,0K Abr 13 11:46 cap5.aux*
-rwxrwxrwx 1 root root 639 Abr 10 16:16 cap5.tex*
-rwxrwxrwx 1 root root 1,6K Abr 13 11:46 cap6.aux*
-rwxrwxrwx 1 root root 380 Abr 10 16:18 cap6.tex*
-rwxrwxrwx 1 root root 993 Abr 13 11:46 cap7.aux*
-rwxrwxrwx 1 root root 176 Abr 10 16:38 cap7.tex*
-rwxrwxrwx 1 root root 1,6K Abr 13 11:46 cap8.aux*
-rwxrwxrwx 1 root root 341 Abr 10 16:39 cap8.tex*
-rwxrwxrwx 1 root root 1,9K Abr 13 11:46 cap9.aux*
-rwxrwxrwx 1 root root 492 Abr 10 16:47 cap9.tex*
-rwxrwxrwx 1 root root 492 Abr 10 16:46 cap9.tex~*
-rwxrwxrwx 1 root root 531 Abr 13 11:46 configuracao.aux*
-rwxrwxrwx 1 root root 1,5K Abr 12 14:09 configuracao.tex*
-rwxrwxrwx 1 root root 1,5K Abr 12 00:46 configuracao.tex~*
-rwxrwxrwx 1 root root 788 Abr 13 11:46 curso.aux*
-rwxrwxrwx 1 root root 957 Abr 13 11:37 curso.bbl*
-rwxrwxrwx 1 root root 1,7K Abr 11 16:41 curso.bib*
-rwxrwxrwx 1 root root 961 Abr 11 13:15 curso.bib~*
-rwxrwxrwx 1 root root 1,3K Abr 13 11:37 curso.blg*
-rwxrwxrwx 1 root root 144K Abr 13 11:46 curso.dvi*
-rwxrwxrwx 1 root root 12K Abr 13 11:46 curso.log*
-rwxrwxrwx 1 root root 898 Abr 13 11:46 curso.lop*
-rwxrwxrwx 1 root root 240K Abr 12 17:02 curso.pdf*
-rwxrwxrwx 1 root root 480K Abr 12 17:02 curso.ps*
-rwxrwxrwx 1 root root 1,7K Abr 12 15:18 curso.tex*
-rwxrwxrwx 1 root root 1,7K Abr 12 00:13 curso.tex~*
-rwxrwxrwx 1 root root 11K Abr 13 11:46 curso.toc*
-rwxrwxrwx 1 root root 0 Abr 13 11:47 lslh.txt*
-rwxrwxrwx 1 root root 164K Abr 12 00:58 playsh-0.1.tgz*
-rwxrwxrwx 1 root root 431 Abr 10 23:55 referencias.bib*
-rwxrwxrwx 1 root root 431 Abr 10 23:55 referencias.bib~*
-rwxrwxrwx 1 root root 646 Abr 13 11:42 x.log*
\end{Verbatim}
%$
\caption{Exemplo do comando \texttt{ls -lh}}
\label{code:lslhexample}
\end{codigo}
Antes de seguirmos adiante, vamos falar de um tópico que já falamos
por alto tanto no \emph{Login} quanto no caso do comando \texttt{ls}:
as \emph{permissões de arquivo}.
\subsubsection{Permissões de arquivo}
\label{sec:permissoes}
Como dissemos anteriormente, na Seção \ref{sec:filosofiaLinux}, página
\pageref{sec:filosofiaLinux}, quando discutimos a filosofia do
GNU/Linux, uma das garantias de segurança de todos os sistemas
Unix-\emph{like} é o fato de haver um sistema de permissões de acesso
aos arquivos e programas. Esse sistema é baseado em certas
\emph{permissões de arquivo} que são definidas pelo dono do arquivo,
envolvendo:
\begin{itemize}
\item O dono do arquivo (\emph{User});
\item O grupo ao qual o arquivo foi atribuído (\emph{Group});
\item Os demais usuários do sistema (\emph{Other});
\end{itemize}
A idéia básica é que cada um desses grupos de usuário possui direito a:
\begin{itemize}
\item Ler o arquivo (\emph{read}): aqui inclui-se a cópia do arquivo,
o arquivo aparecer em uma lista fornecida pelo \texttt{ls} ou sua
abertura por um programa qualquer;
\item Escrever no arquivo (\emph{write}): envolve também modificar seu
nome, seu conteúdo, movimentá-lo para outro diretório ou o apagar. No
caso de diretórios também envolve criar novos arquivos dentro do
diretório (embora não necessariamente alterar os que estão dentro
dele);
\item Executar o arquivo (\emph{execute}): Executar esse arquivo como
um programa dentro do sistema (seja um binário um um
\emph{script}). Para diretórios, essa permissão indica que o usuário
pode acessar o diretório.
\end{itemize}
Como posso descobrir quais são as permissões que tenho de acessar um
arquivo? O comando \texttt{ls -l} oferece informação suficiente para
conseguirmos definir nossas permissões dentro do sistema.
A primeira coluna do \texttt{ls -l} é a coluna de ``Informações de
Arquivo''. Ela é formada por uma seqüência de 10 caracteres, podendo
serem letras ou o hífen(\texttt{-}). O primeiro caracter dessa
seqüência indica o tipo de arquivo: os mais importantes aqui são o
\emph{arquivo comum}(\texttt{-}), o \emph{diretório}(\texttt{d}) e a
\emph{ligação simbólica}(\texttt{l}). Existem outros tipos, mas se for
o caso falaremos caso sejam necessários.
Os nove caracteres seguintes são divididos em três grupos de
permissões de arquivo. Cada um desses demonstra as permissões para um
dos três grupos que citamos anteriormente: no caso, na seqüência
Dono/Grupo/Outros. Dentro de cada um desses grupos, os caracteres
podem ser um caracter ou o hífen. No caso, os caracteres são sempre na
seqüência \texttt{rwx} e indicam se o atributo em questão está
ativado: no caso, na seqüência \textbf{Leitura}(\emph{read} -
\texttt{r}), \textbf{Escrita}(\emph{write} - \texttt{w}) e
\textbf{Execução}(\emph{execute} - \texttt{x}). Se um desses
caracteres estiver faltando, substituído por um hífen, o atributo (ou
permissão) correspondente está desativada.
Por exemplo, um arquivo \texttt{trab.doc} com permissões
\texttt{-rw-r--r-} quer dizer:
\begin{itemize}
\item O arquivo é um \emph{arquivo comum} (1$^{\circ}$ caracter
\texttt{-});
\item Seu usuário pode ler o arquivo e gravar nele, mas não pode o
chamar como um program (1$^{\circ}$ grupo de caracteres ---
2$^{\circ}$ caracter ao 4$^{\circ}$ caracter --- \texttt{rw-});
\item O grupo ao qual o arquivo foi designado pode o ler, mas não pode
gravar nele ou o chamar como um programa (2$^{\circ}$ grupo de
caracteres --- 5$^{\circ}$ caracter ao 7$^{\circ}$ caracter ---
\verb|r--|)
\item Outros usuários do sistema podem o ler, mas não gravar ou o
chamar como um programa (3$^{\circ}$ grupo de caracteres ---
8$^{\circ}$ caracter ao 10$^{\circ}$ caracter ---
\verb|r--|;
\end{itemize}
\sloppy{Enquanto um outro arquivo, um \emph{script} de administração
chamado \texttt{backup}, com permissões \texttt{-rwxr-x---} quer
dizer:}
\begin{itemize}
\item \fussy{O arquivo é um \emph{arquivo comum} (1$^{\circ}$ caracter
\texttt{-});}
\item Seu usuário pode ler o arquivo, gravar nele e o hamar como um
programa (1$^{\circ}$ grupo de caracteres --- 2$^{\circ}$ caracter ao
4$^{\circ}$ caracter --- \texttt{rwx});
\item O grupo ao qual o arquivo foi designado pode o ler e o chamar
como programa, mas não pode gravar nele (2$^{\circ}$ grupo de
caracteres --- 5$^{\circ}$ caracter ao 7$^{\circ}$ caracter ---
\texttt{r-x});
\item Outros usuários do sistema não podem o ler, gravar nele ou o
chamar como um programa (3$^{\circ}$ grupo de caracteres ---
8$^{\circ}$ caracter ao 10$^{\circ}$ caracter ---
\verb|---|);
\end{itemize}
Basta combinar as informações embutido nesse código e você poderá
descobrir suas permissões de acesso aos arquivos. No caso, é possível
alterar-se tais permissões caso você seja o dono do arquivo (ou o
\texttt{root}). Veremos isso na Seção \ref{sec:permissaodearquivos},
página \pageref{sec:permissaodearquivos}, aonde trataremos melhor
desse assunto com mais detalhe. Por enquanto, o que foi explicado é o
suficiente para facilitar a compreensão dos comandos a seguir.
\subsection{Manipulação de arquivos}
Agora que sabemos como listar os arquivos do sistema, podemos passar a
operações de manipulação de arquivos. No caso, falaremos
principalmente de cópia, movimentação e exclusão de arquivos. Procure
atentar ao que será falado a diante, pois o GNU/Linux, apesar de seu
sistema de permissão de acesso, não costuma ser muito gentil em caso
de ```falha humana''. Todo cuidado é pouco quando se usa o GNU/Linux,
principalmente como \texttt{root}.
\begin{quotation}
\textbf{Atenção:} Todas as operações a seguir são sujeitas ao sistema
de permissão de acesso, exceto se você estiver fazendo as operações
como \texttt{root}.
\end{quotation}
\subsubsection{\texttt{cp}}
O comando \texttt{cp} realiza uma cópia de um arquivo de um diretório
para outro, ou fazer cópias de um arquivo com outro nome
(principalmente para efeito de \emph{backup}). O uso básico desse
comando é com a sintaxe \texttt{cp <arquivo-origem>
<arquivo-destino>}. Se você for fazer a cópia do arquivo com o mesmo
nome para outro diretório, use apenas o diretório no destino (não é
necessário nesse caso dar um nome para o arquivo de destino). Você
pode usar o \emph{caminho absoluto} (partindo do diretório raiz ---
\texttt{/}) ou o \emph{caminho relativo} (partindo do diretório atual)
do arquivo tanto na origem quanto no destino. Por exemplo:
\begin{itemize}
\item \texttt{cp /etc/hosts hostscopia} cria uma cópia de
\texttt{/etc/hosts} no diretório atual, com o nome de
\texttt{hostscopia};
\item \texttt{cp meuarq /etc/backup} cria uma cópia do arquivo
\texttt{meuarq} no diretório \texttt{/etc/backup}, ou então em
\texttt{/etc}, com o nome de \texttt{backup}, se o diretório
\texttt{/etc/backup} não existir;
\item \sloppy{\texttt{cp trabalhos/work.doc /home/felipe} copia o
arquivo \texttt{work.doc} no diretório \texttt{trabalhos} abaixo do
diretório} atual no diretório \texttt{/home/felipe};
\end{itemize}
\begin{quotation}
\textbf{Atenção:} O \texttt{cp}, assim como todos os comandos de
manipulação de arquivos e diretórios do GNU/Linux (e do Unix em geral)
\emph{\textbf{não alertam se o arquivo de destino existe!}} Muita
cautela ao manipular arquivos: embora o sistema de permissão de
acessos ofereça alguma proteção contra sobrescrita acidental, ele pode
falhar, principalmente em arquivos aonde o usuário tenha permissão de
acesso.
\end{quotation}
Para a maioria das pessoas, o comando \texttt{cp} simples é muito
útil, mas existem várias opções úteis para ele:
Talvez a mais interessante para muitos seja a opção
\texttt{-i}(\emph{Interactive}, interativo), que, \emph{caso o arquivo
de destino \textbf{já exista}}, pede para o usuário confirmar a
operação. Se essa opção, no seu sistema estiver ativa por um apelido
ao \texttt{cp}(mais sobre isso na Seção \ref{sec:alias}, na página
\pageref{sec:alias}), utilize a opção \texttt{-f}(\emph{Force},
forçar) para ignorar esse mecanismo.
A opção \texttt{-R} já foi comentada no \texttt{ls}, mas ela também
funciona no \texttt{cp}. Esse comando é muito útil para cópias de
\emph{backup} de um ou mais diretório.
Uma opção bastante interessante é \texttt{-v}(\emph{verbose} ---
informativo). Essa opção faz com que o comando \texttt{cp} mostre tudo
o que ele está fazendo. Um exemplo do comando \texttt{cp} com a opção
\texttt{-v} ativa pode ser vista no Trecho de Código
\ref{code:cpvexample}, na Página \pageref{code:cpvexample}.
\begin{codigo}[htp]
\tiny
\begin{Verbatim}[frame=single]
[fecosta@hufflepuff ApostilaGNULinux]$ cp -v * ~/Apostilas/
`apostila-linux-apendA.pdf' -> `/home/fecosta/Apostilas/apostila-linux-apendA.pdf'
`apostila-linux-cap10.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap10.pdf'
`apostila-linux-cap11.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap11.pdf'
`apostila-linux-cap1.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap1.pdf'
`apostila-linux-cap2.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap2.pdf'
`apostila-linux-cap3.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap3.pdf'
`apostila-linux-cap4.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap4.pdf'
`apostila-linux-cap6.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap6.pdf'
`apostila-linux-cap7.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap7.pdf'
`apostila-linux-cap8-part1.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap8-part1.pdf'
`apostila-linux-cap8-part2.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap8-part2.pdf'
`apostila-linux-cap8-part3.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap8-part3.pdf'
`apostila-linux-cap8.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap8.pdf'
`apostila-linux-cap9.pdf' -> `/home/fecosta/Apostilas/apostila-linux-cap9.pdf'
`apostilaLinuxJonathan.pdf' -> `/home/fecosta/Apostilas/apostilaLinuxJonathan.pdf'
`Cap47-ControleDeVersoes-CVS.pdf' -> `/home/fecosta/Apostilas/Cap47-ControleDeVersoes-CVS.pdf'
`curso_linux.pdf' -> `/home/fecosta/Apostilas/curso_linux.pdf'
`Dicionario_de_Termos_de_informatica-3ed.pdf' -> `/home/fecosta/Apostilas/Dicionario_de_Termos_de_informatica-3ed.pdf'
`DiscSoflivre_Aula_ComoUsaroTexLatex.pdf' -> `/home/fecosta/Apostilas/DiscSoflivre_Aula_ComoUsaroTexLatex.pdf'
`LENEP-GuiaAluno-Graduacao.pdf' -> `/home/fecosta/Apostilas/LENEP-GuiaAluno-Graduacao.pdf'
`LIVRO-06-RunningLinux_4th_Edition.pdf' -> `/home/fecosta/Apostilas/LIVRO-06-RunningLinux_4th_Edition.pdf'
`tesemaurocamara.pdf' -> `/home/fecosta/Apostilas/tesemaurocamara.pdf'
\end{Verbatim}
%$
\caption{Exemplo do comando \texttt{cp -v}}
\label{code:cpvexample}
\end{codigo}
No exemplo, utilizamos um diretório especial, o \texttt{\~{}}, que
pode ser usado para indicar o diretório pessoal (chamado de diretório
\emph{home}) de um determinado usuário. Caso seja usado apenas
\texttt{\~}, o usuário irá ao seu \emph{home}. Para referenciar-se o
\emph{home} de um outro usuário, use \texttt{\~{}<usuario>}. Por
exemplo, se você precisar acessar o diretório de um usuário chamado
\texttt{hpotter}, use \texttt{cd \~{}hpotter}.
Por fim, existe a opção \texttt{--preserve}(preservar), que permite
que, na cópia, sejam preservados as permissões de acesso (ou
\emph{modo} --- \texttt{mode}), a posse do arquivo
(\texttt{ownership}) ou a data de última alteração
(\texttt{timestamps}). No caso de cópias recursivas também podem ser
preservadas quaisquer ligações simbólicas dentro de diretórios
(\texttt{links}). Para preservar tudo, utilize \texttt{ALL}. Essa
opção não pode ser combinada com as demais por ser uma \emph{long
option} (opção com nome longo).
\subsubsection{Coringas \emph{wildcards} no GNU/Linux}
Muitas vezes, você precisa achar um determinado arquivo entre vários
dentro de um conjunto de arquivos. Para isso, o uso de coringas (ou
\emph{wildcards}) ajuda bastante. Quase todo sistema operacional ou
\emph{shell} é capaz de trabalhar com coringas, e o GNU/Linux não é
exceção.
O conjunto de caracteres coringas do GNU/Linux é derivado do sistema
de expressões regulares (\emph{regular expressions}) do Unix, que é um
sistema poderoso de reconhecimento de padrões. Não iremos falar muito
sobre eles, mas é muito interessante aprender mais sobre eles, pois
várias ferramentas úteis como \texttt{grep} e \texttt{find} dependam
desse sistema para serem de total utilidade. Para mais informações,
consulte a \emph{manpage} do \texttt{regex(3)}, a documentação
\emph{infopage} do utilitário \texttt{grep} ou as especificações do
OpenGroup, que mantem o POSIX\cite{REGEX1997}. Além disso, existe o
bom livro \emph{``Expressões Regulares --- Guia de Referência
Rápida''}, de Aurélio Jargas\cite{GUIAER2003}, que pode ser consultado
\emph{online} ou então comprado (se possível compre e ajude ao
autor. Eu, ele e toda a comunidade do software livre agradecemos\ldots
:-P),
A idéia dos coringas é que você, mesmo que não conheça o nome do
arquivo em questão, é que você conhece \emph{uma parte do mesmo}, e
pode usá-la, em combinação com os coringas, para encontrar o arquivo
desejado.
\begin{codigo}[htp]
\scriptsize
\begin{Verbatim}[frame=single]
[fecosta@hufflepuff CursoGNULinux]$ ls