Gentoo Archives: gentoo-commits

From: "JosA MarAa Alonso (nimiux)" <nimiux@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo commit in xml/htdocs/doc/es/articles: lpi-101-administration-p2.xml
Date: Mon, 02 May 2011 18:42:36
Message-Id: 20110502184222.A664E20057@flycatcher.gentoo.org
1 nimiux 11/05/02 18:42:22
2
3 Added: lpi-101-administration-p2.xml
4 Log:
5 New spanish translation: lpi-101-administration-p2.xml. Thanks to Gabriela Villanueva
6
7 Revision Changes Path
8 1.1 xml/htdocs/doc/es/articles/lpi-101-administration-p2.xml
9
10 file : http://sources.gentoo.org/viewvc.cgi/gentoo/xml/htdocs/doc/es/articles/lpi-101-administration-p2.xml?rev=1.1&view=markup
11 plain: http://sources.gentoo.org/viewvc.cgi/gentoo/xml/htdocs/doc/es/articles/lpi-101-administration-p2.xml?rev=1.1&content-type=text/plain
12
13 Index: lpi-101-administration-p2.xml
14 ===================================================================
15 <?xml version="1.0" encoding="UTF-8"?>
16 <!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/es/articles/lpi-101-administration-p2.xml,v 1.1 2011/05/02 18:42:22 nimiux Exp $-->
17 <!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
18
19 <guide lang="es" disclaimer="articles">
20 <title>Preparación para el examen de certificación 101 del LPI (segundo
21 lanzamiento), Parte 2</title>
22
23 <author title="Author">
24 <mail link="drobbins@g.o">Daniel Robbins</mail>
25 </author>
26 <author title="Author">
27 <mail link="chouser@g.o">Chris Houser</mail>
28 </author>
29 <author title="Author">
30 Aron Griffis
31 </author>
32 <!--<author title="Editor">
33 <mail link="smithj@g.o">Jonathan Smith</mail>
34 </author>-->
35 <author title="Traductora">
36 <mail link="nilda_46@×××××××.com">Gabriela Villanueva</mail>
37 </author>
38
39 <abstract>
40 En este tutorial, aprenderá como utilizar expresiones regulares para
41 buscar patrones de texto en archivos, cómo localizar archivos en su
42 sistema y cómo tener control total de los procesos Linux. También
43 tendrá una introducción rápida a tuberías de la interfaz de comandos,
44 redireccionamiento y órdenes de procesamiento de texto. Al final de
45 este tutorial, tendrá una base sólida en administración básica de
46 Linux y estará listo para comenzar con administración avanzada de
47 sistemas Linux en la siguiente parte de este tutorial.
48 </abstract>
49
50 <!-- La versión original de este artículo fue publicada originalmente
51 por IBM developerWorks y es propiedad de Westtech Information
52 Services. Este documento es una versión actualizada del artículo
53 original y contiene mejoras realizadas por el equipo de documentación
54 de Gentoo Linux -->
55
56 <version>2</version>
57 <date>2010-11-14</date>
58
59 <chapter>
60 <title>Antes de comenzar</title>
61 <section>
62 <title>Acerca de este tutorial</title>
63 <body>
64
65 <p>
66 Bienvenido a “Administración básica”, el segundo de cuatro tutoriales
67 diseñado para prepararlo para el examen 101 del Instituto Profesional
68 de Linux (LPI por sus siglas en inglés). En este tutorial, le
69 mostraremos como utilizar expresiones regulares para buscar archivos
70 utilizando patrones de texto. Después, haremos una introducción al estándar
71 de jerarquía del sistema de archivos (FHS, por sus siglas en inglés),
72 y le mostraremos como encontrar archivos en su sistema. Además le
73 diremos como tomar control total de los procesos de Linux,
74 ejecutándolos en segundo plano, listándolos, separándolos de la
75 terminal y más. También, le daremos una rápida introducción a
76 tuberías de la interfaz de comandos, redireccionamiento, y órdenes de
77 procesamiento de texto. Por último, haremos una introducción a los
78 módulos del núcleo Linux.
79 </p>
80
81 <p>
82 Este tutorial en particular (parte 2) es ideal para quienes tienen un
83 buen conocimiento básico de bash y quieren recibir una sólida
84 introducción a tareas básicas de administración Linux. Si es nuevo en
85 Linux, le recomendamos que complete la parte 1 de esta serie de
86 tutoriales antes de continuar. Para algunos, este material será
87 nuevo, pero los usuarios Linux más experimentados encontrarán en este
88 tutorial una buena manera de complementar sus conocimientos básicos
89 de administración Linux.
90 </p>
91
92 <p>
93 Para aquellos que han tomado el lanzamiento 1 de este tutorial por
94 razones diferentes a la preparación para el examen LPI, probablemente
95 no sea necesario tomar esta versión. Sin embargo, si planea presentarse
96 a los exámenes, debe considerar seriamente leer este tutorial.
97 </p>
98
99 </body>
100 </section>
101 <section>
102 <title>Acerca del autor</title>
103 <body>
104
105 <p>
106 Con residencia en Albuquerque, Nuevo México, Daniel Robbins es el
107 arquitecto en jefe de Gentoo Linux, una metadistribución Linux
108 avanzada basada en puertos (ports). Además escribe artículos,
109 tutoriales y sugerencias para IBM developerWorks zona Linux y servicios
110 de desarrollo Intel. También ha contribuido como autor de muchos libros,
111 incluyendo Samba y SuSE Unleashead. Daniel disfruta pasar tiempo con
112 su esposa Mary y su hija Hadassha. Puede contactar a Daniel en <mail>
113 drobbins@g.o</mail>.
114 </p>
115
116 <p>
117 Chris Houser, conocido por sus amigos como "Chouser," ha sido un
118 partidario de UNIX desde 1994 cuando se unió al equipo de
119 administración de la red de informática en la Universidad Taylor en
120 Indiana, donde obtuvo su licenciatura en Ciencias de la Computación y
121 Matemáticas. Desde entonces ha trabajado en programación de
122 aplicaciones web, diseño de interfaz de usuario, soporte para
123 programas de vídeo profesional y ahora programando el controlador del
124 dispositivo Tru4 UNIX en Compaq. Además ha contribuido en varios
125 proyectos de programas libres (recientemente en Gentoo Linux). Vive
126 con su esposa y dos gatos en New Shapire. Puede contactarlo en
127 chouser@g.o.
128 </p>
129
130 <p>
131 Aron Griffis, graduado de la Universidad Taylor con título en
132 Ciencias de la Computación y premiado con el título "Futuro fundador
133 de una comunidad UNIX utópica". Trabajando para conseguir ese
134 objetivo Aron es empleado de Compaq, escribe controladores de red
135 para Tru64 UNIX y utiliza su tiempo libre tocando melodías en el
136 piano o desarrollando Gentoo Linux. Vive con su esposa Amy (también
137 ingeniera UNIX) en Nashua, New Hampshire.
138 </p>
139
140 </body>
141 </section>
142 </chapter>
143
144 <chapter>
145 <title>Expresiones regulares</title>
146 <section>
147 <title>¿Qué es una expresión regular?</title>
148 <body>
149
150 <p>
151 Una expresión regular (también llamada "regex" o "regexp") es una
152 sintaxis especial usada para describir patrones de texto. En los
153 sistemas Linux, las expresiones regulares son comúnmente usadas para
154 encontrar patrones de texto, así como para realizar operaciones de
155 buscar y reemplazar en cadenas de texto.
156 </p>
157
158 </body>
159 </section>
160 <section>
161 <title>Comparación con Glob</title>
162 <body>
163
164 <p>
165 Cuando veamos expresiones regulares, puede notar que la sintaxis de
166 expresiones regulares es similar a la del archivo de nombre
167 "englobamiento" que vimos en la parte 1. Sin embargo, no permita que
168 esto lo confunda, su parecido es solo superficial. Ambos, expresiones
169 regulares y los patrones de englobamiento, si bien parecen similares
170 son fundamentalmente diferentes.
171 </p>
172
173 </body>
174 </section>
175 <section>
176 <title>La subcadena simple</title>
177 <body>
178
179 <p>
180 Con la advertencia anterior, veamos lo más básico de expresiones
181 regulares, la subcadena simple. Para hacer esto usaremos <c>grep</c>,
182 una orden que busca en el contenido de un archivo una expresión
183 regular determinada. <c>grep</c> imprime cada línea que coincide con
184 la expresión regular e ignora cada línea que no lo hace:
185 </p>
186
187 <pre caption="grep en acción">
188 $ <i>grep bash /etc/passwd</i>
189 operator:x:11:0:operator:/root:/bin/bash
190 root:x:0:0::/root:/bin/bash
191 ftp:x:40:1::/home/ftp:/bin/bash
192 </pre>
193
194 <p>
195 Arriba, el primer parámetro <c>grep</c> es una expresión regular; el
196 segundo es el nombre de un archivo. <c>grep</c> lee cada línea en
197 /etc/passwd y le aplica la expresión regular subcadena simple bash,
198 buscando coincidencias. Si una coincidencia es encontrada, <c>grep</c>
199 imprime cada línea que coincide, de lo contrario, la línea es
200 ignorada.
201 </p>
202
203 </body>
204 </section>
205 <section>
206 <title>Entendiendo la subcadena simple</title>
207 <body>
208
209 <p>
210 En general, si está buscando una subcadena, puede especificar el
211 texto literal sin proporcionar caracteres "especiales". El único
212 momento en el que necesitará hacer algo especial sería si su
213 subcadena contiene +, ., *, [, ], o \, en cuyo caso estos caracteres
214 tendrían que estar entre comillas precedidos por una barra invertida.
215 Estos son algunos ejemplos de la subcadena simple de expresiones
216 regulares:
217 </p>
218
219 <ul>
220 <li>/tmp (busca por la cadena literal /tmp)</li>
221 <li>"\[box\]" (busca por la cadena literal [box])</li>
222 <li>"\*funny\*" (busca por la cadena literal *funny*)</li>
223 <li>"ld\.so" (busca por la cadena literal ld.so)</li>
224 </ul>
225
226 </body>
227 </section>
228 <section>
229 <title>Metacaracteres</title>
230 <body>
231
232 <p>
233 Con expresiones regulares, puede realizar búsquedas mucho más
234 complejas que los ejemplos que hemos visto hasta el momento tomando
235 ventaja de los metacaracteres. Uno de estos caracteres es el .
236 (punto) el cual coincide con cualquier carácter:
237 </p>
238
239 <pre caption="El metacarácter punto">
240 $ <i>grep dev.hda /etc/fstab</i>
241 /dev/hda3 / reiserfs noatime,ro 1 1
242 /dev/hda1 /boot reiserfs noauto,noatime,notail 1 2
243 /dev/hda2 swap swap sw 0 0
244 #/dev/hda4 /mnt/extra reiserfs noatime,rw 1 1
245 </pre>
246
247 <p>
248 En este ejemplo, el texto literal dev.hda no aparece en ninguna de
249 las líneas de /etc/fstab. Sin embargo, grep no buscaba la cadena
250 literal dev.hda, pero si el patrón dev.hda. Recuerde que . coincidirá
251 con cualquier carácter. Como puede ver el metacarácter . es
252 equivalente en su funcionamiento al metacarácter ? de las expansiones
253 "globales".
254 </p>
255
256 </body>
257 </section>
258 <section>
259 <title>Uso de []</title>
260 <body>
261
262 <p>
263 Si quisiéramos hacer coincidir un carácter más específicamente que
264 con ., podemos utilizar [ y ] (corchetes) para especificar un
265 subconjunto de caracteres que pueden coincidir:
266 </p>
267
268 <pre caption="Corchetes en acción">
269 $ <i>grep dev.hda[12] /etc/fstab</i>
270 /dev/hda1 /boot reiserfs noauto,noatime,notail 1 2
271 /dev/hda2 swap swap sw 0 0
272 </pre>
273
274 <p>
275 Como puede ver, esta función sintáctica particular funciona idéntica
276 a [] de expansiones de "englobamiento". De nuevo, esta es una de las
277 cosas complicadas sobre aprender expresiones regulares -- la sintaxis
278 es similar pero no idéntica a la de expansiones de "englobamiento", lo
279 cual hace que las expresiones regulares sean un tanto confusas de
280 aprender.
281 </p>
282
283 </body>
284 </section>
285 <section>
286 <title>Usando [^]</title>
287 <body>
288
289 <p>
290 Puede invertir el significado de los corchetes agregando un ^
291 inmediatamente después de [. En este caso, los corchetes encontrarán
292 una coincidencia con cualquier carácter que <e>no</e> sea mencionado
293 dentro de los mismos. Una vez más, note que usamos [^] con
294 expresiones regulares y [!] con englobamiento:
295 </p>
296
297 <pre caption="Corchetes con negación">
298 $ <i>grep dev.hda[^12] /etc/fstab</i>
299 /dev/hda3 / reiserfs noatime,ro 1 1
300 #/dev/hda4 /mnt/extra reiserfs noatime,rw 1 1
301 </pre>
302
303 </body>
304 </section>
305 <section>
306 <title>Diferentes sintaxis</title>
307 <body>
308
309 <p>
310 Es importante notar que la sintaxis entre corchetes es
311 fundamentalmente diferente de la utilizada en otras partes de la
312 expresión regular. Por ejemplo, si pone un . dentro de corchetes,
313 esto le permite encontrar una coincidencia literal con ., justo como
314 en los ejemplos 1 y 2 mencionados arriba. En cambio, un . literal
315 fuera de los corchetes se interpreta como un metacarácter a menos
316 que sea precedido de una \. Podemos aprovechar este hecho para
317 imprimir una lista de todas las líneas en <path>/etc/fstab</path> que
318 contengan la cadena literal dev.hda tecleando:
319 </p>
320
321 <pre caption="Imprimiendo literales usando corchetes">
322 $ <i>grep dev[.]hda /etc/fstab</i>
323 </pre>
324
325 <p>
326 Alternativamente podemos escribir:
327 </p>
328
329 <pre caption="Imprimiendo literales usando excepciones">
330 $ <i>grep "dev\.hda" /etc/fstab</i>
331 </pre>
332
333 <p>
334 Es probable que ninguna expresión regular coincida con las líneas del
335 archivo <path>/etc/fstab</path>.
336 </p>
337
338 </body>
339 </section>
340 <section>
341 <title>El metacarácter "*"</title>
342 <body>
343
344 <p>
345 Algunos metacaracteres no coinciden con nada por si solos, pero
346 modifican el significado del carácter previo. Un ejemplo de esto es
347 el metacarácter * (asterisco), el cual es usado para coincidir con
348 cero o más ocurrencias del carácter anterior. Tenga en cuenta que
349 esto significa que * tiene un significado diferente en expresiones
350 regulares que en englobamiento:
351 </p>
352
353 <ul>
354 <li>
355 ab*c coincide con abbbbc pero no con abqc (si fuese
356 englobamiento, coincidiría con ambas cadenas -- ¿Puede determinar
357 por qué?)
358 </li>
359 <li>
360 ab*c coincide con abc pero no con abbqbbc (de nuevo, si fuese
361 englobamiento coincidiría con ambas cadenas)
362 </li>
363 <li>
364 ab*c coincide con ac pero no con cba (si fuese englobamiento, ac
365 no coincidiría, ni tampoco cba)
366 </li>
367 <li>
368 b[cq]*e coincide con bqe y be (si fuese englobamiento, coincidiría
369 bqe pero no be)
370 </li>
371 <li>
372 b[cq]*e coincide con bccqqe pero no con bccc (si fuese
373 englobamiento, coincidiría con la primera pero no con la segunda)
374 </li>
375 <li>
376 b[cq]*e coincide con bqqcce pero no con cqe (si fuese
377 englobamiento, coincidiría con la primera pero no con la segunda)
378 </li>
379 <li>
380 b[cq]*e coincide con bbbeee (no sería el caso con englobamiento)
381 </li>
382 <li>
383 .* coincide con cualquier cadena. (si fuese englobamiento,
384 coincidiría con cualquier cadena que comience con .)
385 </li>
386 <li>
387 foo.* coincidiría con cualquier cadena que comience con foo (si
388 fuese englobamiento, coincidiría con cualquier cadena que
389 comience con los cuatro caracteres literales foo.)
390 </li>
391 </ul>
392
393 <p>
394 Ahora un pequeño repaso: la línea ac coincide con la expresión
395 regular ab*c por que el asterisco también le permite a la expresión
396 anterior (b) aparecer <e>cero</e> veces. Nuevamente, es fundamental
397 tener en cuenta que el metacarácter * de expresiones regulares se
398 interpreta de manera fundamentalmente diferente que el carácter * de
399 englobamiento.
400 </p>
401
402 </body>
403 </section>
404 <section>
405 <title>Principio y final de línea</title>
406 <body>
407
408 <p>
409 Los últimos metacaracteres que cubriremos aquí a detalle son ^ y $,
410 utilizados para encontrar coincidencias al principio y al final de la
411 línea respectivamente. Mediante el uso de ^ al principio de su
412 expresión regular, puede hacer que su patrón esté "anclado" al inicio
413 de la línea. En el siguiente ejemplo, usamos la expresión regular ^#
414 para encontrar cualquier línea que comience con el carácter #:
415 </p>
416
417 <pre caption="Líneas">
418 $ <i>grep ^# /etc/fstab</i>
419 # /etc/fstab: static file system information.
420 #
421 </pre>
422
423 </body>
424 </section>
425 <section>
426 <title>Expresiones regulares de línea completa</title>
427 <body>
428
429 <p>
430 ^ y $ se pueden combinar para coincidir con una línea completa. Por
431 ejemplo, la siguiente expresión regular coincidirá con una línea que
432 comience con el carácter # y termine con el carácter ., con
433 cualquier número de caracteres entre ellos:
434 </p>
435
436 <pre caption="Encontrando coincidencias en una línea completa">
437 $ <i>grep '^#.*\.$' /etc/fstab</i>
438 # /etc/fstab: static file system information.
439 </pre>
440
441 <p>
442 En el ejemplo anterior, encerramos la expresión regular entre
443 comillas simples para prevenir que $ sea interpretado por el
444 intérprete de comandos. Sin las comillas simples, el $ desaparecería
445 de la expresión regular antes de darle a grep la oportunidad de verlo.
446 </p>
447
448 </body>
449 </section>
450 </chapter>
451
452 <chapter>
453 <title>FHS y búsqueda de archivos</title>
454 <section>
455 <title>Estándar de jerarquía del sistema de archivos (FHS)</title>
456 <body>
457
458 <p>
459 El Estándar de Jerarquía del sistema de archivos es un documento que
460 especifica la disposición de los directorios en un sistema Linux. El
461 FHS se diseñó para proporcionar un esquema común para simplificar la
462 distribución de software independiente -- así que este material es en
463 general el mismo entre las distintas distribuciones de Linux. El FHS
464 especifica el siguiente árbol de directorios (tomados directamente de
465 la especificación FHS):
466 </p>
467
468 <ul>
469 <li>/ (el directorio root)</li>
470 <li>/boot (archivos estáticos del boot loader)</li>
471 <li>/dev (archivos de dispositivos)</li>
472 <li>/etc (anfitrión-configuración específica del sistema)</li>
473 <li>/lib (librerías compartidas esenciales y módulos del núcleo)</li>
474 <li>
475 /mnt (punto de montaje para el montaje temporal de un sistema
476 de archivos)
477 </li>
478 <li>/opt (paquetes de complementos de aplicaciones)</li>
479 <li>/sbin (binarios esenciales del sistema)</li>
480 <li>/tmp (archivos temporales)</li>
481 <li>/usr (jerarquía secundaria)</li>
482 <li>/var (datos variables)</li>
483 </ul>
484
485 </body>
486 </section>
487 <section>
488 <title>Las dos categorías independientes del FHS</title>
489 <body>
490
491 <p>
492 El FHS basa su especificación de diseño en la idea de que existen dos
493 categorías independientes de archivos: compartidos vs no compartidos,
494 y variables vs estáticos. Los archivos compartidos pueden, como su
495 nombre lo dice, ser compartidos entre anfitriones; los datos
496 no compartidos son específicos de un anfitrión (por ejemplo, los
497 archivos de configuración). Los datos variables pueden ser
498 modificados; los estáticos no son modificables (excepto en la
499 instalación y mantenimiento de un sistema).
500 </p>
501
502 <p>
503 El siguiente cuadro resume las cuatro combinaciones posibles, con
504 ejemplos de directorios que pueden formar parte de esas categorías.
505 Una vez más, esta tabla es tomada directamente de la especificación
506 FHS:
507 </p>
508
509 <pre caption="FHS">
510 +----------+-----------------+----------------+
511 | | compartidos | no compartidos |
512 +----------+-----------------+----------------+
513 |estáticos | /usr | /etc |
514 | | /opt | /boot |
515 +----------+-----------------+----------------+
516 |variables | /var/mail | /var/run |
517 | | /var/spool/news | /var/lock |
518 +----------+-----------------+----------------+
519 </pre>
520
521 </body>
522 </section>
523 <section>
524 <title>Jerarquía secundaria en /usr</title>
525 <body>
526
527 <p>
528 En <path>/usr</path> encontrará una jerarquía secundaria que luce muy
529 parecida al sistema de archivos de root. No es crítico para
530 <path>/user</path> existir cuando la máquina encienda, puede estar
531 compartido en una red (compartido), o montado en un CD-ROM (estático).
532 La mayoría de las configuraciones de Linux no hacen uso del intercambio
533 de <path>/usr</path>, pero es valioso comprender la utilidad de
534 distinguir entre la jerarquía primaria en un directorio root y la
535 jerarquía secundaria en <path>/usr</path>.
536 </p>
537
538 <p>
539 Esto es todo lo que veremos acerca del Estándar de la Jerarquía del
540 Sistema de Archivos. El documento mismo es bastante fácil de leer,
541 así que debería de darle un vistazo. Si lo lee, comprenderá mucho más
542 acerca del sistema de archivos Linux. Puede encontrarlo en
543 <uri>http://www.pathname.com/fhs/</uri>.
544 </p>
545
546 </body>
547 </section>
548 <section>
549 <title>Búsqueda de archivos</title>
550 <body>
551
552 <p>
553 Los sistemas frecuentemente contienen cientos de miles de archivos.
554 Tal vez tiene la experiencia suficiente para no perderles el rastro,
555 pero es probable que ocasionalmente necesite ayuda para encontrar
556 alguno. Existen algunas herramientas en Linux para encontrar
557 archivos. Esta introducción le ayudará a elegir la herramienta
558 adecuada para este trabajo.
559 </p>
560
561 </body>
562 </section>
563 <section>
564 <title>El PATH</title>
565 <body>
566
567 <p>
568 Cuando ejecuta un programa en la línea de comandos, bash en realidad
569 busca dentro de una lista de directorios para encontrar el programa
570 que solicitó. Por ejemplo cuando teclea <c>ls</c>, <c>bash</c>
571 intrínsecamente desconoce que el programa ls vive en <path>/usr/bin
572 </path>. En cambio, bash hace referencia a una variable llamada PATH,
573 la cual es una lista de directorios separada por dos puntos (:).
574 Podemos examinar el valor de PATH:
575 </p>
576
577 <pre caption="Viendo PATH">
578 $ <i>echo $PATH</i>
579 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin
580 </pre>
581
582 <p>
583 Considerando este valor de PATH (el suyo puede ser diferente), bash
584 revisará primero <path>/usr/local/bin</path>, luego
585 <path>/usr/bin</path> en búsqueda del programa <c>ls</c>. Lo más
586 probable es que <c>ls</c> se encuentre en <path>/usr/bin</path>, por
587 lo que bash se detendrá en ese punto.
588 </p>
589
590 </body>
591 </section>
592 <section>
593 <title>Modificando PATH</title>
594 <body>
595
596 <p>
597 Puede aumentar su PATH asignándolo en la línea de comandos:
598 </p>
599
600 <pre caption="Editando PATH">
601 $ <i>PATH=$PATH:~/bin</i>
602 $ <i>echo $PATH</i>
603 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/home/yo/bi
604 n
605 </pre>
606
607 <p>
608 También puede eliminar elementos de PATH, aunque no es tan fácil
609 porque no puede hacer referencia al $PATH existente. Lo mejor es
610 simplemente escribir el nuevo PATH que desea:
611 </p>
612
613 <pre caption="Eliminando entradas de PATH">
614 $ <i>PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:~/bin</i>
615 $ <i>echo $PATH</i>
616 /usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/agriffis/bin
617 </pre>
618
619 <p>
620 Para hacer que sus cambios en PATH estén disponibles para cualquier
621 proceso futuro puede comenzar en esta interfaz de comandos, exportar
622 sus cambios utilizando el comando export:
623 </p>
624
625 <pre caption="Exportando PATH (o cualquier variable, para el mismo caso)">
626 $ <i>export PATH</i>
627 </pre>
628
629 </body>
630 </section>
631 <section>
632 <title>Todo sobre "which"</title>
633 <body>
634
635 <p>
636 Puede revisar si existe un programa dado en PATH utilizando <c>which</c>.
637 Por ejemplo, aquí nos encontramos con que nuestro sistema Linux
638 no tiene sentido (común):
639 </p>
640
641 <pre caption="Buscando sentido">
642 $ which <i>sentido</i>
643 which: no sentido in
644 (/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin)
645 </pre>
646
647 <p>
648 En este ejemplo, encontramos <c>ls</c>:
649 </p>
650
651 <pre caption="Buscando ls">
652 $ <i>which ls</i>
653 /usr/bin/ls
654 </pre>
655
656 </body>
657 </section>
658 <section>
659 <title>"which -a"</title>
660 <body>
661
662 <p>
663 Finalmente, debe saber que la bandera <c>-a</c>, ocasiona que
664 <c>which</c> le muestre todas las instancias de un programa determinado
665 en su PATH:
666 </p>
667
668 <pre caption="Encontrando todas las instancias de un programa en su PATH">
669 $ <i>which -a ls</i>
670 /usr/bin/ls
671 /bin/ls
672 </pre>
673
674 </body>
675 </section>
676 <section>
677 <title>whereis</title>
678 <body>
679
680 <p>
681 Si está interesado en conocer más información de un programa en lugar
682 de su simple ubicación, puede probar el programa <c>whereis</c>:
683 </p>
684
685 <pre caption="Uso de whereis">
686 $ <i>whereis ls</i>
687 ls: /bin/ls /usr/bin/ls /usr/share/man/man1/ls.1.gz
688 </pre>
689
690 <p>
691 Podemos ver que <c>ls</c> aparece en dos lugares binarios comunes,
692 <path>/bin</path> y <path>/usr/bin</path>. Adicionalmente, estamos
693 informados de que existe una página de manual localizada en
694 <path>/usr/share/man</path>. Esta es la página del manual que vería si
695 teclea <c>man ls</c>.
696 </p>
697
698 <p>
699 El programa <c>whereis</c> también tiene la habilidad de buscar
700 fuentes, especificar rutas de búsqueda alternativas y buscar entradas
701 inusuales. Consulte la página del manual para más información.
702 </p>
703
704 </body>
705 </section>
706 <section>
707 <title>find</title>
708 <body>
709
710 <p>
711 La orden <c>find</c> es otra herramienta útil para su caja de
712 herramientas. Con find no está limitado solo a programas; puede buscar
713 cualquier archivo que desee, utilizando una variedad de criterios de
714 búsqueda. Por ejemplo, para buscar un archivo de nombre LEEME, que
715 comienza en <path>/usr/share/doc</path>:
716 </p>
717
718 <pre caption="Using find">
719 $ <i>find /usr/share/doc -name LEEME</i>
720 /usr/share/doc/ion-20010523/LEEME
721 /usr/share/doc/bind-9.1.3-r6/dhcp-dynamic-dns-examples/LEEME
722 /usr/share/doc/sane-1.0.5/LEEME
723 </pre>
724
725 </body>
726 </section>
727 <section>
728 <title>find y comodines</title>
729 <body>
730
731 <p>
732 Puede usar los comodines de "englobamiento" en el argumento -name,
733 siempre que los encierre entre comillas o barras invertidas (así son
734 buscados intactos y no son ampliados por bash). Por ejemplo, puede
735 que quiera buscar archivos LEEME con extensiones:
736 </p>
737
738 <pre caption="Uso de find con comodines">
739 $ <i>find /usr/share/doc -name LEEME\*</i>
740 /usr/share/doc/iproute2-2.4.7/LEEME.gz
741 /usr/share/doc/iproute2-2.4.7/LEEME.iproute2+tc.gz
742 /usr/share/doc/iproute2-2.4.7/LEEME.decnet.gz
743 /usr/share/doc/iproute2-2.4.7/examples/diffserv/LEEME.gz
744 /usr/share/doc/pilot-link-0.9.6-r2/LEEME.gz
745 /usr/share/doc/gnome-pilot-conduits-0.8/LEEME.gz
746 /usr/share/doc/gimp-1.2.2/LEEME.i18n.gz
747 /usr/share/doc/gimp-1.2.2/LEEME.win32.gz
748 /usr/share/doc/gimp-1.2.2/LEEME.gz
749 /usr/share/doc/gimp-1.2.2/LEEME.perl.gz
750 [578 líneas adicionales omitidas]
751 </pre>
752
753 </body>
754 </section>
755 <section>
756 <title>Ignorando distinción entre mayúsculas y minúsculas con find</title>
757 <body>
758
759 <p>
760 Por supuesto, puede querer ignorar la distinción entre mayúsculas y
761 minúsculas en su búsqueda:
762 </p>
763
764 <pre caption="Ignorando mayúsculas y minúsculas con find">
765 $ <i>find /usr/share/doc -name '[Ll][Ee][Ee][Mm][Ee]*'</i>
766 </pre>
767
768 <p>
769 O, más simple:
770 </p>
771
772 <pre caption="Otro método">
773 $ <i>find /usr/share/doc -iname leeme\*</i>
774 </pre>
775
776 <p>
777 Como puede ver, <c>-iname</c> realiza una búsqueda insensible a la
778 distinción entre mayúsculas y minúsculas.
779 </p>
780
781 </body>
782 </section>
783 <section>
784 <title>find y expresiones regulares</title>
785 <body>
786
787 <p>
788 Si está familiarizado con expresiones regulares, puede utilizar la
789 opción<c>-regex</c> para limitar los resultados a los nombres de archivos
790 que coincidan con un patrón. Y similar a la opción <c>-iname</c>,
791 existe un opción correspondiente <c>-iregex</c> que ignora la
792 distinción entre mayúsculas y minúsculas en un patrón. Por ejemplo:
793 </p>
794
795 <pre caption="Expresiones regulares y find">
796 $ <i>find /etc -iregex '.*xt.*'</i>
797 /etc/X11/xkb/types/extra
798 /etc/X11/xkb/semantics/xtest
799 /etc/X11/xkb/compat/xtest
800 /etc/X11/app-defaults/XTerm
801 /etc/X11/app-defaults/XTerm-color
802 </pre>
803
804 <p>
805 Tenga en cuenta que <c>find</c> a diferencia de muchos programas,
806 requiere que la expresión regular especificada coincida con la ruta
807 completa, no solo una parte de ella. Por esa razón, es necesario
808 especificar el .* anterior y posterior; con simplemente xt como
809 expresión regular no sería suficiente.
810 </p>
811
812 </body>
813 </section>
814 <section>
815 <title>find y tipos</title>
816 <body>
817
818 <p>
819 La opción <c>-type</c> le permite encontrar objetos del sistema de
820 archivos de un cierto tipo. Los argumentos posibles para -type son
821 <c>b</c> (dispositivo de bloques), <c>c</c> (dispositivo de caracteres),
822 <c>d</c> (directorio), <c>p</c> (tubería con nombre), <c>f</c>
823 (archivo regular), <c>l</c> (enlace simbólico), y <c>s</c> (socket).
824 Por ejemplo, para buscar archivos simbólicos en <path>/usr/bin</path>
825 que contengan la cadena vim:
826 </p>
827
828 <pre caption="Restringiendo find con tipos">
829 $ <i>find /usr/bin -name '*vim*' -type l</i>
830 /usr/bin/rvim
831 /usr/bin/vimdiff
832 /usr/bin/gvimdiff
833 </pre>
834
835 </body>
836 </section>
837 <section>
838 <title>find y mtimes (tiempo de la última modificación)</title>
839 <body>
840
841 <p>
842 La opción <c>-mtime</c> le permite seleccionar archivos basada en el
843 tiempo de su última modificación. El argumento para mtime está dado
844 en periodos de 24 horas, y es más útil cuando se utiliza un signo más
845 (que significa "después") o un signo menos (que significa "antes".
846 Por ejemplo, consideremos el siguiente escenario:
847 </p>
848
849 <pre caption="Escenario">
850 $ <i>ls -l ?</i>
851 -rw------- 1 root root 0 Jan 7 18:00 a
852 -rw------- 1 root root 0 Jan 6 18:00 b
853 -rw------- 1 root root 0 Jan 5 18:00 c
854 -rw------- 1 root root 0 Jan 4 18:00 d
855 $ <i>date</i>
856 Mon May 7 18:14:52 EST 2003
857 </pre>
858
859 <p>
860 Puede buscar archivos que hayan sido creados en las últimas 24 horas:
861 </p>
862
863 <pre caption="Archivos creados en las últimas 24 horas">
864 $ <i>find . -name \? -mtime -1</i>
865 ./a
866 </pre>
867
868 <p>
869 O puede buscar archivos que hayan sido creados antes del actual
870 periodo de 24 horas:
871 </p>
872
873 <pre caption="Archivos creados antes de las últimas 24 horas">
874 $ <i>find . -name \? -mtime +0</i>
875 ./b
876 ./c
877 ./d
878 </pre>
879
880 </body>
881 </section>
882 <section>
883 <title>La opción -daystart</title>
884 <body>
885
886 <p>
887 Si adicionalmente especifica la opción <c>-daystart</c>, entonces los
888 periodos de tiempo inician al comienzo del día actual en lugar de 24
889 horas atrás. Por ejemplo, aquí se muestra un conjunto de archivos
890 creados ayer y anteayer.
891 </p>
892
893 <pre caption="Usando -daystart">
894 $ <i>find . -name \? -daystart -mtime +0 -mtime -3</i>
895 ./b
896 ./c
897 $ ls -l b c
898 -rw------- 1 root root 0 May 6 18:00 b
899 -rw------- 1 root root 0 May 5 18:00 c
900 </pre>
901
902 </body>
903 </section>
904 <section>
905 <title>La opción -size</title>
906 <body>
907
908 <p>
909 La opción <c>-size</c> le permite buscar archivos basados en su
910 tamaño. De forma predeterminada el argumento de <c>-size</c> es de
911 bloques de 512 bytes, pero agregando un sufijo puede ser más sencillo.
912 Los sufijos disponibles son <c>b</c> (bloques de 512 bytes), <c>c</c>
913 (bytes), <c>k</c> (kilobytes), y <c>w</c> (palabras de 2 bytes).
914 Además, puede anteponer un signo más ("mayor que") o un signo menos
915 ("menor que").
916 </p>
917
918 <p>
919 Por ejemplo para buscar archivos regulares en <path>/usr/bin</path>
920 que son más pequeños que 50 bytes:
921 </p>
922
923 <pre caption="-size en acción">
924 $ <i>find /usr/bin -type f -size -50c</i>
925 /usr/bin/krdb
926 /usr/bin/run-nautilus
927 /usr/bin/sgmlwhich
928 /usr/bin/muttbug
929 </pre>
930
931 </body>
932 </section>
933 <section>
934 <title>Procesamiento de los archivos encontrados</title>
935 <body>
936
937 <p>
938 ¡Tal vez se esté preguntando qué puede hacer con todos los archivos
939 que ha encontrado! Bueno, <c>find</c> tiene la habilidad de actuar
940 sobre los archivos que encuentra usando la opción <c>-exec</c>. Esta
941 opción acepta una línea de comandos para ejecutarse como su
942 argumento, terminado con ;, y reemplaza cualquier ocurrencia de {}
943 con el nombre del archivo. Esto se entiende mejor con un ejemplo:
944 </p>
945
946 <pre caption="Uso de -exec">
947 $ <i>find /usr/bin -type f -size -50c -exec ls -l '{}' ';'</i>
948 -rwxr-xr-x 1 root root 27 Oct 28 07:13 /usr/bin/krdb
949 -rwxr-xr-x 1 root root 35 Nov 28 18:26 /usr/bin/run-nautilus
950 -rwxr-xr-x 1 root root 25 Oct 21 17:51 /usr/bin/sgmlwhich
951 -rwxr-xr-x 1 root root 26 Sep 26 08:00 /usr/bin/muttbug
952 </pre>
953
954 <p>
955 Como puede ver, <c>find</c> es una orden muy poderosa. Ha crecido a
956 través de los años de UNIX y el desarrollo de Linux. Hay muchas más
957 opciones útiles para realizar búsquedas. Puede aprender más acerca de
958 ellas en la página del manual find.
959 </p>
960
961 </body>
962 </section>
963 <section>
964 <title>locate</title>
965 <body>
966
967 <p>
968 Hemos cubierto <c>which</c>, <c>whereis</c>, y <c>find</c>. Tal vez
969 haya notado que <c>find</c> puede tomar un tiempo en ejecutarse, ya
970 que necesita leer cada directorio que está buscando. Resulta entonces
971 que la orden <c>locate</c> puede acelerar las cosas apoyándose en una
972 base de datos externa generada por <c>updatedb</c> (la cual trataremos
973 en el siguiente panel).
974 </p>
975
976 <p>
977 La orden <c>locate</c> puede encontrar una coincidencia con cualquier
978 parte del nombre de la ruta, no solo con el nombre del archivo. Por
979 ejemplo:
980 </p>
981
982 <pre caption="locate en acción">
983 $ <i>locate bin/ls</i>
984 /var/ftp/bin/ls
985 /bin/ls
986 /sbin/lsmod
987 /sbin/lspci
988 /usr/bin/lsattr
989 /usr/bin/lspgpot
990 /usr/sbin/lsof
991 </pre>
992
993 </body>
994 </section>
995 <section>
996 <title>Uso de updatedb</title>
997 <body>
998
999 <p>
1000 La mayoría de los sistemas Linux tiene un "trabajo programado" para
1001 actualizar la base de datos periódicamente. Si su <c>locate</c>
1002 devuelve un error como el siguiente, entonces debe ejecutar como
1003 usuario root <c>updatedb</c> para generar la base de datos de búsqueda:
1004 </p>
1005
1006 <pre caption="Actualizando su base de datos locate">
1007 $ <i>locate bin/ls</i>
1008 locate: /var/spool/locate/locatedb: No such file or directory
1009 $ <i>su -</i>
1010 Password:
1011 # <i>updatedb</i>
1012 </pre>
1013
1014 <p>
1015 La orden <c>updatedb</c> puede tomar mucho tiempo en ejecutarse. Si
1016 tiene un disco duro ruidoso, escuchará una gran cantidad de ruidos
1017 mientras que el sistema de archivos entero es indexado. :)
1018 </p>
1019
1020
1021 </body>
1022 </section>
1023 <section>
1024 <title>mlocate</title>
1025 <body>
1026
1027 <p>
1028 En muchas distribuciones Linux, la orden <c>locate</c> ha sido
1029 reemplazada por <c>mlocate</c>. Normalmente existe un enlace
1030 simbólico a <c>locate</c>, de modo que no es necesario recordar cual
1031 tiene. <c>mlocate</c> viene de "localización segura". Almacena
1032 información de permisos en la base de datos de manera que los
1033 usuarios normales no pueden inmiscuirse en directorios que, de algún
1034 otro modo, serían incapaces de leer. El uso de la información para
1035 <c>mlocate</c> es esencialmente la misma que para <c>locate</c>,
1036 aunque la salida puede ser diferente dependiendo del usuario que
1037 ejecuta los comandos.
1038 </p>
1039
1040 </body>
1041 </section>
1042 </chapter>
1043 <chapter>
1044 <title>Control de procesos</title>
1045 <section>
1046 <title>Iniciando xeyes</title>
1047 <body>
1048
1049 <p>
1050 Para aprender acerca de control de procesos, primero tenemos que
1051 iniciar un proceso. Asegúrese que está utilizando X y ejecute la
1052 siguiente orden:
1053 </p>
1054
1055 <pre caption="Iniciando un proceso">
1056 $ <i>xeyes -center red</i>
1057 </pre>
1058
1059 <p>
1060 Habrá notado que una ventana xeyes apareció, y que los globos
1061 oculares rojos siguen su ratón por la pantalla. Además habrá notado
1062 que no tiene un nuevo prompt en su terminal.
1063 </p>
1064
1065 </body>
1066 </section>
1067 <section>
1068 <title>Deteniendo un proceso</title>
1069 <body>
1070
1071 <p>
1072 Para tener de nuevo el prompt, puede teclear Control-C (a menudo
1073 escrito como Crtl-C o ^C):
1074 </p>
1075
1076 <p>
1077 De nuevo tiene un prompt bash, pero la ventana xeyes desapareció. De
1078 hecho el proceso entero fue terminado. En lugar de terminarlo con
1079 Control-C, podemos solamente detenerlo con Control-Z:
1080 </p>
1081
1082 <pre caption="Deteniendo un proceso">
1083 $ <i>xeyes -center red</i>
1084 <i>Control-Z</i>
1085 [1]+ Stopped xeyes -center red
1086 $
1087 </pre>
1088
1089 <p>
1090 En este momento tiene un nuevo prompt bash, y la ventana xeyes se
1091 mantiene arriba. Sin embargo, si juega un poco con ella, notará que
1092 los globos oculares están estáticos. Si la ventana xeyes es cubierta
1093 por otra ventana y después descubierta de nuevo, notará que ni
1094 siquiera se han redibujado lo ojos. El proceso no está haciendo nada.
1095 De hecho, está "Detenido".
1096 </p>
1097
1098 </body>
1099 </section>
1100 <section>
1101 <title>fg y bg</title>
1102 <body>
1103
1104 <p>
1105 Para tener el proceso "no-detenido" y ejecutándose nuevamente,
1106 podemos traerlo al primer plano con el bash incorporado <c>fg</c>:
1107 </p>
1108
1109 <pre caption="Usando fg">
1110 $ <i>fg</i>
1111 <comment>(pruébelo, luego detenga el proceso de nuevo)</comment>
1112 <i>Control-Z</i>
1113 [1]+ Stopped xeyes -center red
1114 $
1115 </pre>
1116
1117 <p>
1118 Ahora continúelo en el segundo plano con el bash incorporado <c>bg</c>:
1119 </p>
1120
1121 <pre caption="Usando bg">
1122 $ <i>bg</i>
1123 [1]+ xeyes -center red &amp;
1124 $
1125 </pre>
1126
1127 <p>
1128 ¡Muy bien! El proceso xeyes está ahora ejecutándose en el segundo
1129 plano, y tenemos de nuevo, un prompt bash trabajando.
1130 </p>
1131
1132 </body>
1133 </section>
1134 <section>
1135 <title>Uso de "&amp;"</title>
1136 <body>
1137
1138 <p>
1139 Si deseamos iniciar xeyes en segundo plano dese el inicio (en lugar
1140 de usar Control-Z y bg), podemos agregar un "&amp;" (signo &amp;) al
1141 final de xeyes en la línea de comando:
1142 </p>
1143
1144 <pre caption="Usando &amp; para ejecutar procesos en segundo plano ">
1145 $ <i>xeyes -center blue &amp;</i>
1146 [2] 16224
1147 </pre>
1148
1149 </body>
1150 </section>
1151 <section>
1152 <title>Múltiples procesos en segundo plano</title>
1153 <body>
1154
1155 <p>
1156 Ahora tenemos xeyes rojos y azules ambos ejecutándose en segundo
1157 plano. Podemos listar estos trabajos con el bash incorporado
1158 <c>jobs</c>:
1159 </p>
1160
1161 <pre caption="Uso de jobs">
1162 $ <i>jobs -l</i>
1163 [1]- 16217 Running xeyes -center red &amp;
1164 [2]+ 16224 Running xeyes -center blue &amp;
1165 </pre>
1166
1167 <p>
1168 Los números en la columna izquierda son los números asignados por
1169 bash cuando fueron iniciados. El trabajo 2 tiene un + (más) para
1170 indicar que este es el "trabajo actual", lo cual significa que
1171 escribiendo <c>fg</c> lo traeremos al primer plano. Puede también
1172 traer a primer plano un trabajo especificando su número; por ejemplo
1173 <c>fg</c> hará a xeyes rojos la tarea de primer plano. La siguiente
1174 columna es el identificador de proceso o pid, incluido en la lista
1175 cortesía de la opción -l de jobs. Finalmente, ambos trabajos estan
1176 actualmente "ejecutándose", y sus líneas de comando son mencionadas a
1177 la derecha.
1178 </p>
1179
1180 </body>
1181 </section>
1182 <section>
1183 <title>Introducción a señales</title>
1184 <body>
1185
1186 <p>
1187 Para terminar, detener o continuar procesos, Linux usa una forma
1188 especial de comunicación llamada "señales". Enviando cierto tipo de
1189 señal a un proceso, puede terminarlo, detenerlo, o hacer otras cosas.
1190 Esto es lo que en realidad hace cuando escribe Control-C, Control-Z o
1191 utiliza los incorporados <c>bg</c> o <c>fg</c> -- está usando bash
1192 para enviar una señal en particular a el proceso. Estas señales
1193 pueden ser enviadas también usando la orden <c>kill</c> y
1194 especificando el pid (identificador de proceso) en la línea de comandos:
1195 </p>
1196
1197 <pre caption="Uso de kill">
1198 $ <i>kill -s SIGSTOP 16224</i>
1199 $ <i>jobs -l</i>
1200 [1]- 16217 Running xeyes -center red &amp;
1201 [2]+ 16224 Stopped (signal) xeyes -center blue
1202 </pre>
1203
1204 <p>
1205 Como puede ver, kill no necesariamente "mata" un proceso, aunque
1206 puede. Usando la opción "-s", <c>kill</c> puede enviar cualquier
1207 señal a un proceso. Linux termina, detiene o continúa procesos cuando
1208 son enviadas las señales SIGINT, SIGSTOP, o SIGCONT respectivamente.
1209 También existen otras señales que puede enviar a un proceso; algunas
1210 de estas señales pueden ser interpretadas de un modo dependiente de
1211 la aplicación. Puede aprender que señales reconoce un proceso en
1212 particular mirando la página del manual y buscando la sección SIGNALS.
1213 </p>
1214
1215 </body>
1216 </section>
1217 <section>
1218 <title>SIGTERM y SIGINT</title>
1219 <body>
1220
1221 <p>
1222 Si desea terminar un proceso, tiene muchas opciones. De manera
1223 predeterminada, kill envía SIGTERM, que no es idéntico al famoso
1224 SIGINT de Control-C, pero usualmente tiene los mismos resultados:
1225 </p>
1226
1227 <pre caption="Usando kill para terminar un proceso">
1228 $ <i>kill 16217</i>
1229 $ <i>jobs -l</i>
1230 [1]- 16217 Terminated xeyes -center red
1231 [2]+ 16224 Stopped (signal) xeyes -center blue
1232 </pre>
1233
1234 </body>
1235 </section>
1236 <section>
1237 <title>El gran kill</title>
1238 <body>
1239
1240 <p>
1241 Los procesos pueden ignorar tanto SIGTERM como SIGINT, ya sea por
1242 elección o porque están detenidos o de alguna manera "atascados". En
1243 estos casos puede ser necesario utilizar artillería pesada, la señal
1244 SIGKILL. Un proceso no puede ignorar SIGKILL:
1245 </p>
1246
1247 <pre caption="Usando kill para destruir un proceso">
1248 $ <i>kill 16224</i>
1249 $ <i>jobs -l</i>
1250 [2]+ 16224 Stopped (signal) xeyes -center blue
1251 $ <i>kill -s SIGKILL</i>
1252 $ <i>jobs -l</i>
1253 [2]+ 16224 Interrupt xeyes -center blue
1254 </pre>
1255
1256 </body>
1257 </section>
1258 <section>
1259 <title>nohup</title>
1260 <body>
1261
1262 <p>
1263 La terminal donde inicia un trabajo es llamada la terminal
1264 controladora del trabajo. Algunas interfaces de comandos (no bash por
1265 omisión), enviarán una señal SIGHUP para enviar a segundo plano
1266 trabajos cuando cierre sesión, ocasionando que terminen. Para
1267 proteger procesos de este comportamiento, use nohup cuando inicie un
1268 proceso:
1269 </p>
1270
1271 <pre caption="nohup en acción">
1272 $ <i>nohup make &amp;</i>
1273 [1] 15632
1274 $ <i>exit</i>
1275 </pre>
1276
1277 </body>
1278 </section>
1279 <section>
1280 <title>Uso de ps para listar procesos</title>
1281 <body>
1282
1283 <p>
1284 La orden <c>jobs</c> que usamos anteriormente solo lista los procesos
1285 que fueron iniciados desde su sesión de bash. Para ver todos los
1286 procesos de su sistema, use <c>ps</c> con las opciones <c>a</c> y <c>x</c>
1287 juntas:
1288 </p>
1289
1290 <pre caption="ps con ax">
1291 $ <i>ps ax</i>
1292 PID TTY STAT TIME COMMAND
1293 1 ? S 0:04 init [3]
1294 2 ? SW 0:11 [keventd]
1295 3 ? SWN 0:13 [ksoftirqd_CPU0]
1296 4 ? SW 2:33 [kswapd]
1297 5 ? SW 0:00 [bdflush]
1298 </pre>
1299
1300 <p>
1301 Solo fueron listados los primeros porque usualmente es una lista muy
1302 larga. Esto le da una idea rápida de que está haciendo la máquina,
1303 pero es mucha información para filtrar. Si deja fuera a <c>ax</c>,
1304 solo verá los procesos que le pertenecen, y que tienen su control en
1305 una terminal. La orden <c>ps x</c> le mostrará todos los procesos, incluso
1306 aquellos que no son controlados por una terminal. Si usa <c>ps a</c>,
1307 obtendrá una lista de todos los procesos que están unidos a una terminal.
1308 </p>
1309
1310 </body>
1311 </section>
1312 <section>
1313 <title>Mirando el bosque y los árboles</title>
1314 <body>
1315
1316 <p>
1317 Puede además listar información diferente acerca de cada proceso. La
1318 opción <c>--forest</c> hace más fácil ver la jerarquía del proceso,
1319 la cual le da una indicación de como se interrelacionan los diversos
1320 procesos en su sistema. Cuando un proceso inicia un nuevo proceso, el
1321 nuevo proceso es llamado proceso "hijo". En un listado de <c>--forest
1322 </c>, los padres aparecen en la izquierda y los hijos aparecen como
1323 ramas del lado derecho:
1324 </p>
1325
1326 <pre caption="Usando forest">
1327 $ <i>ps x --forest</i>
1328 PID TTY STAT TIME COMMAND
1329 927 pts/1 S 0:00 bash
1330 6690 pts/1 S 0:00 \_ bash
1331 26909 pts/1 R 0:00 \_ ps x --forest
1332 19930 pts/4 S 0:01 bash
1333 25740 pts/4 S 0:04 \_ vi processes.txt
1334 </pre>
1335
1336 </body>
1337 </section>
1338 <section>
1339 <title>Las opciones "u" y "l" de ps</title>
1340 <body>
1341
1342 <p>
1343 Las opciones <c>u</c> y <c>l</c> pueden ser agregadas a la
1344 combinación de <c>a</c> y <c>x</c> con el objetivo de incluir más
1345 información acerca de cada proceso:
1346 </p>
1347
1348 <pre caption="Opción au">
1349 $ <i>ps au</i>
1350 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
1351 agriffis 403 0.0 0.0 2484 72 tty1 S 2001 0:00 -bash
1352 chouser 404 0.0 0.0 2508 92 tty2 S 2001 0:00 -bash
1353 root 408 0.0 0.0 1308 248 tty6 S 2001 0:00 /sbin/agetty 3
1354 agriffis 434 0.0 0.0 1008 4 tty1 S 2001 0:00 /bin/sh/usr/X
1355 chouser 927 0.0 0.0 2540 96 pts/1 S 2001 0:00 bash
1356 </pre>
1357
1358 <pre caption="Opción al">
1359 $ <i>ps al</i>
1360 F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
1361 100 1001 403 1 9 0 2484 72 wait4 S tty1 0:00 -bash
1362 100 1000 404 1 9 0 2508 92 wait4 S tty2 0:00 -bash
1363 000 0 408 1 9 0 1308 248 read_c S tty6 0:00 /sbin/ag
1364 000 1001 434 403 9 0 1008 4 wait4 S tty1 0:00 /bin/sh
1365 000 1000 927 652 9 0 2540 96 wait4 S pts/1 0:00 bash
1366 </pre>
1367
1368 </body>
1369 </section>
1370 <section>
1371 <title>Usando top</title>
1372 <body>
1373
1374 <p>
1375 Si se encuentra ejecutando ps varias veces en fila, intentando ver
1376 cambios, lo que probablemente quiera es <c>top</c>. <c>top</c>
1377 despliega continuamente una lista actualizada de procesos, junto con
1378 un resumen de información útil:
1379 </p>
1380
1381 <pre caption="top">
1382 $ <i>top</i>
1383 10:02pm up 19 days, 6:24, 8 users, load average: 0.04, 0.05, 0.00
1384 75 processes: 74 sleeping, 1 running, 0 zombie, 0 stopped
1385 CPU states: 1.3% user, 2.5% system, 0.0% nice, 96.0% idle
1386 Mem: 256020K av, 226580K used, 29440K free, 0K shrd, 3804K buff
1387 Swap: 136544K av, 80256K used, 56288K free 101760K
1388 cached
1389
1390 PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
1391 628 root 16 0 213M 31M 2304 S 0 1.9 12.5 91:43 X
1392 26934 chouser 17 0 1272 1272 1076 R 0 1.1 0.4 0:00 top
1393 652 chouser 11 0 12016 8840 1604 S 0 0.5 3.4 3:52 gnome-termin
1394 641 chouser 9 0 2936 2808 1416 S 0 0.1 1.0 2:13 sawfish
1395 </pre>
1396
1397 </body>
1398 </section>
1399 <section>
1400 <title>nice</title>
1401 <body>
1402
1403 <p>
1404 Cada proceso tiene una definición de prioridades que Linux utiliza
1405 para determinar cómo son compartidas las porciones de tiempo del CPU.
1406 Puede fijar la prioridad de un proceso iniciándolo con la orden <c>nice</c>:
1407 </p>
1408
1409 <pre caption="Un proceso con nice">
1410 $ <i>nice -n 10 oggenc /tmp/song.wav</i>
1411 </pre>
1412
1413 <p>
1414 Dado que la definición de prioridad es llamada <c>nice</c>, debe ser
1415 sencillo recordar que un valor mayor será mejor que otros procesos,
1416 lo que les permite tener prioridad para acceder al CPU. De forma
1417 predeterminada, los procesos inician con un valor de 0, por lo que el
1418 darles un valor de 10 significa que oggenc le dará facilidad a otros
1419 procesos en el CPU. En general, esto significa que oggenc le
1420 permitirá a otros procesos funcionar a su velocidad normal,
1421 independientemente de cómo sea el hambre de CPU de oggenc. Puede ver
1422 los niveles mejorados en la columna NI en el ps y top listados arriba.
1423 </p>
1424
1425 </body>
1426 </section>
1427 <section>
1428 <title>renice</title>
1429 <body>
1430
1431 <p>
1432 La orden <c>nice</c> solo puede cambiar la prioridad de un proceso
1433 cuando este se inicia. Si desea cambiar la definición de prioridad de
1434 un proceso que está en ejecución, use <c>renice</c>:
1435 </p>
1436
1437 <pre caption="Usando renice">
1438 $ <i>ps l 641</i>
1439 F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
1440 000 1000 641 1 9 0 5876 2808 do_sel S ? 2:14 sawfish
1441 $ <i>renice 10 641</i>
1442 641: old priority 0, new priority 10
1443 $ <i>ps l 641</i>
1444 F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
1445 000 1000 641 1 9 10 5876 2808 do_sel S ? 2:14 sawfish
1446 </pre>
1447
1448 </body>
1449 </section>
1450 </chapter>
1451
1452 <chapter>
1453 <title>Procesamiento de texto</title>
1454 <section>
1455 <title>Redirección revisada</title>
1456 <body>
1457
1458 <p>
1459 Anteriormente en esta serie de tutoriales, vimos un ejemplo de cómo
1460 usar el operador <c>></c> para redireccionar la salida de una orden a
1461 un archivo, como se muestra a continuación:
1462 </p>
1463
1464 <pre caption="Uso del operador >">
1465 $ <i>echo "primerarchivo" > copiame</i>
1466 </pre>
1467
1468 <p>
1469 Además de redirigir una salida a un archivo, podemos tomar ventaja de
1470 una poderosa característica de la interfaz de comandos llamada
1471 tuberías. Con el uso de tuberías podemos pasar la salida de una orden
1472 a la entrada de otra orden. Considere el siguiente ejemplo:
1473 </p>
1474
1475 <pre caption="Introducción a tuberías">
1476 $ <i>echo "hola" | wc</i>
1477 1 2 9
1478 </pre>
1479
1480 <p>
1481 El carácter <c>|</c> es usado para conectar la salida de la orden de
1482 la izquierda a la entrada de la orden de la derecha. En el ejemplo
1483 de arriba, la orden <c>echo</c> imprime la cadena "hola" seguido de
1484 un salto de línea. Esta salida normalmente aparecería en la terminal,
1485 pero el tubo lo redirecciona a la orden <c>wc</c>, la cual despliega
1486 el número de líneas, palabras y caracteres de su entrada.
1487 </p>
1488
1489 </body>
1490 </section>
1491 <section>
1492 <title>Un ejemplo de tubería</title>
1493 <body>
1494
1495 <p>
1496 Aquí está otro ejemplo simple:
1497 </p>
1498
1499 <pre caption="tuberías en acción">
1500 $ <i>ls -s | sort -n</i>
1501 </pre>
1502
1503 <p>
1504 En este caso, <c>ls -s</c> normalmente imprimiría una lista del
1505 directorio actual en la terminal, con cada archivo precedido por su
1506 tamaño. Pero en su lugar enviamos por la tubería la salida a <c>sort -n</c>,
1507 el cual ordena la salida numéricamente. ¡Esto es una manera
1508 realmente útil de encontrar archivos grandes en su directorio home!
1509 </p>
1510
1511 <p>
1512 Los siguientes ejemplos son más complejos, pero demuestran el poder
1513 que puede ser aprovechado usando tuberías. Vamos a utilizar algunas
1514 órdenes que no hemos cubierto aun, pero no deje que eso lo haga más
1515 lento. Concéntrese en entender cómo funcionan las tuberías, así podrá
1516 emplearlas en sus tareas Linux cotidianas.
1517 </p>
1518
1519 </body>
1520 </section>
1521 <section>
1522 <title>La tubería de descompresión</title>
1523 <body>
1524
1525 <p>
1526 Normalmente para descomprimir y desempaquetar un archivo, puede hacer
1527 los siguiente:
1528 </p>
1529
1530 <pre caption="Desempaquetando un archivo">
1531 $ <i>bzip2 -d linux-2.4.16.tar.bz2</i>
1532 $ <i>tar xvf linux-2.4.16.tar</i>
1533 </pre>
1534
1535 <p>
1536 La desventaja de este método es que requiere de la creación de un
1537 archivo intermediario y descomprimido en su disco. Dado que <c>tar</c>
1538 tiene la habilidad de leer directamente desde su entrada (en lugar
1539 de especificar un archivo), podemos producir el mismo resultado
1540 usando una tubería:
1541 </p>
1542
1543 <pre caption="Desempaquetar usando una tubería">
1544 $ <i>bzip2 -dc linux-2.4.16.tar.bz2 | tar xvf -</i>
1545 </pre>
1546
1547 <p>
1548 ¡Hurra! Nuestro archivo tar comprimido se ha extraído y no hemos
1549 necesitado de un archivo intermedio.
1550 </p>
1551
1552 </body>
1553 </section>
1554 <section>
1555 <title>Una tubería más larga</title>
1556 <body>
1557
1558 <p>
1559 Aquí está otro ejemplo de tubería:
1560 </p>
1561
1562 <pre caption="Tuberías más largas">
1563 $ <i>cat miarchivo.txt | sort | uniq | wc -l</i>
1564 </pre>
1565
1566 <p>
1567 Usamos <c>cat</c> para enviar el contenido de <path>miarchivo.txt</path>
1568 a la orden <c>sort</c>. Cuando la orden <c>sort</c> recibe la
1569 entrada, ordena todas las líneas para que estén en orden alfabético,
1570 y envía la salida a <c>uniq</c>. <c>uniq</c> elimina cualquier línea
1571 duplicada (por cierto, requiere que la entrada esté ordenada)
1572 enviando la salida que ya ha sido borrada a <c>wc -l</c>. Hemos visto
1573 la orden <c>wc</c> anteriormente, pero sin las opciones de la línea
1574 de comando. Cuando se da la opción <c>-l</c>, solamente imprime el
1575 número de líneas en su entrada, en lugar de incluir también palabras
1576 y caracteres. Como puede ver esta tubería imprime el número líneas
1577 únicas (no idénticas) en un archivo de texto.
1578 </p>
1579
1580 <p>
1581 Trate de crear un par de archivos de prueba con su editor de texto
1582 favorito y utilice esta tubería para ver qué resultados obtiene.
1583 </p>
1584
1585 </body>
1586 </section>
1587 <section>
1588 <title>El curso exprés de procesamiento de texto comienza</title>
1589 <body>
1590
1591 <p>
1592 Ahora nos embarcamos en un viaje relámpago a las órdenes estándar
1593 Linux de procesamiento de texto. Debido a que estamos cubriendo mucho
1594 material en este tutorial, no tenemos el espacio para dar ejemplos de
1595 cada orden. En cambio, lo animamos para que lea cada página del
1596 manual de las ordenes (escribiendo <c>man echo</c>, por ejemplo) y
1597 aprenda cada orden y como trabajan sus opciones jugando un rato con
1598 cada una. Como regla, estas órdenes imprimen los resultados de
1599 cualquier procesamiento a una terminal en vez de modificar algún
1600 archivo. Después de haber tomado nuestro un viaje relámpago a las
1601 órdenes estándar Linux de procesamiento de texto, veremos más de
1602 cerca la redirección de la salida y entrada. Así que sí, hay una luz
1603 al final del túnel :).
1604 </p>
1605
1606 <p>
1607 <c>echo</c> imprime sus argumentos a la terminal. Use la opción <c>-e</c>
1608 si quiere integrar secuencias de escape con la barra invertida;
1609 por ejemplo <c>echo -e "foo\nfoo"</c> imprimirá foo, luego un salto
1610 de línea y después foo otra vez. Use la opción <c>-n</c> para decirle
1611 a echo que omita el salto de línea final que es anexado a la salida
1612 por defecto.
1613 </p>
1614
1615 <p>
1616 <c>cat</c> imprimirá en la terminal el contenido de los archivos
1617 especificados como argumentos. Es útil como primer comando de una
1618 tubería, por ejemplo, <c>cat foo.txt | bla</c>.
1619 </p>
1620
1621 <p>
1622 <c>sort</c> imprimirá el contenido de un archivo especificado en la
1623 línea de comandos en orden alfabético. Por supuesto, <c>sort</c>
1624 también acepta entradas desde una tubería. Escriba <c>man sort</c>
1625 para familiarizarse con las diversas opciones que controlan la
1626 conducta del ordenamiento.
1627 </p>
1628
1629 <p>
1630 <c>uniq</c> toma un archivo <e>ya ordenado</e> o una secuencia de
1631 datos (a través de una tubería) y elimina las líneas duplicadas.
1632 </p>
1633
1634 <p>
1635 <c>wc</c> imprime el número de líneas, palabras y bytes en un archivo
1636 determinado o en la secuencia de entrada (de una tubería). Escriba
1637 <c>man wc</c> para aprender como ajustar los resultados que son
1638 desplegados.
1639 </p>
1640
1641 <p>
1642 <c>head</c> imprime las primeras diez líneas de un archivo o una
1643 secuencia. Use la opción <c>-n</c> para especificar cuantas líneas se
1644 desea mostrar.
1645 </p>
1646
1647 <p>
1648 <c>tail</c> imprime las últimas diez líneas de un archivo o
1649 secuencia. Use la opción <c>-n</c> para especificar cuantas líneas se
1650 desea mostrar.
1651 </p>
1652
1653 <p>
1654 <c>tac</c> es como <c>cat</c>, pero imprime todas las líneas en orden
1655 inverso; en otras palabras, la última línea se imprime primero.
1656 </p>
1657
1658 <p>
1659 <c>expand</c> convierte las tabulaciones en espacios. Use la opción
1660 <c>-t</c> para especificar la posición del tabulador.
1661 </p>
1662
1663 <p>
1664 <c>unexpand</c> convierte los espacios de entrada en tabulaciones.
1665 Use la opción <c>-t</c> para especificar la posición del tabulador.
1666 </p>
1667
1668 <p>
1669 <c>cut</c> es usado para extraer campos delimitados por caracteres de
1670 cada línea de un archivo de entrada o secuencia.
1671 </p>
1672
1673 <p>
1674 La orden <c>nl</c> agrega una número a cada línea de entrada. Útil
1675 para impresiones.
1676 </p>
1677
1678 <p>
1679 <c>pr</c> es usado para romper archivos en varias páginas de salida;
1680 normalmente es usado para impresión.
1681 </p>
1682
1683 <p>
1684 <c>tr</c> es una herramienta de traducción de caracteres; es usada
1685 para asignar a ciertos caracteres de la secuencia de entrada otros
1686 caracteres en la secuencia de salida.
1687 </p>
1688
1689 <p>
1690 <c>sed</c> es un poderoso editor de texto orientado a secuencias.
1691 Puede aprender más acerca de sed en los siguientes artículos de IBM
1692 developerWorks:
1693 </p>
1694
1695 <ul>
1696 <li>
1697 <uri link="/doc/es/articles/l-sed1.xml">Sed mediante ejemplos,
1698 Parte 1</uri>
1699 </li>
1700 <li>
1701 <uri link="/doc/es/articles/l-sed2.xml">Sed mediante ejemplos,
1702 Parte 2</uri>
1703 </li>
1704 <li>
1705 <uri link="/doc/es/articles/l-sed3.xml">Sed mediante ejemplos,
1706 Parte 3</uri>
1707 </li>
1708 </ul>
1709
1710 <p>
1711 Si está planeando tomar el examen LPI, asegúrese de leer los primeros
1712 dos artículos de esta serie.
1713 </p>
1714
1715 <p>
1716 <c>awk</c> es un lenguaje práctico de procesamiento de texto. Para
1717 aprender más acerca de awk, lea los siguientes artículos de IBM
1718 developerWorks:
1719 </p>
1720
1721 <ul>
1722 <li>
1723 <uri link="/doc/es/articles/l-awk1.xml">Awk mediante ejemplos,
1724 Parte 1</uri>
1725 </li>
1726 <li>
1727 <uri link="/doc/es/articles/l-awk2.xml">Awk mediante ejemplos,
1728 Parte 2</uri>
1729 </li>
1730 <li>
1731 <uri link="/doc/es/articles/l-awk3.xml">Awk mediante ejemplos,
1732 Parte 3</uri>
1733 </li>
1734 </ul>
1735
1736 <p>
1737 <c>od</c> está diseñado para transformar una secuencia de entrada en
1738 un formato octal o hexadecimal "volcado".
1739 </p>
1740
1741 <p>
1742 <c>split</c> es una orden utilizada para dividir un archivo grande en
1743 pedazos más pequeños y más manejables.
1744 </p>
1745
1746 <p>
1747 <c>fmt</c> dará formato a párrafos para que estos se ajusten al
1748 margen. Hoy en día es menos útil, ya que esta habilidad la poseen la
1749 mayoría de los editores de texto, pero aún así es bueno saber.
1750 </p>
1751
1752 <p>
1753 <c>paste</c> toma dos o más archivos como entrada, concatena cada
1754 línea secuencial de los archivos de entrada, e imprime las líneas
1755 resultantes. Puede ser útil para crear tablas o columnas de texto.
1756 </p>
1757
1758 <p>
1759 <c>join</c> es similar a paste, pero utiliza un campo (el primero de modo
1760 predeterminado) en cada línea para que coincida lo que debe combinarse
1761 en una sola línea.
1762 </p>
1763
1764 <p>
1765 <c>tee</c> imprime su entrada tanto en un archivo como en la
1766 pantalla. Esto es útil cuando quiera crear un registro de algo, pero
1767 además quiere verlo en pantalla.
1768 </p>
1769
1770 </body>
1771 </section>
1772 <section>
1773 <title>¡El curso exprés termina!. Redirección</title>
1774 <body>
1775
1776 <p>
1777 Similar a usar <c>&gt;</c> en la línea de comando de bash, puede usar
1778 para redireccionar un archivo a una orden. Para muchas órdenes, puede
1779 simplemente especificar el nombre de archivo en la línea de comando,
1780 sin embargo algunas órdenes solo funcionan desde la entrada estándar.
1781 </p>
1782
1783 <p>
1784 Bash y otros intérpretes de comando respaldan el concepto de un
1785 "archivoaquí". Esto le permite especificar la entrada de una orden en
1786 las líneas siguientes a la invocación de la orden, terminándola con
1787 un valor especial. Es más fácil mediante un ejemplo:
1788 </p>
1789
1790 <pre caption="Redirección en acción">
1791 $ <i>sort &lt;&lt;END</i>
1792 manzana
1793 arándano
1794 plátano
1795 END
1796 arándano
1797 manzana
1798 plátano
1799 </pre>
1800
1801 <p>
1802 En el ejemplo de arriba, escribimos las palabras manzana, arándano y
1803 plátano seguidos por "END" lo que significa el fin de la entrada. El
1804 programa <c>sort</c> regresa nuestras palabras ordenadas
1805 alfabéticamente.
1806 </p>
1807
1808 </body>
1809 </section>
1810 <section>
1811 <title>Uso de &gt;&gt;</title>
1812 <body>
1813
1814 <p>
1815 Tal vez esperaría que <c>&gt;&gt;</c> fuera de alguna manera análogo
1816 a <c>&lt;&lt;</c>, pero en realidad no lo es. Significa simplemente
1817 agregar la salida a un archivo, en lugar de sobreescribir como <c>&gt;
1818 </c> lo haría. Por ejemplo:
1819 </p>
1820
1821 <pre caption="Redireccionando a un archivo">
1822 $ <i>echo Hola &gt; miarchivo</i>
1823 $ <i>echo allá. &gt; miarchivo</i>
1824 $ <i>cat miarchivo</i>
1825 allá.
1826 </pre>
1827
1828 <p>
1829 ¡Uy! ¡Perdimos la porción "Hola"! Lo que queríamos decir era esto:
1830 </p>
1831
1832 <pre caption="Anexar a un archivo">
1833 $ <i>echo Hola &gt; miarchivo</i>
1834 $ <i>echo allá. &gt;&gt; miarchivo</i>
1835 $ <i>cat miarchivo</i>
1836 Hola
1837 allá.
1838 </pre>
1839
1840 <p>
1841 ¡Mucho mejor!
1842 </p>
1843
1844 </body>
1845 </section>
1846 </chapter>
1847
1848 <chapter>
1849 <title>Módulos del núcleo</title>
1850 <section>
1851 <title>Conozca "uname"</title>
1852 <body>
1853
1854 <p>
1855 La orden <c>uname</c> le provee una variedad de información
1856 interesante acerca de su sistema. Aquí está lo que se despliega en mi
1857 estación de desarrollo cuando tecleo <c>uname -a</c> el cual le dice
1858 a la orden <c>uname</c> que imprima toda la información de una sola
1859 vez:
1860 </p>
1861
1862 <pre caption="uname -a">
1863 $ <i>uname -a</i>
1864 Linux inventor 2.4.20-gaming-r1 #1 Fri Apr 11 18:33:35 MDT 2003 i686
1865 AMD Athlon(tm) XP 2100+ AuthenticAMD GNU/Linux
1866 </pre>
1867
1868 </body>
1869 </section>
1870 <section>
1871 <title>Más locura uname</title>
1872 <body>
1873
1874 <p>
1875 Ahora, veamos la información que provee <c>uname</c>:
1876 </p>
1877
1878 <pre caption="Información de uname">
1879 info. opción arg ejemplo
1880 nombre de núcleo -s "Linux"
1881 nombre del anfitrión -n "inventor"
1882 revisión del núcleo -r "2.4.20-gaming-r1"
1883 versión de núcleo -v "#1 Fri Apr 11 18:33:35 MDT 2003"
1884 máquina -m "i686"
1885 procesador -p "AMD Athlon(tm) XP 2100+"
1886 plataforma de hardware -i "AuthenticAMD"
1887 sistema operativo -o "GNU/Linux"
1888 </pre>
1889
1890 <p>
1891 ¡Intrigante! ¿Qué imprime la salida de su orden <c>uname -a</c>?
1892 </p>
1893
1894 </body>
1895 </section>
1896 <section>
1897 <title>La revisión del núcleo</title>
1898 <body>
1899
1900 <p>
1901 He aquí un truco de magia. Primero, escriba <c>uname -r</c> para que
1902 la orden uname imprima la revisión del núcleo Linux que se está
1903 ejecutando actualmente.
1904 </p>
1905
1906 <p>
1907 Ahora, mire en el directorio <path>/lib/modules</path> y, ¡presto!
1908 ¡Apuesto que encontrará un directorio con el mismo nombre! Está bien,
1909 no es tan mágico, pero ahora es un buen momento para hablar del
1910 significado de los directorios en <path>/lib/modules</path> y
1911 explicar que son los módulos.
1912 </p>
1913
1914 </body>
1915 </section>
1916 <section>
1917 <title>El núcleo</title>
1918 <body>
1919
1920 <p>
1921 El núcleo Linux es el corazón de lo que comúnmente llamamos "Linux"
1922 -- es la pieza de código que accede a su hardware directamente y
1923 provee abstracciones para que los programas regulares antiguos puedan
1924 ejecutarse. Gracias al núcleo, su editor de texto no necesita
1925 preocuparse acerca de si está escribiendo en un disco SCSI o IDE -- o
1926 incluso en un disco RAM. Simplemente escribe a un archivo de sistema,
1927 y el núcleo se encarga del resto.
1928 </p>
1929
1930 </body>
1931 </section>
1932 <section>
1933 <title>Introducción a los módulos del núcleo</title>
1934 <body>
1935
1936 <p>
1937 Entonces, ¿qué son los módulos del núcleo? Bueno, son partes del
1938 núcleo que han sido almacenadas en el disco con un formato especial.
1939 A su orden, podrán ser cargados en el núcleo en ejecución y proveer
1940 funcionalidades adicionales.
1941 </p>
1942
1943 <p>
1944 Debido a que los módulos del núcleo son cargados a demanda, puede
1945 tener en su núcleo soporte para una gran cantidad de funciones
1946 adicionales que normalmente no quiere tener habilitadas. Pero en
1947 alguna rara ocasión, aquellos módulos del núcleo pueden sernos útiles
1948 y pueden cargarse -- a menudo de manera automática -- para apoyar ese
1949 raro sistema de archivos o dispositivo que raramente usa.
1950 </p>
1951
1952 </body>
1953 </section>
1954 <section>
1955 <title>Módulos del núcleo en pocas palabras</title>
1956 <body>
1957
1958 <p>
1959 En resumen, los módulos del núcleo le permiten al núcleo en ejecución
1960 habilitar capacidades en base a la demanda. Sin los módulos del
1961 núcleo, tendría que compilar un nuevo núcleo completo y reiniciar
1962 para tener el apoyo de las nuevas características.
1963 </p>
1964
1965 </body>
1966 </section>
1967 <section>
1968 <title>lsmod</title>
1969 <body>
1970
1971 <p>
1972 Para ver cuales módulos están cargados actualmente en su sistema, use
1973 la orden <c>lsmod</c>:
1974 </p>
1975
1976 <pre caption="Uso de lsmod">
1977 # <i>lsmod</i>
1978 Module Size Used by Tainted: PF
1979 vmnet 20520 5
1980 vmmon 22484 11
1981 nvidia 1547648 10
1982 mousedev 3860 2
1983 hid 16772 0 (unused)
1984 usbmouse 1848 0 (unused)
1985 input 3136 0 [mousedev hid usbmouse]
1986 usb-ohci 15976 0 (unused)
1987 ehci-hcd 13288 0 (unused)
1988 emu10k1 64264 2
1989 ac97_codec 9000 0 [emu10k1]
1990 sound 51508 0 [emu10k1]
1991 usbcore 55168 1 [hid usbmouse usb-ohci ehci-hcd]
1992 </pre>
1993
1994 </body>
1995 </section>
1996 <section>
1997 <title>Listado de módulos</title>
1998 <body>
1999
2000 <p>
2001 Como puede ver, mi sistema tiene unos cuantos módulos cargados. Los
2002 módulos vmnet y vmmon proveen la funcionalidad necesaria para mi
2003 programa <uri link="http://www.vmware.com/">VMWare</uri>, el cual me
2004 permite ejecutar una PC virtual en una ventana del escritorio. El
2005 módulo de "nvidia" viene de la corporación
2006 <uri link="http://www.nvidia.com/">NVIDIA</uri> la cual me permite
2007 utilizar mi tarjeta de gráficos de gran desempeño con aceleración para 3D
2008 bajo Linux al tiempo que toma ventaja de sus características.
2009 </p>
2010
2011 <p>
2012 Además tengo un montón de módulos usados para darle respaldo a mis
2013 dispositivos de entrada basados en USB --llamados "mousedev", "hid",
2014 "usbmouse", "input", "usb-ohci", "ehci-hcd" y "usbcore." Algunas
2015 veces tiene sentido configurar su núcleo para darle soporte al USB en
2016 forma de módulos. ¿Por qué? Porque los dispositivos USB son del tipo
2017 "conecta y usa" y cuando tiene el respaldo USB como módulo, entonces
2018 puede ir a comprar un nuevo dispositivo USB, conectarlo a su sistema,
2019 y que el sistema cargue automáticamente los módulos apropiados para
2020 habilitar ese dispositivo. Es práctico hacer las cosas de esta manera.
2021 </p>
2022
2023 </body>
2024 </section>
2025 <section>
2026 <title>Módulos de terceras partes</title>
2027 <body>
2028
2029 <p>
2030 Para completar mi lista de módulos están "emu10k1", "ac97_codec" y
2031 "sound", que juntos proveen soporte para mi tarjeta de sonido
2032 SoundBlaster Audigy.
2033 </p>
2034
2035 <p>
2036 Cabe señalar que algunos de mis módulos de núcleo provienen de las
2037 fuentes del núcleo mismo. Por ejemplo, todos los módulos relacionados
2038 al USB son compilados desde las fuentes del núcleo estándar de
2039 Linux. Sin embargo, el nvidia, emul10k1 y los relacionados a VMWare,
2040 provienen de otras fuentes. Esto resalta otra ventaja importante de
2041 los módulos del núcleo -- permiten a terceras partes proveer
2042 funcionalidades necesarias al núcleo y además permiten la
2043 funcionalidad de "conectarse" a un núcleo Linux que se encuentra
2044 ejecutándose. No es necesario reiniciar el sistema.
2045 </p>
2046
2047 </body>
2048 </section>
2049 <section>
2050 <title>depmod y amigos</title>
2051 <body>
2052
2053 <p>
2054 En el directorio <path>/lib/modules/2.4.20-gaming-r1/</path>, tengo
2055 un número de archivos que inician con la cadena "modules.":
2056 </p>
2057
2058 <pre caption="Otros módulos">
2059 $ <i>ls /lib/modules/2.4.20-gaming-r1/modules.*</i>
2060 /lib/modules/2.4.20-gaming-r1/modules.dep
2061 /lib/modules/2.4.20-gaming-r1/modules.generic_string
2062 /lib/modules/2.4.20-gaming-r1/modules.ieee1394map
2063 /lib/modules/2.4.20-gaming-r1/modules.isapnpmap
2064 /lib/modules/2.4.20-gaming-r1/modules.parportmap
2065 /lib/modules/2.4.20-gaming-r1/modules.pcimap
2066 /lib/modules/2.4.20-gaming-r1/modules.pnpbiosmap
2067 /lib/modules/2.4.20-gaming-r1/modules.usbmap
2068 </pre>
2069
2070 <p>
2071 Estos archivos contienen algunas porciones de información de
2072 dependencias. Por un lado, registran la información de *dependencia*
2073 para módulos -- algunos módulos requieren que otros módulos sean
2074 cargados antes de ejecutarse. Esta información es almacenada en estos
2075 archivos.
2076 </p>
2077
2078 </body>
2079 </section>
2080 <section>
2081 <title>¿Cómo obtener módulos?</title>
2082 <body>
2083
2084 <p>
2085 Algunos módulos del núcleo están diseñados para trabajar con
2086 dispositivos específicos de hardware, como mi módulo "emuk10k1", el
2087 cual es para mi tarjeta SoundBlaster Audigy. Para ese tipo de módulos,
2088 existen archivos que además graban los identificadores PCI y marcas
2089 de identificación de los dispositivos de hardware que respaldan. Esta
2090 información puede ser utilizada para actividades como los scripts
2091 "conexión rápida" (de los cuales hablaremos en los siguientes
2092 tutoriales) para autodetectar hardware y cargar los módulos
2093 apropiados para respaldar dicho hardware de manera automática.
2094 </p>
2095
2096 </body>
2097 </section>
2098 <section>
2099 <title>Uso de depmod</title>
2100 <body>
2101
2102 <p>
2103 Si alguna vez ha instalado un módulo nuevo, la información de
2104 dependencia puede estar obsoleta. Para actualizarla simplemente teclee
2105 <c>depmod -a</c>. El programa <c>depmod</c> hará un análisis de todos
2106 los módulos en los directorios <path>/lib/modules</path> y
2107 actualizará la información de dependencias. Esto se logra analizando
2108 los archivos de módulos en <path>/lib/modules</path> y revisando lo
2109 que se le conoce como "símbolos" dentro de los módulos.
2110 </p>
2111
2112 </body>
2113 </section>
2114 <section>
2115 <title>Localizando módulos del núcleo</title>
2116 <body>
2117
2118 <p>
2119 Entonces, ¿qué apariencia tienen los módulos del núcleo?, Para los
2120 núcleos 2.4, los módulos son generalmente cualquier archivo del árbol
2121 <path>/lib/modules</path> que termine en ".o". Para ver todos los
2122 módulos en <path>/lib/modules</path>, escriba lo siguiente:
2123 </p>
2124
2125 <pre caption="Módulos del núcleo en /lib/modules">
2126 # <i>find /lib/modules -name '*.o'</i>
2127 /lib/modules/2.4.20-gaming-r1/misc/vmmon.o
2128 /lib/modules/2.4.20-gaming-r1/misc/vmnet.o
2129 /lib/modules/2.4.20-gaming-r1/video/nvidia.o
2130 /lib/modules/2.4.20-gaming-r1/kernel/fs/fat/fat.o
2131 /lib/modules/2.4.20-gaming-r1/kernel/fs/vfat/vfat.o
2132 /lib/modules/2.4.20-gaming-r1/kernel/fs/minix/minix.o
2133 [lista truncada para hacerla más breve]
2134 </pre>
2135
2136 </body>
2137 </section>
2138 <section>
2139 <title>insmod vs. modprobe</title>
2140 <body>
2141
2142 <p>
2143 Bien, ¿cómo se realiza la carga de un módulo en un núcleo en
2144 ejecución? Un modo es utilizar la orden <c>insmod</c> para
2145 especificar la ruta completa a el módulo que se desea cargar:
2146 </p>
2147
2148 <pre caption="Uso de insmod">
2149 # <i>insmod /lib/modules/2.4.20-gaming-r1/kernel/fs/fat/fat.o</i>
2150 # <i>lsmod | grep fat</i>
2151 fat 29272 0 (unused)
2152 </pre>
2153
2154 <p>
2155 Sin embargo, normalmente las cargas de módulos se realizan usando la
2156 orden <c>modprobe</c>. Una de las cosas buenas acerca de la orden
2157 <c>modprobe</c> es que automáticamente se encarga de cargar módulos
2158 dependientes. Además, no es necesario especificar la ruta al módulo
2159 que desee cargar, ni especificar al final el ".o".
2160 </p>
2161
2162 </body>
2163 </section>
2164 <section>
2165 <title>rmmod y modprobe en acción</title>
2166 <body>
2167
2168 <p>
2169 Descarguemos nuestro módulo "fat.o" y carguémoslo de nuevo usando
2170 <c>modprobe</c>:
2171 </p>
2172
2173 <pre caption="rmmod y modprobe en acción">
2174 # <i>rmmod fat</i>
2175 # <i>lsmod | grep fat</i>
2176 # <i>modprobe fat</i>
2177 # <i>lsmod | grep fat</i>
2178 fat 29272 0 (unused)
2179 </pre>
2180
2181 <p>
2182 Como puede ver, la orden <c>rmmod</c> trabaja de manera similar a
2183 modprobe, pero tiene el efecto contrario: desactivar el módulo que
2184 le ha especificado.
2185 </p>
2186
2187 </body>
2188 </section>
2189 <section>
2190 <title>Sus amigos modinfo y modules.conf</title>
2191 <body>
2192
2193 <p>
2194 Puede utilizar la orden <c>modinfo</c> para aprender cosas
2195 interesantes acerca de sus módulos favoritos:
2196 </p>
2197
2198 <pre caption="Uso de modinfo">
2199 # <i>modinfo fat</i>
2200 filename: /lib/modules/2.4.20-gaming-r1/kernel/fs/fat/fat.o
2201 description: &lt;none&gt;
2202 author: &lt;none&gt;
2203 license: "GPL"
2204 </pre>
2205
2206 <p>
2207 Tome nota especial del archivo <path>/etc/modules.conf</path>. Este
2208 archivo contiene información de configuración para <c>modprobe</c>.
2209 Le permite ajustar la funcionalidad de <c>modprobe</c> mencionando
2210 cuales módulos debe ser cargados antes/después de cargar otros,
2211 ejecutar scripts antes/después de cargar módulos y más.
2212 </p>
2213
2214 </body>
2215 </section>
2216 <section>
2217 <title>Aspectos relevantes de modules.conf</title>
2218 <body>
2219
2220 <p>
2221 La sintaxis y funcionalidad de <path>modules.conf</path> es un poco
2222 complicada y no veremos su sintaxis ahora (teclee <c>man modules.conf</c>
2223 para ver todos los detalles), pero aquí están algunas cosas que
2224 *debería* saber acerca de este archivo.
2225 </p>
2226
2227 <p>
2228 Muchas distribuciones generan este archivo de manera automática a
2229 partir de un grupo de archivos en otro directorio, como
2230 <path>/etc/modules.d/</path>. Por ejemplo, Gentoo Linux tiene un directorio
2231 <path>/etc/modules.d/</path>, y al ejecutar la orden <c>update-modules</c>
2232 tomará cada archivo en <path>/etc/modules.d/</path> y los
2233 concatenará para producir un nuevo <path>/etc/modules.conf/</path>.
2234 Por lo tanto, haga sus cambios a los archivos en
2235 <path>/etc/modules.d/</path> y ejecute update-modules si está usando
2236 Gentoo. Si está usando Debian, el procedimiento es similar excepto que el
2237 directorio es llamado <path>/etc/modutils/</path>.
2238 </p>
2239
2240 </body>
2241 </section>
2242 </chapter>
2243
2244 <chapter>
2245 <title>Resumen y bibliografía</title>
2246 <section>
2247 <title>Resumen</title>
2248 <body>
2249
2250 <p>
2251 ¡Felicidades; ha alcanzado el final de este tutorial en administración
2252 Linux básica! Esperamos que le haya ayudado a reafirmar sus
2253 conocimientos fundamentales de Linux. Por favor, únase a nosotros en
2254 el siguiente tutorial que cubre administración intermedia donde, partiendo
2255 de los fundamentos vistos aquí, veremos temas como permisos de Linux y el
2256 modelo de propiedad, manejo de cuentas de usuario, creación y montaje de
2257 sistema de archivos y más. Y recuerde, continuando con esta serie de
2258 tutoriales, pronto estará listo para obtener su certificación LPIC Nivel 1
2259 del Instituto Profesional Linux.
2260 </p>
2261
2262 </body>
2263 </section>
2264 <section>
2265 <title>Bibliografía</title>
2266 <body>
2267
2268 <p>
2269 Hablando de certificación LPIC, si es algo en lo que está interesado,
2270 entonces le recomendamos que estudie la siguiente bibliografía, la
2271 cual ha sido seleccionada cuidadosamente para aumentar el material
2272 cubierto en este tutorial:
2273 </p>
2274
2275 <p>
2276 Existe gran cantidad de buena bibliografía de expresiones regulares
2277 en Internet. Aquí hay dos que hemos encontrado:
2278 </p>
2279
2280 <ul>
2281 <li>
2282 <uri link="http://www.zvon.org/other/reReference/Output/">Regular
2283 Expressions Reference</uri>
2284 </li>
2285 <li>
2286 <uri link="http://zez.org/article/articleview/11/">Regular
2287 Expressions Explained</uri>
2288 </li>
2289 </ul>
2290
2291 <p>
2292 Asegúrese de leer el Estándar de la jerarquía del sistema de archivos
2293 en <uri>http://www.pathname.com/fhs/</uri>.
2294 </p>
2295
2296 <p>
2297 En <uri link="/doc/es/articles/bash-by-example-p1.xml">Bash con
2298 ejemplos, serie de artículos</uri>, le mostraré como usar
2299 programación de bash para crear sus propios scripts. Esta serie
2300 (particularmente parte uno y dos) le darán una buena preparación para
2301 el examen nivel 1 del LPIC:
2302 </p>
2303
2304 <p>
2305 Puede aprender más acerca de <c>sed</c> en los <uri
2306 link="http://www-106.ibm.com/developerworks/linux/library/l-sed1.html?dwzone=linux">
2307 relevent IBM developerWorks articles</uri>. Si está planeando
2308 tomar el examen LPI, asegúrese de leer los dos primeros artículos de
2309 esta serie.
2310 </p>
2311
2312 <p>
2313 Para aprender más acerca de <c>awk</c>, lea <uri
2314 link="http://www-106.ibm.com/developerworks/linux/library/l-awk1.html?dwzone=linux">
2315 relevent IBM developerWorks articles</uri>.
2316 </p>
2317
2318 <p>
2319 Es altamente recomendable revisar <uri
2320 link="http://www-106.ibm.com/developerworks/linux/library/l-faq/index.html">
2321 Technical FAQ for Linux users</uri>, un listado de 50 páginas que
2322 muestran la lista de preguntas más frecuentes de Linux con respuestas
2323 detalladas. El FAQ es un archivo formato PDF (Acrobat). Si es un
2324 usuario Linux principiante o intermedio, definitivamente debe revisar
2325 este FAQ.
2326 </p>
2327
2328 <p>
2329 Si no está familiarizado con el editor <c>vi</c>, es altamente
2330 recomendable que revise el tutorial
2331 <uri link="http://www-106.ibm.com/developerworks/edu/l-dw-linuxvi-i.html">
2332 Vi -- the cheat sheet method</uri>. Este tutorial le da una introducción
2333 rápida a este poderoso editor de texto. Considérelo como un material
2334 del tipo "debe leer" si no sabe cómo utilizar <c>vi</c>.
2335 </p>
2336
2337 </body>
2338 </section>
2339 </chapter>
2340 </guide>