the linux command line.en.es

571
7/23/2019 The Linux Command Line.en.Es http://slidepdf.com/reader/full/the-linux-command-lineenes 1/571  La línea de comandos de Linux Segunda edición del Internet William E. Shotts, Jr. Un libro LinuxCommand.org

Upload: juan-eduardo-garcia-garcia

Post on 18-Feb-2018

304 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 1/571

 

La línea de comandos deLinuxSegunda edición delInternet

William E. Shotts, Jr.

Un libroLinuxCommand.org

Page 2: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 2/571

Excepto cuando se indique lo contrario, este trabajo es bajo

licencia

http://creativecommons.Org/licenses/by-nc-nd/3.0/ 

Copyright © 2008-2013, William E. Shotts, Jr.

Esta obra está bajo la licencia Creative Commons Reconocimiento-No comercial-Sin obrasderivadas 3.0 Licencia de Estados Unidos. Para ver una copia de esta licencia, visite el enlacede arriba o enviar una carta a Creative Commons, 171 Segunda Calle, Suite 300, San Francisco,California, 94105, EE.UU..

Linux® es la marca registrada de Linus Torvalds. Todas las demás marcas comercialespertenecen a sus respectivos propietarios.

Este libro forma parte del proyecto LinuxCommand.org, un sitio para la educación y lapromoción dedicada a ayudar a los usuarios de sistemas operativos Linux heredados migranhacia el futuro. Usted puede ponerse en contacto con el proyecto en LinuxCommand.org http://linuxcommand.org . 

Este libro también está disponible en forma impresa, publicada por Sin Almidón de prensa yse pueden comprar donde quiera buenos libros se venden. Sin Almidón de prensa tambiénofrece este libro en formato electrónico para los lectores electrónicos más populares: http://nostarch.com/tlcl.htm  Historial de versiones

Versión  Fecha  Descripción 

13.07 06 de julio 2013 Segunda edición Internet.

09.12 14 de diciembre 2009 Primera edición Internet.

09.11 19 de noviembre 2009 Cuarto proyecto con retroalimentación casi todorevisor incorporado y editado hasta el capítulo 37.

09.10 03 de octubre 2009Tercer proyecto con formato de tabla revisada, laaplicación parcial de los colaboradores deretroalimentación y editado hasta el capítulo 18.

09.08 12 de agosto 2009Segundo proyecto de incorporación de la primerapasada edición.

09.07 18 de julio 2009 Completado el primer borrador.

Page 3: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 3/571

Tabla de contenido

Int roducción. ....................................................................................................xvi¿Por qué utilizar la línea de comandos? .......................................................................xviLo que trata este libro ................................................................................................... xviiQuién debe leer este libro ............................................................................................ xvii¿Qué hay en este libro ................................................................................................ xviiiCómo leer este libro .................................................................................................... xviii

Requisitos previos ....................................................................................................xix¿Por qué no lo llaman "GNU / Linux" ..................................................................xix

 Agradecimientos ............................................................................................................ xxSu regeneración es necesaria! ..................................................................................... xx¿Qué hay de nuevo en la segunda edición del Internet ...............................................xxiLectura adicional ...........................................................................................................xxiColofón ..........................................................................................................................xxi

Parte 1 - Aprender La Shell .............................................................1

1 - ¿Cuál es la cáscara ? . ..............................................................................2Los emuladores de terminal ............................................................................................ 2Sus primeras pulsaciones de teclas ................................................................................ 2

Histórico de comandos ............................................................................................... 3Movimiento del cursor ................................................................................................ 3

 Algunas palabras sobre ratones y enfoque ........................................................... 3Pruebe algunos comandos simples ................................................................................ 4Poner fin a una sesión de terminal .................................................................................. 5

La Consola Detrás de la cortina ............................................................................ 5

Resumiendo .................................................................................................................... 5Lectura adicional ............................................................................................................. 6

2 - Navegación. .................................................................................................7Entender el archivo del árbol de sistemas ...................................................................... 7El directorio de trabajo actual .......................................................................................... 7

 Añadir el contenido de un directorio ................................................................................ 8Cambiar el directorio de trabajo actual ........................................................................... 9

Rutas absolutas .......................................................................................................... 9Rutas relativas ............................................................................................................ 9

 Algunos atajos útiles ................................................................................................ 11Datos importantes sobre nombres de archivo .................................................... 11

yo

Page 4: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 4/571

12

ii

Resumiendo

3 - Exploración del sistema. ..........................................................................13Más diversión con Is ..................................................................................................... 13

Opciones y argumentos ........................................................................................... 14Una mirada a más largo At Long Formato ............................................................... 16

Determinar el tipo de un archivo con el archivo ........................................................... 17Viendo el contenido del archivo Con menos ................................................................ 17

¿Qué es el "texto"? ............................................................................................. 17Menos es más ..................................................................................................... 19

Una visita guiada........................................................................................................... 19Enlaces simbólicos ....................................................................................................... 23Enlaces duros ............................................................................................................... 24Resumiendo .................................................................................................................. 24Lectura adicional ........................................................................................................... 24

4 - Manipulación de archivos y director ios . ...............................................25Los comodines .............................................................................................................. 25

Rangos de caracteres ......................................................................................... 27

Los comodines trabajar en la interfaz gráfica de usuario Demasiado ............... 27mkdir - Crea Directorios ................................................................................................ 28cp - copia ficheros y directorios .................................................................................... 28

Opciones útiles y ejemplos ...................................................................................... 29mv - Mover y renombrar archivos ................................................................................. 30

Opciones útiles y ejemplos ...................................................................................... 30rm - Quitar los archivos y directorios ............................................................................ 31

Opciones útiles y ejemplos ...................................................................................... 31Tenga cuidado con rm! ....................................................................................... 32

ln - Crear enlaces .......................................................................................................... 33Enlaces duros .......................................................................................................... 33Enlaces simbólicos ................................................................................................... 33

Vamos a construir una Zona de juegos ........................................................................ 34

Creación de directorios ............................................................................................ 34Copia de archivos .................................................................................................... 34Mover y renombrar archivos .................................................................................... 35Crear enlaces duros ................................................................................................. 37La creación de enlaces simbólicos .......................................................................... 38La eliminación de archivos y directorios .................................................................. 39

La creación de enlaces simbólicos con la GUI ................................................... 40Resumiendo .................................................................................................................. 41Lectura adicional ........................................................................................................... 41

5 - Trabajar con los com andos . ....................................................................42¿Qué son exactamente los comandos? ....................................................................... 42

La identificación de los comandos ................................................................................ 43Tipo - Muestra el tipo de un comando ..................................................................... 43que - Ubicación de la pantalla de un ejecutable ...................................................... 43

Obtención de documentación de un comando ............................................................. 44ayuda - Obtener Ayuda Para Shell elementos incluídos ......................................... 44--help - Pantalla de información de uso ................................................................... 45

Page 5: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 5/571

hombre - Muestra el Manual del Programa Una Página ............................................ 45a propósito - Mostrar comandos apropiados ................................................................ 47whatis - Muestra una descripción muy breve de un comando .................................. 47

El hombre más Brutal Página de todos ellos ........................................................... 48info - Muestra la información de entrada de un programa de .................................... 48README y otros archivos de documentación del programa ..................................... 49

Crear sus propios comandos con alias ................................................................................. 50Resumiendo ............................................................................................................................. 52Lectura adicional ..................................................................................................................... 52

6 - Redirecc ión. .............................................................................................. 53Estándar de entrada, salida y error .............................................................................. 53Redirección de la salida estándar ................................................................................. 54La reorientación de error estándar ............................................................................... 55

Redirección de la salida estándar y el error estándar en un archivo ...................... 56Cómo deshacerse de la producción no deseado .................................................... 57

/ Dev / null En Unix Cultura ................................................................................. 57Reorientación de la entrada estándar .......................................................................... 57

gato - Concatenar archivos ...................................................................................... 57

Tuberías ......................................................................................................................... 59La diferencia entre> y | ........................................................................................ 60

Filtros ........................................................................................................................ 61Líneas Reportar u omitir Repetido - Uniq ................................................................ 61wc - Imprimir línea, palabra y Número total de bytes .............................................. 62Líneas de impresión coinciden con un patrón - grep .............................................. 62cabeza / cola - Imprimir Primera / última parte de Archivos .................................... 63tee - Leer de la entrada estándar y la salida a stdout y Archivos ........................... 64

Resumiendo .................................................................................................................. 65Linux es la imaginación ....................................................................................... 65

7 - Al ver el mun do c omo la Shel l lo ve. ......................................................67

Expansión ................................................................................................................................. 67La expansión del nombre de ruta .................................................................................... 68La expansión del nombre de ruta ................................................ De archivos ocultos 69

Expansión Tilde ................................................................................................................. 69Expansión aritmética ......................................................................................................... 70Expansión Brace ................................................................................................................. 71Expansión Parámetro ........................................................................................................ 72Comando Sustitución ........................................................................................................ 73

Citando ..................................................................................................................................... 74Doble Cotizaciones ............................................................................................................ 75Soltero Cotizaciones .......................................................................................................... 76Escapar Personajes ............................................................................................................ 77

Secuencias de escape barra diagonal inversa ........................................................... 77

Resumiendo ............................................................................................................................. 78Lectura adicional ..................................................................................................................... 78

8 - Trucos avanzadas del teclado. ............................................................... 79De línea de comandos de edición ........................................................................................ 79

Movimiento del cursor .................................................................................................... 79

iiiModificación del texto ............................................................................................... 80

Page 6: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 6/571

Cortar y pegar (destruir y tirar) Texto ....................................................................... 80La tecla Meta ....................................................................................................... 81

Terminación ................................................................................................................... 81Finalización programable .................................................................................... 83

Uso del historial ............................................................................................................. 83Historia búsqueda .................................................................................................... 84

Historia de Expansión .............................................................................................. 86guión .................................................................................................................... 86Resumiendo .................................................................................................................. 86Lectura adicional ........................................................................................................... 87

9 - Permisos ....................................................................................................88Los propietarios, miembros del grupo, y todos los demás .......................................... 89La lectura, la escritura, y ejecución .............................................................................. 90

chmod - Cambia el modo de archivo ...................................................................... 92¿Qué diablos es octal? ....................................................................................... 93

 Ajuste de modo de archivo con la GUI .................................................................... 95umask - Establecer permisos predeterminados ...................................................... 96

 Algunos permisos especiales ............................................................................. 98

Cambio de Identidades ................................................................................................. 99do - Ejecutar un depósito de Sustituto de usuario e ID de grupo ............................ 99sudo - ejecutar un comando como otro usuario .................................................... 101

Ubuntu y sudo ................................................................................................... 101chown - Cambiar propietario del archivo y de grupo ............................................. 102chgrp - Cambia Propiedad del Grupo .................................................................... 103

El ejercicio de nuestros privilegios .............................................................................. 103Cambio de la contraseña ............................................................................................ 106Resumiendo ................................................................................................................ 107Lectura adicional ......................................................................................................... 107

10 - Procesos ................................................................................................108

¿Cómo un proceso funciona ....................................................................................... 108Visualización de Procesos .......................................................................................... 109Viendo Procesos dinámicamente con la parte superior ........................................ 111

El control de procesos................................................................................................. 113Interrupción de un proceso .................................................................................... 114Poner un proceso en segundo plano ..................................................................... 114Volviendo un proceso para el primer plano ........................................................... 115Parada (pausa) Proceso A ..................................................................................... 116

Señales ....................................................................................................................... 117El envío de señales a los procesos con kill ........................................................... 117Envío de señales a múltiples procesos con killall .................................................. 120

Más de procesos relacionados Comandos................................................................. 120Resumiendo ................................................................................................................ 121

Parte 2 - Configuración y el medio ambiente ............................. 123

11 - El Medio Am biente.  124

IVLo que se almacena en el medio ambiente? .............................................................. 124

Page 7: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 7/571

Examinar El Medio Ambiente ................................................................................. 124 Algunas variables interesantes .............................................................................. 126

¿Cómo se establece el medio ambiente? .................................................................. 127¿Qué hay en un archivo de inicio? ........................................................................ 128

Modificar el entorno .................................................................................................... 130Qué archivos deben Nosotros .................................................................... Modificar?

  130Editores de texto .................................................................................................... 130Utilizando un editor de texto .................................................................................. 131

¿Por qué comentarios son importantes ............................................................ 134 Activación Nuestros Cambios ................................................................................ 135

Resumiendo ................................................................................................................ 135Lectura adicional ......................................................................................................... 135

12 - Una suave introd ucc ión a VI............................................................... 136¿Por qué debemos aprender vi .................................................................................. 136Un poco de historia ..................................................................................................... 137Inicio y detención de vi ................................................................................................ 137

Modo de compatibilidad .................................................................................... 138

Modos de edición ........................................................................................................ 139 Acceso al modo de inserción ................................................................................. 140Salvando Nuestro Trabajo ..................................................................................... 140

Moviendo el cursor por ............................................................................................... 141Edición básica ............................................................................................................. 142

 Al añadir texto ........................................................................................................ 142La apertura de una línea ........................................................................................ 143Eliminación de Texto .............................................................................................. 144Cortar, copiar y pegar texto ................................................................................... 145Unirse Líneas ......................................................................................................... 147

Buscar y reemplazar .................................................................................................... 147Busca dentro de una línea ..................................................................................... 147Busca el archivo completo ..................................................................................... 147Búsqueda Global y reemplazo ............................................................................... 148

Edición de varios archivos .......................................................................................... 150Cambio entre archivos ........................................................................................... 151

 Apertura de archivos adicional Para una edición .................................................. 151Copiar contenido de un archivo en otro ................................................................. 152Inserción de un archivo completo en Otra ............................................................. 153

Salvando Nuestro Trabajo .......................................................................................... 154Resumiendo ................................................................................................................ 155Lectura adicional ......................................................................................................... 155

13 - Person alización d e El Símbo lo . ......................................................... 156 Anatomía de un Símbolo ............................................................................................ 156

Tratando algunos diseños alternativos Prompt .......................................................... 158 Añadiendo color .......................................................................................................... 159Confusión Terminal ........................................................................................... 160

Mover el cursor ........................................................................................................... 162 Ahorro El Prompt......................................................................................................... 163Resumiendo ................................................................................................................ 164

v

Page 8: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 8/571

164Lectura adicional

Parte 3 - Tareas comunes y herramientas Esenciales .............. 165

14 - Gestión de paqu etes. ..........................................................................166

Packaging Systems ..................................................................................................... 166Cómo funciona un sistema de paquetes .................................................................... 167Package Files ........................................................................................................ 167Repositorios ........................................................................................................... 167Dependencias ........................................................................................................ 168Herramientas del paquete de alta y de baja intensidad ........................................ 168

Tareas de administración de paquete común ............................................................ 169Encontrar un paquete en un repositorio ................................................................ 169Instalación de un paquete de un repositorio ......................................................... 169Instalación de un paquete de un paquete de archivos .......................................... 170Eliminación de un paquete .................................................................................... 170

 Actualización de paquetes desde un repositorio ................................................... 171 Actualización de un paquete desde un archivo de paquete.................................. 171

Listado de paquetes instalados ............................................................................. 172La determinación de si un paquete está instalado ................................................ 172Viendo Info Acerca de un paquete instalado ......................................................... 173Encontrar a qué paquete instaló un archivo .......................................................... 173

Resumiendo ................................................................................................................ 173El mito de instalación del software de Linux ..................................................... 174

Lectura adicional ......................................................................................................... 175

15 - Soporte de almacenamiento. ..............................................................176Montaje y desmontaje de dispositivos de almacenamiento ....................................... 176

Visualización de una lista de sistemas de archivos montados ............................. 178¿Por qué es importante la Desmontando ......................................................... 181

Determinación de nombres de dispositivos ........................................................... 182Creación de Nuevos Sistemas de archivos ................................................................ 185

Particiones Manipular con fdisk ............................................................................. 185La creación de un nuevo sistema de archivos Con mkfs ...................................... 188

Prueba y reparación de sistemas de archivos ............................................................ 189Lo que el fsck? .................................................................................................. 189

Formatear disquetes ................................................................................................... 189Mover los datos directamente a / desde dispositivos ................................................. 190Creación de CD-ROM Imágenes ................................................................................ 191

Creación de una imagen de copia de un CD-ROM ............................................... 191Creación de una imagen de una colección de archivos ........................................ 191

Un Programa por cualquier otro nombre .......................................................... 192Escribir CD-ROM Imágenes ....................................................................................... 192

Montaje de una imagen ISO directamente ............................................................ 192Tapas de CD-ROM Un Re-grabable ..................................................................... 193Escribiendo Una Imagen ....................................................................................... 193

Resumiendo ................................................................................................................ 193Lectura adicional ......................................................................................................... 193Crédito extra ................................................................................................................ 193

vi

Page 9: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 9/571

16 - Redes. .................................................................................................... 195El examen y el seguimiento de una Red .................................................................... 196

de ping ................................................................................................................... 196traceroute ............................................................................................................... 197netstat .................................................................................................................... 198

Transporte de archivos en una red ............................................................................. 199

ftp ........................................................................................................................... 199Iftp - A Better ftp ..................................................................................................... 202wget ........................................................................................................................ 202

Comunicación segura con hosts remotos................................................................... 202ssh .......................................................................................................................... 203

Con SSH Tunneling .......................................................................................... 206SCP y SFTP ........................................................................................................... 207

Un cliente SSH para Windows? ........................................................................ 208Resumiendo ................................................................................................................ 208Lectura adicional ......................................................................................................... 208

17 - Búsqu eda de archivos . ........................................................................209

Locate - Buscar archivos La Manera Más Fácil ......................................................... 209¿De Dónde Viene La Base de Datos localizar viene? ..................................... 211Find - Buscar archivos The Hard Way ........................................................................ 211

Pruebas .................................................................................................................. 212Operadores ............................................................................................................ 214

 Acciones predefinidas ............................................................................................ 217 Acciones definidas por el usuario .......................................................................... 219Mejora de la Eficiencia ........................................................................................... 220xargs ...................................................................................................................... 220

Lidiando con divertidos nombres de archivo .................................................... 221Un retorno a la Zona de juegos ............................................................................. 221Opciones ................................................................................................................ 224

Resumiendo ................................................................................................................ 225

Lectura adicional ......................................................................................................... 22518 - Arch ivado y cop ia de seguridad. .......................................................226

Compresión de Archivos ............................................................................................. 226gzip ......................................................................................................................... 227bzip2 ....................................................................................................................... 229

No sea la compresión Compulsivo ................................................................... 230 Almacenamiento de archivos ...................................................................................... 230

alquitrán ................................................................................................................. 230cremallera .............................................................................................................. 236

Sincronización de archivos y directorios ..................................................................... 238Usando rsync través de una red ............................................................................ 240

Resumiendo ................................................................................................................ 241Lectura adicional ......................................................................................................... 241

19 - Expresiones regulares. .......................................................................243¿Qué son las expresiones regulares? ................................................................... 243

grep ............................................................................................................................. 243

viiMetacaracteres y literales ........................................................................................... 245

Page 10: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 10/571

El Cualquier carácter ................................................................................................... 246 Anclas ......................................................................................................................... 247

Un Crucigrama Helper ...................................................................................... 247Expresiones soporte y Clases de personajes ............................................................ 248

Negación ................................................................................................................ 248Rangos de carácter tradicional .............................................................................. 249

Clases de caracteres POSIX ................................................................................. 250Volviendo a la tradicional Colación Orden ........................................................ 253POSIX básico vs. Expresiones regulares extendidas ................................................ 254

POSIX ............................................................................................................... 254 Alternancia ................................................................................................................. 255Cuantificadores ........................................................................................................... 256

? - Un ajuste de cero elemento o Una Hora .......................................................... 256* - Un ajuste de cero Elemento o más veces ......................................................... 257+ - Un elemento de ajuste de una o más veces .................................................... 258{} - Partido Un elemento Un número específico de veces ..................................... 258

Poner expresiones regulares para trabajar ................................................................ 259La validación de una lista de teléfonos con grep ................................................... 259Encontrar nombres de archivo Feo con Buscar .................................................... 260

La búsqueda de archivos con ubicar ..................................................................... 261Búsqueda de texto con menos y vim ..................................................................... 261

Resumiendo ................................................................................................................ 263Lectura adicional ......................................................................................................... 263

20 - Procesamiento de Texto. ....................................................................264 Aplicaciones De Texto ................................................................................................ 264

Documentos ........................................................................................................... 265Páginas Web .......................................................................................................... 265Correo electrónico .................................................................................................. 265Salida de impresora ............................................................................................... 265Programa de Código Fuente .................................................................................. 265

Revisando algunos viejos amigos .............................................................................. 265gato ......................................................................................................................... 266

MS-DOS Vs. Texto Unix Texto ......................................................................... 267clase ....................................................................................................................... 267Uniq ........................................................................................................................ 275

Cortar y rebanar .......................................................................................................... 276cortada .................................................................................................................... 276

 Ampliación Tabs ................................................................................................ 279pasta ....................................................................................................................... 280unirse ...................................................................................................................... 281

La comparación de texto ............................................................................................. 283comm ...................................................................................................................... 284diff ........................................................................................................................... 284

parche ..................................................................................................................... 287Edición On The Fly ...................................................................................................... 288tr.............................................................................................................................. 288

ROT13: El Anillo Decodificador No-Tan-Secreto ............................................. 290sed .......................................................................................................................... 290

vinPersonas que les gustased también te guste

Page 11: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 11/571

  299aspell ...................................................................................................................... 299

Resumiendo ................................................................................................................ 303Lectura adicional ......................................................................................................... 303Crédito extra ................................................................................................................ 304

21 - Formato de s al ida. ................................................................................305Herramientas de formato simple ................................................................................. 305nl - Líneas Número ................................................................................................. 305doblar - Envuelva cada línea a una longitud especificada .................................... 309fmt - Un formateador de texto sencillo ................................................................... 309PR - formato de texto para impresión .................................................................... 313printf - Formato Y Imprimir datos ........................................................................... 314

Documento Sistemas de formato ................................................................................ 317Groff ........................................................................................................................ 318

Resumiendo ................................................................................................................ 324Lectura adicional ......................................................................................................... 324

22 - Impr esión. ..............................................................................................326

Una breve historia de la imprenta ............................................................................... 326Impresión En El Dim Tiempos................................................................................ 326Impresoras basada en caracteres ......................................................................... 327Impresoras gráficas ................................................................................................ 328

Impresión con Linux .................................................................................................... 329Preparación de los ficheros para la impresión ............................................................ 329

PR - Convertir archivos de texto para impresión ................................................... 329El envío de un trabajo de impresión en una impresora .............................................. 331

IPR - Imprimir archivos (Berkeley Estilo) ............................................................... 331Ip - Imprimir archivos (System V Estilo) ................................................................. 332Otra opción: a2ps ................................................................................................... 333

Seguimiento y control de los trabajos de impresión ................................................... 336

lpstat - pantalla de estado del sistema de impresión ............................................. 336lpq - Pantalla de estado de la cola de la impresora ............................................... 337lprm / cancelar - Cancelar trabajos de impresión .................................................. 338

Resumiendo ................................................................................................................ 338Lectura adicional ......................................................................................................... 338

23 - Programas de Compi lación. ...............................................................340¿Qué está recopilando? .............................................................................................. 340

Se compilan todos los programas? ........................................................................ 341Compilar un programa en C ........................................................................................ 342

Obtención de El Código Fuente ............................................................................. 342Examinar el árbol de fuentes ................................................................................. 344La construcción de El Programa ............................................................................ 346

Instalación del programa ........................................................................................ 350Resumiendo ................................................................................................................ 350Lectura adicional ......................................................................................................... 350

Parte 4 - Escribiendo Shell Scripts ............................................. 353

ix24 - Escr ib ir su pr imer scr ip t . .................................................................... 354

Page 12: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 12/571

¿Qué son los scripts del Shell? .................................................................................. 354Cómo escribir un Shell Script ...................................................................................... 354Formato de archivo de secuencias de comandos ...................................................... 355Permisos de ejecutables ............................................................................................. 356Ubicación del archivo de secuencias de comandos ................................................... 356

Buenas ubicaciones para Scripts .......................................................................... 358

Más trucos de formato ................................................................................................ 358Nombres opción larga ............................................................................................ 358Sangría Y de continuación de línea ....................................................................... 358

Configuración de vim para la escritura de guiones .......................................... 359Resumiendo ................................................................................................................ 360Lectura adicional ......................................................................................................... 360

25 - Creación de un proy ecto. ....................................................................361Primera Etapa: Documento Mínimo ............................................................................ 361Segunda Etapa: Añadir un poco de datos .................................................................. 363Variables y constantes ................................................................................................ 364

 Asignación de valores a las variables y constantes .............................................. 367 Aquí Documentos ........................................................................................................ 368

Resumiendo ................................................................................................................ 371Lectura adicional ......................................................................................................... 371

26 - Dis eño Top-Down. ................................................................................372Funciones de Shell ...................................................................................................... 373Variables Locales ........................................................................................................ 376Mantenga Scripts Ejecución ....................................................................................... 377

Funciones Shell en su .bashrc Archivo............................................................. 380Resumiendo ................................................................................................................ 380Lectura adicional ......................................................................................................... 380

27 - Cont ro l de fluj o: B ifu rc ac io nes Con ................................................. s i.  381

si .................................................................................................................................. 381Estado de salida .......................................................................................................... 382prueba ......................................................................................................................... 384

Expresiones de archivos ........................................................................................ 384Expresiones de Cuerda ......................................................................................... 387Expresiones enteros .............................................................................................. 388

Una más moderna versión de prueba ........................................................................ 389(()) - Diseñado para los números enteros ................................................................... 391Combinando las expresiones ...................................................................................... 392

Portabilidad es el duende de las mentes pequeñas ......................................... 394Los operadores de control: Otra forma de Rama ....................................................... 394Resumiendo ................................................................................................................ 395

Lectura adicional ......................................................................................................... 396

28 - Lectura de entrada del teclado...........................................................397leer - leer valores de la entrada estándar ................................................................... 398

Opciones ................................................................................................................ 400

xIFS .......................................................................................................................... 402

Usted no puede leer Pipe ................................................................................. 404

Page 13: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 13/571

Entrada de Validación ................................................................................................. 404Menús .......................................................................................................................... 406

Resumiendo ................................................................................................................ 407Crédito extra .......................................................................................................... 407

Lectura adicional ......................................................................................................... 408

29 - Contro l de f lu jo: Looping Con t iempo / hasta. ..................................409Looping ........................................................................................................................ 409mientras ................................................................................................................. 409

Salir de un bucle ......................................................................................................... 412hasta ...................................................................................................................... 413

 Archivos de la lectura con Loops ................................................................................ 414Resumiendo ................................................................................................................ 415Lectura adicional ......................................................................................................... 415

30 - Solución de pro blemas. .......................................................................416Los errores sintácticos ................................................................................................ 416

Falta Cotizaciones ................................................................................................. 417Fichas faltan o inesperados ................................................................................... 417Expansiones imprevistos ....................................................................................... 418

Errores lógicos ............................................................................................................ 420Programación Defensivo ....................................................................................... 420Entrada de Verificación .......................................................................................... 422

El diseño es una función del tiempo ................................................................. 422Pruebas ....................................................................................................................... 422

Casos de prueba.................................................................................................... 423Depuración .................................................................................................................. 424

Encontrar el área del problema ............................................................................. 424Rastreo................................................................................................................... 424El examen de Valores durante la ejecución .......................................................... 427

Resumiendo ................................................................................................................ 427

Lectura adicional ......................................................................................................... 42831 - Contro l de f lu jo: Bi furcaciones Con el caso . ....................................429caso ............................................................................................................................. 429

Patrones ................................................................................................................. 431Realización de múltiples acciones......................................................................... 433

Resumiendo ................................................................................................................ 434Lectura adicional ......................................................................................................... 434

32 - Parámet ro s po sic ion ales. ....................................................................436Cómo acceder a la línea de comandos ...................................................................... 436

Determinar el número de argumentos ................................................................... 437cambiar - Conseguir acceso a muchos argumentos ............................................. 438

 Aplicaciones sencillas ............................................................................................ 439Uso de parámetros posicionales Con Funciones Shell......................................... 440

Manipulación de Parámetros posicionales En Masse ................................................ 441

xiUna aplicación más completa ..................................................................................... 443Resumiendo ................................................................................................................ 446Lectura adicional ......................................................................................................... 449

Page 14: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 14/571

33 - Control de f lu jo: Con Loop ing para. ..................................................450por: Tradicional Forma Shell ....................................................................................... 450

¿Por qué yo? ..................................................................................................... 452por: Formulario C Idioma ............................................................................................ 453Resumiendo ................................................................................................................ 454Lectura adicional ......................................................................................................... 455

34 - Cadenas y número s. ............................................................................456Expansión Parámetro .................................................................................................. 456

Parámetros básicos ............................................................................................... 456Expansiones para gestionar variables vacías ....................................................... 457Las expansiones que devuelven nombres de variable ......................................... 459Operaciones de Cuerda ......................................................................................... 459Caso Conversión ................................................................................................... 462

Evaluación aritmética y la expansión .......................................................................... 464Bases Número ....................................................................................................... 465Operadores unarios ............................................................................................... 465

 Aritmética simple .................................................................................................... 465

 Asignación .............................................................................................................. 467Operaciones de bits ............................................................................................... 469Lógica ..................................................................................................................... 470

bc - Una precisión arbitraria Calculadora Idioma ....................................................... 473Usando bc .............................................................................................................. 474Un script de ejemplo .............................................................................................. 475

Resumiendo ................................................................................................................ 476Crédito extra ................................................................................................................ 476Lectura adicional ......................................................................................................... 476

35 - Matrices . ................................................................................................478¿Qué son las matrices? .............................................................................................. 478Creación de un array ................................................................................................... 478

 Asignación de valores a una matriz ............................................................................ 479 Acceso a los elementos de matriz .............................................................................. 480Operaciones de matriz ................................................................................................ 482

Salida de todo el contenido del de una matriz ...................................................... 482Determinar el número de elementos de matriz ..................................................... 482Encontrar los subíndices utilizados por una matriz ............................................... 483

 Adición de elementos al final de una matriz .......................................................... 483Ordenación de un conjunto .................................................................................... 484Eliminación de una matriz ...................................................................................... 484

Las matrices asociativas ............................................................................................. 485Resumiendo ................................................................................................................ 486Lectura adicional ......................................................................................................... 486

36 - Exot ica. ..................................................................................................487

xnComandos Grupo Y subniveles .................................................................................. 487

Proceso de Sustitución .......................................................................................... 491Trampas ....................................................................................................................... 493

 Archivos temporales .......................................................................................... 495

Page 15: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 15/571

Ejecución asíncrona .................................................................................................... 496esperar ................................................................................................................... 496

Canalizaciones con nombre ....................................................................................... 498Configuración de una canalización con nombre .................................................... 498El uso de canalizaciones con nombre ................................................................... 499

Resumiendo ................................................................................................................ 499

Lectura adicional ......................................................................................................... 499Índ ic e. .............................................................................................................. 501

xiii

Page 16: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 16/571

 

xiv

Page 17: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 17/571

 

ParaKaren

xv

Page 18: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 18/571

Introducción

I  quiero contarles una historia.

No, no es la historia de cómo, en 1991, Linus Torvalds escribió la primera versión del kernel deLinux. Usted puede leer esa historia en un montón de libros de Linux. Tampoco voy a contarla historia de cómo, unos años antes, Richard Stallman comenzó el Proyecto GNU para crearun Unix libre como sistema operativo. Eso es una historia importante también, pero lamayoría de los otros libros de Linux tienen que uno, también.

No, yo quiero contar la historia de cómo se puede recuperar el control de su ordenador.

Cuando empecé a trabajar con los ordenadores como un estudiante de la universidad a finalesde 1970, hubo una revolución en marcha. La invención del microprocesador había hechoposible que la gente común como usted y yo a poseer en realidad un ordenador. Es difícil paramuchas personas hoy en día imaginar lo que era el mundo cuando sólo las grandes empresasy el gran gobierno corrían todos los ordenadores. Digamos, no se podía conseguir mucho porhacer.

Hoy en día, el mundo es muy diferente. Las computadoras están por todas partes, desdediminutos relojes de pulsera a los centros de datos gigantes a todo lo demás. Además de lascomputadoras en todas partes, también tenemos una red ubicua conectándolos entre sí. Estoha creado una nueva era maravillosa de empoderamiento personal y la libertad creativa, pero

en el último par de décadas, otra cosa que ha estado sucediendo. A pocas corporacionesgigantes han estado imponiendo su control sobre la mayor parte de las computadoras delmundo y decidir lo que puede y no puede hacer con ellos. Afortunadamente, la gente de todoel mundo están haciendo algo al respecto. Ellos están luchando para mantener el control desus computadoras, escribiendo su propio software. Están construyendo Linux.

Muchas personas hablan de "libertad" con respecto a Linux, pero no creo que la mayoría de lagente sabe lo que esto realmente significa la libertad. La libertad es el poder de decidir lo quehace el equipo, y la única manera de tener esta libertad es saber lo que el equipo está haciendo.La libertad es un equipo que es sin secretos, uno en el que todo puede ser conocido si teimporta lo suficiente para averiguarlo.

¿Por qué utilizar la línea de comandos?¿Alguna vez has notado en las películas, cuando el "super hacker," - ya sabes, el tipo quepuede entrar en el equipo militar ultra-segura en menos de treinta segundos, se sienta frente ala computadora, que nunca toca un ratón? Es porque los productores de películas se dancuenta de que nosotros, como seres humanos, instintivamente sabemos que la única manerade realmente hacer nada en un equipo

Page 19: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 19/571

xvi  es escribiendo en un teclado!

La mayoría de los usuarios de computadoras de hoy son sólo familiarizado con la interfazgráfica de usuario (GUI) y se les ha enseñado por los vendedores y los expertos que la interfazde línea de comandos (CLI) es una cosa aterradora del pasado. Esto es lamentable, porque unabuena interfaz de línea de comandos es una manera maravillosamente expresiva de la

comunicación con un ordenador de la misma forma en que la palabra escrita es para los sereshumanos. Se ha dicho que "las interfaces gráficas de usuario hacen tareas fáciles fácil, mientrasque las interfaces de línea de comandos hacen tareas difíciles posible", y esto es todavía muycierto hoy en día.

Desde Linux sigue el modelo de la familia Unix de sistemas operativos, que comparte lamisma herencia rica de herramientas de línea de comandos como Unix. Unix entró en laprominencia durante la década de 1980 (aunque fue desarrollado por primera vez en ladécada anterior), antes de la adopción generalizada de la interfaz gráfica de usuario y, comoresultado, desarrolló una extensa interfaz de línea de comandos en lugar. De hecho, una de lasrazones más fuertes los primeros usuarios de Linux lo eligieron sobre, por ejemplo, WindowsNT fue el potente interfaz de línea de comandos que hizo las "tareas difíciles posibles."

Lo que trata este libro

Este libro es una visión general de la "vida" en la línea de comandos de Linux. A diferencia dealgunos libros que se concentran en un solo programa, como el programa de shell, bash, estelibro va a tratar de transmitir cómo llevarse bien con la interfaz de línea de comandos en unsentido más amplio. ¿Cómo lo hace todo el trabajo? ¿Qué puede hacer? ¿Cuál es la mejormanera de usarlo?

Este no es un libro sobre administración de sistemas Linux. Mientras que cualquierdiscusión seria de la línea de comandos conducirá invariablemente a temas de administracióndel sistema, este libro sólo se toca en algunos temas de administración. Será, sin embargo,

preparar al lector para el estudio adicional, proporcionando una base sólida en el uso de lalínea de comandos, una herramienta esencial para cualquier tarea de administración delsistema serio.

Este libro es muy Linux-céntrica. Muchos otros libros tratan de ampliar su atractivo mediantela inclusión de otras plataformas como Unix genérico y OS X. Al hacerlo, ellos "agua abajo" sucontenido a sólo cuentan con temas generales. Este libro, por otro lado, sólo cubre lasdistribuciones de Linux contemporáneos. El noventa y cinco por ciento del contenido es útilpara los usuarios de otros sistemas tipo Unix, pero este libro está muy dirigido a los usuariosde línea de comandos de Linux moderna.

Quién debe leer este libro

Este libro es para los nuevos usuarios de Linux que han emigrado de otras plataformas. Lomás probable es que usted es un "usuario avanzado" de alguna versión de MicrosoftWindows. Tal vez su jefe le ha dicho que administrar un servidor Linux, o tal vez sólo eres unusuario de escritorio que está cansado de todos los problemas de seguridad y quieren dar unaoportunidad Linux. Eso está bien. Todos son bienvenidos aquí.

Dicho esto, no hay acceso directo a Linux iluminación. El aprendizaje de la línea de comandoses difícil y requiere un esfuerzo real. No es que es tan difícil, sino que es tan vasto. El AV-

Page 20: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 20/571

xviitura sistema Linux tiene literalmente miles de programas que usted puede emplear en la líneade comandos. Considérese advertido; el aprendizaje de la línea de comandos no es unesfuerzo ocasional.

Por otra parte, el aprendizaje de la línea de comandos de Linux es muy gratificante. Si usted

piensa que usted es un "usuario avanzado" Ahora, sólo tiene que esperar. Usted no sabe lo queel poder real es-todavía. Y, a diferencia de muchos otros conocimientos de informática, elconocimiento de la línea de comandos es de larga duración. Las habilidades aprendidas hoytodavía serán útiles dentro de diez años. La línea de comandos ha sobrevivido la prueba deltiempo.

También se asume que usted no tiene ninguna experiencia en programación, pero que no sepreocupe, nosotros le empezamos por ese camino también.

¿Qué hay en este libro

Este material se presenta en una secuencia cuidadosamente elegido, al igual que un profesorque se sienta a tu lado guiando a lo largo. Muchos autores tratan este material de manera"sistemática", lo cual tiene sentido desde la perspectiva de un escritor, pero puede ser muyconfuso para los nuevos usuarios.

Otro de los objetivos es que se familiarice con la forma de pensar de Unix, que es diferente dela forma en que Windows de pensar. En el camino, vamos a ir en un par de viajes de lado paraayudarle a entender por qué ciertas cosas funcionan de la manera que lo hacen y cómoconsiguieron esa manera. Linux no es sólo una pieza de software, es también una pequeñaparte de la cultura Unix más grande, que tiene su propio lenguaje y la historia. Yo podríalanzar en una diatriba o dos, también.

Este libro está dividido en cuatro partes, cada una cubriendo algún aspecto de la experienciade la línea de comandos:

•  Parte 1 - Aprender La Shell comienza nuestra exploración del lenguaje básico de lalínea de comandos que incluye cosas tales como la estructura de los comandos, lanavegación del sistema de archivos, edición de línea de comandos, y la búsqueda deayuda y documentación para los comandos.

•  Parte 2 - Configuración y el medio ambiente cubre la edición de archivos deconfiguración que controlan el funcionamiento de la computadora desde la línea decomandos.

•  Parte 3 - Tareas comunes y herramientas Esenciales explora muchas de las tareascomunes que se realizan habitualmente desde la línea de comandos. Sistemasoperativos tipo Unix, como Linux, contienen muchos programas "clásicos" de la líneade comandos que se utilizan para llevar a cabo operaciones de gran alcance en los

datos.•  Parte 4 - Escribiendo Shell Scripts presenta la programación de shell, una técnica

ciertamente rudimentario, pero fácil de aprender, para la automatización de muchastareas informáticas comunes. Al aprender la programación de shell, usted sefamiliarizará con los conceptos que se pueden aplicar a muchos otros lenguajes deprogramación.

Page 21: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 21/571

Cómo leer este libro

Comience desde el principio del libro y seguirlo hasta el final. No está escrito como una obrade referencia, que es realmente más como una historia con un principio, un medio y un fin.

xviii

Page 22: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 22/571

Requisitos previosPara utilizar este libro, todo lo que necesita es una instalación de Linux trabajando. Ustedpuede conseguir esto en una de dos maneras:

1.  Instalar Linux en una (no tan nuevo) equipo. No importa que la distribución queusted elija, aunque la mayoría de la gente hoy en día comienzan con cualquiera de

Ubuntu, Fedora, OpenSUSE o. En caso de duda, probar Ubuntu por primera vez. Lainstalación de una moderna distribución de Linux puede ser ridículamente fácil oridículamente difícil dependiendo de su hardware. Sugiero una computadora deescritorio que es un par de años de edad y tiene por lo menos 256 megabytes de RAMy 6 GB de espacio libre en el disco duro. Evite los ordenadores portátiles y redesinalámbricas, si es posible, ya que estas son a menudo más difícil conseguir trabajo.

2.  Use un "Live CD". Una de las cosas interesantes que puedes hacer con ellos muchasdistribuciones de Linux se ejecuta directamente desde un CD-ROM (o unidad flashUSB) sin instalarlos en absoluto. Sólo tienes que ir a la configuración del BIOS yconfigurar su computadora para "Arrancar desde CD-ROM", inserte el CD en vivo, yreiniciar el sistema. El uso de un CD en vivo es una gran manera de probar unordenador para la compatibilidad de Linux antes de la instalación. La desventaja deusar un CD en vivo es que puede ser muy lenta en comparación con tener Linuxinstalado en su disco duro. Tanto Ubuntu y Fedora (entre otros) tienen versiones enCD en vivo.

Independientemente de cómo instalar Linux, usted tendrá que tener superusuario ocasional(es decir, los privilegios administrativos) para llevar a cabo las lecciones de este libro.

Después de tener una instalación de trabajo, comenzar a leer y seguir con su propioordenador. La mayor parte del material de este libro es "manos en", por lo sentarse y llegar aescribir!

Page 23: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 23/571

¿Por qué no lo llaman "GNU / Linux"

En algunos sectores, es políticamente correcto llamar el sistema operativo Linux el"sistema operativo GNU / Linux." El problema con "Linux" es que no hay maneracompletamente correcta de nombrarlo porque fue escrita por muchas personasdiferentes en un vasto , esfuerzo de desarrollo distribuido. Técnicamente hablando,Linux es el nombre del núcleo del sistema operativo, nada más. El núcleo es muyimportante, por supuesto, ya que hace que el sistema operativo de ir, pero no essuficiente para formar un sistema operativo completo.Introduzca Richard Stallman, el genio-filósofo que fundó el movimiento del SoftwareLibre, comenzó la Fundación para el Software Libre, formado el Proyecto GNU,

escribió la primera versión de la GNU C Compiler (GCC), creado la Licencia PúblicaGeneral de GNU (GPL), etc., etc., etc. Él insiste en que usted lo llama "GNU / Linux"para reflejar adecuadamente las contribuciones del proyecto GNU. Mientras que elProyecto GNU es anterior a la del núcleo de Linux, y las contribuciones del proyectoson muy merecedores de reconocimiento, de colocarlos en el nombre es injusto paratodos los demás que hizo significativa

xix

Page 24: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 24/571

contribuciones. Además, creo que "Linux / GNU" sería técnicamente más preciso, yaque el núcleo arranca primero y todo lo demás corre encima de él.En el uso popular, "Linux" se refiere al núcleo y todo el resto del software libre y decódigo abierto que se encuentra en la típica distribución de Linux; es decir, todo elecosistema Linux, no sólo los componentes de GNU. El mercado de sistema operativoparece preferir nombres de una sola palabra, como DOS, Windows, Solaris, Irix, AIX.He optado por utilizar el popular formato. Sin embargo, si usted prefiere usar "GNU /Linux" en lugar, realice una búsqueda mentales-y-reemplazar al leer este libro. No meimporta.

Agradecimientos

I  quiere agradecer a las siguientes personas, que ayudaron a hacer posible este libro: Jenny Watson, Adquisiciones Editor en Wiley Publishing que originalmente me sugirió queescribiera un libro de secuencias de comandos de shell.

 John C. Dvorak, señaló el columnista y comentarista. En un episodio de su podcast de vídeo,"Cranky Geeks," Sr. Dvorak describe el proceso de la escritura: "El infierno. Escribir 200palabras al día y en un año, usted tiene una novela. "Este consejo me llevó a escribir unapágina al día hasta que tuve un libro.

Dmitri Popov, escribió un artículo en la Revista de Software Libre titulado "Creación de unaplantilla de libro con Writer", que me inspiró a utilizar OpenOffice.org Writer para componerel texto. Al final resultó que, funcionó maravillosamente.

Marcos Polesky realiza una revisión extraordinaria y prueba del texto.

 Jesse Becker, Tomasz Chrzczonowicz, Michael Levin, Spence Minero también probaron yrevisaron partes del texto.

Karen M. Shotts aportó una gran cantidad de horas, puliendo mi llamado Inglés editando eltexto.

Y por último, los lectores de  LinuxCommand.org,  Que me han enviado tantos correoselectrónicos amables. Su aliento me dio la idea de que yo estaba realmente en lo cierto!

Su regeneración es necesaria!

Este libro es un proyecto en curso, al igual que muchos proyectos de software de código

abierto. Si usted encuentra un error técnico, mándenme una línea en:[email protected]  

Sus cambios y sugerencias pueden entrar en futuras versiones.

xx

Page 25: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 25/571

¿Qué hay de nuevo en la segunda edición del Internet

Esta versión de la línea de comandos de Linux ha experimentado un cierto pulimento ymodernización adicional. En particular, la versión 4.x de bash se supone que es la versiónestándar y el texto se ha actualizado para reflejar esto. Los números de capítulo en la segundaedición del Internet ahora se alinean con los de la edición Sin Almidón de prensa. También me

fijé algunos errores;-).Un agradecimiento especial a las siguientes personas que proporcionaron información valiosasobre la primera edición: Adrian Arpidez, Hu Bo, Heriberto Cantú, Josué Escamilla, BruceFowler, Ma Jun, Seth King, Mike O'Donnell, Parviz Rasoulipour, Gabriel Stutzman, yCristiano Wuethrich.

Lectura adicional

•  Éstos son algunos de los artículos de Wikipedia sobre los personajes famososmencionados en este capítulo: http://en.wikipedia.org/wiki/Linus Torvalds http://en.wikipedia.org/wiki/Richard Stallman 

•  La Free Software Foundation y el Proyecto GNU:http://en.wikipedia.org/wiki/Free Software Foundation http://www.fsf.org http://www.gnu.org 

•  Richard Stallman ha escrito mucho sobre la "GNU / Linux" cuestión de nomenclatura:http://www.gnu.org/gnu/why-gnu-linux.html  http://www.gnu.org/gnu/ gnu-linux-faq.html # herramientas 

Colofón

Este libro fue escrito originalmente usando OpenOffice.org Writer en fuentes de Liberaciónserif y sans en un Dell Inspiron 530N, fábrica configurados con Ubuntu 8.04. La versión PDFdel texto se genera directamente por OpenOffice.org Writer. La Segunda Edición de Internetse produjo en el mismo ordenador usando LibreOffice escritor en Ubuntu 12.04.

xxi

Page 26: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 26/571

 

xxii

Page 27: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 27/571

 Parte 1 - Aprender La Shell

1

Page 28: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 28/571

[Me @ linuxbox ~]

1 - ¿Cuál es la cáscara?

1 - ¿Cuál es la cáscara?

Cuando hablamos de la línea de comandos, en realidad estamos hablando de la cáscara. Elshell es un programa que toma los comandos del teclado y los pasa al sistema operativo parallevar a cabo. Casi todas las distribuciones de Linux proporcionan un programa de shell de lallamada fiesta de Proyecto GNU. El nombre de "fiesta" es un acrónimo de "Bourne AgainShell", una referencia al hecho de bash es un sustituto mejorado para sh, el programa original

shell de Unix escrito por Steve Bourne.

Los emuladores de terminal

Cuando se utiliza una interfaz gráfica de usuario, necesitamos otro programa que se llama unemulador de terminal para interactuar con el shell. Si miramos a través de nuestros menús deescritorio, probablemente encontrar uno. KDE utiliza Konsole y GNOME usagnome-terminal, aunque lo más probable es llamado simplemente "terminal" en nuestromenú. Hay una serie de otros emuladores de terminal disponibles para Linux, pero todos ellosbásicamente hacen lo mismo; nos dará acceso a la cubierta. Es probable que el desarrollo deuna preferencia por uno u otro en función del número de campanas y silbatos que tiene.

Sus primeras pulsaciones de teclas

Así que vamos a empezar. Inicie el emulador de terminal! Una vez que aparece, deberíamosver algo como esto:

Esto se conoce como el intérprete de comandos y aparecerá cada vez que la cáscara está listopara aceptar la entrada. Si bien puede variar en apariencia un poco dependiendo de ladistribución, por lo general, incluya su nombre de usuario @ machinename, seguido por eldirectorio de trabajo actual (más sobre esto en un poco) y un signo de dólar.

Si el último carácter de la petición de orden es un signo de almohadilla ("#") en lugar de unsigno de dólar, la sesión de terminal con privilegios de superusuario. Esto significa quecualquiera de los dos nos iniciamos una sesión como usuario root o seleccionamos unemulador de terminal que ofrece superusuario (administrativa) privi-

2

Page 29: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 29/571

 

Sus primeraspulsaciones de teclas

leges.

Suponiendo que las cosas son buenas hasta ahora, vamos a tratar algunos de mecanografía.Ingrese algún galimatías en el símbolo de este modo:

[Me @ linuxbox ~] $ kaekfjaeifj

Desde este comando no tiene sentido, el shell nos dirá esto y darnos otra oportunidad:

bash: kaekfjaeifj: comando no encontrado [me@ linuxbox ~] $

Histórico de comandosSi pulsamos la tecla de flecha hacia arriba, veremos que el comando anterior "kaekfjaeifj"vuelve a aparecer después de la solicitud. Esto se llama la historia de comandos. La mayoríade las distribuciones de Linux recuerdan los últimos 500 comandos por defecto. Pulse la teclade flecha hacia abajo y el comando anterior desaparece.

Movimiento del cursorRecordemos el comando anterior con la tecla de flecha hacia arriba de nuevo. Ahora trata delas teclas de izquierda y derecha de flecha. Vea cómo podemos posicionar el cursor encualquier lugar de la línea de comandos? Esto hace que los comandos de edición fácil.

Algunas palabras sobre ratones y enfoque

Mientras que la cáscara es todo sobre el teclado, también puede utilizar un ratón consu emulador de terminal. Existe un mecanismo integrado en el Sistema de Ventanas X(el motor subyacente que hace que la marcha GUI) que soporta una técnica copiar ypegar rápido. Si resalta un texto manteniendo pulsado el botón izquierdo del ratón yarrastrando el ratón sobre ella (o doble clic sobre una palabra), se copia en un búfermantenido por X. Al pulsar el botón central del ratón hará que el texto que se pega en

la posición del cursor. Pruébalo.Nota: No tener la tentación de utilizar las teclas Ctrl-C y Ctrl-V para realizar lacopia y pegar dentro de una ventana de terminal. Ellos no trabajan. Estoscódigos de control tienen diferentes significados para la cáscara y se asignaronmuchos años antes de que Microsoft Windows. 

3

Page 30: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 30/571

 

1 - ¿Cuál es la cáscara?

Su entorno gráfico de escritorio (KDE o GNOME lo más probable), en un esfuerzo porcomportarse como Windows, probablemente tiene su política de enfoque ajustado en

"haga clic para enfocar." Esto significa, por una ventana para conseguir el enfoque (seactiva) es necesario hacer clic en ella. Esto es contrario a la conducta X tradicional de"foco sigue al ratón", que significa que una ventana se centran simplemente pasandoel ratón sobre él. La ventana no vienen a primer plano hasta que haga clic en él, sinoque será capaz de recibir la entrada. Establecimiento de la política de enfoque a "focosigue al ratón" hará que la técnica de copiar y pegar aún más útil. Darle unaoportunidad si se puede (algunos entornos de escritorio, tales como la Unidad deUbuntu ya no apoyarla). Creo que si le das una oportunidad usted preferiría. Va aencontrar este ajuste en el programa de configuración para el gestor de ventanas.

Pruebe algunos comandos simplesAhora que hemos aprendido a escribir, vamos a tratar algunos comandos simples. La primerade ellas es la fecha. Este comando muestra la hora y fecha actual.

[Me @ linuxbox ~] $ fechaJue 25 de octubre 2007 13:51:54EDT

Un comando relacionado es cal que, por defecto, muestra un calendario del mes en curso.

[Me @linuxbox  ] Cal $ 

Octubre  2007 Su Mo Tu  Nos

 

Th P.  Sa 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 

Para ver la cantidad actual de espacio libre en sus unidades de disco, escriba df:

[Me @ linuxbox ~] $ dfFilesystem  1K-blocks  Usado  Disponible 

Utilice%  Montado en 

/ Dev / sda2  15115452  5012392  9949716  34 

/ / Dev / sda5  59631908  26545424  30008432  47

 / Home 

/ Dev / sda1  147764  17370  122765  13% 

/ Boot 

4

Page 31: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 31/571

 

Pruebe algunos comandossimples

tmpfs 256856 0 256856 0% / dev / shm

Del mismo modo, para mostrar la cantidad de memoria libre, entre el mandatolibre.

[Me @ linuxbox ~] $ gratis usado total  libre 

compartido  tampones  caché 

Mem: 513712  503976  9736  0  5312  122916 - / + Buffers / cache:Intercambio: 1052248 

375748 104712 

137964 947536 

Poner fin a una sesión de terminal

Podemos terminar una sesión de terminal, ya sea el cierre de la ventana de emulador determinal, o introduciendo el comando exit en el intérprete de comandos:

[Me @ linuxbox ~] exit

La Consola Detrás de la cortina

Incluso si no tenemos un emulador de terminal en funcionamiento, varias sesiones determinal seguirá funcionando detrás del escritorio gráfico. Llamado terminalesvirtuales o consolas virtuales, estas sesiones se puede acceder en la mayoría dedistribuciones de Linux presionando Ctrl-Alt-F1 a Ctrl-Alt-F6. Cuando se accede auna sesión, se presenta un indicador de inicio de sesión en el que podemos introducirnuestro nombre de usuario y contraseña. Para cambiar de una consola virtual a otro,pulse la tecla Alt y F1-F6. Para volver al escritorio gráfico, presione Alt-F7.

Resumiendo

Al comenzar nuestro viaje, se nos presenta a la cáscara y vemos la línea de comandos, porprimera vez y aprender cómo iniciar y finalizar una sesión de terminal. También vemos cómoemitir algunos comandos simples y realizar un poco de edición de línea de comandos de laluz. Eso no era tan temible era?

5

Page 32: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 32/571

1 - ¿Cuál es la cáscara?

Lectura adicional

•  Para aprender más sobre Steve Bourne, padre de la Bourne Shell, consulte este artículode Wikipedia:

http://en.wikipedia.org/wiki/Steve Bourne •  He aquí un artículo sobre el concepto de conchas en la computación:

http://en.wikipedia.org/wiki/Shell (informática) 

62  -

Page 33: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 33/571

Navegación

2 - Navegación

Lo primero que tenemos que aprender (además de sólo escribir) es cómo navegar el sistema dearchivos en nuestro sistema Linux. En este capítulo vamos a introducir los siguientescomandos:

•  pwd - Escriba el nombre de directorio de trabajo actual

•  CD - Directorio de Cambio•  ls - Lista el contenido del directorio

Entender el archivo del árbol de sistemas

Al igual que Windows, un sistema operativo de tipo Unix como Linux organiza sus archivosen lo que se llama una estructura jerárquica de directorios. Esto significa que se organizan enun patrón en forma de árbol de directorios (a veces llamados carpetas en otros sistemas), quepueden contener archivos y otros directorios. El primer directorio en el sistema de archivos sellama el directorio raíz. El directorio raíz contiene archivos y subdirectorios, que contienenmás archivos y subdirectorios y así sucesivamente y así sucesivamente.

Tenga en cuenta que a diferencia de Windows, que tiene un árbol de sistema de archivosindependiente para cada dispositivo de almacenamiento, sistemas de tipo Unix como Linuxsiempre tienen un solo árbol del sistema de archivos, independientemente del número deunidades o dispositivos de almacenamiento están conectados al ordenador. Los dispositivosde almacenamiento están conectados (o más correctamente, montados) en varios puntos en elárbol de acuerdo a los caprichos del administrador del sistema, la persona (o personas)responsable del mantenimiento del sistema.

El directorio de trabajo actual

La mayoría de nosotros somos probablemente familiar con un administrador de archivosgráfico que representa el árbol del sistema de archivos como en la Figura 1. Tenga en cuenta

que el árbol por lo general se muestran volcó, es decir, con la raíz en la parte superior y lasdiversas ramas que descienden por debajo.

Sin embargo, la línea de comandos no tiene imágenes, por lo que para navegar por el árbol dedirectorios que tenemos que pensar en él de una manera diferente.

Page 34: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 34/571

7

Page 35: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 35/571

[Me @ linuxbox ~] $ pwd /home mí /

[me @ linuxbox ~] $ lsDocumentos de Escritorio Música Fotos Plantillas Públicos Videos

2 - Navegación ____________________________________________________________________

Imagine que el sistema de archivos es una forma de un árbol al revés laberinto y somoscapaces de

Bft / h bin D h CDde arranque deexploración yproducción deCD dev $ CD etclj casa i CDbshotts | $ CD ftpih CD karen! CDperdido encontró+

0 CD .enlightenment r

CD .gnome escritorio

que CD .gnome

Figura 1: Archivo árbol del sistema, como se

muestra por un administrador de archivos

 gráfico

pararse en el medio de ella. En un momento dado, estamos dentro de un solo directorio ypodemos ver los archivos contenidos en el directorio y la ruta al directorio por encima denosotros (llamado el directorio padre) y los subdirectorios por debajo de nosotros. El

directorio estamos de pie en se llama el directorio de trabajo actual. Para mostrar el directoriode trabajo actual, utilizamos los comandos pwd (print working directory).

Cuando nos registramos en nuestro sistema (o iniciar una sesión de emulador de terminal)nuestro directorio de trabajo actual se establece en nuestro directorio home. Cada cuenta deusuario tiene su propio directorio y es el único lugar donde se permite a un usuario normalpara escribir archivos.

Añadir el contenido de un directorioPara una lista de los archivos y directorios en el directorio de trabajo actual, utilizamos elcomando ls.

8

Page 36: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 36/571

[Me @ linuxbox ~] $ cd / usr / bin [me

@ bin linuxbox] $ pwd / usr / bin[Me @ bin linuxbox] $ ls

... Listado de muchos, muchos archivos ...

Añadir el contenido de un directorio

En realidad, podemos usar el comando ls para listar el contenido de cualquier directorio, nosólo el directorio de trabajo actual, y hay muchas otras cosas divertidas que puede hacertambién. Vamos a pasar más tiempo con ls en el próximo capítulo.

Cambiar el directorio de trabajo actual

Para cambiar su directorio de trabajo (donde estamos parados en nuestro laberinto en formade árbol) utilizamos el comando cd. Para ello, escriba cd seguido de la ruta del directorio detrabajo deseado. Una ruta de acceso es la ruta que tomamos a lo largo de las ramas del árbolpara llegar al directorio que queremos. Nombres de vías se pueden especificar en una de dosmaneras diferentes; como nombres de ruta absolutos o como rutas relativas. Vamos a tratarcon nombres de ruta absolutos primero.

Rutas absolutasUna ruta absoluta comienza con el directorio raíz y sigue la rama de un árbol por la rama hastaque se complete la ruta de acceso al directorio o archivo deseado. Por ejemplo, hay undirectorio de su sistema en el que la mayor parte de los programas de su sistema estáninstalados. La ruta de acceso del directorio es / usr / bin. Esto significa que desde el directorioraíz (representado por la barra inicial en el nombre de ruta) hay un directorio llamado "usr",que contiene un directorio llamado "bin".

Ahora podemos ver que hemos cambiado el directorio de trabajo actual a / usr / bin y queestá lleno de archivos. Observe cómo ha cambiado la línea de comandos? Para suconveniencia, por lo general se estableció para mostrar automáticamente el nombre deldirectorio de trabajo.

Rutas relativasCuando una ruta absoluta comienza desde el directorio raíz y conduce a su destino, unnombre de ruta relativa empieza desde el directorio de trabajo. Para ello, utiliza un par desímbolos especiales para representar posiciones relativas en el árbol del sistema de archivos.Estos símbolos son especiales "." (Punto) y ".." (punto punto).

El "." símbolo se refiere al directorio de trabajo y el ".." símbolo se refiere a directorio padre deldirectorio de trabajo. Aquí es cómo funciona. Vamos a cambiar el directorio de trabajo a

9

Page 37: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 37/571

 

2 - Navegación /

usr / bin de nuevo:

[Me @ linuxbox ~] $ cd / usr / bin [me@ bin linuxbox] $ pwd / usr / bin

Bien, ahora vamos a decir que queríamos cambiar el directorio de trabajo al padre de / usr /bin, que es / usr. Podríamos hacer que dos maneras diferentes. Ya sea con una ruta absoluta:

[Me @ linuxbox bin] $  cd / usr [Me @ linuxbox usr] pwd / Usr  

O, con una ruta de acceso relativa:

[Me @ linuxbox bin] $  cd .. [Me @ linuxbox usr] pwd / Usr  

Dos métodos diferentes con resultados idénticos. ¿Cuál debemos utilizar? La querequiere la menor mecanografía!

Del mismo modo, podemos cambiar el directorio de trabajo de / usr a / usr / bin en dosmaneras diferentes. O bien utilizando una ruta absoluta:

[Me @ linuxbox usr] $ cd / usr / bin [me@ bin linuxbox] $ pwd / usr / bin

O, con una ruta de accesorelativa:

[Me @ linuxbox usr] $ cd ./bin [me@ bin linuxbox] $ pwd / usr / bin

Ahora, hay algo importante que debo señalar aquí. En casi todos los casos, se puede

10

Page 38: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 38/571

[Me @ linuxbox usr] bin $ cd

Datos importantes sobre nombres de archivo

1.  Los nombres de archivo que comienzan con un carácter de punto están ocultos.Esto sólo significa que ls no enumerarlos a menos que usted dice ls -a. Cuando secreó su cuenta, varios archivos ocultos fueron colocados en el directorio de iniciopara configurar las cosas por su cuenta. Más tarde vamos a echar un vistazo másde cerca a algunos de estos archivos para ver cómo se puede personalizar elentorno. Además, algunas aplicaciones colocan sus archivos de configuración yajustes en su directorio personal como archivos ocultos.

2.  Los nombres de archivo y comandos en Linux, como Unix, mayúsculas yminúsculas. Los nombres de archivo "archivol" y "archivol" se refieren adiferentes archivos.

3.  Linux no tiene ningún concepto de una "extensión de archivo" como algunos otrossistemas operativos. Es posible que el nombre de los archivos como quieras. Loscontenidos y / o función de un archivo se determina por otros medios. Aunque elsistema operativo similar a Unix no utilice

Cambiar el directorio de trabajo actual

omitir el "./". Se da a entender. Mecanografía:

hace lo mismo. En general, si no se especifica una ruta de acceso a algo, se supone que el

directorio de trabajo.

 Algunos atajos útilesEn la Tabla 2-1 vemos algunas maneras útiles el directorio de trabajo actual se pueden cambiarrápidamente.

11

Tabla 2-1: Métodos abreviados de cd

Atajo  Resultado CD Cambia el directorio de trabajo al directorio de tu casa.

cd - Cambia el directorio de trabajo al directorio de trabajo anterior.

cd ~nombre_usuario

Cambia el directorio de trabajo al directorio principal denombre_usuario. Por ejemplo, cd ~ bob cambiará el directorio parael directorio de inicio del usuario "bob".

Page 39: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 39/571

las extensiones de archivo para determinar el contenido / el propósito dearchivos, algunos programas de aplicación hacen.

4. Aunque Linux soporta nombres de archivo largos que pueden contener espaciosincrustados y caracteres de puntuación, limitar los caracteres de puntuación enlos nombres de archivos se crea a período, guiones y subrayados. Lo másimportante, no incrustar espacios en los nombres de archivo. Si desea representarespacios entre palabras en un nombre de archivo, utilice caracteres de subrayado.Usted se agradecerá más tarde.

2 - Navegación

ResumiendoEn este capítulo hemos visto cómo la cáscara trata la estructura de directorios del sistema.Aprendimos sobre nombres de ruta absolutos y relativos y los comandos básicos que seutilizan para moverse por esa estructura. En el próximo capítulo vamos a utilizar esteconocimiento para ir en un tour de un moderno sistema Linux.

12

Page 40: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 40/571

[me @ linuxbox ~] $ lsDocumentos de Escritorio Música Fotos Plantillas Públicos Videos

3  - Exploración delsistema

3  - Exp loración del sis tema

Ahora que sabemos cómo mover todo el sistema de archivos, es el momento para una visitaguiada de nuestro sistema Linux. Antes de empezar, sin embargo, vamos a aprender algunoscomandos más que serán útiles a lo largo del camino:

•  ls - Lista el contenido del directorio

•  expediente - Determinar el tipo de archivo

•  menos - Ver el contenido del archivo

Más diversión con ls

El comando ls es probablemente el comando más utilizado, y por una buena razón. Con él,podemos ver el contenido del directorio y determinar una variedad de atributos de archivos ydirectorios importantes. Como hemos visto, podemos simplemente entrar ls para ver una listade archivos y subdirectorios contenidos en el directorio de trabajo actual:

O incluso especificar varios directorios. En este ejemplo vamos a enumerar tanto el directoriodel usuario doméstico (simbolizada por el carácter "~") y el directorio / usr:

Además del directorio de trabajo actual, podemos especificar el directorio a la lista, así:me @ linuxbox~  ] $ Ls / usr  

 juegos bin  kerberos  libexec  sbin  src etc incluyen  lib  local  cuota  tmp 

Page 41: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 41/571

[Me @ linuxbox ~] $ ls ~ / usr /home / me:

13

Page 42: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 42/571

 

3 - la exploración delsistema

Documentos de Escritorio Música Fotos Plantillas Públicos Videos

/ Usr:papelera juegos kerberos libexec sbin  srcetc incluir lib local cuota tmp

También podemos cambiar el formato de la salida a revelar más detalles:

[Me @ linuxbox ~] $ Ls  -l total de 56drwxrwxr-x  2  mí  mí  4096  2007-10-26  17:20  Escritorio drwxrwxr-x  2  mí  mí  4096  2007-10-26  17:20  Documentos drwxrwxr-x  2  mí  mí  4096  2007-10-26  17:20  Música drwxrwxr-x  2  mí  mí  4096  2007-10-26  17:20  Imágenes drwxrwxr-x  2  mí  mí  4096  2007-10-26  17:20  Público 

drwxrwxr-x  2  mí  mí  4096  2007-10-26  17:20  Plantillas drwxrwxr-x  2  mí  mí  4096  2007-10-26  17:20  Vídeos 

Mediante la adición de "-l" para el comando, cambiamos la salida al formato largo.

Opciones y argumentosEsto nos lleva a un punto muy importante sobre el funcionamiento de la mayoría de loscomandos. Comandos suelen ir seguidas de una o más opciones que modifican su

comportamiento, y, además, por uno o más argumentos, los artículos sobre los que los actosde comando. Así que la mayoría de los comandos se ven un poco como esto:

comando -Opcionesargumentos

La mayoría de los comandos utilizan las opciones que consisten de un solo carácter precedidopor un guión, por ejemplo, "-l", pero muchos de los comandos, entre ellos los del ProyectoGNU, también admiten opciones largas, que consiste en una palabra precedida de dosguiones. Además, muchos comandos permiten múltiples opciones cortas que se encadenan

 juntos. En este ejemplo, el comando ls se le da dos opciones, la opción "l" para producir la

salida de formato largo, y la opción de "t" para ordenar el resultado por hora de modificacióndel archivo.

[Me @ linuxbox ~] $ ls -lt

14

Page 43: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 43/571

[Me @ linuxbox ~] $ ls -lt --reverseMás diversión con ls

Vamos a añadir la opción larga "--reverse" para invertir el orden de la clase:

Tenga en cuenta que las opciones de comando, al igual que los nombres de archivos enLinux, entre mayúsculas y minúsculas.

El comando ls tiene un gran número de opciones posibles. Los más comunes se enumeran enla Tabla 3-1.

Tabla 3-1: ¿Es común Opciones

Opción  Largo Opción  Descripción -a --all Haga una lista de todos los archivos, incluso los

que tienen nombres que comienzan con unperíodo, que normalmente no figuran (es decir,

-A --casi todo-

Al igual que la opción -a anterior, excepto que nolista. (Directorio actual) y .. (directorio padre).

-d --directory Normalmente, si se especifica un directorio, LSlistar el contenido del directorio, no el propio directorio. Utilice esta opción junto con laopción -l para ver detalles sobre el directorio en lugar de su contenido.

-F --classifyEsta opción añadirá un carácter indicador hasta el

final de cada nombre de la lista. Por ejemplo, un "/"si el nombre es un directorio.

-h ---human legible En los listados de formato largo, mostrar tamañode los archivos en formato legible para las

-l Mostrar resultados en formato largo.-r --reverse

Mostrar los resultados en orden inverso.Normalmente, ls muestra sus resultados en ordenalfabético ascendente.

-S Ordenar los resultados por tamaño de archivo.

-t Ordenar por fecha de modificación.

15

Page 44: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 44/571

3 - Exploración del sistema

Una mirada a más largo At Long FormatoComo vimos antes, los "-l" causas opción ls para mostrar sus resultados en formato largo. Esteformato contiene una gran cantidad de información útil. Aquí es el directorio de ejemplos de

un sistema Ubuntu:

- r w - r   - r - -   1   raíz  raíz  3576296 2007-04-03  11  05  Experiencia ubuntu.ogg - r w - r   - r - -   1   raíz  raíz  1186219 2007-04-03  11  05  kubuntu-leaflet.png - r w - r   - r - -   1   raíz  raíz  47584 2007-04-03  11  05  logo-Edubuntu.png - r w - r   - r - -   1   raíz  raíz  44355 2007-04-03  11  05  logo-Kubuntu.png - r w - r   - r - -   1   raíz  raíz  34391 2007-04-03  11  05  logo-Ubuntu.png - r w - r   - r - -   1   raíz  raíz  32059 2007-04-03  11  05  oo-cd-cover.odf  - r w - r   - r - -   1   raíz  raíz  159744 2007-04-03  11  05  oo-derivatives.doc  - r w - r   - r - -   1   raíz  raíz  27837 2007-04-03  11  05  oo-maxwell.odt - r w - r   - r - -   1   raíz  raíz  98816 2007-04-03  11  05  oo-trig.xls - r w - r   - r - -   1   raíz  raíz  453764 2007-04-03  11  05  oo-welcome.odt - r w - r   - r - -  

1  raíz  raíz  358374 2007-04-03 

11 05  ubuntu Sax.ogg 

Echemos un vistazo a los diferentes campos de uno de los archivos y examinar sussignificados:Tabla 3-2: ¿Es campos Listing largas

Campo  Significado - r w - r - r - - Los derechos de acceso al archivo. El primer carácter indica el

tipo de archivo. Entre los diferentes tipos, un guión que llevasignifica un archivo normal, mientras que una "d" indica undirectorio. Los siguientes tres caracteres son los derechos deacceso para el propietario del archivo, el próximo tres sonpara los miembros del grupo del archivo, y la final tres son

para todos los demás. El significado completo de esto se

1 Número de archivo de enlaces duros. Véase el análisis de losvínculos más adelante en este capítulo.

raíz El nombre de usuario del propietario del archivo.

raíz El nombre del grupo que posee el archivo.

32059 Tamaño de archivo en bytes.2007-04-03 11:05 Fecha y hora de la última modificación del archivo.oo-cd-cover.odf Nombre del archivo.

16

Page 45: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 45/571

archivo denombre dearchivo 

[Me @ linuxbox ~] imagen.jpg $ archivopicture.jpg: datos de imagen JPEG, JFIF estándar 1.01

¿Qué es el "texto"?

Hay muchas formas de representar la información en un ordenador. Todos losmétodos implican la definición de una relación entre la información y algunosnúmeros que se utilizarán para representarla. Computadoras, después de todo, sóloentienden números y todos los datos se convierten a la representación numérica.Algunos de estos sistemas de representación son muy complejos (como los archivosde vídeo comprimido), mientras que otros son bastante simples. Uno de los primerosy más simple se llama texto ASCII. ASCII (pronunciado "Como-Key") es la abreviaturade American Standard

Determinar el tipo de un archivo con el archivo

Determinar el tipo de un archivo con el archivo

A medida que exploramos el sistema será útil para saber qué contienen los archivos. Para ellovamos a utilizar el comando file para determinar el tipo de un archivo. Como hemos

comentado anteriormente, los nombres de archivos en Linux no son necesarios para reflejar elcontenido de un archivo. Mientras que normalmente se esperaría que un nombre de fichero

como "picture.jpg" para contener una imagen JPEG comprimida, no se requiere que en Linux.Podemos invocar el comando de archivo de esta manera:

Cuando se invoca, el comando file imprimirá una breve descripción del contenido del archivo.Por ejemplo:

Hay muchos tipos de archivos. De hecho, una de las ideas comunes de los sistemas operativostipo Unix como Linux es que "todo es un archivo." A medida que avanzamos con nuestras

lecciones, veremos qué tan cierto que la declaración es.

Mientras que muchos de los archivos en su sistema son familiares, por ejemplo MP3 y JPEG,hay muchos tipos que son un poco menos obvio y algunos que son bastante extraña.

Viendo el contenido del archivo Con menos

El comando less es un programa para ver archivos de texto. A lo largo de nuestro sistema

Linux, hay muchos archivos que contienen texto legible. Cuanto menos programaproporciona una manera conveniente para examinarlos.

17

Page 46: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 46/571

 

3 - la exploración delsistema

Código para el Intercambio de Información. Se trata de un esquema de codificaciónsimple que fue utilizado por primera vez en las máquinas de teletipo para mapear los

caracteres del teclado a los números.El texto es una sencilla asignación uno a uno de los personajes a los números. Es muycompacto. Cincuenta caracteres de texto se traduce a cincuenta bytes de datos. Esimportante entender que sólo texto contiene un mapeo simple de caracteres quenúmeros. No es lo mismo que un documento de procesador de textos, como unocreado por OpenOffice.org Writer o Microsoft Word. Esos archivos, en contraste contexto ASCII simple, contienen muchos elementos no son de texto que se utilizan paradescribir su estructura y formato. Archivos de texto plano ASCII contienen sólo lospropios y unos códigos de control rudimentarias como tabuladores, retornos de carroy avances de línea caracteres.A lo largo de un sistema Linux, muchos archivos se almacenan en formato de texto y

hay muchas herramientas de Linux que trabajan con archivos de texto. InclusoWindows reconoce la importancia de este formato. El programa NOTEPAD.EXE bienconocido es un editor de archivos de texto ASCII sin formato.¿Por qué íbamos a querer examinar los archivos de texto? Debido a que muchos de los

archivos que contienen los ajustes del sistema (llamados archivos de configuración) sealmacenan en este formato, y ser capaz de leerlos nos da una idea de cómo funciona elsistema. Además, muchos de los programas reales que utiliza el sistema (llamados scripts) sealmacenan en este formato. En capítulos posteriores, vamos a aprender cómo editar archivosde texto con el fin de modificar la configuración de los sistemas y escribir nuestros propiosguiones, pero por ahora nos limitaremos a mirar su contenido.

El comando se utiliza menos como esto:

menos elnombre dearchivo 

Una vez iniciado, el programa less le permite desplazarse hacia adelante y hacia atrás a travésde un archivo de texto. Por ejemplo, para examinar el archivo que define todas las cuentas deusuario del sistema, escriba el siguiente comando:

[Me @ linuxbox ~] $ less / etc / passwd

Una vez que el programa se inicia menos, podemos ver el contenido del archivo. Si el archivoes más de una página, que puede desplazarse hacia arriba y hacia abajo. Para salir menos,pulse la tecla "q".

La siguiente tabla muestra los comandos de teclado más comunes utilizadas por menos.

18

Page 47: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 47/571

Menos es más

Cuanto menos programa fue diseñado como un reemplazo de la mejora de unprograma anterior de Unix llamada más. El nombre de "menos" es un juego en la frase"menos es más" -a lema de arquitectos modernistas y diseñadores.menos caídas en la clase de programas llamados programas que permiten la fácilvisualización de documentos de texto largo en una página por página de manera"buscapersonas". Considerando que el programa podría más adelante sólo la página,el programa permite menos paginación tanto hacia delante como hacia atrás y tienemuchas otras características también.

Viendo el contenido del archivo Con menos

Una visita guiada

El diseño del sistema de archivos en el sistema Linux es muy similar a la encontrada en otrossistemas Unix. El diseño es en realidad especificado en una norma publicada llamado el

sistema de archivos estándar de jerarquía Linux. No todas las distribuciones de Linux seajustan a la norma exactamente pero la mayoría vienen bastante cerca.

A continuación, vamos a pasear por el sistema de archivos a nosotros mismos para ver lo quehace que nuestro sistema Linux garrapata. Esto le dará la oportunidad de practicar sushabilidades de navegación. Una de las cosas que vamos a descubrir es que muchos de losarchivos interesantes están en texto legible por humanos llanura. A medida que avanzamos ennuestro recorrido, pruebe lo siguiente:

19

Comando  Acción 

Pág o b Vaya a la página anterior

Av Pág o espacio Avanzar una páginaFlecha arriba Desplazarse una línea hacia arribaFlecha abajo Desplazarse una línea hacia abajoG Ir al final del archivo de texto

1G o g Ir al principio del archivo de texto

/ caracteres Buscar en adelante a la siguiente aparición de personajes

n Busca la siguiente aparición de la búsqueda anterior

h Visualizar la pantalla de ayuda

q Salga menos

Tabla 3-3: Comandos menos

Page 48: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 48/571

3 - la exploración del sistema

1.  CD en un directorio dado

2.  Liste el contenido del directorio con ls -l

3.  Si ve un archivo interesante, determinar su contenido con archivo

4.  Si parece que puede ser texto, trate de verlo con menos

Recuerde que el copiar y pegar truco! Si está utilizando un ratón, puede hacer doble clicen un nombre de archivo para copiarlo y medio haga clic para pegarlo en comandos.

Al pasear, no tengas miedo de mirar a las cosas. Los usuarios normales están en gran medidaprohibidos de ensuciar las cosas. Ese es el trabajo de los administradores de sistema! Si uncomando se queja de algo, simplemente pasar a otra cosa. Pasa algún tiempo mirando a sualrededor. El sistema es el nuestro para explorar. Recuerde, en Linux, no hay secretos!

Tabla 3-4 enumera sólo algunos de los directorios que podemos explorar. Siéntase libre de

probar más!

Una visita guiada

Tabla 3-4: Directorios encontrados en sistemas Linux

Directorio  Comentarios / El directorio raíz. ¿Dónde empieza todo./ Bin

Contiene binarios (programas) que deben estar presentes paraque el sistema arranque y funcionamiento.

/ Boot Contiene el kernel de Linux, imagen de disco RAM inicial (paralos conductores necesarios en el arranque), y el gestor dearranque.

Archivos de interés:

•  /boot/grub/grub.conf o menu.lst, que se utilizan paraconfigurar el gestor de arranque.

•  Boot vmlinuz el kernel de Linux/ Dev Este es un directorio especial que contiene nodos de dispositivos.

"Todo es un archivo" también se aplica a los dispositivos. Aquí esdonde el kernel mantiene una lista de todos los dispositivos que

20

Page 49: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 49/571

 

21

Directorio  Comentarios / Etc

El / etc directorio contiene todos los archivos de configuraciónde todo el sistema. También contiene una colección de scripts deshell que se inician cada uno de los servicios del sistema en elarranque. Todo en este directorio debe ser un texto legible.

Archivos interesantes: Aunque todo en / etc es interesante, aquíestán algunos de mis favoritos de todos los tiempos:

•  / Etc / crontab, un archivo que define cuando lostrabajos se ejecutarán automatizados.

•  / Etc / fstab, una tabla de dispositivos dealmacenamiento y sus puntos de montaje asociados.

•  / Etc / passwd, una lista de las cuentas de usuario./ Home

En configuraciones normales, cada usuario se le da un directorioen / home. Los usuarios normales sólo pueden escribir archivos

en sus directorios de inicio. Esta limitación protege el sistema dela actividad del usuario errante./ Lib Contiene los archivos de bibliotecas compartidas utilizadas por

los programas del sistema base. Estos son similares a los

/ Perdidoencontrado +

Cada partición con formato o dispositivo mediante un sistema dearchivos de Linux, tales como ext3, tendrá este directorio. Se utiliza enel caso de una recuperación parcial de un evento de corrupción delsistema de archivo.

A menos que algo realmente malo le ha sucedido a su sistema,

/ medios En los sistemas Linux modernos el directorio / media contendrá

los puntos de montaje para medios extraíbles, como unidadesUSB, CD-ROM, etc., que se montan automáticamente en lainserción.

/ MntEn los sistemas Linux de más edad, el directorio / mnt contienelos puntos de montaje para los dispositivos extraíbles que hansido montadas manualmente.

/ OptEl / opt directorio se utiliza para instalar el software "opcional".Esto se utiliza principalmente para mantener los productos desoftware comerciales que puedan estar instalados en su sistema.

Page 50: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 50/571

 

22

3 - la exploración del sistemaDirectorio  Comentarios / Proc

El / proc directorio es especial. No es un sistema de archivos realen el sentido de los archivos almacenados en su disco duro. Másbien, es un sistema de archivos virtual mantenida por el kernel

de Linux. Los "archivos" que contiene son mirillas en el propionúcleo. Los archivos se pueden leer y le dará una idea de cómo elnúcleo ve su computadora.

/ Root Este es el directorio inicial de la cuenta de root./ Sbin

Este directorio contiene los binarios del "sistema". Estos sonprogramas que realizan tareas vitales del sistema que songeneralmente reservados para el superusuario.

/ TmpEl directorio / tmp está destinado para el almacenamiento dearchivos temporales, transitorios creados por diferentesprogramas. Algunas configuraciones causan este directorio para

ser vaciado cada vez que se reinicia el sistema./ Usr

El directorio / usr árbol de directorios es probablemente el másgrande en un sistema Linux. Contiene todos los archivos yprogramas de apoyo utilizados por los usuarios regulares.

/ Usr / bin/ Usr / bin contiene los programas ejecutables instalados por sudistribución de Linux. No es poco común para este directoriopara almacenar miles de programas.

/ Usr / lib Las bibliotecas compartidas para los programas en / usr / bin.

/ Usr / local El directorio / usr / local árbol es donde se instalan los

programas que no están incluidos con su distribución sino quese destinan para el uso de todo el sistema. Programascompilados desde el código fuente normalmente se instalan en /usr / local / bin. En un sistema Linux recién instalado, existeeste árbol, pero estará vacía hasta que el administrador del

/ Usr / sbin Contiene más programas de administración del sistema./ Usr / share / Usr / share contiene todos los datos compartidos utilizados

por los programas en / usr / bin. Esto incluye cosas como losarchivos de configuración por defecto, los iconos, fondos depantalla, archivos de sonido, etc.

/ Usr / share / doc La mayoría de los paquetes instalados en el sistema incluiránalgún tipo de documentación. En / usr / share / doc, vamos aencontrar los archivos de documentación organizados por

Page 51: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 51/571

 

Note como la primera letra de la lista es "l" y la entrada parece tener dos nombres de archivo?Este es un tipo especial de un archivo llamado un enlace simbólico (también conocido comoenlace blando o enlace bolo.) En sistemas más Unix que es posible tener un archivoreferenciado por varios nombres. Mientras que el valor de este puede no ser obvio, esrealmente una característica útil.

Imagínese este escenario: Un programa requiere el uso de un recurso compartido de unaespecie que figura en un archivo llamado "foo", pero "foo" tiene cambios de versión frecuentes.Sería bueno incluir el número de versión en el nombre del archivo para que el administrador uotra parte interesada podía ver qué versión de "foo" se instala. Esto presenta un problema. Sicambiamos el nombre del recurso compartido, tenemos que localizar a cada programa quepueda usarlo y modificarlo para buscar un nuevo nombre de recurso cada vez que se instalauna nueva versión del recurso. Eso no suena como la diversión en absoluto.

Aquí es donde los enlaces simbólicos salvar el día. Digamos que instalar la versión 2.6 de"foo", que tiene el nombre de archivo "foo-2.6" y luego crear un enlace simbólico llamadosimplemente "foo" que apunta a "foo-2.6." Esto significa que cuando un programa se abre elarchivo " foo ", en realidad está abriendo el archivo" foo-2.6 ". Ahora todo el mundo es feliz.

Los programas que se basan en "foo" pueden encontrarlo y todavía podemos ver lo que laversión actual instalada. Cuando es el momento de actualizar a "foo-2.7," que acabamos deagregar el archivo a nuestro sistema, eliminar el enlace simbólico "foo" y crear una nueva queapunta a la nueva versión. Esto no sólo resuelve el problema de la actualización de la versión,sino que también nos permite mantener ambas versiones en nuestra máquina. Imagina que"foo-2.7" tiene un error (maldita aquellos desarrolladores!) Y tenemos que volver a la versiónantigua. Una vez más, acabamos de eliminar el vínculo simbólico que apunta a la nuevaversión y crear una nueva

Una visita guiada

Directorio  Comentarios / Var Con la excepción de / tmp y / home, los directorios que hemos

visto hasta el momento siguen siendo relativamente estático, es

decir, sus contenidos no cambian. El árbol de directorios / var esdonde se almacenan los datos que es probable que cambie.Varias bases de datos, archivos de cola, correo de usuario, etc., se

/ Var / log / Var / log contiene archivos de registro, registros de diversasactividades del sistema. Estos son muy importantes y deben servigilados de vez en cuando. La más útil es / var / log /messages. Tenga en cuenta que por razones de seguridad enalgunos sistemas, debe ser superusuario para ver los archivos de

Enlaces simbólicos 

Al mirar alrededor, que es probable que veamos un listado de directorios con una entradacomo esta:

lrwxrwxrwx 1 raíz  raíz 11 2007-08-11 07:34 libc.so.6 -> libc-2.6.so 

Page 52: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 52/571

233  - Exploración del sistema ________________________________________________________

enlace simbólico que apunta a la versión antigua.

El listado del directorio anterior (desde el directorio / lib de un sistema Fedora) muestra unenlace simbólico llamado "libc.so.6" que apunta a un archivo de biblioteca compartida

denominada "libc-2.6.so." Esto significa que los programas en busca de " libc.so.6 "en realidadobtener el archivo" libc-2.6.so. "Vamos a aprender cómo crear enlaces simbólicos en elpróximo capítulo.

Enlaces duros

Ya que estamos en el tema de los vínculos, tenemos que mencionar que hay un segundo tipode enlace llamado un enlace duro. Los enlaces duros también permitir que los archivos quetienen varios nombres, pero lo hacen de una manera diferente. Hablaremos más sobre lasdiferencias entre los enlaces simbólicos y duros en el próximo capítulo.

ResumiendoCon nuestro tour detrás de nosotros, hemos aprendido mucho acerca de nuestro sistema.Hemos visto varios archivos y directorios y sus contenidos. Una cosa que usted debe tomardistancia de todo esto es el grado de apertura del sistema es. En Linux hay muchos archivosimportantes que son texto sin formato legible por humanos. A diferencia de muchos sistemaspropietarios, Linux hace todo lo disponible para su examen y estudio.

Lectura adicional

•  La versión completa de la jerarquía del sistema de ficheros estándar de Linux se puedeencontrar aquí: http://www.pathname.com/fhs/  

•  Un artículo sobre la estructura de directorios de los sistemas Unix y tipo Unix:http://en.wikipedia.org/wiki/Unix estructura de directorios 

•  Una descripción detallada del formato de textoASCII: http://en.wikipedia.org/wiki/ASCII  

24

Page 53: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 53/571

-u cp * .html destino

4  - Manipulación de archivos ydirectorios

4 - Manipu lación de archivos y director ios

En este punto, estamos listos para un trabajo de verdad! Este capítulo introducirá lossiguientes comandos:

•  cp - Copia de archivos y directorios

•  mv - Mover / renombrar archivos y directorios

•  m k d i r - Crear directorios

•  rm - Eliminar los archivos y directorios

•  ln - Crear enlaces duros y simbólicosEstos cinco comandos están entre los comandos de Linux de uso más frecuente. Se utilizanpara la manipulación de archivos y directorios.

Ahora, para ser franco, algunas de las tareas realizadas por estos comandos son más fáciles dehacer con un administrador de archivos gráfico. Con un administrador de archivos, podemosarrastrar y soltar un archivo de un directorio a otro, cortar y pegar archivos, eliminar archivos,etc Por lo tanto ¿por qué usar estos viejos programas de línea de comandos?

La respuesta es el poder y la flexibilidad. Si bien es fácil de realizar manipulaciones dearchivos simples con un gestor de archivos gráfico, tareas complicadas puede ser más fácil conlos programas de línea de comandos. Por ejemplo, ¿cómo podríamos copiar todos los archivosHTML a partir de un directorio a otro, pero sólo copiar los archivos que no existen en el

directorio de destino o son más recientes que las versiones en la carpeta de destino? Bastanteduro con un administrador de archivos. Bastante fácil con la línea de comandos:

Los comodines

Antes de comenzar el uso de nuestros comandos, tenemos que hablar de una función de shellque hace que estos comandos de manera poderosa. Desde el shell utiliza nombres de archivotanto, proporciona caracteres especiales para ayudarle a especificar rápidamente grupos denombres de archivo. Estos caracteres especiales son

25

Page 54: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 54/571

4  - Manipulación de archivos y directorios llamados comodines. Uso de comodines (quetambién se conoce como comodines) le permiten seleccionar los nombres de archivo basado enpatrones de caracteres. La siguiente tabla muestra los caracteres comodín y lo que seleccione:

El uso de comodines hace posible la construcción de criterios de selección muy sofisticadospara los nombres de archivo. He aquí algunos ejemplos de patrones y lo que coinciden:

Tabla 4-1: Los comodines

Comodín  Significado 

* Coincide con cualquier carácter? Coincide con cualquier carácter individual

 [personajes]  Coincide con cualquier carácter que es un miembro de los

ersona es de a uste[! caracteres] Coincide con cualquier carácter que no sea un miembro de los

personajes de ajuste

[[: Clase:]] Coincide con cualquier carácter que es miembro de la claseespecificada

Tabla 4-2 enumera losmás comúnmente utilizado clases de personajes:Tabla 4-2: Clases de personajes más utilizadas 

Carácter de clase  Significado 

[ : A l n u m : ] Coincide con cualquier carácter alfanumérico

[ : A l p h a : ] Coincide con cualquier carácter alfabético

[ : D íg i t o : ] Coincide con cualquier número

[ : L o w e r : ] Coincide con cualquier letra minúscula[ : U p p e r : ] Coincide con cualquier letra mayúscula

Tabla 4-3: Ejemplos de comodines

Patrón  Cerillas * Todos los archivos

g * Cualquier archivo que comienzan con "G"

b * . t x tCualquier archivo que comienzan con "b"

cualquier carácter y terminando con ".txt"

26

Page 55: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 55/571

 

Los comodines

Datos ???Cualquier archivo que comienzan con "datos",seguido de exactamente tres personajes

[ A b c ] *Cualquier archivo que comienza con una "A","B", o una "c"

C O P I A D E S E G U R I D A D . [ 0 - 9 ][ 0 - 9 ] [ 0 - 9 ]

Cualquier archivo que comienzan con "COPIADE SEGURIDAD.", Seguido de exactamente

[ [ : U p p e r : ] ] *Cualquier archivo que comienzan con una letrama úscula

[ [ : D í g i t o : ] ] *Cualquier archivo que no empiece con unnumeral

* [ [ : L o w e r : ] 1 2 3 ]Cualquier archivo que termina con una letraminúscula o los números "1", "2" o "3"

Los comodines se pueden usar con cualquier comando que acepta nombres de archivo comoargumentos, pero vamos a hablar más sobre esto en el capítulo 7.

Rangos de caracteres

Si usted viene de otro entorno Unix o ha estado leyendo algunos otros libros sobreeste tema, es posible que haya encontrado el [AZ] o los [AZ] notaciones rango decaracteres. Estas son las notaciones tradicionales de Unix y trabajaron en las versionesanteriores de Linux también. Aún así, pueden trabajar, pero hay que tener muchocuidado con ellos porque no van a producir los resultados esperados a menos que se

configura correctamente. Por ahora, usted debe evitar el uso de ellos y utilizar clasesde caracteres en lugar.

Los comodines trabajar en la interfaz gráfica de usuarioDemasiado

Los comodines son especialmente valiosos no sólo porque se utilizan con tantafrecuencia en la línea de comandos, pero también son apoyados por algunosadministradores de archivos gráficos.•  En Nautilus (el gestor de archivos para GNOME), puede seleccionar archivos

utilizando el / Seleccionar opción de menú Pattern Edit. Sólo tienes queintroducir un patrón de selección de archivos con comodines y los archivos en el

directorio que se está viendo se resaltará para la selección.•  En algunas versiones de Dolphin y Konqueror (los administradores de archivospara KDE), puede introducir comodines directamente en la barra de direcciones.Por ejemplo, si desea ver todos los archivos a partir de una minúscula "u" en eldirectorio / usr / bin, escriba "/ usr / bin / u *" en la barra de direcciones y semostrará el resultado.

27

Page 56: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 56/571

Muchas ideas originalmente se encuentran en la interfaz de línea de comandos seabren camino en la interfaz gráfica, también. Es una de las muchas cosas que hacenque el escritorio de Linux tan poderoso.

4  - Manipulación de archivos y directorios

mkdir - Crea Directorios

El comando mkdir se utiliza para crear directorios. Funciona así:

mkdir directorio ...

Una nota sobre la notación: Cuando tres períodos siguen un argumento en la descripción deun comando (como arriba), significa que el argumento se puede repetir, por lo tanto:

mkdir dirl

crearía un único directorio llamado "dirl", mientras

mkdir dirl dir2 directorio3

crearía tres directorios llamados "dirl", "dir2", y "directorio3".

cp - copia ficheros y directorios

El comando cp copia archivos o directorios. Se puede utilizar de dos maneras

diferentes: cp iteml item2

para copiar el archivo o directorio único "iteml" para el archivo o directorio

"elemento2" y: cp artículo ... directorio

copiar varios elementos (ya sean archivos o directorios) en un directorio.

28

Page 57: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 57/571

cp - copia ficheros y directorios

Opciones útiles y ejemplosEstas son algunas de las opciones de uso común (a corto y la opción larga equivalente) paracp:

29

Tabla 4-4: Opciones cpOpción  Significado -a, --archive

Copie los archivos y directorios y todos sus atributos,incluyendo propiedades y permisos. Normalmente, lascopias adquieren los atributos por defecto del usuario querealiza la copia.

-i, --interactiveAntes de sobrescribir un archivo existente, pediráconfirmación al usuario. Si no se especifica esta opción, cpsilenciosamente sobrescribir archivos.

-r, --recursive Recursivamente copiar directorios y sus contenidos. Esta

opción es necesaria (o la opción -a) al copiar directorios.

-u, --updateAl copiar archivos de un directorio a otro, sólo copiar losarchivos que, o bien no existen, o son más recientes que losarchivos correspondientes ya existentes, en el directorio dedestino.

-v, --verbose

Mostrar mensajes informativos como se realiza la copia.

Tabla 4-5: Ejemplos cpComando  Resultados cp archivol archivo2 Copie archivo1 a archivo2. Si existe archivo2, se sobrescribe

con el contenido de archivol. Si archivo2 no existe, se crea.

cp -i archivol archivo2Igual que el anterior, excepto que si existe archivo2, sesolicita al usuario antes de que se sobrescribe.

cp archivol archivo2 dirlCopie archivo1 archivo2 y en el directorio dir1. dir1 yadebe existir.

dirl cp / * dir2

El uso de un comodín, todos los archivos se copian endir1 dir2. dir2 ya debe existir.

Page 58: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 58/571

mv itemielemento2 

elemento mv ...directorio 

4 - La manipulación de archivos y directorios

cp -r dirl dir2 Copie el contenido del directorio dirl al directoriodir2. Si dir2 directorio no existe, se crea y, después de lacopia, contendrá el mismo contenido que el directorio

dirl.Si no existe el directorio dir2, entonces dirl directorio (ysus contenidos) se copiarán en dir2.

mv - Mover y renombrar archivos

El comando mv realiza tanto archivo de movimiento y cambiar el nombre de archivo,dependiendo de cómo se utiliza. En cualquier caso, el nombre de archivo original ya no existe

después de la operación. mv se utiliza en la misma forma como cp:

mover o cambiar el nombre de archivo o directorio "itemi" a "elemento2" o:

para mover uno o más objetos de un directorio a otro.

Opciones útiles y ejemplos

acciones mv muchas de las mismas opciones que cp:Tabla 4-6: Opciones mv

Opción  Significado -i, --interactive

Antes de sobrescribir un archivo existente, pediráconfirmación al usuario. Si no se especifica esta opción, semv silencio sobrescribir archivos.

-u, --updateAl mover archivos de un directorio a otro, sólo moverarchivos que o bien no existen, o son más recientes que losarchivos correspondientes existentes en el directorio dedestino.

-v, --verbose Mostrar mensajes informativos como el movimiento es

30

Page 59: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 59/571

mv - Mover y renombrar archivos

realizado.

Tabla 4-7: Ejemplos mv 

Comando  Resultados archivo2 mv archivol

Mueva archivo1 a archivo2. Si existe archivo2, se sobrescribecon el contenido de archivol. Si archivo2 no existe, se crea. En

cualquier caso, archivol deja de existir.mv -i archivol archivo2

Igual que el anterior, excepto que si existe archivo2, sesolicita al usuario antes de que se sobrescribe.

mv archivol archivo2 dirlMueva archivo1 archivo2 y en el directorio dir1. dir1 yadebe existir.

mv dirl dir2Si dir2 directorio no existe, crear el directorio dir2 ymover el contenido del directorio dir1 en dir2 y borrardirectorio dir1.Si no existe el directorio dir2, mover dir1 directorio (y

sus contenidos) en el directorio dir2.

rm - Quitar los archivos y directorios El comando rm se utiliza para eliminar (borrar) los archivos y directorios:

elementorm ... 

donde "elemento" es uno o más archivos o directorios.

Opciones útiles y ejemplos

Estas son algunas de las opciones comunes para rm:Tabla 4-8: Opciones rm

Opción Significado

-i, --interactive Antes de borrar un archivo existente, solicitar al usuarioconfirmación. Si no se especifica esta opción, rmsilenciosamente eliminar archivos.

31

Page 60: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 60/571

 

4 - La manipulación de archivos y directorios-r, --recursive Recursivamente borrar directorios. Esto significa que si se

elimina un directorio tiene subdirectorios, eliminarlostambién. Para borrar un directorio, esta opción se debe

-f, --forceIgnorar archivos inexistentes y no se pedirá. Esto anula laopción - -interactive.

-v, --verboseMostrar mensajes informativos como se lleva a cabo laeliminación.

Tabla 4-9: Ejemplos rm Comando  Resultados 

archivol rm Eliminar archivol silencio.

rm -i archivolIgual que el anterior, excepto que se solicita al usuario

que confirme antes de realizar la eliminación.

rm -r archivol dirl Eliminar archivol y dirl y su contenido.rm -rf archivol dirl Igual que el anterior, excepto que si bien archivol o dirl

no existen, rm continuará en silencio.

Tenga cuidado con

rm!Sistemas operativos tipo Unix como Linux no tienen un comando de recuperar. Unavez que se elimina algo con rm, que se ha ido. Linux asume que eres inteligente ysabes lo que estás haciendo.Tenga especial cuidado con comodines. Considere este ejemplo clásico. Digamos queusted quiere eliminar sólo los archivos HTML en un directorio. Para ello, escriba: rm *.htmlque es correcta, pero si se coloca accidentalmente un espacio entre el "*" y el ".html",así: rm * .htmlel comando rm eliminará todos los archivos del directorio y luego se quejan de que nohay un archivo llamado ".html".

He aquí un consejo útil. Siempre que utilice los comodines con rm (además deuna revisión cuidadosa de su escritura!), Probar el comodín primero con ls. Estole permitirá ver el 

32

Page 61: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 61/571

archivos que se eliminarán. A continuación, pulse la tecla de flecha hacia arriba pararecuperar el comando y vuelva a colocar los ls con rm.

vínculo dearchivo ln 

enlace elementoln -s 

rm - Quitar los archivos y directorios

ln - Crear enlaces

El comando ln se utiliza para crear vínculos, ya sea duro o simbólicos. Se utiliza en una de dos

maneras:

para crear un enlace duro, y:

para crear un enlace simbólico donde "elemento" es un archivo o un directorio.

Enlaces durosLos enlaces duros son la manera original de Unix de crear vínculos, en comparación con losenlaces simbólicos, que son más modernos. De forma predeterminada, cada archivo tiene unúnico vínculo físico que da el archivo su nombre. Cuando creamos un vínculo físico, creamosuna entrada de directorio adicional para un archivo. Los enlaces duros tienen dos limitacionesimportantes:

1.  Un enlace duro no puede hacer referencia a un archivo fuera de su propio sistema dearchivos. Esto significa que un enlace no puede hacer referencia a un archivo que no

está en la misma partición de disco como el propio enlace.2.  Un enlace duro no puede hacer referencia a un directorio.

Un enlace duro es indistinguible de la del propio archivo. A diferencia de un enlace simbólico,cuando la lista de un directorio que contiene un enlace duro verá ninguna indicación especialdel enlace. Cuando se elimina un enlace duro, se quita el enlace, pero se borran los contenidosdel archivo en sí siguen existiendo (es decir, su espacio no se desasigna) hasta que todos losvínculos al archivo.

Es importante ser consciente de los vínculos físicos, ya que podría encontrarse con ellos de vezen cuando, pero la práctica moderna prefiere enlaces simbólicos, que vamos a cubrir lapróxima.

Enlaces simbólicosLos enlaces simbólicos se crearon para superar las limitaciones de los enlaces duros. Losenlaces simbólicos de trabajo mediante la creación de un tipo especial de archivo que contieneun puntero de texto al archivo o referencia

33

Page 62: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 62/571

[Me @ linuxbox ~] $ cd [me @ linuxbox ~] $mkdir parque infantil

[Me @ linuxbox ~] patio $ cd [me @ patio linuxbox] $mkdir dirl dir2

4 - La manipulación de archivos y directorios directorio. En este sentido, funcionan casi de lamisma manera que un acceso directo de Windows aunque, por supuesto, que son anteriores ala característica de Windows por muchos años;-)Un archivo al que apunta un enlace simbólico, y el propio enlace simbólico son en granmedida indistinguibles el uno del otro. Por ejemplo, si escribes algo al enlace simbólico, elarchivo de referencia se escribe. Sin embargo, cuando se elimina un enlace simbólico, sólo se

elimina el enlace, no el archivo en sí. Si el archivo se elimina antes de que el enlace simbólico,el enlace seguirá existiendo, pero apuntará a nada. En este caso, se dice que el enlace no estarfuncionando. En muchas implementaciones, el comando ls mostrará enlaces rotos en un colordistintivo, como el rojo, para revelar su presencia.

El concepto de vínculos puede parecer muy confuso, pero colgar en él. Vamos a tratar detodas estas cosas y será, con suerte, claro.

Vamos a construir una Zona de juegos

Dado que vamos a hacer un poco de manipulación de archivos reales, vamos a construir unlugar seguro para "jugar" con nuestros comandos de manipulación de archivos. En primer

lugar necesitamos un directorio para trabajar. Vamos a crear una en nuestro directorio home ylo llamamos "patio de recreo".

Creación de directoriosEl comando mkdir se utiliza para crear un directorio. Para crear nuestro directorio patio queprimero se asegurará de que estamos en nuestro directorio home y creará el nuevo directorio:

Para hacer que nuestro parque un poco más interesante, vamos a crear un par de directoriosdentro de él denomina "dirl" y "dir2". Para ello, vamos a cambiar nuestro directorio de trabajoactual de parque infantil y ejecutar otro mkdir:

Observe que el comando mkdir aceptará múltiples argumentos que nos permite crear dosdirectorios con un solo comando.

Copia de archivos

A continuación, vamos a obtener algunos datos en nuestro patio de recreo. Haremos estomediante la copia de un archivo. Uso de la 34

Page 63: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 63/571

 

 __________________________________________________________ Vamos a construir unaZona de juegos

comando cp, vamos a copiar el archivo passwd del directorio / etc al directorio de trabajoactual:

[Me @ linuxbox parque infantil] $ cp / etc / passwd.

Observe cómo utilizamos la abreviatura de la actual directorio de trabajo, el punto final único.Así que ahora si realizamos un ls, veremos nuestro archivo:

[Me @ patio linuxbox] $ ls -l total de 12drwxrwxr-x 2 mí mí 4096 2008-01-10 16:40 dirldrwxrwxr-x 2 mí mí 4096 2008-01-10 16:40 dir2- r w - r - r - - 1 mí mí 1650 2008-01-10 16:07 passwd

Ahora, sólo por diversión, vamos a repetir la copia mediante la opción "-v" (detallado) paraver lo que hace:

[Me @ linuxbox parque infantil] $ cp -v / etc / passwd. '/ Etc/ passwd' -> './passwd'

El comando cp realiza la copia de nuevo, pero esta vez aparece un mensaje conciso indicandoqué operación que estaba realizando. Observe que cp sobrescribió la primera copia sinninguna advertencia. Una vez más se trata de un caso de cp asumiendo que sabes lo que estás

haciendo. Para obtener una advertencia, vamos a incluir la opción "-i" (interactivo):

[Me @ linuxbox parque infantil] $ cp -i / etc / passwd. cp:sobrescribir './passwd'?

En respuesta a la solicitud mediante la introducción de una "y" hará que el archivo seasobrescrito, cualquier otro carácter (por ejemplo, "n") causará cp a dejar el archivo solo.

Mover y renombrar archivos

Ahora, el nombre de "passwd" no parece muy juguetón y esto es un patio de recreo, así quevamos a cambiar a otra cosa:

[Me @ patio linuxbox] $ diversión passwd mv

35

Page 64: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 64/571

 

4 - La manipulación de archivos ydirectorios

Vamos a pasar a la diversión en torno a un poco moviendo nuestro archivo renombrado acada uno de los directorios y de vuelta:

[Me @ patio linuxbox] $ mv diversión diri

para moverlo primero al directorio diri,entonces:

[Me @ patio linuxbox] diri $ mv / dir2 diversión

para moverlo de diri a dir2, acontinuación:

[Me @ patio linuxbox] $ mv dir2 / diversión.

para finalmente traerlo de vuelta al directorio de trabajo actual. A continuación, vamos a verel efecto de la mv en directorios. En primer lugar vamos a mover nuestro archivo de datos endirl de nuevo:

[Me @ patio linuxbox] $ mv diversión diri

a continuación, pasar dirl en dir2 y confirmarlo con ls:

[Me @ patio linuxbox] $ mv diri dir2 [me @ linuxbox parqueinfantil] $ ls -l dir2 total de 4drwxrwxr-x me 2 me 4096 2008-01-11 06:06 diri [me @ parqueinfantil linuxbox] $ ls -l dir2 / diri total de 4- r w - r - r - - m í m e 1 1 6 5 0 2 0 0 8 - 0 1 - 1 0 1 6 : 3 3d i v e r s i ó n

Tenga en cuenta que, dado que ya existía dir2, mv trasladó dirl en dir2. Si no hubieranexistido dir2, mv habría cambiado el nombre a dirl dir2. Por último, vamos a poner todo de

vuelta:

[Me @ patio linuxbox] $ mv dir2 / diri. [Me @ patiolinuxbox] $ mv diri / diversión.

36

Page 65: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 65/571

[Me @ linuxbox zona de juegos] $ lndiversióndiversiónduro [Me @ linuxbox zona de juegos] $ lndiversióndirl /diversión duro [Me @ linuxbox zona de juegos] $ lndiversióndir2 /diversión duro 

[Me @ patio linuxbox] $ ls -l total de16drwxrwxr-x  2  mí  mí  4096 drwxrwxr-x  2  mí  mí  4096 - r w - r - r - -  4  m í   m í   1650 - r w - r - r - -  4  m í   m í   1650 

2008-01-14 16:17 2008-01-1416:17 diri dir2 2008-01-10 16:332008-01-10 16:33 diversióndivertido duro

Vamos a construir una Zona de juegos

Crear enlaces durosAhora vamos a tratar de algunos enlaces. Primero los enlaces duros. Vamos a crear algunosenlaces a nuestro archivo de datos, así:

Así que ahora tenemos cuatro instancias del archivo "diversión". Echemos un vistazo nuestro

directorio parque infantil:Una cosa que se nota es que el segundo campo en la lista para la diversión y la diversión duroque ambos contienen un "4", que es el número de enlaces duros que existen actualmente parael archivo. Vas a recordar que un archivo se escapadas tener por lo menos un enlace porque elnombre del archivo se crea por un enlace. Así que, ¿cómo sabemos que la diversión y ladiversión-dura son, de hecho, el mismo archivo? En este caso, ls no es muy útil. Si bienpodemos ver que la diversión y la diversión duro son ambos el mismo tamaño (campo 5),nuestro anuncio no proporciona ninguna manera de estar seguro. Para resolver este problema,vamos a tener que cavar un poco más profundo.

Al pensar en los vínculos físicos, es útil imaginar que los archivos se componen de dos partes:la parte de datos que contiene el contenido del archivo y la parte del nombre que tiene elnombre del archivo. Cuando creamos enlaces duros, en realidad estamos creando piezas denombre adicionales que todos se refieren a la misma parte de datos. El sistema asigna una

cadena de bloques de disco a lo que se llama un nodo-i, que se asocia entonces con la parte delnombre. Por tanto, cada enlace duro se refiere a un inodo específica que contiene el contenidodel archivo.

El comando ls tiene una manera de revelar esta información. Se invoca con la opción "-i":

[Me @ patio linuxbox] $ ls -li total de 1612353539 drwxrwxr-x 2 mí mí 4096 2008-01-14 16:17 dir112353540 drwxrwxr-x 2 mí mí 4096 2008-01-14 16:17 dir212353538 -rw-r - r-- 4 mí mí 1650 2008-01-10 16:33  diversión

37

Page 66: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 66/571

 

Page 67: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 67/571

 

4 - La manipulación de archivos ydirectorios

12353538 -rw-r - r-- me 4 me 1650 2008-01-10 16:33-diversión duro

En esta versión de la lista, el primer campo es el número de inodo y, como podemos ver, a lavez divertido y compartir la diversión dura el mismo número de inodo, lo que confirma queson el mismo archivo.

La creación de enlaces simbólicosLos enlaces simbólicos se crearon para superar las desventajas de los dos enlaces duros: Losenlaces duros no pueden abarcar los dispositivos físicos y enlaces duros no pueden hacerreferencia a directorios, sólo los archivos. Los enlaces simbólicos son un tipo especial dearchivo que contiene un puntero de texto para el archivo de destino o el directorio.

La creación de enlaces simbólicos es similar a crear enlaces duros:

[Me @ patio linuxbox] $ ln -s fun fun-sym [me @ patio linuxbox] $ ln-s ../fun dirl / diversión-sym [me @ patio linuxbox] $ ln -s ../fun dir2/ diversión -sym

El primer ejemplo es muy sencillo, simplemente añadimos la opción "-s" para crear un enlacesimbólico en lugar de un enlace duro. Pero ¿qué pasa con los dos siguientes? Recuerde,cuando creamos un enlace simbólico, estamos creando una descripción de texto de que elarchivo de destino es en relación con el vínculo simbólico. Es más fácil ver si nos fijamos en lasalida de ls:

[Me @ patio linuxbox] $ ls -l dirl total de 4- r w - r - r - - m í 4 mí 1650 01/10/2008 16:33 diversión durolrwxrwxrwx me 1 mí 6 2008-01-15 15:17 divertido-sym -> . . / f u n

La lista para la diversión-sym en dir1 muestra que es un enlace simbólico de la "l" que lleva enel primer campo y que apunte a "../fun", lo cual es correcto. En relación con la ubicación de ladiversión-sym, diversión está en el directorio por encima de ella. Observe también que laduración del archivo de enlace simbólico es 6, el número de caracteres en el "../fun" cadena enlugar de la longitud del archivo al que se está apuntando.

Al crear enlaces simbólicos, puede utilizar nombres de ruta absolutos:

ln -s / home / me / patio / dirl diversión /diversión-sym

38

Page 68: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 68/571

[Me @ patio linuxbox] $ ln -s diri dirl-sym [me @ patiolinuxbox] $ ls -l total de 16

drwxrwxr-x  2  mí  mí  4096 2008 lrwxrwxrwx  1  mí  mí  4 2008 drwxrwxr-x  2  mí  mí  4096 2008 - r w - r - r - -  4   m í   m í   1650 2008 - r w - r - r - -  4   m í   m í   1650 2008 lrwxrwxrwx  1  mí  mí  3 2008 

01-15 15:17 dir101-16 14:45 dir1-sym -> dir101-15 15:17 dir201-10 16:33 diversión01-10 16:33 de diversión duro01-15 15:15 de diversión sym ->diversión

[Me @ patio linuxbox] $ rm-diversión duro [me@ linuxbox parque infantil] $ ls -l total de 12

drwxrwxr-x  2  mí  mí  4096 2008 lrwxrwxrwx  1  mí  mí  4 2008 drwxrwxr-x  2  mí  mí  4096 2008 - r w - r - r - -  3  m í   m í   1650 2008 lrwxrwxrwx  1  mí  mí  3 2008 

01-15 15:17 dir101-16 14:45 dir1-sym -> dir101-15 15:17 dir201-10 16:33 diversión01-15 15:15 de diversión sym ->

diversión[Me @ linuxbox parque infantil] $ rm rm -idiversión: eliminar el archivo 'diversión'regular?

Vamos a construir una Zona de juegos

o rutas relativas, como lo hicimos en nuestro ejemplo anterior. El uso de nombres de rutarelativos es más deseable, ya que permite un directorio que contiene enlaces simbólicos paracambiar el nombre y / o se mueve sin romper los vínculos.

Además de los archivos regulares, enlaces simbólicos también pueden hacer referencia adirectorios:

La eliminación de archivos y directoriosComo hemos cubierto anteriormente, el comando rm se utiliza para borrar archivos ydirectorios. Vamos a usarlo para limpiar nuestro patio de juegos un poco. En primer lugar,vamos a eliminar uno de nuestros enlaces duros:

Eso funcionó como se esperaba. El archivo se ha ido-diversión duro y el número de enlaces semuestra para la diversión se reduce de cuatro a tres, como se indica en el segundo campo de lalista de directorios. A continuación, vamos a borrar el archivo de la diversión, y sólo para eldisfrute, vamos a incluir la opción "-i" para mostrar lo que hace:Escriba "y" en el indicador y se elimina el archivo. Pero echemos un vistazo a la salida de lsahora. Noté lo que pasó a la diversión-sym? Ya que es un enlace simbólico que apunta a unarchivo, ahora inexistente, se romperá el vínculo:

39

Page 69: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 69/571

[Me @ patio linuxbox] $ ls -l total de 8drwxrwxr-x 2 mí mílrwxrwxrwx 1 mí mídrwxrwxr-x 2 mí mí

lrwxrwxrwx 1 mí mí

4096 01/15/2008 15:17 dir14 2008-01-16 14:45 dir1-sym -> dir1

4096 01/15/2008 15:17 dir23 2008-01-15 15:15 diversión-sym ->diversión 

[Me @ patio linuxbox] $ menos divertido-sim-simdiversión: No existe el fichero o directorio

[Me @ patio linuxbox] $ rm diversión-sym sym-dirl [me @patio linuxbox] $ ls -l total de 8drwxrwxr-x 2 me mí 4096 01/15/2008 15:17 dir1

drwxrwxr-x 2 me mí 4096 01/15/2008 15:17 dir2

[Me @ linuxbox parque infantil] $ cd [me @linuxbox ~] $ rm -r parque infantil

La creación de enlaces simbólicos con la GUI

Los administradores de archivos en GNOME y KDE proporcionan un método fácil yautomática de la creación de enlaces simbólicos. Con GNOME, la celebración de lasteclas Shift + Ctrl

40

4 - La manipulación de archivos y directoriosLa mayoría de las distribuciones Linux configuran ls para visualizar los enlaces rotos. En un

cuadro de Fedora, enlaces rotos se muestran en texto parpadeante de color rojo! La presenciade un enlace roto no es, en sí mismo peligroso, pero es más bien desordenado. Si tratamos deutilizar un enlace roto veremos esto:Vamos a limpiar un poco. Vamos a eliminar los vínculos simbólicos:Una cosa para recordar acerca de los enlaces simbólicos es que la mayoría de las operaciones

de archivo se llevan a cabo en el objetivo del enlace, no el propio enlace. rm es una excepción.Cuando se elimina un eslabón, que es el vínculo que se elimina, no el objetivo.

Por último, vamos a retirar nuestro patio de recreo. Para ello, vamos a volver a nuestrodirectorio home y usar rm con la opción recursiva (-r) para borrar parque infantil y todos suscontenidos, incluidos sus subdirectorios:

Page 70: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 70/571

mientras arrastra un archivo se creará un enlace en lugar de copiar (o mover) elarchivo. En KDE, un pequeño menú aparece siempre que se deja caer un archivo, queofrece una opción de copiar, mover o vincular el archivo.

Vamos a construir una Zona de juegos

Resumiendo

Hemos cubierto mucho terreno aquí y va a tomar un tiempo para hundirse completamente en.

Realizar el ejercicio parque infantil y otra vez hasta que tiene sentido. Es importante obteneruna buena comprensión de los comandos básicos de manipulación de archivos y comodines.No dude en ampliar el ejercicio parque añadiendo más archivos y directorios, utilizandocomodines para especificar archivos para diversas operaciones. El concepto de enlaces es unpoco confuso al principio, pero se toma el tiempo para aprender cómo funcionan. Ellospueden ser un verdadero salvavidas.

Lectura adicional

• Una discusión de los enlaces simbólicos: enlace http://en.wikipedia.org/wiki/Symbolic 

41

Page 71: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 71/571

5  - Trabajar con los comandos

5 - Trabajar con los com andos

Hasta este punto, hemos visto una serie de órdenes misteriosas, cada uno con sus propiasopciones de misteriosas y argumentos. En este capítulo, vamos a tratar de quitar un poco deese misterio e incluso crear algunos de nuestros propios comandos. Los comandosintroducidos en este capítulo son:

•  tipo - Indique cómo se interpreta un nombre de comando

•  que - Display que se ejecutará el programa ejecutable

•  a y u d a r - Obtenga ayuda para órdenes internas del shell

•  hombre - Visualizar la página del manual de un comando

•  a p r o p ó s i t o - Mostrar una lista de comandos apropiados

•  info - Mostrar la información de entrada de un comando

•  w h a t i s - Mostrar una muy breve descripción de un comando

•  alias - Crear un alias de un comando

¿Qué son exactamente los comandos?

Un comando puede ser una de cuatro cosas diferentes:

1.  Un programa ejecutable como todos aquellos archivos que vimos en / usr / bin.Dentro de esta categoría, los programas pueden ser compilados binarios, tales comolos programas escritos en C y C ++, o programas escritos en lenguajes de script comoshell, Perl, Python, Ruby, etc.

2.  Un comando integrado en el propio depósito . Bash es compatible con unaserie de comandos llamados internamente órdenes internas del shell. El comando cd,por ejemplo, es una orden interna del shell.

3.  Una función de shell. Estos son secuencias de comandos shell en miniaturaincorporados en el medio ambiente. Nosotros cubriremos la configuración del medioambiente y la escritura de funciones de shell en capítulos posteriores, pero por ahora,acaba de ser conscientes de que existen.

4.  Un alias. Los comandos que podemos definir nosotros mismos, construidos a partirde otros comandos.

Page 72: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 72/571

42

Page 73: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 73/571

 

La identificación de loscomandos

La identificación de los comandos

A menudo es útil saber exactamente cuál de los cuatro tipos de comandos se utiliza y Linuxofrece un par de formas de averiguarlo.

Tipo - Muestra el tipo de un comandoEl comando tipo es una orden interna del shell que muestra el tipo de comando de la shell seejecutará, dado un nombre de comando en particular. Funciona así:

escribacommand 

donde "comando" es el nombre del comando que desea examinar. He aquí algunos ejemplos:

[Me @ linuxbox ~] $ tipo tipo tipo es unaorden interna del shell [me @ linuxbox ~] $ls tipo es alias de 'ls -color = tty' [me @linuxbox ~] Tipo de $ cp cp es / bin / cp

Aquí vemos los resultados para tres comandos diferentes. Tenga en cuenta que el de ls(tomado de un sistema Fedora) y cómo el comando ls es en realidad un alias para el comando

ls con la "- color = tty" opción añaden. Ahora sabemos por qué la salida de ls se muestra encolor!

que - Ubicación de la pantalla de un ejecutableA veces hay más de una versión de un programa ejecutable instalado en un sistema. Si bienesto no es muy común en los sistemas de escritorio, no es inusual en los grandes servidores.Para determinar la ubicación exacta de un ejecutable dado, el cual se utiliza el comando:

[me @ linuxbox ~] $ que ls / bin /

ls

q u e s ó l o f u n c i o n a p a r a l o s p r o g r a m a s e j e c u t a b l e s , n o ó r d e n e s i n t e r n a s n ia l i a s q u e s o n s u s t i t u t o s d e l o s p r o g r a m a s e j e c u t a b l e s r e a l e s . C u a n d ot r a t a m o s d e u t i l i z a r q u e e n u n a o r d e n i n t e r n a d e l s h e l l , p o r e j e m p l o , c d ,y a s e a q u e o bt e n e m o s n i n g u n a r e s p u e s t a o u n m e n s a je d e e r r o r :

43

Page 74: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 74/571

 

5 - Trabajar con comandos

[Me @ linuxbox ~] $ cd que/ Usr / bin / que: ningún CD en (/opt/jre1.6.0_03/bin:/usr/lib/qt-3,3 / bin: / usr / kerberos / bin: /opt/jre1.6.0_03/bin: / usr / lib / ccache: / usr / lvecinal / bin: / usr / bin: / bin: / home / me / bin)

que es una forma elegante de decir "comando noencontrado".

Obtención de documentación de un comando

Con este conocimiento de lo que es un comando, ahora podemos buscar la documentacióndisponible para cada tipo de comando.

ayuda - Obtener Ayuda Para Shell elementos incluídos

B a s h t i e n e u n c e n t r o d e a y u d a i n t e g r a d a d i s p o n i b l e p a r a c a d a u n a d e l a só r d e n e s i n t e r n a s d e l s h e l l . P a r a u t i l i z a r l o , e s c r i b a " h e l p " s e g u i d o p o r e ln o m b r e d e l a o r d e n i n t e r n a d e l s h e l l . P o r e j e m p l o :

[Me @ linuxbox ~] $ cd cd ayuda: cd [-L | [-P [-e]]] [dir]Cambie el directorio de trabajo del shell.

Cambie el directorio actual a DIR. El DIR predeterminado es el valor de la variable HOMEcáscara.

El CDPATH variable define la ruta de búsqueda para el directorio que contiene DIR.Nombres de directorios alternativos en CDPATH están separados por dos puntos (:). Unnombre de directorio nula es el mismo que el directorio actual. Si DIR comienza con una

barra (/), entonces no se utiliza CDPATH.Si el directorio no se encuentra, y '' cdable_vars la opción del shell se establece, la palabrase supone que es un nombre de variable. Si esa variable tiene un valor, su valor se utilizapara DIR.

Opciones:-L Forzar enlaces simbólicos a seguir-P Utilizar la estructura de directorios física sin seguir enlaces simbólicos-e si la opción -P se suministra, y el directorio de trabajo actual no se puede determinar con

éxito, salir con un estado distinto de cero

El valor por defecto es seguir enlaces simbólicos, como si se especifica '-L'.

Salir Estado:Devuelve 0 si se cambia el directorio, y si $ PWD se establece con éxito cuando se utiliza-P; no cero en caso contrario.

44

Page 75: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 75/571

[Me @ linuxbox ~] $ mkdir --help Uso: mkdir [OPCI N] DIRECTORIO ...Crear el directorio (es), si es que aún no existen.

-Z, --context = Contexto de seguridad CONTEXTO (SELinux) conjunto con elcontexto argumentos obligatorios para las opciones largas son obligatorios para lasopciones cortas también.

-m, --mode = -pMODO, --parents

-v, --verbose --help

--version

modo de archivo de conjunto (como en chmod), no a = rwx -umask ningún error si existente, hacer directorios padre, segúnsea necesarioimprimir un mensaje para cada directorio creadomostrar esta ayuda y salirsalida de información de la versión y salir

Informe de errores a <[email protected]>.

Obtención de documentación de un comando

Una nota sobre la notación: Cuando corchetes aparecen en la descripción de la sintaxis deun comando, que indican elementos opcionales. Un carácter de barra vertical indica elementosmutuamente excluyentes. En el caso del comando cd arriba:

cd [-L | [-P [-e]]] [dir]Esta notación dice que el comando cd puede estar seguido opcionalmente por cualquiera deuna "L" o una "P" y, además, si la opción "-P" se especifica la opción "-e" puede también serincluido seguido por la opcional argumento "dir".

Mientras que la salida de la ayuda para el cd comandos es concisa y exacta, es de ningúnmodo Tutorial y como podemos ver, también parece hablar de un montón de cosas que nohemos hablado todavía! No te preocupes. Vamos a llegar allí.

--help - Pantalla de información de usoMuchos programas ejecutables apoyan una opción "--help" que muestra una descripción de la

sintaxis y las opciones con el apoyo del comando. Por ejemplo:Algunos programas no son compatibles con la opción "--help", pero tratan de todos modos. A

menudo resulta en un mensaje de error que revelará la misma información de uso.

hombre - Muestra el Manual del Programa Una PáginaLa mayoría de los programas ejecutables para uso de línea de comandos proporcionan unapieza formal de documentación llamado una página de manual o de origen humano. Unprograma especial llamado hombre de paginación se utiliza para verlas. Se usa así:

45

Page 76: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 76/571

programaman 

[me @ linuxbox ~] $ man ls

5  - Trabajar con los comandos

donde "programa" es el nombre del comando para ver.

Las páginas man varían un poco en el formato, pero generalmente contienen un título, un

resumen de la com - sintaxis del comando, una descripción del propósito de la orden, y unalista y descripción de cada una de las opciones del comando. Las páginas man, sin embargo,

no suelen incluir ejemplos, y pretenden ser una referencia, no un tutorial. Como ejemplo,vamos a intentar ver la página del manual para el comando ls:

En la mayoría de los sistemas Linux, el hombre utiliza menos para mostrar la página demanual, por lo que todos los familiares menos comandos funcionan mientras se visualiza lapágina.

Los "manuales" que el hombre muestra se divide en secciones y no sólo abarca los comandos

del usuario, sino también los comandos de administración de sistemas, interfaces deprogramación, formatos de archivos y mucho más. La siguiente tabla describe el diseño delmanual:

A veces tenemos que mirar en una sección específica del manual para encontrar lo queestamos buscando. Esto es particularmente cierto si estamos buscando un formato de archivoque es también el nombre de un comando. Sin especificar un número de sección, siemprevamos a obtener la primera instancia de un partido, probablemente en el apartado 1. Paraespecificar un número de sección, utilizamos hombre como este: 46

Tabla 5-1:  Hombre Organización Página 

Secció  Contenido  

1 Los comandos de usuario

2 Interfaces de programación de las llamadas al sistema del kernel

3 Programación de interfaces para la biblioteca C

4 Archivos especiales, como los nodos y los controladores de dispositivos5 Formatos de archivo

6  Juegos y entretenimientos tales como protectores de pantalla

7 Misceláneo

8 Comandos de administración del sistema

Page 77: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 77/571

 

sección de hombreSEARCH_TERM 

Por ejemplo:

[Me @ linuxbox ~] $ man 5 passwd

Obtención de documentación de uncomando

Esto mostrará la página del manual que describe el formato de archivo del archivo / etc/ passwd.

a propósito - Mostrar comandos apropiadosTambién es posible buscar la lista de páginas de manual para posibles coincidencias sobre labase de un término de búsqueda. Es muy crudo pero a veces útil. He aquí un ejemplo de una

búsqueda de páginas man utilizando el término de búsqueda "floppy":

[Me @ linuxbox ~] $ A

flexible  create_floppy_devices (8)  - Llamada udev para crear todo posible dispositivo de

disco flexible en función del tipo CMOS fdformat  (8)  - Bajo nivel de formato a un disquete flexible  (8)  - discos de formato de disquete gfloppy  (1)  - Un formateador de disquetes simple para GNOME mbadblocks  (1)  - Pruebas de un disquete, y marca los bloques dañados

en la FAT mformat  (1)  - Añadir un sistema de archivos MS-DOS en un disquete

formateado de bajo nivel 

El primer campo de cada línea de la salida es el nombre de la página de manual, el segundocampo muestra la sección. Tenga en cuenta que el comando man con la opción "-k" realiza lamisma función exacta como a propósito.

whatis - Muestra una descripción muy breve de un comandoE l p r o g r a m a wh a t i s m u e s t r a e l n o m br e y u n a d e s c r i p c i ó n d e u n a l ín e a d eu n a p á g i n a d e l m a n u a l d e j u e g o u n a p a l a b r a c l a v e e s p e c i f i c a d a :

[Me @ linuxbox ~] $ ls whatisls (1) - contenido del directorio lista

47

Page 78: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 78/571

 

5 - Trabajar con comandos

El hombre más Brutal Página de todos ellos

Como hemos visto, las páginas de manual suministrado con Linux y otros sistemasUnix están concebidos como documentación de referencia y no como tutoriales.Muchas páginas de manual son difíciles de leer, pero creo que el gran premio dedificultad tiene que ir a la página del manual de bash. Como yo estaba haciendo miinvestigación para este libro, se lo di revisión cuidadosa para asegurarse de que estabacubriendo la mayor parte de sus temas. Cuando se imprime, es más de 80 páginas delargo y extremadamente densa, y su estructura no tiene ningún sentido para un nuevousuario.Por otro lado, es muy precisa y concisa, así como ser extremadamente completa. Asíque échale un vistazo si te atreves y esperamos el día en que usted puede leerlo y todotiene sentido.

info - Muestra la información de entrada de un programa deEl proyecto GNU proporciona una alternativa a las páginas de manual para sus programas,llamada "información." Info páginas se muestran con un programa lector llamado, muyapropiadamente, información. Info páginas son hipervínculos al igual que las páginas web.He aquí una muestra:

 Archivo: coreutils.info, Node: ls invocación, Siguiente: invocación dir, Up: listaDirectorio

10.1 'ls': Lista el contenido del directorio

El programa 'ls' contiene información sobre los archivos (de cualquier tipo, incluyendodirectorios). Opciones y argumentos de archivo se pueden mezclar de manera arbitraria,como de costumbre.

Para que no sean opciones argumentos de línea de comandos que son directorios,listas predeterminadas por 'ls' el contenido de los directorios, no de forma recursiva yarchivos omitiendo con nombres que comienzan con '.'. Para otros argumentos que no

sean opciones, por listas predeterminadas 'ls' sólo el nombre de archivo. Si no seespecifica ningún argumento que no es opción, 'ls' opera en el directorio actual, actuandocomo si hubiera sido invocada con un solo argumento de '.'.

48

Page 79: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 79/571

Por defecto, la salida está ordenada alfabéticamente, de acuerdo con la--zz-Info: (coreutils.info.gz) ls invocación, 63 líneas --Top 

Obtención de documentación de un comandoEl programa info lee archivos de información, que son árbol estructurado en nodos

individuales, cada uno contiene un solo tema. Ficheros Info contienen hipervínculos que le

puede pasar de un nodo a otro. Un hipervínculo puede ser identificado por su asterisco líder, yse activa al colocar el cursor sobre ella y pulsando la tecla Intro.

Para invocar información, escriba "información", seguido opcionalmente por el nombre de unprograma. A continuación se muestra una tabla de comandos que se utilizan para controlar ellector mientras se muestra una página de información:

se mostrará una página de menú con enlaces a cada programa que figura en el paquetecoreutils.

README y otros archivos de documentación del programaMuchos paquetes de software instalados en el sistema de archivos de documentación tienen

que residen en el directorio / usr / share / doc. La mayoría de éstos se almacenan en formatode texto sin formato y lata

49

Tabla 5-2: Comandos info

Comando  Acción ? Mandato Visualizar ayuda 

R e P á g o R e t r o c e s o Visualizar la página anterior  

A v P á g o E s p a c i o Visualizar la página siguiente n Siguiente - Muestra el siguiente nodo 

p  Anterior - Mostrar el nodo anterior  u

Up - Muestra el nodo padre del nodo que se muestraactualmente, por lo general un menú. 

E n t r a r Siga el hipervínculo en la posición del cursor  

q Dejar de 

La mayoría de los programas de línea de comandos que hemos discutido hasta ahora sonparte del paquete "coreutils" del Proyecto GNU, por lo que escribir:  

[Me @ linuxbox ~] $Información  coreutils 

Page 80: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 80/571

 

5 - Trabajar con comandos

ser visto con menos. Algunos de los archivos están en formato HTML y se pueden ver con unnavegador web. Podemos encontrar algunos archivos que terminan con la extensión ".gz".Esto indica que se han comprimido con el programa de compresión gzip. El paquete gzip

incluye una versión especial del menor llamado zless que mostrará el contenido de archivosde texto comprimido gzip-.

Crear sus propios comandos con alias

Ahora, para nuestra primera experiencia con la programación! Vamos a crear un comando denuestro propio utilizando el comando alias. Pero antes de empezar, tenemos que revelar unapequeña línea de comandos truco. Es posible poner más de un comando en una líneaseparando cada comando con un carácter de punto y coma. Funciona así:

commandl; comando2; command3 ...

 

Aquí está el ejemplo vamos a utilizar:

[Me @ linuxbox ~] $ Cd / usr; ls; CD   _   juegos bin  kerberos lib64  tmp compartido local etc incluyen  libexec lib  sbin src / Home / me [Me @ linuxbox ~] $ 

Como podemos ver, hemos combinado tres comandos en una sola línea. Primero cambiamosel directorio / usr entonces la lista del directorio y, finalmente, volver al directorio original(mediante el uso de 'CD -') por lo que terminamos donde empezamos. Ahora pasemos estasecuencia en un nuevo comando utilizando alias. Lo primero que tenemos que hacer es soñarun nombre para nuestro nuevo comando. Vamos a tratar de "prueba". Antes de hacer eso,sería una buena idea para saber si ya se está utilizando el nombre de "prueba". Paraaveriguarlo, podemos utilizar el comando de nuevo tipo:

[Me @ linuxbox ~] test test $ typees una orden interna del shell

¡Huy! El nombre de "prueba" ya está en uso. Vamos atratar de "foo":

[Me @ linuxbox ~] $ foo tipobash: Tipo: foo: No encontrado

50

Page 81: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 81/571

 

Crear sus propios comandos con alias

¡Genial! "Foo" no se toma. Así que vamos a crearnuestro alias:

[Me @ linuxbox ~] $ alias foo '= cd / usr; ls; cd - ' 

Observe la estructura de este comando:

nombre de alias ='cadena' 

Después de que el "alias" de comandos que le damos un nombre de alias seguidoinmediatamente (sin espacio en blanco permitido) por un signo igual, seguidoinmediatamente por una cadena entre comillas que contiene el significado que se asignará alnombre. Después definimos nuestros alias, se puede utilizar en cualquier lugar de la cáscara

esperaría un comando. Vamos a intentarlo:

[Me @ linuxbox ~] $ Foo  juegos bin  kerberos  lib64  tmp compartido local etc incluyen  lib  libexec  sbin src / Home / me [Me @ linuxbox ~]

También podemos utilizar el comando tipo de nuevo para ver nuestras alias:

[Me @ linuxbox ~] $ tipo foofoo es un alias para cd / usr; ls; cd - '

Para eliminar un alias, se utiliza el comando unalias, así:

[Me @ linuxbox ~] $ foo unalias [me@ linuxbox ~] $ foo tipo bash: Tipo:foo: No encontrado

Aunque hemos evitado deliberadamente nombrar nuestro alias con un nombre de la orden

existente, no es raro que lo haga. Esto se hace a menudo para aplicar una opción comúnmentedeseado para cada invocación de un comando común. Por ejemplo, hemos visto cómo elcomando ls es a menudo un alias para añadir soporte de color:

51

Page 82: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 82/571

[me @ linuxbox ~] $ ls tipoLS es alias de 'ls -color = tty'

[Me @ linuxbox ~] $ alias alias l. = 'Ls -d.* --color = Tty' alias ll = 'ls -l --color = tty'alias ls = 'ls -color = tty'

5  - Trabajar con los comandos

Para ver todos los alias definidos en el medio ambiente, utilice el comando alias sinargumentos. Éstos son algunos de los alias definidos de forma predeterminada en un sistemaFedora. Tratar de averiguar lo que todos hacen:

Hay un pequeño problema con la definición de alias en la línea de comandos. Ellosdesaparecen cuando finaliza su sesión de shell. En un capítulo posterior, veremos cómoañadir nuestros propios alias para los archivos que establecen el medio ambiente cada vez queinicia la sesión, pero por ahora, disfrutar el hecho de que hemos dado nuestro primer, aunquepequeño, paso en el mundo de la cáscara la programación!

Resumiendo

Ahora que ya hemos aprendido cómo encontrar la documentación de comandos, vaya y vea ladocumentación para todos los comandos que hemos encontrado hasta ahora. Estudiar quéopciones adicionales están disponibles y probarlos!

Lectura adicional

Hay muchas fuentes en línea de documentación para Linux y la línea de comandos. Éstos sonalgunos de los mejores:

•  El Manual de Referencia de Bash es una guía de referencia para el shell bash. Sigue

siendo una obra de referencia, pero contiene ejemplos y es más fácil de leer que lapágina de manual de bash.http://www.gnu.org/software/bash/manual/bashref.html  

•  El Bash FAQ contiene respuestas a las preguntas más frecuentes en relación con bash.Esta lista tiene como objetivo intermedio para usuarios avanzados, pero contiene unagran cantidad de buena información.http://mywiki.wooledge.org/BashFAQ  

•  El proyecto GNU proporciona una extensa documentación de sus programas, queforman el núcleo de la experiencia de la línea de comandos de Linux. Usted puede veruna lista completa aquí: http://www.gnu.org/manual/manual.html  

•  Wikipedia tiene un artículo interesante sobre páginas de manual:http://en.wikipedia.org/wiki/Man página 

52

Page 83: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 83/571

6  -Redirección

6  - Redirección

En esta lección vamos a dar rienda suelta a lo que puede ser la mejor característica de la líneade comandos. Se llama redirección de E / S. El "I / O" significa de entrada / salida y con estainstalación se puede redirigir la entrada y la salida de los comandos hacia y desde archivos,así como conectar varios comandos juntos en potentes tuberías de mando. Para mostrar estainstalación, vamos a introducir los siguientes comandos:

•  gato - Concatenar archivos

•  clase - Ordenar las líneas de texto

•  U n i q - Informe o omitir líneas repetidas

•  grep - Líneas de impresión que coincidan con un patrón

•  wc - de nueva línea de impresión, palabra, y los recuentos de bytes para cada archivo

•  c a b e z a - Salida de la primera parte de un archivo

•  c o l a - Salida de la última parte de un archivo

•  tee - Leer de la entrada estándar y escribir en la salida estándar y archivos

Estándar de entrada, salida y error

Muchos de los programas que hemos utilizado hasta ahora producir una salida de algún tipo.Esta salida se compone a menudo de dos tipos. En primer lugar, tenemos los resultados delprograma; es decir, los datos que el programa está diseñado para producir, y en segundolugar, tenemos los mensajes de estado y de error que nos dicen cómo el programa estárecibiendo a lo largo. Si nos fijamos en un comando como ls, podemos ver que muestra susresultados y sus mensajes de error en la pantalla.

Siguiendo con el tema de Unix de "todo es un archivo," programas como ls envían realmente

sus resultados a un archivo especial denominado salida estándar (a menudo expresada comola salida estándar) y sus mensajes de estado a otro archivo llamado error estándar (stderr). Pordefecto, tanto en la salida estándar y el error estándar están vinculados a la pantalla y no seguardan en un archivo de disco.

Además, muchos programas tienen entrada de un centro de llamadas de entrada estándar(stdin), que es, por defecto, atado al teclado.

Page 84: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 84/571

53

Page 85: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 85/571

 

6 - redirección

E / S de redirección permite que cambiemos donde la producción va y de donde viene laentrada de. Normalmente, la producción va a la pantalla de entrada y viene desde el teclado,pero con E / S de la redirección, podemos cambiar eso.

Redirección de la salida estándar

E / S redirección nos permite redefinir donde la salida estándar pasa. Para redirigir la salidaestándar a otro archivo en lugar de la pantalla, se utiliza el ">" operador de redirecciónseguido del nombre del archivo. ¿Por qué querríamos hacer esto? A menudo es útil paraalmacenar la salida de un comando en un archivo. Por ejemplo, podríamos decir la cáscarapara enviar la salida del comando ls en el fichero de ls-output.txt lugar de la pantalla:

[Me @ linuxbox ~] $ ls -l / usr / bin> ls-output.txt 

Aquí, hemos creado un listado largo del directorio / usr / bin, y envió a los resultados en elfichero de ls-output.txt. Vamos a examinar la salida redirigida del comando:

[Me @ linuxbox ~] $ ls -l ls-output.txt -rw-rw-r-- 1 me me 167878 2008-02-01 15:07 ls-output.txt

Bueno; un bonito, grande, archivo de texto. Si nos fijamos en el archivo con menos, vamos aver que el archivo ls-output.txt efectivamente incluye los resultados de nuestro comando ls:

[Me @ linuxbox ~] $ Menos ls-output.txt 

Ahora, vamos a repetir nuestra prueba de redirección, pero esta vez con un toque. Vamos acambiar el nombre del directorio a uno que no existe:

[Me @ linuxbox ~] $ ls -l / bin / usr> ls-output.txt ls: no se puede acceder / bin / usr: No existe el fichero o directorio

Recibimos un mensaje de error. Esto tiene sentido ya que especificamos la inexistentedirectorio / bin / usr, pero ¿por qué fue el mensaje de error aparece en la pantalla en lugar deser redirigida al archivo ls-output.txt? La respuesta es que el programa ls no envía susmensajes de error en la salida estándar. En lugar de ello, al igual que los programas de Unixmás bien escritos, que envía sus mensajes de error al error estándar. Ya que sólo redirige lasalida estándar y el error no estándar, el mensaje de error aún se envía a la pantalla. Vamos aver cómo

54

Page 86: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 86/571

 

 _______________________________________________________ Redirección de la salidaestándar

para redirigir el error estándar en un minuto, pero en primer lugar, echemos un vistazo a loque ocurrió en nuestro archivo de salida:

[Me @ linuxbox ~] $ ls -l ls-output.txt -rw-rw-r-- mí me 1 0 2008-02-01 15:08 ls-output.txt

El archivo ahora tiene longitud cero! Esto se debe a que, cuando nos redirigir la salida con el">" operador de redirección, el archivo de destino está siempre reescrito desde el principio.Desde nuestro comando ls genera ningún resultado y sólo un mensaje de error, la operaciónde redirección comenzó a reescribir el archivo y luego se detuvo a causa del error, lo queresulta en su truncamiento. De hecho, si alguna vez necesitamos para truncar en realidad unarchivo (o crear un archivo nuevo, vacío) podemos utilizar un truco como esto:

[Me @ linuxbox ~] $> ls-output.txt

Simplemente usando el operador de redirección sin comando anterior se truncará un archivoexistente o crear un archivo nuevo, vacío.

Así que, ¿cómo podemos anexar redirigido la salida a un archivo en lugar de sobrescribir elarchivo desde el principio? Para ello, utilizamos el ">>" operador de redirección, así:

[Me @ linuxbox ~] $ ls -l / usr / bin >> ls-output.txt 

Utilizando el ">>" operador dará lugar a la salida se anexa al archivo. Si el archivo no existe,se crea como si se hubiera utilizado el operador ">". Vamos a ponerlo a prueba:

[Me @ linuxbox ~] $ ls -l / Usr / bin >>  ls-output.txt[Me @ linuxbox ~] $ ls -l / Usr / bin >>  ls-output.txt[Me @ linuxbox ~] $ ls -l / Usr / bin >>  ls-output.txt

[Me @ linuxbox ~] $ ls -l ls-output.txt-rw-rw-r-- 1 me me 503634 2008-02-01 15:45 ls-output.txtRepetimos el comando tres veces resultando en un archivo de salida tres veces másgrande.

La reorientación de error estándar

Reorientación de error estándar carece de la facilidad de un operador de redirección dedicada.Para redirigir

55

Page 87: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 87/571

[Me @ linuxbox ~] $ ls -l / bin / usr 2> ls-error.txt 

[Me @ linuxbox ~] $ ls -l / bin / usr> ls-output.txt 2> & 1 

6 - Error estándar de redirección que debe referirse a su descriptor de fichero. Un programapuede producir una salida en cualquiera de varias secuencias de archivo numerados. Si biennos hemos referido a los tres primeros de estos flujos de archivos como estándar de entrada,salida y error, los internamente referencias shell como descriptores de archivo 0, 1 y 2,

respectivamente. El shell proporciona una notación para la reorientación de archivosutilizando el número de descriptor de archivo. Desde error estándar es el mismo que eldescriptor de archivo número 2, podemos redirigir el error estándar con esta notación:

El descriptor de archivo "2" se coloca inmediatamente antes de que el operador de redirecciónpara llevar a cabo la reorientación de error estándar para el archivo ls-error.txt.

Redirección de la salida estándar y el error estándar en un archivoHay casos en los que es posible que desee para capturar toda la salida de un comando a unúnico archivo. Para ello, tenemos que redirigir tanto la salida estándar y el error estándar al

mismo tiempo. Hay dos maneras de hacer esto. En primer lugar, la forma tradicional, quetrabaja con las versiones antiguas de la shell:

Usando este método, realizamos dos redirecciones. En primer lugar, redirigir la salidaestándar al archivo ls-output.txt y luego redirigimos descriptor de archivo 2 (error estándar)para presentar un descriptor (salida estándar), utilizando la notación 2> & 1.

Observe que el orden de las redirecciones es significativo. La redirección deerror estándar siempre debe ser posterior a la reorientación de la salida estándar o nofunciona. En el ejemplo anterior,

> Ls -0 utp ut . tx t 2> & 1

redirige error estándar en el fichero de ls-salida.txt, pero si se cambia el orden de 2> & 1

error estándar> ls-salida.txt está dirigida a la pantalla.Las versiones recientes de fiesta ofrecen un segundo método, más ágil para llevar a cabo este56

Page 88: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 88/571

 

redireccióncombinado:

[Me @ linuxbox ~] $ ls -l / bin / usr y> ls-output.txt 

La reorientación de errorestándar

En este ejemplo, utilizamos la única notación y> para redirigir tanto la salida estándar y errorestándar para el archivo ls-output.txt. También puede añadir los flujos de salida y de errorestándar estándar en un solo archivo de este modo:

[Me @ linuxbox ~] $ ls -l / bin / usr y >> ls-output.txt 

Cómo deshacerse de la producción no deseadoA veces "el silencio es oro", y no queremos que la salida de un comando, sólo queremos tirarloa la basura. Esto se aplica particularmente a error y mensajes de estado. El sistemaproporciona una manera de hacer esto mediante la reorientación de salida a un archivoespecial llamado "/ dev / null". Este archivo es un dispositivo de sistema llamado un cubo debits que acepta la entrada y no hace nada con él. Para suprimir mensajes de error de uncomando, hacemos esto:

[Me @ linuxbox ~] $ ls -l / bin / usr 2> / dev / null 

 / Dev / null En Unix Cultura

El cubo de bits es un antiguo concepto de Unix y debido a su universalidad, que haaparecido en muchas partes de la cultura Unix. Cuando alguien dice que él / ella estáenviando sus comentarios a / dev / null, que ya sabes lo que significa. Para másejemplos, ver el Artículo de Wikipedia sobre "/ dev / null". 

Reorientación de la entrada estándar

Hasta ahora, no hemos encontrado ningún comando que hacen uso de la entrada estándar (enrealidad tenemos, pero vamos a revelar que sorpresa un poco más tarde), así que tenemos queintroducir uno.

gato - Concatenar archivosEl comando cat lee uno o más archivos y los copia en la salida estándar de este modo:

57

Page 89: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 89/571

 

6 - redirección

gato [archivo...]

En la mayoría de los casos, se puede pensar de gato como análoga al comando TYPE de DOS.Se puede utilizar para mostrar los archivos sin paginación, por ejemplo:

[Me @ linuxbox ~] $ cat ls-output.txt 

se mostrará el contenido del archivo ls-output.txt. gato se utiliza a menudo para mostrararchivos de texto cortos. Desde gato puede aceptar más de un archivo como un argumento,sino que también puede ser utilizado para unir archivos juntos. Digamos que hemosdescargado un archivo de gran tamaño que se ha dividido en varias partes (archivosmultimedia a menudo se dividen de esta manera en Usenet), y queremos unirnos a ellos de

nuevo juntos. Si se nombraron los archivos:m o v i e . m p e g . 0 0 1 m o v i e . m p e g . 0 0 2 . . . m o v i e . m p e g . 0 9 9

podríamos unirlos de nuevo juntos con este comando:

movie.mpeg.0 gato *>movie.mpeg

Desde comodines siempre se expanden en forma ordenada, los argumentos serán dispuestosen el orden correcto.

Esto es todo muy bien, pero ¿qué tiene esto que ver con la entrada estándar? Nada todavía,pero vamos a intentar algo más. ¿Qué sucede si entramos "gato" sin argumentos:

[Me @ linuxbox ~] $ cat

No pasa nada, que sólo se sienta allí como si estuviera colgado. Puede parecer de esa manera,pero está realmente haciendo exactamente lo que se supone que.

Si no se da ningún argumento gato, se lee de la entrada estándar, y desde la entrada estándares, por defecto, atado al teclado, que está esperando que nosotros escribimos algo! Trate deañadir el siguiente texto y pulsar Intro:

[Me @ linuxbox ~] $ catEl rápido zorro marrón saltó sobre el perroperezoso.

A continuación, escriba un Ctrl-D (o sea, mantenga pulsada la tecla Ctrl y pulse "D") paracontar gato que tiene

58

Page 90: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 90/571

 

final alcanzado de archivo (EOF) en la entradaestándar:

[Me @ linuxbox ~] $ catEl rápido zorro marrón saltó sobre el perroperezoso.El rápido zorro marrón saltó sobre el perro perezoso.

Reorientación de la entradaestándar

A falta de argumentos de nombre de archivo, gato copias de entrada estándar a la salidaestándar, por lo que vemos nuestra línea de texto repetido. Podemos utilizar estecomportamiento para crear archivos de texto cortos. Digamos que hemos querido crear unarchivo llamado "lazy_dog.txt" que contiene el texto en nuestro ejemplo. Queremos hacer esto:

[Me @ linuxbox ~] $ cat> lazy_dog.txt El rápido zorro marrón saltó sobre el perroperezoso.

Escriba el comando seguido del texto que queremos en colocar en el archivo. Recuerde quedebe pulsar Ctrl-d al final. Usando la línea de comandos, hemos implementado procesador detextos más tonto del mundo! Para ver nuestros resultados, podemos utilizar el gato paracopiar el archivo a la salida estándar una vez más:

[Me @ linuxbox ~] $ lazy_dog.txt gatoEl rápido zorro marrón saltó sobre el perro perezoso.

Ahora que sabemos cómo gato acepta la entrada estándar, además de los argumentos de

nombre de archivo, vamos a tratar de redirigir la entrada estándar:

[Me @ linuxbox ~] $ cat <lazy_dog.txt El rápido zorro marrón saltó sobre el perro perezoso.

Utilizando el "<" operador de redirección, cambiamos la fuente de la entrada estándar desdeel teclado a la lazy_dog.txt archivo. Vemos que el resultado es el mismo que el de pasar unsolo argumento de nombre de archivo. Esto no es particularmente útil en comparación conpasar un argumento de nombre de archivo, pero sirve para demostrar el uso de un archivocomo una fuente de entrada estándar. Otros comandos de hacer un mejor uso de la entradaestándar, como pronto veremos.

Antes de continuar, echa un vistazo a la página del manual para el gato, ya que tiene variasopciones interesantes.

Tuberías

La capacidad de los comandos para leer datos de la entrada estándar y enviar a la salidaestándar es

59

Page 91: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 91/571

 

6 - redirección

utilizado por una función de shell llamado tuberías. Usando el operador de la tubería "|"(barra vertical), la salida estándar de un comando se puede canalizar en la entrada estándarde otro:

commandl | Comando2 

Para demostrar plenamente esto, vamos a necesitar algunos comandos. ¿Recuerdas cómo nosdijeron que no había uno que ya sabían que acepta la entrada estándar? Es menos. Podemosusar menos para mostrar, página por página, la salida de cualquier comando que envía susresultados a la salida estándar:

[Me @ linuxbox ~] $ ls -l / usr / bin | menos 

Esto es muy práctico! Usando esta técnica, podemos examinar convenientemente la salida decualquier comando que produce la salida estándar.

La diferencia entre> y |

A primera vista, puede ser difícil de entender la redirección realizada por el operadorde canalización | frente al operador de redirección>. En pocas palabras, el operadorde redirección conecta un comando con un archivo mientras que el operador de latubería se conecta la salida de un comando con la entrada de un segundo mandato.

commandl > Archivolcommandl | comando2 

Mucha gente va a tratar lo siguiente cuando están aprendiendo acerca de losoleoductos, "sólo para ver qué pasa."

commandl > Command2 

Respuesta: A veces algo realmente malo.

He aquí un ejemplo real presentado por un lector que se administra un dispositivo deservidor basado en Linux. Como superusuario, lo hizo:

#   cd / usr / bin#   l s > m e n o s

6 0

Page 92: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 92/571

El primer comando lo puso en el directorio donde se almacenan la mayoría de losprogramas y el segundo comando le dijo a la shell para sobrescribir el archivo menoscon la salida del comando ls. Desde el directorio / usr / bin ya contenía un archivollamado "menos" (el programa less), el segundo comando sobrescribió el archivo deprograma de menos con el texto de ls destruyendo así el menor programa en susistema.

La lección aquí es que el operador de redirección en silencio crea o sobrescribe losarchivos, por lo que necesita para tratar con mucho respeto.

[Me @ linuxbox ~] $ ls / bin / usr / bin | sort | menos 

[Me @ linuxbox ~] $ ls / bin / usr / bin | sort | Uniq | menos 

Tuberías

FiltrosLas tuberías se utilizan a menudo para llevar a cabo operaciones complejas en los datos. Esposible poner varios comandos juntos en un oleoducto. Con frecuencia, los comandos que seutilizan de esta manera se conocen como filtros. Filtros toman de entrada, cambiar de algunamanera y luego la salida él. El primero de ellos vamos a tratar es una especie. Imaginemos que

queríamos hacer una lista combinada de todos los programas ejecutables en / bin y / usr /bin, ponerlos en orden y ordenada visualizarla:

Dado que especificamos dos directorios (/ bin y / usr / bin), la salida de ls habría consistidoen dos listas ordenadas, una para cada directorio. Con la inclusión de una especie en nuestracartera, hemos cambiado los datos para producir una sola, lista ordenada.

Líneas Reportar u omitir Repetido - UniqEl comando Uniq se utiliza a menudo en conjunción con tipo. Uniq acepta una lista ordenadade los datos, ya sea de entrada estándar o un solo argumento de nombre de archivo (consultela página de manual Uniq para más detalles) y, de forma predeterminada, elimina losduplicados de la lista. Por lo tanto, para asegurarse de que nuestra lista no tiene duplicados

(es decir, cualquier programa del mismo nombre que aparecen en los directorios / bin y / usr/ bin directorios) añadiremos Uniq a nuestra cartera:

En este ejemplo, utilizamos Uniq para eliminar los duplicados de la salida del comando sort.Si queremos ver la lista de duplicados en cambio, le añadimos la opción "-d" para Uniq de estemodo:

61

Page 93: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 93/571

 

6 - redirección

[Me @ linuxbox ~] $ ls / bin / usr / bin | sort | Uniq -d | menos 

wc - Imprimir línea, palabra y Número total de bytesEl comando wc (word count) se utiliza para mostrar el número de líneas, palabras y bytescontenidos en archivos. Por ejemplo:

[Me @ linuxbox ~] $ ls wc-output.txt7902 64566 503634 ls-output.txt

En este caso se imprime tres números: líneas, palabras y bytes contenidos en ls-salidas put.txt.Al igual que nuestros comandos anteriores, si se ejecuta sin argumentos de línea decomandos, wc acepta la entrada estándar. La opción "-l" limita su producción a sólo las líneasde informe. Adición a una tubería es una manera práctica de contar las cosas. Para ver elnúmero de elementos que tenemos en nuestra lista ordenada, podemos hacer esto:

[Me @ linuxbox ~] $ ls / bin / usr / bin | sort | Uniq | wc -l 2728

Líneas de impresión coinciden con un patrón - grep

g r e p e s u n p o t e n t e p r o g r a m a u t i l i z a d o p a r a e n c o n t r a r p a t r o n e s d et e x t o d e n t r o d e l o s a r c h i vo s . S e u s a a s í :

patrón grep [archivo ...] 

Cuando grep encuentra con un "patrón" en el archivo, imprime las líneas que lo contienen. Lospatrones que grep puede coincidir pueden ser muy complejos, pero por ahora nosconcentraremos en los partidos de texto simple. Vamos a cubrir los patrones avanzados,llamados expresiones regulares en un capítulo posterior.

Digamos que queríamos para encontrar todos los archivos en la lista de programas que tenían

la palabra "postal" incrustado en el nombre. Esta búsqueda nos puede dar una idea de algunosde los programas en nuestro sistema que tenían algo que ver con la compresión de archivos.Queremos hacer esto:

[Me @ linuxbox ~] $ ls / bin / usr / bin | sort | Uniq | grep postal  

62

Page 94: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 94/571

bunzip2bzip2gunzipgzipabrir lacremalleracremallerazipcloakzipgrepzipinfozipnotezipsplit

[Me @ linuxbox ~] $ ls / usr / bin | tail -n 5 • Nueva zonetab2pot.pyzonetab2pot.pyczonetab2pot.pyo

Tuberías

Hay un par de opciones útiles para grep: "-i", que hace que grep para ignorar el caso cuando serealiza la búsqueda (normalmente búsquedas entre mayúsculas y minúsculas) y "-v", que ledice a grep para sólo las líneas de impresión que no coinciden con el patrón.

cabeza / cola - Imprimir Primera / última parte de Archivos

63

A veces uno no quiere que todo la salida de un comando. Es posible que sólo quieren lasprimeras líneas o las últimas líneas. El comando head imprime las primeras diez líneas de unarchivo y el comando tail imprime las últimas diez líneas. Por defecto, ambos comandosimprimen diez líneas de texto, pero esto se puede ajustar con la opción "-n":

[Me @ linuxbox  ~] $ Cabeza -n 5  ls-output.txt total de 343.496-rwxr-xr-x 1  raíz  raíz  31316 2007-12-05  8:58  [ -rwxr-xr-x 1  raíz  raíz  8240 2007-12-09  13:39  411toppm -rwxr-xr-x 1  raíz  raíz  111276 2007-11-26  14:27  a2p -rwxr-xr-x 1  raíz  raíz  25368 2006-10-06  20:16  a52dec [Me @ linuxbox  ~] $ Tail -n  5  ls-output.txt -rwxr-xr-x 1  raíz  raíz  5234 2007-06-27  10:56  • Nueva -rwxr-xr-x 1  raíz  raíz  691 10.09.2005  04:21  zonetab2pot.py -rw-r - r-- 1  raíz  raíz  930 2007-11-01  12:23  zonetab2pot.pyc -rw-r - r-- 1  raíz  raíz  930 2007-11-01  12:23  zonetab2pot.pyo lrwxrwxrwx 1  raíz  raíz  6 2008-01-31  5:22  zsoelim -> soelim 

Estos pueden ser usados en las tuberías, así:

Page 95: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 95/571

zsoelim

[me @ linuxbox ~] $ tail -f / var / log / messages  08 de febrero 13:40:05 twin4 dhclient: DHCPACK desde 192.168.1.108 de febrero 13:40:05 twin4 dhclient: obligado a 192.168.1.4 - renovación en1652 segundos.08 de febrero 13:55:32 twin4 mountd [3953]: / var / NFSv4 / musicbox exportado a ambos192.168.1.0/24 y twin7.localdomain en 192.168.1.0/24,twin7.localdomain08 de febrero 14:07:37 twin4 dhclient: DHCPREQUEST sobre eth0 a 192.168.1.1 puerto6708 de febrero 14:07:37 twin4 dhclient: DHCPACK desde 192.168.1.108 de febrero 14:07:37 twin4 dhclient: obligado a 192.168.1.4 - renovación en1771 segundos.08 de febrero 14:09:56 twin4 smartd [3468]: Dispositivo: / dev / hda, SMART prefallo

 Atributo: 8 Seek_Time_Performance cambió 237-236 08 de febrero 14:10:37 twin4

mountd [3953]: / var / NFSv4 / musicbox exportado a ambos 192.168.1.0/24 ytwin7.localdomain en 192.168.1.0/24,twin7.localdomain08 de febrero sshd 14:25:07 twin4 (pam_unix) [29234]: La sesión se abrió para mí porusuario (UID = 0)08 de febrero 14:25:36 twin4 su (pam_unix) [29279]: La sesión se abrió para el usuarioroot por mí (uid = 500)

6  - Redirección

cola tiene una opción que le permite ver los archivos en tiempo real. Esto es útil para ver elprogreso de los archivos de registro a medida que se escriben. En el siguiente ejemplo, vamosa ver en el archivo de mensajes en / var / log (o el directorio / var / log archivo / syslog si losmensajes le falta). Privilegios de superusuario están obligados a hacer esto en algunas

distribuciones de Linux, ya que el directorio / var / log archivo / mensajes pueden contenerinformación de seguridad:

El uso de la opción "-f", la cola sigue supervisando el archivo y cuando se añaden nuevaslíneas, que aparecerá inmediatamente en la pantalla. Esto continúa hasta que escriba Ctrl-c.

tee - Leer de la entrada estándar y la salida a stdout y ArchivosDe acuerdo con nuestra metáfora de fontanería, Linux proporciona un llamado tee comandoque crea un "tee" de ajuste en nuestra tubería. El programa tee lee la entrada y lo copia en

tanto la salida estándar (que permite que los datos continúan por la tubería) y para uno ovarios archivos estándar. Esto es útil para capturar el contenido de una tubería en una etapaintermedia del procesamiento. Aquí repetimos uno de nuestros ejemplos anteriores, esta vezincluyendo camiseta para capturar todo el listado del directorio a la ls.txt archivo antes grepfiltra el contenido del oleoducto: 64

Page 96: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 96/571

 

Tuberías

[Me @ linuxbox ~] $ ls / usr / bin | tee ls.txt | grep postal bunzip2bzip2gunzipgzipabrir la cremalleracremallerazipcloakzipgrepzipinfozipnotezipsplit

Resumiendo

Como siempre, echa un vistazo a la documentación de cada uno de los comandos que hemoscubierto en este capítulo. Sólo hemos visto su uso más básico. Todos ellos tienen una serie deopciones interesantes. A medida que adquirimos experiencia en Linux, veremos que lafunción de redirección de la línea de comandos es extremadamente útil para la solución deproblemas especializados. Hay muchos comandos que hacen uso de la entrada y salidaestándar, y casi todos los programas de línea de comandos utilizan error estándar paramostrar sus mensajes informativos.

Linux es la imaginación

Cuando se me pide que explique la diferencia entre Windows y Linux, a menudo

utilizo una analogía juguete.Windows es como una Game Boy. Vas a la tienda y comprar uno totalmente nuevo ybrillante en el cuadro. Usted toma a su casa, lo enciende y jugar con él. Bonitosgráficos, sonidos lindos. Después de un tiempo, sin embargo, usted se cansa del juegoque vino con él por lo que ir de nuevo a la tienda y comprar otro. Este ciclo se repiteuna y otra. Por último, usted va a la tienda y decir a la persona detrás del mostrador,"Quiero un juego que hace esto!", Sólo para que le dijeran que no existe tal juego,porque no hay "demanda del mercado" por ello. Entonces usted dice: "Pero yo sólonecesita cambiar una cosa!" La persona detrás del mostrador dice que no puedescambiarlo. Los juegos están sellados en sus cartuchos. Usted descubre que su juguetese limita a los juegos que otros han decidido que usted necesita y no más.

Linux, en cambio, es como el más grande del mundo Set Erector. Lo abres y es sólouna enorme colección de piezas. Una gran cantidad de puntales de acero, tornillos,tuercas, engranajes, poleas, motores y algunas sugerencias sobre lo que debeconstruir. Así que empiezas a jugar con él. Usted construye una de las sugerencias yluego otro. Después de un tiempo se descubre

65

Page 97: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 97/571

 

6 - redirección

que tiene sus propias ideas de lo que debe hacer. No siempre tiene que volver a latienda, como usted ya tiene todo lo que necesita. El juego de construcción adquiere la

forma de su imaginación. Se hace lo que quiere.La elección de los juguetes es, por supuesto, una cosa personal, por lo que habría queencontrar el juguete más satisfactorio?

66

Page 98: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 98/571

[Me @ linuxbox ~] $ echo esto es una prueba esta es una prueba

[Me @ linuxbox ~] $ echo *Escritorio Documentos ls-Output.txt Música Imágenes Plantillas Pública Videos

7  - Al ver el mundo como la Shell lo ve

7 - A l ver el mundo como la Shel l lo ve

En este capítulo vamos a ver algunas de la "magia" que se produce en la línea de comandoscuando se pulsa la tecla Intro. Si bien vamos a examinar varias características interesantes ycomplejas de la cáscara, lo haremos con un solo nuevo comando:

• echo - Muestra una línea de texto

ExpansiónCada vez que escriba una línea de comandos y pulsa la tecla Intro, Bash realiza variosprocesos sobre el texto antes de que se lleve a cabo su mandato. Hemos visto un par de casosde cómo una secuencia de caracteres simples, por ejemplo, "*", puede tener mucho significadoa la cáscara. El proceso que hace que esto suceda se llama expansión. Con la expansión, seintroduce algo y se expande en otra cosa antes de que los actos de concha sobre ella. Parademostrar lo que queremos decir con esto, vamos a echar un vistazo a el comando echo. eco es

una orden interna del shell que realiza una tarea muy simple. Se imprime sus argumentos de

texto en la salida estándar:

Eso es bastante sencillo. Cualquier argumento que se pasa a hacerse eco se mostrará.Probemos otro ejemplo:

Entonces, ¿qué ha pasado? ¿Por qué no hacerse eco de impresión "*"? Como recordarán de

nuestro trabajo con comodines, el carácter "*" significa que coincida con cualquier carácter enun nombre de archivo, pero lo que no vimos en nuestra discusión original era cómo la cáscarahace eso. La respuesta simple es que el shell expande el "*" en otra cosa (en este caso, losnombres de los archivos de la

67

Page 99: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 99/571

 

7 - Al ver el mundo como la Shell lo ve

directorio de trabajo actual) antes de que el comando echo se ejecuta. Cuando se pulsa la teclaIntro, el shell expande automáticamente los caracteres de clasificación en la línea de comandosantes de que el comando se lleva a cabo, por lo que el comando echo nunca vio el "*", sólo su

resultado ampliada. Sabiendo esto, podemos ver que el eco se comportaron como se esperaba.

La expansión del nombre de rutaEl mecanismo por el cual comodines trabajo se llama la expansión ruta. Si tratamos algunas delas técnicas que hemos empleado en nuestros capítulos anteriores, veremos que en realidadson expansiones. Dado un directorio principal que se parece a esto:

[me @ linuxbox ~] $ ls Escritorio ls-output.txt  Imágenes  Plantillas Documentos Música  Público  Vídeos 

podríamos llevar a cabo las siguientes ampliaciones:

[me @ linuxbox ~] $ echo D *Documentos de Escritorio

y:

[me @ linuxbox ~] $ echo * s DocumentosImágenes Plantillas Videos

oincluso:

[Me @ linuxbox ~] $ echo [[: upper:]] * Documentos de Escritorio Música Fotos Plantillas Públicos Videos

y mirando más allá de nuestro directoriohome:

[Me @ linuxbox ~] $ echo / usr / * / share / usr /kerberos / share / usr / local / share

68

Page 100: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 100/571

 

Expansión

Nombre de ruta de expansión de archivos ocultos

Como sabemos, los nombres de archivo que comienzan con un carácter de puntoestán ocultos. La expansión del nombre de ruta también respeta este comportamiento.Una expansión como: echo *no revela los archivos ocultos.Podría parecer a primera vista que podríamos incluir archivos ocultos en unaexpansión iniciando el patrón con un punto inicial, como esto:. Eco *Casi funciona. Sin embargo, si examinamos los resultados de cerca, veremos que losnombres "." Y ".." serán también aparecerá en los resultados. Puesto que estos nombresse refieren al directorio de trabajo actual y su directorio padre, utilizando este patrónes probable producir un resultado incorrecto. Podemos ver esto si tratamos elcomando:. * Ls -d | menosPara llevar a cabo una mejor expansión ruta en esta situación, tenemos que emplear

un patrón más específico:. Eco * [!].Este patrón se expande en cada nombre de archivo que comienza con un período, noincluye un segundo período, y seguida de cualquier otro carácter. Esto funcionacorrectamente con la mayoría de los archivos ocultos (aunque todavía no incluirá losnombres de archivo con múltiples períodos principales). El comando ls con la opción-A ("casi todo") proporcionará una lista correcta de los archivos ocultos: ls -A

Expansión TildeComo se recordará de nuestra introducción al comando cd, el carácter de tilde ("~") tiene unsignificado especial. Cuando se usa al principio de una palabra, que se expande en el nombredel directorio de inicio del usuario llamado, o si no hay ningún usuario llamado, el directoriode inicio del usuario actual:

[Me @ linuxbox ~] $ echo ~ /home / me

Si el usuario "foo" tiene una cuenta,a continuación:

[Me @ linuxbox ~] $ echo ~ foo /home / foo

69

Page 101: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 101/571

[Me @ linuxbox ~] $ echo $ (($ ((5 ** 2)) * 3)) 75

7  - Al ver el mundo como la Shell lo ve

Expansión aritméticaEl depósito permite la aritmética que se realizará por la expansión. Esto nos permite usar lalínea de comandos como una calculadora:

[Me @ linuxbox ~] $ echo $ ((2 + 2))4

Expansión aritmética utiliza el formulario:

$ ( ( E x p r e s i ó n ) )

donde la expresión es una expresión aritmética que consiste en valores y operadoresaritméticos.

Expansión aritmética sólo admite números enteros (números enteros, sin decimales), pero

puede llevar a cabo un buen número de diferentes operaciones. Aquí están algunos de losoperadores compatibles:

Los espacios no son significativos en las expresiones aritméticas y expresiones puedenanidarse. Por ejemplo, para multiplicar 5 al cuadrado por 3:

Paréntesis individuales pueden utilizarse para agrupar varias subexpresiones. Con estatécnica, podemos reescribir el ejemplo anterior y obtener el mismo resultado utilizando unaúnica expansión en lugar de dos:

70

Tabla 7-1: Operadores aritméticos

Operador  Descripción  + Adición

- Sustracción* Multiplicación/

División (pero recuerde, ya que la expansión sólo es compatible con laaritmética de enteros, los resultados son números enteros.)

% Modulo, que simplemente significa, "resto".** Exponenciación

Page 102: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 102/571

 

Expansión

[Me @ linuxbox ~] $ echo $ (((5 ** 2) * 3)) 75

Aquí está un ejemplo utilizando los operadores de división y resto. Observe el efecto de ladivisión entera:

[Me @ linuxbox ~] $ echo Cinco dividido por dos es igual a $ ((5/2))  Cinco dividido por dos es igual a 2[Me @ linuxbox ~] $ echo con $ ((5% 2)) de sobra. con 1 sobra.

Expansión aritmética se cubre en mayor detalle en el Capítulo 34.

Expansión BraceQuizás la expansión más extraña se llama la expansión de llaves. Con él, usted puede crearvarias cadenas de texto de un patrón que contiene tirantes. He aquí un ejemplo:

[Me @ linuxbox ~] $ echo Front- {A, B, C} -Volver  Frente-A-Back Front-B-Back Front-C-Back

Patrones para ser corsé ampliado puede contener una porción delantera llamado unpreámbulo y una parte trasera llamado una posdata. La misma expresión corsé puede

contener una lista separada por comas de cadenas, o un rango de números enteros o caracteresindividuales. El patrón no puede contener espacios en blanco incrustados. Aquí hay unejemplo usando un rango de enteros:

[Me @ linuxbox ~] $ echo Number_ {1..5} Número_1 NUMBER_2 NUMBER_3 Number_4Number_5

Los enteros también pueden ser acolchadocero de este modo:

[Me @ linuxbox ~] $ echo {01..15}

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 [me @ linuxbox ~] $ echo{001..15}001 002 003 004 005 006 007 008 009 010 011 012 013 014 015

Una serie de letras en ordeninverso:

71

Page 103: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 103/571

[Me @ linuxbox ~] $ echo {a..z}ZYXWVUTSRQPONMLKJIHGF EDCBA[Me @ linuxbox ~] $ echo un {A {1,2}, B {3,4}} b aA1b aA2b aB3b aB4b

7  - Al ver el mundo como la Shell lo veExpansiones de llaves pueden anidarse:

Entonces, ¿qué es esto bueno? La aplicación más común es hacer listas de archivos odirectorios que se creen. Por ejemplo, si nos quedamos fotógrafos y tenía una gran colecciónde imágenes que queríamos organizar en años y meses, lo primero que podemos hacer escrear una serie de directorios nombrados en formato numérico "Año-Mes". De esta manera,los nombres de directorio ordenará en orden cronológico. Podríamos escribir una listacompleta de los directorios, pero eso es un montón de trabajo y es propenso a errores también.En su lugar, podríamos hacer esto:

Mancha Pretty!

Expansión ParámetroSólo vamos a hablar brevemente sobre la expansión de parámetro en este capítulo, pero

vamos a estar cubriendo ampliamente más adelante. Es una característica que es más útil enscripts de shell que directamente en la línea de comandos. Muchos de sus capacidades tienenque ver con la capacidad del sistema para almacenar pequeñas cantidades de datos y dar acada trozo un nombre. Muchos de estos trozos, más correctamente llamados variables, estándisponibles para su examen. Por ejemplo, la variable denominada "USUARIO" contiene sunombre de usuario. Para invocar la expansión de parámetro y revelar el contenido de usuarioque haga lo siguiente:

[me @ linuxbox ~] $ mkdir Fotos [me @ linuxbox ~] $ cd Fotos[Me @ linuxbox Fotos] $ mkdir {2007..2009} - {01..12}[Me @ linuxbox Fotos] $ ls2007-01

 2007-07

 2008-01

 2008-07

 2009-01

 2009-07

 2007-02  2007-08  2008-02  2008-08  2009-02  2009-08 2007-03  2007-09  2008-03  2008-09  2009-03  2009-09 2007-04  2007-10  2008-04  2008-10  2009-04  2009-10 2007-05  2007-11  2008-05  2008-11  2009-05  2009-11 2007-06  2007-12  2008-06  2008-12  2009-06  2009-12 

[Me @ linuxbox ~] echoUSUARIO

72

Page 104: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 104/571

 

Para ver una lista de las variablesdisponibles, intente lo siguiente:

[Me @ linuxbox ~] $ printenv | less

Expansión

Usted puede haber notado que con otros tipos de expansión, si se escribe incorrectamente unpatrón, la ampliación no tendrá lugar y el comando echo simplemente mostrará el patrónescrito mal. Con la expansión de parámetro, si se escribe incorrectamente el nombre de unavariable, la expansión se llevará a cabo todavía, pero dará lugar a una cadena vacía:

[Me @ linuxbox ~] $ echo $ SUER[me @ linuxbox ~] $

Comando SustituciónSustitución de comandos nos permite usar la salida de un comando como unaexpansión:

[Me @ linuxbox ~] $ echo $ (ls)Escritorio Documentos ls-Output.txt Música Imágenes Plantillas Pública Videos

Uno de mis favoritos es algo como esto:

[Me @ linuxbox ~] $ ls -l $ (que cp) -rwxr-xr-x 1 root root 71516 2007-12-05 08:58 / bin / cp

Aquí pasamos cuyos resultados cp como argumento para el comando ls, consiguiendo de estamanera la lista de del programa cp sin necesidad de conocer su ruta completa. No estamos

limitados a sólo simples comandos. Tuberías enteras se pueden usar (sólo salida parcial semuestra):

[Me @ linuxbox ~] $ archivo $ (ls -d / usr / bin / * | grep zip) / Usr / bin / bunzip2: enlace simbólico a bzip2 '

73

Page 105: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 105/571

 

7 - Al ver el mundo como la Shell lo ve

/ Usr / bin / bzip2: ELF 32-bits LSB ejecutable, Intel 80386,Versión 1 (SYSV), vinculado dinámicamente (usos librerías compartidas), paraGNU / Linux 2.6.9, despojados/ Usr / bin / bzip2recover: ELF 32-bits LSB ejecutable, Intel 80386, versión 1(SYSV), vinculado dinámicamente (usos libs compartido), para GNU / Linux 2.6.9,despojada/ Usr / bin / funzip: ELF 32-bits LSB ejecutable, Intel 80386,Versión 1 (SYSV), vinculado dinámicamente (usos librerías compartidas), paraGNU / Linux 2.6.9, despojados/ Usr / bin / gpg-zip: Bourne shell script ejecutable texto/ Usr / bin / gunzip: simbólico enlace a  '../../bin/gunzip'/ Usr / bin / gzip: simbólico enlace a  '../../bin/gzip'/ Usr / bin / mzip: simbólico enlace a 'mtools'

En este ejemplo, los resultados de la tubería se convirtieron en la lista de argumentos delcomando file.

Existe una sintaxis alternativa para la sustitución de comandos de shell en programas demayor edad que también se apoyó en bash. Utiliza copias de cotizaciones en lugar del signode dólar y paréntesis:

[Me @ linuxbox ~] $ ls -l 'que cp'-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 / bin / cp

Citando

Ahora que hemos visto cómo muchas maneras la cáscara puede realizar expansiones, es horade aprender cómo podemos controlarlo. Tomemos, por ejemplo:

[Me @ linuxbox ~] $ echo esto es una prueba esta es una prueba

o:

[Me @ linuxbox ~] $ echo El total es de $ 100.00 El total es de 00.00

En el primer ejemplo, la palabra de reparto por el cascarón espacios en blanco extra de la listadel comando echo de argumentos. En el segundo ejemplo, la expansión de parámetrosustituido una cadena vacía para el valor de "$ 1" porque era una variable no definida. El shellproporciona un mecanismo llamado citando a suprimir selectivamente las expansiones nodeseados.

74

Page 106: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 106/571

 

Citando

Doble CotizacionesEl primer tipo de citar vamos a ver es entre comillas dobles. Si coloca texto entre comillasdobles, todos los caracteres especiales utilizados por el shell pierden su significado especial y

se tratan como caracteres normales. Las excepciones son "$", "\" (barra invertida), y "'" (comillainversa). Esto significa que la palabra de reparto, la expansión ruta, la expansión de tilde, y laexpansión de llaves se suprimen, pero la expansión de parámetro, expansión aritmética, y lasustitución de comandos aún se llevan a cabo. El uso de comillas dobles, podemos hacer frentea los nombres de archivo que contienen espacios incrustados. Decir que nos quedamos ladesafortunada víctima de un archivo llamado dos words.txt. Si tratamos de utilizar esto en lalínea de comandos, palabra-división causaría que esto se trata como dos argumentosseparados en lugar de solo el argumento deseado:

[Me @ linuxbox ~] $ ls -l dos words.txt ls: no se puede acceder a dos: No hay tales ls archivo o directorio: no

pueden acceder a words.txt: No existe el fichero o directorio

Mediante el uso de comillas dobles, dejamos la palabra de división y obtenemos el resultadodeseado; aún más, incluso podemos reparar el daño:

[Me @ linuxbox ~] $ ls -l "dos words.txt" -rw-rw-r-- 1 me me 18 2008-02-20 13:03 dos words.txt [me @ linuxbox ~]$ mv two_words.txt "dos words.txt"

Hay! Ahora no tenemos que seguir escribiendo esas comillas molestos.

Recuerde, la expansión de parámetro, expansión aritmética, y la sustitución de comandostodavía tener lugar dentro de las comillas dobles:

[Me @ linuxbox ~] $ echo "$ USER $ ((2 + 2)) $ (cal)"  me 04 de febrero 2008 Do Lu Ma Mi Ju Vi Sa 1 2

3 4 5 6 7 8 910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29

Debemos tomar un momento para mirar el efecto de comillas dobles en la sustitución decomandos. En primer lugar vamos a ver un poco más cómo funciona la división de palabras.En nuestro ejemplo anterior, vimos cómo aparece la palabra-división para eliminar espaciosadicionales en nuestro texto:

75

Page 107: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 107/571

[Me @ linuxbox ~] $ echo esto es una prueba esta es una prueba

[Me @ linuxbox ~] $ echo $ (cal)Febrero 2008 Do Lu Ma Mi Ju Vi Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2021 22 23 24 25 26 27 28 29 [me @ linuxbox ~] $ echo "$ (cal ) "

Febrero 2008 Do LuMa Mi Ju Vi Sa 1 2

3 4 5 6 7 8 910 11 12 13 14 15 1617 18 19 20 21 22 23

24 25 26 27 28 29

7 - Al ver el mundo como la Shell lo ve

Por defecto, la palabra-división busca la presencia de espacios, tabuladores y saltos de línea(caracteres de avance de línea) y los trata como delimitadores entre las palabras. Esto quieredecir que no cotizados espacios, tabuladores y saltos de línea no son considerados como parte

del texto. Sólo sirven como separadores. Desde que se separan las palabras en diferentesargumentos, nuestra línea de ejemplo de comandos contiene un comando seguido de cuatroargumentos distintos. Si añadimos comillas dobles:

palabra-división se suprime y los espacios incrustados no son tratados como delimitadores, yno pasan a formar parte del argumento. Una vez que se agregan las comillas dobles, nuestralínea de comandos contiene un comando seguido de un solo argumento.

El hecho de que los saltos de línea se consideran delimitadores por el mecanismo de repartode la palabra provoca una interesante, aunque sutil, el efecto sobre la sustitución decomandos. Considere lo siguiente:

En el primer caso, la sustitución de comandos no cotizado resultó en una línea de comandos

que contiene 38 argumentos. En el segundo, una línea de comandos con un argumento queincluye espacios incrustados y la nuevas líneas.

Soltero CotizacionesSi tenemos que suprimir todas las expansiones, usamos comillas simples. He aquí unacomparación de, comillas dobles no cotizadas, y las comillas simples: 76

[Me @ linuxbox ~] $ Echo "esto es un  prueba " esta es una  prueba 

Page 108: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 108/571

 

Citando

[Me @ linuxbox ~] $ texto eco ~ / *. Txt {a, b} $ (foo eco) $ ((2 + 2)) $ USUARIO  texto /home/me/ls-output.txt a b foo 4 me[Me @ linuxbox ~] $ echo "texto ~ / *. Txt {a, b} $ (foo eco) $ ((2 + 2)) $ USER"  texto ~ / *. txt {a, b} foo 4 me[Me @ linuxbox ~] $ echo "texto ~ / *. Txt {a, b} $ (foo eco) $ ((2 + 2)) $ USER '  texto ~ / *. txt {a, b} $ (foo eco) $ ((2 + 2)) $ USUARIO

Como podemos ver, con cada nivel sucesivo de citar, más y más de las expansiones sesuprimen.

Escapar PersonajesA veces sólo queremos citar un solo carácter. Para ello, podemos preceder a un personaje conuna barra invertida, que en este contexto se llama el carácter de escape. A menudo esto se hacedentro de las comillas dobles para evitar una expansión selectiva:

[Me @ linuxbox ~] $ echo "El balance para el usuario $ usuario es: \ $ 5,00"  El balance para mí usuario es: $ 5.00

También es común el uso de escape para eliminar el significado especial de un carácter en unnombre de archivo. Por ejemplo, es posible utilizar caracteres en los nombres de archivo quenormalmente tienen un significado especial para el shell. Estos incluyen "$", "!", "&", "", Yotros. Para incluir un carácter especial en un nombre de archivo que pueda para esto:

[Me @ linuxbox ~] $ mv malo \ & nombre de archivogood_filename 

Para permitir que un carácter de barra invertida aparezca, escapar de ella escribiendo "\\".Tenga en cuenta que dentro de comillas simples, la barra invertida pierde su significadoespecial y se trata como un carácter ordinario.

Secuencias de escape barra diagonal inversa

Además de su papel como el carácter de escape, la barra invertida también se utilizacomo parte de una notación para representar determinados caracteres especiales

conocidos como códigos de control. Los primeros 32 caracteres en el esquema decodificación ASCII se utilizan para transmitir órdenes a teletipo-como losdispositivos. Algunos de estos códigos son familiares (pestaña, retroceso, avance delínea y retorno de carro), mientras que otros no lo son (nulo, al final de la transmisión,y reconocen).

77

Page 109: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 109/571

La tabla anterior muestra algunas de las secuencias de escape de barra invertidacomún. La idea detrás de esta representación mediante la barra invertida se originó enel lenguaje de programación C y ha sido adoptado por muchos otros, incluyendo lacáscara.Adición de la opción "-e" hacer eco permitirá la interpretación de secuencias de

escape. También puede colocarlos en el interior $ ' '. Aquí, utilizando el c o ma nd od e l s u e ñ o , u n a s i mprograma PLE que sólo espera a que el número especificado de segundos y luego sale,podemos crear una primitiva temporizador de cuenta atrás: el sueño de 10; echo -e "deTime hasta \ a"También podríamos hacer esto:dormir 10; echo "Se acabó el tiempo" $ '\ a'

7 - Al ver el mundo como la Shell lo ve

Resumiendo

A medida que avanzamos con el uso de la cáscara, nos encontraremos con que las expansionesy de cotización se utiliza cada vez con mayor frecuencia, así que tiene sentido para obteneruna buena comprensión de la forma en que trabajan. De hecho, se podría argumentar que sonlos temas más importantes para aprender acerca de la cáscara. Sin una comprensión adecuadade la expansión, la cáscara siempre será una fuente de misterio y confusión, y gran parte deella poder potencial desperdiciado.

Lectura adicional•  La página de manual de bash tiene grandes secciones en tanto la expansión como laque citando a cubrir estos temas de una manera más formal.

•  El Manual de Referencia Bash también contiene capítulos sobre la expansión ycitando: http://www.gnu.org/software/bash/manual/bashref.html  

78

Secuencia de Escape  Significado  

\ A Bell ("Alerta" - hace que el equipo emita un pitido)\ B Retroceso\ N

Newline. En los sistemas Unix, esto produce unsalto de línea.

\ R Retorno de carro\ T Lengüeta

Page 110: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 110/571

8  - Trucos avanzadas delteclado

8 - Trucos avanzadas del teclado

A menudo me describo en broma Unix como "el sistema operativo para las personas que lesgusta escribir." Por supuesto, el hecho de que incluso tiene una línea de comandos es untestimonio de ello. Pero los usuarios de la línea de comandos no les gusta escribir mucho. ¿Porqué si tantos comandos tienen nombres tan cortos como cp, ls, mv, y rm? De hecho, uno de losobjetivos más preciados de la línea de comandos es la pereza; haciendo la mayor parte del

trabajo con el menor número de golpes de teclado. Otra meta es nunca tener que levantar losdedos del teclado, nunca alcanza para el ratón. En este capítulo, vamos a ver las característicasde bash que hacen uso del teclado más rápido y más eficiente.

Los siguientes comandos harán acto de presencia:

•  c l a r o - Borrar la pantalla

•  historia - Mostrar el contenido de la lista del historial

De línea de comandos de edición

B a s h utiliza una biblioteca (una colección compartida de rutinas que los diferentes

programas se pueden utilizar) llama Readline para implementar la edición de línea decomandos. Ya hemos visto algo de esto. Sabemos, por ejemplo, que las teclas de flechamueven el cursor, pero hay muchas más características. Piense en estas herramientas comoadicionales que podemos emplear en nuestro trabajo. No es importante aprender de todosellos, pero muchos de ellos son muy útiles. Seleccionar y elegir si lo deseas.

Nota: Algunas de las secuencias de teclas de abajo (en particular los que utilizan latecla Alt) pueden ser interceptados por la interfaz gráfica de usuario para otrasfunciones. Todas las secuencias de teclas debería funcionar correctamente cuando seutiliza una consola virtual.

Movimiento del cursorLa siguiente tabla muestra las teclas que se utilizan para mover el cursor:

79

Page 111: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 111/571

 

Modificación del texto

Tabla 8-2 enumera los comandos del teclado que se utilizan para editar los caracteres en la

línea de comandos. Tabla 8-2: Comandos de edición de texto

Cortar y pegar (destruir y tirar) TextoLa documentación de Readline utiliza los términos destruir y tirar para referirse a lo quecomúnmente llamaríamos cortar y pegar. Los productos que se cortan se almacenan en unbuffer llamado killring.

80

8 - Trucos de teclado Avanzada

Tabla 8-1:  Cursor comandos de movimiento 

Clave  Acción 

C t r l - a Mover el cursor al principio de la línea.C t r l - e Mover el cursor hasta el final de la línea.

C t r l - fMueve el cursor un carácter hacia adelante; mismo que la tecla de flechaderecha.

C t r l - bMueve el cursor hacia atrás un carácter; mismo que la tecla de flechaiz uierda.

A l t - f Mueve el cursor una palabra hacia delante.

A l t - b Mueve el cursor hacia atrás una palabra.

C t r l - l Desactive la pantalla y mover el cursor a la esquina superior izquierda.El comando clear hace lo mismo.

Clave  Acción C t r l - D Eliminar el carácter situado en la posición del cursor

C t r l - tTranspose (cambio) el carácter en la posición del cursor con el que le

precede.

A l t - tTransposición de la palabra en la posición del cursor con el que le

recede.A l t - l Convertir los caracteres de la posición del cursor hasta el final de la

palabra a minúsculas.

A l t - u Convertir los caracteres de la posición del cursor hasta el final de lapalabra a mayúsculas.

Page 112: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 112/571

 

De línea de comandosde edición

Tabla 8-3: cortar y pegar los comandos

Clave  Acción C t r l - k Matar texto desde la posición del cursor hasta el final de la línea.

C t r l - u Matar texto desde la posición del cursor hasta el principio de la línea.A l t - d Matar texto desde la posición del cursor hasta el final de la palabra

actual.A l tRe t r o c e s o

Matar texto desde la posición del cursor hasta el principio de la palabraactual. Si el cursor se encuentra al comienzo de una palabra, matar a lapalabra anterior.

C t r l - yYank texto desde el histórico de recortes y la inserta en la posición delcursor.

La tecla Meta

Si se aventura en la documentación de Readline, que se puede encontrar en la secciónREADLINE de la página de manual de bash, se encontrará con el término "tecla meta."En los teclados modernos esto se asigna a la tecla Alt, pero no siempre fue así. Ya enlos tiempos oscuros (antes de las PC, pero después de Unix) no todo el mundo tenía supropio ordenador. Lo que ellos podrían haber tenido era un dispositivo llamado unterminal. Un terminal era un dispositivo de comunicación que contó con una pantallade visualización de texto y un teclado y suficiente dentro de la electrónica paramostrar caracteres de texto y mover el cursor alrededor. Se adjunta (generalmente por

cable en serie) a un ordenador más grande o la red de comunicación de un ordenadormás grande. Había muchas marcas diferentes de terminales y todos ellos teníandiferentes teclados y conjuntos de características de visualización. Ya que todostendían a por lo menos entender ASCII, los desarrolladores de software que deseanaplicaciones portátiles escribieron al mínimo común denominador. Sistemas Unixtienen una forma muy elaborada de hacer frente a las terminales y sus diferentescaracterísticas de visualización. Dado que los desarrolladores de Readline no podíanestar seguros de la presencia de una tecla de control adicional dedicado, inventaronuno y lo llamaron "meta". Si bien la tecla Alt sirve como la tecla meta en los tecladosmodernos, puede también pulsar y soltar la tecla Esc clave para conseguir el mismoefecto que mantiene pulsada la tecla Alt si usted todavía está utilizando un terminal

(que todavía se puede hacer en Linux!).Terminación

Otra forma en que la cáscara puede ayudar es a través de un mecanismo llamado finalización.Finalización se produce cuando se pulsa la tecla de tabulación mientras se escribe uncomando. Vamos a ver cómo funciona esto. Dado un directorio principal que se parece a esto:

81

Page 113: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 113/571

 

8 - Trucos de teclado Avanzada

[me @ linuxbox ~] $ ls Escritorio ls-output.txt  Fotos Plantillas  Vídeos Documentos Música  Público 

Pruebe a escribir lo siguiente pero no presione la tecla Intro:

[me @ linuxbox ~] $ ls l

A continuación, pulsela tecla de tabulación:

[Me @ linuxbox ~] $ ls-output.txt

Vea cómo la cáscara completó la línea para usted? Vamos a probar otra. Una vez más, nopulse Intro:

[Me @ linuxbox ~] $ ls D

Pulse laficha:

[Me @ linuxbox ~] $ ls D

Sin terminar, sólo un pitido. Esto sucedió porque "D" coincide con más de una entrada en eldirectorio. Para completar para tener éxito, la "idea" le dará lo que tiene que ser inequívoco. Sivamos más allá:

[Me @ linuxbox ~] $ ls Do

A continuación,pulse la ficha:

[me @ linuxbox ~] $ ls Documentos

La conclusión es exitosa.

Aunque este ejemplo muestra la terminación de nombres de ruta, que es su uso más común,

82

Page 114: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 114/571

Finalización programable

Las versiones recientes de fiesta tienen una instalación llamada finalizaciónprogramable. Finalización programable le permite (o, más probablemente, suproveedor de distribución) para agregar reglas de terminación adicionales. Por logeneral, esto se hace para añadir soporte para aplicaciones específicas. Por ejemplo, esposible añadir las terminaciones de la lista de opciones de un comando o que coincidacon determinados tipos de archivo que soporta una aplicación. Ubuntu tiene unabastante grande conjunto definido de forma predeterminada. Finalizaciónprogramable se implementa mediante funciones de shell, una especie de mini-shellscript que vamos a cubrir en los próximos capítulos. Si eres curioso, pruebe: set | less

y ver si usted puede encontrarlos. No todas las distribuciones los incluyen pordefecto.

Terminación

finalización también trabajará en las variables (si el principio de la palabra es un "$"), nombresde usuario (si la palabra comienza con "~"), los comandos (si la palabra es la primera palabraen la línea.) y los nombres de host ( si el comienzo de la palabra es "@"). Terminación denombre de host sólo funciona para los nombres de host que figuran en el / etc / hosts.

Hay un número de control y meta secuencias de teclas que están asociadas con la terminación:

Hay unos cuantos más que me parece más bien oscuro. Usted puede ver una lista en la páginade manual de bash en "READLINE".

Uso del historial

Como descubrimos en el capítulo 1, golpe mantiene un historial de los comandos que se han

introducido. Esta lista de comandos se guarda en el directorio de inicio en un archivo llamado.bash_history. La instalación de la historia es un recurso útil para reducir la cantidad deescribir lo que tienes que hacer, especialmente cuando se combina con la edición de línea decomandos.

83

Clave  Acción A l t ? Mostrar la lista de terminaciones posibles. En la mayoría de los sistemas

también se puede hacer esto pulsando la tecla de tabulación una segunda

A l t * Insertar todas las terminaciones posibles. Esto es útil cuando se deseautilizar más de una posible coincidencia.

Tabla 8-4: Comandos de finalización

Page 115: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 115/571

 

8 - Trucos de teclado Avanzada

Historia búsquedaEn cualquier momento, podemos ver el contenido de la listade la historia a través de:

[Me @ linuxbox ~] historia | menos

De forma predeterminada, golpe almacena los últimos 500 comandos que ha introducido.Vamos a ver cómo ajustar este valor en un capítulo posterior. Digamos que queremosencontrar los comandos que usamos para listar / usr / bin. Una manera de que pudiéramoshacer esto:

[Me @ linuxbox ~] $ historia | grep / usr / bin 

Y digamos que entre los resultados que conseguimos una línea que contiene un comandointeresante como esto:

88 ls -l / usr / bin> ls-output.txt

El número "88" es el número de línea del comando en la lista del historial. Podríamos utilizareste inmediatamente utilizando otro tipo de expansión llamado expansión de historia. Parausar nuestra línea descubrimos que podíamos hacer esto:

[Me @ linuxbox ~] 88

B a s h s e e xp a n d i r á " 8 8 " e n e l c o n t e n i d o d e l a Oc t o g é s i m a o c t a v a l ín e a e nl a l i s t a d e h i s t o r i a l . H a y o t r a s f o r m a s d e e xp a n s i ó n d e h i s t o r i a q u e v a m o sa c u b r i r u n p o c o m á s t a r d e .

B a s h t a m bi é n p r o p o r c i o n a l a c a p a c i d a d d e bu s c a r e n l a l i s t a d e l a h i s t o r i ad e f o r m a i n c r e m e n t a l . E s t o s i g n i f i c a q u e p o d e m o s d e c i r l e a ba s h p a r abu s c a r e n l a l i s t a d e l a h i s t o r i a a m e d i d a q u e e n t r a m o s p e r s o n a je s , c o nc a d a p e r s o n a je a d i c i o n a l r e f i n a r a ú n m á s n u e s t r a bú s q u e d a . P a r a i n i c i a rl a b ú s q u e d a i n c r e m e n t a l p u l s e C t r l - r s e g u i d o d e l t e x t o q u e b u s c a .Cu a n d o l o e n c u e n t r e , p u e d e p u l s a r E n t e r p a r a e j e c u t a r e l c o m a n d o op u l s e Ct r l - J p a r a c o p i a r l a l ín e a d e l a l i s t a d e l a h i s t o r i a a l a l ín e a d e

c o m a n d o s a c t u a l . P a r a bu s c a r l a s i g u i e n t e a p a r i c i ó n d e l t e x t o ( q u e s em u e v e " h a c i a a r r i b a " l a l i s t a d e l h i s t o r i a l ) , p u l s e C t r l - r d e n u e v o . P a r as a l i r d e l a b ú s q u e d a , p u l s e C t r l - g o C t r l - C . A q u í l o v e m o s e n a c c i ó n :

[Me @ linuxbox ~]

Primero, pulse Ctrl-r:

8 4

Page 116: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 116/571

(Reverse-i-búsqueda) ''

(Reverse-i-búsqueda) '/ usr / bin': ls -l / usr / bin> ls-output.txt

[Me @ linuxbox ~] $ ls -l / usr / bin> ls-output.txt 

Uso del historial

Los rápidos cambios que indican que estamos llevando a cabo una búsqueda incrementalinversa. Se trata de "revertir" porque estamos en busca de "ahora" para algún momento en el

pasado. A continuación, empezamos a escribir nuestro texto de búsqueda. En este ejemplo "/usr / bin":

Inmediatamente, la búsqueda devuelve nuestro resultado. Con nuestro resultado, podemos

ejecutar el comando pulsando Enter, o podemos copiar el comando a nuestra línea decomando actual para su posterior edición pulsando Ctrl-j. Vamos a copiarlo. Presione Ctrl-j:

Nuestros shell prompt devoluciones y nuestra línea de comandos, se haya

cargado y listo para la acción! La siguiente tabla muestra algunas de laspulsaciones de teclas que se utilizan para manipular la lista de la historia:Tabla 8-5: Comandos de historia

Clave  Acción 

C t r l - pMover a la entrada de la historia anterior. La misma acción como laflecha hacia arriba.

C t r l - n Mover a la siguiente entrada de la historia. La misma acción como laflecha hacia aba o.

A l t < Ir al principio (arriba) de la lista del historial.

A l t > Mover a la final (abajo) de la lista del historial, es decir, la línea decomandos actual.

C t r l - rInvierta búsqueda incremental. Busca en forma incremental desde lalínea de comandos actual hasta la lista del historial.

A l t - pBúsqueda hacia atrás, no incremental. Con esta clave, escriba la cadenade búsqueda y pulse enter antes de realizar la búsqueda.

A l t - N Búsqueda hacia adelante, no incremental.

C t r l - OEjecute el elemento actual de la lista de la historia y avanzar a lasiguiente. Esto es útil si usted está tratando de volver a ejecutar unasecuencia de comandos en la lista del historial.

85

Page 117: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 117/571

guión

Además de la función de historial de comandos en bash, la mayoría de lasdistribuciones Linux incluyen un programa llamado secuencia de comandos que sepuede utilizar para grabar una sesión de toda la cáscara y guardarlo en un archivo. Lasintaxis básica del comando es: guión [archivo]donde archivo es el nombre del archivo que se utiliza para almacenar la grabación. Sino se especifica ningún archivo, se utiliza el archivo de texto mecanografiado. Vea lapágina man guión para una lista completa de opciones y características del programa.

8  - Trucos avanzadas del teclado

Historia de ExpansiónLa cáscara ofrece un tipo especializado de expansión para los elementos de la lista del historialmediante el uso de la "!" Carácter. Ya hemos visto cómo el signo de exclamación puede serseguido por un número de insertar una entrada de la lista del historial. Hay un número deotras características de expansión:

Quisiera advertir contra el uso de la "cadena!" Y "!? Cadena" formas a menos que estéabsolutamente seguro de los contenidos de los elementos de la lista de historia.

Hay muchos más elementos disponibles en el mecanismo de expansión de historia, pero estetema ya es demasiado arcana y nuestras cabezas pueden explotar si continuamos. La secciónEXPANSIÓN historia de la página del manual de bash entra en todos los detalles sangrientos.Siéntase libre de explorar!

Resumiendo

En este capítulo hemos cubierto algunos de los trucos de teclado que la cáscara proporcionapara ayudar a los mecanógrafos del hardcore reducir sus cargas de trabajo. Sospecho que amedida que pasa el tiempo y que involucrarse más con la línea de comandos, se le consulte denuevo a este capítulo para recoger a 86

Secuencia   Acción !! Repetir el último comando. Es probablemente más fácil que pulsar la flecha hacia arriba

y entrar.

! número Historia número elemento de la lista de repetición.

C a d e n a !Repetir el último elemento de la lista la historia comenzando con unacuerda.

! ? Ca d e na Repetir el último elemento de la lista que contiene la historia de lacadena.

Tabla 8-6: Comandos Historia de expansión

Page 118: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 118/571

Resumiendo

87

más de estos trucos. Por ahora, considerarlos opcional y potencialmente útil.

Lectura adicional

• La Wikipedia tiene un buen artículo sobre terminales de ordenador:

http://en.wikipedia.org/wiki/Computer terminales 

Page 119: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 119/571

9  - Permisos

9 - Perm isos

Los sistemas operativos en la tradición Unix difieren de las de la tradición de MS-DOS, ya queson no sólo los sistemas multitarea, sino también los sistemas multi-usuario, así.

¿Qué significa exactamente esto? Esto significa que más de una persona puede ser el uso de lacomputadora al mismo tiempo. Mientras que una computadora típica probablemente tendrásólo un teclado y un monitor, todavía puede ser utilizado por más de un usuario. Por ejemplo,

si un ordenador está conectado a una red o de Internet, los usuarios remotos puedenconectarse a través de SSH (Secure Shell) y operar el equipo. De hecho, los usuarios remotospueden ejecutar aplicaciones gráficas y tienen la salida gráfica aparece en una pantalla remota.El sistema X Window apoya esto como parte de su diseño básico.

La capacidad multiusuario de Linux no es una "innovación", reciente sino más bien unacaracterística que está profundamente arraigada en el diseño del sistema operativo. Teniendoen cuenta el entorno en el que Unix fue creado, esto tiene mucho sentido. Hace años, antes delos ordenadores eran "personal", que eran grandes, caros, y centralizado. Un sistema típicoequipo universitario, por ejemplo, consistía en un gran ordenador central situado en unedificio y los terminales que se encuentran en todo el campus, cada uno conectado a lacomputadora central de gran tamaño. El ordenador apoyaría muchos usuarios al mismo

tiempo.Con el fin de hacer esta práctica, un método tenía que ser concebidos para proteger a losusuarios de la otra. Después de todo, las acciones de un usuario no se podría permitir aestrellar la computadora, ni podrían un usuario interferir con los archivos que pertenecen aotro usuario.

En este capítulo vamos a ver esta parte esencial de la seguridad del sistema e introducir lossiguientes comandos:

•  Identificación - Visualización de identidad de usuario

•  chmod - Cambie el modo de un archivo

•  u m a s k - Establecer los permisos de archivo por defecto

•  do - Ejecutar un shell como otro usuario

•  s u d o - Ejecutar un comando como otro usuario

•  c h o wn - Cambia el propietario de un archivo

88

Page 120: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 120/571

[Me @ linuxbox ~] $ archivo / etc / shadow / etc / shadow:

archivo normal, sin permiso de lectura [me @ linuxbox ~] $less / etc / shadow / etc / shadow: Permiso denegado

[Me @ linuxbox ~] $ iduid = 500 (ME) gid = 500 (ME) grupos = 500 (yo)

[Me @ linuxbox ~] $ id uid = 1000 (yo) gid = 1000 (yo)grupos = 4 (ADM), 20 (dialout), 24 (cdrom), 25 (disquete), 29 (audio), 30 (inmersión), 44 (video), 46 (plugdev), 108 (lpadmin), 114 (admin), 1000 (yo)

9  - Permisos

•  c h g r p - Cambie la propiedad de grupo de un archivo

•  passwd - Cambiar la contraseña de un usuario

Los propietarios, miembros del grupo, y todos los demás

Cuando estábamos explorando el sistema de nuevo en el capítulo 3, es posible que hayamosencontrado un problema al intentar examinar un archivo de ejemplo / etc / shadow:

El motivo de este mensaje de error es que, como usuarios regulares, no tenemos permiso paraleer este archivo.

En el modelo de seguridad de Unix, un usuario puede ser propietaria de archivos ydirectorios. Cuando un usuario es dueño de un archivo o directorio, el usuario tiene el controlsobre su acceso. Los usuarios pueden, a su vez, pertenecen a un grupo que consiste de uno omás usuarios que se les da acceso a los archivos y directorios por parte de sus propietarios.

Además de permitir el acceso a un grupo, un propietario también podrá conceder un conjuntode derechos de acceso a todo el mundo, lo que en términos de Unix se conoce como el mundo.Para obtener información acerca de su identidad, utilice el comando id:

Echemos un vistazo a la salida. Cuando se crean las cuentas de usuario, los usuarios se les

asigna un número llamado un ID de usuario o UID que es entonces, por el bien de los sereshumanos, asignada a un nombre de usuario. El usuario se le asigna un ID de grupo primario ogid y puede pertenecer a grupos adicionales. El ejemplo anterior es de un sistema Fedora. Enotros sistemas, como Ubuntu, la salida puede tener un aspecto un poco diferente:

Como podemos ver, los números UID y GID son diferentes. Esto es simplemente porqueFedora inicia su numeración de cuentas de usuario normal a 500, mientras que Ubuntu se

inicia en 1000. También puede

89

Page 121: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 121/571

[Me @ linuxbox ~] $> foo.txt [me @ linuxbox ~] $ ls -l foo.txt-rw-rw-r-- 1 mí me 0 2008-03-06 14:52 foo.txt

9 - Permisos de ver que el usuario de Ubuntu pertenece a muchos más grupos. Esto tiene quever con la forma en Ubuntu gestiona los privilegios de dispositivos y servicios del sistema.Así que ¿de dónde viene esta información? Como tantas cosas en Linux, desde un par dearchivos de texto. Las cuentas de usuario se definen en el archivo / etc / passwd y grupos sedefinen en el archivo / etc / group. Cuando se crean las cuentas de usuarios y grupos, estosarchivos se modifican junto con / etc / shadow que contiene información acerca de la

contraseña del usuario. Para cada cuenta de usuario, el archivo / etc / passwd define elusuario (login) nombre, uid, gid, el verdadero nombre de la cuenta, el directorio home, y deinicio de sesión de shell. Si se examina el contenido de / etc / passwd y / etc / group, te daráscuenta de que además de las cuentas de usuarios regulares, hay cuentas de superusuario (uid0) y otros usuarios del sistema.

En el próximo capítulo, cuando cubrimos los procesos, se verá que algunos de estos otros"usuarios" son, de hecho, bastante ocupado.

Mientras que muchos sistemas Unix asignan los usuarios regulares a un grupo común como"usuarios", la práctica moderna de Linux es la creación de un grupo único, de un solomiembro con el mismo nombre que el usuario. Esto hace que ciertos tipos de asignación de

permisos más fácil.

La lectura, la escritura, y ejecución

Los derechos de acceso a archivos y directorios se definen en términos de acceso de lectura,escritura y acceso de ejecución. Si nos fijamos en la salida del comando ls, podemos obteneralguna pista sobre cómo esto se implementa:

Los diez primeros caracteres de la lista son los atributos de archivo. El primero de estos

personajes es el tipo de archivo. Aquí están los tipos de archivos que tienen másprobabilidades de ver (hay otros tipos menos comunes, también):Tabla 9-1: Tipos de archivo

Atributo  Tipo de archivo  - Un archivo normal.

d Un directorio.l Un enlace simbólico. Tenga en cuenta que con enlaces simbólicos, los

atributos de archivo restantes son siempre "rwxrwxrwx" y son valoresficticios. Los atributos de archivo reales son las del archivo de los puntos de

90

Page 122: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 122/571

 

El resto de los nueve personajes de los atributos de archivo, llamado el modo de archivo,representan la lectura, escritura y ejecución permisos para el propietario del archivo,propietario del grupo del archivo, y todos los demás:

Cuando atributos conjunto, la r, w, x, y de modo tienen el siguiente efecto sobre los archivos y

directorios:

He aquí algunos ejemplos de configuración de atributos de archivos:

919 - Permisos

La lectura, la escritura, y ejecuciónc Un archivo especial de caracteres. Este tipo de archivo se refiere a un

dispositivo que maneja los datos como un flujo de bytes, tales como un

b Un archivo especial de bloques. Este tipo de archivo se refiere a undispositivo que gestiona los datos en bloques, como un disco duro o

Propietario   Grupo  Mundo 

rwx  rwx  rwx 

Tabla 9-2: Atributos de permisos

Atributo   Archivos  Directorios  r Permite que un archivo sea abierto

y leído.Permite que el contenido de undirectorio para ser listados sitambién se establece el atributo de

w Permite que un archivo sea escritoo trunca, sin embargo, esteatributo no permite archivos paracambiar el nombre ni eliminar. La

capacidad de eliminar o cambiar elnombre de los archivos estádeterminada por los atributos de

Permite a los archivos dentro deun directorio para crear, eliminar,cambiar el nombre y si también seestablece el atributo de ejecutar.

x Permite que un archivo sea tratadocomo un programa y ejecutado.Archivos de programa escritos enlenguajes de script también sedeben configurar como legible

Permite a un directorio paraintroducir, por ejemplo, eldirectorio cd.

Page 123: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 123/571

 

chmod - Cambia el modo de archivoPara cambiar el modo (permisos) de un archivo o directorio, se utiliza el comando chmod.Tenga en cuenta que sólo el propietario del archivo o el superusuario puede cambiar el modode un archivo o directorio. chmod admite dos formas distintas de especificar los cambios demodo de representación: número octal, o de representación simbólica. Cubriremosrepresentación número octal primero.

92

Tabla 9-3: Ejemplos de permisos de atributosAtributos de Significado  - r w x - - - - - - -

Un archivo normal que se puede leer, escribir, y ejecutable por eldueño del archivo. Nadie más tiene acceso.

-rw --------------Un archivo normal que es de lectura y escritura por el propietario

del archivo. Nadie más tiene acceso.- r w - r - r - - Un archivo normal que es de lectura y escritura por el propietario

del archivo. Los miembros del grupo propietario del archivo puedeleer el archivo. El archivo es de lectura global.

- r w x r - x r - x Un archivo normal que se puede leer, escribir, y ejecutable por eldueño del archivo. El archivo puede ser leído y ejecutado por todoslos demás.

- r w - r w - - - -Un archivo normal que es de lectura y escritura por el propietariodel archivo y los miembros del grupo solo propietario del archivo.

l r w x r w x r w xUn enlace simbólico. Todos los enlaces simbólicos tienen permisos"ficticios". Los permisos reales se mantienen con el archivo real alque apunta el enlace simbólico.

drwxrwx-Un directorio. El propietario y los miembros del grupo propietariopueden entrar en el directorio y, crear, renombrar y eliminararchivos en el directorio.

d r w x r - x Un directorio. El propietario puede entrar en el directorio y crear,renombrar y borrar archivos en el directorio. Los miembros delgrupo propietario pueden entrar en el directorio, pero no puedencrear, eliminar o cambiar el nombre de los archivos.

Page 124: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 124/571

 

La lectura, la escritura, y ejecución

¿Qué diablos es octal?

Octal (base 8), y su primo, hexadecimal (base 16) son sistemas numéricos a menudo utilizadas

 para expresar números en las computadoras. Nosotros, los humanos, debido al hecho de que

nosotros (o al menos la mayoría de nosotros) nacimos con diez dedos, cuente el uso de un sistema

de base de 10 números. Computadoras, por otro otro lado, nacieron con un solo dedo y así hacer

todo todo su conteo en binario (base 2). Su sistema numérico sólo tiene dos números, 0 y 1. Así

que en binario, el conteo se parece a esto: 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011 ...En octal, el conteo se realiza con los números del cero al siete, así:0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21 ...Conteo hexadecimal utiliza los números del cero al nueve, más las letras "A" a "F":0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, 13 ...Si bien podemos ver el sentido en binario (desde los ordenadores sólo tienen un dedo),lo que son buenas octal y hexadecimal? La respuesta tiene que ver con la convenienciahumana. Muchas veces, las pequeñas porciones de datos se representan en lascomputadoras como patrones de bits. Tomemos por ejemplo un color RGB. En lamayoría de las pantallas de ordenador, cada píxel se compone de tres componentes decolor: ocho bits de color rojo, ocho bits de color verde, y ocho bits de azul. Un azulmedio precioso sería un número de 24 dígitos: 010000110110111111001101¿Cómo le gustaría a leer y escribir ese tipo de números todo el día? Yo no lo creo. Aquíes donde otro sistema numérico ayudaría. Cada dígito en un número hexadecimalrepresenta cuatro dígitos en binario. En octal, cada dígito representa tres dígitosbinarios. Así que nuestro azul medio de 24 dígitos puede ser condensado a un númerohexadecimal de seis dígitos:

436FCDDesde los dígitos en el número hexadecimal "line up" con los bits del número binariose puede observar que el componente rojo de nuestro color es 43, el verde 6F, y el CDazul.En estos días, la notación hexadecimal (a menudo pronunciado como "hexagonal") esmás común de lo que octal, pero como veremos más adelante, la capacidad deexpresar octal de tres bits binarios serán muy útiles ...

Con la notación octal utilizamos números octales para establecer el patrón de permisos

deseados. Dado que cada dígito en un número octal representa tres dígitos binarios, esta muybien los mapas con el esquema utilizado para almacenar el modo de archivo. Esta tablamuestra lo que queremos decir:

Tabla 9-4: Modos de archivos en formato binario y octal

Octal Binario Modo de archivo

93

Page 125: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 125/571

9 - Permisos

Al pasar el argumento de "600", hemos sido capaces de establecer los permisos del propietariode leer y escribir, mientras que la eliminación de todos los permisos del grupo propietario y elmundo. Aunque recordando el octal a binario cartografía puede parecer un inconveniente,por lo general, sólo tendrá que usar un par de los más comunes: 7 (rwx), 6 (rw-), 5 (RX), 4 (r--),y 0 ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ) .

chmod también es compatible con una notación simbólica para especificar los modos dearchivo. Notación simbólica se divide en tres partes: que el cambio va a afectar, que laoperación se llevará a cabo, y lo que el permiso se establecerá. Para especificar que se veafectada, una combinación de los caracteres "ú", "g", "o" y "a" se utilizan de la siguientemanera:

La lectura, la escritura, y ejecución

0 000 ---

1 001 --x

2 010 -W-

3 011 WX

4 100 r--

5 101 r-x

6 110 rw-

7 111 rwx

Mediante el uso de tres dígitos octales, podemos establecer elmodo de archivo para el propietario, el propietario del grupo,y en el mundo:

[Me @ linuxbox  ~] $  > Foo TX

 [Me @ linuxbox  ~] ls -l  foo  .txt -rw-rw-r-- 1  mí  mí  0  2008

 03-06 14:52  foo  TXT 

[Me @ linuxbox  ~] $  chmo 

600 foo  TXT  [Me @ linuxbox  ~] ls -l  foo  .txt -rw ----------- 1  mí  mí  0  2008

- 03-06 14:52  foo  TXT 

Tabla 9-5: notación simbólica chmod

Símbolo  Significado  

uAbreviatura de "usuario", pero significa que el propietario del archivo odirectorio.

g Propietario del grupo.

o Abreviatura de "otros", pero significa el mundo.un Abreviatura de "todos". La combinación de la "u", "g", y "o".

94

Page 126: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 126/571

Si no se especifica un carácter, "todo" será asumido. La operación puede ser un signo "+"indica que un permiso se va a agregar, un "-" indica que un permiso ha de ser quitado, o un"=", indicando que sólo los permisos especificados se van a aplicar y que todos los demás hande ser eliminado.

Los permisos se especifican con la "r", "w", y caracteres "x". Estos son algunos ejemplos de lanotación simbólica:

Algunas personas prefieren utilizar la notación octal, algunas personas les gusta realmente losimbólico. Notación simbólica sí ofrece la ventaja de que le permite establecer un únicoatributo sin molestar a cualquiera de los otros.

Echa un vistazo a la página del manual de chmod para obtener más detalles y una lista deopciones. Una palabra de precaución con respecto a la opción "--recursive": actúa sobre losarchivos y directorios, así que no es tan útil como es de esperar, ya que, rara vez deseearchivos y directorios que tienen los mismos permisos.

 Ajuste de modo de archivo con la GUIAhora que hemos visto cómo se establecen los permisos de archivos y directorios, podemosentender mejor los cuadros de diálogo de permisos en la interfaz gráfica de usuario. Tanto enNautilus (Gnome) y Konqueror (KDE), haga clic en un icono de archivo o directorio expondráun diálogo de propiedades. He aquí un ejemplo de KDE 3.5:

959 - Permisos

Tabla 9-6: chmod Ejemplos notación simbólica

Notación  Significado  

u + x Añadir permiso de ejecución para el propietario.

u-x Retire ejecutar el permiso del propietario.+ X

Añadir permiso de ejecución para el propietario, grupo y mundo.Equivalente a un + x.

o - r wRetire la lectura y escritura permiso a nadie además del propietariopropietario y grupo.

g o = r w

Ajuste el propietario del grupo y cualquier persona además del propietarioque ha leído y permiso de escritura. Si bien el propietario del grupo o delmundo previamente tenían permisos de ejecución, que se eliminan.

u + x , g o =r x Agregar permiso de ejecución para el propietario y establecer los

permisos para el grupo y otros para leer y ejecutar. Múltiplesespecificaciones pueden estar separados por comas.

Page 127: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 127/571

 

Aquí podemos ver los ajustes para el propietario, grupo y mundo. En KDE, haga clic en elbotón "Permisos avanzados" nos lleva a otro cuadro de diálogo que le permite definir cadauno de los atributos de modo individual. Otra victoria para la comprensión traído a nosotrospor la línea de comandos!

umask - Establecer permisos predeterminadosEl comando umask controla los permisos predeterminados definidos en un archivo cuando se

crea. Utiliza notación octal para expresar una máscara de bits para ser removido de atributosdel modo de un archivo. Echemos un vistazo:

En primer lugar, eliminamos cualquier copia antigua de foo.txt para asegurarse de que

estábamos empezando fresco. A continuación, nos encontramos con el comando umask sinargumentos para ver el valor actual. Respondía

96La lectura, la escritura, y ejecución

con el valor de 0002 (el valor 0022 es otro valor predeterminado común), que es la

Figura 2: KDE 3.5 Archivo de diálogo de propiedades

[Me @ linuxbox ~] $  rm -f  foo.txt [Me @ linuxbox ~] umas

 0002 [Me @ linuxbox ~] > Foo  TXT  [Me @ linuxbox ~] ls -l  foo.txt -rw-rw-r-- 1  mí  mí  0 2008-03-06 14:53 foo.txt 

Page 128: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 128/571

representación octal de nuestra máscara. A continuación creamos una nueva instancia de lafoo.txt archivo y observamos sus permisos.

Podemos ver que tanto el propietario y el grupo obtener el permiso de lectura y escritura,mientras todos los demás sólo obtiene permiso de lectura. La razón de que el mundo no tienepermiso de escritura se debe a que el valor de la máscara. Vamos a repetir nuestro ejemplo,

esta configuración de la máscara de tiempo a nosotros mismos:

Cuando establecimos la máscara para 0000 (efectivamente apagarlo), vemos que el archivo yaestá grabable mundo. Para entender cómo funciona esto, tenemos que mirar los númerosoctales de nuevo. Si tomamos la máscara y expandirlo hasta binario, y luego compararlo con

los atributos que podemos ver lo que sucede:

Ignorar por el momento los ceros a la izquierda (vamos a llegar a los de un minuto) y observarque cuando el 1 aparece en nuestra máscara, atributo este caso, el permiso de escritura en elmundo se retira. Eso es lo que hace la máscara. Por todas partes un 1 aparece en el valorbinario de la máscara, un atributo no está definido. Si nos fijamos en un valor de máscara de

0022, podemos ver que es lo que hace:

Una vez más, donde un 1 aparece en el valor binario, el atributo correspondiente no estádefinida. Juega con algunos valores (probar algunos sietes) para acostumbrarse a cómofunciona esto. Cuando haya terminado, no olvide limpiar:

97

[Me @ linuxbox ~] $  foo rm .txt [Me @ linuxbox ~] umask 0000 [Me @ linuxbox ~] > Foo. TXT  [Me @ linuxbox ~] $  ls -l  foo.txt -rw-rw-rw- 1  mí  mí  0 2008-03-06 14:58 foo.txt 

Modo de archivo- Rw- rw- rw-

Enmascarar  000  000 000 010Resultado   - Rw- rw- r--

Modo de archivo- Rw- rw- rw-

Enmascarar  000  000 010 010

Resultado   - R-- r-- rw-

Page 129: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 129/571

 

9 - Permisos

[Me @ linuxbox ~] foo.txt $ rm; umask 0002  

La mayoría de las veces usted no tendrá que cambiar la máscara; el valor por defectoproporcionada por su distribución va a estar bien. En algunas situaciones de alta seguridad,sin embargo, tendrá que controlarlo.

Algunos permisos especiales

A pesar de que por lo general vemos una máscara permiso octal expresado como unnúmero de tres dígitos, es técnicamente más correcta de expresarlo en cuatro dígitos.¿Por qué? Porque, además de leer, escribir y ejecutar el permiso, hay algunos otros, laconfiguración de permisos, menos utilizados.El primero de ellos es el bit setuid (octal 4000). Cuando se aplica a un archivoejecutable, que establece el identificador de usuario efectivo de la del usuario real (elusuario que realmente ejecuta el programa) a la de propietario del programa. Muy amenudo esto se da a unos pocos programas de propiedad del superusuario. Cuandoun usuario normal ejecuta un programa que es "setuid root", el programa se ejecutacon los privilegios efectivos del superusuario. Esto permite que el programa paraacceder a los archivos y directorios que un usuario normal normalmente tendríaprohibido el acceso. Claramente, porque esto plantea problemas de seguridad, elnúmero de programas setuid debe mantenerse a un mínimo absoluto.Ajuste utilizado menos-El segundo es el bit setgid (octal 2000), que, al igual que el bitsetuid, cambia el ID de grupo efectivo de la ID de grupo real del usuario real a la delpropietario del archivo. Si el bit setgid se encuentra en un directorio, los archivosrecién creados en el directorio tendrán la propiedad de grupo del directorio y no la

propiedad del grupo del creador del archivo. Esto es útil en un directorio compartido,cuando los miembros de un grupo común necesitan tener acceso a todos los archivosen el directorio, independientemente del grupo principal del propietario del archivo.La tercera se llama el bit pegajoso (octal 1000). Este es un vestigio de la antigua Unix,donde era posible marcar un archivo ejecutable como "no intercambiables." En losarchivos, Linux no tiene en cuenta el poco pegajosa, pero si se aplica a un directorio, seevita que los usuarios eliminen o cambiar el nombre de archivos a menos que elusuario es o bien el propietario del directorio, el propietario del archivo, o elsuperusuario. Esto a menudo se utiliza para controlar el acceso a un directoriocompartido, como por ejemplo / tmp.He aquí algunos ejemplos de uso de chmod con notación simbólica para establecer

estos permisos especiales. En primer lugar la asignación de setuid para un programa:chmod u + s programa A continuación, asignar setgid en un directorio: dir chmod g +sPor último, asignar el bit pegajoso a un directorio:c h m o d + t d i r

9 8

Page 130: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 130/571

Al ver la salida de ls, puede determinar los permisos especiales. He aquí algunosejemplos. En primer lugar, un programa que es setuid:-rwsr-xr-xUn directorio que tiene el atributo setgid: drwxrwsr-xUn directorio con el bit pegajoso: drwxrwxrwt

Do [- [l]][usuario]

La lectura, la escritura, y ejecución

Cambio de Identidades

En varias ocasiones, podemos encontrar que es necesario para asumir la identidad de otro

usuario. A menudo queremos ganar privilegios de superusuario para llevar a cabo algunatarea administrativa, pero también es posible "llegar a ser" otro usuario regular para cosastales como pruebas de una cuenta. Hay tres maneras de tomar en una identidad alternativa:

1.  Salir y volver a entrar como el usuario alternativo.

2.  Utilice el comando su.

3.  Utilice el comando sudo.

Vamos a saltar la primera técnica ya que sabemos cómo hacerlo y que carece de la comodidadde los otros dos. Desde dentro de nuestra propia sesión de shell, el comando su le permiteasumir la identidad de otro usuario, y, o bien iniciar una nueva sesión de shell conidentificadores de ese usuario, o para emitir un solo comando como ese usuario. El comando

sudo permite a un administrador configurar un archivo de configuración llamado / etc /sudoers, y definir comandos específicos que los usuarios particulares están autorizados aejecutar bajo una identidad falsa. La elección de el comando a utilizar está determinada engran medida por la que Linux la distribución que utilice. Su distribución incluyeprobablemente ambos comandos, pero su configuración favorecerá ya sea uno o el otro.Vamos a empezar con su.

do - Ejecutar un depósito de Sustituto de usuario e ID de grupo

El comando su se utiliza para iniciar una shell como otro usuario. La sintaxis del comando esla siguiente:

Si se incluye la opción "-l", la sesión de shell resultante es un shell de inicio de sesión para elusuario especificado. Esto significa que el entorno del usuario se carga y el directorio detrabajo es

99

Page 131: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 131/571

 

9 - Permisos

cambiado en el directorio home del usuario. Esto es por lo general lo que queremos. Si no seespecifica el usuario, se supone que el superusuario. Tenga en cuenta que (curiosamente) la "l"se puede abreviar "-", que es la forma en que se utiliza con más frecuencia. Para iniciar un shell

para el superusuario, haríamos lo siguiente:

[Me @ linuxbox ~] $ su -Password:[Root @ linuxbox ~] #

Después de introducir el comando, se nos preguntará por la contraseña de superusuario. Si seintroduce con éxito, un nuevo intérprete de comandos aparece que indica que este shell conprivilegios de superusuario (la de salida "#" en lugar de un "$") y el directorio de trabajo actuales ahora el directorio de inicio para el superusuario (normalmente / root.) Una vez en el

nuevo shell, podemos llevar a cabo comandos como superusuario. Cuando haya terminado,escriba "exit" para volver a la shell anterior:

[Root @ linuxbox ~] # exit [me@ linuxbox ~] $

También es posible ejecutar un solo comando en lugar de comenzar un nuevo comandointeractiva mediante el uso de Do esta manera:

'comando' su -c 

El uso de este formulario, una sola línea de comandos se pasa a la nueva cáscara para suejecución. Es importante para encerrar el comando entre comillas, ya que no queremos que seproduzca la expansión de nuestra cáscara, sino más bien en el nuevo shell:

[Me @ linuxbox ~] $ su -c 'ls -l / root / *' Contraseña:-rw ----------- 1 root root 754 2007-08-11 03:19 /root/anaconda-ks.cfg

/ Root /

Correo: untotal de 0[Me @ linuxbox ~] $

100

Page 132: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 132/571

 

Cambio deIdentidades

sudo - ejecutar un comando como otro usuarioEl comando sudo es como su en muchos sentidos, pero tiene algunas capacidades adicionalesimportantes. El administrador puede configurar sudo para permitir a un usuario normal para

ejecutar comandos como otro usuario (generalmente el superusuario) de una manera muycontrolada. En particular, un usuario puede estar restringido a uno o más comandosespecíficos y no otros. Otra diferencia importante es que el uso de sudo no requiere el acceso ala contraseña del superusuario. Para autenticar usando sudo, el usuario utiliza su / su propiacontraseña. Digamos, por ejemplo, que sudo se ha configurado para que podamos ejecutar unprograma de copia de seguridad ficticia llamada "backup_script", que requiere privilegios desuperusuario. Con sudo se haría así:

[Me @ linuxbox ~] $ sudo backup_script Contraseña:

Sistema de copia de seguridad de arranque ...

Después de introducir el comando, se nos preguntará por nuestra contraseña (no es elsuperusuario de) y una vez que la autenticación se haya completado, el comando especificadose lleva a cabo. Una diferencia importante entre su y sudo es que sudo no se inicia un nuevoshell, ni cargar el entorno de otro usuario. Esto significa que los comandos no necesitan sercitado de manera diferente de lo que serían sin usar sudo. Tenga en cuenta que estecomportamiento se puede anular especificando distintas opciones. Vea la página man sudopara obtener más información.

Para ver qué privilegios se otorgan a sudo, utilice la opción "-l" a enumerarlos:

[Me @ linuxbox ~] $ sudo -lUsuario me puede ejecutar los siguientes comandos en este host:

(ALL) ALL

Ubuntu y sudo

Uno de los problemas recurrentes de los usuarios habituales es cómo realizar ciertastareas que requieren privilegios de superusuario. Estas tareas incluyen la instalación y

actualización de software, la edición de archivos de configuración del sistema, y losdispositivos de acceso. En el mundo de Windows, esto se hace a menudo por dar a losusuarios privilegios administrativos. Esto permite a los usuarios realizar estas tareas.Sin embargo, también permite a los programas ejecutados por el

101

Page 133: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 133/571

 

9 - Permisos

usuario tener las mismas habilidades. Esto es deseable en la mayoría de los casos, sinoque también permite que el malware (software malicioso), como los virus para tener

libre reinado de la computadora. En el mundo Unix, siempre ha habido una divisiónmayor entre los usuarios regulares y administradores, debido a la herenciamultiusuario de Unix. El enfoque adoptado en Unix es otorgar privilegios desuperusuario sólo cuando sea necesario. Para ello, los comandos sudo su y son de usocomún.Hasta hace unos pocos años, la mayoría de las distribuciones de Linux se basó en Dopara este propósito. Do no requirió la configuración que requiere sudo, y tener unacuenta de root es tradicional en Unix. Esto introdujo un problema. Los usuarios se vententados a operar como root sin necesidad. De hecho, algunos usuarios operaban sussistemas como el usuario root en exclusiva, ya que elimina todos esos molestos"permiso denegado" mensajes. Esta es la forma de reducir la seguridad de un sistema

Linux a la de un sistema Windows. No es una buena idea.Cuando se introdujo Ubuntu, sus creadores tomaron un rumbo diferente. Por defecto,Ubuntu deshabilita los inicios de sesión a la cuenta de root (al no establecer unacontraseña para la cuenta), y en su lugar utiliza sudo para otorgar privilegios desuperusuario. La cuenta de usuario inicial se concede pleno acceso a privilegios desuperusuario a través de sudo y podrá otorgar poderes similares a las cuentas deusuario subsiguientes.

chown - Cambiar propietario del archivo y de grupoEl comando chown se utiliza para cambiar el propietario propietario y el grupo de un archivoo directorio. Se requieren privilegios de superusuario para utilizar este comando. La sintaxis

de chown se parece a esto:

chown [propietario] [: [grupo]]archivo ...

c h o wn p u e d e c a m bi a r e l p r o p i e t a r i o d e l a r c h i v o y / o e l p r o p i e t a r i o d e lg r u p o d e a r c h i v o s e n f u n c i ó n d e l p r i m e r a r g u m e n t o d e l c o m a n d o . H ea q u í a l g u n o s e j e m p l o s :Tabla 9-7: Ejemplos de argumentos chown

Argumento  Resultados 

bob Cambia la propiedad del archivo de su actual propietario de la sacudidade usuario.

b o b :u s u a r i o s

Cambia la propiedad del archivo de su actual propietario de la sacudidade usuario y cambia el propietario del grupo de archivos a los usuarios

1 0 2

Page 134: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 134/571

[Janet @ linuxbox ~] $ sudoContraseña:

[Janet @ linuxbox ~] $ sudo-rw-r - r-- 1 root root [janet @

linuxbox ~] $ sudo [janet @linuxbox ~] $ sudo -rw-r - r-- 1

tony tony

miarchivo.txt cp ~ tony

ls -l ~ tony / miarchivo.txt8031 2008-03-20 14:30 /home/tony/myfile.txt chown

tony: ~ tony / miarchivo.txt ls -l ~ tony / miarchivo.txt 8031 2008-03-20 14:30 /home/tony/myfile.txt

Digamos que tenemos dos usuarios; janet, quién tiene acceso a privilegios de superusuario yTony, que no lo hace. Usuario janet quiere copiar un archivo de su directorio home aldirectorio principal de usuario tony. Desde usuario janet quiere tony para poder editar elarchivo, janet cambia la propiedad del archivo copiado de janet a tony:Aquí vemos usuario janet copiar el archivo de su directorio para el directorio de inicio delusuario tony. A continuación, janet cambia la propiedad del archivo de la raíz (resultado deluso de sudo) a tony. El uso de los dos puntos de fuga en el primer argumento, janet tambiéncambió la propiedad de grupo del archivo en el grupo de inicio de sesión de tony, que pasa aser grupo tony.

Tenga en cuenta que después del primer uso de sudo, janet no fue motivada por sucontraseña? Esto se debe a que sudo, en la mayoría de las configuraciones, "confía" usteddurante varios minutos hasta que su tiempo llega a cero.

chgrp - Cambia Propiedad del GrupoEn versiones antiguas de Unix, el comando chown sólo cambió la propiedad del archivo, no lapropiedad de grupo. Para ello, un comando separado, se utilizó chgrp. Funciona de la mismamanera como chown, excepto por ser más limitada.

El ejercicio de nuestros privilegios

Ahora que ya hemos aprendido cómo funciona esta cosa permisos, es el momento dedemostrar que fuera. Vamos a demostrar la solución a un problema común de fijación de un

directorio compartido. Imaginemos que tenemos dos usuarios llamado "proyecto de ley" y"karen". Ambos tienen colecciones de CD de música y desean crear un directorio compartido,donde serán cada almacenar su

103

: l o sa d m i n i s t ra d o r e s

Cambia el propietario del grupo para los administradores de grupo. Elpropietario del archivo no se ha modificado.

b o b : Cambie el propietario del archivo desde el actual propietario de lasacudida de usuario y cambia el propietario del grupo para el grupo de

Cambio deIdentidades

Page 135: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 135/571

[Factura @ linuxbox ~] $ sudo mkdir / usr / local / share / Música Contraseña:

[Factura @ linuxbox ~] $ ls -ld / usr / local / share / Música d rw x r - x r - x 2 r o o t r o o t 4 0 9 6 2 0 0 8 -0 3 -2 1 1 8 : 05 / u s r / l o ca l / sh a re /Mú s i ca

9 - Permisos de archivos de música como Ogg Vorbis o MP3. Proyecto de ley de usuario tieneacceso a privilegios de superusuario a través de sudo.Lo primero que tiene que ocurrir es la creación de un grupo que tendrá tanto factura y karencomo miembros. El uso de la herramienta gráfica de gestión de usuarios, proyecto de ley creaun grupo llamado música y añade usuarios factura y karen a la misma:

A continuación, proyecto de ley crea el directorio para los archivos de música:

Desde factura está manipulando los archivos fuera de su directorio personal, se requieren

privilegios de superusuario. Una vez creado el directorio, que tiene las siguientes propiedadesy permisos:

Como podemos ver, el directorio es propiedad de root y tiene 755 permisos. Para hacer estedirectorio compartible, proyecto de ley tiene que cambiar la propiedad de grupo y lospermisos de grupo para permitir la escritura:

104

Figura 3: Creación de un nuevo grupo con GNOME

Page 136: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 136/571

[Factura @ linuxbox ~] $ sudo chown: música / usr / local / share / Música [factura @linuxbox ~] $ sudo chmod 775 / usr / local / share / Música [factura @ linuxbox ~] $ ls -ld /usr / local / share / Música música drwxrwxr-x root 2 4096 03/21/2008 18:05 / usr / local / share / Música

[Factura @ linuxbox ~] $> / usr / local / share / Música / archivo_prueba[factura @ linuxbox ~] $ ls -l / usr / local / share / Música -rw-r - r-- 1 proyecto de ley proyecto de ley 0 03/24/2008 20:03archivo_prueba

[Factura @ linuxbox ~] $ sudo chmod g + s / usr / local / share / Música [factura @linuxbox ~] $ ls -ld / usr / local / share / Música música drwxrwsr-x root 2 4096 2008-03-24 20:03 / usr / local / share / Música

[Factura @ linuxbox ~] $ umask 0002

El ejercicio de nuestros privilegios

Entonces, ¿qué significa todo esto? Esto significa que ahora tenemos un directorio, / / share /Música local / usr que es propiedad de la raíz y con programas de lectura y escritura a lamúsica del grupo. Music Group cuenta con miembros factura y karen, así factura y karen

puede crear archivos en el directorio / usr / local / share / Música. Otros usuarios puedenlistar el contenido del directorio, pero no pueden crear archivos allí.

Pero todavía tenemos un problema. Con los permisos actuales, archivos y directorios creadosdentro del directorio de la Música tendrá los permisos normales de la factura de los usuarios ykaren:

En realidad hay dos problemas. En primer lugar, el umask por defecto en este sistema es 0022que impide que los miembros del grupo de escritura de archivos pertenecientes a otrosmiembros del grupo. Esto no sería un problema si el directorio compartido sólo conteníaarchivos, pero desde este directorio va a almacenar la música, y la música está organizada porlo general en una jerarquía de los artistas y los álbumes, los miembros del grupo tendrá lacapacidad de crear archivos y directorios dentro de directorios creado por otros miembros.Tenemos que cambiar el umask utilizado por factura y karen de 0002 en su lugar.

En segundo lugar, cada archivo y directorio creado por uno de los miembros se establecerán

en el grupo primario del usuario en lugar de la música del grupo. Esto se puede solucionarconfigurando el bit setgid en el directorio:

Ahora ponemos a prueba para ver si los nuevos permisos de solucionar el problema. proyectode ley establece su umask en 0002, elimina el archivo de prueba anterior, y crea un nuevo

archivo de prueba y el directorio:

105

Page 137: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 137/571

 

9 - Permisos

[Factura @ linuxbox ~] $ rm / usr / local / share / Música / archivo_prueba[factura @ linuxbox ~] $> / usr / local / share / Música / archivo_prueba[factura @ linuxbox ~] $ mkdir / usr / local / share / Música / test_dir[factura @ linuxbox ~] $ ls -l / usr / local / share / Música drwxrwsr-x 2 proyecto de ley de la música 4096 2008-03-24 20:24test_dir -rw-rw-r-- música 1 proyecto de ley 0 03/24/2008 20:22archivo_prueba [factura @ linuxbox ~] $

Ambos archivos y directorios se crean ahora con los permisos correctos para permitir quetodos los miembros del grupo de música para crear archivos y directorios dentro deldirectorio de la música.

La cuestión pendiente es umask. El ajuste necesario sólo dura hasta el final de la sesión y sedebe restablecer. En el capítulo 11, vamos a ver lo que el cambio de umask permanente.

Cambio de la contraseña

El último tema que vamos a cubrir en este capítulo es establecer contraseñas para ti mismo (ypara los demás usuarios, si tiene acceso a privilegios de superusuario.) Para establecer ocambiar una contraseña, se utiliza el comando passwd. La sintaxis del comando es lasiguiente:

passwd[usuario]

Para cambiar su contraseña, basta con introducir el comando passwd. Se le pedirá sucontraseña antigua y su nueva contraseña:

[Me @ linuxbox ~] $ passwd(actual) contraseña de UNIX:New UNIX password:

El comando passwd tratará de hacer cumplir el uso de contraseñas "fuertes". Esto significa quese negará a aceptar contraseñas que son demasiado cortos, demasiado similar a contraseñasanteriores, son las palabras del diccionario, o son demasiado fácil de adivinar:

[Me @ linuxbox ~] $ passwd (actual)contraseña de UNIX:Nueva contraseña de UNIX:Contraseña incorrecta: es demasiado similar a laantigua contraseña de un solo Nueva UNIX:Contraseña incorrecta: es demasiado corto

106

Page 138: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 138/571

Nueva contraseña de UNIX:Contraseña incorrecta: se basa en una palabra deldiccionario

Cambio de la contraseña

Si tiene privilegios de superusuario, puede especificar un nombre de usuario como argumentopara el comando passwd para establecer la contraseña de otro usuario. Otras opciones estándisponibles para el superusuario para permitir cuenta de bloqueo, caducidad de la contraseña,

etc. Consulte la página de manual de passwd para más detalles.

Resumiendo

En este capítulo hemos visto cómo los sistemas de tipo Unix como Linux administrar lospermisos de usuario para permitir la lectura, escritura y acceso de ejecución a los archivos ydirectorios. Las ideas básicas de este sistema de permisos se remontan a los primeros días deUnix y se han mantenido bastante bien a la prueba del tiempo. Pero el mecanismo de permisosnativos en sistemas tipo Unix carece de la granularidad fina de los sistemas más modernos.

Lectura adicional

•  Wikipedia tiene un buen artículo sobre elmalware:http://en.wikipedia.org/wiki/Malware  

Hay una serie de programas de línea de comandos que se utilizan para crear y mantenerusuarios y grupos. Para obtener más información, consulte las páginas man de los comandossiguientes:

•  adduser

•  useradd

•  groupadd

107

Page 139: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 139/571

10  - Procesos

10 - Procesos

Los sistemas operativos modernos son multitarea por lo general, lo que significa que crean lailusión de hacer más de una cosa a la vez cambiando rápidamente de una ejecución deprograma a otro. El núcleo de Linux gestiona esto a través de la utilización de procesos. Losprocesos son cómo Linux organiza los diferentes programas en espera de su turno en la CPU.

A veces un equipo se convierta en lento o una aplicación dejará de responder. En este capítulo,vamos a ver algunas de las herramientas disponibles en la línea de comandos que nos

permiten examinar qué programas están haciendo, y cómo poner fin a los procesos que seportan mal.

Este capítulo introducirá los siguientes comandos:

•  ps - Informar de una instantánea de los procesos actuales

•  tareas de visualización - trivago

•  p u e s t o s d e t r a b a j o - Lista de trabajos activos

•  bg - Coloque un trabajo en segundo plano

•  fg - Coloque un puesto de trabajo en el primer plano

•  matar - Enviar una señal a un proceso•  ki l l a l l - Kill procesos por nombre

•  c i e r r e - Apagar o reiniciar el sistema

¿Cómo un proceso funciona

Cuando un sistema se pone en marcha, el kernel inicia algunas de sus propias actividadescomo procesos y pone en marcha un programa llamado init. init, a su vez, se ejecuta una seriede scripts de shell (que se encuentra en / etc) llamado guiones de inicio, que se inicia todos losservicios del sistema. Muchos de estos servicios se implementan como programas demonio,programas que simplemente se sientan en el fondo y hacer sus cosas sin tener ninguna interfazde usuario. Así que incluso si no se ha identificado, el sistema es al menos un poco ocupadorealizando cosas de rutina.

El hecho de que un programa puede poner en marcha otros programas se expresa en elesquema de proceso como un proceso padre producir un proceso hijo.

108

Page 140: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 140/571

[Me @ linuxbox ~] $ psPID TTY TIEMPO CMD

5.198 pts / 1 00:00:00 Bash10.129 pts / 1 00:00:00 ps

¿Cómo un proceso funciona

El núcleo mantiene información acerca de cada proceso para ayudar a mantener las cosasorganizadas. Por ejemplo, cada proceso se le asigna un número llamado ID del proceso o PID.PIDs se asignan en orden ascendente, con init siempre conseguir PID 1. El núcleo tambiénmantiene un registro de la memoria asignada a cada proceso, así como la preparación de los

procesos 'para continuar con la ejecución. Al igual que los archivos, los procesos también

tienen propietarios y los ID de usuario, ID de usuario eficaces, etc.

Visualización de Procesos

El comando más utilizado para los procesos de visión (hay varios) es ps. El programa ps tieneun montón de opciones, pero en forma más simple que se usa de esta manera:

El resultado en este ejemplo se enumeran dos procesos, proceso de 5198 y el proceso 10129,que son bash y ps respectivamente. Como podemos ver, por defecto, ps no nos muestranmucho, sólo los procesos asociados a la sesión de terminal actual. Para ver más, tenemos queañadir algunas opciones, pero antes de hacer eso, echemos un vistazo a los otros camposproducidos por ps. TTY es la abreviatura de "teletipo", y se refiere a la terminal de control parael proceso. Unix está mostrando su edad aquí. El campo de hora es la cantidad de tiempo deCPU consumido por el proceso. Como podemos ver, ni proceso hace que el trabajo de equipomuy duro.

Si añadimos una opción, podemos obtener una visión más amplia de lo que el sistema está

haciendo:

109

[Me @ linuxbox ~ ] $ Ps  x PID TTY  STA

 TIEMPO COMANDO 

2799 ?  Ssl  0 00  / Usr / libexec / bonobo-activación-servidor -AC 2820 ?  Sl  0 01  /usr/libexec/evolution-data-server-1.10 - 

15647 ?  Ss  0 00  / Bin / sh / usr / bin / startkde 15751 ?  Ss  0 00  / Usr / bin / ssh-agent / usr / bin / dbus-launch -  15754 ?  S  0 00  / Usr / bin / dbus-launch --exit-con-sesión 15755 ?  Ss  0 01  / Bin / dbus-daemon --fork --print-pid 4 -pr  15774 ?  Ss  0 02  / -daemon Usr / bin / gpg-agent -s 15793 ?  S  0 00  start_kdeinit --new-startup + kcminit_start 15794 ?  Ss  0 00  kdeinit Correr ... 15797 ?  S  0 00  dcopserver -nosid 

y muchos más. 

Page 141: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 141/571

 

El estado de proceso puede ser seguido por otros caracteres. Estos indican diversas

características del proceso exóticos. Vea la página man ps para obtener más detalles.Otra serie popular de las opciones es "aux" (sin un guión que lleva). Esto nos da aún másinformación:

110

10 - Procesos

Adición de la opción "x" (tenga en cuenta que no hay guión líder) le dice a ps para mostrartodos nuestros procesos, independientemente de lo que el terminal (si lo hay) que soncontrolados por. La presencia de un "?" En la columna TTY indica que no hay terminal de

control. Usando esta opción, vemos una lista de todos los procesos que poseemos.Dado que el sistema está ejecutando una gran cantidad de procesos, ps produce una largalista. A menudo es útil para canalizar la salida de ps en menos para facilitar la visualización.Algunas combinaciones de opciones también producen largas colas de salida, por lo quemaximiza la ventana de emulador de terminal puede ser una buena idea, también.

Una nueva columna titulada STAT ha sido añadido a la salida. STAT es la abreviatura de"Estado" y revela el estado actual del proceso:

Tabla 10-1:  Estados Proceso 

Estado  Significado 

RCorrer. Esto significa que el proceso se está ejecutando o listos parafuncionar.

SDormir. El proceso no se está ejecutando; más bien, está esperando unevento, tal como un paquete de pulsaciones de teclas o de red.

D El sueño ininterrumpida. Proceso de espera de E / S, como una unidadde disco.

TDetenido. Proceso ha sido instruido para detener. Más sobre esto másadelante.

ZUn proceso "zombie" o desaparecida. Este es un proceso hijo que haterminado, pero no ha sido limpiado por su padre.

<Un proceso de alta prioridad. Es posible conceder más importancia a unproceso, dándole más tiempo a la CPU. Esta propiedad de un proceso sellama amabilidad. Un proceso con prioridad alta se dice que es menosagradable porque está tomando más tiempo de la CPU, lo que dejamenos para todos los demás.

NUn proceso de baja prioridad. Un proceso con prioridad baja (unproceso "bonito") sólo obtendrá el tiempo de procesador después dehaber mantenido otros procesos con mayor prioridad.

Page 142: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 142/571

y muchos más ...

[Me @ linuxbox ~] arriba

111

Visualización de Procesos

Este conjunto de opciones muestra los procesos correspondientes a cada usuario. Uso de lasopciones sin que el tablero principal invoca el comando con el comportamiento "estilo BSD".La versión para Linux de ps puede emular el comportamiento del programa ps encontrado envarios diferentes implementaciones de Unix. Con estas opciones, obtenemos estas columnasadicionales:

Viendo Procesos dinámicamente con la parte superior

Mientras que el comando ps puede revelar mucho acerca de lo que la máquina está haciendo,proporciona sólo una instantánea del estado de la máquina en el momento en que se ejecute elcomando ps. Para ver una visión más dinámica de la actividad de la máquina, se utiliza elcomando top:

[Me @ linuxbox ~] ps auxUSUA

 

Q1-I

CL %

LU

 S       R        VSZ  RSS TTY  STAT INICIO  TIE

 COMAN

 raíz  1  0.0  0.0  2136  644 ?  Ss  Mar05  Doce init raíz  2  0.0  0.0  0  0 ?  S <  Mar05  0:00  [Tonelad

 raíz  3  0.0  0.0  0  0 ?  S <  Mar05  0:00  [Mi] 

raíz  4  0.0  0.0  0  0 ?  S <  Mar05  0:00  [Ks] raíz  5  0.0  0.0  0  0 ?  S <  Mar05  0:06  [Wa] raíz  6  0.0  0.0  0  0 ?  S <  Mar05  Doce [EV] raíz  7  0.0  0.0  0  0 ?  S <  Mar05  0:00  [Kh] 

Tabla 10-2: Estilo BSD ps encabezados de columnaEncabezami

  Significado 

U S UA R I O ID (identificación) de usuario. Este es el propietario del proceso.

% UPC Uso de la CPU en porcentaje.

% MEM El uso de memoria en porcentaje.

VSZ Tamaño de la memoria virtual.RSS

Residente Tamaño Configurar. La cantidad de memoria física (RAM) elproceso está utilizando en kilobytes.

INICIO Momento en que el proceso comenzó. Para los valores de más de 24horas, se utiliza una fecha.

Page 143: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 143/571

10 - Procesos

El programa de la parte superior muestra una actualización continua (por defecto, cada 3segundos) la visualización de los procesos del sistema que figuran en el orden de actividad delproceso. El nombre de "arriba" viene del hecho de que el programa de la parte superior seutiliza para ver los procesos "top" en el sistema. La pantalla superior se compone de dos

partes: un resumen del sistema en la parte superior de la pantalla, seguido por una mesa deprocesos ordenados por la actividad de la CPU:

El resumen del sistema contiene un montón de cosas buenas. He aquí

un resumen: Tabla 10-3: top Campos de información

112

la partesu erior

14:59  : 20  up  C       D       

 C        o     l       

 o     

r      a      d        o     

, 2 usuarios,  carga 

media: 0.  07, 0,02,   O       oo

Tareas 

109  total  1 , 106  dormir,  0 detuvo, 2  ! zombi Cpu : 0.  7% , 1  0,0% sy, 0.  0% de 98. Identifica

 0,0% 0.0% hi,  0.0% si 

Mem:  319496k total  314860k utiliza,  4636k libre, 19392k aficionado Intercam

bio: 875500k total  149128k utiliza,  726372k libre, cach 114676k 

PID USUA 

PR  NI  VIRT  RES  SHR S  % % TIEMP 

COMANDO 6244 mí  39  19  31752  3124 2188 S  6.3  1.0  16: 24.42  trackerd 

11071 mí  20  0  2304  1092  840 R  1.3  0,3  0: 00.14  superior  6180 mí  20  0  2700  1100  772 S  0,7  0,3  0: 03,66  dbus-dae 6321 mí  20  0  20944  7248 6560 S  0,7  2.3  2: 51.38  multiloa 4955 raíz  20  0  104m  9668 5776 S  0,3  3.0  2: 19.39  Xorg 

1 raíz  20  0  2976  528  476 S  0.0  0,2  0: 03.14  init 2 raíz  15  -5  0  0  0 S  0.0  0.0  0: 00.00  kthreadd 3 raíz  RT  -5  0  0  0 S  0.0  0.0  0: 00.00  Migratio 4 raíz  15  -5  0  0  0 S  0.0  0.0  0: 00,72  ksoftirq 5 raíz  RT  -5  0  0  0 S  0.0  0.0  0: 00.04  perro6 raíz  15  -5  0  0  0 S  0.0  0.0  0: 00.42  eventos /7 raíz  15  -5  0  0  0 S  0.0  0.0  0: 00.06  khelper  

41 raíz  15  -5  0  0  0 S  0.0  0.0  0: 01.08  kblockd / 67 raíz  15  -5  0  0  0 S  0.0  0.0  0: 00.00  kseriod 

114 raíz  20  0  0  0  0 S  0.0  0.0  0: 01.62  pdflush 116 raíz  15  -5  0  0  0 S  0.0  0.0  0: 02,44  kswapd0 

Fila Campo  Significado 

1 arriba Nombre del programa.

1 4 : 5 9 : 2 0 Hora del día.o C       o      l        o     r      a      d       

 o     

 C        o     l        o     r     

 a      d        o     

P.

Esto se conoce como el tiempo de actividad. Es lacantidad de tiempo que la máquina se iniciapasado. En este ejemplo, el sistema ha estadofuncionando durante seis horas y media.

2 usuarios Hay dos usuarios ingresados.p r o m e d i o d ec a r a : Promedio de carga se refiere al número de procesos

Page 144: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 144/571

 

El programa acepta la parte superior una serie de comandos de teclado. Los dos másinteresantes son h, que muestra la pantalla de ayuda del programa, y q, que cierra la partesuperior.

Ambos principales entornos de escritorio proporcionan las aplicaciones gráficas que muestraninformación similar a arriba (de la misma manera que el Administrador de tareas en Windowsfunciona), pero me parece que la parte superior es mejor que las versiones gráficas, ya que esmás rápido y que consume muchos menos recursos del sistema. Después de todo, nuestroprograma de monitor del sistema no debe ser la fuente de la lentitud del sistema que estamos

tratando de rastrear.

El control de procesos

Ahora que podemos ver y controlar los procesos, vamos a ganar un poco de control sobreellos. Para nuestro

113

Visualización de Procesosque están a la espera para funcionar, es decir, elnúmero de procesos que se encuentran en unestado ejecutable y están compartiendo la CPU.Tres valores se muestran, cada una por un períodode tiempo diferente. La primera es la media de los

últimos 60 segundos, los próximos de los 5minutos anteriores, y finalmente los 15 minutosanteriores. Los valores menores de 1,0 indican que

2T a r e a s :

Esto resume el número de procesos y susdiferentes estados del proceso.

3 Cpu (s ) :Esta fila describe el carácter de las actividades quela CPU está realizando.

0 , 7 % c o nn o s o t r o s

0,7% de la CPU está siendo utilizado para losprocesos de usuario. Esto significa que los procesosfuera del núcleo en sí.

1 , 0 % s y1,0% de la CPU se está utilizando para procesos delsistema (kernel).

0 . 0 % d e N i0.0% de la CPU está siendo utilizado por losprocesos "nice" (prioridad baja).

Id e n t i f i c a c i ó nd e l 9 8 , 3 %

98,3% de la CPU está inactivo.

0 . 0 % wa 0.0% de la CPU está a la espera para E / S.

4 M e m : Muestra cómo física RAM se está utilizando.5 In t e r c a m bi o :

Muestra cómo se está utilizando el espacio deintercambio (memoria virtual).

Page 145: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 145/571

[Me @ linuxbox ~] $ xlogo

[Me @ linuxbox ~] $ xlogo[me @ linuxbox ~] $

10  - Procesos experimentos, vamos a utilizar un pequeño programa llamado xlogo comonuestro conejillo de indias. El programa xlogo es un programa de ejemplo que se suministracon el Sistema de Ventanas X (el motor subyacente que hace que los gráficos en nuestro ir de

visualización) que simplemente muestra una ventana nueva de tamaño considerable quecontiene el logotipo de X. En primer lugar, vamos a llegar a conocer a nuestro sujeto deprueba:

Después de introducir el comando, una pequeña ventana que contiene el logotipo debeaparecer en algún lugar de la pantalla. En algunos sistemas, puede xlogo imprimir un mensajede advertencia, pero puede ser ignorado con seguridad.

Consejo: Si su sistema no incluye el programa xlogo, trate de usar gedit o kwrite lugar.

Podemos comprobar que se está ejecutando xlogo redimensionando su ventana. Si se vuelve adibujar el logotipo en el nuevo tamaño, el programa se está ejecutando.

Observe cómo no ha vuelto nuestro intérprete de comandos? Esto se debe a que la cáscara está

esperando a que el programa termine, igual que todos los otros programas que hemosutilizado hasta ahora. Si cerramos la ventana xlogo, los rápidos retornos.

Interrupción de un procesoObservemos lo que ocurre cuando nos encontramos xlogo nuevo. En primer lugar, entre el

mandato xlogo y verifique que el programa se está ejecutando. A continuación, volverá a laventana de terminal y pulse Ctrl-c.

En una terminal, al pulsar Ctrl-c, interrumpe un programa. Esto significa que cortésmente lepedimos al programa para terminar. Después presionamos Ctrl-c, la ventana xlogo cerrado yel intérprete de comandos devuelve.

Muchos (pero no todos) los programas de línea de comandos se pueden interrumpir medianteel uso de esta técnica.

Poner un proceso en segundo planoDigamos que queríamos conseguir el intérprete de comandos de nuevo sin necesidad determinar la xlogo pro-

114

Page 146: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 146/571

[Me @ linuxbox ~] $ xlogo y [1]28.236 [me @ linuxbox ~] $

El control de procesos

gramo. Haremos esto mediante la colocación del programa en el fondo. Piense en el terminal

como tener un primer plano (con la materia visible en la superficie como el intérprete de

comandos) y un fondo (con cosas ocultas detrás de la superficie). Para iniciar un programa demanera que se coloca inmediatamente en el fondo, seguimos el comando con an- carácter "&":

Después de introducir el comando, la ventana xlogo apareció y el intérprete de comandosregresó, pero algunos números divertidos se imprimieron también. Este mensaje es parte deuna función de shell llamado control de trabajos. Con este mensaje, el shell nos está diciendoque hemos empezado el trabajo número 1 ("[1]") y que tiene PID 28236. Si corremos ps,podemos ver nuestro proceso:

Instalación de control de trabajo de la cáscara también nos da una manera de enumerar lospuestos de trabajo que se han lanzado desde nuestro terminal. Utilizando el comando trabajos,podemos ver esta lista:

Los resultados muestran que tenemos un puesto de trabajo, el número "1", que se estáejecutando, y que la orden era xlogo y.

Volviendo un proceso para el primer planoUn proceso en el fondo es inmune a la entrada de teclado, incluyendo cualquier intento deinterrupción con un Ctrl-c. Para devolver un proceso en primer plano, utilice el comando fg,de esta manera:

115

[Me @ linuxbox ~] $ Ps 

PID TTY  TIEMPO CMD 10.603 pts / 1  00:00:00 Bash 28.236 pts / 1  00:00:00 xlogo 28.239 pts / 1  00:00:00 ps 

[me @ linuxbox ~] $ empleos [1] + Running  xlogo y 

[me @ linuxbox ~] $ empleos [1] + Running [me @ linuxbox ~]$ fg% 1 

xlogo y 

Page 147: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 147/571

xlogo

[Me @ linuxbox ~] $ bg% 1[l] + xlogo y [me @ linuxbox~] $

10 - Procesos

El fg comando seguido de un signo de porcentaje y el número de trabajo (llamado espectrab)hace el truco. Si sólo tenemos un trabajo en segundo plano, la espectrab es opcional. Paraterminar ogo XL-, pulse Ctrl-c.

Parada (pausa) Proceso AA veces vamos a querer detener un proceso sin darlo por terminado. Esto se hace a menudopara permitir un proceso de primer plano para mover a un segundo plano. Para detener unproceso en primer plano, pulse Ctrl-z. Vamos a intentarlo. En el símbolo del sistema, escribaxlogo, la tecla Intro, a continuación, Ctrl-z:

Después de parar xlogo, podemos verificar que el programa se haya detenido por el intento de

cambiar el tamaño de la ventana xlogo. Veremos que parece bastante muerto. Podemos o bienrestaurar el programa al primer plano, con el comando fg, o mover el programa a un segundoplano con el comando bg:

Al igual que con el comando fg, la espectrab es opcional si sólo hay un puesto de trabajo.

Traslado de un proceso desde el primer plano hasta el fondo es muy útil si lanzamos unprograma gráfico del comando, pero olvidamos que colocarlo en el fondo añadiendo elarrastre "&".

¿Por qué quieres poner en marcha un programa gráfico de la línea de comandos? Hay dosrazones. En primer lugar, el programa que desea ejecutar no podra estar listado en los menúsdel gestor de ventanas (como xlogo). En segundo lugar, con el lanzamiento de un programadesde la línea de comandos, es posible que pueda ver los mensajes de error que de otro modoserían invisibles si el programa se puso en marcha de forma gráfica. A veces, un programa nose podrá iniciar cuando se inicia desde el menú gráfico. Con el lanzamiento desde la línea decomandos en lugar, podemos ver un mensaje de error que revelará el problema. Además,algunos programas gráficos tienen muchas opciones de línea de comandos interesantes y

útiles.

116

[Me @ linuxbox ~] $ xlogo [L] + Stopped [me @ linuxbox ~]$ 

xlogo 

Page 148: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 148/571

[Me @ linuxbox ~] $ xlogo y[1] 28401[Me @ linuxbox ~] $ kill 28401[1] + Terminado xlogo

matar [-señal] PID ...

Señales

Señales

El comando kill se usa para "matar" los procesos. Esto nos permite dar por terminado losprogramas que necesitan matar. He aquí un ejemplo:

Primero lanzamos xlogo en el fondo. La concha imprime el espectrab y el PID del proceso ensegundo plano. A continuación, utilizamos el comando kill y especificamos el PID del procesoque queremos terminar. También podríamos haber especificado el procedimiento utilizandoun espectrab (por ejemplo, "% 1") en lugar de un PID.

Si bien todo esto es muy sencillo, no hay más que eso. El comando kill no exactamente "matar"a los procesos, sino que los envía señales. Las señales son una de las varias formas en que elsistema operativo se comunica con los programas. Ya hemos visto señales en la acción con eluso de Ctrl-C y Ctrl-z. Cuando el terminal recibe una de estas pulsaciones de teclado, se envíauna señal al programa en el primer plano. En el caso de Ctrl- c, una señal de llamada INT(Interrupt) se envía; con Ctrl-Z, una señal de llamada TSTP (Terminal de parada). Programas,a su vez, "escuchar" para señales y pueden actuar sobre ellos a medida que se reciben. El hechode que un programa se puede escuchar y actuar sobre las señales permite que un programapara hacer cosas como guardar el trabajo cuando se envía una señal de terminación.

El envío de señales a los procesos con kill

El comando kill se usa para enviar señales a los programas. Su sintaxis más común es lasiguiente:

Si no se especifica ninguna señal en la línea de comandos, a continuación, la señal TERM(Terminar) se envía por defecto. El comando kill se usa más a menudo para enviar lassiguientes señales:

117

Tabla 10-4: Señales ComunesNúmero  Nombre  Significado 

1

HUP

Colgar. Se trata de un vestigio de los viejos tiempos,cuando los terminales se unen a distancia

Page 149: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 149/571

 

10 - Procesos

computadoras con líneas telefónicas y módems. Laseñal se utiliza para indicar a los programas que laterminal de control ha "colgado". El efecto de estaseñal se puede demostrar mediante el cierre de una

sesión de terminal. El programa se ejecuta en primerplano de la terminal se enviará la señal y hará quecesen.

Esta señal también es utilizado por muchosprogramas demonio para causar una reinicialización.Esto significa que cuando un demonio se envía estaseñal, se reiniciará y volver a leer su archivo deconfiguración. El servidor Web Apache es un ejemplode un demonio que utiliza la señal HUP de estamanera.

2 INT

Interrumpir. Realiza la misma función que la teclaCtrl-c enviada desde la terminal. Por lo general, seterminará un programa.

9 MATANZAM a t a r . Esta señal es especial. Considerando que losprogramas pueden optar por manejar señalesenviadas a ellos de diferentes maneras, incluyendoignorando a todos juntos, la señal KILL nunca seenvió realmente el programa de destino. Más bien, elkernel termina inmediatamente el proceso. Cuandoun proceso se termina de esta manera, se le daninguna oportunidad de "limpiar" de sí mismo o

guardar su trabajo. Por esta razón, la señal KILL sólodebe utilizarse como último recurso cuando otrasseñales de terminación fallan.

15 PLAZOTerminar. Esta es la señal por defecto enviado por elcomando kill. Si un programa es todavía "vivo" losuficiente como para recibir señales, se terminará.

18C O N T

Continuar. Esto restaurará un proceso después de unaseñal de STOP.

19 DeténgaseDeténgase. Esta señal provoca un proceso para hacer

una pausa sin terminar. Al igual que la señal KILL, nose envía al proceso de destino, y por lo tanto no puedeser ignorada.

118

Page 150: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 150/571

[Me @ linuxbox ~] $ xlogo y[1] 13 546[Me @ linuxbox ~] $ kill -1 13546 [1] + Colgar   xlogo

[Me @ linuxbox ~] $ xlogo y[1] 13 601

[Me @ linuxbox ~] $ mato -INT 13601 [1] +Interrupción xlogo[Me @ linuxbox ~] $ xlogo y[1] 13 608[Me @ linuxbox ~] $ mato -SIGINT 13608 [1] + Interrupt xlogo

Señales

Vamos a probar el comando kill:

En este ejemplo, comenzamos el programa xlogo en el fondo y luego lo enviamos una señalHUP con kill. El programa xlogo termina y la cubierta indica que el proceso de fondo harecibido una señal de colgar. Es posible que tenga que pulsar la tecla enter un par de vecesantes de que aparezca el mensaje. Tenga en cuenta que las señales pueden ser especificados ya

sea por número o por nombre, incluyendo el nombre prefijado con las letras "SIG":

Repita el ejemplo anterior y probar las otras señales. Recuerde, usted también puede utilizar jobspecs en lugar de los PID.

Procesos, como archivos, tienen dueños, y usted debe ser el propietario de un proceso (osuperusuario) con el fin de enviar señales con kill.

Además de la lista de las señales por encima, que se utilizan más a menudo con kill, hay otrasseñales de frecuencia utilizados por el sistema. Aquí está una lista de otras señales comunes:Tabla 10-5: Otras señales comunes

Número  Nombre  Significado 

3 Q UI T Salir.11 SEGV Violación de segmentación. Esta señal se envía si un

programa hace uso ilegal de la memoria, es decir, setrató de escribir en algún lugar que no se le permitió.

20 TSTPDetener la Terminal. Esta es la señal enviada por elterminal cuando se pulsa la tecla Ctrl-z. A diferenciade la señal de parada, la señal es recibida por TSTP

119

Page 151: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 151/571

 

10 - Procesos

el programa pero el programa pueden optar porignorarlo.

28 TORNO Ventana Cambio. Esta es una señal enviada por el

sistema cuando una ventana cambia de tamaño.Algunos programas, como la parte superior e inferiorvan a responder a esta señal por volver a dibujar a símismos para adaptarse a las nuevas dimensiones de la

Para los curiosos, una lista completa de las señales se puede ver con el siguientecomando:

[Me @ linuxbox ~] kill -l

Envío de señales a múltiples procesos con killallTambién es posible enviar señales a los múltiples procesos que coincidan con un programa onombre de usuario especificado con el comando killall. Aquí es la sintaxis:

killall [-u usuario] [-señal] nombre ...

Para demostrarlo, vamos a empezar un par de instancias del programa xlogo y luego terminar

ellos:

[Me @ linuxbox ~] $ xlogo y[1] 18801[Me @ linuxbox ~] $ xlogo y[2] 18802[Me @ linuxbox ~] $ killall xlogo[1] -Terminado xlogo[2] +Terminado xlogo

Recuerde que, como con la matanza, debe tener privilegios de superusuario para enviar

señales a los procesos que no pertenecen a usted.

Más de procesos relacionados Comandos

Dado que los procesos monitoreo es una tarea de administración del sistema importante, hayuna gran cantidad de comandos para ello. Éstos son algunos de jugar con:

120

Page 152: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 152/571

 

Resumiendo

La mayoría de los sistemas modernos cuentan con un mecanismo para la gestión de múltiplesprocesos. Linux proporciona un completo conjunto de herramientas para este fin. Dado queLinux es el sistema operativo de servidor más desplegada en el mundo, esto hace muchosentido. Sin embargo, a diferencia de otros sistemas, Linux se basa principalmente en lasherramientas de línea de comandos para la gestión de procesos. Aunque existen herramientasde proceso gráfico para Linux, las herramientas de línea de comandos son muy preferidosdebido a su velocidad y la huella de luz. Mientras que las herramientas visuales pueden

parecer bastante, que a menudo crean una gran cantidad de sistema de cargar ellos mismos, loque contradice un tanto la finalidad.

Más de procesos relacionados Comandos

Tabla 10-6: otro proceso comandos relacionados 

Comando  Descripción 

p s t r e e Devuelve una lista de procesos dispuestos en un patrón en forma deárbol que muestra las relaciones padre / hijo entre los procesos.

v m s t a tSalidas de una instantánea del uso de recursos del sistema, incluyendo,memoria, swap y disco de E / S. Para ver una visualización continua,siga el comando con un retardo de tiempo (en segundos) para lasactualizaciones. Por ejemplo: vmstat 5. Terminar la salida con Ctrl-C.

x l o a d Un programa gráfico que dibuja un gráfico que muestra la carga delsistema en el tiempo.

t l o a d Similar al programa xload, pero dibuja el gráfico en el terminal.

Terminar la salida con Ctrl-C.

Page 153: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 153/571

121

Page 154: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 154/571

 

Parte 2 - Configuración y el medio ambiente

Parte 2 - Configuración y

theenvironment

123

Page 155: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 155/571

[Me @ linuxbox ~] $ printenv | less

11  - El Medio Ambiente

11 - El Medio Ambiente

Como hemos comentado anteriormente, la carcasa mantiene un cuerpo de informacióndurante nuestra sesión de shell llamado el medio ambiente. Los datos almacenados en elentorno es utilizado por los programas para determinar hechos sobre nuestra configuración.Si bien la mayoría de los programas utilizan archivos de configuración para almacenar laconfiguración del programa, algunos programas también buscarán valores almacenados en el

medio ambiente para ajustar su comportamiento. Sabiendo esto, podemos usar el entornopara personalizar nuestra experiencia cáscara.

En este capítulo, vamos a trabajar con los siguientes comandos:

•  printenv - Imprimir parte o la totalidad del medio ambiente

•  del conjunto - Establecer opciones de shell•  exportación - Medio ambiente Exportar a ejecutar posteriormente programas

•  alias - Crear un alias de un comando

Lo que se almacena en el medio ambiente?

Las tiendas de concha dos tipos básicos de datos en el medio ambiente, sin embargo, con bash,los tipos son en gran medida indistinguibles. Son las variables de entorno y variables shell.Variables de Shell son bits de datos colocados allí por bash, y variables de entorno son,básicamente, todo lo demás. Además de las variables, la cáscara también almacena algunosdatos programáticos, es decir, los alias y las funciones de shell. Cubrimos alias en el capítulo 5,y funciones de shell (que están relacionados con shell scripting) serán cubiertos en la parte 4.

Examinar El Medio AmbientePara ver lo que está almacenado en el medio ambiente, podemos utilizar la interna set en basho el programa printenv. El comando set mostrará tanto las variables de shell y el medio

ambiente, mientras que printenv sólo mostrará el último. Dado que la lista de contenidos deentorno será bastante largo, lo mejor para la tubería es la salida de cualquiera de los dos

comandos en menos:

1 2 4

Page 156: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 156/571

 

Lo que se almacena en el medioambiente?

Si lo hace, debemos conseguir algo que se parece a esto:

KDE_MULTIHEAD = falseSSH_AGENT_PID = 6666HOSTNAME = linuxboXGPG_AGENT_INFO = / tmp / gpg-PdOt7g / S.gpg-agente: 6689: 1SHELL = / bin / bashTERM = xtermXDG_MENU_PREFIX = kde-HISTSIZE = 1000XDG_SESSION_COOKIE = 6d7b05c65846c3eaf3101b0046bd2b00-1208521990,996705-1177056199GTK2_RC_FILES = / etc / gtk-2.0 / gtkrc: /home/me/.gtkrc-2.0: /home/me/.kde/share/config/gtkrc-2.0

GTK_RC_FILES = / etc / gtk / gtkrc: /home/me/.gtkrc: /home/me/.kde/share/config / gtkrcGS_LIB = / home / me / .fontsWINDOWID = 29360136QTDIR = / usr / lib / qt-3.3QTINC = / usr / lib / qt-3.3 / includeKDE_FULL_SESSION = trueUSUARIO Me =LS_COLORS = no = 00: fi = 00: di = 00; 34: ln = 00; 36: pi = 40; 33: so = 00; 35: bd = 40; 33;01: Cd = 40; 33; 01: o = 01; 05; 37; 41: mi = 01; 05; 37; 41: ex = 00; 32: * cmd = 00; 32:.. * Exe

Lo que vemos es una lista de variables de entorno y sus valores. Por ejemplo, vemos unavariable llamada USUARIO, que contiene el valor "yo". El comando printenv también puedelistar el valor de una variable específica:

[Me @ linuxbox ~] USER $ printenv mí

El comando set, cuando se usa sin opciones o argumentos, se mostrará tanto en la cáscara yvariables de entorno, así como las funciones de shell definidas. A diferencia de printenv, susalida está ordenada cortésmente en orden alfabético:

[Me @ linuxbox ~] $ set | less

También es posible ver el contenido de una variable usando el comando echo, como esto:

125

Page 157: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 157/571

[Me @ linuxbox ~] $ echo $ HOME /home / me[Me @ linuxbox ~] $ alias alias l. = 'Ls-d. * --color = Tty' alias ll = 'ls -l --color =tty' alias ls = 'ls -color = tty' alias vi ='vim'alias que = 'alias | / usr / bin / que --tty-sólo --read-alias --show- salpican --show-tilde'11 - El Medio Ambiente

Uno de los elementos del medio ambiente que ni conjunto ni pantallas printenv es alias. Paraverlos, introduzca el comando alias sin argumentos:

 Algunas variables interesantesEl entorno contiene un buen número de las variables, y aunque su entorno puede ser diferentea la que se presenta aquí, es probable que vea las siguientes variables en su entorno:Tabla 11-1: Variables de entorno

Variable  Contenido P A N T A L LA El nombre de la pantalla si está ejecutando un entorno gráfico. Por lo

general, esta es ": 0", es decir, la primera pantalla que genera el servidorX.

E DI T OR El nombre del programa que se utilizará para la edición de texto.

S H E L L El nombre de su programa de shell.

I N I CI O El nombre de ruta de su directorio personal.

LANG Define el juego de caracteres y orden de clasificación de su idioma.

O L D _ P WD El directorio de trabajo anterior.PAGER El nombre del programa que se utiliza para la paginación de salida. Esto

a menudo se establece en / usr / bin / menos.

CAMINOUna lista separada por dos puntos de los directorios que se buscancuando se introduce el nombre de un programa ejecutable.

PS1 Cadena Prompt 1. Esto define el contenido de su intérprete decomandos. Como veremos más adelante, esto puede ser ampliamente

126

Page 158: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 158/571

 

No se preocupe si algunos de estos valores están desaparecidos. Varían por distribución.

¿Cómo se establece el medio ambiente?Cuando inicia sesión en el sistema, el programa bash comienza, y lee una serie de scripts deconfiguración llamados archivos de inicio, que definen el entorno por defecto compartido portodos los usuarios. Esto es seguido por más archivos de inicio en nuestro directorio home quedefinen nuestro entorno personal. La secuencia exacta depende del tipo de sesión de shell quese inicia. Hay dos tipos: una sesión de inicio de sesión de shell y una sesión de shell no iniciode sesión.

Una sesión de inicio de sesión de shell es una en la que se nos preguntará por nuestro nombrede usuario y contraseña; cuando empezamos una sesión de consola virtual, por ejemplo. Unasesión de intérprete de no ingreso se produce normalmente cuando lanzamos una sesión de

terminal en la interfaz gráfica de usuario.Iniciar sesión conchas leen uno o más archivos de inicio como se muestra en la Tabla 11-2:

Lo que se almacena en el medio ambiente?

PWD El directorio de trabajo actual.P L A Z O

El nombre de su tipo de terminal. Sistemas de tipo Unix soportanmuchos protocolos de terminales; esta variable establece el protocolopara ser utilizado con su emulador de terminal.

TZ Especifica su zona horaria. La mayoría de los sistemas tipo Unixmantener el reloj interno de la computadora en el Tiempo UniversalCoordinado (UTC) y luego muestra la hora local mediante la aplicaciónde un desplazamiento especificado por esta variable.

U S U A RIO Tu nombre de usuario.

Tabla 11-2: archivos de inicio Para Entrar Shell Sesiones

Expediente  Contenido 

/ E t c / p r o f i l eUna secuencia de comandos de configuración global que sea lica a todos los usuarios.

~ / . b a s h _ p r o f i l e Archivo de inicio personal de un usuario. Puede serutilizado para extender o anular la configuración de la

~ / . b a s h _ l o g inSi ~ / .bash_profile no se encuentra, golpe intenta leereste guión.

~ / . p r o f i l eSi no se encuentra ni ~ / .bash_profile ni ~ / .bash_login,golpe intenta leer este archivo. Este es el valor por defecto endistribuciones basadas en Debian, como Ubuntu.

Sesiones de intérprete deno ingreso leer los siguientes archivos de inicio:

127

Page 159: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 159/571

11 - El Medio Ambiente

Tabla 11-3: archivos de inicio para los no Login Shell Sesiones 

Expediente  Contenido 

/ e t c / b a s h . b a s h r cUna secuencia de comandos de configuración global que sea lica a todos los usuarios.

~ / . b a s h r c Archivo de inicio personal de un usuario. Puede serutilizado para extender o anular la configuración de la

# .bash_profile

# Obtener los alias y las funciones if [-f~ / .bashrc]; entonces

. ~ / .bashrcFi

# Programas de inicio entorno específico del usuario y

PATH = $ PATH: $ PATH

HOME / bin exportación

si [-f ~ / .bashrc]; entonces

Además de la lectura de los archivos de inicio de arriba, no de inicio de sesión conchastambién heredan el entorno de su proceso padre, un intérprete de ingreso.

Echa un vistazo a su sistema y ver cuál de estos archivos de inicio que tiene. Recuerde: ya quela mayoría de los nombres de los archivos enumerados anteriormente comienzo con un punto

(es decir, que están ocultos), tendrá que utilizar la opción "-a" al usar ls.

El archivo ~ / .bashrc es probablemente el archivo de inicio más importante desde el punto devista del usuario normal, ya que casi siempre se lee. De no ingreso conchas leen por defecto yla mayoría de los archivos de inicio para inicio de sesión conchas están escritos de tal maneracomo para leer el archivo ~ / .bashrc también.

¿Qué hay en un archivo de inicio?Si echamos un vistazo en el interior de una típica .bash_profile (tomado de un sistema CentOS4), que se ve algo como esto:

Las líneas que empiezan con un "#" son comentarios y no son leídos por el shell. Estos están

ahí para facilitar la lectura humana. La primera cosa interesante se produce en la cuarta línea,con el siguiente código:

128

Page 160: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 160/571

~ / .bashrcfi

Si el archivo "~ / .bashrc" existe, thenread el

archivo "~ / .bashrc".

PATH = $ PATH: $ HOME/ bin

[Me @ linuxbox[me @ linuxboxEsto es cierto[me @ linuxbox[me @ linuxboxesto es cierto

~] $ Foo = "Esto es un poco~] $ echo $ foo 

~] $ Foo = $ foo "texto". ~] $Echo $ foo texto.

II

¿Cómo se establece el medio ambiente?Esto se llama un caso de comando compuesto, que vamos a cubrir plenamente cuando

lleguemos a shell scripting en la parte 4, pero por ahora vamos a traducir:Podemos ver que este trozo de código es como un shell de entrada se pone el contenido de.bashrc. Lo siguiente en nuestro archivo de inicio tiene que ver con la variable PATH.

Alguna vez se preguntó cómo el shell sabe dónde encontrar los comandos cuando lesentramos en la línea de comandos? Por ejemplo, cuando entramos en ls, el shell no busca entodo el equipo para encontrar / bin / ls (la ruta completa del comando ls), sino que busca enuna lista de directorios que están contenidos en la variable PATH.

La variable PATH es a menudo (pero no siempre, dependiendo de la distribución) establecidopor el archivo / etc / profile de inicio y con este código:PATH está modificado para añadir el directorio $ HOME / bin al final de la lista. Este es un

ejemplo de la expansión de parámetro, que tocamos en el Capítulo 7. Para demostrar cómo

esto funciona, intente lo siguiente:Usando esta técnica, podemos añadir texto al final de los contenidos de una variable.

Mediante la adición de la cadena $ HOME / bin al final del contenido de la variable PATH, seañade el directorio $ HOME / bin a la lista de directorios de búsqueda cuando se introduce uncomando. Esto significa que cuando queremos crear un directorio dentro de nuestro directoriopersonal para almacenar nuestros propios programas privados, la cáscara está dispuesto acomplacernos. Todo lo que tenemos que hacer es llamar

129

Page 161: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 161/571

export PATH

11  - La bandeja se Ambiente, y estamos listos para ir.

Nota: Muchas distribuciones proporcionan esta configuración por defecto PATH.Algunas distribuciones basadas en Debian, como Ubuntu, la prueba de la existencia deldirectorio ~ / bin al iniciar la sesión, y de forma dinámica la agregan a la variable

PATH si no se encuentra el directorio.

Por último, tenemos:

El comando de exportación le dice al shell para hacer los contenidos de ruta disponible paraprocesos secundarios de esta concha.

Modificar el entorno

Ya que sabemos donde están los archivos de inicio y lo que contienen, que puedenmodificarlos para personalizar nuestro entorno.

Qué archivos deben modificamos?Como regla general, para añadir directorios al PATH, o definir las variables de entornoadicionales, coloque esos cambios en .bash_profile (o equivalente, de acuerdo a sudistribución. Por ejemplo, Ubuntu utiliza .profile.) Para todo lo demás, coloque los cambios en.bashrc. A menos que usted es el administrador del sistema y la necesidad de cambiar losvalores por defecto para todos los usuarios del sistema, restringir sus modificaciones a los

archivos en su directorio personal. Sin duda, es posible cambiar los archivos en / etc, talescomo el perfil, y en muchos casos, sería sensato hacerlo, pero por ahora, vamos a jugar a loseguro.

Editores de textoPara editar (es decir, modificar) los archivos de inicio de la cáscara, así como la mayoría de losotros archivos de configuración en el sistema, se utiliza un programa llamado un editor detexto. Un editor de texto es un programa que es, en cierto modo, como un procesador de textosen el que le permite editar las palabras en la pantalla con un cursor en movimiento. Sediferencia de un procesador de textos por sólo apoyar el texto puro, y con frecuencia contienecaracterísticas diseñadas para escribir programas. Editores de texto son la herramienta central

utilizado por los desarrolladores de software para escribir código, y por los administradoresde sistemas para la gestión de los archivos de configuración que controlan el sistema.

Hay un montón de diferentes editores de texto disponibles para Linux; su sistemaprobablemente ha instalado varias. ¿Por qué tantas personas diferentes? Probablementeporque los programadores como la escritura

130

Page 162: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 162/571

[Me @ linuxbox ~] $ gedit some_file

[Me @ linuxbox ~] $ cp .bashrc .bashrc.bak

 ______________________________________________________ Modificar el entorno

ellos, y dado que los programadores los usan ampliamente, escriben los editores de expresarsus propios deseos en cuanto a la forma en que deben trabajar.

Editores de texto se dividen en dos categorías básicas: gráfica y de texto basados. GNOME yKDE tanto incluyen algunos editores gráficos populares. Barcos de GNOME con un editorllamado gedit, que por lo general se llama "Editor de texto" en el menú de GNOME. KDENormalmente expedido con tres que son (en orden creciente de complejidad) kedit, kwrite, yKate.

Hay muchos editores de texto. Los más populares que se encontrará son nano, vi, y emacs. Eleditor nano es un editor simple, fácil de usar, diseñado como un reemplazo para el editor picosuministrado con la suite de correo electrónico PINO. El editor vi (en la mayoría de lossistemas Linux reemplazados por un programa llamado vim, que es la abreviatura de "Vimejorado") es el editor tradicional para sistemas tipo Unix. Será el tema de nuestro próximocapítulo. El editor emacs fue escrito originalmente por Richard Stallman. Es un gigante, paratodo uso, entorno de programación hace-todo. Mientras fácilmente disponible, que rara vez se

ha instalado en la mayoría de los sistemas Linux por defecto.

Utilizando un editor de textoTodos los editores de texto pueden ser invocados desde la línea de comandos escribiendo el

nombre del editor, seguido por el nombre del archivo que desea editar. Si el archivo no existe,el editor asumirá que usted desea crear un nuevo archivo. Aquí hay un ejemplo usando gedit:

Este comando iniciará el editor de texto gedit y cargar el archivo con el nombre "some_file", sies que existe.

Todos los editores de texto gráficos son bastante explica por sí mismo, por lo que no van acubrir aquí. En lugar de ello, nos concentraremos en nuestro primer editor de texto basado entexto, nano. Vamos a disparar hasta nano y editar el archivo .bashrc. Pero antes de hacer eso,vamos a practicar un poco de "computación segura." Cada vez que editamos un archivo deconfiguración importante, siempre es una buena idea crear una copia de seguridad del

archivo primero. Esto nos protege en caso de que el archivo de lío para arriba mientras que laedición. Para crear una copia de seguridad del archivo .bashrc, haga lo siguiente:

No importa lo que usted llama el archivo de copia de seguridad, sólo debes elegir un nombrecomprensible. La extensión ".bak", ".sav", "old", y ".orig" son formas populares de lo que indicaun archivo de copia de seguridad. Ah, y recuerda que cp sobrescribe los archivos existentes ensilencio.

131

Page 163: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 163/571

 

11 - El Medio Ambiente

Ahora que tenemos un archivo de copia de seguridad,vamos a iniciar el editor:

[Me @ linuxbox ~] $ nano .bashrc

Una vez nano comienza, vamos a tener unapantalla como esta:

Nano 2.0.3 Archivo: .bashrc

# .bashrc

# Fuente definiciones globales if[-f / etc / bashrc]; entonces

. / Etc / bashrc fi

# Alias y funciones específicas del usuario

[Leer 8 líneas]LaG OBTENER AYUDA | AO Writeout | AR  Lea Fil | AY   Anterior Pag | AK

  Cortar texto | AC  Cur PosLaX Salir | aj  Justificar | aw  ¿Dónde está | av  SiguientePag ^ u  UnCut TqAT Para Hechizo

Nota: Si su sistema no tiene nano instalado, puede utilizar un editor gráfico en sulugar. 

La pantalla se compone de una cabecera en la parte superior, el texto del archivo que se estáeditando en el medio y un menú de comandos en la parte inferior. Desde nano fue diseñadopara reemplazar el editor de texto que se suministra con un cliente de correo electrónico, esmás bien corto en funciones de edición.

El primer comando que debe aprender en cualquier editor de texto es la forma de salir delprograma. En el caso de las nano, pulse Ctrl-x para salir. Esto se indica en el menú en la parteinferior de la pantalla. El "AX" notación significa Ctrl-x. Esta es una notación común para loscaracteres de control utilizados por muchos programas.

El segundo comando que necesitamos saber es cómo salvar nuestro trabajo. Con nano es Ctrl-

1 32

Page 164: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 164/571

Modificar el entorno

0.  Con este conocimiento en nuestro haber, estamos listos para hacer algo de edición. Con latecla de flecha hacia abajo y / o la tecla AvPág, mueva el cursor hasta el final del archivo, acontinuación, agregue las siguientes líneas al archivo .bashrc:

umask 0002 HISTCONTROL exportación = ignoredups HISTSIZE exportación = 1000 alias l. = 'ls-d. * --color = auto' alias ll = 'ls -l --color = auto' 

Nota: Su distribución ya puede incluir daño anadie.

algunos de ellos, pero no lo haráduplicados

Aquí está el significado de nuestras adiciones:

Tabla 11-4: Adiciones a nuestro .bashrc 

Línea  Significado u m a s k 0 0 0 2 Establece la umask para resolver el

problema con los directorioscompartidos que discutimos en el

e xp o r t a c i ó n H IS T CON T ROL =i g n o r e d u p s Causas función de grabación de la

historia de la cáscara de ignorar una

orden si el mismo comando se acabade grabar.

e x p o r t a c i ó n H I S T S I ZE = 1 0 0 0 Aumenta el tamaño del historial decomandos desde el valorpredeterminado de 500 líneas a 1000

a l i a s l . = ' l s - d . * - - c o l o r = a u t o ' Crea un nuevo comando llamado "l.", Que muestra todas las entradas dedirectorio que comienzan con un

a l i a s l l = ' l s - l - - c o l o r = a u t o 'Crea un nuevo comando llamado "ll",

que muestra una lista de directoriosde formato largo.

Como podemos ver, muchas de nuestras adiciones no son intuitivamente obvio, por lo quesería una buena idea añadir algunos comentarios a nuestro archivo .bashrc para ayudar aexplicar las cosas a los seres humanos.

133

Page 165: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 165/571

 

11 - El Medio Ambiente

Usando el editor, cambiar nuestras adiciones a tener esteaspecto:

#  Cambie umask para hacer más fácil el intercambio dedirectorioumask 0002

#  No haga caso de los duplicados de la historia de comandosy aumento#  tamaño de la historia a 1000 líneasexportación HISTCONTROL =ignoredups exportación HISTSIZE =1000

#  Agregue un poco de alias útilesalias l. = 'ls -d. * --color = auto' alias ll = 'ls-l --color = auto'

Ah, mucho mejor! Con nuestros cambios, pulse Ctrl-o para guardar nuestro archivo .bashrc

modificado, y Ctrl-x para salir de nano.

¿Por qué comentarios son importantes

Siempre que modifique los archivos de configuración que es una buena idea añadiralgunos comentarios para documentar los cambios. Claro, usted recordará lo que hacambiado de mañana, pero ¿qué pasa dentro de seis meses? Hágase un favor y añadiralgunos comentarios. Mientras estás en ello, no es una mala idea llevar un registro delo que los cambios que realice.Los scripts de shell y archivos de inicio de bash utilizan un símbolo "#" para iniciar un

comentario. Otros archivos de configuración pueden utilizar otros símbolos. Lamayoría de los archivos de configuración tendrán comentarios. Utilizarlos como unaguía.Es frecuente encontrar que las líneas en los archivos de configuración que se comentana cabo para evitar que sean utilizados por el programa afectado. Esto se hace para dara los lectores sugerencias para posibles opciones de configuración o ejemplos de lasintaxis correcta configuración. Por ejemplo, el archivo .bashrc de Ubuntu 8.04contiene estas líneas:# algunos más ls alias #alias ll ='ls -l'# a l i a s L A = ' l s - a '

# a l i a s l = ' l s - C F 'Las tres últimas líneas son las definiciones de alias válidos que han sido comentadas.Si quita los símbolos "#" que conducen de estas tres líneas, una técnica llamadadescomentando, usted activará los alias. Por el contrario, si se agrega un símbolo "#"al principio de una línea, se puede desactivar una línea de configuración, mientrasque la preservación de la información que contiene.

134

Page 166: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 166/571

[Me @ linuxbox ~] $ .bashrc fuente

[Me @ linuxbox ~] $ ll

Modificar el entorno

 Activación Nuestros CambiosLos cambios que hemos hecho en nuestro .bashrc no tendrá efecto hasta que cerramos nuestrasesión de terminal y comenzar uno nuevo, ya que el archivo .bashrc sólo se lee al comienzo de

una sesión. Sin embargo, podemos forzar bash para volver a leer el archivo .bashrcmodificado con el siguiente comando:

Después de hacer esto, deberíamos ser capaces de ver el efecto de los cambios. Pruebe uno delos nuevos alias:

ResumiendoEn este capítulo nos enteramos de un archivo de configuración de habilidades de ediciónesenciales con un editor de texto. En el futuro, a medida que leemos las páginas man para loscomandos, tome nota de las variables de entorno que los comandos de apoyo. Puede haberuna joya o dos. En capítulos posteriores, vamos a aprender acerca de las funciones de shell,una característica de gran alcance que también se puede incluir en los archivos de inicio debash para agregar a su arsenal de comandos personalizados.

Lectura adicional

• La sección de invocación de la página de manual de bash cubre los archivos de inicio de

bash en detalles sangrientos.

135

Page 167: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 167/571

12  - Una suave introducción a VI

12 - Una suave intro ducc ión a VI

Hay una vieja broma acerca de un visitante a la ciudad de Nueva York pidiendo un transeúntecómo llegar a la famosa sala de conciertos clásica de la ciudad:

Visitante: Disculpe, ¿cómo puedo llegar a Carnegie Hall?

Transeúnte: Práctica, práctica, práctica!

El aprendizaje de la línea de comandos de Linux, como convertirse en un pianista consumado,no es algo que nosotros recogemos en una tarde. Se necesitan años de práctica. En estecapítulo, vamos a introducir los vi (pronunciado "ojo uve") del editor de texto, uno de losprogramas básicos de la tradición Unix. vi es algo notorio por su interfaz de usuario difícil,pero cuando vemos a un maestro se sentó ante el teclado y comenzar a "jugar", que será dehecho testigo de algún gran arte. No vamos a convertirse en maestros de este capítulo, perocuando hayamos terminado, vamos a saber cómo jugar "palillos" en vi.

¿Por qué debemos aprender vi

En esta era moderna de editores gráficos y editores fáciles de usar basados en texto comonano, ¿por qué debemos aprender vi? Hay tres buenas razones:

•  vi siempre está disponible. Esto puede ser un salvavidas si tenemos un sistema sininterfaz gráfica, como por ejemplo un servidor remoto o un sistema local con unaconfiguración X rota. nano, mientras que cada vez más popular todavía no esuniversal. POSIX, un estándar para la compatibilidad de programas en los sistemasUnix, requiere que vi estar presente.

•  vi es ligero y rápido. Para muchas tareas, es más fácil para que aparezca vi de lo que esencontrar el editor gráfico de texto en los menús y esperar a que sus múltiplesmegabytes para cargar. Además, vi está diseñado para escribir velocidad. Comoveremos, un usuario experto vi nunca tiene que levantar sus dedos del tecladodurante la edición.

•  No queremos que otros usuarios de Linux y Unix que creen que somos cobardes.De acuerdo, tal vez dos buenas razones.

136

Page 168: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 168/571

[Me @ linuxbox ~] $ vi

Un poco de historia

Un poco de historia

La primera versión de vi fue escrito en 1976 por Bill Joy, de la Universidad de California enBerkley estudiante que más tarde pasó a co-encontró Sun Microsystems. vi deriva su nombre

de la palabra "visual", ya que tenía la intención de permitir la edición en un terminal de vídeocon un cursor en movimiento. Anterior a los editores visuales, había editores de línea queoperaban en una sola línea de texto a la vez. Para especificar un cambio, le decimos a un editorde línea para ir a una línea en particular y describir lo que el cambio para hacer, por ejemplo,agregar o borrar texto. Con el advenimiento de terminales de vídeo (en lugar de terminalesbasados en la impresora como teletipos) edición visual se hizo posible. vi en realidadincorpora un editor de línea de gran alcance llamada ex, y podemos usar los comandos deedición de línea mientras se utiliza vi.

La mayoría de las distribuciones de Linux no incluyen los bienes vi; más bien, que se entregancon un reemplazo llamado vim mejorada (que es la abreviatura de "vi mejorado") escrito porBram Moolenaar. vim es una mejora sustancial sobre tradicional vi Unix y por lo general se

vincula simbólicamente (o alias) para el nombre de "vi" en los sistemas Linux. En lasdiscusiones que siguen, vamos a suponer que tenemos un programa que se llama "vi" que esrealmente vim.

Inicio y detención de vi

Para iniciar vi, simplemente escriba lo siguiente:

Y una pantalla como esta debería aparecer:

137

VIM - Vi mejorada versión 7.1.138por Bram Moolenaar  et al. 

Empuje es de código abierto y de libre distribución 

Patrocinador desarrollo Vim! tipo  : Ayuda patrocinador <Intro>  para información 

tipo  : Q <Intro>  para salir  tipo  : Help <Intro> o <F1>  en busca de ayuda

tipo  : Ayuda version7 <Intro>  Versión info Ejecución en modo compatible Vi 

tipo  : Set NOCP <Intro>  para los impagos de

Page 169: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 169/571

 

12 - una suave introducción a VI

Tipo: ayuda cp-default <Intro> para obtener informaciónsobre este

Al igual que hicimos con nano anterior, lo primero que debe aprender es cómo salir. Parasalir, entramos en el siguiente comando (tenga en cuenta que el carácter de dos puntos esparte del comando):

:Q

El intérprete de comandos debe devolver. Si, por alguna razón, no le vi salir (normalmenteporque hemos hecho un cambio en un archivo que aún no se ha guardado), podemos decir

que vi que realmente queremos decir que mediante la adición de un signo de exclamación alcomando:

Sugerencia: Si se "pierde" en vi, intente presionar la tecla Esc dos veces paraencontrar el camino de nuevo. 

Modo de compatibilidadEn la pantalla de inicio de ejemplo anterior (tomado de Ubuntu 8.04), vemos que eltexto "Ejecutar en modo compatible Vi." Esto significa que vim se ejecutará en unmodo que está más cerca el comportamiento normal de vi más que el comportamientomejorado de vim . Para efectos de este capítulo, vamos a querer ejecutar vim con sucomportamiento mejorado. Para ello, usted tiene algunas opciones:Intente ejecutar vim en lugar de vi.Si eso funciona, considere agregar alias vi = 'vim' a su archivo .bashrc. Comoalternativa, utilice este comando para añadir una línea a su fichero de configuraciónde vim: echo "NOCP ajuste" >> ~ / .vimrcDiferentes distribuciones Linux paquete vim de diferentes maneras. Algunas

distribuciones instalan una versión mínima de vim por defecto que sólo es compatiblecon un conjunto limitado de funciones vim. Mientras preformación las lecciones quesiguen, puede encontrar las características que faltan. Si este es el caso, instalar laversión completa de vim.

1 38

Page 170: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 170/571

[Me @ linuxbox ~] $ rm -f foo.txt [me @linuxbox ~] $ vi foo.txt

"Foo.txt" [Archivo Nuevo]

Modos de edición

Modos de edición

Vamos a empezar a vi de nuevo, esta vez pasando a ella el nombre de un archivo que no

existe. Así es como podemos crear un nuevo archivo con vi:

Si todo va bien, deberíamos obtener una pantalla como esta:

Los caracteres que llevan tilde ("~") indican que no existe ningún texto en esa línea. Estodemuestra que tenemos un archivo vacío. No escriba nada todavía!

La segunda cosa más importante para aprender acerca de vi (después de aprender a salir) esque vi es un editor modal. Cuando vi arranca, comienza en el modo de comando. En estemodo, casi cada clave es un comando, por lo que si tuviéramos que empezar a escribir, vi seríabásicamente se vuelven locos y hacen un gran lío.

139

Page 171: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 171/571

 

12 - una suave introducción a VI

 Acceso al modo de inserciónCon el fin de añadir un poco de texto en nuestro archivo, primero tenemos que entrar en elmodo de inserción. Para ello, pulsamos la tecla "i". Después, hay que ver lo siguiente en la

parte inferior de la pantalla si vim se está ejecutando en modo mejorado su habitual (esto noaparecerá en el modo compatible vi):

- INSERT -

Ahora podemos introducir algún texto.Prueba esto:

El rápido zorro marrón saltó sobre el perro perezoso.

Para salir del modo de inserción y volver al modo comando, presione la tecla Esc.

Salvando Nuestro TrabajoPara guardar los cambios que acaba de hacer en nuestro archivo, debemos entrar un excomando, mientras que en el modo de comando. Esto se hace fácilmente pulsando la tecla ":"clave. Después de hacer esto, un carácter de dos puntos debería aparecer en la parte inferiorde la pantalla:

Para escribir nuestro archivo modificado, seguimos el colon con una "w"y luego Enter:

:W

El archivo se grabará en el disco duro y que debe recibir un mensaje de confirmación en laparte inferior de la pantalla, así:

"Foo.txt" [Nuevo] 1L, 46C escrito

Consejo: Si usted lee la documentación de vim, te darás cuenta de que(confusamente) modo de comando se llama comandos del modo y ex normales sellaman modo de comando. 

140

Page 172: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 172/571

Modos de edición

Tenga cuidado.

Moviendo el cursor porMientras que en el modo de comando, vi ofrece un gran número de comandos de movimiento,algunos de los cuales comparte con menos. Aquí es un subconjunto:Tabla 12-1: Movimiento del cursor Teclas

Clave  Mueve el cursor 

l o Flecha derecha Haga un carácter.

h o Flecha izquierda Quede un carácter.

 j o Flecha abajo Una línea hacia abajo.

k o Flecha arriba Hasta una línea.0 (cero) Para el comienzo de la línea actual.La

Para el primero no está en blanco en la línea actual.

$ Para el final de la línea actual.w Para el comienzo de la siguiente palabra o carácter

puntuacion.W

Para el comienzo de la siguiente palabra, haciendo casoomiso de los caracteres de puntuación.

b Para el comienzo de la palabra anterior o carácterpuntuacion.

BPara el comienzo de la palabra anterior, haciendo casoomiso de los caracteres de puntuación.

C t r l - F o P á g i na Abajo Abajo una página.

C t r l - b o R e P á g Hasta una página. Numberg   Para la línea número. Por ejemplo, 1G se mueve a la

primera línea del archivo.

G Para la última línea del archivo.

¿Por qué son los h, j, k, l y llaves utilizado para el movimiento del cursor? Porque cuando viera originalmente

141

Page 173: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 173/571

El rápido zorro marrón saltó sobre el perro perezoso.

El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muyinteresante.

12  - Una introducción agradable a VI finalmente escrito, no todos los terminales de vídeotenían teclas de flecha, y mecanógrafos expertos podría utilizar teclas regulares del tecladopara mover el cursor sin tener que levantar los dedos del teclado.Muchos comandos vi pueden ser precedidos de un número, al igual que con el comando "G"que aparece arriba. Por anteponiendo un comando con un número, podemos especificar elnúmero de veces que un comando se llevará a cabo. Por ejemplo, el comando "5J" hace que vi

para mover el cursor hacia abajo cinco líneas.

Edición básica

La mayor parte de edición consiste en un par de operaciones básicas tales como la inserción detexto, elimine el texto, y el texto en movimiento alrededor de cortar y pegar. vi, por supuesto,apoya todas estas operaciones en su propia manera única. vi también proporciona una formalimitada de deshacer. Si pulsamos la tecla "u" en el modo de comando, se vi deshacer el últimocambio que realizó. Esto será muy útil ya que tratamos a cabo algunos de los comandosbásicos de edición.

 Al añadir textovi tiene varias formas diferentes de entrar en el modo de inserción. Ya hemos utilizado el

comando i para insertar texto.

Volvamos a nuestro archivo foo.txt por un momento:

Si quisiéramos añadir un poco de texto al final de esta frase, descubriríamos que el comandono voy a hacerlo, ya que no podemos mover el cursor más allá del final de la línea. vi ofrece uncomando para añadir el texto, la "a" de comandos con sensatez llamado. Si movemos el cursor

al final de la línea y de tipo "A", el cursor se moverá más allá del final de la línea y vi entrará enel modo de inserción. Esto nos permitirá añadir más texto:

Recuerde pulsar la tecla Esc para salir del modo de inserción.

Ya que casi siempre le quieren añadir texto al final de una línea, vi ofrece un acceso directopara pasar a la final de la línea actual y empezar añadiendo. Es el comando "A". Vamos aintentarlo y añadir algunas líneas más a nuestro archivo.

En primer lugar, vamos a pasar el cursor al principio de la línea con el comando "0" (cero).

142

Page 174: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 174/571

El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muyinteresante.Línea 2Línea 3Línea 4Línea 5

El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muyinteresante. Línea 2 Línea 3

Línea 4Línea 5

El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muyinteresante. Línea 2

Edición básica

Ahora escribimos "A" y añadimos las siguientes líneas de texto:

Una vez más, pulse la tecla Esc para salir del modo de inserción.

Como podemos ver, el comando "A" es más útil cuando se mueve el cursor hasta el final de lalínea antes de iniciar el modo de inserción.

La apertura de una líneaOtra forma en que podemos insertar texto es por la "apertura" de una línea. Esto inserta unalínea en blanco entre dos líneas existentes y entra en el modo de inserción. Esto tiene dosvariantes:

Se abrió una nueva línea por debajo de la tercera línea y entramos en el modo de inserción.Salga del modo de inserción pulsando la tecla Esc. Pulse la tecla U para deshacer nuestro

cambio.

Pulse la tecla O para abrir la línea por encima del cursor:

143

Tabla 12-2: Claves línea de aperturaComando  Abre o La línea debajo de la línea actual.O La línea por encima de la línea actual.

Podemos demostrar esto de la siguiente manera: colocar el cursor sobre "Línea 3" acontinuación, pulse la tecla o.

Page 175: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 175/571

Línea 3Línea 4Línea 5

12  - Una suave introducción a VI

Salga del modo de inserción presionando la tecla Esc y deshacer nuestro cambio pulsando u.

Eliminación de TextoComo era de esperar, vi ofrece una variedad de formas de eliminar el texto, todos los cualescontienen una de dos golpes de teclado. En primer lugar, la clave x eliminará un carácter en laposición del cursor. x puede ser precedido por un número que especifica el número decaracteres se van a eliminar. La clave es d propósito más general. Al igual que x, que puede serprecedida por un número que especifica el número de veces que la deleción se va a realizar.Además, d siempre es seguido por un comando de movimiento que controla el tamaño de ladeleción. He aquí algunos ejemplos:

Coloque el cursor sobre la palabra "No" en la primera línea de nuestro texto. Pulse la tecla xvarias veces hasta que se elimina el resto de la frase. A continuación, pulse la tecla u varias

veces hasta que la eliminación

144

Tabla 12-3: Comandos de texto de eliminación

Comando  Borra x El carácter actual.

3x El carácter actual y los próximos dos personajes.dd La línea actual.

5dd La línea actual y los próximos cuatro líneas.

dW Desde la posición actual del cursor hasta el principio de lasiguiente palabra.

d $ Desde la ubicación actual del cursor hasta el final de lalínea actual.

d0 Desde la ubicación actual del cursor hasta el principio de

la línea.dA

A partir de la posición actual del cursor al primer carácternonwhitespace en la línea.

dG Desde la línea actual hasta el final del archivo.

d 2 0 G Desde la línea actual a la línea XX del archivo.

Page 176: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 176/571

El rápido zorro marrón saltó sobre el perro perezoso. era fresco.Línea 2Línea 3Línea 4Línea 5

El rápido zorro marrón saltó sobre el perro perezoso.Línea 2Línea 3Línea 4Línea 5

Edición básica

es deshecho.

Nota: Bienes vi sólo es compatible con un solo nivel de deshacer. vim soporta múltiplesniveles.

Vamos a intentar el borrado de nuevo, esta vez con el comando d. Una vez más, mover elcursor a la palabra "It" y pulse dW suprimir la palabra:

Pulse $ d para borrar de la posición del cursor hasta el final de la línea:

Pulse dG para eliminar de la línea actual hasta el final del archivo:

Cortar, copiar y pegar textoEl comando d no sólo elimina el texto, sino que también el texto "recortes". Cada vez queutilizamos el comando d la supresión se copia en un búfer de pasta (creo portapapeles) queluego podemos recordar con el comando p para pegar el contenido de la memoria intermediadespués del cursor o el comando P para pegar el contenido antes del cursor.

El comando y se utiliza para "tirón" (copia) en el texto de la misma manera el comando d es

145

Presione U tres veces para deshacer la eliminación.

Page 177: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 177/571

12 - una suave introducción a VI

utilizado para cortar texto. Aquíestán algunos comandos Ment:

ejemplos que combinan el comando y con variosmovimiento

Table13- 4: Comandos YanKing 

Comando Copias

aa La línea actual.

5yy La línea actual y los próximos cuatro líneas.

yW Desde la posición actual del cursor hasta el principio de lasiguiente palabra.

y $ Desde la ubicación actual del cursor hasta el final de la líneaactual.

y0 Desde la ubicación actual del cursor hasta el principio de lalínea.

yA A partir de la posición actual del cursor al primer carácternonwhitespace en la línea.

yG Desde la línea actual hasta el final del archivo.

y 2 0 G Desde la línea actual a la línea XX del archivo.El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muyinteresante.Línea 2Línea 3Línea 4Línea 5El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muyinteresante.

El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muy

interesante. Línea 2 Línea 3 Línea 4

Vamos a probar un poco de copiar y pegar. Coloque el cursor en la primera línea del texto yescriba yy copiar la línea actual. A continuación, mueva el cursor a la última línea (G) y de tipo

p para pegar la línea por debajo de la línea actual:

Al igual que antes, el comando u deshará nuestro cambio. Con el cursor sigue en la posiciónen la última línea del archivo, tipo P para pegar el texto por encima de la línea actual:

146

Page 178: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 178/571

El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muyinteresante.Línea 5

El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muyinteresante. Línea 2Línea 3 Línea 4Línea 5

Edición básica

Pruebe algunos de los otros comandos Y en la tabla anterior y llegar a conocer elcomportamiento tanto de la p y P comandos. Cuando haya terminado, devuelva el archivo a

su estado original.

Unirse Líneasvi es bastante estricto en cuanto a su idea de una línea. Normalmente, no es posible mover el

cursor hasta el final de una línea y eliminar el carácter de fin de línea para unirse a una líneacon la de abajo. Debido a esto, vi proporciona un comando específico, J (que no debe

confundirse con j, que es para el movimiento del cursor) para unirse a las líneas juntas.Si colocamos el cursor en la línea 3 y escriba el comando J, esto es lo que sucede:

Buscar y reemplazar

vi tiene la capacidad de mover el cursor a ubicaciones basadas en búsquedas. Se puede haceresto ya sea en una sola línea oa través de un archivo completo. También puede realizarsustituciones de texto con o sin confirmación del usuario.

Busca dentro de una línea

El comando f busca en una línea y mueve el cursor a la siguiente instancia de un carácterespecificado. Por ejemplo, la fa comando sería mover el cursor a la siguiente aparición delcarácter "a" dentro de la línea actual. Después de realizar una búsqueda de caracteres dentrode una línea, la búsqueda se puede repetir escribiendo un punto y coma.

Busca el archivo completoPara mover el cursor a la siguiente aparición de una palabra o frase, se utiliza el comando /.Esto funciona de la misma manera que hemos aprendido anteriormente en el programa less.Cuando escribe el comando / a "/" aparecerá en la parte inferior de la pantalla. Acontinuación, escriba la palabra o frase que desea buscar, seguido de la tecla Enter. El cursor se

moverá a la siguiente posición que contiene la cadena de búsqueda. Una búsqueda puederepetirse utilizando la cadena de búsqueda anterior

147

Page 179: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 179/571

 

12 - una suave introducción a VI

con el comando n. He aquí un ejemplo:

El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muyinteresante.Línea 2Línea 3Línea 4Línea 5

Coloque el cursor en la primera línea del archivo.Tipo:

Línea

seguido de la tecla Enter. El cursor se moverá a la línea 2. A continuación, escriba n y el cursorse moverá a la línea 3. Repetir el comando n se moverá el cursor hacia abajo el archivo hastaque se queda sin partidos. Si bien no tenemos palabras y frases que hasta ahora sólo se utilizanpara nuestros patrones de búsqueda, vi permite el uso de expresiones regulares, un poderosométodo para expresar patrones de texto complejas. Cubriremos expresiones regulares encierto detalle en un capítulo posterior.

Búsqueda Global y reemplazovi usa un comando ex para realizar la búsqueda y reemplazo operaciones (llamada"sustitución" en vi) en un rango de líneas o la totalidad del expediente. Para cambiar lapalabra "línea" a "línea" para la totalidad del expediente, nos introduzca el siguiente comando:

:% S / línea / líneag

Vamos a romper este comando abajo en artículos separados y ver lo que hace cadauno:Table12- 5: Un ejemplo de búsqueda global y reemplazo de sintaxis

Artículo  Significado : El carácter de dos puntos comienza un ex comando.

%Especifica el rango de líneas para la operación. % Es un acceso

directo el significado de la primera línea a la última línea.Alternativamente, se podría haber especificado el rango de 1,5 (yaque nuestro archivo es de cinco líneas de largo), o 1, $, que significa"de la línea 1 a la última línea en el archivo." Si se omite el rango delíneas, la operación sólo se realiza en la línea actual.

148

Page 180: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 180/571

Buscar y reemplazars

Especifica la operación. En este caso, la sustitución (búsqueda yreemplazo).

/ L í n e a /l í n e a / El patrón de búsqueda y el texto de reemplazo.g

Esto significa "global" en el sentido de que la búsqueda y reemplazose realiza en todas las instancias de la cadena de búsqueda en lalínea. Si se omite, se sustituye sólo la primera instancia de la cadenade búsqueda en cada línea.

Después de laejecución de nuestra buscar y reemplazar comandos nuestro fichero tiene el siguiente aspecto:

El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muy interesante.la línea 2la línea 3línea 4línea 5

:% S / línea / línea /gc

También podemos especificar un comando de sustitución con la confirmación del usuario.

Esto se hace mediante la adición de una "C" al final del comando. Por ejemplo:

Este comando cambiará nuestro archivo de nuevo a su forma anterior; Sin embargo, antes decada sustitución, vi detiene y nos pide que confirme la sustitución con este mensaje:

reemplazar con Línea (s / n / a / q / l / AE / AY)?

Cada uno de los caracteres dentro de los paréntesis es una posible elección de la siguientemanera:

Tabla 12-6: Reemplace Keys Confirmación

Clave Acción

y Lleve a cabo la sustitución.

n Omita este ejemplo del patrón.

un Lleve a cabo la sustitución de esta y todas las instancias

posterioresdel patrón.

149

Page 181: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 181/571

 

12 - una suave introducción a VI

q o Esc Salga de la sustitución.

l Lleve a cabo esta sustitución y salga. Abreviatura de "durar".C t r l - e , C t r l - Y

Desplázate hacia abajo y desplácese hacia arriba,respectivamente. Útil para ver el contexto de la sustitución

Si escribe y, se llevará a cabo la sustitución, n hará que vi para saltar esta instancia y pasar a lasiguiente.

Edición de varios archivos

A menudo es útil para editar más de un archivo a la vez. Puede que tenga que realizarcambios en varios archivos o puede que tenga que copiar el contenido de un archivo en otro.Con vi podemos abrir varios archivos para la edición especificando en la línea de comando:

vi archivol archivo2 archivo3... 

Vamos a salir de nuestra sesión de vi existente y crear un nuevo archivo para editarlo. Tipo:wq para salir de vi, el ahorro de nuestro texto modificado. A continuación, vamos a crear unarchivo adicional en nuestro directorio de inicio que podemos jugar. Vamos a crear el archivomediante la captura de algún resultado del comando ls:

[Me @ linuxbox ~] $ ls -l / usr / bin> ls-output.txt 

Vamos a editar nuestro viejo archivo y nuestranueva con vi:

[Me @ linuxbox ~] $ vi foo.txt ls-output.txt 

vi comenzará y veremos el primer archivo en la pantalla:

El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muyinteresante. Línea 2Línea 3Línea 4Línea 5

150

Page 182: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 182/571

 

Edición de variosarchivos

Cambio entre archivosPara pasar de un archivo a otro, utilice este ex comando:

:N

Para regresar a la utilización archivoanterior:

:N

Mientras que podemos pasar de un archivo a otro, vi hace cumplir una política que nosimpide archivos de conmutación si el archivo actual tiene cambios sin guardar. Para forzar vi

para cambiar los archivos y abandonar sus cambios, añadir un signo de exclamación (!) Alcomando.

Además del método de conmutación descrito anteriormente, vim (y algunas versiones de vi)también proporcionan algunos comandos ex que hacen varios archivos más fáciles demanejar. Podemos ver una lista de archivos que se está editando con el comando: tampones. Silo hace, se mostrará una lista de los archivos en la parte inferior de la pantalla:

: Los tampones 1% un "foo.txt"  línea 1 

2 "ls-salida TXT "  línea 0 Presione ENTER o el tipo comando  para continuar  

Para cambiar a otro buffer (archivo), escriba: tampón seguido por el número de la memoriaintermedia que desea editar. Por ejemplo, para cambiar de tampón 1 que contiene el archivofoo.txt para amortiguar 2 que contiene el archivo ls-output.txt que escribiría esto:

: Tampón2

y nuestra pantalla muestra ahora el segundo archivo.

 Apertura de archivos adicional Para una ediciónTambién es posible añadir archivos a nuestra sesión de edición actual. El ex comando: e(abreviatura de "editar") seguido de un nombre de archivo se abrirá un archivo adicional.Vamos a terminar nuestra sesión de edición actual y volver a la línea de comandos.

151

Page 183: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 183/571

12 - una suave introducción a VI

Iniciar vi de nuevo con un soloarchivo:

[Me @ linuxbox ~] $ vi foo.txt 

Para agregar nuestro segundoarchivo, escriba:

: e ls-output.txt 

Y debe aparecer en la pantalla. El primer archivo es todavía presente como podemoscomprobar:

: Los tampones 1 # "foo.txt"  la línea 1 2% un "ls-output.txt"  línea 0 

Presione ENTER o el comandoescriba 

para continuar  

: Tampón1

Nota: No se puede cambiar a los archivos cargados con el comando: correo utilizandoel comando: N: N o. Para cambiar los archivos, utilice el comando: tampón seguido por

el número de búfer.

Copiar contenido de un archivo en otroA menudo, durante la edición de varios archivos, vamos a querer copiar una parte de unarchivo en otro archivo que estamos editando. Esto se hace fácilmente utilizando loscomandos de cortar y pegar sobre habituales que usamos antes. Podemos demostrar comosigue. En primer lugar, el uso de nuestros dos archivos, cambiar a amortiguar 1 (foo.txt)

mediante la introducción de:

que nos debe dar a este:152

Page 184: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 184/571

El rápido zorro marrón saltó sobre el perro perezoso. Ha sido muyinteresante. Línea 2Línea 3

Línea 4Línea 5

: Tampón

2

total de 343.700El rápido zorro marrón saltó -rwxr-xr-x 1 root root root-rwxr-xr-x 1 root -rwxr-xr-x 1root -rwxr-xr-x 1 root-rwxr-xr-x 1 root -rwxr-XR x 1

root root

sobre el perroperezoso.

31316 2007-12-05 82402007-12-09 2008-01-31

25368 111276 11532

2006-10-06 2007-05-047292 2007-05-04

Ha sido muyinteresante.08:58 [13:39 411toppm13:36 a2p 20:16

a52dec 17:43aafire 17:43 aainfo

Edición de varios archivos

A continuación, mueva el cursor a la primera línea, y escriba yy dar un tirón

(copia) de la línea. Cambie a la segunda memoria intermedia de entrada:

Mueva el cursor a la primera línea y pegar la línea copiamos desde el archivo anteriorescribiendo el comando p:

Inserción de un archivo completo en OtraTambién es posible insertar un archivo completo en el que estamos editando. Para ver esto enacción, vamos a terminar nuestra sesión vi y comenzar uno nuevo con un solo archivo:

153

La pantalla ahora contendrá algunos listados de archivos como este (sólo se muestra unaparte aquí):

total 343700 -rwxr-xr-x  1  raíz  raíz  31316 2007-12-05  8:58  [ -rwxr-xr-x  1  raíz  raíz  8240 2007-12-09  13:39  411toppm -rwxr-xr-x  1  raíz  raíz  111276 2008-01-31  13:36  a2p -rwxr-xr-x  1  raíz  raíz  25368 2006-10-06  20:16  a52dec -rwxr-xr-x

 1

 raíz

 raíz

 11532

 2007-05-04

 17:43

 aafire

 -rwxr-xr-x  1  raíz  raíz  7292 2007-05-04  17:43  aainfo 

Page 185: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 185/571

Page 186: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 186/571

: W foo1.txt  

Salvando Nuestro Trabajo

presentar y salir.

El: w comando también puede especificar un nombre de archivo opcional. Esto actúa como

"Guardar como ..." Por ejemplo, si estuviéramos editando foo.txt y queríamos ahorrar unaversión alternativa llamada foo1.txt, entraríamos lo siguiente:

Nota: Mientras que el comando anterior guarda el archivo con un nuevo nombre, nocambia el nombre del archivo que se está editando. A medida que continúe para editar,usted todavía será la edición foo.txt, no foo1.txt.

Resumiendo

Con este conjunto básico de habilidades que ahora podemos llevar a cabo la mayor parte de laedición de texto necesario para mantener un sistema típico de Linux. Aprender a usar vimsobre una base regular dará sus frutos en el largo plazo. Desde editores vi-estilo están tanprofundamente arraigados en la cultura Unix, vamos a ver muchos otros programas que hansido influenciados por su diseño. menos es un buen ejemplo de esta influencia.

Lectura adicional

Incluso con todo lo que hemos cubierto en este capítulo, apenas hemos arañado la superficiede lo que vi y vim puede hacer. Aquí hay un par de recursos en línea que puede utilizar paraseguir su viaje hacia el dominio vi:

•   Aprender El editor vi - Un wikilibro de Wikipedia que ofrece una guía concisa para vi yvarios de sus trabajos-uno-gustos incluyendo vim. Está disponible en:http://en.wikibooks.org/wiki/Vi  

•  El libro de Vim - El proyecto vim tiene un libro de 570 páginas que cubre (casi) todas lascaracterísticas en vim. Usted lo puede encontrar en:ftp://ftp.vim.org/pub/vim/doc/book/vimbook-OPL.pdf. 

•  Un artículo de Wikipedia sobre Bill Joy, el creador de vi .:http://en.wikipedia.org/wiki/Bill Alegría 

•  Un artículo de Wikipedia sobre Bram Moolenaar, el autor de vim:

http://en.wikipedia.org/wiki/Bram Moolenaar 

155

Page 187: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 187/571

[Me @ linuxbox ~]

[Me @ linuxbox ~] $ echo $ PS1 [\u @ \ h \ W] \ $

13  - Personalización de El Símbolo

13  - Pers onalizac ión de El Símbolo

En este capítulo vamos a ver en un detalle nuestro intérprete de comandos aparentementetrivial. Este examen revelará algunos de los mecanismos internos de la shell y el programaemulador de terminal en sí.

Como tantas cosas en Linux, el intérprete de comandos es altamente configurable, y si bienhemos casi dado por sentado, el símbolo es un dispositivo muy útil una vez que aprendemos

cómo controlarlo.

Anatomía de un Símbolo

Nuestro indicador predeterminado se ve algo como esto:

Observe que contiene nuestro nombre de usuario, nuestro nombre de host y nuestrodirectorio de trabajo actual, pero ¿cómo llegó esa manera? Muy simplemente, resulta. El

indicador se define por una variable de entorno denominada PS1 (abreviatura de "cadena deuno pronto"). Podemos ver el contenido de PS1 con el comando echo:

Nota: No se preocupe si sus resultados no son exactamente lo mismo que el ejemploanterior. Cada distribución de Linux define la cadena de petición un poco diferente, unpoco bastante exótico.

A partir de los resultados, podemos ver que PS1 contiene algunos de los personajes que vemosen nuestra pronta tales como los soportes, el, y el signo en signo de dólar, pero el resto son unmisterio. El astuto entre nosotros reconocerá estos como caracteres especiales escapados como

156

Page 188: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 188/571

Page 189: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 189/571

 

13 - Personalización de El Símbolo

cursor o cambiar los colores del texto.

\] Señala el final de una secuencia de caracteres de no impresión.

Tratando algunos diseños alternativos Prompt

Con esta lista de caracteres especiales, podemos cambiar el mensaje para ver el efecto. Enprimer lugar, vamos a respaldar la cadena existente para que podamos restaurarla más tarde.Para ello, vamos a copiar la cadena existente en otra variable de shell que nos creamos anosotros mismos:

[Me @ linuxbox ~] $ ps1_old = "$ PS1"

Creamos una nueva variable llamada ps1_old y asignamos el valor de PS1 a ella. Podemos

comprobar que la cadena ha sido copiada mediante el comando echo:

[Me @ linuxbox ~] $ echo $ ps1_old [\ u@ \ h \ W] \ $

Podemos restaurar el símbolo original en cualquier momento durante nuestra sesión determinal simplemente invirtiendo el proceso:

[Me @ linuxbox ~] $ PS1 = "$ ps1_old"

Ahora que estamos dispuestos a seguir adelante, vamos a ver qué pasa si tenemos una cadenade petición vacío:

[Me @ linuxbox ~] $ PS1 =

Si asignamos nada a la cadena de petición, obtenemos nada. No hay cadena de petición atodos! El mensaje sigue ahí, pero muestra nada, sólo como pedimos que lo haga. Dado queesta es una especie de desconcertante a la vista, lo reemplazaremos con un indicador mínimo:

PS1 = "\ $"

Eso está mejor. Por lo menos ahora podemos ver lo que estamos haciendo. Observe el espaciofinal dentro de las comillas dobles. Esto proporciona el espacio entre el signo de dólar y elcursor cuando

158

Page 190: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 190/571

 

Tratando algunos diseños alternativosPrompt

Se muestra el símbolo.

Vamos a añadir una campanaen nuestro mensaje:

PS1 = "\ [\ a \] \ "

Ahora debemos oír un pitido cada vez que se muestra el símbolo. Esto podría obtenermolesto, pero puede ser útil si necesitábamos una notificación cuando un comando especialde larga duración se ha ejecutado. Tenga en cuenta que se incluyeron las secuencias \ [\] y.Desde la campana ASCII (\ a) no "letra", es decir, que no se mueve el cursor, necesitamosdecirle fiesta para que pueda determinar correctamente la longitud de la indicación.

A continuación, vamos a tratar de hacer un símbolo informativo con algún nombre de host yla información de la hora del día:

$ PS1 = "\ A \ h \ $"17:33 linuxbox $

La hora del día para nuestra pronta Adición será útil si necesitamos hacer un seguimiento decuando realizamos determinadas tareas. Por último, vamos a hacer un nuevo mensaje que essimilar a la nuestra original de:

17:37 linuxbox $ PS1 = "<\ u @ \ h \ W> \ $"<me @ linuxbox ~> $

Pruebe las otras secuencias que figuran en la tabla anterior y ver si se puede llegar a un nuevosímbolo brillante.

Añadiendo color

La mayoría de los programas emuladores de terminal responden a ciertas secuencias decaracteres no imprimibles para controlar cosas tales como atributos de carácter (como el color,el texto en negrita, y el texto parpadeante temido) y la posición del cursor. Vamos a cubrir laposición del cursor en un poco, pero primero vamos a ver el color.

159

Page 191: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 191/571

Page 192: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 192/571

 Añadiendo color

\ 033 [0; 36m  Cyan \ 033 [1; 36m  Cian claro 

\ 033 [0; 37m  Gris claro \ 033 [1; 37m  Blanco 

Vamos a tratar de hacer un símbolo rojo. Nos insertaremos el código de escape por elprincipio: 

<Mí @ linuxbox ~> $<mí @ linuxbox ~> $ 

PS1 = "\ [\ 033 [0; 31m \] <\ u @ \ h \ W>\ $" 

<Mí @ linuxbox ~> $ PS1 = "\ [\ 033 [0; 41m \] <\ u @ \ h \ W> \ $ \ [\ 033 [0m \]" 

<Mí @ linuxbox ~> $

Eso funciona, pero aviso de que todo el texto que escribimos después el símbolo también esrojo. Para solucionar esto, vamos a añadir otro código de escape hasta el final de laconfirmación que dice el emulador de terminal para volver al color anterior:

<Mí @ linuxbox ~> $ PS1 = "\ [\ 033 [0; 31m \] <\ u @ \ h \ W> \ $ \ [\ 033 [0m \]" <Mí @ linuxbox ~> $

Eso es mejor!

También es posible configurar el color de fondo del texto utilizando los códigos que figuran acontinuación. Los colores de fondo no son compatibles con el atributo negrita.

Podemos crear un símbolo con un fondo rojo mediante la aplicación de un simple cambio en elprimer código de escape:

Pruebe los códigos de colores y ver lo que puede crear!

161

Tabla 13-3: Secuencias de escape utiliza para establecer el color de fondo

Secuencia  Color de fondo  Secuencia  Color de fondo 

\ 033 [0; 40m  Negro  \ 033 [0; 44m   Azul 

\ 033 [0; 41m  Rojo  \ 033 [0; 45m  Púrpura 

\ 033 [0; 42m  Verde  \ 033 [0; 46m  Cyan \ 033 [0; 43m  Marrón  \ 033 [0; 47m  Gris claro 

Page 193: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 193/571

PS1 = "\ [\ 033 [s \ 033 [0; 0H \ 033 [0; 41m \ 033 [K \ 033 [1; 33m \ t \ 033 [0m\ 033 [u \] <\ u @ \ h \ W> \ $ "

13  - Personalización de El Símbolo

Nota: Además de la normal (0) y subrayado en negrita (1) atributos de caracteres, eltexto también se puede dar (4), parpadeando (5), e inversa (7) atribuye también. En arasdel buen gusto, muchos emuladores de terminal se niegan a honrar el atributo deparpadear, sin embargo.

Mover el cursor

Códigos de escape se pueden utilizar para posicionar el cursor. Esto se utiliza comúnmentepara proporcionar un reloj o algún otro tipo de información en una ubicación diferente en lapantalla, tal como una esquina superior cada vez que el símbolo se dibuja. Aquí está una listade los códigos de escape que posicionan el cursor:

El uso de los códigos de arriba, vamos a construir un indicador que señala a una barra roja en

la parte superior de la pantalla que contiene un reloj (dictada en texto amarillo) cada vez quese muestra el símbolo. El código para el símbolo es esta cadena busca formidable:

Echemos un vistazo a cada parte de la cadena para ver que es lo que hace:

162

Tabla 13-4: Secuencias de Escape movimiento del cursor

Escapar Código  Acción \ 0 3 3 [ l ; c H Mueva el cursor a la línea L y la columna c

\ 0 3 3 [n A Mueva el cursor hacia arriba n líneas\ 0 3 3 [N B Mueva el cursor hacia abajo n líneas

\ 0 3 3 [ n C Mueva el cursor hacia adelante n caracteres

\ 0 3 3 [ nD Mueva el cursor hacia atrás n caracteres\ 0 3 3 [ 2 J

Desactive la pantalla y mover el cursor a la esquina superior izquierda(línea 0, columna 0)

\ 0 3 3 [ K Borrar en la posición del cursor hasta el final de la línea actual

\ 0 3 3 [ s Guarde la posición actual del cursor

\ 0 3 3 [ u Recuerde la posición del cursor almacenada

Page 194: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 194/571

Page 195: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 195/571

Page 196: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 196/571

Parte 3 - Tareas comunes y herramientas Esenciales

Parte 3 - Tareas comunes y esencialesInstrumentos

16514  - Gestión de paquetes

Page 197: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 197/571

14 - Gestión de paquetes

Si gastamos todo momento en la comunidad Linux, escuchamos muchas opiniones en cuantoa cuál de las muchas distribuciones de Linux es "mejor". A menudo, estas discusiones se

ponen realmente tonto, centrándose en aspectos como la hermosura del fondo del escritorio(algunas personas ganaron 't utilizar Ubuntu debido a su esquema de color por defecto!) yotros asuntos triviales.

El determinante más importante de la calidad de la distribución es el sistema de paquetes y lavitalidad de la comunidad el apoyo de la distribución. A medida que pasamos más tiempocon Linux, vemos que su entorno de software es extremadamente dinámico. Las cosas estáncambiando constantemente. La mayor parte de la grada superior de las distribuciones Linuxliberar nuevas versiones cada seis meses y muchos programas individuales actualiza todos losdías. Para mantenerse al día con esta ventisca de software, necesitamos buenas herramientaspara la gestión de paquetes.

Gestión de paquetes es un método de instalación y mantenimiento de software en el sistema.

Hoy en día, la mayoría de la gente puede satisfacer todas sus necesidades de softwaremediante la instalación de paquetes de su distribución de Linux. Esto contrasta con losprimeros días de Linux, cuando uno tenía que descargar y compilar el código fuente con el finde instalar el software. No es que haya nada malo con la compilación de código fuente; Dehecho, tener acceso al código fuente es la gran maravilla de Linux. Nos (y todos los demás) leda la capacidad de examinar y mejorar el sistema. Es sólo que el tener un paqueteprecompilado es más rápido y más fácil de tratar.

En este capítulo, vamos a ver algunas de las herramientas de línea de comandos utilizadospara la gestión de paquetes. Si bien todas las principales distribuciones proporcionan potentesy sofisticados programas gráficos para el mantenimiento del sistema, es importante aprenderacerca de los programas de línea de comandos, también. Ellos pueden realizar muchas tareas

que son difíciles (o imposibles) de hacer con sus homólogos gráficas.

Packaging Systems

Diferentes distribuciones utilizan diferentes sistemas de envasado y como regla general, unpaquete destinado a una distribución no es compatible con otra distribución. La mayoría delas distribuciones caen en una de dos campos de las tecnologías de envasado: el campamentode Debian ".deb" y el campo ".rpm" Red Hat. Hay algunas excepciones importantes, comoGentoo, Slack- ware, y Prospectiva, pero la mayoría de los otros usan uno de estos dossistemas básicos.

166Packaging Systems

Page 198: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 198/571

Page 199: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 199/571

Page 200: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 200/571

Page 201: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 201/571

apt-get update; apt-get install emacs

rpm -i emacs-22.1-7.fc7-i386.rpm

14  - Gestión de paquetes

apt-get install nombre_paquete Red Hat

  yum install nombre_paquete 

Ejemplo: Para instalar el editor de texto Emacs desde un repositorio apt:

Instalación de un paquete de un paquete de archivosSi un archivo de paquete ha sido descargado de una fuente distinta de un repositorio, puedeser instalado directamente (aunque sin dependencia de resolución) utilizando unaherramienta de bajo nivel.

Ejemplo: Si el archivo de paquete emacs-22.1-7.fc7-i386.rpm había sido descargado de un sitiono repositorio, que sería instalado de esta manera:

Nota: Dado que esta técnica utiliza el programa rpm de bajo nivel para llevar a cabo lainstalación, no se realiza ninguna resolución de dependencias. Si rpm descubre unadependencia faltante, rpm terminará con un error.

Eliminación de un paquete

Los paquetes se pueden desinstalar utilizando el nivel alto o herramientas de bajo nivel. Lasherramientas de alto nivel se muestran a continuación.

170

Tabla 14-5: Comandos de instalación de paquetes de bajo nivel

Estilo Comando (s)Debian dpkg --install package_file

Red Hat rpm -i package_file

Page 202: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 202/571

apt-get remove emacs

apt-get update; apt-get upgrade

Tareas de administración de paquete común

Ejemplo: Para desinstalar el paquete emacs desde un sistema al estilo Debian:

 Actualización de paquetes desde un repositorioLa tarea de administración más común paquete es mantener el sistema de puesta al día con losúltimos paquetes. Las herramientas de alto nivel pueden realizar esta tarea vital en un solopaso.

Ejemplo: Para aplicar las actualizaciones disponibles para los paquetes instalados en unsistema al estilo Debian:

 Actualización de un paquete desde un archivo de paqueteSi una versión actualizada de un paquete se ha descargado de una fuente no-repositorio, sepuede instalar, en sustitución de la versión anterior:

Tabla 14-8: Paquete de bajo nivel Actualiza Comandos

Estilo Comando (s)

Debian dpkg --install package_file 

171

Table15- 6: Comandos eliminación de paquetes

Estilo Comando (s)

Debian apt-get remove nombre_del_paqueteRed Hat yum borrar nombre_paquete

Tabla 14-7: Comandos del paquete Actualizar

Estilo Comando (s)

Debian apt-get update; apt-get upgradeRed Hat yum update

Page 203: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 203/571

Page 204: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 204/571

apt-cache show emacs

Tareas de administración de paquete común

Viendo Info Acerca de un paquete instaladoSi se conoce el nombre de un paquete instalado, los siguientes comandos se pueden utilizarpara mostrar una descripción del paquete:

Ejemplo: Para ver una descripción del paquete emacs en un sistema al estilo Debian:

Encontrar a qué paquete instaló un archivoPara determinar qué paquete es responsable de la instalación de un archivo en particular, lossiguientes comandos se pueden utilizar:

Resumiendo

En los capítulos que siguen, vamos a explorar muchos programas diferentes que abarcan unaamplia gama de áreas de aplicación. Si bien la mayoría de estos programas son comúnmenteinstalados por defecto, es posible que necesitemos instalar paquetes adicionales si losprogramas necesarios no están ya instalados en nuestro sistema. Con nuestro nuevoconocimiento (y apreciación) del paquete

173

Tabla 14-11: Paquete Comandos de Información

Estilo Comando (s)Debian  apt-cache show nombre_paquete

Red Hat  yum info nombre_paquete

Tabla 14-12: Paquete de archivos Comandos de identificación

Estilo Comando (s)Debian  dpkg --search nombre_archivo

Red Hat  rpm -qf nombre_archivo

Ejemplo: Paraver   qué paquete instalado el / Usr / bin / vim archivo en un sistema Red Hat:

rpm -qf / usr / bin / vim 

Page 205: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 205/571

 

14 - Gestión de paquetes ___________________________________________________________

gestión, que no debería tener problemas de la instalación y la gestión de los programas quenecesitamos.

El mito de instalación del software de LinuxLas personas que migran desde otras plataformas a veces son víctimas de el mito deque el software es de alguna manera difícil de instalar en Linux y que la variedad deesquemas de embalaje utilizado por diferentes distribuciones es un obstáculo. Bueno,es un obstáculo, sino sólo a los vendedores de software propietario que deseendistribuir binary- sólo versiones de su software secreto.El ecosistema de software de Linux se basa en la idea de código fuente abierto. Si undesarrollador de programas libera el código fuente para un producto, es probable queuna persona asociada con una distribución empaquetará el producto e incluirlo en surepositorio. Este método garantiza que el producto está bien integrado en ladistribución y el usuario tiene la conveniencia de "ventanilla única" para el software,en lugar de tener que buscar la página web de cada producto.Los controladores de dispositivos se manejan de la misma manera, excepto que enlugar de ser elementos separados en el repositorio de la distribución, se convierten enparte del núcleo de Linux en sí mismo. En términos generales, no hay tal cosa comoun "disco de controladores" en Linux. O bien el kernel soporta un dispositivo o no lohace, y el kernel de Linux soporta una gran cantidad de dispositivos. Muchos más, dehecho, que hace Windows. Por supuesto, esto es de ningún consuelo si el dispositivoen particular que usted necesita no es compatible. Cuando esto sucede, usted tieneque mirar a la causa. La falta de soporte de controlador suele ser causado por una detres cosas:1.  El dispositivo es demasiado nuevo. Dado que muchos proveedores dehardware no apoyan activamente el desarrollo de Linux, que cae sobre unmiembro de la comunidad de Linux para escribir el código de controlador delnúcleo. Esto toma tiempo. 2.  El dispositivo es demasiado exótico. No todas las distribuciones incluyentodos los controladores de dispositivos posible. Cada distribución construyesus propios núcleos, y puesto que los granos son muy configurable (que es loque hace posible ejecutar Linux en todo, desde los relojes de pulsera paramainframes) que pueden haber pasado por alto un dispositivo en particular. Allocalizar y descargar el código fuente del controlador, es posible que usted (sí,usted) para compilar e instalar el controlador usted mismo. Este proceso no esexcesivamente difícil, pero es bastante complicado. Hablaremos de la

compilación de software en un capítulo posterior. 3. El proveedor de hardware está ocultando algo. Han lanzado ni código fuentepara un controlador para Linux, ni han publicado la documentación técnicapara alguien para crear una para ellos. Esto significa que el proveedor dehardware está tratando de mantener las interfaces de programación para eldispositivo de un secreto. Dado que no queremos dispositivos secretos ennuestras computadoras, le sugiero que se quite el hardware infractor y el tono ala basura con sus otros artículos inútiles. 174

Page 206: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 206/571

Page 207: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 207/571

Page 208: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 208/571

con los dispositivos conectados en varios puntos. Esto contrasta con otros sistemas operativoscomo MS-DOS y Windows que mantienen los árboles del sistema de archivos separados paracada dispositivo (por ejemplo, C: \, D: \, etc.).

Un archivo llamado / etc / fstab muestra los dispositivos (normalmente particiones de discoduro) que se van a montar en el arranque. He aquí un ejemplo / etc / fstab de un sistema

Fedora 7:

La mayoría de los sistemas de archivos que figuran en este fichero de ejemplo son virtuales yno son aplicables a nuestra discusión. Para nuestros propósitos, los interesantes son los tresprimeros:

LABEL = / 12  /  ext3  por defecto  1 1 LABEL = / home  / Home  ext3  por defecto  1 2 LABEL = / b00t  / Boot  ext3  por defecto  1 2 tmpfs  / Dev / shm  tmpfs  por defecto  0 0 devpts  / dev / pts  devpts  gid = 5, mode = 0 0 sysfs  / sys  sysfs  por defecto  0 0 proc  / Proc  proc  por defecto  0 0 LABEL =SWAP-sda3 

intercambio  intercambio 

por defecto  0 0 

LABEL = / 12  /  ext3  por defecto  1 1 LABEL = / home  / Home  ext3  por defecto  1 2 LABEL = / b00t  / Boot  ext3  por defecto  1 2 

Estas son las particiones del disco duro. Cada línea del archivo se compone de seis campos,de la siguiente manera:Tabla 15-1: Campos / etc / fstab

Contenido del campo Descripción1 dispositivo Tradicionalmente, este campo contiene el nombre real deun archivo de dispositivo asociado con el dispositivo físico,como por ejemplo / dev / hda1 (la primera partición deldispositivo maestro en el primer canal IDE). Pero con losordenadores de hoy en día, que tienen muchos dispositivosque son conectables en caliente (como unidades USB),

177

Page 209: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 209/571

Page 210: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 210/571

uhelper = hal, uid = 500, utf8, nombre corto = inferior)twin4: / musicbox en / misc / musicbox tipo nfs4 (rw, addr = 192.168.1.4)

[Me @ linuxbox ~] monto $/ Dev / mapper / VolGroup00-LogVol00 en / tipo ext3 (rw) proc en el

tipo de / proc proc (rw) sysfs sysfs en / sys tipo (rw)devpts en / dev / pts escriba devpts (rw, gid = 5, mode = 620) / dev /hda1 en / boot tipo ext3 (rw) tmpfs en / dev / shm tmpfs tipo (rw)ninguno en / proc / sys / fs / binfmt_misc tipo binfmt_misc (rw) sunrpcen / var / lib / nfs / rpc_pipefs rpc_pipefs tipo (rw)

[Me @ linuxbox ~] monto $/ Dev / mapper / VolGroup00-LogVol00 en / tipo ext3 (rw) proc en eltipo de / proc proc (rw) sysfs sysfs en / sys tipo (rw)

devpts en / dev / pts escriba devpts (rw, gid = 5, mode = 620)/ Dev / hda1 en / boot tipo ext3 (rw) tmpfs en / dev / shm tmpfs tipo(rw)ninguno en / proc / sys / fs / binfmt_misc tipo binfmt_misc (rw) sunrpcen / var / lib / nfs / rpc_pipefs rpc_pipefs tipo (rw)/ Dev / hdc en el tipo /media/live-1.0.10-8 iso9660 (ro, noexec, nosuid, nodev, uid =500)

Montaje y desmontaje de dispositivos de almacenamiento

El formato de la lista es la siguiente: dispositivo del tipo punto_montaje file_system_type

(opciones). Por ejemplo, la primera línea muestra que el dispositivo / dev / sda2 estámontado como sistema de archivos raíz, es de tipo ext3, y es a la vez de lectura y escritura (laopción "rw"). Esta lista también tiene dos entradas interesantes en la parte inferior de la lista.La entrada-penúltima muestra una tarjeta de memoria SD de 2 gigabytes en un lector de

tarjetas montado en / media / disk, y la última entrada es una unidad de red montada en /misc / musicbox.

Para nuestro primer experimento, vamos a trabajar con un CD-ROM. En primer lugar,echemos un vistazo a un sistema antes de que se inserta un CD-ROM:

Este anuncio es de un sistema CentOS 5, que está utilizando LVM (Logical Volume Manager)para crear su sistema de archivos raíz. Al igual que muchas distribuciones de Linux, estesistema intentará montar automáticamente el CD-ROM después de la inserción. Después deinsertar el disco, vemos lo siguiente:

Después de insertar el disco, vemos la misma lista como antes con una entrada adicional. Alfinal de la lista vemos que el CD-ROM (que es el dispositivo / dev / hdc en esta ma

179

Page 211: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 211/571

Page 212: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 212/571

 

[root @ linuxbox cdrom] # ls

Montaje y desmontaje de dispositivos dealmacenamiento

Observe lo que sucede cuando tratamos de desmontar elCD-ROM:

[Root @ linuxbox cdrom] # umount / dev / hdcumount: / mnt / cdrom: dispositivo está ocupado

¿Por qué es esto? La razón es que no podemos desmontar un dispositivo si el dispositivo estásiendo utilizado por alguien o algún proceso. En este caso, hemos cambiado nuestro directoriode trabajo para el punto de montaje del CD-ROM, lo que hace que el dispositivo sea ocupado.Podemos solucionar fácilmente el problema cambiando el directorio de trabajo a algo más queel punto de montaje:

[Root @ linuxbox cdrom] # cd [root @linuxbox ~] # umount / dev / hdc

Ahora el dispositivo desmonta con éxito.

¿Por qué es importante la Desmontando

Si nos fijamos en el resultado del comando libre, que muestra estadísticas sobre el usode memoria, verá una estadística llamada "buffers". Los sistemas informáticos están

diseñados para ir tan rápido como sea posible. Uno de los impedimentos para lavelocidad del sistema es dispositivos lentos. Las impresoras son un buen ejemplo.Incluso la impresora más rápida es extremadamente lento para los estándaresinformáticos. Una computadora sería muy lento de hecho si tuviera que parar yesperar a que una impresora termine de imprimir una página. En los primeros días delas computadoras (antes de la multitarea), este era un problema real. Si usted estabatrabajando en un documento de hoja de cálculo o de texto, el equipo dejaría de estardisponible y cada vez que se imprime. El ordenador envía los datos a la impresoramás rápido que la impresora podría aceptarlo, pero era muy lento ya que lasimpresoras no imprimen muy rápido. Este problema fue resuelto por el advenimientode la memoria intermedia de la impresora, un dispositivo que contiene parte de la

memoria RAM que se sentaría entre el ordenador y la impresora. Con el búfer de laimpresora en su lugar, el equipo enviaría la salida de la impresora en el búfer y seríarápidamente ser almacenada en la memoria RAM rápida por lo que el equipo podríavolver a trabajar sin necesidad de esperar. Mientras tanto, el búfer de la impresorasería lentamente en cola los datos a la impresora de la memoria del tampón a lavelocidad a la que la impresora podría aceptarlo.

181

Page 213: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 213/571

Esta idea de la memoria intermedia se utiliza ampliamente en los ordenadores parahacerlos más rápido. No deje que la necesidad de leer de vez en cuando o escribirdatos desde o hacia dispositivos lentos obstaculizan la velocidad del sistema. Lossistemas operativos almacenar datos que se ha leído desde, y es que se escribe en losdispositivos de almacenamiento en la memoria para el mayor tiempo posible antes detener que interactuar con el dispositivo más lento. En un sistema Linux, por ejemplo,te darás cuenta de que el sistema parece llenar la memoria ya que se utiliza. Esto nosignifica que Linux está "utilizando" toda la memoria, significa que Linux se estáaprovechando de toda la memoria disponible para hacer la mayor cantidad deamortiguación, ya que puede.Esto permite el almacenamiento en búfer de escritura a los dispositivos dealmacenamiento a hacerse muy rápidamente, porque la escritura para el dispositivofísico está siendo diferida a un momento futuro. Mientras tanto, los datos destinadospara el dispositivo se acumulan en la memoria. De vez en cuando, el sistemaoperativo escribir estos datos en el dispositivo físico.Desmontaje de un dispositivo implica escribir todos los datos restantes en eldispositivo de modo que pueda extraerse de forma segura. Si el dispositivo se retirasin desmontarlo primero, existe la posibilidad de que no todos los datos destinadospara el dispositivo ha sido transferido. En algunos casos, estos datos pueden incluiractualizaciones de directorios vitales, lo que conducirá a la corrupción del sistema dearchivos, una de las peores cosas que pueden suceder en un equipo.

[Me @ linuxbox ~] $ ls / dev

15  - Soporte de almacenamiento

Determinación de nombres de dispositivosA veces es difícil determinar el nombre de un dispositivo. De vuelta en los viejos tiempos, nofue muy difícil. Un dispositivo era siempre en el mismo lugar y que no cambió. Sistemas detipo Unix como de esa manera. Antes, cuando Unix fue desarrollado, "el cambio de unaunidad de disco" implicó el uso de un montacargas para eliminar un dispositivo del tamañode la máquina de lavado de la sala de ordenadores. En los últimos años, la configuracióntípica de hardware de escritorio se ha vuelto muy dinámico y Linux ha evolucionado para sermás flexible que sus antecesores.

En los ejemplos anteriores nos aprovechamos de la capacidad del escritorio moderno paraLinux "automágicamente" montar el dispositivo y luego determinar el nombre después de loshechos. Pero lo que si estamos gestionando un servidor o algún otro entorno en el que esto noocurra? ¿Cómo podemos averiguarlo?

En primer lugar, echemos un vistazo a cómo los dispositivos de nombres del sistema. Silistamos el contenido del directorio / dev (donde viven todos los dispositivos), podemos ver

que hay un montón y un montón de dispositivos:

Los contenidos de este listado revelan algunos patrones de nombres de dispositivos. Aquíestán algunos:

182

Page 214: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 214/571

Page 215: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 215/571

Jul 23 10:07:53 kernel linuxbox: usandouhci_hcd y dirección de 02 de julio 23 delnúcleo 10:07:53 linuxbox: desde el 1 deelección

Jul 23 10:07:53 kernel linuxbox: Losdispositivos de almacenamientoJul 23 10:07:58 kernel linuxbox:

scsi3 configuración # 1 elegido:: usb 3-2:

nuevo usb dispositivo USB de velocidad

completa 3.2 emulación SCSI para

exploración scsi masivo USB: MENSAJE

resultado demasiado corto(5), utilizando 36Jul 23 10:07:58 kernel linuxbox: scsi 3: 0: 0: 0: Direct-Access Easy Disco 1.00

sectores de hardware (16 MB)23 de julio 10:07:59 linuxbox offJul 23 10:07:59 caché linuxbox:escribir a través de 23 de julio10:07:59 sectores de hardwarelinuxbox (16 MB) 23 de julio

10:07:59 linuxbox off23 de julio 10:07:59 cachélinuxbox: escribir a través de

disco extraíble 23de julio 10:07:59sg3 tipo 0

0 ANSIkernel: 

2 sd  0

0O O O

[Sdb]  31263 512-byte 

kernel: sd  3: 0: 0: 0:  [Sdb]  De protección contraescritura está 

kernel: sd  3: 0: 0: 0:  [Sdb]  Suponiendo unidad 

kernel: sd  3: 0: 0: 0:  [Sdb]  31263 512-byte 

kernel: sd  3: 0: 0: 0:  [Sdb]  De protección contraescritura está 

kernel: sd  3: 0: 0: 0:  [Sdb]  Suponiendo unidad 

kernel: kernel: 

sdb: sdb1 sd3: 0: 0: 0:  [Sdb]  Attached SCSI 

kernel: sd  00

O O O  Attached SCSI genérico 

Jul 23 10:07:59 kernel linuxbox: sdb: sdb123 de julio del kernel 10:07:59 linuxbox: sd 3: 0: 0: 0: [sdb] Attached SCSI discoextraíble

15 - Soporte de almacenamiento

Después de la pantalla hace una pausa de nuevo, pulse Ctrl-c para obtener la parte posteriordel sistema. Las partes interesantes de la salida son las repetidas referencias a "[sdb]", quecoincide con nuestra expectativa de un nombre de dispositivo de disco SCSI. Sabiendo esto,

dos líneas se vuelven particularmente esclarecedor:Esto nos dice el nombre de dispositivo es / dev / sdb para todo el dispositivo y / dev / sdb1para la primera partición en el dispositivo. Como hemos visto, el trabajo con Linux está llenode interesante trabajo de detective!

Consejo: Utilizando la técnica de tail -f / var / log / messages es una gran manera de verlo que el sistema está haciendo en tiempo casi real.

Con nuestro nombre del dispositivo en la mano, ahora podemos montar la unidad flash:

184

Page 216: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 216/571

Page 217: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 217/571

Page 218: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 218/571

 

Creación de NuevosSistemas de archivos

en aras de la demostración, nosotros lo cambiará para indicar una partición de Linux. Paraello, tenemos que averiguar primero qué ID se utiliza para identificar una partición de Linux.En el listado anterior, vemos que el ID de "b" se utiliza para especificar la partición existente.

Para ver una lista de los tipos de particiones disponibles, nos referimos de nuevo al menú delprograma. No podemos ver la siguiente opción:

l Lista conocido tipos de particiones

Si entramos "l" en el indicador, se muestra una larga lista de posibles tipos. Entre ellos vemos"b" para nuestro tipo de partición existente y "83" para Linux.

Volviendo al menú, vemos esta opción para cambiar el ID de la partición:

cambiar Identificación del sistema de unapartición

Entramos en "T" en el indicador de entrar en elnuevo ID:

Comando (m para ayuda): tPartición seleccionada 1Código hexadecimal (tipo L a la lista de códigos): 83Tipo de sistema cambió de partición 1-83 (Linux)

Esto completa de todos los cambios que tenemos que hacer. Hasta este punto, el dispositivoha sido tocado (todos los cambios han sido almacenados en la memoria, no en el dispositivofísico), así que vamos a escribir la tabla de particiones modificada para el dispositivo y lasalida. Para ello, entramos en "w" en el indicador:

Comando (m para ayuda): wLa tabla de partición ha sido alterado!

Llamando a ioctl () para volver a leer la tabla de particiones.

 ADVERTENCIA: Si ha creado o modificado las particiones DOS 6.x, consultela página de manual de fdisk para obtener información adicional.

Sincronización de discos.[Me @ linuxbox ~] $

Si hubiéramos decidido dejar el dispositivo sin cambios, podríamos haber entrado en "q" en elsímbolo,

187

Page 219: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 219/571

[Me @ linuxbox ~] $ sudo mkfs -t ext3 / dev / sdbl mke2fs 1.40.2 (12-jul-2007)Etiqueta del sistema de archivos =Tipo de SO: LinuxTamaño de bloque = 1024 (log = 0)Tamaño del fragmento = 1024 (log = 0)3904 inodos, 15608 bloques780 bloques (5.00%) reservados para el superusuario Primer bloque de datos = 1bloquea los máximos del sistema de archivos = 15990784 2 grupos de bloques8192 bloques por grupo, 8192 fragmentos por grupo1952 inodos por grupoLas copias de seguridad almacenadas en Superblock bloques:

8193

Escribir tablas de inodos: Creación de hecho revista (1024 bloques): hechoEscribiendo superbloques y la información contable del sistema de ficheros: hecho

Este sistema de archivos se comprobará de forma automática cada 34 montajes o 180días, lo que ocurra primero. Utilice tune2fs -c -i o para anular. [Me @ linuxbox ~] $

[Me @ linuxbox ~] $ sudo mkfs -t vfat / dev / sdbl  

15  - Soporte de almacenamiento que habría salido del programa sin tener que escribir loscambios. Podemos ignorar el mensaje de advertencia que suena ominosa.

La creación de un nuevo sistema de archivos Con mkfsCon nuestra edición de partición de hecho (de peso ligero a pesar de que podría haber sido) esel momento de crear un nuevo sistema de archivos en nuestra unidad flash. Para ello, vamos autilizar mkfs (abreviatura de "hacer que el sistema de archivos"), que puede crear sistemas de

archivos en una variedad de formatos. Para crear un sistema de archivos ext3 en eldispositivo, se utiliza la opción "-t" para especificar el "ext3" tipo de sistema, seguido por elnombre del dispositivo que contiene la partición que queremos formato:

El programa mostrará una gran cantidad de información cuando ext3 es el tipo de sistema dearchivos escogido. Para volver a formatear el dispositivo a su sistema de archivos FAT32

original, especifique "vfat" como el sistema de archivostype:

Este proceso de partición y el formato se puede utilizar en cualquier momento los dispositivosde almacenamiento adicionales se añaden al sistema. Mientras trabajamos con una unidadflash diminuto, el mismo proceso

188

Page 220: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 220/571

Page 221: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 221/571

 

15 - Soporte dealmacenamiento

unidades, que pueden gestionar los dispositivos, también. Preparación de un disquete enblanco para su uso es un proceso de dos pasos. En primer lugar, se realiza un formateo de bajonivel en el disquete, y luego crear un sistema de archivos. Para llevar a cabo el formateo,

utilizamos el programa fdformat especificando el nombre de la unidad de disquete(normalmente / dev / fd0):

[Me @ linuxbox ~] $ Sudo fdformat / dev / fd0 De doble cara,  80 pistas, 18 seg / pista. La capacidad total de 1.440 kB.  Formateo ..  . hecho Verificación de... 

hecho 

A continuación, se aplica un sistema de archivos FAT en el disquete con mkfs:

[Me @ linuxbox ~] $ sudo mkfs -t msdos / dev / fd0 

Nótese que usamos el tipo "msdos" sistema de archivos para obtener las tablas de asignaciónde archivo de estilo de más edad (y más pequeñas). Después se prepara un disquete, puedeser montado como otros dispositivos.

Mover los datos directamente a / desde dispositivos

Aunque solemos pensar en los datos en nuestros ordenadores como siendo organizado enarchivos, también es posible pensar en los datos en forma "cruda". Si nos fijamos en unaunidad de disco, por ejemplo, vemos que se compone de un gran número de "bloques" dedatos que el sistema operativo ve como directorios y archivos. Sin embargo, si pudiéramostratar a una unidad de disco simplemente como una gran colección de bloques de datos,podríamos realizar tareas útiles, como los dispositivos de clonación.

El programa dd realiza esta tarea. Se copia bloques de datos de un lugar a otro. Utiliza unasintaxis única (por razones históricas) y por lo general se utiliza de esta manera:

dd if = archivo_entrada de output_file = [bs = block_size [count =bloques]] 

Vamos a decir que tuvimos dos unidades de memoria flash USB del mismo tamaño yqueríamos copiar exactamente la primera unidad a la segunda. Si nos apegamos ambasunidades a la computadora y son como - firmado a los dispositivos / dev / sdb y / dev / sdc,

respectivamente, podríamos copiar todo en la primera unidad de la segunda unidad con losiguiente:

dd if = / dev / sdb of = / dev /sdc

190

Page 222: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 222/571

dd if = / dev / sdb de = flash_drive.img

dd if = / dev / cdrom of = ubuntu.iso

Mover los datos directamente a / desde dispositivos

Alternativamente, si sólo el primer dispositivo se conecta al equipo, podemos copiar sucontenido a un archivo normal para su posterior restauración o copia:

¡Advertencia! El comando dd es muy potente. A pesar de su nombre deriva de"definición de datos", que a veces se llama "destruir el disco" ya que los usuarios amenudo mistype ya sea si los o de las especificaciones. Siempre vuelva a comprobarsus especificaciones de entrada y salida antes de pulsar ENTER!

Creación de CD-ROM Imágenes

Escribir un CD-ROM grabable (ya sea un CD-R o CD-RW) consta de dos pasos; en primerlugar, la construcción de un archivo de imagen ISO que es la imagen exacta del sistema dearchivos del CD-ROM y en segundo lugar, escribir el archivo de imagen en los medios decomunicación de CD-ROM.

Creación de una imagen de copia de un CD-ROMSi queremos hacer una imagen ISO de un CD-ROM existente, podemos utilizar dd para leertodos los bloques de datos fuera de la unidad de CD-ROM y copiarlos en un archivo local.Decir que tuvimos un CD de Ubuntu y queríamos hacer un archivo ISO que podríamosutilizar más adelante para hacer más copias. Después de insertar el CD y la determinación desu nombre de dispositivo (asumiremos / dev / cdrom), podemos hacer que el archivo iso de

este modo:

Esta técnica funciona para DVDs de datos, así, pero no va a funcionar para los CD de audio, yaque no utilizan un sistema de archivos para su almacenamiento. Para los CDs de audio, mirael comando cdrdao.

Creación de una imagen de una colección de archivosPara crear un archivo de imagen ISO que contiene el contenido de un directorio, se utiliza elprograma genisoimage. Para ello, primero creamos un directorio que contiene todos los

archivos que deseamos incluir en la imagen, y luego ejecutar el comando genisoimage paracrear el archivo de imagen. Por ejemplo, si hubiéramos creado un directorio llamado ~ /CD-ROM en archivos y lo llenó con los archivos de nuestro CD-ROM, se podría crear unarchivo de imagen llamado rom.iso CD con el siguiente comando:

191

Page 223: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 223/571

cd-rom.iso genisoimage -o -R -J ~ / CD-ROM enarchivos

Un Programa por cualquier otro nombre ...

Si nos fijamos en los tutoriales en línea para la creación y grabación de medios ópticoscomo CD-ROM y DVD, se encontrará con frecuencia dos programas llamados mkisofsy cdrecord. Estos programas eran parte de un paquete popular llamado"Herramientas CDR" escritos por Jörg Schilling. En el verano de 2006, el Sr. Schillinghizo un cambio de licencia a una porción del paquete cdrtools que, en la opinión demuchos en la comunidad Linux, crea una incompatibilidad con la licencia GPL deGNU. Como resultado, se inició un tenedor de la cdrtools proy ect que ahora incluyelos programas de sustitución de cdrecord y mkisofs llamado wodim y genisoimage,

respectivamente.

mkdir / mnt / iso_imagemount -t iso9660 -o loop image.iso / mnt / iso_image

15 - Soporte de almacenamiento

La opción "-R", añade metadatos para las extensiones Rock Ridge, lo que permite el uso denombres de archivo largos y los permisos de archivos de estilo POSIX. Del mismo modo, laopción "-J" permite a las extensiones Joliet, que permiten nombres de archivo largos paraWindows.

Escribir CD-ROM Imágenes

Después tenemos un archivo de imagen, podemos grabarlo en nuestro medio óptico. La

mayoría de los comandos que discutiremos a continuación se puede aplicar tanto a los mediosde comunicación de CD-ROM y DVD grabables.

Montaje de una imagen ISO directamenteHay un truco que podemos utilizar para montar una imagen ISO, mientras que todavía está ennuestro disco duro y la tratamos como si ya estuviera en medios ópticos. Mediante la adición

de la opción "-o loop" para montar (junto con el "-t iso9660" Tipo de sistema de archivos es

necesario), se puede montar el archivo de imagen como si se tratara de un dispositivo yconéctelo al árbol del sistema de archivos:

En el ejemplo anterior, hemos creado un punto de montaje llamado / mnt / iso_image y luegomontamos la image.iso archivo de imagen en ese punto de montaje. Después se monta laimagen, se puede tratar como si se tratara de un verdadero CD-ROM o DVD. Recuerde quedebe desmontar la imagen cuando ya no es necesaria.

192

Page 224: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 224/571

Page 225: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 225/571

 

15 - Soporte dealmacenamiento

tienda de campaña del archivo de destino. Si el contenido del cambio de archivos, incluso porun bit, la suma de comprobación resultante será muy diferente. El método más común de lageneración de suma de control utiliza el programa md5sum. Cuando utilice md5sum,

produce un número hexadecimal único:

image.iso md5sumImage.iso 34e354760f9bb7fbf85c96f6a3f94ece

Después de descargar una imagen, se debe ejecutar md5sum en contra de ella y comparar losresultados con el valor md5sum proporcionada por el editor.

Además de comprobar la integridad de un archivo descargado, podemos usar md5sum paraverificar medios ópticos recién escritos. Para ello, primero calculamos la suma decomprobación del archivo de imagen y luego calcular una suma de comprobación de los

medios de comunicación. El truco para la verificación de los medios de comunicación es la delimitar el cálculo a sólo la parte de los medios de comunicación óptica que contiene la imagen.Hacemos esto mediante la determinación de la cantidad de 2.048 bloques de byte contiene laimagen (medios ópticos siempre se escribe en 2048 bloques de bytes) y la lectura de esacantidad de bloques de los medios de comunicación. En algunos tipos de medios decomunicación, esto no es necesario. Un CD-R escrita en disc-at-once modo se puedecomprobar de esta manera:

md5sum / dev / cdrom34e354760f9bb7fbf85c96f6a3f94ece / dev / cdrom

Muchos tipos de medios de comunicación, tales como DVDs, requieren un cálculo preciso delnúmero de bloques. En el siguiente ejemplo, comprobamos la integridad del archivo deimagen de DVD-image.iso y el disco en el lector de DVD / dev / dvd. ¿Puedes averiguarcómo funciona esto?

md5sum dvd-image.iso; dd if = / dev / dvd bs = 2048 count = $ (($ (dvd-image.isostat -c "% s") / 2048)) | md5sum

194

Page 226: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 226/571

Page 227: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 227/571

Page 228: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 228/571

[Me @ linuxbox ~] $ de ping linuxcommand.org 

[Me @ linuxbox ~] $ de ping linuxcommand.org PING linuxcommand.org (66.35.250.210) 56 (84) bytes de datos.64 bytes de vhost.sourceforge.net (66.35.250.210): icmp_seq = 1 TTL = 43 tiempo= 107 ms64 bytes de vhost.sourceforge.net (66.35.250.210): icmp_seq = 2 TTL = 43 tiempo= 108 ms64 bytes de vhost.sourceforge.net (66.35.250.210): icmp_seq = 3 ttl = 43 tiempo =106 ms64 bytes de vhost.sourceforge.net (66.35.250.210): icmp_seq = 4 TTL = 43 tiempo

= 106 ms64 bytes de vhost.sourceforge.net (66.35.250.210): icmp_seq = 5 TTL = 43 tiempo= 105 ms64 bytes de vhost.sourceforge.net (66.35.250.210): icmp_seq = 6

16  - Redes

y algunos pueden requerir privilegios de superusuario para ejecutar.

El examen y el seguimiento de una RedIncluso si usted no es el administrador del sistema, a menudo es útil para examinar elrendimiento y funcionamiento de una red.

de pingEl comando más básico de la red es de ping. El comando ping envía un paquete de redespecial llamada ECHO_REQUEST IMCP a un host especificado. La mayoría de losdispositivos de red que reciben este paquete responderán a la misma, lo que permite laconexión de red para ser verificada.

Nota: Es posible configurar la mayoría de los dispositivos de red (incluyendo los hostsde Linux) hacer caso omiso de estos paquetes. Esto se hace generalmente por razonesde seguridad, para ocultar parcialmente una serie de un atacante potencial. También es

común que los servidores de seguridad para ser configurados para bloquear el tráficode IMCP.

Por ejemplo, para ver si podemos llegar a linuxcommand.org (uno de nuestros sitiosfavoritos;-), podemos utilizar el uso de ping como esto:

Una vez iniciado, mesa de ping continúa enviando paquetes a un intervalo especificado (por

defecto es de un segundo) hasta que se interrumpe:

196

Page 229: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 229/571

ttl = 43 tiempo = 107 ms

- estadísticas de ping linuxcommand.org -6 paquetes transmitidos, 6 recibieron, 0% de pérdida de paquetes, tiempo6010ms rtt min / avg / max / MDEV = 105.647 / 107.052 / 108.118 / 0.824 ms

[Me @ linuxbox ~] $ traceroute slashdot.org 

traceroute para slashdot.org (216.34.181.45), 30 saltos max, paquetes de 40 bytes1 ipcop.localdomain (192.168.1.1) 1.066 ms 1.366 ms 1.720 ms2 * * *3 ge-4-13-ur01.rockville.md.bad.comcast.net (68.87.130.9) 14.622

ms 14.885 ms 15.169 ms4 po-30-ur02.rockville.md.bad.comcast.net (68.87.129.154) 17.634

ms 17.626 ms 17.899 ms

5 po-60-ur03.rockville.md.bad.comcast.net (68.87.129.158) 15.992ms 15.983 ms 16.256 ms6 po-30-ar01.howardcounty.md.bad.comcast.net (68.87.136.5) 22.835

ms 14.233 ms 14.405 ms7 po-10-ar02.whitemarsh.md.bad.comcast.net (68.87.129.34) 16.154

ms 13.600 ms 18.867 ms8 te-0-3-0-1-cr01.philadelphia.pa.ibone.comcast.net (68.86.90.77) 21,951 ms 21.073

ms 21.557 ms9 pos-0-8-0-0-cr01.newyork.ny.ibone.comcast.net (68.86.85.10) 22,917 ms 21.884

ms 22.126 ms10 204.70.144.1 (204.70.144.1) 43.110 ms 21.248 ms 21.264 ms11 cr1-pos-0-7-3-1.newyork.savvis.net (204.70.195.93) 21.857 mscr2-pos-0-0-3-1.newyork.savvis.net (204.70.204.238) 19.556 ms cr1-

El examen y el seguimiento de una Red

Después de que se interrumpe (en este caso después del sexto paquete) presionando Ctrl-c, lasestadísticas de rendimiento de ping impresiones. Una red adecuada de realizar exhibirá ceropor ciento de pérdida de paquetes. Un "ping" con éxito indicará que los elementos de la red(las tarjetas de interfaz, el cableado, enrutamiento y gateways) son en general buenascondiciones de funcionamiento.

tracerouteEl programa traceroute (algunos sistemas utilizan el programa tracepath similar en lugar)muestra una lista de todo el tráfico de la red "saltos" tarda en llegar desde el sistema local a un

host especificado. Por ejemplo, para ver la ruta tomada para llegar slashdot.org, que íbamos ahacer esto:

La salida es la siguiente:

197

Page 230: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 230/571

Page 231: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 231/571

Page 232: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 232/571

Page 233: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 233/571

Page 234: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 234/571

 

Al escribir "ayuda" en el "ftp>" del sistema mostrará una lista de los comandos admitidos. Eluso de FTP en un servidor en el que se han concedido los permisos necesarios, es posiblellevar a cabo

201

Transporte de archivos en una redComando Significadoftp servidor de archivos Invoque el programa ftp y haga que la

conexión con el servidor de archivos delservidor FTP.

anónimo Nombre de inicio de sesión. Después de laindicación de inicio de sesión, apareceráuna solicitud de contraseña. Algunosservidores aceptarán una contraseña enblanco, otros requerirán una contraseñaen la forma de una dirección de correoelectrónico. En ese caso, intente algo como" "pub cd / cd_images / Ubuntu-8.04Cambie al directorio en el sistema remotoque contiene el archivo deseado. Tenga encuenta que en los servidores FTP más

anónimos, los archivos para descargapública se encuentran en algún lugar bajoel directorio pub.

ls

Anote el directorio en el sistema remoto.LCD de escritorio

Cambie el directorio en el sistema local de- / escritorio. En el ejemplo, el programade ftp se invoca cuando el directorio detrabajo era ~. Este comando cambia el

directorio de trabajo a - / escritorio.get ubuntu-8.04-tablero del escritorio i386.iso Dígale al sistema remoto para transferir el

archivo i386.iso-ubuntu-8.04 tablero delescritorio para el sistema local. Desde eldirectorio de trabajo en el sistema local secambió a - / escritorio, el archivo sedescargará allí.

adiós Cierre la sesión en el servidor remoto yponer fin a la sesión del programa ftp. Loscomandos de dejar de fumar y de salida

Page 235: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 235/571

[Me @ linuxbox ~] $ wget http://linuxcommand.org/index.php --11: 02: 51-- http://linuxcommand.org/index.php  => 'Index.php'Resolver linuxcommand.org ... 66.35.250.210Conexión a linuxcommand.org | 66.35.250.210 |: 80 ... conectado.Petición HTTP enviada, esperando respuesta ... 200 OK Longitud: sinespecificar [text / html]

[<=> ] 3120 --.-- K / s

11:02:51 (161.75 MB / s) - 'index.php' salvado [3120]

16 - Redes _______________________________________________________________________

muchas de las tareas de gestión de archivos ordinarios. Es torpe, pero funciona.

lftp - A Better ftp

FTP no es la única línea de comandos del cliente FTP. De hecho, hay muchos. Uno de losmejores (y más populares) los está lftp por Alexander Lukyanov. Funciona al igual que elprograma de ftp tradicional, pero tiene muchas características de conveniencia adicionales,

incluyendo soporte de protocolo múltiple (incluyendo HTTP), re-intentar automática endescargas fallidas, procesos en segundo plano, la implementación del tabulador de nombresde ruta, y muchos más.

wgetOtro programa de línea de comandos populares para la descarga de archivos es wget. Es útilpara la descarga de contenido de ambas web y sitios FTP. Archivos individuales, múltiplesarchivos, e incluso sitios enteros se pueden descargar. Para descargar la primera página delinuxcommand.org podríamos hacer esto:

Muchas opciones del programa permiten wget para descargar de forma recursiva, la descargade archivos en segundo plano (lo que le permite cerrar la sesión pero continúa la descarga), ycompletar la descarga de un archivo descargado parcialmente. Estas características están biendocumentados en su página hombre medio mejor que la prevista.

Comunicación segura con hosts remotos

Durante muchos años, los sistemas operativos tipo Unix han tenido la capacidad de seradministrado de forma remota a través de una red. En los primeros días, antes de la adopcióngeneral de Internet, había un par de programas populares que se utilizan para conectarse a

máquinas remotas. Estos fueron los programas rlogin y telnet. Estos programas, sin embargo,sufren el mismo error fatal que el programa ftp hace; que transmiten todas suscomunicaciones (incluyendo nombres de usuario y contraseñas) en texto plano. Esto los hacetotalmente inadecuado para su uso en el

202

Page 236: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 236/571

[me @ linuxbox ~] $ ssh remotas-sysLa autenticidad de acogida 'remotas-sys (192.168.1.4)' no se puedeestablecer.RSA huella digital es clave41: ed: 7a: df: 23: 19: BF: 3c: a5: 17: BC: 61: b3: 7f: D9: bb.¿Seguro que quieres continuar la conexión (sí / no)?

Comunicación segura con hosts remotos

Era de Internet.

ssh

Para abordar este problema, un nuevo protocolo llamado SSH (Secure Shell) fue desarrollado.SSH resuelve los dos problemas básicos de la comunicación segura con un host remoto. Enprimer lugar, autentica que la máquina remota es que se dice que es (evitando así llamado"hombre en el medio" ataques), y en segundo lugar, que encripta todas las comunicacionesentre los anfitriones locales y remotos.

SSH consta de dos partes. Un servidor SSH se ejecuta en el host remoto, la escucha deconexiones entrantes en el puerto 22, mientras que un cliente SSH se utiliza en el sistema localpara comunicarse con el servidor remoto.

La mayoría de las distribuciones de Linux enviar una implementación de SSH llamadaOpenSSH desde el proyecto OpenBSD. Algunas distribuciones incluyen tanto el cliente comolos paquetes de servidor por defecto (por ejemplo, Red Hat), mientras que otros (como

Ubuntu) sólo suministran el cliente. Para habilitar un sistema para recibir las conexionesremotas, debe tener el paquete penSSH-servidor S instalado, configurado y funcionando, y (siel sistema es o bien corriendo o está detrás de un servidor de seguridad) que debe permitir lasconexiones de red entrantes en el puerto TCP 22.

Punta : Si usted no tiene un sistema remoto para conectarse a pero quieres probarestos ejemplos, asegúrese de que el paquete OpenSSH-servidor está instalado en el

sistema y utilizar localhost como el nombre de la máquina remota. De esta forma, lamáquina creará conexiones de red con sí mismo.

El programa cliente SSH utilizado para conectarse a servidores SSH remotos se llama, muyapropiadamente, ssh. Para conectarse a un host remoto denominado remoto-sys, usaríamos elprograma cliente de ssh de este modo:

La primera vez que la conexión se intenta, se muestra un mensaje que indica que laautenticidad del host remoto no se puede establecer. Esto se debe a que el programa clientenunca ha visto este host remoto antes. Para aceptar las credenciales del host remoto, escriba"sí" cuando se le solicite. Una vez establecida la conexión, el usuario se le solicita su / sucontraseña:

203

Page 237: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 237/571

 

16 - Redes

 Advertencia: Permanentemente añadido "a distancia-sys, 192.168.1.4 '(RSA) a la lista dehosts conocidos. me @ contraseña del remote-sys:

Después de introducir la contraseña correctamente, recibimos el intérprete de comandos delsistema remoto:

ltima entrada: sábado 30 de agosto 200813:00:48 [me @ remotas-sys ~] $

La sesión de shell remota continúa hasta que el usuario introduce el comando exit en elindicador de shell remoto, cerrando de este modo la conexión remota. En este punto, la sesiónde shell locales se reanuda y el intérprete de comandos locales reaparece.

También es posible conectarse a sistemas remotos usando un nombre de usuario diferente.Por ejemplo, si el usuario local "me" había una cuenta llamada "bob" en un sistema remoto, elusuario podía iniciar sesión en el bob cuenta en el sistema remoto de la siguiente manera:

[Me @ linuxbox ~] $ ssh bob @ remotas-sys bob @ contraseña del remote-sys:Última entrada: sábado 30 de agosto 200813:03:21 [bob @ remotas-sys ~] $

Como se dijo antes, ssh verifica la autenticidad del host remoto. Si el host remoto no seautentica correctamente, aparecerá el siguiente mensaje:

[me @ linuxbox ~] ssh remotas-sys@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ ADVERTENCIA: IDENTIFICACIÓN host remoto ha cambiado! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ES POSIBLE QUE ALGUIEN ESTÁ HACIENDO ALGO DESAGRADABLE!

 Alguien podría estar escuchando a escondidas en usted en este momento(man-in-the-middle ataque)!

ambién es posible que la clave de host RSA sólo se ha cambiado.La huella digital de la clave RSA enviado por el host remoto es 41: ed: 7a: df: 23: 19: BF:3c: a5: 17: BC: 61: b3: 7f: D9: bb.Por favor, póngase en contacto con el administrador del sistema.

 Añadir clave de host correcta en /home/me/.ssh/known_hosts para deshacerse de estemensaje.Clave infractor en /home/me/.ssh/known_hosts:1Clave de host RSA para remotos-sys ha cambiado y que ha requerido estricta

204

Page 238: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 238/571

Page 239: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 239/571

 

16 - Redes

[me @ linuxbox ~] $ ssh 'ls *' Remote-sys> ListaDir.txt me @ contraseña de twin4:[Me @ linuxbox ~] $

Observe el uso de las comillas simples en el comando anterior. Esto se hace porque noqueremos que el nombre de ruta de expansión realizado en el equipo local; más bien,queremos que se lleva a cabo en el sistema remoto. Del mismo modo, si hubiéramos querido lasalida redirigida a un archivo en la máquina remota, podríamos haber colocado el operadorde redirección y el nombre del archivo dentro de las comillas simples:

[Me @ linuxbox ~] $ ssh remotas-SYS 'ls *> ListaDir.txt' 

Con SSH Tunneling

Parte de lo que sucede cuando se establece una conexión con un servidor remoto através de SSH es que se crea un túnel encriptado entre los sistemas locales y remotos.Normalmente, este túnel se utiliza para permitir comandos escritos en el sistema localpara ser transmitidos de forma segura al sistema remoto, y por los resultados quedeben transmitirse con seguridad de vuelta. Además de esta función básica, elprotocolo SSH permite que la mayoría de los tipos de tráfico de red que se enviarán através del túnel encriptado, creando una especie de VPN (red privada virtual) entrelos sistemas locales y remotos.

Tal vez el uso más común de esta función es permitir el tráfico del sistema de ventanasX a ser transmitida. En un sistema que ejecuta un servidor X (es decir, una máquinaque muestra una interfaz gráfica de usuario), es posible poner en marcha y ejecutar unprograma X cliente (una aplicación gráfica) en un sistema remoto y tener su pantallaaparece en el sistema local. Es fácil de hacer; aquí está un ejemplo: Digamos queestamos sentados en un sistema Linux llamada linuxbox que se está ejecutando unservidor X, y queremos ejecutar el programa xload en un sistema remoto denominadoremoto-sys y ver la salida gráfica del programa en nuestro sistema local. Podríamoshacer esto:[ M e @ l i n u x b o x ~ ] $ s s h - X m er e m o t a s - s y s @ c o n t r a s e ñ a d e

r e m o t a s - s y s :Ú l t i m a e n t r a d a : L u n e s 0 8 d e s e p t i e m br e2 0 0 8 1 3 : 2 3 : 1 1 [ m e @ r e m o t a s - s y s ~ ] $ x l o a dDespués de la orden xload se ejecuta en el sistema remoto, aparece la ventana en elsistema local. En algunos sistemas, es posible que tenga que utilizar la opción "-Y" enlugar de la opción "-X" para hacer esto.

206

Page 240: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 240/571

Page 241: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 241/571

Un cliente SSH para Windows?

Digamos que usted está sentado en una máquina Windows, pero es necesario iniciarsesión en el servidor de Linux y conseguir un poco de verdadero trabajo hecho; quéhaces? Obtener un programa cliente de SSH para su caja de Windows, por supuesto!Hay un número de estos. El más popular es probablemente PuTTY por Simon Tathamy su equipo. El programa PuTTY muestra una ventana de terminal y permitir que unusuario de Windows para abrir un SSH (o telnet) sesión en un host remoto. El

programa también proporciona análogos para los programas de SCP y SFTP.PuTTY está disponible en  http://www.chiark.greenend.org.uk/~sgtatham/putty/ 

16 - Redes

Consejo: El protocolo SFTP con el apoyo de muchos de los administradores dearchivos gráficos que se encuentran en las distribuciones de Linux. Utilizandocualquiera de Nautilus (GNOME) o Konqueror (KDE), podemos entrar en un URI quecomienza con sftp: // en la barra de direcciones y operar en los archivos almacenadosen un sistema remoto que ejecuta un servidor SSH.

Resumiendo

En este capítulo, hemos estudiado el campo de las herramientas que se encuentran en lamayoría de los sistemas Linux en red. Desde Linux es tan ampliamente utilizado en servidoresy equipos de red, hay muchos más que se puede añadir mediante la instalación de softwareadicional. Pero incluso con el conjunto básico de herramientas, es posible realizar muchastareas relacionados con la red de utilidad.

Lectura adicional

•  Para un amplio (aunque anticuado) vistazo a la administración de redes, el Proyecto

de Documentación de Linux proporciona el Administrador de Linux Red Guía S:http://tldp.org/LDP/nag2/index.html  

•  Wikipedia contiene muchos buenos artículos de redes. Éstos son algunos de losconceptos básicos:http://en.wikipedia.org/wiki/Internet dirección de protocolo http://en.wikipedia.org/wiki/Host nombre Resource Identifierhttp://en.wikipedia.org/wiki/Uniform  

208

Page 242: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 242/571

[Me @ linuxbox ~] localizo $ bin / zip

17  - Búsqueda dearchivos

17  - Búsqueda de arch ivos

Como hemos vagado alrededor de nuestro sistema Linux, una cosa ha quedado muy claro: Unsistema típico de Linux tiene una gran cantidad de archivos! Esto plantea la pregunta, "¿Cómoencontramos cosas?" Ya sabemos que el sistema de archivos de Linux está bien organizado deacuerdo a las convenciones que se han transmitido de generación en generación de lossistemas de tipo Unix a la siguiente, pero el gran número de archivos puede presentar unproblema de enormes proporciones.

En este capítulo, vamos a ver dos herramientas que se utilizan para buscar archivos en unsistema. Estas herramientas son:

•  l o c a l i z a r - Buscar archivos por nombre

•  encontrar - Búsqueda de archivos en una jerarquía de directorios

También vamos a mirar a un comando que se utiliza a menudo con comandos de archivos debúsqueda para procesar la lista resultante de archivos:

•  xargs - Elaborar y ejecutar líneas de comandos desde la entrada estándar

Además, vamos a introducir un par de comandos para que nos ayuden en nuestras

exploraciones:•  t o c a r - tiempos de modificación del archivo

•  s t a t - Visualización de archivos o el sistema de archivo de estado

Locate - Buscar archivos La Manera Más Fácil

El programa de localizar realiza una búsqueda de base de datos de rutas de acceso rápido, yluego da salida a todo nombre que coincide con una subcadena dada. Digamos, por ejemplo,queremos encontrar todos los programas con nombres que comienzan con "cremallera".Desde que estamos buscando programas, podemos suponer que el nombre del directorio quecontiene los programas terminaría con "bin /". Por lo tanto, podríamos tratar de usar localizar

esta manera de encontrar nuestros archivos:

localizar buscará su base de datos de rutas de acceso y salida de cualquier que contiene lacadena

209

Page 243: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 243/571

/ Usr / bin / zip/ Usr / bin / zipcloak/ Usr / bin / zipgrep/ Usr / bin / zipinfo/ Usr / bin / zipnote/ Usr / bin / zipsplit

[Me @ linuxbox ~] localizo $ zip | grep bin / Bin / bunzip2/ Bin / bzip2/ Bin / bzip2recover/ Bin / gunzip/ Bin / gzip/ Usr / bin / funzip/ Usr / bin / gpg-zip/ Usr / bin / preunzip/ Usr / bin / prezip/ Usr / bin / prezip-bin/ Usr / bin / unzip/ Usr / bin / UnZipSFX

/ Usr / bin / zip/ Usr / bin / zipcloak/ Usr / bin / zipgrep/ Usr / bin / zipinfo/ Usr / bin / zipnote/ Usr / bin / zipsplit

17  - Búsqueda de archivos "Bin / zip":

Si el requisito de búsqueda no es tan simple, localizar se puede combinar con otrasherramientas como grep para diseñar búsquedas más interesantes:

El programa de localizar ha sido de alrededor de un número de años, y hay varias versionesdiferentes de uso común. Los dos más comunes que se encuentran en las distribucionesmodernas de Linux son slocate y mlocate, aunque por lo general se accede por un enlacesimbólico llamado de localizar. Las diferentes versiones de localizar conjuntos tienen opcionesque se superponen. Algunas versiones incluyen concordancia en expresiones regulares (quevamos a cubrir en un próximo capítulo) y el apoyo de comodín. Compruebe la página demanual para localizar a determinar que se ha instalado la versión de localizar.

210

Page 244: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 244/571

 

Locate - Buscar archivos LaManera Más Fácil

¿De Dónde Viene La Base de Datos localizar viene?

Usted puede notar que, en algunas distribuciones, localizar falla a trabajar justodespués de que se instala el sistema, pero si intenta de nuevo al día siguiente, quetrabaja muy bien. ¿Qué pasa? La base de datos localizar es creado por otro programallamado updatedb. Por lo general, se ejecuta periódicamente como un trabajo cron; esdecir, una tarea realizada a intervalos regulares por el demonio cron. La mayoría delos sistemas equipados con ubican el correr updatedb una vez al día. Desde la base dedatos no se actualiza continuamente, te darás cuenta de que los archivos muyrecientes no se muestran cuando se utiliza localizar. Para superar esto, es posibleejecutar el programa updatedb manualmente al convertirse en el superusuario yejecutar updatedb en el indicador.

Find - Buscar archivos The Hard WayMientras que el programa de localizar puede encontrar un archivo basado únicamente en sunombre, el programa busca encontrar un directorio dado (y sus subdirectorios) para losarchivos basados en una variedad de atributos. Vamos a pasar mucho tiempo con hallazgo, yaque tiene un montón de características interesantes que veremos una y otra vez cuandoempezamos a cubrir los conceptos de programación en los capítulos posteriores.

En su uso más simple, encontramos es dado uno o más nombres de directorios para buscar.Por ejemplo, para producir una lista de nuestro directorio home:

[Me @ linuxbox ~] encontrar $~

En la mayoría de las cuentas de usuario activas, esto producirá una lista grande. Dado que lalista se envía a la salida estándar, que puede canalizar la lista en otros programas. Usemos wcpara contar el número de archivos:

[Me @ linuxbox ~] encontrar $ ~ | wc -l47068

Wow, que hemos estado muy ocupados! La belleza de hallazgo es que puede ser utilizadopara identificar archivos que cumplen con criterios específicos. Lo hace a través de la (un pocoextraño) la aplicación de opciones, pruebas y acciones. Pronto nos ocuparemos de las pruebasen primer lugar.

211

Page 245: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 245/571

Page 246: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 246/571

Find - Buscar archivos The Hard Way

la cadena a ser menor que el número especificado. El uso de ningún signo significa, "coincidecon el valor exactamente." La carta de salida "M" indica que la unidad de medida esmegabytes. Los siguientes caracteres se pueden usar para especificar las unidades:

encontrar soporta un gran número de diferentes pruebas. A continuación se muestra unresumen de los más comunes. Tenga en cuenta que en los casos donde se requiere unargumento numérico, el mismo "+" y "-" notación comentado anteriormente se puede aplicar:

Tabla 17-2: encontrar unidades Tamaño

Personaje Unidadb Bloques de 512 bytes. Este es el valor por defecto si no se especifica

nin una unidad.

c Bytes

w Palabras de 2 bytes

k Kilobytes (unidades de 1024 bytes)

M Megabytes (unidades de 1048576 bytes)G Gigabytes (unidades de 1,073,741,824 bytes)

Tabla 17-3: encontrar pruebas

Prueba Descripción- c m i n n

Archivos de partido o directorios cuyo contenido o atributosfueron modificada por última vez hace exactamente n minutos.Para especificar hace menos de n minutos, utilizar y -n paraespecificar hace más de n minutos, uso + n.

a r c h i v o - c n e we r Coinciden con los archivos o directorios cuyo contenido o

atributos eran modificada por última vez más recientemente- c t i m e n

Archivos de partido o directorios cuyo contenido o atributoseran modificada por última vez n * hace 24 horas.

- em p t y Coinciden con los archivos y directorios vacíos.- G r u p o n o m b r e

Partido archivo o directorios pertenecientes al grupo. grupo puedeser expresada ya sea como un nombre de grupo o como un ID degrupo numérico.

- i n a m e pa t r ó n Al igual que el - prueba de nombre pero mayúsculas yminúsculas.

- i n u m n Coinciden con los archivos con el número de inodo n. Esto esútil para encontrar todos los enlaces duros a un inodo

213

Page 247: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 247/571

Page 248: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 248/571

[Me @ linuxbox ~] encontrar $ ~ \ (-type f -no -perm 0600 \) -o \ (-type d -no -perm 0700 \) 

 ____________________________________________________ Find - Buscar archivos The Hard

Way

para crear relaciones lógicas más complejas. Para expresar la prueba mencionada, podríamoshacer esto:

¡Caramba! Eso seguro que se ve extraño. ¿Qué es todo esto? En realidad, los operadores no sontan complicado una vez que llegue a conocerlos. Aquí está la lista:

Con esta lista de operadores en la mano, vamos a deconstruir nuestro comando find. Cuandose ve desde el nivel superior, vemos que nuestras pruebas están dispuestos como dos gruposseparados por un operador -o:

(expresión 1) -o (expresión 2)

Esto tiene sentido, ya que estamos en busca de archivos con un determinado conjunto depermisos y de directorios con un conjunto diferente. Si estamos buscando a los archivos ydirectorios, ¿por qué hacer

215

Tabla 17-4: encontrar operadores lógicos 

Operador Descripción- y Coincide si las pruebas en ambos lados del operador son

verdaderas. Puede ser acortado a - a. Tenga en cuenta quecuando ningún operador está presente, -y se implicó de forma

-oPartido si una prueba a cada lado del operador es verdadero.Puede ser acortado a -o.

- n oCoincide si la prueba siguiente el operador es falso. Se puedeabreviar con un signo de exclamación (!).

( ) Grupos pruebas y operadores juntos para formar expresionesmás grandes. Esto se utiliza para controlar la precedencia de lasevaluaciones lógicas. Por defecto, encontrar evalúa de izquierdaa derecha. A menudo es necesario para anular el orden deevaluación predeterminado para obtener el resultado deseado.

Incluso si no es necesario, a veces es útil incluir los caracteres deagrupamiento para mejorar la legibilidad de la orden. Tenga encuenta que dado que los personajes paréntesis tienen unsignificado especial para el shell, deben ser citados cuando seutiliza en la línea de comandos para que puedan ser pasadoscomo argumentos a encontrar. Por lo general, el carácter de

Page 249: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 249/571

Page 250: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 250/571

encontrar ~

encontrar ~

-print

Find - Buscar archivos The Hard Way

falsa, por lo que no hay ningún punto en la realización de expr2. Del mismo modo, si tenemosla expresión expri -o expr2 y el resultado de expri es cierto, no hay ningún punto en expr2realizar, como ya sabemos que la expresión -o expri expr2 es cierto.

Aceptar, por lo que ayuda a que vaya más rápido. ¿Por qué es esto importante? Es importanteporque podemos confiar en este comportamiento para controlar cómo se llevan a caboacciones, como pronto veremos.

 Acciones predefinidasVamos a trabajar un poco! Tener una lista de los resultados de nuestro comando find es útil,pero lo que realmente queremos hacer es actuar sobre los elementos de la lista.Afortunadamente, hallazgo permite acciones a realizar sobre la base de los resultados debúsqueda. Hay una serie de acciones predefinidas y varias formas de aplicar las accionesdefinidas por el usuario. Primero echemos un vistazo a algunas de las acciones predefinidas:

Al igual que con las pruebas, hay muchas más acciones. Vea la página man hallazgo para los

detalles completos. En nuestro primer ejemplo, hemos hecho esto:

que produjo una lista de todos los archivos y subdirectorios contenidos dentro de nuestro

directorio personal. Produjo una lista porque la acción -print está implícito si no se especificaninguna otra acción. Por lo tanto nuestro comando también podría expresarse como:

Podemos utilizar find para eliminar los archivos que cumplen con ciertos criterios. Porejemplo, para eliminar los archivos que

217

Tabla 17-6: find acciones predefinidas

Acción Descripción

- d e l e t e Elimine el archivo actualmente a juego.-ls

Lleve a cabo el equivalente de ls -dils en el archivocorrespondiente. La salida se envía a la salida estándar.

- p r i n tSalida de la ruta de acceso completa del archivocorrespondiente a la salida estándar. Esta es la acción pordefecto si no se especifica ninguna otra acción.

- Q U I T Salga de una vez un partido se ha hecho.

Page 251: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 251/571

encontrar ~ -type f -name '* .BAK'-delete

encontrar ~ -type f -name '* .BAK'-print

17 - Búsqueda de archivos tener la extensión ".bak" (que a menudo se utiliza para designar losarchivos de copia de seguridad), podríamos utilizar este comando:

En este ejemplo, todos los archivos en el directorio home del usuario (y sus subdirectorios) sebusca ficheros que terminen en .BAK. Cuando se encontraron, se eliminan.

Advertencia: No hace falta decir que usted debe tener mucho cuidado al usar laacción -delete. Siempre pruebe el comando por primera vez por la sustitución de laacción para -print - Eliminar para confirmar los resultados de la búsqueda.

Antes de continuar, vamos a echar otro vistazo a cómo los operadores lógicos afectan a lasacciones. Considere el siguiente comando:

Como hemos visto, este comando buscará todos los archivos regulares (-type f) cuyo nombretermina con .BAK (-name '* .BAK') y te mostrará el nombre de ruta relativa de cada archivocorrespondiente a la salida estándar (-print) . Sin embargo, la razón el comando realiza lamanera que lo hace está determinado por las relaciones lógicas entre cada una de las pruebasy acciones. Recuerde, no es, por defecto, una relación -y implícita entre cada prueba y laacción. También podríamos expresar el comando de esta forma de hacer las relaciones lógicasmás fáciles de ver:

encontrar ~-type f -   y -name '* .BAK' -y -print  

Con nuestro comando plenamente expresada, echemos un vistazo a cómo los operadoreslógicos afectan su ejecución:

Prueba / Acción Se realiza solamente si ...-p ri nt -t yp e f -n am e y '* .B AK ' son verdaderas

-n am e '* .B AK ' -t ip o f es cierto

- t y p e fSiempre se lleva a cabo, ya que es la primera prueba / acción enuna relación -y.

218

Page 252: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 252/571

 

Find - Buscar archivos The HardWay

Dado que la relación lógica entre las pruebas y las acciones determina cuál de ellos se lleva acabo, podemos ver que el orden de las pruebas y las acciones es importante. Por ejemplo, si

tuviéramos que volver a ordenar las pruebas y acciones para que la acción -print fue elprimero, el comando sería comportarse de manera muy diferente:

encontrar ~ -print -y -type f -name -y '* .BAK'

Esta versión del comando imprimirá cada fichero (la - acción de impresión siempre se evalúacomo verdadera) y luego la prueba de tipo de archivo y la extensión de archivo especificada.

 Acciones definidas por el usuario

Además de las acciones predefinidas, también podemos invocar comandos arbitrarios. Laforma tradicional de hacerlo es con la acción -exec. Esta acción funciona así:

- e x e c c o m a n d o { } ;

donde comando es el nombre de un comando, {} es una representación simbólica de la rutaactual y el punto y coma es un delimitador necesario que indica el final del comando. He aquíun ejemplo del uso de - ejecutivo a actuar como la acción -delete discutido anteriormente:

rm -exec '{}' ';'

Una vez más, ya que los caracteres de llave y punto y coma tienen un significado especial parael shell, que podrá ser citado ni escapado.

También es posible ejecutar una acción definida por el usuario de forma interactiva. Medianteel uso de la acción en lugar de -Ok - exec, se solicita al usuario antes de la ejecución de cadacomando especificado:

encontrar ~ -type f -name "foo * '-Ok ls -l' { } ' ' ; '< ls ... / home / me / bin / foo>? y-rwxr-xr-x me me 1 224 2007-10-29 18:44 / home / me / bin / foo< ls ... /home/me/foo.txt>? y- rw - r - r - - m í me 1 0 2 0 0 8 -0 9 -1 9 1 2 : 5 3 / h o me / me / fo o . t x t

En este ejemplo, que la búsqueda de archivos con nombres que comienzan con la cadena "foo"y ejecutar el comando ls -l cada vez que uno se encuentra. El uso de la acción -Ok pide alusuario antes de ejecutar el comando ls.

219

Page 253: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 253/571

Page 254: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 254/571

encontrar ~ -type f -name "foo * '-Impresión | xargs ls -l- rwx r -x r - x me 1 me 224 29/10/2007 18:44 / home / me / bin / foo- rw- r - r - - me 1 me 0 2008-09-19 12:53 / home / me /foo.txt

Lidiando con divertidos nombres de archivo

Sistemas de tipo Unix permiten espacios incrustados (e incluso saltos de línea!) En losnombres de archivo. Esto causa problemas para los programas como xargs queconstruyen listas de argumentos para otros programas. Un espacio incrustado serátratado como un delimitador, y el comando resultante interpretar cada palabraseparada por espacios como un argumento separado. Para superar esto, encontrar yxarg permiten el uso opcional de un carácter nulo como argumento separador. Uncarácter nulo se define en ASCII como el personaje representado por el número cero (a

diferencia de, por ejemplo, el carácter de espacio, que se define en ASCII como elpersonaje representado por el número 32). El comando find proporciona la acción-print0, lo que produce una salida nula separados, y el comando xargs tiene la opción- -null, que acepte la entrada nula separada. He aquí un ejemplo:e n c o n t r ar ~ - i n a m e ' * . j p g ' - p r i n t 0 | x a r g s l s - l - - n u l l U s a n d o e s t at é c n i c a , p o d e m o s a s e g u r a r q u e t o d o s l o s a r c h i v o s , i n c l u s o l o s q u ec o n t i e n e n e s p a c i o s i n c r u s t a d o s e n s u s n o m br e s , s e m a n e ja nc o r r e c t a m e n t e .

Find - Buscar archivos The Hard Way

Aquí vemos la salida del comando find hilo en xargs que, a su vez, construye una lista de

argumentos para el comando ls y luego lo ejecuta.

Nota: Mientras que el número de argumentos que se pueden colocar en una línea decomandos es bastante grande, no es ilimitada. Es posible crear comandos que sondemasiado largos para el shell para aceptar. Cuando una línea de comandos supera lalongitud máxima soportada por el sistema, xargs ejecuta el comando especificado conel número máximo de argumentos posibles y luego repite este proceso hasta que seagote la entrada estándar. Para ver el tamaño máximo de la línea de comandos, ejecutexargs con la opción --show-límites.

Un retorno a la Zona de juegosEs hora de poner un poco de encontrar a (casi) el uso práctico. Vamos a crear una zona de

 juegos y probar algo de lo que hemos aprendido.

En primer lugar, vamos a crear un parque infantil con una gran cantidad de subdirectorios yarchivos: 221

Page 255: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 255/571

 

17 - Búsqueda dearchivos

[Me @ linuxbox ~] $ mkdir -p patio de recreo / dir- {001..100} [me @ linuxbox ~]$ touch patio de recreo / dir- {001..100} / {Archivo- A..Z} 

Marvel en el poder de la línea de comandos! Con estas dos líneas, hemos creado un directoriode parque infantil con 100 subdirectorios que contienen cada una 26 archivos vacíos. Trate deque con la interfaz gráfica de usuario!

El método que empleamos para lograr esta magia involucrado un comando familiarizado(mkdir), una expansión exótica concha (tirantes) y un nuevo comando, toque. Al combinarmkdir con la opción -p (que causa mkdir para crear los directorios principales de las rutasespecificadas) con la expansión de llaves, hemos sido capaces de crear 100 subdirectorios.

El comando touch se suele utilizar para establecer o actualizar el acceso, cambiar y modificarlos tiempos de los archivos. Sin embargo, si un argumento de nombre de archivo es el de unarchivo que no existe, se crea un archivo vacío.

En nuestro patio de recreo, hemos creado 100 casos de un archivo llamado archivo-A. Vamosa ver ellos:

[Me @ linuxbox ~] $ encuentro -type f -name parque infantil 'archivo-A' 

Tenga en cuenta que a diferencia de ls, encontrar no produce resultados en forma ordenada.Su orden está determinada por el diseño del dispositivo de almacenamiento. Podemosconfirmar que en realidad tenemos 100 instancias del archivo de esta manera:

[Me @ linuxbox ~] $ find -type f -name parque infantil 'archivo-A' | wc -l 100

 

A continuación, echemos un vistazo a la búsqueda de archivos en base a sus tiempos demodificación. Esto será útil para crear copias de seguridad o la organización de los archivosen orden cronológico. Para ello, vamos a crear primero un archivo de referencia contra el cualcompararemos hora de modificación:

[Me @ linuxbox ~] $ patio toque / marca de tiempo  

Esto crea un archivo con el nombre de marca de hora vacía y fija su hora de modificación a lahora actual. Podemos comprobar esto mediante el uso de otro comando útil, stat, que es unaespecie de versión mejorada de ls. El comando stat revela todo lo que el sistema entiendeacerca de un archivo y sus atributos:

222

Page 256: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 256/571

 

Find - Buscar archivos The HardWay

[Me @ linuxbox ~] $ stat patio de recreo / marca de tiempo   Archivo: 'patio de recreo / marca de tiempo'Tamaño: 0 Bloques: 0 IO Bloque: 4096 archivo vacío ordinario

Dispositivo: 803h / 2051d Inode: 14265061 Links: 1 Acceso: (0644 / -rw-r - r--) Uid: (1001 / Me) Gid: (1001 / Me) Acceso: 2008-10-0815: 15: 39.000000000 -0400 Modificar: 2008-10-08 15: 15: 39.000000000 -0400Cambio: 2008-10-08 15: 15: 39.000000000 -0400

Si tocamos de nuevo el archivo y, a continuación examinamos con estadísticas, veremos quelos tiempos del archivo se han actualizado .:

[Me @ linuxbox ~] $ touch patio de recreo / timestamp[me @ linuxbox ~] $ stat patio de recreo / marca de

tiempo  Archivo: 'patio de recreo / marca de tiempo'Tamaño: 0 Bloques: 0 IO Bloque: 4096 archivo vacío ordinario

Dispositivo: 803h / 2051d Inode: 14265061 Links: 1 Acceso: (0644 / -rw-r - r--) Uid: (1001 / Me) Gid: (1001 / Me) Acceso: 2008-10-0815: 23: 33.000000000 -0400 Modificar: 2008-10-08 15: 23: 33.000000000 -0400Cambio: 2008-10-08 15: 23: 33.000000000 -0400

A continuación, vamos a utilizar la función Buscar paraactualizar algunos de nuestros archivos parque infantil:

[Me @ linuxbox ~] $ find -type f -name parque infantil 'archivo-B' toque -exec '{}' ';'  

Esto actualiza todos los archivos en el patio de recreo llamado archivo-B. A continuaciónvamos a utilizar la función Buscar para identificar los archivos actualizados mediante lacomparación de todos los archivos a la marca de tiempo de archivos de referencia:

[Me @ linuxbox ~] $ encuentro parque -type f -newer patio de recreo / marca de tiempo  

Los resultados contienen todas las 100 instancias del archivo-B. Desde realizamos un toque entodos los archivos en el patio de recreo nombramos archivo-B después actualizamos marca de

tiempo, que ahora son "más nuevo" de marca de tiempo y por lo tanto se pueden identificarcon la - prueba más reciente.

Por último, vamos a ir de nuevo a la prueba permisos mal que realizamos anteriormente yaplicarlo a patio de recreo:

2 23

Page 257: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 257/571

[Me @ linuxbox ~] $ encuentro parque \ (-type f -no -perm 0600 \) -o \ (-type d -no -perm0700 \) 

[Me @ linuxbox ~] $ encuentro parque \ (-type f -no -perm 0600 chmod -exec 0600 '{}'

';' \) -o \ (-type d -no -perm 0700 chmod -exec 0700 '{ } ''; '\)  

17 - Búsqueda de archivos

Este comando enumera todos los directorios 100 y 2.600 archivos en patio (así como laindicación de la hora y la zona de juegos en sí, para un total de 2.702), ya que ninguno de ellos

cumple con nuestra definición de "buenas permisos." Con nuestro conocimiento de losoperadores y las acciones, podemos añadir acciones a este comando para aplicar los nuevospermisos a los archivos y directorios en nuestro patio de recreo:

Sobre una base del día a día, podemos encontrar que es más fácil emitir dos comandos, unopara los directorios y otra para los archivos, en lugar de este comando un gran complejo, peroes bueno saber que podemos hacerlo de esta manera. El punto importante aquí es entendercómo los operadores y las acciones pueden ser utilizados en conjunto para realizar tareasútiles.

OpcionesPor último, tenemos las opciones. Las opciones se utilizan para controlar el alcance de unabúsqueda hallazgo. Pueden ser incluidos con otras pruebas y acciones cuando la construcciónde expresiones de búsqueda. Aquí está una lista de los más comúnmente utilizados:Tabla 17-7: encontrar opciones

Opción Descripción- d e p t h

Hallazgo directa para procesar los archivos de un directorioantes de que el propio directorio. Esta opción se aplicaautomáticamente cuando se especifica la acción -delete.

- m a xd e p t h niveles  Establecer el número máximo de niveles que se encuentrandescenderá en un árbol de directorios al realizar pruebas yacciones.

- m i n d e p t h niveles  Establecer el número mínimo de los niveles que se encuentrandescenderá en un árbol de directorios antes de la aplicaciónde pruebas y acciones.

- m o u n tDirecto Buscar Si no es para atravesar los directorios que semontan en otros sistemas de archivos.

224

Page 258: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 258/571

Find - Buscar archivos The Hard Way

- n o l e a f Directo e n c o nt r a r no para optimizar su búsqueda basada enel

supuesto de que se está buscando un sistema dearchivos tipo Unix. Esto es necesario para escanear los

sistemas de archivos de DOS / Windows y losCD-ROM.

Resumiendo

Es fácil ver que localizar es tan simple como hallazgo es complicado. Ambos tienen sus usos.Tómese el tiempo para explorar las muchas características del hallazgo. Se puede, con el usoregular, mejorar su comprensión de las operaciones del sistema de archivos de Linux.

Lectura adicional

• El updatedb localizar,, encontrar, y los programas de xargs son todos parte del paquete

findutils del Proyecto GNU. El proyecto GNU ofrece un sitio web con una ampliadocumentación en línea, lo cual es bastante bueno y se debe leer si usted está usandoestos programas en entornos de alta seguridad:http://www.gnu.org/software/findutils/  

Page 259: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 259/571

22518  - Archivado y copia de seguridad

18 - Arch ivado y copia de seguridad

Una de las tareas principales del administrador de un sistema informático es mantener losdatos del sistema de seguridad. Una forma de hacer esto es mediante la realización de copiasde seguridad oportunas de los archivos del sistema. Incluso si no eres un administrador desistemas, a menudo es útil para hacer copias de las cosas y para mover grandes colecciones dearchivos de un lugar a otro y de un dispositivo a otro.

En este capítulo, vamos a ver varios programas comunes que se utilizan para gestionarcolecciones de archivos. Hay los programas de compresión de archivos:

•  g z i p - Comprimir archivos o ampliar

•  bzip2 - Un bloque de clasificación

compresor de archivos Los programas de archivo:

•  utilidad de archivo de cinta - tar

•  zip - Paquete y comprimir archivos

y el programa de sincronización de

archivos:

•  r s y n c - Archivo remoto y la sincronización de directorios

Compresión de Archivos

A lo largo de la historia de la informática, ha habido una lucha para conseguir la mayorcantidad de datos en el menor espacio disponible, ya que el espacio sea de memoria,dispositivos de almacenamiento, o el ancho de banda de red. Muchos de los servicios de datosque damos por sentado hoy en día, tales como reproductores portátiles de música, latelevisión de alta definición, o Internet de banda ancha, deben su existencia a las técnicaseficaces de compresión de datos.

La compresión de datos es el proceso de eliminación de la redundancia de los datos. Vamos aconsiderar un ejemplo imaginario. Digamos que teníamos un archivo de imagencompletamente negro con las dimensiones de 100 píxeles por 100 píxeles. En términos dealmacenamiento de datos (suponiendo 24 bits, o 3 bytes por píxel), la imagen ocupará 30.000bytes de almacenamiento:

100 * 100 * 3 = 30.000

Una imagen que es de un solo color contiene datos totalmente redundantes. Si fuéramos

Page 260: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 260/571

inteligentes, podríamos codificar los datos de tal manera que simplemente describe el hechode que tenemos un bloque

226

Page 261: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 261/571

[Me @ linuxbox ~] $ ls -l / etc> foo.txt [me @ linuxbox ~] $ ls -l foo. *- rw - r - . r - - 1 me me 15738 2008-10 -14 07 :15 foo . t x t [me @l in u xb o x ~ ] f o o . t x t $ g z ip [ me @ l i n u xb o x ~ ] $ l s - l f o o *- rw - r - . r - - 1 me me 3230 2008-10 -14 07 :15 foo . t x t .gz [me@ l inuxbox ~ ] $ gunz ip foo . t x t [me @ l i nuxbox ~ ] $ l s - l f oo*- rw - r - r - - m í me 1 1 5 7 3 8 2 0 0 8 -1 0 -1 4 0 7 : 15 f o o . t x t

Compresión de Archivos

de 10.000 píxeles negros. Así, en lugar de almacenar un bloque de datos que contienen ceros30000 (negro se representa normalmente en archivos de imagen como cero), se podríacomprimir los datos en el número 10000, seguido por un cero para representar nuestros datos.Tal esquema de compresión de datos se denomina codificación de longitud de ejecución y es

una de las técnicas de compresión de más rudimentarias. Técnicas de hoy en día son muchomás avanzado y complejo, pero el objetivo básico sigue siendo el mismo: conseguir deshacersede los datos redundantes.

Los algoritmos de compresión  (Las técnicas matemáticas utilizadas para llevar a cabo lacompresión) se dividen en dos categorías generales, sin pérdidas y con pérdidas. Lacompresión sin pérdidas conserva todos los datos contenidos en el original. Esto significa quecuando un archivo se restaura desde una versión comprimida, el archivo restaurado esexactamente la misma que la versión original, sin comprimir. La compresión con pérdida, porotro lado, elimina los datos como se lleva a cabo la compresión, para permitir que más decompresión que debe aplicarse. Cuando se restaura un archivo con pérdidas, que no coincide

con la versión original; más bien, es una aproximación cercana. Ejemplos de compresión conpérdida son JPEG (para imágenes) y MP3 (música). En nuestra discusión, vamos a tener

exclusivamente en cuenta la compresión sin pérdidas, ya que la mayoría de los datos en lascomputadoras no pueden tolerar ninguna pérdida de datos.

gzipEl programa gzip se utiliza para comprimir uno o más archivos. Cuando se ejecuta, sustituyeel archivo original con una versión comprimida del original. El programa gunzipcorrespondiente se utiliza para restaurar los archivos comprimidos a su forma original, sincomprimir. He aquí un ejemplo:

En este ejemplo, creamos un archivo de texto llamado foo.txt de una lista de directorios. Acontinuación, se corre gzip, que sustituye el archivo original con una versión llamadafoo.txt.gz. comprimido En la lista de directorios de foo. *, Vemos que el archivo original se ha

sustituido por la versión comprimida, y que la versión comprimida es de aproximadamenteuna quinta parte del tamaño del original. También podemos ver que el archivo comprimidotiene los mismos permisos y marca de tiempo que el original.

A continuación, ejecutamos el programa gunzip para descomprimir el archivo. Después,podemos ver que la versión comprimida del archivo se ha sustituido por el original, de nuevocon el permiso

227

Page 262: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 262/571

18  - Archivado y copia de seguridad ___

siones y marca de tiempo conservan. gzip

tiene muchas opciones. Aquí están

algunos:

Tabla 18-1: Opciones gzipOpción Descripción-c

Escribe la salida a la salida estándar y mantener los archivos originales.También puede ser especificado con --stdout y --to-stdout.

- dDescomprimir. Esto hace que gzip para actuar como gunzip. Tambiénpuede ser especificado con - -decompress o - -uncompress.

- fFuerza de compresión, incluso si ya existe una versión comprimida delarchivo original. También puede ser especificado con - -force.

- h Muestra información de uso. También puede ser especificado con - -help.

- l Las estadísticas de compresión de lista para cada archivo comprimido.También puede ser especificado con --list.

- rSi uno o más argumentos en la línea de comandos son los directorios, deforma recursiva comprimir archivos contenidos dentro de ellos. Tambiénpuede ser especificado con - -Recursive.

- t Pon a prueba la integridad de un archivo comprimido. También puede serespecificado con --test.

- v Mostrar mensajes detallados, mientras que la compresión. También puedeser especificado con - -verbose.

-número Cantidad de compresión Set. número es un número entero en el intervalode 1 (la más rápida, menos compresión) a 9 (la más lenta, la mayor parte decompresión). Los valores 1 y 9 también pueden expresarse como --fast y --mejor, respectivamente. El valor por defecto es 6.

Volviendo a nuestro ejemplo anterior:

[Me @ linuxbox [Me @ linuxbox 

f o o . t x t . g z :  [Me @ linuxbox 

~] $ Gzip foo.txt ~] $ Gzip tv foo.txt.gz 

Okay ~] $ Gzip -d foo.txt.gz 

Aquí, hemos sustituido la foo.txt archivo con una versión llamada foo.txt.gz. comprimido Acontinuación, probamos la integridad de la versión comprimida, utilizando las opciones -t y-v. Fi-

228

Page 263: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 263/571

 

Compresión deArchivos

finalmente, hemos descomprimido el archivo de nuevo a su forma original.

g z i p t a m bi é n s e p u e d e u t i l i z a r d e m a n e r a i n t e r e s a n t e at r a v é s d e l a e n t r a d a y s a l i d a e s t á n d a r :

[Me @ linuxbox ~] $ ls -l / etc | gzip> foo.txt.gz 

Este comando crea una versión comprimida de un anuncio en el directorio.

El programa gunzip, que descomprime archivos gzip, asume que los nombres de archivoterminen en la extensión .gz, así que no es necesario especificar que, siempre y cuando elnombre especificado no está en conflicto con un archivo comprimido existente:

[Me @ linuxbox ~] $ gunzip foo.txt

Si nuestro objetivo fuera sólo para ver el contenido de un archivo de texto comprimido,podríamos hacer esto:

[Me @ linuxbox ~] $ gunzip -c foo.txt | menos 

Alternativamente, hay un programa suministrado con gzip, llamado zcat, que es equivalente agunzip con la opción -c. Puede ser utilizado como el comando cat sobre archivos gzipcomprimido:

[Me @ linuxbox ~] $ zcat foo.txt.gz | menos 

Sugerencia: Hay un programa zless, también. Se realiza la mismafunción que la tubería anteriormente.  

bzip2El programa bzip2, por Julian Seward, es similar a gzip, pero utiliza un algoritmo de

compresión diferente que logra niveles más altos de compresión a costa de la velocidad decompresión. En la mayoría de lo que se refiere, funciona de la misma manera como gzip. Unarchivo comprimido con bzip2 se denota con la extensión .bz2:

2 29

Page 264: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 264/571

[Me @ linuxbox ~] $ ls -l / etc> foo.txt [me @linuxbox ~] $ ls -l foo.txt - rw - r - r - - 1 me me 1 5 7 3 8 2 0 0 8 -1 0 -17 1 3 : 5 1 f o o . t x t [ me @l in u xb o x ~ ] $ b z ip 2 f o o . t x t [ me @ l i n u xb o x ~ ] $ l s - lf oo . t x t .bz2- rw- r - r - - 1 me me 2792 2008-10 -17 13 :51 foo . t x t .bz2 [me@ l i n u xb o x ~ ] $ b u n z ip 2 f o o . t x t . b z2

No sea la compresión Compulsivo

De vez en cuando veo a la gente tratando de comprimir un archivo, que ya se hacomprimido con un algoritmo de compresión efectiva, haciendo algo como esto:$ Gzip imagen.jpgNo lo hagas. Probablemente usted está perdiendo el tiempo y el espacio! Si se aplica lacompresión de un archivo que ya está comprimido, usted realmente va a terminar enun archivo más grande. Esto se debe a que todas las técnicas de compresión implicancierta sobrecarga que se añade al archivo para describir la compresión. Si intentacomprimir un archivo que ya no contiene información redundante, la compresión nodará lugar a ningún ahorro para compensar la sobrecarga adicional.

18  - Archivado y copia de seguridad

Como podemos ver, bzip2 se pueden utilizar de la misma manera como gzip. Todas lasopciones (excepto -r) que discutimos para gzip también se apoyan en bzip2. Tenga en cuenta,sin embargo, que la opción de nivel de compresión (alto) tiene un significado algo diferente abzip2. bzip2 viene con bunzip2 y bzcat para descomprimir archivos.

bzip2 También viene con el programa bzip2recover, que tratará de recuperar archivos .bz2dañados.

Almacenamiento de archivos

Una tarea común de administración de archivos a menudo se utiliza junto con la compresiónestá archivando. El archivo es el proceso de reunir a muchos archivos y agrupar juntos en unúnico archivo de gran tamaño. Archiving se hace a menudo como parte de las copias deseguridad del sistema. También se utiliza cuando los datos de edad se mueve desde unsistema a algún tipo de almacenamiento a largo plazo.

alquitrán

En el mundo Unix de software, el programa de alquitrán es la herramienta clásica paraarchivar los archivos. Su nombre, abreviatura de archivo de cinta, revela sus raíces como unaherramienta para la toma de las cintas de copia de seguridad. A pesar de que todavía se utilizapara esa tarea tradicional, es igualmente hábil en otros dispositivos de almacenamientotambién.

230

Page 265: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 265/571

 

Almacenamiento de archivos

A menudo vemos los nombres de archivo que terminen con la extensión .tar o .tgz, queindican un archivo "llanura" alquitrán y un archivo comprimido con gzip, respectivamente.Un archivo tar puede consistir de un grupo de archivos separados, uno o más jerarquías de

directorios, o una mezcla de ambos. La sintaxis del comando funciona así:modo de alquitrán [opciones] nombre de ruta ... 

donde mode es uno de los siguientes modos de funcionamiento (sólo se muestra una listaparcial aquí, ver la página de manual de alquitrán para una lista completa):

Tabla 18-2: Modos de alquitrán

Modo Descripciónc Crear un archivo de una lista de archivos y / o directorios.

x Extraer un archivo.

r Añada los nombres de ruta especificado al final de un archivo.t Listar el contenido de un archivo.

alquitrán utiliza una forma un poco extraña de expresar opciones, por lo que vamos anecesitar algunos ejemplos para mostrar cómo funciona. En primer lugar, vamos a volver acrear nuestro patio de recreo del capítulo anterior:

[Me @ linuxbox ~] $ mkdir -p patio de recreo / dir- {001..100} [me @ linuxbox ~]$ touch patio de recreo / dir- {001..100} / {Archivo- A..Z} 

A continuación, vamos a crear un archivo tar de toda lazona de juegos:

[Me @ linuxbox ~] $ tar cf playground.tar parque infantil 

Este comando crea una playground.tar llamado archivo tar que contiene toda la jerarquía dedirectorios de juegos. Podemos ver que el modo y la opción f, que se utiliza para especificar elnombre del archivo tar, pueden estar unidos entre sí, y no requieren de un guión que conduce.Tenga en cuenta, sin embargo, que el modo siempre se debe especificar primero, antes decualquier otra opción.

Para listar el contenido del archivo, podemos hacer esto:

[Me @ linuxbox ~] $ tar tf playground.tar  

231

Page 266: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 266/571

 

18 - Archivado y copia de seguridad ________________________

Para obtener una lista más detallada, podemos añadir la opción v(detallado):

[Me @ linuxbox ~] $ tar tvf playground.tar  

Ahora, vamos a extraer el patio de recreo en una nueva ubicación. Haremos esto mediante lacreación de un nuevo directorio llamado foo, cambiar el directorio y extraer el archivo tar:

[Me @ linuxbox ~] $ mkdir foo [me @ linuxbox ~] foo $cd[Me @ linuxbox foo] $ tar xf ../playground.tar  [Me @ foo linuxbox] $ ls parque infantil

Si examinamos el contenido de ~ / foo / parque, vemos que el archivo se ha instaladocorrectamente, la creación de una reproducción exacta de los archivos originales. Hay unaadvertencia, sin embargo: A menos que usted está operando como superusuario, archivos ydirectorios extraídos de archivos asumen la propiedad del usuario que realiza la restauración,en lugar del propietario original.

Otro comportamiento interesante de alquitrán es la forma en que maneja los nombres de rutaen los archivos. El valor predeterminado para los nombres de ruta es relativa, no absoluta.alquitrán hace esto por la simple eliminación de cualquier barra que va desde la ruta de accesoal crear el archivo. Para demostrarlo, vamos a volver a crear nuestro archivo, esta vezespecificando una ruta absoluta:

[Me @ foo linuxbox] $ cd[Me @ linuxbox ~] $ tar cf playground2.tar - / parque 

Recuerde, - / parque ampliará en / home / me / patio de recreo cuando pulsamos la teclaIntro, por lo que obtendrá una ruta absoluta para nuestra demostración. A continuación,vamos a extraer el archivo como antes y ver lo que sucede:

[Me @ linuxbox ~] foo $ cd[Me @ linuxbox foo] $ tar xf ../playground2.tar  [Me @ foo linuxbox] $ ls casa del patio de recreo [me @linuxbox foo] $ ls caseros mí[Me @ foo linuxbox] $ ls casa / mi patio de recreo

232

Page 267: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 267/571

[Me @ linuxbox ~] $ sudo tar cf /media/BigDisk/home.tar / casa 

[Me @ linuxbox2 ~] $ cd /[Me @ linuxbox2 /] $ sudo tar xf /media/BigDisk/home.tar  

tar xf archive.tar ruta  

Almacenamiento de archivos

Aquí podemos ver que cuando hemos extraído nuestro segundo archivo, se vuelve a crear eldirectorio home / me / parque infantil con relación a nuestro directorio de trabajo actual, ~ /foo, no en relación con el directorio raíz, como hubiera sido el caso con un absoluto nombre de

ruta. Esto puede parecer una manera extraña para que funcione, pero en realidad es más útilde esta manera, ya que nos permite extraer los archivos a cualquier lugar en vez de serforzados a extraer a sus ubicaciones originales. Repetir el ejercicio con la inclusión de la opciónverbosa (v) dará una idea más clara de lo que está pasando.

Vamos a considerar un hipotético, pero práctico, ejemplo de alquitrán en la acción.Imaginemos que queremos copiar el directorio de inicio y su contenido desde un sistema aotro y tenemos un gran disco duro USB que podemos utilizar para la transferencia. En nuestromoderno sistema Linux, la unidad es "automágicamente" montado en el directorio / media.

También vamos a imaginar que el disco tiene un nombre de volumen de BigDisk cuando nos

concedemos la misma. Para hacer que el archivo tar, podemos hacer lo siguiente:

Después de que el archivo tar está escrito, que desmontar la unidad y colóquelo en el segundoequipo. Una vez más, se monta en / media / BigDisk. Para extraer el archivo, hacemos esto:

Lo que es importante ver aquí es que primero tenemos que cambiar el directorio a /, por lo quela extracción es relativa al directorio raíz, ya que todas las rutas de acceso dentro del archivoson relativos.

Al extraer un archivo, es posible limitar lo que se extrae del archivo. Por ejemplo, siquisiéramos extraer un único archivo de un archivo comprimido, que se podía hacer así:

Mediante la adición de la ruta posterior al comando, alquitrán sólo restaurar el archivoespecificado. Múltiples nombres de ruta pueden ser especificados. Tenga en cuenta que la rutadebe ser el, nombre de ruta relativa exacta completo como se almacena en el archivo. Al

especificar las rutas de acceso, los comodines no están normalmente apoyadas; Sin embargo, laversión GNU de tar (que es la versión con mayor frecuencia en las distribuciones de Linux) losapoya con la opción - -wildcards. Aquí hay un ejemplo usando nuestro archivo playground.taranterior:

233

Page 268: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 268/571

[Me @ linuxbox ~] foo $ cd[Me @ linuxbox foo] $ tar xf ../playground2.tar --wildcards 'casa / me / yground pla / dir - * /archivo-A' 

[Me @ linuxbox ~] $ find -name parque infantil 'archivo-A' -exec playground.tarrf alquitrán '{}' '+' 

[Me @ foo linuxbox] $ cd[Me @ linuxbox ~] $ find -name parque infantil 'archivo-A' | tar cf - --files- from = - | gzip>playground.tgz 

18  - Archivado y copia de seguridad

Este comando va a extraer sólo los archivos que coinciden con el nombre de ruta especificadoincluyendo el comodín DIR- *.

a l qu i t r á n se utiliza a menudo en combinación con encontrar a crear archivos. En este

ejemplo, vamos a utilizar la función Buscar para producir un conjunto de archivos a incluir enun archivo:

Aquí usamos encontrar para que coincida con todos los archivos de zona de juegos llamadoarchivo-A y, a continuación, utilizando la acción -exec, invocamos el alquitrán en el modoappend (r) para añadir los archivos que coinciden con el playground.tar archivo.

El uso de alquitrán con hallazgo es una buena manera de crear copias de seguridadincrementales de un árbol de directorios o todo un sistema. Mediante el uso de hallazgo para

que coincida con los archivos más recientes que un archivo de marca de tiempo, podríamos

crear un archivo que sólo contiene archivos más recientes que el anterior archivo, suponiendoque el archivo timestamp se actualiza justo después de crear cada archivo.

tar también puede hacer uso de la entrada y salida estándar. Aquí está un ejemplo completo:

En este ejemplo, se utilizó el programa de descubrimiento para producir una lista de archivosque coinciden y los canaliza en alquitrán. Si el nombre de archivo "-" no se especifica, se toma

en el sentido de entrada o de salida estándar, según sea necesario (Por cierto, esta convenciónde usar "-" para representar la entrada estándar / OUTPUT es utilizado por un número deotros programas, también.) Los --files-de opción (que también se puede especificar como -T)causa alquitrán a leer su lista de nombres de ruta de un archivo en lugar de la línea decomandos. Por último, el archivo producido por tar se canaliza en gzip para crear elplayground.tgz archivo comprimido. La extensión .tgz es la extensión convencional dado aarchivos tar comprimidos con gzip. La extensión .tar.gz también se utiliza a veces.

Aunque hemos utilizado el programa gzip externamente al producido nuestro archivocomprimido, mo-

234

Page 269: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 269/571

[Me @ linuxbox ~] $ find -name parque infantil 'archivo-A' | tar czfplayground.tgz -T - 

[Me @ linuxbox ~] $ find -name parque infantil 'archivo-A' | tar CJFplayground.tbz -T - 

[Me @ linuxbox ~] $ mkdir remoto-cosas [Me @ linuxbox ~] $ cd remoto-cosas[Me @ linuxbox remoto cosas] $ ssh remotas-sys 'tar cf - Documentos' | tar xf - me @ contraseña del remote-sys:[Me @ linuxbox remoto-stuff] $ ls Documentos

Almacenamiento de archivos

ern versiones de GNU tar apoyan tanto gzip y bzip2 compresión directa, con el uso de las

opciones de z y j, respectivamente. Usando nuestro ejemplo anterior como base, se puede

simplificar de la siguiente manera:

Si hubiéramos querido crear un archivo comprimido bzip2 lugar, podríamos haber hecho esto:

Simplemente cambiando la opción de compresión de la Z a j (y cambiar la extensión delarchivo de salida para .tbz para indicar un archivo comprimido bzip2) hemos habilitado la

compresión bzip2.

Otro uso interesante de la entrada estándar y la salida con el comando tar implica latransferencia de archivos entre sistemas en una red. Imagina que teníamos dos máquinas queejecutan un sistema operativo tipo Unix equipado con alquitrán y ssh. En tal escenario,podríamos transferir un directorio de un sistema remoto (llamado remoto-sys para esteejemplo) a nuestro sistema local:

Aquí hemos sido capaces de copiar un directorio de documentos con nombre del sistemaremoto a distancia-sys a un directorio dentro del directorio llamado remoto-cosas en el sistemalocal. ¿Cómo hacemos esto? En primer lugar, pusimos en marcha el programa de alquitrán enel sistema remoto usando ssh. Usted recordará que ssh nos permite ejecutar un programa deforma remota en un equipo en red y "ver" los resultados en el sistema de la salida estándarlocal producido en el sistema remoto se envía al sistema local para su visualización. Podemostomar ventaja de esto por tener alquitrán crear un archivo (el modo c) y enviarlo a la salidaestándar, en lugar de un archivo (la opción f con el argumento de guión), el transporte de estemodo el archivo sobre el túnel cifrado proporcionado por ssh a el sistema local. En el sistema

local, ejecutamos el alquitrán y hacer que se expanda un archivo (el modo x) suministradadesde la entrada estándar

235

Page 270: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 270/571

 

18 - Archivado y copia de seguridad ________

(De nuevo, la opción f con el argumento deguión).

cremalleraEl programa de compresión es a la vez una herramienta de compresión y un archivador. Elformato de archivo utilizado por el programa es familiar para los usuarios de Windows, yaque lee y escribe archivos .zip. En Linux, sin embargo, gzip es el programa de compresiónpredominante con bzip2 ser un cercano segundo lugar.

En su uso más básico, zip se invoca así:Opciones zip ZipFile archivo ... Por ejemplo, para hacer un archivo zip de nuestro patio de recreo, que íbamos a hacer esto:

[Me @ linuxbox ~] $ zip -r playground.zip parque infantil 

A menos que se incluye la opción -r para recursividad, sólo el directorio parque infantil (peroninguno de sus contenidos) se almacenan. A pesar de la adición de la extensión .zip esautomática, que incluirá la extensión de archivo para mayor claridad.

Durante la creación del archivo zip, zip normalmente mostrará una serie de mensajes comoeste:

añadiendo: parque infantil / dir-020 / archivo-Z(almacenado 0%) añadir: patio de recreo / dir-020 /

archivo-Y (almacenado 0%) añadir: patio de recreo /dir-020 / archivo-X (almacenado 0%) y agregó: patio derecreo / dir-087 / (almacenado 0%) añadir: patio de recreo /dir-087 / archivo-S (almacenado 0%)

Estos mensajes muestran el estado de cada archivo añadido al archivo. zip añadir archivos alarchivo mediante uno de dos métodos de almacenamiento: o lo hará "guardar" un archivo sincompresión, como se muestra aquí, o que se "desinfle" el archivo que realiza la compresión. Elvalor numérico que se muestra después de que el método de almacenamiento indica lacantidad de compresión logrado. Desde nuestro patio de recreo sólo contiene archivos vacíos,sin compresión se lleva a cabo en su contenido.

Extraer el contenido de un archivo zip es sencillo cuando se utiliza el programa de

descompresión:

[Me @ linuxbox ~] foo $ cd[Me @ foo linuxbox] $ unzip ../playground.zip 

236

Page 271: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 271/571

[Me @ foo linuxbox] $ cd[Me @ linuxbox ~] $ find -name parque infantil "archivo-A" | zip - @ file-A.zip  

Almacenamiento de archivos

Una cosa a tener en cuenta sobre postal (a diferencia de alquitrán) es que si no se especifica unarchivo existente, se actualiza en lugar de reemplazarlo. Esto significa que el archivo existentese conserva, pero se añaden nuevos archivos y los archivos coincidentes se sustituyen.

Los archivos se pueden enumerar y extrajeron de forma selectiva desde un archivo zipmediante la especificación de ellos para descomprimir:

Usando las causas opción -l descomprima en la lista simplemente el contenido del archivo sinnecesidad de extraer el archivo. Si no se especifica ningún archivo (s), descomprimir listarátodos los archivos en el archivo. La opción -v puede ser añadido para aumentar el nivel dedetalle de la lista. Tenga en cuenta que cuando los conflictos de extracción de archivo con unarchivo existente, se le pide al usuario antes de que se sustituya el archivo.

Al igual que tar, zip puede hacer uso de la entrada y salida estándar, aunque su aplicación es

algo menos útil. Es posible canalizar una lista de nombres de archivo zip a través de la opción- @:

Aquí usamos encontramos para generar una lista de archivos que coinciden con la prueba -nombre "archivo-A", y luego tubo la lista en zip, que crea el archivo file-A.zip que contiene losarchivos seleccionados.

postal también es compatible con la escritura de su salida a la salida estándar, pero su uso es

limitado porque muy pocos programas pueden hacer uso de la salida. Desafortunadamente, elprograma de descompresión no acepta la entrada estándar. Esto evita comprimir ydescomprimir de ser utilizados en conjunto para realizar la copia de archivos de red como elalquitrán.

cremallera puede, sin embargo, aceptar la entrada estándar, por lo que se puede utilizarpara comprimir la salida de otros programas:

[Me @linuxbox  ~] $ Unzip -l playground.zip patio de recreo / dir-087 / archivo-Z 

 Archivo: ..  /playground.zip Longitud  Fecha Hora Nombre 

0 05/10/08 09:25 patio de recreo / dir-087 / archivo-Z 

0  1 archivo [Me @ ~] Foo $ cd [Me @ linuxbox foo] descomprimir ../playground.zip patio de recreo / dir-087 / archivo-Z 

 Archivo: ..  /playground.zip reemplazar patio / dir-087 / archivo-Z? [Y] es, [n] o [A] ll, [N] uno, [R] ename: y 

extracción: patio de recreo / dir-087 / archivo-Z 

Page 272: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 272/571

237

Page 273: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 273/571

[Me @ linuxbox ~] $ ls -l / etc / | ls-etc.zip zip - añadiendo: - (deflactado 80%)

[Me @ linuxbox ~] $ unzip -p ls-etc.zip | menos 

18 - Archivado y copia de seguridad

En este tubo de ejemplo que la salida de ls en zip. Al igual que tar, zip interpreta el guiónposterior como "utilizar la entrada estándar para el archivo de entrada."

El programa de descompresión permite su salida que se enviará a la salida estándar cuando seespecifica la opción -p (tubo de):

Hemos tocado en algunas de las cosas básicas que zip / unzip puede hacer. Ambos tienen unagran cantidad de opciones que se suman a su flexibilidad, aunque algunas son específicas dela plataforma a otros sistemas. Las páginas del manual para comprimir y descomprimirambos son bastante buenos y contienen ejemplos útiles. Sin embargo, el uso principal de estosprogramas es para el intercambio de archivos con sistemas Windows, en lugar de realizar lacompresión y archivado en Linux, donde se prefieren en gran medida tar y gzip.

Sincronización de archivos y directorios

Una estrategia común para el mantenimiento de una copia de seguridad de un sistemaconsiste en mantener uno o más directorios sincronizados con otro directorio (o directorios)situados ya sea en el sistema local (por lo general un dispositivo de almacenamiento extraíblede algún tipo) o un sistema remoto. Podríamos, por ejemplo, tener una copia local de un sitioweb en fase de desarrollo y sincronizar de vez en cuando con la copia de "vivir" en un servidorweb remoto.

En el mundo Unix, la herramienta preferida para esta tarea es rsync. Este programa puedesincronizar directorios locales y remotos mediante el protocolo de actualización remota de

rsync, que permite a rsync para detectar rápidamente las diferencias entre los dos directorios yrealizar el mínimo de la copia requerida para ponerlos en sincronía. Esto hace rsync muyrápido y económico de usar, en comparación con otros tipos de programas de copia.

r s y n c se invoca así:

r s y n corigen destino opciones

donde origen y destino son uno de los siguientes:

•  Un archivo local o el directorio

•  Un archivo o directorio remoto en forma de [usuario @] host: ruta

•  Un servidor rsync remoto especificado con un URI de rsync: // [usuario @] host [:

puerto] / ruta Tenga en cuenta que el origen o el destino debe ser un archivo local.

-Remoto-a-remoto de autor 238

Page 274: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 274/571

 

Sincronización de archivos ydirectorios

ING no es compatible.

Vamos a tratar de rsync a cabo en algunos archivos locales. En primer lugar, vamosa limpiar nuestro directorio foo:

[Me @ linuxbox ~] $ rm -rf foo / *

A continuación, vamos a sincronizar el directorio de parque infantil con una copiacorrespondiente en foo:

[Me @ linuxbox ~] $ rsync parque -av foo 

Hemos incluido tanto la opción -a (para archivar causa-recursividad y la preservación de losatributos de archivo) y la opción -v (salida detallada) para hacer un espejo de la zona de

 juegos dentro del directorio foo. Mientras que el comando se ejecuta, vamos a ver una lista delos archivos y directorios que va a copiar. Al final, vamos a ver un mensaje de resumen así:

enviaron 135759 bytes recibieron 57.870 bytes 387.258,00 bytes / seg tamañototal es de 3230 aumento de velocidad es de 0,02

indicando la cantidad de copias a realizar. Si ejecutamos el comando de nuevo, vamos a verun resultado diferente:

[Me @ linuxbox ~] $ rsync playgound -av foo lista de archivos edificio ... hecho

enviaron 22.635 bytes recibidos 20 bytes 45.310,00 bytes / seg tamañototal es de 3230 aumento de velocidad es de 0,14

Observe que no había ninguna lista de archivos. Esto se debe a rsync detecta que no hubodiferencias entre - / parque infantil y ~ / foo / zona de juegos, y por lo tanto no teníanecesidad de copiar nada. Si modificamos un archivo en el parque y correr de nuevo rsync:

[Me @ linuxbox ~] $ touch patio de recreo / dir-099 / archivo-Z[me @ linuxbox ~] $ rsync parque -av foo lista de archivos edificio ... hechopatio / dir-099 / archivo-Zenviaron 22.685 bytes recibidos 42 bytes 45.454,00 bytes / seg tamañototal es de 3230 aumento de velocidad es de 0,14

239

Page 275: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 275/571

[Me @ linuxbox ~] $ mkdir / media / BigDisk / copia de seguridad [Me @ linuxbox ~] $ sudo rsync -av --delete / etc / home / usr / local 

Media / BigDisk / copia de seguridad

copia de seguridad de alias = 'sudo rsync -av --delete / etc / home / usr / local/ media / BigDisk / copia de seguridad'

[Me @ linuxbox ~] $ sudo rsync -av --delete --rsh = ssh / etc / home 

18 - Archivado y copia de seguridad _________________________________________________

vemos que rsync detecta el cambio y copiar sólo el archivo actualizado.

Como ejemplo práctico, vamos a considerar la unidad de disco duro externa imaginaria quehemos utilizado anteriormente con alquitrán. Si le damos la unidad a nuestro sistema y, una

vez más, que se monta en / me- dia / BigDisk, podemos realizar una copia de seguridad del

sistema útil al crear primero un directorio llamado / copia de seguridad en el disco duroexterno, y luego usando rsync para copiar las cosas más importantes de nuestro sistema a launidad externa:

En este ejemplo, hemos copiado el archivo / etc, / home y / usr / directorios locales denuestro sistema a nuestro dispositivo de almacenamiento imaginario. Incluimos la opción --delete para eliminar archivos que puedan haber existido en el dispositivo de copia de

seguridad que ya no existía en el dispositivo fuente (esto es irrelevante la primera vez quehacemos una copia de seguridad, pero será útil en las copias posteriores). Repetir elprocedimiento de fijación de la unidad externa y ejecutar este comando rsync sería una forma

útil (aunque no es lo ideal) de mantener un pequeño sistema de copia de seguridad. Porsupuesto, un alias sería útil, también. Podríamos crear un alias y agregarlo a nuestro archivo.bashrc para proporcionar esta función:

Ahora todo lo que tenemos que hacer es unir nuestra unidad externa y ejecutar el comando de

copia de seguridad para hacer el trabajo.

Usando rsync través de una redUna de las bellezas reales de rsync es que puede ser usado para copiar archivos a través deuna red. Después de todo, la "r" en rsync significa "a distancia." Copia remota se puede haceren una de dos maneras. La primera manera es con otro sistema que ha instalado rsync, juntocon un programa de shell remoto tal como ssh. Vamos a decir que tuvimos otro sistema ennuestra red local con una gran cantidad de espacio disponible en disco duro y queríamosllevar a cabo nuestra operación de copia de seguridad mediante el sistema remoto en lugar deun disco duro externo. Suponiendo que ya había un directorio llamado / copia de seguridad

donde podríamos ofrecer nuestros archivos, podríamos hacer esto:

240

Page 276: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 276/571

 usr remotos / locales-sys: /copia de seguridad

[Me @ linuxbox ~] $ mkdir fedora-devel [Me @ linuxbox ~] $ rsync -av -delete rsync: //rsync.gtlib.gatech.edu/fed ora-linux-core /desarrollo / i386 / os fedora-devel 

Sincronización de archivos y directorios

Hemos hecho dos cambios en nuestro comando para facilitar la copia de red. En primer lugar,hemos añadido la opción --rsh = ssh, que indica a rsync de utilizar el programa ssh como sushell remoto. De esta manera, hemos sido capaces de utilizar un túnel ssh cifrado paratransferir de forma segura los datos del sistema local al host remoto. En segundo lugar,especificamos el host remoto con el prefijo de su nombre (en este caso el host remoto senombra a distancia-sys) para la ruta de destino.

La segunda forma en que se puede utilizar rsync para sincronizar archivos a través de una redes mediante el uso de un servidor de rysnc. rsync puede ser configurado para ejecutarse comoun demonio y escuche las peticiones de entrada para la sincronización. Esto se hace a menudopara permitir la creación de reflejo de un sistema remoto. Por ejemplo, Red Hat Softwaremantiene un gran repositorio de paquetes de software en fase de desarrollo para sudistribución Fedora. Es útil para los probadores de software para reflejar esta coleccióndurante la fase de pruebas del ciclo de liberación de distribución. Dado que los archivos en el

repositorio de cambio con frecuencia (a menudo más de una vez al día), es deseable mantener

una réplica local por la sincronización periódica, en vez de por la copia grueso del repositorio.Uno de estos repositorios se mantiene en Georgia Tech; podríamos reflejar que el uso denuestra copia local de rsync y su servidor rsync como esto:

En este ejemplo, se utiliza el URI del servidor rsync remoto, que consta de un protocolo (rsync://), seguido por el nombre de host-remoto (rsync.gtlib.gatech.edu), seguido por el nombre deruta del repositorio .

Resumiendo

Hemos visto los programas de compresión y archivo comunes utilizados en Linux y otrossistemas operativos tipo Unix. Para los archivos de archivo, la combinación tar / gzip es elmétodo preferido en sistemas tipo Unix mientras zip / unzip se utiliza para lainteroperabilidad con los sistemas Windows. Por último, nos fijamos en el programa rsync (unfavorito personal) que es muy útil para la sincronización eficiente de los archivos y directoriosa través de los sistemas.

Lectura adicional

• Las páginas de manual para todos los comandos discutidos aquí son bastante claras ycontienen ejemplos útiles. Además, el proyecto GNU tiene un buen manual en líneapara su versión de alquitrán. Se puede encontrar aquí:

241

Page 277: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 277/571

 

18 - Archivado y copia deseguridad

http://www.gnu.org/software/tar/manual/index.html 

242

Page 278: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 278/571

19  - Expresionesregulares

19 - Exp resiones regulares

En los próximos capítulos, vamos a mirar a las herramientas que se utilizan para manipular eltexto. Como hemos visto, los datos de texto juega un papel importante en todos los sistemasde tipo Unix, como Linux. Pero antes de que podamos apreciar plenamente todas lascaracterísticas que ofrecen estas herramientas, tenemos que examinar en primer lugar unatecnología que se asocia con frecuencia a los usos más sofisticados de estas herramientasexpresiones regulares.Como hemos navegado las funciones y prestaciones que ofrece la línea de comandos, noshemos encontrado con algunas de las características y comandos de shell realmente arcanos,como la expansión de shell y citando, atajos de teclado, y la historia de comandos, por nomencionar el editor vi. Las expresiones regulares siguen esta "tradición" y pueden ser(posiblemente) la característica más arcano de todos ellos. Esto no es para sugerir que eltiempo que se necesita para aprender acerca de ellos no vale la pena el esfuerzo. Muy por elcontrario. Una buena comprensión nos permitirá realizar hazañas increíbles, aunque su valortotal puede no ser evidente de inmediato.

¿Qué son las expresiones regulares?En pocas palabras, las expresiones regulares son notaciones simbólicas que se utilizan paraidentificar patrones de texto. En cierto modo, se parecen método comodín de la cáscara dearchivo y rutas de acceso a juego, pero en una escala mucho mayor. Las expresiones regularesson apoyados por muchas herramientas de línea de comandos y por la mayoría de loslenguajes de programación para facilitar la solución de problemas de manipulación de texto.Sin embargo, para confundir aún más las cosas, no todas las expresiones regulares son lasmismas; que varían ligeramente de una herramienta a otra y de lenguaje de programación conel lenguaje. Para nuestro análisis, nos limitaremos a las expresiones regulares tal como sedescribe en el estándar POSIX (que cubrirá la mayor parte de las herramientas de línea decomandos), en comparación con muchos lenguajes de programación (sobre todo de Perl), que

utilizan conjuntos un poco más grandes y más ricos de notaciones .

grep

El programa principal que utilizaremos para trabajar con expresiones regulares es nuestroviejo amigo, grep. El nombre de "grep" en realidad se deriva de la frase "impresión global de laexpresión regular", por lo que podemos ver que grep tiene algo que ver con las expresionesregulares. En esencia, grep busca en archivos de texto para la aparición de una expresión

Page 279: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 279/571

regular especificada y da salida a cualquier línea que contenga un partido a la salida estándar.

24319  - Expresiones regulares _______________________

Hasta el momento, hemos utilizado grep con cuerdas fijas, así:

[Me @ linuxbox ~] $ ls / usr / bin | grep postal 

Esto mostrará una lista de todos los archivos en el directorio / usr / bin cuyos nombrescontengan la subcadena "zip".

El programa grep acepta opciones y argumentos de esta

manera: grep [opciones] regex [archivo ...] donde regex es una

expresión regular.

Aquí está una lista de las opciones de grep comúnmente utilizados:

Con el fin de explorar más a fondo grep, vamos a crear algunos archivos de texto a buscar: 244

Table20-1: Opciones grep

Opción Descripción-i

Ignorar caso. No distinguir entre mayúsculas y minúsculas. Tambiénpuede ser especificado --ignore caso.

- vInvertir partido. Normalmente, grep muestra las líneas que contienen unpartido. Esta opción hace que grep para imprimir cada línea que nocontenga un partido. También puede ser especificado - -invert-partido.

- c Imprimir el número de partidos (o no-partidos si también se especifica laopción -v) en lugar de las propias líneas. También puede ser especificado- -count.

- lEscriba el nombre de cada archivo que contiene un partido en lugar delas líneas mismas. También se puede especificar --files-con-partidos.

- L Al igual que la opción -l, pero imprimir sólo los nombres de los archivosque no contienen coincidencias. También se puede especificar partido--files-Without-.

- n

Prefijo en cada línea coincidente con el número de la línea en el archivo.También puede ser especificado --line-número.- h Para búsquedas de varios archivos, suprimir la salida de los nombres de

archivo. También puede ser especificado - -no-nombre de archivo.

Page 280: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 280/571

 

greEUR

[Me @ linuxbox ~] $ ls / bin> listadir-bin.txt [me @ linuxbox ~] $ ls / usr / bin>listadir-USR-bin.txt [me @ linuxbox ~] $ ls / sbin> listadir-sbin .txt [me @linuxbox ~] $ ls / usr / sbin> listadir-USR-sbin.txt [Me @ linuxbox ~] $ ls * .txt listadirlistadir-bin.txt listadir-sbin.txt listadir-USR-sbin.txt listadir-USR-bin.txt

Podemos realizar una búsqueda simple de nuestra lista de losarchivos como éste:

[Me @ linuxbox ~] $ grep bzip listadir * .txt listadir-bin.txt: bzip2listadir-bin.txt: bzip2recover

En este ejemplo, grep busca en todos los archivos de la lista para el bzip cadena y encuentrados partidos, tanto en el archivo listadir-bin.txt. Si tuviéramos que sólo está interesado en lalista de archivos que contenían partidos en lugar de los propios partidos, podríamosespecificar la opción -l:

[Me @ linuxbox ~] $ grep -l bzip listadir * .txt listadir-bin.txt

Por el contrario, si sólo queríamos ver una lista de los archivos que no contenía un partido,

podríamos hacer esto:

[Me @ linuxbox ~] $ grep -L bzip listadir * .txt listadir-sbin.txtlistadir-USR-bin.txtlistadir-USR-sbin.txt

Metacaracteres y literales

Aunque no lo parezca evidente, nuestras búsquedas grep han sido el uso de expresiones

regulares todo el tiempo, aunque sean muy simples. La expresión "bzip" regular se entiendeque un partido se producirá sólo si la línea del archivo contiene al menos cuatro caracteres yque en algún lugar en la línea de los personajes "b", "z", "i", y "p "se encuentran en ese orden,sin otros caracteres en el medio. Los personajes de la "bzip" cadena son todos los caracteresliterales, ya que coincide con ellos mismos. Además de los literales, expresiones regularestambién pueden in-

245

Page 281: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 281/571

[Me @ linuxbox ~] $ grep -h '.zip' listadir * .txt bunzip2bzip2bzip2recovergunzipgzipfunzipgpg-zippreunzipprezip

prezip-binabrir la cremalleraUnZipSFX

19 - Expresiones regulares eludir metacaracteres que se utilizan para especificar partidosmás complejas. Metacaracteres de expresiones regulares consisten en lo siguiente:A $. [] {} -? * + () | \

Todos los demás caracteres se consideran literales, aunque el carácter de barra invertida seutiliza en algunos casos para crear secuencias de meta, así como permitir que losmetacaracteres que se escaparon y se tratan como literales en lugar de ser interpretado comometacaracteres.

Nota:Como podemos ver, muchos de los metacaracteres de expresiones regulares sontambién caracteres que tienen significado para la cáscara cuando se lleva a cabo laexpansión. Cuando pasamos expresiones regulares contienen metacaracteres en lalínea de comandos, es vital que ir entre comillas para evitar que el shell de tratar deampliarlos.

El Cualquier carácter

La primera metacaracter vamos a ver es el punto o período de carácter, que se utiliza para quecoincida con cualquier carácter. Si incluimos en una expresión regular, que coincidirá concualquier carácter en esa posición de carácter. He aquí un ejemplo:

Se realizaron búsquedas de cualquier línea en nuestros archivos que coincide con la expresiónregular ".zip". Hay un par de cosas interesantes a tener en cuenta sobre los resultados.Observe que no se encontró el programa de compresión. Esto se debe a la inclusión de lametacarácter punto en nuestra expresión regular aumenta la longitud del partido necesariopara cuatro personajes, y porque el nombre de "zip" sólo contiene tres, no coincide. Además, silos archivos de nuestras listas habían contenido la extensión de archivo .zip, habrían sidoacompañados también, porque el carácter de punto en la extensión de archivo se trata como

"cualquier carácter", también.

246

Page 282: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 282/571

 

Anclas

Anclas

El símbolo de intercalación (A) y el signo de dólar ($) caracteres se tratan como anclas enexpresiones regulares. Esto significa que causan el partido a ocurrir solamente si la expresión

regular se encuentra al comienzo de la línea (a) o al final de la línea ($):

[Me @ linuxbox ~] $ grep -h listadir 'Azip' * .txt cremallerazipcloakzipgrepzipinfozipnotezipsplit[Me @ linuxbox ~] $ grep -h 'zip $' listadir * .txt gunzip

gzipfunzipgpg-zippreunzipprezipabrir la cremalleracremallera[Me @ linuxbox ~] $ grep -h 'Azip $' listadir * .txt cremallera

Aquí se realizaron búsquedas en la lista de archivos de la cadena "zip" situado al principio dela línea, el extremo de la línea, y en una línea donde se encuentra en el principio y el final de la

línea (es decir, por sí mismo en la línea.) Tenga en cuenta que la expresión regular 'A $' (unprincipio y un final con nada en el medio) coincidirá con líneas en blanco.

Un Crucigrama Helper

Incluso con nuestro conocimiento limitado de las expresiones regulares en este punto,podemos hacer algo útil.Mi esposa ama crucigramas y ella a veces me pide ayuda con una pregunta enparticular. Algo así como: "¿Qué es una palabra de cinco letras cuya tercera letra es 'j'y la última letra es" r "que significa ...?" Este tipo de pregunta me hizo pensar.

¿Sabía usted que su sistema Linux contiene un diccionario? Lo hace. Echa un vistazoen el directorio / usr / share / dict y usted puede encontrar uno, o varios. Losarchivos de diccionario ubicados sólo hay largas listas de palabras, una por línea,dispuestos en orden alfabético. En mi sistema, el archivo de palabras contiene un pocomás de 98.500

247

Page 283: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 283/571

palabras. Para encontrar posibles respuestas a la pregunta crucigrama de arriba,podríamos hacer esto:[me @ linuxbox ~] $ grep -i 'A..jr $' / usr / share / dict / words MayormayorEl uso de esta expresión regular, podemos encontrar todas las palabras en nuestroarchivo de diccionario que son cinco letras de largo y tienen una "j" en la terceraposición y una "r" en la última posición.

[Me @ linuxbox ~] $ grep -h '[bg] zip' listadir * .txt bzip2bzip2recovergzip

[Me @ linuxbox ~] -h $ grep '[Abg] zip' listadir * .txt bunzip2gunzip

19  - Expresiones regulares

Expresiones soporte y Clases de personajesAdemás de coincidir con cualquier carácter en una posición dada en nuestra expresiónregular, también podemos coincidir con un solo carácter de un conjunto de caracteres

mediante el uso de expresiones del soporte. Con expresiones del soporte, podemos especificarun conjunto de caracteres (incluidos los caracteres que de otro modo serían interpretadoscomo metacaracteres) para ser emparejado. En este ejemplo, utilizando un conjunto de doscaracteres:

nosotros igualaremos cualquier línea que contiene la cadena "bzip" o "gzip".

Un conjunto puede contener cualquier número de caracteres, y metacaracteres pierden susignificado especial cuando se coloca entre paréntesis. Sin embargo, hay dos casos en los quese utilizan metacaracteres dentro de las expresiones del soporte, y tienen diferentessignificados. El primero es el símbolo de intercalación (A), que se utiliza para indicar lanegación; el segundo es el guión (-), que se utiliza para indicar un intervalo de caracteres.

NegaciónSi el primer carácter de una expresión entre corchetes es un símbolo de intercalación (A), se

toman los caracteres restantes a ser un conjunto de caracteres que no deben estar presentes enla posición del carácter dado. Hacemos esto mediante la modificación de nuestro ejemploanterior:

248

Page 284: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 284/571

 

Expresiones soporte y Clases de personajes

funzipgpg-zippreunzipprezipprezip-binabrir lacremalleraUnZipSFX

Con la negación activa, se obtiene una lista de archivos que contengan la cadena "zip"precedido de cualquier carácter excepto "b" o "g". Observe que no se encontró el archivo zip.Un personaje negada establecido todavía requiere un carácter en la posición dada, pero elpersonaje no debe ser un miembro del conjunto negada.

El carácter de intercalación sólo invoca negación si es el primer carácter dentro de un soportede expresión; de lo contrario, pierde su significado especial y se convierte en un carácter

ordinario en el conjunto.

Rangos de carácter tradicionalSi quisiéramos construir una expresión regular que encontrar todos los archivos de nuestraslistas que comienzan con una letra mayúscula, podríamos hacer esto:

[Me @ linuxbox ~] $ grep -h 'A [ABCDEFGHIJKLMNOPQRSTUVWXZY]' listadir * .txt  

Es sólo una cuestión de poner todas las cartas 26uppercase en una expresión con corchetes.

Pero la idea de todo lo que escribir es muy preocupante, por lo que no es de otra manera:

[Me @ linuxbox ~] $ grep -h 'A [A-Z]' listadir * .txt MAKEDEVPanel de ControlLLEGARCABEZAPOSTEXX11XorgMAKEFLOPPIES

NetworkManagerNetworkManagerDispatcher

Mediante el uso de una serie de tres caracteres, podemos abreviar las 26 letras. Cualquier seriede caracteres se puede expresar de esta manera incluyendo varios rangos, como estaexpresión que

249

Page 285: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 285/571

 

19 - Expresiones regulares ___________________________

partidos todos los nombres de archivo a partir de letras ynúmeros:

[Me @ linuxbox ~] $ grep -h 'A [A-Za-z0-9]' listadir * .txt 

En rangos de caracteres, vemos que el carácter guión es tratado especialmente, por lo que¿cómo podemos realmente incluimos un carácter de guión en una expresión con corchetes?Por lo que es el primer carácter de la expresión. Tenga en cuenta estos dos ejemplos:

[Me @ linuxbox ~] $ grep -h '[A-Z]' listadir * .txt 

Esto coincidirá con cada nombre de archivo que contiene una letramayúscula. Mientras que:

[Me @ linuxbox ~] -h $ grep '[-AZ]' listadir * .txt 

coincidirá con cada nombre de archivo que contiene un guión, o una mayúscula "A" o una "Z"mayúscula.

Clases de caracteres POSIXLos rangos de caracteres tradicionales son una manera fácil de entender y eficaz para manejarel problema de especificar rápidamente conjuntos de caracteres. Por desgracia, no siemprefuncionan. Si bien no hemos encontrado ningún problema con el uso de grep hasta ahora,

podríamos tener problemas con otros programas.De vuelta en el capítulo 4, nos fijamos en cómo se usan caracteres comodín para realizar laexpansión ruta. En esa discusión, dijimos que los rangos de caracteres podrían utilizarse demanera casi idéntica a la forma en que se utilizan en expresiones regulares, pero aquí está elproblema:

[Me @ linuxbox ~] $ ls / usr / sbin / [ABCDEFGHIJKLMNOPQRSTUVWXYZ] * / Usr / sbin / MAKEFLOPPIES/ Usr / sbin / NetworkManagerDispatcher/ Usr / sbin / NetworkManager

(En función de la distribución de Linux, obtendremos una lista diferente de archivos,posiblemente, una lista vacía. Este ejemplo es de Ubuntu). Este comando produce la esperaresultante una lista de sólo los archivos cuyos nombres comienzan con una letra mayúscula,pero:

250

Page 286: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 286/571

[Me @ linuxbox ~] $ ls / usr / sbin / [A-Z] * / Usr / sbin / biosdecode/ Usr / sbin / charla/ Usr / sbin / chgpasswd/ Usr / sbin / chpasswd/ Usr / sbin / chroot/ Usr / sbin / limpieza-info/ Usr / sbin / quejarse/ Usr / sbin / console-kit-daemon

[Me @ linuxbox ~] $ echo $ LANGen_US.UTF-8

Expresiones soporte y Clases de personajes

con este comando se obtiene un resultado totalmente diferente (sólo se muestra una lista

parcial de los resultados). Porqué es eso? Es una historia larga, pero aquí está la versión corta:Antes, cuando Unix fue desarrollado por primera vez, sólo se sabía de caracteres ASCII, y estacaracterística se refleja este hecho. En ASCII, los primeros 32 caracteres (números 0-31) soncódigos de control (cosas como pestañas, retrocesos, y los retornos de carro). El próximo 32(32-63) contienen caracteres imprimibles, incluyendo la mayoría de los signos de puntuación ylos números del cero al nueve. Los siguientes 32 (números 64 a 95) contienen las letrasmayúsculas y un poco más de los símbolos de puntuación. Los últimos 31 (números 96-127)contienen las letras minúsculas y sin embargo más símbolos de puntuación. En base a esteacuerdo, los sistemas que utilizan ASCII utilizan un orden de clasificación que se veía así:

A B C D E F GH I J K L M N O P Q R ST U V W X Y Z a b c d ef g h i j k l m no p q r s t u v w x y z

Esto difiere de la orden de diccionario adecuado, que es como esta:a A b B c C d D eE f F g G h Hi l j J k K l L m M nN o O p P q Q r R s St T u U v V w W x X y Y zZ

A medida que la popularidad de Unix se extendió más allá de los Estados Unidos, allí creció lanecesidad de apoyar a los personajes que no se encuentran en los Estados Unidos Inglés. Latabla ASCII se amplió a utilizar un total de ocho bits, añadiendo los números 128 a 255caracteres, que alojan muchos más idiomas. Para apoyar esta capacidad, las normas POSIXintrodujeron un concepto llamado un entorno local, lo que podría ser ajustado para

seleccionar el conjunto de caracteres necesario para una ubicación particular. Podemos ver laconfiguración del idioma de nuestro sistema con este comando:

Con esta configuración, las aplicaciones compatibles con POSIX usarán una colación para eldiccionario en lugar de orden ASCII. Esto explica el comportamiento de los comandosanteriores. Una gama carácter de [AZ] cuando se interpreta con el fin diccionario incluyetodos los caracteres alfabéticos en minúsculas, excepto la "a", por lo tanto, nuestros resultados.

Para trabajar parcialmente alrededor de este problema, el estándar POSIX incluye una serie declases de caracteres que proporcionan intervalos útiles de caracteres. Se describen en la tablaBE- 251

Page 287: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 287/571

19 - Expresiones regulares __________

baja:Tabla 19-2: Las clases de caracteres de POSIX

Incluso con las clases de caracteres, todavía no hay una manera conveniente de expresar

rangos parciales, tales como [AM].El uso de clases de personajes, podemos repetir nuestra lista de directorios y ver un resultadomejorado: 252

Carácter de clase Descripción

[ : A l n u m : ] Los caracteres alfanuméricos. En ASCII, lo que equivale a:[A-Za-z0-9]

[ : P a l a b r a : ]El mismo que [: alnum:], con la adición de el carácter desubrayado (_) carácter.

[ : A l p h a : ]

Los caracteres alfabéticos. En ASCII, lo que equivale a: [A-Za-z]

[ : B l a n k : ] Incluye los caracteres de espacio y tabulador.[ : Cn t r l : ]

Los códigos de control ASCII. Incluye los caracteres ASCII del 0 al31 y 127.

[ : D í g i t o : ] Los números del cero al nueve.[ : G r a p h : ]

Los caracteres visibles. En ASCII, que incluye personajes de 33 a126.

[ : L o w er : ] Las letras minúsculas.[ : P u n c t : ] Los caracteres de puntuación. En ASCII, lo que equivale a: [-! "#

$% & '.? () * +, / :; <=> @ [\\\] _' {|} ~][ : P r i n t : ]

Los caracteres imprimibles. Todos los personajes de [: graph:] másel carácter de espacio.

[ : S p a c e : ]

Los espacios en blanco incluidos espacio, tabulador, retorno decarro, salto de línea, tabulación vertical, y la forma dealimentación. En ASCII, lo que equivale a:[\ T \ r \ n \ v \ f]

[ : U p p e r : ] Los caracteres en mayúsculas.[ : X d i g i t : ] Caracteres utilizados para expresar números hexadecimales. En

ASCII, lo que equivale a:[ 0 - 9 A - F a - f ]

Page 288: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 288/571

 

Expresiones soporte y Clases de personajes

[Me @ linuxbox ~] $ ls / usr / sbin / [[: upper:]] * / Usr / sbin / MAKEFLOPPIES/ Usr / sbin / NetworkManagerDispatcher/ Usr / sbin / NetworkManager

Recuerde, sin embargo, que esto no es un ejemplo de una expresión regular, sino que es elshell realiza la expansión de nombre de camino. Mostramos aquí porque las clases decaracteres de POSIX se pueden utilizar para ambos.

Volviendo a la tradicional Colación Orden

Usted puede optar por tener su sistema utiliza el (ASCII) para el cotejo tradicionalcambiando el valor de la variable de entorno LANG. Como vimos anteriormente, la

variable LANG contiene el nombre de la lengua y el carácter conjunto utilizado en sulocalidad. Este valor se determinó originalmente cuando ha seleccionado un idiomade instalación como se instaló su Linux.Para ver la configuración regional, utilice el comando locale:[ M e @ l i n u x b o x ~ ] $ l o c a l eL A N G = e n _ U S . U T F - 8L C _ C T Y P E = " e n _ U S . U T F - 8 "L C _ N U M E R I C = " e n _ U S . UT F - 8 "L C _ T I M E = " e n _ U S . UT F - 8 "L C _ C O L L A T E = " e n _ U S . UT F - 8 "L C_ M ON E T A RY = " e n _ U S . U T F - 8 "

L C _ M E S S A G ES = " e n _ U S . U TF - 8 "L C _ P A P E R = " e n _ U S . U T F - 8 "L C_ N A M E = " e n _ U S . U T F - 8 "L C _ A D D R E S S = " e n _ U S . U TF - 8 "L C _ T E L E P H O NE = " e n _ U S . UT F - 8 "L C _ M E A S U R E ME N T = " e n _ U S . U T F - 8 "L C _ I D E N T I FI C A T I O N = " e n _ U S . U TF - 8 "LC_ALL =Para cambiar la configuración regional a usar los comportamientos tradicionales deUnix, establezca la variable LANG en POSIX:[ M e @ l i n u x b o x ~ ] $ e x p o r t L A N G = P O S I XTenga en cuenta que este cambio convierte el sistema para que utilice EE.UU. Inglés(más específicamente, ASCII) para su juego de caracteres, así que sea seguro de si estoes realmente lo que quieres.Usted puede hacer este cambio permanente añadiendo esta línea para que su archivo.bashrc:

253

Page 289: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 289/571

e xp o r t L A N G =P O S I X

POSIX

Durante la década de 1980, Unix llegó a ser un sistema operativo comercial muy

popular, pero en 1988, el mundo de Unix estaba en la agitación. Muchos fabricantes deordenadores han licenciado el código fuente de Unix de sus creadores, AT & T, yfueron el suministro de varias versiones del sistema operativo con sus sistemas. Sinembargo, en sus esfuerzos para crear la diferenciación de productos, cada fabricanteañade cambios de propiedad y extensiones. Esto comenzó a limitar la compatibilidaddel software. Como siempre con los vendedores propietarios, cada uno estabatratando de jugar un partido ganador de "lock-in" con sus clientes. Esta época oscuraen la historia de Unix es conocido hoy en día como "la balcanización".

19 - Expresiones regulares

POSIX básico vs. Expresiones regulares extendidas

 Justo cuando pensábamos que esto no podía ser más confuso, descubrimos que POSIX

también divide las implementaciones de expresiones regulares en dos tipos: las expresionesregulares básicas (BRE) y expresiones regulares extendidas (ERE). Las características quehemos cubierto hasta ahora son apoyados por cualquier aplicación que sea compatible conPOSIX e implementa BRE. Nuestro programa grep es uno de esos programas.

¿Cuál es la diferencia entre BRE y ERE? Es una cuestión de metacaracteres. Con BRE, lossiguientes metacaracteres se reconocen:La $. [] *

Todos los demás caracteres se consideran literales. Con ERE, se añaden los siguientes

metacaracteres (y sus funciones asociadas):

() {}? + I

Sin embargo (y esta es la parte divertida), el "(", ")", "{" y "}" personajes son tratados comometacaracteres en BRE si se escaparon con una barra invertida, mientras que con el ERE, queprecede cualquier metacaracter con una barra invertida hace que sea tratado como un literal.Cualquier rareza que viene será cubierto en las discusiones que siguen.

Dado que las características que vamos a discutir el próximo son parte del ERE, que vamos atener que utilizar un grep diferente. Tradicionalmente, esto se ha realizado por el programaegrep, pero la versión GNU de grep también soporta expresiones regulares extendidas cuandose utiliza la opción -E.

254

Page 290: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 290/571

Introduzca el IEEE (Instituto de Ingenieros Eléctricos y Electrónicos). En la década de1980 a mediados, el IEEE comenzó a desarrollar un conjunto de normas que definencómo Unix (y Unix) sistemas realizarían. Estas normas, conocidas formalmente como

IEEE 1003, definen los interfaces de programación de aplicaciones (API), la cáscara ylos servicios públicos que se van a encontrar en un sistema de tipo Unix estándar. Elnombre "POSIX", que significa Interfaz de sistema operativo portátil (con la "X" seañade al final de Snappiness extra), fue sugerido por Richard Stallman (sí, queRichard Stallman), y fue aprobado por la IEEE.

[Me @ linuxbox ~] $ echo AAA[Me @ linuxbox ~] $ echoacreditación[Me @ linuxbox ~] $ echo[me @ linuxbox ~] $

AAA"  

1 grep -E  'AAA |'  Acre

ditac 

1 grep -E  'AAA |BBB'  

CCC"   1 grep -E  

'AAA |'  

POSIX básico vs. Expresiones regulares extendidasAlternancia

La primera de las funciones de expresiones regulares extendidas que discutiremos se llama

alternancia, que es la instalación que permite a un partido que se produzca entre un conjuntode expresiones. Así como una expresión de soporte permite un solo carácter para que coincidade un conjunto de caracteres especificados, la alternancia permite partidos a partir de unconjunto de cadenas u otras expresiones regulares.

Para demostrarlo, vamos a utilizar grep en conjunto con eco. En primer lugar, vamos a tratarde una llanura partido cadena antigua:

Un ejemplo bastante sencillo, en el que canalizar la salida de eco en grep y ver los resultados.Cuando se produce una coincidencia, lo vemos impreso; cuando se produce ningunacoincidencia, no vemos resultados.

Ahora vamos a añadir la alternancia, significada por el meta-carácter vertical de la barra:

Aquí vemos la expresión regular 'AAA | BBB', lo que significa que "corresponde a ninguno de

la AAA cuerda o la cadena de la acreditación." Tenga en cuenta que dado que esta es unacaracterística extendida, hemos añadido la -E

255

[Me @ linuxbox ~] $ echo "AAA" AAA grep AAA  

[Me @ linuxbox ~] $ echo"acreditación" [me @ linuxbox ~] $ 

grep AAA  

Page 291: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 291/571

[Me @ linuxbox ~] $ echo "AAA" | grep -E 'AAA | BBB | CCC'  AAA

[Me @ linuxbox ~] $ grep -Eh 'A (BZ | gz | zip)' listadir * .txt 

[Me @ linuxbox ~] $ grep -Eh 'Abz | gz | zip' listadir * .txt 

19 - Expresiones regulares opción a grep (aunque podríamos haber utilizado el programa

egrep lugar), y que encierra la expresión regular entre comillas para evitar que el shellinterprete el meta-carácter vertical de la barra como un operador de la tubería. Alternando nose limita a dos opciones:

Para combinar la alternancia con otros elementos de expresiones regulares, podemos utilizar() para separar la alternancia:

Esta expresión coincidirá con los nombres de archivo en nuestras listas que comienzan con

cualquiera "BZ", "gz", o "zip". Si hubiéramos dejamos los paréntesis, el significado de estaexpresión regular:

cambios para que coincida con cualquier nombre de archivo que comienza con "BZ" o contiene"gz" o contiene "zip".

Cuantificadores

Expresiones regulares extendidas soportan varias formas de especificar el número de vecesque un elemento se corresponde.

? - Un ajuste de cero elemento o Una HoraEsto significa cuantificador, en efecto, "Hacer que el elemento anterior opcional". Digamos que

queríamos comprobar un número de teléfono para la validez y hemos considerado un númerode teléfono para ser válido si coincide alguna de estas dos formas:

(Nnn) nnn-nnnn

nnn nnn-nnnn

donde "n" es un número. Podríamos construir una expresión regular de esta manera: A \ ([0-9]

[0-9] [0-9] \?)? [0 -9 ] [0 -9 ] [0 -9 ] - [0- 9] [0 -9 ] [0 -9 ] [0 -9 ] $En esta expresión, seguimos los caracteres de paréntesis con signos de interrogación paraindicar que están a emparejar cero o una vez. Una vez más, ya que los paréntesis sonnormalmente metacaracteres (en ERE), que los preceden con barras invertidas para hacer queser tratados como literales en lugar.

256

Page 292: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 292/571

[Me @ linuxbox ~] $ echo "(555) 123-4567" | (? [0-9] [0-9] [0-9] \) grep -E 'A \? [0-9] [0-9][0-9] - [0-9] [0-9] [0-9] [0-9] $ ' (555) 123-4567[Me @ linuxbox ~] $ echo "555 123-4567" | grep -E 'A \ (? [0-9] [0-9] [0-9] \)? [0-9] [0-9] [0-9]- [0-9] [0-9] [0-9] [0-9] $ ' 555 123-4567[Me @ linuxbox ~] echo $ "AAA 123-4567" | grep -E 'A \ (? [0-9] [0-9] [0-9] \)? [0-9] [0-9][0-9] - [0-9] [0-9] [0-9] [0-9] $ ' [Me @ linuxbox ~] $

[Me @ linuxbox ~] $ echo "Esto funciona." | Grep -E '[[: upper:]] [[: upper:] [: lower:]] * \.' Esto funciona.[Me @ linuxbox ~] $ echo "Esto funciona." | Grep -E '[[: upper:]] [[: upper:] [: lower:]] * \.' Esto funciona.[Me @ linuxbox ~] $ echo "Esto no" | grep -E '[[: upper:]]. [[: Upper:] [: lower:]] * \'  [Me @ linuxbox ~] $

Cuantificadores

Vamos a intentarlo:

Aquí vemos que la expresión coincide con las dos formas del número de teléfono, pero nocoincide con uno que contiene caracteres no numéricos.

* - Un ajuste de cero Elemento o más vecesAl igual que el? metacaracter, el * se utiliza para denotar un elemento opcional; Sin embargo, adiferencia del?, el elemento se puede producir cualquier número de veces, no sólo una vez.Digamos que queríamos ver si una cadena era una sentencia; es decir, que comienza con unaletra mayúscula, a continuación, contiene cualquier número de letras y espacios enmayúsculas y minúsculas, y termina con un punto. Para que coincida con esta definición (muy

crudo) de una frase, podríamos usar una expresión regular de esta manera:[ [ : Upper : ] ] [ [ : uppe r : ] [ : l ower : ] ] * \ .

La expresión se compone de tres elementos: una expresión que contiene el soporte [: upper:]clase de caracteres, una expresión entre corchetes que contiene tanto el [: upper:] y [: lower:]clases de personajes y un espacio, y un período escaparon con una barra invertida . El segundo

elemento se desvaneció con un * metacaracter, por lo que después de la letra mayúscula deliderazgo en nuestra sentencia, cualquier número de letras y espacios en mayúsculas yminúsculas puede seguirlo y aún coincidir:

La expresión coincide con las dos primeras pruebas, pero no el tercero, ya que carece de lanecesaria

257

Page 293: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 293/571

[Me @ linuxbox ~] $ echo "Esto que" | grep -E 'A (? [[: Alpha:]] +) + $'  Esto que[Me @ linuxbox ~] $ echo "abc" | grep -E 'A (? [[: Alpha:]] +) + $'  a b c

[Me @ linuxbox ~] $ echo "ab 9" | grep -E 'A ([[: alpha:]]? +) + $' [Me @ linuxbox ~] $echo "abc d" | grep -E 'A ([[: alpha:]]? +) + $ '  [Me @ linuxbox ~] $

19 - Expresiones regulares __________________________________________________________

líder carácter en mayúscula y posterior período.

+ - Un elemento de ajuste de una o más vecesEl + metacaracter funciona como el *, excepto que requiere por lo menos una instancia delelemento anterior a causa de un partido. Aquí es una expresión regular que sólo igualarálíneas que consisten en grupos de uno o más caracteres alfabéticos separados por espacios:

 A ( [ [ : a l pha : ] ]? + ) + $

Vemos que esta expresión no coincide con la línea de "ab 9", ya que contiene un carácter noalfabético; ni tampoco coincide con "ABC D", porque más de un carácter de espacio que separaa los caracteres "c" y "d".

{} - Partido Un elemento Un número específico de vecesLos {} y metacaracteres se utilizan para expresar los números mínimo y máximo de partidosrequeridos. Pueden especificarse de cuatro maneras posibles:

Volviendo a nuestro ejemplo anterior con los números de teléfono, podemos utilizar estemétodo para especificar repeticiones para simplificar nuestra expresión regular original: A \(? [0-9] [0-9] [0-9] \)?  [ 0 -9 ] [ 0 -9 ] [ 0 -9 ] - [ 0 -9 ] [ 0 -9 ] [ 0 -9 ] [ 0 -9 ] $  

258

Tabla 19-3: Especificar el número de partidos

Prescripción Significado

{N} Coincidir con el elemento anterior si ocurre exactamente n veces.

{ N , m} Coincidir con el elemento anterior si ocurre al menos n veces, pero nomás de m veces.

{ N , } Coincidir con el elemento anterior si ocurre n veces o más.{ , M } Coincidir con el elemento anterior si se produce no más de m veces.

Page 294: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 294/571

[Me @ linuxbox ~] $ echo "(555) 123-4567" | (? [0-9] {3} \) grep -E 'A \? [0- 9] {3} - [0-9] {4}$ ' (555) 123-4567[Me @ linuxbox ~] $ echo "555 123-4567" | grep -E 'A \ ([0-9] {3} \?)? [0-9] {3} - [0-9] {4} $ '  555 123-4567[Me @ linuxbox ~] $ echo "5555 123-4567" | (? [0-9] {3} \) grep -E 'A \? [0-9] {3} - [0-9] {4} $' [Me @ linuxbox ~] $

[Me @ linuxbox ~] $ for i in {1..10}; hacer eco "($ {RANDOM: 0: 3}) {$ RANDO M: 0: 3} -$ {RANDOM: 0: 4}" >> phonelist.txt; hecho 

Cuantificadores

a:L a \ (? [0 -9 ] {3 } \ )? [0 -9 ] {3 } - [ 0 -9 ] {4 } $

Vamos a intentarlo:

Como podemos ver, nuestra expresión revisada puede validar correctamente los números cony sin los paréntesis, al tiempo que rechaza esos números que no tienen el formato correcto.

Poner expresiones regulares para trabajar

Echemos un vistazo a algunos de los comandos que ya conocemos y vemos la forma en que sepueden utilizar con las expresiones regulares.

La validación de una lista de teléfonos con grepEn nuestro ejemplo anterior, nos fijamos en los números de teléfono individuales y losregistramos en el formato adecuado. Un escenario más realista sería la comprobación de unalista de números en lugar, por lo que vamos a hacer una lista. Haremos esto recitando un

conjuro mágico para la línea de comandos. Será la magia porque no hemos cubierto la mayorparte de los comandos involucrados, pero no se preocupe. Vamos a llegar en los próximoscapítulos. Aquí está el encantamiento:

Este comando producirá un archivo llamado phonelist.txt contiene diez números de teléfono.Cada vez que el comando se repite, se añaden otros diez números a la lista. También podemoscambiar el valor 10 cerca del comienzo de la orden para producir un número más o menostelefónicas. Si examinamos el contenido del archivo, sin embargo, vemos que tenemos unproblema:

259

Page 295: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 295/571

[Me @ linuxbox ~] $ phonelist.txt gato (232 )298 -2265(624 )381 -1078(540 )126 -1980(874 )163 -2885(286 )254 -2860(292 )108 -518

(129 )44 -1379(458 ) 273 a1642 (686 )299 -8268(198 )307 -2440

[Me @ linuxbox ~] $ grep -ev 'A \ ([0-9] {3} \) [0-9] {3} - [0-9] {4} $'  phonelist.txt(292) 108-518(129) 44-1379

[me @ linuxbox] $19 - Expresiones regulares

Algunos de los números son malformado, lo cual es perfecto para nuestros propósitos, ya quevamos a utilizar grep para validarlos.

Un método útil de validación sería para escanear el archivo para los números no válidos ymostrar la lista de resultados en la pantalla:

Aquí se utiliza la opción -v para producir una coincidencia inversa para que nos sólo de salidade las líneas de la lista que no concuerdan con la expresión especificada. La expresión en sí

incluye los metacaracteres de anclaje en cada extremo para asegurarse de que el número notiene caracteres adicionales en cada extremo. Esta expresión también requiere que losparéntesis estén presentes en un número válido, a diferencia de nuestro teléfono ejemplonúmero anterior.

Encontrar nombres de archivo Feo con BuscarEl comando find soporta una prueba basada en una expresión regular. No es unaconsideración importante a tener en cuenta al utilizar expresiones regulares en hallazgo frentea grep. Mientras que grep se imprimirán una línea cuando la línea contiene una cadena quecoincide con una expresión, requiere encontrar que la ruta de acceso que coincida exactamente

con la expresión regular. En el siguiente ejemplo, utilizaremos encontrar con una expresiónregular para encontrar cada nombre de ruta que contenga cualquier carácter que no sea unmiembro del siguiente conjunto:

[ - _ . / 0 - 9 a - z A - Z ]

Una exploración Tal revelaría los nombres de ruta que contengan espacios incrustados y otrospersonajes potencialmente ofensivos:

Page 296: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 296/571

260

Page 297: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 297/571

[Me @ linuxbox ~] $ encuentro. -regex '. * [A -_. / 0-9a-zA-Z]. *' 

[Me @ linuxbox ~] $ localizar --regex 'bin / (BZ | gz | zip)' / Bin / bzcat/ Bin / bzcmp/ Bin / bzdiff/ Bin / bzegrep/ Bin / bzexe/ Bin / bzfgrep/ Bin / bzgrep/ Bin / bzip2/ Bin / bzip2recover/ Bin / bzless/ Bin / zmore/ Bin / gzexe

/ Bin / gzip/ Usr / bin / zip/ Usr / bin / zipcloak/ Usr / bin / zipgrep/ Usr / bin / zipinfo/ Usr / bin / zipnote/ Usr / bin / zipsplit

Poner expresiones regulares para trabajar

Debido a la exigencia de una coincidencia exacta de toda la ruta, que utilizamos. * En ambosextremos de la expresión para que coincida con cero o más instancias de cualquier carácter. Enel medio de la expresión, se utiliza un soporte de expresión negada contiene nuestro conjunto

de caracteres pathname aceptables.

La búsqueda de archivos con ubicarEl programa apoya a localizar tanto básica (la opción - -regexp) y extendida (la opción --regex)las expresiones regulares. Con él, podemos realizar muchas de las mismas operaciones quehemos realizado anteriormente con nuestros archivos DirList:

El uso de la alternancia, llevamos a cabo una búsqueda de nombres de rutas que contienen yasea bin / BZ, bin / gz, o / bin / zip.

Búsqueda de texto con menos y vimmenos vim y ambos comparten el mismo método de búsqueda de texto. Al pulsar la tecla /seguida de una expresión regular será realizar una búsqueda. Si usamos menos para vernuestro archivo phonelist.txt:

261

Page 298: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 298/571

[Me @ linuxbox ~] $ Menos phonelist.txt (232 )298 -2265(624 )381 -1078(540 )126 -1980(874 )163 -2885(286 )254 -2860(292 ) 108 -518(129 ) 44 -1379(458 ) 273 a1642 (686 )299 -8268(198 )307 -2440

A \ ([0-9] {3} \) [0-9] {3} - [0-9] {4}$

(232 )298 -2265

(624 )381 -1078(540 )126 -1980(874 )163 -2885(286 )254 -2860  

(292) 108-518(129) 44-1379

(Fin) 

19 - Expresiones regularesa continuación, busque nuestra expresión de validación:menos pondrá de relieve las cadenas que coinciden, dejando a los no válidos fáciles de

detectar:vim, por otra parte, apoya las expresiones regulares básicas, por lo que nuestra expresión debúsqueda se vería así:/ ( [ 0 - 9 ] \ { 3 \ } ) [ 0 - 9 ] \ { 3 \ } - [ 0 - 9 ] \ { 4 \ }

Podemos ver que la expresión es en su mayoría de la misma; Sin embargo, muchos de lospersonajes que se consideran metacaracteres en las expresiones extendidas son consideradosen los literales de expresiones básicas. Ellos sólo son tratados como metacaracteres cuandoescapado con una barra invertida. De-

262

Page 299: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 299/571

[Me @ linuxbox ~] $ cd / usr / share / man / MANL [Me @ linuxbox man1] $ zgrep -El 'regex | expresión regular' * .gz 

 _______________________________________________ Poner expresiones regulares paratrabajar

en espera de la configuración particular de vim en nuestro sistema, se resaltará el juego. Si no,pruebe este comando modo de comando:

: H l s e a r c h

para activar la búsqueda resaltado.

Nota: Dependiendo de su distribución, vim puede o no es compatible con el textoresaltado de esta categoría. Ubuntu, en particular, suministra una versión muyreducida de vim por defecto. En tales sistemas, es posible que desee utilizar el gestor depaquetes para instalar una versión más completa de vim.

Resumiendo

En este capítulo, hemos visto algunos de los muchos usos de las expresiones regulares.Podemos encontrar aún más si utilizamos expresiones regulares para buscar aplicacionesadicionales que los utilizan. Podemos hacerlo mediante la búsqueda en las páginas de manual:

El programa zgrep proporciona un front-end para grep, lo que le permite leer archivoscomprimidos. En nuestro ejemplo, buscamos la sección de un hombre archivos de páginascomprimidas en su ubicación habitual. El resultado de este comando es una lista de losarchivos que contienen la cadena "expresiones regulares" o "expresión regular". Comopodemos ver, las expresiones regulares se presentan en una gran cantidad de programas.

Hay una característica que se encuentra en las expresiones regulares básicas que no cubrimos.Llamado de nuevo las referencias, esta función se discutirá en el siguiente capítulo.

Lectura adicional

Hay muchos recursos en línea para el aprendizaje de las expresiones regulares, incluyendovarios tutoriales y hojas de trucos.

Además, la Wikipedia tiene buenos artículos sobre los siguientes temas de fondo:

•  POSIX:  http://en.wikipedia.org/wiki/Posix 

•  ASCII:  http://en.wikipedia.org/wiki/Ascii 

263

Page 300: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 300/571

20  - Procesamiento de Texto

20 - Procesamiento de Texto

Todos los sistemas operativos tipo Unix se basan en gran medida en los archivos de texto paravarios tipos de almacenamiento de datos. Así que tiene sentido que hay muchas herramientaspara la manipulación de texto. En este capítulo, vamos a ver los programas que se utilizanpara "slice and dice" texto. En el próximo capítulo, vamos a ver más de procesamiento detexto, centrándose en los programas que se utilizan para dar formato al texto para la impresióny otros tipos de consumo humano.

En este capítulo se volverá a examinar a algunos viejos amigos y presentarnos a algunosnuevos:

•  gato - Concatenar archivos e imprimir en la salida estándar

•  c l a s e - Ordenar las líneas de los archivos de texto

•  U n i q - Informe o omitir líneas repetidas

•  cortar - Retire las secciones de cada línea de los archivos

•  pasta - Combinar líneas de archivos

•  u ni r s e - Únete a las líneas de dos ficheros en un campo común

•  comm - Comparar dos archivos ordenados línea por línea•  d i f f - Comparar los archivos línea por línea

•  parche - Aplicar un archivo diff a un original

•  tr - Traducir o eliminar caracteres

•  SED - editor de flujo para el filtrado y la transformación de texto

•  aspell - Hechizo Interactivo corrector

Aplicaciones De Texto

Hasta ahora, hemos aprendido un par de editores de texto (nano y vim), miró a un montón dearchivos de configuración, y hemos sido testigos de la salida de decenas de comandos, todoello en el texto. Pero ¿qué otra cosa se utiliza para texto? Por muchas cosas, resulta que.

264Aplicaciones De Texto

Page 301: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 301/571

DocumentosMuchas personas escriben documentos utilizando los formatos de texto sin formato. Si bien esfácil ver cómo un pequeño archivo de texto que puede ser útil para mantener las notassimples, también es posible escribir grandes documentos en formato de texto, también. Unmétodo popular es escribir un documento de gran tamaño en un formato de texto y luego usarun lenguaje de marcas para describir el formato del documento final. Muchos trabajos

científicos se escriben utilizando este método, ya que los sistemas de procesamiento de textobasados en Unix fueron de los primeros sistemas que apoyaron el diseño tipográfico avanzadoque necesitan los escritores en las disciplinas técnicas.

Páginas WebTipo más popular del mundo de documento electrónico es probablemente la página web. Laspáginas Web son documentos de texto que utilizan ya sea HTML (Hypertext MarkupLanguage) o XML (Extensible Markup Language) como lenguajes de marcas para describir elformato visual del documento.

Correo electrónicoEl correo electrónico es un medio intrínsecamente basado en texto. Incluso los archivosadjuntos no son de texto se convierten en una representación de texto para su transmisión.Esto lo podemos ver por nosotros mismos mediante la descarga de un mensaje de correoelectrónico y luego verlo en menos. Veremos que el mensaje comienza con una cabecera quedescribe la fuente del mensaje y el tratamiento que recibió durante su viaje, seguido por elcuerpo del mensaje con su contenido.

Salida de impresoraEn los sistemas Unix, salida con destino a una impresora se envía como texto sin formato o, si

la página contiene gráficos, se convierte en un formato de texto de descripción de páginaconocido como PostScript, que se envía a un programa que genera los puntos gráficos para seva a imprimir.

Programa de Código FuenteMuchos de los programas de línea de comandos que se encuentran en los sistemas de tipoUnix fueron creados para apoyar los programas de administración de sistemas y desarrollo desoftware y procesamiento de texto no son una excepción. Muchos de ellos están diseñadospara resolver los problemas de desarrollo de software. El procesamiento razón texto esimportante para los desarrolladores de software es que todo el software comienza como texto.El código fuente, la parte del programa que el programador escribe en realidad, está siempre

en formato de texto.

Revisando algunos viejos amigos

De vuelta en el capítulo 6 (redirección), nos enteramos de algunos comandos que son capacesde ac-

265

Page 302: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 302/571

[Me @ linuxbox ~] $ cat> foo.txtEl rápido zorro marrón saltó sobre el perro perezoso. [Me

@ linuxbox ~] $

20  - Procesamiento de Texto concepto de entrada estándar, además de comando argumentosde la línea. Nosotros sólo tocamos brevemente a continuación, pero ahora vamos a echar unvistazo más de cerca la forma en que se pueden utilizar para llevar a cabo el procesamiento detextos.

gatoEl programa gato tiene un número de opciones interesantes. Muchos de ellos se utilizan para

ayudar a visualizar mejor el contenido del texto. Un ejemplo es la opción -A, que se utilizapara mostrar los caracteres no imprimibles en el texto. Hay momentos en los que queremossaber si los caracteres de control están integrados en nuestro texto de otra manera visible. Elmás común de estos son caracteres de tabulación (por oposición a los espacios) y retornos decarro, a menudo se presentan como caracteres de fin de línea en archivos de texto al estilo deMS DOS. Otra situación común es un archivo que contiene líneas de texto con espacios finales.

Vamos a crear un archivo de prueba utilizando gato como un procesador de palabra primitiva.Para ello, sólo tendremos que entrar en el comando cat (junto con la especificación de unarchivo para la salida redirigida) y tecleamos nuestro texto, seguido de Enter para terminar

correctamente la línea, a continuación, Ctrl-d, para indicar al gato que hemos llegado al final-de-archivo. En este ejemplo, entramos en un protagonista pestaña y seguimos la línea conalgunos espacios finales:

A continuación, vamos a utilizar el gato con la opción -A para mostrar el texto:

Como podemos ver en los resultados, el carácter de tabulación en nuestro texto esrepresentado por la IA. Esta es una notación común que significa "Control-I", que, comoresulta ser, es lo mismo que un carácter de tabulación. También vemos que un $ aparece en elverdadero fin de la línea, lo que indica que nuestro texto contiene espacios finales.

266

[Me @ linuxbox ~] $ cat -A foo.txt LaI El rápido zorro marrón saltó sobre el perro perezoso.  $ [Me @ linuxbox ~] $ 

Page 303: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 303/571

MS-DOS Vs. Texto Unix Texto

Una de las razones es posible que desee utilizar el gato para buscar caracteres noimprimibles en el texto es de ver retornos de carro ocultos. ¿De dónde proceden losretornos de carro ocultos vienen? DOS y Windows! Unix y DOS no definen el final deuna línea de la misma manera en archivos de texto. Unix termine una línea con uncarácter de avance de línea (ASCII 10), mientras que MS-DOS y sus derivados utilizanla secuencia de retorno de carro (ASCII 13) y salto de línea para terminar cada línea detexto.Hay varias formas de convertir archivos de DOS a formato Unix. En muchos sistemasLinux, existen programas llamados dos2unix y unix2dos, que puede convertir

archivos de texto hacia y desde formato DOS. Sin embargo, si usted no tiene nixdos2u- en su sistema, no se preocupe. El proceso de conversión de texto de DOS aformato Unix es muy simple; simplemente consiste en la eliminación de los retornosde carro infractor. Esto se logra fácilmente por un par de los programas discutidosmás adelante en este capítulo.

[Me @ linuxbox ~] $ cat> foo.txt Elzorro marrón rápido

saltó sobre el perro perezoso. [Me @ linuxbox~] $ cat -ns foo.txt

1 El zorro marrón rápido23 saltó sobre el perro perezoso.

[Me @ linuxbox ~] $Revisando algunos viejos amigos

gato también tiene opciones que se utilizan para modificar el texto. Los dos más destacadosson -n, qué números de líneas, y -s, que suprime la producción de múltiples líneas en blanco.Podemos demostrar de esta manera:

En este ejemplo, se crea una nueva versión de nuestro archivo de prueba foo.txt, que contienedos líneas de texto separado por dos líneas en blanco. Después del procesamiento por gato conlas opciones - ns, la línea en blanco adicional se elimina y las líneas restantes están contados. Sibien esto no es gran parte de un proceso para llevar a cabo en el texto, es un proceso.

clase

El programa sort ordena el contenido de la entrada estándar, o uno o más archivosespecificados en la línea de comandos, y envía los resultados a la salida estándar. Utilizando lamisma técnica que se utilizó con el gato, podemos demostrar el procesamiento de la entradaestándar directamente desde el

267

Page 304: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 304/571

Ordenar file1.txt file2.txt file3.txt> final_sorted_list.txt

20  - Procesamiento

de Texto teclado:

Después de introducir el comando, escribimos las letras "C", "B" y "A", seguido de nuevo porCtrl-d para indicar fin de archivo. A continuación, ver el archivo resultante y vemos que laslíneas aparecen ahora en forma ordenada.

Desde especie puede aceptar múltiples archivos en la línea de comandos como argumentos, esposible combinar varios archivos en un todo ordenado. Por ejemplo, si tuviéramos tresarchivos de texto y quería combinarlos en un único archivo ordenado, podríamos hacer algo

como esto:

[Me @ linuxbox ~] $ Sort> foo.txt

 c b un [Me @ linuxbox ~] $ Foo.txt gato un b c 

Page 305: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 305/571

 

clase tiene varias opciones interesantes. Aquí está una lista parcial:Tabla 20-1:  Opciones ordenar Común 

Opción Largo Opción Descripción-b - - i g n o r e l íd e r - e s p a c i o s e n

b l a n c oPor defecto, la clasificación se realizaen toda la línea, comenzando con elprimer carácter de la línea. Esta

opción hace que tipo de ignorar losespacios iniciales de las líneas ycalcula la clasificación basada en laprimera no está en blanco en la línea.

-f - - ig nore casoHace que la clasificación entrema úsculas minúsculas.

-n - -numeric - t ipoRealiza la clasificación basan en laevaluación numérica de una cadena.El uso de esta opción permite ordenar

que se realice en los valores numéricosen lugar de valores alfabéticos.

268

Page 306: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 306/571

 

Aunque la mayor parte de las opciones anteriores son bastante explica por sí mismo, algunosno lo son. En primer lugar, echemos un vistazo a la opción -n, que se utiliza para laclasificación numérica. Con esta opción, es posible ordenar los valores basados en valoresnuméricos. Podemos demostrar esto mediante la clasificación de los resultados del comandodu para determinar los mayores usuarios de espacio en disco. Normalmente, el comando durecoge los resultados de un resumen en orden nombre de ruta:

En este ejemplo, canalizar los resultados en la cabeza para limitar los resultados a las diez

primeras líneas. Podemos producir una lista ordenada numéricamente para mostrar los diezmayores consumidores de espacio de esta manera:

269

Revisando algunos viejos amigos-r - - reverse

Ordenar en orden inverso. Losresultados son en orden descendenteen lugar de orden ascendente.

-k - - k e y = f i e l d l [ , c a m p o 2 ] Ordenar basado en un campo clave seencuentra desde fieldl al campo2 en

lugar de toda la línea. Véase la

-m --mergeTratar a cada argumento como elnombre

de un archivo preclasificado. Combinar múltiples archivos en un solo resultado ordenados

sin realizar ninguna selección adicional.-o - -ou tput = arch i vo

Enviar salida ordenada a presentar enlugar de la salida estándar.

-t - - fi el d -s ep a r a do r = C ha r Defina el campo-separadorpersonaje. Por camposseparados por espacios o tabuladores.

[Me @ linuxbox ~] $ du -s / usr / share / * | cabeza  252  / Usr / share / aclocal 96  / Usr / share / acpi-support 8  / Usr / share / adduser  196  / Usr / share / alacarte 344  / Usr / share / alsa 8  / Usr / share / alsa-base 12488  / Usr / share / anthy 8  / Usr / share / apmd 21440  / Usr / share / app-install 48  / Usr / share / solicitud-registro 

Page 307: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 307/571

 

Mediante el uso de las opciones -NR, producimos un tipo numérico inverso, con los valoresmás grandes que aparece por primera vez en los resultados. Este tipo funciona porque losvalores numéricos se producen al comienzo de cada línea. Pero ¿qué pasa si queremos ordenaruna lista en base a un valor que se encuentra dentro de la línea? Por ejemplo, los resultados deun ls -l:

Haciendo caso omiso, por el momento, que ls pueden ordenar sus resultados por tamaño,podríamos usar sort para ordenar esta lista por tamaño del archivo, así:

270

20 - Procesamiento de Texto

[Me @ linuxbox ~] $ du -s / usr / share / * | sort -nr | cabeza  509940  / Usr / share / locale-langpack 242660  / Usr / share / doc 197560  / Usr / share / fonts 179144  / Usr / share / gnome 146764  / Usr / share / myspell 

144304  / Usr / share / gimp 135880  / Usr / share / dict 76508  / Usr / share / icons 68072  / Usr / share / apps 62844  / Usr / share / foomatic 

[Me @ linuxbox ~] $ ls -l / usr / bin | altura total de 152.948-rwxr-xr-x  1  raíz  raíz  34824 2008-04-04  02  42  [ -rwxr-xr-x  1  raíz  raíz  101556 2007-11-27  06  08  a2p -rwxr-xr-x  1  raíz  raíz  13036 2008-02-27  08  22  aconnect -rwxr-xr-x  1  raíz  raíz  10552 2007-08-15  10  34  acpi -rwxr-xr-x  1  raíz  raíz  3800 2008-04-14  03  51  acpi_fakekey -rwxr-xr-x  1  raíz  raíz  7536 2008-04-19  00  19  acpi_listen -rwxr-xr-x  1  raíz  raíz  3576 2008-04-29  07  57  addpart -rwxr-xr-x  1  raíz  raíz  20808 2008-01-03  18  02  addr2line -rwxr-xr-x  1  raíz  raíz  489704 2008-10-09  17  02  adept_batch 

[Me @ linuxbox ~] $ ls -l / usr / bin | sort -k -nr 5 | cabeza -rwxr-xr-x  1  raíz  raíz  8234216 2008-04-07  17  42  inkscape -rwxr-xr-x  1  raíz  raíz  8222692 2008-04-07  17  42  inkview -rwxr-xr-x  1  raíz  raíz  3746508 2008-03-07  23  45  gimp-2.4 -rwxr-xr-x  1  raíz  raíz  3654020 2008-08-26  16  16  quanta -rwxr-xr-x  1  raíz  raíz  2928760 2008-09-10  14  31  gdbtui -rwxr-xr-x  1  raíz  raíz  2928756 2008-09-10  14  31  gdb -rwxr-xr-x  1  raíz  raíz  2602236 2008-10-10  12  56  neto -rwxr-xr-x

  1 raíz

 raíz

 2304684

 2008-10-10  12 56

 rpcclient

 -rwxr-xr-x  1  raíz  raíz  2241832 2008-04-04  05  56  aptitud -rwxr-xr-x  1  raíz  raíz  2202476 2008-10-10  12  56  smbcacls 

Page 308: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 308/571

William Shotts

-rwxr-xr-x 1 root root 8234216 2008-04-07 17:42 inkscape

Revisando algunos viejos amigos

Muchos usos de tipo implican el tratamiento de datos tabulares, como los resultados de las lscomando anterior. Si aplicamos la terminología de bases de datos para la tabla de arriba,diríamos que cada fila es un registro y cada registro que consiste en múltiples campos, comolos atributos de archivo, número de enlaces, nombre de archivo, tamaño del archivo y así

sucesivamente. especie es capaz de procesar los campos individuales. En términos de base dedatos, podemos especificar uno o más campos clave para usar como claves de ordenación. Enel ejemplo anterior, especificamos los n y r opciones para llevar a cabo una especie numéricoinverso y especificar -k 5 para hacer una especie utilizar el quinto campo como la clave para laclasificación.

La opción k es muy interesante y tiene muchas características, pero primero tenemos quehablar de cómo define especie campos. Consideremos un archivo de texto muy simple que

consiste en una sola línea que contiene el nombre del autor:

Por defecto, se ve una especie de esta línea tiene dos campos. El primer campo contiene loscaracteres:

"William"

y el segundo campo contiene los caracteres:

"Shotts"

lo que significa que los caracteres de espacio en blanco (espacios y tabulaciones) se utilizancomo delimitadores entre campos y que los delimitadores se incluyen en el campo cuando serealiza la clasificación.

Mirando de nuevo en una línea desde nuestra salida de ls, podemos ver que una línea contieneocho campos y que el quinto campo es el tamaño de archivo:

Para nuestra próxima serie de experimentos, vamos a considerar el siguiente archivo quecontiene la historia de las tres distribuciones de Linux más populares lanzados entre 2006 y2008. Cada línea del archivo tiene tres campos: el nombre de la distribución, número deversión y fecha de lanzamiento en MM / DD / AAAA formato:

271

SUSE  10.2 12/07/2006 Fedora  10  11/25/2008 SUSE  11.0 06.19.2008 Ubuntu  8.04 24.04.2008 Fedora  8  11/08/2007 SUSE  10.3 10/04/2007 

Page 309: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 309/571

 

Con un editor de texto (tal vez vim), vamos a entrar en estos datos y el nombre del archivotros.txt pantalla resultante.

A continuación, vamos a tratar de clasificar el archivo y observe los resultados:

Bueno, funcionó en su mayoría. El problema se produce en la clasificación de los números deversión de Fedora. Puesto que un "1" viene antes de un "5" en el juego de caracteres, la versión"10" termina en la parte superior, mientras que la versión "9" cae al fondo.

Para solucionar este problema vamos a tener que ordenar en varias claves. Queremos realizaruna especie alfabético en el primer campo y luego una ordenación numérica en el segundocampo. tipo permite varias instancias de la opción -k para que múltiples claves de ordenaciónse pueden especificar. De hecho, una llave puede incluir una variedad de campos. Si no se

especifica ningún rango (como ha sido el caso con nuestros ejemplos anteriores), utiliza unaclave de clase que comienza con el campo especificado y se extiende hasta el final de la línea.Aquí es la sintaxis para nuestra clase multi-clave:

272

20 - Procesamiento de Texto

Ubuntu  6.10 10/26/2006 Fedora  7  31.05.2007 Ubuntu  7.10 10/18/2007 Ubuntu  7.04 04/19/2007 SUSE  10.1 05/11/2006 Fedora  6  10/24/2006 

Fedora  9  13.05.2008 Ubuntu  6.06 06/01/2006 Ubuntu  8.10 10/30/2008 Fedora  5  03.20.2006 

[Me @ linuxbox ~] $ sort distros.txt 

Fedora  10  11/25/2008 Fedora  5  03.20.2006 Fedora  6  10/24/2006 Fedora  7  31.05.2007 Fedora  8  11/08/2007 Fedora  9  13.05.2008 SUSE  10.1 05/11/2006 SUSE  10.2 12/07/2006 SUSE  10.3 10/04/2007 SUSE  11.0 06.19.2008 Ubuntu  6.06 06/01/2006 Ubuntu  6.10 10/26/2006 Ubuntu  7.04 04/19/2007 Ubuntu  7.10 10/18/2007 Ubuntu  8.04 24.04.2008 Ubuntu  8.10 10/30/2008 

Page 310: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 310/571

 

Aunque hemos utilizado la forma larga de la opción por la claridad, -k 1,1 -k 2n seríaexactamente equivalente. En la primera instancia de la opción fundamental, especificamos unaserie de campos a incluir en la primera clave. Ya que queríamos limitar el tipo de sólo elprimer campo, especificamos 1,1 lo que significa "comenzar en el campo uno y el final en elcampo de uno." En el segundo caso, especificamos 2n, lo que significa que el campo 2 es laclave de ordenación y que la especie debe ser numérico. Una letra de opción puede serincluido al final de un especificador de clave para indicar el tipo de especie a realizar. Estasletras de opciones son las mismas que las opciones globales para el programa tipo: b (ignorarespacios a la izquierda), n (tipo numérico), R (marcha atrás especie), y así sucesivamente.

El tercer campo en nuestra lista contiene una fecha en un formato incómodo para laclasificación. En los equipos, las fechas se suelen formateados con el fin AAAA-MM-DD para

hacer la clasificación cronológica fácil, pero la nuestra están en el formato americano de MM /DD / AAAA. ¿Cómo podemos clasificar esta lista en orden cronológico?

Afortunadamente, una especie proporciona una manera. La opción de clave permite laespecificación de las compensaciones dentro de los campos, por lo que podemos definir clavesdentro de los campos:

273

Revisando algunos viejos amigos

[Me @ linuxbox ~] $ sort --key = 1,1 --key = 2n distros.txt Fedora  5  03.20.2006 Fedora  6  10/24/2006 Fedora  7  31.05.2007 Fedora  8  11/08/2007 Fedora  9  13.05.2008 

Fedora  10  11/25/2008 SUSE  10.1 05/11/2006 SUSE  10.2 12/07/2006 SUSE  10.3 10/04/2007 SUSE  11.0 06.19.2008 Ubuntu  6.06 06/01/2006 Ubuntu  6.10 10/26/2006 Ubuntu  7.04 04/19/2007 Ubuntu  7.10 10/18/2007 Ubuntu  8.04 24.04.2008 Ubuntu  8.10 10/30/2008 

[Me @ linuxbox ~] $ sort -k 3.7nbr -k -k 3.1nbr 3.4nbr distros.txt Fedora  10  11/25/2008 Ubuntu  8.10 10/30/2008 SUSE  11.0 06.19.2008 Fedora  9  13.05.2008 Ubuntu  8.04 24.04.2008 Fedora  8  11/08/2007 Ubuntu  7.10 10/18/2007 SUSE  10.3 10/04/2007 Fedora  7  31.05.2007 

Page 311: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 311/571

20 - Procesamiento de Texto

Ubuntu  7.04 04/19/2007 SUSE  10.2 12/07/2006 Ubuntu  6.10 10/26/2006 Fedora  6  10/24/2006 Ubuntu  6.06 06/01/2006 SUSE  10.1 05/11/2006 Fedora  5  03.20.2006 [Me @ linuxbox ~] $ cabeza / etc / passwdroot: x: 0: 0: root: / root: / bin / bashdemonio: x: 1: 1: demonio: / usr / sbin: / bin / shbin: x: 2: 2: bin: / bin: / bin / sh

sys: x: 3: 3: sys: / dev: / bin / shsincronización: x: 4: 65534: sincronización: / bin: /bin / sync

 juegos: x: 5: 60: juegos: / usr / juegos: / bin / shhombre: x: 6: 12: hombre: / var / cache / man: / bin /shlp: x: 7: 7: lp: / var / spool / lpd: / bin / shmail: x: 8: 8: e: / var / mail: / bin / shnoticia: x: 9: 9: noticias: / var / spool / news: / bin /sh

[Me @ linuxbox ~] $ sort -t ':' -k 7 / etc / passwd | cabeza  me: x: 1001: 1001: Yo Mismo ,,,: / home / me: / bin / bashroot: x: 0: 0: root: / root: / bin / bashdhcp: x: 101: 102 :: / inexistente: / bin / falseGDM: x: 106: 114: Gnome Display Manager: / var / lib / gdm: / bin / false HPLIP: x:104: 7: HPLIP usuario del sistema ,,,: / var / run / HPLIP: / bin / false klog : x: 103:104 :: / home / klog: / bin / false messagebus: x: 108: 119 :: / var / run / dbus: / bin /false polkituser: x: 110: 122: PolicyKit ,,,: / var / run / PolicyKit: / bin / false

Al especificar -k 3,7 instruimos especie utilizar una clave de clasificación que comienza en elcarácter séptima dentro del tercer campo, que corresponde al inicio del año. Del mismo modo,especificamos -k 3.1 y 3.4 -K para aislar las partes de mes y día de la fecha. También vamos a

añadir los n y r opciones para lograr una ordenación numérica inversa. La opción B se incluyepara suprimir los espacios iniciales (cuyo número varía de una línea a otra, lo que afecta elresultado de la especie) en el campo de fecha.

Algunos archivos no utilizan tabulaciones y espacios como delimitadores de campo; porejemplo, el archivo / etc / passwd:

Los campos de este archivo están delimitadas con dos puntos (:), así que ¿cómo podemosresolver este archivo usando un campo clave? especie proporciona la opción -t para definir elcarácter separador de campo. Para ordenar el archivo passwd en el séptimo campo (shell pordefecto de la cuenta), podríamos hacer esto:

274

Page 312: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 312/571

 

Revisando algunos viejosamigos

pulso: x: 107: 116: demonio de PulseAudio ,,,: / var / / impulso ejecutar: / bin /false

Al especificar el carácter de dos puntos como separador de campo, podemos clasificar en elséptimo campo.

UniqEn comparación a ordenar, el programa Uniq es un peso ligero. Uniq realiza una tareaaparentemente trivial. Cuando se administra un archivo ordenado (incluyendo la entradaestándar), que elimina las líneas duplicadas y envía los resultados a la salida estándar. Amenudo se utiliza en conjunción con tipo para limpiar la salida de duplicados.

Sugerencia: Mientras Uniq es una herramienta de Unix tradi cional amenudo se utiliza con clase, la versión GNU de especie soporta una

opción -u, que elimina los duplicados de la salida ordenada.  Vamos a hacer un archivo de textopara probar esto:

[Me @ linuxbox ~] $ cat> foo.txtunbcunbc

Recuerde que debe pulsar Ctrl-d para terminar la entrada estándar. Ahora, si corremos Uniqen nuestro archivo de texto:

[Me @ linuxbox ~] $ foo.txt Uniqunbcunbc

los resultados no son diferentes de nuestro archivo original; los duplicados no se quitaron.Para Uniq hacer realidad su trabajo, la entrada debe estar clasificado en primer lugar:

275

Page 313: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 313/571

20 - Procesamiento de Texto

[Me @ linuxbox un b c 

~] $ Sort foo.txt | Uniq 

Esto es porque Uniq sólo elimina las líneas duplicadas que son adyacentes entre sí. Uniq

tiene varias opciones. Éstos son los más comunes: 

Tabla 20-2: Opciones uniq comunes Opción Descripción-c

Salida de una lista de las líneas duplicadas precedido por el número deveces que se produce la línea. 

-d Sólo salida repite líneas, en lugar de líneas únicas.  f n No haga caso de n campos principales en cada línea. Los campos están

separados por espacios en blanco, ya que son en especie; Sin embargo,a diferencia de clase, Uniq tiene ninguna opción para configurar un

- i Ignorar caso durante las comparaciones de línea. 

- s n Salta (ignorar) los n caracteres principales de cada línea. - u Sólo salida líneas únicas. Este es el valor predeterminado. [Me @ linuxbox ~] $ sort foo.txt | Uniq -c 

2 a2 b2 c

 Aquí vemos Uniq utilizados para informar el número de duplicados que se encuentran en

nuestro archivo de texto, usando la opción -c:

Cortar y rebanar

Los siguientes tres programas que discutiremos se utilizan para pelar columnas de texto de losarchivos y se recombinan en formas útiles.

cortadaEl programa de corte se utiliza para extraer una sección de texto de una línea de salida y laextrae 276

Page 314: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 314/571

[Me @ linuxbox ~] $ cat -A distros.txt SUSEAI10.2AI12 / 07/2006 $FedoraAI10AI11 / 25/2008 $SUSEAI11.0Ai06 / 19/2008 $UbuntuAI8.04AI04 / 24/2008 $FedoraAi8Aiii / 08/2007 $SUSEAI10.3AI10 / 04/2007 $UbuntuAI6.10AI10 / 26/2006 $FedoraAi7Ai05 / 31/2007 $UbuntuAI7.10AI10 / 18/2007 $

UbuntuAI7.04AI04 / 19/2007 $SUSEAI10.1AI05 / II / 2006 $FedoraAi6Aii0 / 24/2006 $FedoraAi9Ai05 / 13/2008 $

277

Como podemos ver, la forma de corte extractos de texto es bastante inflexible. corte se utilizamejor para extraer texto de archivos que se producen por otros programas, en lugar de textoescrito directamente por los seres humanos. Vamos a echar un vistazo a nuestro archivodistros.txt para ver si está "limpiar" lo suficiente como para ser un buen ejemplar paranuestros ejemplos de corte. Si utilizamos gato con la opción -A, podemos ver si el archivo

sección a la salida estándar. Se puede aceptar múltiples argumentos de archivo o entrada de laentrada estándar.

Especificación de la sección de la línea que se extrae es algo torpe y se especifica el uso de lassiguientes opciones:

Tabla 20-3: cortar Opciones de selección 

Opción Descripciónlista_caracteres -c

Se extrae la porción de la línea definida por lista_caracteres. Lalista puede consistir en uno o más rangos numéricos separados porcomas.

-f field_listExtracto de uno o más campos de la línea definida por field_list. Lalista puede contener uno o más campos o rangos de campo

separados por comas.delim_char -d Cuando se especifica -f, use delim_char como el carácter dedelimitación de campo. Por defecto, los campos deben estarseparados por un solo carácter de tabulación.

- - c o m p l e m e n t Extraer toda la línea de texto, excepto para aquellas partesespecificadas por -c y / o - f.

Cortar y rebanar

Page 315: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 315/571

cumple con nuestros requisitos de campos separados por tabuladores:

Page 316: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 316/571

Ubuntu ^ I6.06AI06 / 01/2006 $UbuntuAI8.10AI10 / 30/2008 $FedoraAI5AI03 / 20/2006 $

[Me @ linuxbox ~] $ corté -f 3 distros.txt 12/07/200611/25/200806.19.200824.04.200811/08/200710/04/200710/26/200631.05.200710/18/200704/19/200705/11/200610/24/2006

13.05.200806/01/200610/30/200803.20.2006

20  - Procesamiento de Texto

Se ve bien. No hay espacios incrustados, sólo caracteres de un solo tabulador entre los campos.Dado que el archivo utiliza pestañas en lugar de espacios, vamos a utilizar la opción -f paraextraer un campo:

Debido a que nuestros archivos distros es delimitado por tabuladores, lo mejor es utilizar

corte para extraer los campos en lugar de caracteres. Esto es porque cuando un archivo esdelimitado por tabuladores, es poco probable que cada línea contendrá el mismo número decaracteres, lo que hace el cálculo de posiciones de los caracteres dentro de la línea de difícil oimposible. En nuestro ejemplo anterior, sin embargo, ahora hemos extraído un campo quecontiene los datos por suerte de idéntica longitud, por lo que podemos mostrar cómo funcionala extracción de caracteres mediante la extracción del año a partir de cada línea:

278

[Me @ linuxbox ~] $ corté -f 3 distros.txt cortar -c 7-10  200620082008

20082007200720062007200720072006

Page 317: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 317/571

 

Cortar y rebanar

2006200820062008

2006

Mediante la ejecución de cortar por segunda vez en nuestra lista, somos capaces de extraerposiciones de caracteres de 7 a 10, que corresponde al año en nuestro campo de fecha. Lanotación 7-10 es un ejemplo de un rango. La página de manual de corte contiene unadescripción completa de cómo se pueden especificar rangos.

Ampliación Tabs

Nuestro archivo distros.txt está muy bien formateado para campos de extracciónutilizando corte. Pero lo que si queríamos un archivo que podría ser totalmentemanipulado con el corte por los personajes, en lugar de los campos? Esto nosrequeriría para reemplazar los caracteres de tabulación en el archivo con elcorrespondiente número de espacios. Afortunadamente, el paquete GNU Coreutilsincluye una herramienta para eso. Nombrado ampliar, este programa acepta uno omás argumentos de archivo o entrada estándar, y emite el texto modificado a la salidaestándar.Si procesamos nuestro archivo distros.txt con ampliar, podemos utilizar el -c cortepara extraer cualquier rango de caracteres del archivo. Por ejemplo, podríamosutilizar el siguiente comando para extraer el año de la liberación de nuestra lista,

mediante la ampliación del archivo y el uso de corte para extraer todos los personajesde la vigésimo tercera posición al final de la línea:[Me @ linuxbox ~] $ ampliar distros.txt | cortar -c 23- Coreutils también ofrece el programa unexpand sustituir pestañas para espacios.

Al trabajar con campos, es posible especificar un delimitador de campo diferente en lugar delcarácter de tabulación. Aquí vamos a extraer el primer campo del archivo / etc / passwd:

[Me @ linuxbox ~] $ cut -d ':  ' -f 1 / etc / passwd | cabeza  raíz demonio 

papelera sys sincronizar  

 juegos hombre lp 

279

Page 318: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 318/571

correonoticias

[Me @ linuxbox ~] $ sort -k 3.7nbr -k -k 3.1nbr 3.4nbr distros.txt> dis tros por date.txt  

20 - Procesamiento de Texto

El uso de la opción -d, somos capaces de especificar el carácter de dos puntos comodelimitador de campo.

pastaEl comando de pegar hace lo contrario de corte. En lugar de la extracción de una columna detexto de un archivo, se añade una o más columnas de texto en un archivo. Lo hace mediante lalectura de varios archivos y la combinación de los campos que se encuentran en cada archivoen un único flujo en la salida estándar. Al igual que cortar, pegar acepta múltiples argumentosde archivo y / o la entrada estándar. Para demostrar cómo funciona la pasta, vamos a realizaruna cirugía en nuestro archivo distros.txt para producir una lista cronológica de lasliberaciones.

A partir de nuestro trabajo anterior con clase, primero elaborar una lista de distribucionesordenadas por fecha y almacenar el resultado en un archivo llamado distros por date.txt:

A continuación, vamos a utilizar corte para extraer los dos primeros campos del archivo (elnombre y la versión de la distro), y la tienda que se traducen en un archivo llamadodistro-versions.txt:

La pieza final de la preparación es extraer las fechas de lanzamiento y almacenarlos en un

archivo denominado distro-dates.txt:

2 8 0

[Me @ linuxbox ~] $ cortar -f 1,2 distros-BY-date.txt> distros-versions.t  xt  [Me @ linuxbox ~] $ cabeza distros-versions.txt  

Fedora  10 Ubuntu  8.10 SUSE  11.0 Fedora  9 Ubuntu  8.04 Fedora  8 Ubuntu  7.10 SUSE  10.3 Fedora  7 Ubuntu  7.04 

Page 319: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 319/571

[Me @ linuxbox ~] $ corté -f 3 distros por date.txt> distros-dates.txt [me @ linuxbox ~]$ cabeza distros-dates.txt 11/25/200810/30/200806.19.200813.05.200824.04.200811/08/200710/18/200710/04/200731.05.200704/19/2007

Cortar y rebanar

Ahora tenemos las piezas que necesitamos. Para completar el proceso, utilice pasta para ponerla columna de fechas por delante de los nombres y versiones de distribuciones, creando asíuna lista cronológica. Esto se hace simplemente mediante el uso de pasta y ordenando susargumentos en la disposición deseada:

unirse

En cierto modo, es como unirse a pegar ya que agrega columnas a un archivo, sino que utilizauna forma única de hacerlo. Una unión es una operación por lo general asociados con lasbases de datos relacionales, donde los datos de varias tablas con un campo de clavecompartida se combina para formar un resultado deseado. El programa unirse realiza lamisma operación. Se une a los datos de varios archivos en función de un campo de clavecompartida.

Para ver cómo se utiliza una operación de combinación en una base de datos relacional,

imaginemos una pequeña base de datos que consta de dos mesas, cada una contiene un soloregistro. La primera tabla, llamada

281

[Me @ linuxbox ~] $ pegar distros-dates.txt distros-versions.txt 11/25/2008  Fedora  10 10/30/2008  Ubuntu  8.10 06.19.2008  SUSE  11.0 13.05.2008  Fedora  9 24.04.2008  Ubuntu  8.04 11/08/2007  Fedora  8 10/18/2007  Ubuntu  7.10 10/04/2007  SUSE  10.3 31.05.2007  Fedora  7 04/19/2007  Ubuntu  7.04 12/07/2006  SUSE  10.2 10/26/2006  Ubuntu  6.10 10/24/2006  Fedora  6 06/01/2006  Ubuntu  6.06 05/11/2006  SUSE  10.1 03.20.2006  Fedora  5 

Page 320: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 320/571

[Me @ linuxbox ~] $ corte -f 1,1 distros-BY-date.txt> distros-nombres.txt [me @ linuxbox ~]$ pegar distros-dates.txt distros-nombres.txt> nombres clave distros- .txt [Me @ linuxbox ~] $ cabeza distros-clave-nombres.txt 11/25/2008 Fedora Ubuntu 10/30/2008 06/19/2008 05/13/2008 SUSE Fedora Ubuntu04/24/2008 11/08/2007 10/18/2007 Fedora Ubuntu 10/04/2007 SUSE 05 / 31/200704/19/2007 Fedora Ubuntu

20 - Procesamiento de Texto

CLIENTES, tiene tres campos: un número de cliente (CUSTNUM), en primer lugar el nombredel cliente (FNAME), nombre y apellido del cliente (LNAME):

CUSTNUM FNAME LNAME

4 6 8 1 9 3 4 J u a n H e r r e r o

La segunda tabla se llama PEDIDOS y contiene cuatro campos: un número de orden (orden-NUM), el número de clientes (CUSTNUM), la cantidad (QUAN), y el artículo pedido (TEMA).

N u m O r d e n CUSTNUM QUAN TEMA

3 0 1 4 9 5 3 3 0 5 4 6 8 1 9 3 4 1 A z u l W i d g e t

Tenga en cuenta que las dos tablas comparten el CUSTNUM campo. Esto es importante, yaque permite una relación entre las tablas.

Realizar aj oin operación nos permitiría combinar los campos en las dos tablas para lograr un

resultado útil, tales como la preparación de una factura. Utilizando los valores coincidentes enlos campos CUSTNUM de ambas tablas, una operación de combinación puede producir losiguiente:

FNAME LNAME QUAN TEMA

 J u a n H er r e r o 1 B l u e Wi d g e t

Para demostrar el programa de unirse, tendremos que hacer un par de archivos con una clavecompartida. Para ello, vamos a utilizar nuestras distribuciones por date.txt archivo. A partirde este archivo, vamos a construir dos archivos adicionales, uno que contienen las fechas delanzamiento (que será nuestra clave compartida para esta demostración) y los nombres deliberación:

y el segundo archivo, que contiene las fechas de lanzamiento y los números de versión:

282

Page 321: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 321/571

[Me @ linuxbox ~] $ corte -f 2,2 distros-BY-date.txt> distros-vernums.txt [me @ linuxbox ~]$ pegar distros-dates.txt distros-vernums.txt> distro s-teclado vernums.txt [Me @ linuxbox ~] $ cabeza distros-clave-vernums.txt 11/25/2008 1010/30/200819/06/2008 8,1011,0 05/13/2008 904/24/2008 8,0411/08/2007 810/18/200710/04/2007 7.1010.3 05 / 31/20077 04/19/2007 7.04

[Me @ linuxbox ~] uno a $ distros-clave-nombres.txt distros-clave-vernums.txt | cabeza  11/25/2008 Fedora 1010/30/2008 Ubuntu 8.1019.06.2008 SUSE 11.005/13/2008 Fedora 904/24/2008 Ubuntu 8.04

11/08/2007 Fedora 810/18/2007 Ubuntu 7.10 10 /04/2007 SUSE 10.331/05/2007 Fedora 704/19/2007 Ubuntu 7.04

Cortar y rebanar

Ahora tenemos dos archivos con una clave compartida (el campo "fecha de lanzamiento"). Esimportante señalar que los archivos deben ser ordenados en el campo clave para unirsefuncione correctamente.

Tenga en cuenta también que, por defecto, unirse utiliza un espacio en blanco comodelimitador de campo de entrada y un único espacio como delimitador de campo de salida.Este comportamiento puede ser modificado mediante la especificación de las opciones.Consulte la página del manual se unen para obtener más información.

La comparación de texto

A menudo es útil para comparar las versiones de los archivos de texto. Para losadministradores de sistemas y desarrolladores de software, esto es particularmenteimportante. Un administrador del sistema puede, por ejemplo, la necesidad de comparar unarchivo de configuración existente a una versión anterior de diagnosticar un problema del

sistema. Del mismo modo, un programador frecuentemente necesita ver qué cambios se hanhecho a los programas a través del tiempo.

283

Page 322: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 322/571

 

20 - Procesamiento deTexto

comm

El programa comm compara dos archivos de texto y muestra las líneas que son exclusivas decada uno y las líneas que tienen en común. Para demostrarlo, vamos a crear dos archivos de

texto casi idénticos utilizando gato:

[Me @ linuxbox ~] $ cat> file1.txtunbcd[Me @ linuxbox ~] $ cat> file2.txtbcde

A continuación, vamos a comparar los dos archivosusando comm:

[Me @ linuxbox ~] $ comm file1.txt file2.txt un

bcd

e

Como podemos ver, comm produce tres columnas de salida. La primera columna contiene laslíneas exclusivas para el primer argumento de archivo; la segunda columna, las líneasexclusivas para el segundo argumento de archivo; la tercera columna contiene las líneascompartidas por ambos archivos. comm soporta opciones en la forma -n donde n es 1, 2 ó 3.Cuando se usan, estas opciones especifican que co- lumna (s) de suprimir. Por ejemplo, si loúnico que queríamos a la salida de las líneas compartidas por ambos archivos, queremossuprimir la salida de las columnas uno y dos:

[Me @ linuxbox ~] $ comm -12 file1.txt file2.txt bc

d

diffAl igual que el programa de comm, diff se utiliza para detectar las diferencias entre archivos.Sin embargo,

284

Page 323: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 323/571

[Me @ linuxbox ~] $ diff -c file1.txt file2.txt 

La comparación de texto

d i f f es una herramienta mucho más complejo, el apoyo a muchos formatos de salida y lacapacidad de procesar grandes colecciones de archivos de texto a la vez. diff es a menudoutilizado por los desarrolladores de software para examinar los cambios entre diferentes

versiones del código fuente del programa, y por lo tanto tiene la capacidad de examinar deforma recursiva los directorios de código fuente, a menudo se hace referencia como árboles decódigo fuente. Un uso común de diff es la creación de archivos diff o parches que sonutilizados por programas como el parche (que hablaremos en breve) para convertir unaversión de un archivo (o archivos) a otra versión.

Si usamos diff para mirar nuestros archivos de ejemplo anteriores:

En este formato, una serie es una lista separada por comas de la línea de salida y la línea final.Aunque este formato es la opción predeterminada (en su mayoría para el cumplimientoPOSIX y la compatibilidad hacia atrás con versiones tradicionales de Unix diff), que no es tanampliamente utilizado como otros, formatos opcionales. Dos de los formatos más populares

son el formato de contexto y el formato unificado.

Cuando se ve con el formato de contexto (la opción -c), vamos a ver esto:

2 8 5

[Me @ linuxbox1d0 <a 4A4 > E 

~] Diff  file1.txt file2.txt

vemos su estilo por defecto de la producción: una descripción concisa de las diferencias entrelos dos archivos. En el formato por defecto, cada grupo de cambios está precedido por uncomando de cambio en la forma de rango de operación rango para describir las posiciones ylos tipos de cambios necesarios para convertir el primer archivo en el segundo archivo:

Tabla 20-4: Comandos diff Cambio 

Cambio Descripciónr1ar2 Añada las líneas en el r2 posición en el segundo archivo de la r1 posición

en el primer archivo.r1cr2

Cambiar (reemplazar) las líneas en posición r1 con las líneas en el r2posición en el segundo archivo.

r1dr2 Eliminar las líneas en el primer archivo en la posición R1, que habríaaparecido en la gama r2 en el segundo archivo

Page 324: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 324/571

*** File1.txt 2008-12-23 06: 40: 13.000000000 -0500--- File2.txt 2008-12-23 06: 40: 34.000000000 -0500* * * * * * * * * * * * * * *

*** I 4 ****- A

B C D

--- 1,4 - - -b c d

+ E20 - Procesamiento de Texto

La salida comienza con los nombres de los dos archivos y sus marcas de tiempo. El primerarchivo está marcado con asteriscos y el segundo archivo se marca con guiones. A lo largo delresto del establecimiento, estos marcadores se significan sus respectivos archivos. Acontinuación, vemos grupos de cambios, incluyendo el número predeterminado de líneas decontexto que lo rodea. En el primer grupo, vemos:*** 1  4  ***

que indica las líneas 1 a 4 en el primer archivo. Más tarde vemos:

--- 1,4 -que indica las líneas 1 a 4 en el segundo archivo. Dentro de un grupo de cambio, las

líneas comienzan con uno de los cuatro indicadores:Tabla 20-5: diff Formato Contexto de Cambio Indicadores

Indicador Significadob l a n c o Una línea de muestra para el contexto. No indica una diferencia entre los

dos archivos.

- Una línea eliminado. Esta línea aparecerá en el primer archivo, pero noen el segundo archivo.

+ Una línea añadió. Esta línea aparecerá en el segundo archivo, pero no enel primer archivo.

! Una línea cambió. Se mostrarán las dos versiones de la línea, cada uno en su respectivasección del grupo de cambio.

El formatounificado con laopción -u

es similar al formato de contexto, pero es más concisa. Se especifica

286

Page 325: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 325/571

[Me @ linuxbox ~] $ diff -u file1.txt file2.txt --- File1.txt 2008-12-23 06: 40: 13.000000000 -0500+++ File2.txt 2008-12-23 06: 40: 34.000000000 -0500@@-1,4 +1,4@@-a

bcd

+ ELa comparación de texto

La diferencia más notable entre el contexto y formatos unificados es la eliminación de las

líneas duplicadas de contexto, por lo que los resultados de la formato unificado más cortosque los del formato de contexto. En nuestro ejemplo anterior, vemos las marcas de tiempo dearchivos como los del formato contexto, seguido de la cadena@@-1,4 +1,4@@. Esto indica laslíneas en el primer archivo y las líneas en el segundo archivo descrito en el grupo de cambio.A raíz de esto son las propias líneas, con los predeterminados de tres líneas de contexto. Cadalínea comienza con uno de los tres personajes posibles:

parche

El programa de parche se utiliza para aplicar los cambios a archivos de texto. Se acepta lasalida de diff y se utiliza generalmente para convertir versión anterior de los archivos en lasversiones más recientes. Vamos a considerar un ejemplo famoso. El kernel de Linux esdesarrollado por un equipo grande, poco organizada de los contribuyentes que presenten unflujo constante de pequeños cambios en el código fuente. El kernel de Linux se compone devarios millones de líneas de código, mientras que los cambios que se realizan por uncontribuyente a la vez son bastante pequeñas. No tiene sentido para un contribuyente a enviarcada desarrollador un árbol completo de fuentes del núcleo cada vez que se hace un pequeñocambio. En su lugar, se presenta un archivo diff. El archivo diff contiene el cambio de laversión anterior del kernel a la nueva versión con los cambios del contribuyente. El receptorentonces utiliza el programa de parche para aplicar el cambio a su propio árbol de códigofuente. El uso de diferencias / parche ofrece dos ventajas importantes:

1.  El archivo diff es muy pequeña, en comparación con el tamaño total del árbol decódigo fuente.

2.  El archivo diff muestra de forma concisa el cambio está hecho, lo que loscolaboradores de la

287

Tabla 20-6: diff unificado Formato Cambio Indicadores

Personaje Significadob l a n c o Esta línea es compartida por ambos archivos.

- Esta línea se eliminó desde el primer archivo.

+ Esta línea se añadió a la primera archivo.

Page 326: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 326/571

[Me @ linuxbox ~] $ diff -Naur file1.txt file2.txt> patchfile.txt [me @ linuxbox ~] $parche <patchfile.txt parches file1.txt archivo[Me @ linuxbox ~] $ file1.txt gatobcde

20 - Procesamiento de Texto

parche para evaluar rápidamente.

Por supuesto, diferencias / parche funcionará en cualquier archivo de texto, no sólo el códigofuente. Sería igualmente aplicable a los archivos de configuración o cualquier otro texto.

Para preparar un archivo diff para su uso con el parche, la documentación de GNU (véaseLecturas abajo) sugiere el uso de diff de la siguiente manera:

d i f f - N a u r a r c h i v o _ v ie j o n e w _ f i l e > d i f f _ f i l e  

Dónde archivo_viejo y new_file son o archivos individuales o directorios que contenganarchivos. La opción r soporta recursión de un árbol de directorios.

Una vez que el archivo diff se ha creado, podemos aplicarlo a parchear el archivo antiguo en elnuevo archivo:

p a r c h e <d i f f _ f i l e  

Vamos a demostrar con nuestro archivo de prueba:

En este ejemplo, creamos un archivo llamado patchfile.txt diff y luego utilizó el programa deparche para aplicar el parche. Tenga en cuenta que nosotros no tenemos que especificar unarchivo de destino al parche, como el archivo diff (en formato unificado) ya contiene losnombres de archivo en el encabezado. Una vez que se aplica el parche, se puede observar quefile1.txt ahora coincide file2.txt.

parche tiene un gran número de opciones, y hay programas de utilidades adicionales quepueden utilizarse para analizar y parches de edición.

Edición On The Fly

Nuestra experiencia con editores de texto ha sido en gran parte interactiva, lo que significaque nos movemos manualmente un cursor, a continuación, escriba los cambios. Sin embargo,hay formas no interactivas para editar texto también. Es posible, por ejemplo, para aplicar unaserie de cambios en varios archivos con un solo comando.

trEl programa tr se usa para transcribir caracteres. Podemos pensar en esto como una especie decarac-

288

Page 327: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 327/571

[Me @ linuxbox ~] $ echo "letras minúsculas" | tr az AZ Minúsculas

[Me @ linuxbox ~] $ echo "letras minúsculas" | tr [: lower:] A  AAAAAAAAA AAAAAAA

[Me @ linuxbox ~] $ tr --help

Edición On The Fly

carác- basada en búsquedas y reemplazar operación. Transliteración es el proceso de cambiode los personajes de un alfabeto a otro. Por ejemplo, la conversión de caracteres de minúsculas

a mayúsculas es transliteración. Podemos realizar una conversión de este tipo con tr de lasiguiente manera:

Como podemos ver, tr opera en la entrada estándar, y emite sus resultados en la salidaestándar. tr acepta dos argumentos: un conjunto de caracteres para convertir desde y unconjunto correspondiente de caracteres para convertir a. Los conjuntos de caracteres puedenexpresarse en una de tres maneras:

1.  Una lista enumerada. Por ejemplo, ABCDEFGHIJKLMNOPQRSTUVWXYZ

2.  Un intervalo de caracteres. Por ejemplo, A-Z. Tenga en cuenta que este método es a

veces sujetos a los mismos problemas que otros comandos, debido a la orden declasificación local, y por lo tanto se debe utilizar con precaución.

3.  Clases de caracteres de POSIX. Por ejemplo, [: upper:].

En la mayoría de los casos, ambos conjuntos de caracteres deben ser de la misma longitud; Sin

embargo, es posible para el primer conjunto sea más grande que la segunda, sobre todo siqueremos convertir varios caracteres a un solo carácter:

Además de transliteración, tr permite a los personajes simplemente se eliminarán del flujo deentrada. Al principio de este capítulo, discutimos el problema de la conversión de archivos detexto de MS-DOS al texto al estilo Unix. Para llevar a cabo esta conversión, los caracteres deretorno de carro tienen que ser eliminado de la final de cada línea. Esto se puede realizar contr como sigue:

tr -d '\ r' <dos_file> unix_file 

donde dos_file es el archivo que desea convertir y unix_file es el resultado. Esta forma delcomando utiliza la secuencia de escape \ r para representar el carácter de retorno de carro.

Para ver una lista completa de las secuencias y clases de personajes soportes TR, trate de:

289

Page 328: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 328/571

 

20 - Procesamiento deTexto

ROT13: El Anillo Decodificador No-Tan-Secreto

Un uso divertido de tr es llevar a cabo la codificación ROT13 de texto. ROT13 es untipo trivial de cifrado basado en una cifra de substitución simple. Llamando ROT13"cifrado" es ser generoso; "Ofuscación texto" es más preciso. A veces se utiliza en eltexto para ocultar contenido potencialmente ofensivo. El método simplemente muevecada personaje 13 lugares hasta el alfabeto. Dado que esta es la mitad del camino hastalos posibles 26 caracteres, que realiza el algoritmo por segunda vez en el texto lorestaura a su forma original. Para llevar a cabo esta codificación con tr: echo "textosecreto" | tr a-zA-Z n-za-MN-ZA-M frperg grkgRealizar el mismo procedimiento una segunda vez resultados en latraducción: echo "frperg grkg" | tr a-zA-Z n-za-MN-ZA-Mtexto secretoUna serie de programas de correo electrónico y los lectores de noticias de Usenet

admite la codificación ROT13. Wikipedia contiene un buen artículo sobre el tema:http://en.wikipedia.org/wiki/ROT13  

tr puede realizar otro truco, también. El uso de la opción -s, tr puede "exprimir" (borrar) loscasos repetidos de un personaje:

[Me @ linuxbox ~] $ echo "aaabbbccc" | tr -s ab   ABCCC

Aquí tenemos una cadena que contiene caracteres repetidos. Al especificar el conjunto "ab"para tr, eliminamos los repetidos casos de las letras en el conjunto, dejando el carácter quefalta de la serie ("c") sin cambios. Tenga en cuenta que los caracteres repetidos deben seradyacentes. Si no lo son:

[Me @ linuxbox ~] $ echo "abcabcabc" | tr -s ab  abcabcabc

la compresión no tendrá ningún efecto.

sedEl nombre es la abreviatura de sed editor de flujo. Se lleva a cabo la edición de texto en unflujo de texto, EI-

290

Page 329: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 329/571

[Me @ linuxbox ~] $ echo "frente" | sed 's / delante / atrás /'  espalda

[Me @ linuxbox ~] $ echo "frente" | sed 's_front_back_' espalda

[Me @ linuxbox ~] $ echo "frente" | '1s / delante / atrás /' sed espalda

Edición On The Fly

ther un conjunto de archivos especificados o entrada estándar. SED es un programa potente yalgo compleja (hay libros enteros al respecto), así que no lo cubrirá por completo aquí.

En general, la forma en que sed obras es que se da ya sea un solo comando de edición (en la

línea de comandos) o el nombre de un archivo de comandos que contiene varios comandos, y

luego lleva a cabo estos comandos en cada línea en el flujo de texto. Aquí está un ejemplo muysimple de sed en acción:

En este ejemplo, se producen una corriente de una sola palabra de texto usando el eco y eltubo en sed. sed, a su vez, lleva a cabo la instrucción de s / delante / atrás / en el texto en lacorriente y produce la salida "hacia atrás" como resultado. También podemos reconocer estecomando como parecido a la "sustitución" (buscar y reemplazar) de comandos en vi.

Los comandos de sed comienzan con una sola letra. En el ejemplo anterior, el comando desustitución está representado por la letra s, y es seguido por la búsqueda y reemplazarcadenas, separados por el carácter de barra como delimitador. La elección del carácterdelimitador es arbitraria. Por convención, se utiliza a menudo el carácter de barra, pero sed

aceptará cualquier carácter que sigue inmediatamente al comando como delimitador.Podríamos realizar el mismo comando de esta forma:

Al utilizar el carácter de subrayado inmediatamente después del comando, se convierte en el

delimitador. La capacidad de establecer el delimitador puede ser utilizado para hacer loscomandos más legible, como veremos más adelante.

La mayoría de los comandos de sed pueden ir precedidas de una dirección, que especifica quela línea (s) de la corriente de entrada será editado. Si se omite la dirección, entonces el

comando de edición se lleva a cabo en todas las líneas del flujo de entrada. La forma mássimple de dirección es un número de línea. Podemos añadir una a nuestro ejemplo:

Adición de la dirección 1 a nuestro comando hace que nuestro sustitución que se realice en el

primer

291

Page 330: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 330/571

[Me @ linuxbox ~] $ echo "frente" | '2s / delante / atrás /' sed  frente

20 - Procesamiento de Texto _________________________________

línea de nuestro flujo de entrada de una línea. Si especificamos otro número:

vemos que la edición no se lleva a cabo, ya que nuestro flujo de entrada no tiene una línea 2.

Las direcciones se pueden expresar de muchas maneras. Éstos son los más comunes:

Vamos a demostrar diferentes tipos de direcciones utilizando el archivo de distros.txtanteriormente en este capítulo. En primer lugar, una serie de números de línea:

292

Tabla 20-7: sed Dirección de notación

Dirección Descripción

n  Un número de línea donde n es un entero positivo.$ La última línea.

 / R e g e x p /   Líneas que coincidan con una expresión regular básica POSIX.Tenga en cuenta que la expresión regular está delimitada porcaracteres de barra. Opcionalmente, la expresión regular puede serdelimitado por un carácter alternativo, mediante la especificación dela expresión con \ cregexpc, donde c es un carácter alternativo.

a d d r l , a d d r 2   Una gama de líneas de ADDR1 a ADDR2, ambos inclusive. Lasdirecciones pueden ser cualquiera de las formas de direcciones

 p r i m e r p a s o ~   Haga coincidir la línea representada por el número primero, y luegocada línea subsiguiente a intervalos de paso. Por ejemplo 1 ~ 2 serefiere a cada línea impar, 5 ~ 5 se refiere a la quinta línea y cadaquinta línea a partir de entonces.

a d d r l , + n   ADDR1 Partido y las siguientes n líneas.d i r !   Coincidir con todas las líneas excepto addr, que pueden ser

cualquiera de las formas anteriores.

[Me @ linuxbox ~] $ sed -n '1,5p' distros.txt SUSE  10.2 12/07/2006 Fedora  10  11/25/2008 SUSE  11.0 06.19.2008 Ubuntu  8.04 24.04.2008 

Page 331: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 331/571

Fedora 8 11/08/2007

[Me @ linuxbox ~] $ sed -n '/ SUSE / p' distros.txt SUSE  10.2 12/07/2006 SUSE  11.0 06.19.2008 SUSE  10.3 10/04/2007 SUSE  10.1 05/11/2006 

Edición On The FlyEn este ejemplo, es la impresión de una serie de líneas, a partir de la línea 1 y continuando con

la línea 5. Para ello, utilizamos el comando p, que simplemente hace que una línea coincidenteque desea imprimir. Para que esto sea efectivo, sin embargo, debemos incluir la opción -n (la

opción de no auto-impresión) para causar sed no imprimir todas las líneas de formapredeterminada.

A continuación, vamos a tratar de una expresión regular:Con la inclusión de la expresión / SUSE normal / delimitada por barras, que son capaces de

aislar las líneas que lo contienen en forma muy similar a como grep.

Por último, vamos a tratar de negación mediante la adición de un signo de exclamación a ladirección (!):

Aquí vemos el resultado esperado: todas las líneas en el archivo excepto los emparejados porla expresión regular.

Hasta ahora, hemos visto dos de los comandos de edición de sed, s y p. Aquí está una lista máscompleta de los comandos básicos de edición:

Tabla 20-8: sed comandos de edición básicos

Comando Descripción

293

[Me @ linuxbox ~] $ sed -n '/ SUSE /! P' distros.txt Fedora  10  11/25/2008 Ubuntu  8.04 24.04.2008 Fedora  8  11/08/2007 Ubuntu  6.10 10/26/2006 Fedora  7  31.05.2007 Ubuntu  7.10 10/18/2007 Ubuntu  7.04 04/19/2007 Fedora  6  10/24/2006 Fedora  9  13.05.2008 

Ubuntu  6.06 06/01/2006 Ubuntu  8.10 10/30/2008 Fedora  5  03.20.2006 

Page 332: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 332/571

20 - Procesamiento de Texto= Número de línea actual de salida.

un Anexar texto después de la línea actual.d Borrar la línea actual.

yo Insertar texto en frente de la línea actual.

P Imprimir la línea actual. Por defecto, todos losgrabados de línea sed y sólo edita las líneas quecoincidan con una dirección especificada en el archivo.El comportamiento por defecto se puede anular

qSalir sed sin procesar cualquier más líneas. Si la opción-n no se especifica, la salida de la línea actual.

Q Salir sed sin procesar cualquier más líneas.s / regexp / reemplazo / Sustituya el contenido de sustitución donde se

encuentra regexp. reemplazo puede incluir el carácterespecial y, lo que es equivalente al texto acompañadode expresiones regulares. Además, la sustituciónpuede incluir las secuencias \ 1 a \ 9, que son loscontenidos de las subexpresiones correspondientes de

expresión regular. Para más información sobre esto,vea la discusión de las referencias de nuevo pordebajo. Después de la barra diagonal después delreemplazo, una bandera opcional se puede especificar

a / S E T L / c o n j u n t o 2   Realizar transliteración mediante la conversión decaracteres de SETL a los caracteres correspondientesen conjunto2. Tenga en cuenta que a diferencia de tr,sed requiere que ambos conjuntos sean de la misma

[Me @ linuxbox ~] $ sed 's / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {4 \} \ 

El comando s es, con mucho, el comando de edición más utilizado. Vamos a demostraralgunas de su poder mediante la realización de una edición en nuestro archivo distros.txt.

Discutimos antes de cómo el campo de fecha en distros.txt no estaba en un formato de"computadora-friendly". Si bien la fecha tiene el formato DD / MM / AAAA, que sería mejor(para facilitar la clasificación) si el formato fuera AAAA-MM-DD. Para realizar este cambio enel archivo con la mano sería a la vez mucho tiempo y propenso a errores, pero con sed, este

cambio se puede realizar en un solo paso:

294

Page 333: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 333/571

Edición On The Fly

      "      V

       G        O        /  \ 2 / 'distros.txt  

SUSE  10.2 2006-12-07 Fedora  10 2008-11-25 SUSE  11.0 2008-06-19 Ubuntu  8.04  2008-04-24 Fedora  8 2007-11-08 SUSE  10.3  2007-10-04 Ubuntu  6.10 2006-10-26 Fedora  7  2007-05-31 Ubuntu  7.10  2007-10-18 Ubuntu  7.04  2007-04-19 

SUSE  10.1 2006-05-11 Fedora  6 2006-10-24 Fedora  9  2008-05-13 Ubuntu  6.06  2006-06-01 Ubuntu  8.10 2008-10-30 Fedora  5  2006-03-20 

sed 's / regexp / reemplazo /' distros.txt  

[0-9] {2} / [0-9] {2} / [0-9] {4}$

Guau! Ahora que es un comando de feo aspecto. Pero funciona. En tan sólo un paso, hemoscambiado el formato de fecha en nuestro archivo. También es un ejemplo perfecto de por quélas expresiones regulares se refieren a veces en tono de broma como "de sólo escribir" medio.Podemos escribir, pero a veces no podemos leerlos. Antes de que nos sentimos tentados a huir

aterrorizados de este comando, echemos un vistazo a la forma en que fue construido. Enprimer lugar, sabemos que el comando tendrá esta estructura básica:

Nuestro siguiente paso es encontrar una expresión regular que aislará la fecha. Dado que es en

formato MM / DD / AAAA y aparece al final de la línea, podemos utilizar una expresióncomo esta:

que coincide con dos dígitos, una barra, dos dígitos, una barra, cuatro dígitos, y el final de lalínea. Así que se encarga de expresión regular, pero ¿qué pasa con el reemplazo? Para hacerfrente a esto, debemos introducir una nueva característica expresión regular que aparece enalgunas aplicaciones que utilizan BRE. Esta característica se llama de nuevo las referencias yfunciona así: Si la secuencia \ n aparece en reemplazo donde n es un número del 1 al 9, lasecuencia se referirá a la subexpresión correspondiente en la expresión regular anterior. Paracrear las subexpresiones, simplemente encerrarlos en paréntesis, así:

295

Page 334: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 334/571

 

20 - Procesamiento deTexto

([0-9] {2}) / ([0-9] {2}) / ([0-9] {4}) $

Ahora tenemos tres subexpresiones. La primera contiene el mes, la segunda contiene el día delmes, y el tercero contiene el año. Ahora podemos construir el reemplazo de la siguientemanera:

\ 3 \ 1-\ 2

lo que nos da el año, un guión, el mes, un guión, y el día. Ahora,

nuestro comando se parece a esto:

sed 's / ([0-9] {2}) / ([ 0-9] {2}) / ([0- 9] {4}) $ / \ 3 \ 1- \ 2 / ' distros.TXT

Tenemos dos problemas restantes. La primera es que las barras supletorias en nuestraexpresión regular confundirán sed cuando se trata de interpretar el comando s. La segunda esque, dado sed, por defecto, acepta expresiones regulares sólo básicos, varios de los personajesde nuestra expresión regular se tomará como literales, y no como metacaracteres. Podemosresolver estos dos problemas con una aplicación liberal de barras invertidas para escapar loscaracteres ofensivos:

sed 's / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ { 2 \} \) \ / \ ([0-9] \ {4 \} \) $ / \3 \ 1- \ 2 / 'dis tros.txt

Y ahí lo tienen!

Otra característica del comando s es el uso de banderas opcionales que pueden seguir lacadena de reemplazo. La más importante de ellas es la bandera g, que indica a sed que aplicala búsqueda y reemplazo global a una línea, no sólo a la primera instancia, que es el valorpredeterminado. He aquí un ejemplo:

[Me @ linuxbox ~] $ echo "aaabbbccc" | sed 's / b / B /'  aaabbbccc

Vemos que se llevó a cabo la sustitución, pero sólo en la primera instancia de la letra "b",mientras que los casos restantes se quedaron sin cambios. Al añadir el indicador g, somoscapaces de cambiar todos los casos:

296

Page 335: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 335/571

[Me @ linuxbox ~] $ echo "aaabbbccc" | sed 's / b / B / g'aaabbbccc

# Secuencia de comandos sed para producir distribuciones Linux informe

1 i \\

Distribuciones Linux Informe \s / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {4 \} \) $ / \ 3- \ 1- \2 /a / abcdefghijklmnopqrstuvwxyz / ABCDEFGHIJKLMNOPQRSTUVWXYZ/

Edición On The Fly

Hasta ahora, sólo hemos dado los comandos individuales de sed a través de la línea decomandos. También es posible construir comandos más complejos en un archivo de secuenciade comandos con la opción -f. Para demostrarlo, vamos a usar sed con nuestro archivodistros.txt para construir un informe. Nuestro informe contará con un título en la partesuperior, nuestras fechas modificadas, y todos los nombres de distribución convierte amayúsculas. Para ello, tendremos que escribir un guión, así que vamos a despedir a nuestro

editor de texto e introduzca el siguiente:

Vamos a salvar a nuestra secuencia de comandos sed como distros.sed y ejecutarlo así:

297

[Me @ linuxbox ~] $ sed -f distros.sed distros.txt

Distribuciones Linux Reportar

SUSE 1 0 . 2  2006-12-07FEDOR

 1 0   2008-11-25

SUSE 1 1 . 0  2008-06-19

UBUN  8.04 2008-04-24FEDOR 

8   2007-11-08SUSE 10.3 2007-10-04UBUN

 6 . 1 0  2006-10-26

FEDOR 

7 2007-05-31UBUN

 7.10 2007-10-18

UBUN 

7.04 2007-04-19SUSE 1 0 . 1  2006-05-11FEDOR

 6   2006-10-24

FEDOR 

9 2008-05-13UBUN

 6.062006-06-01

UBUN 

8 . 1 0  2008-10-30FEDORA

5 2006-03-20

Como podemos ver, nuestro script produce los resultados deseados, pero ¿cómo hacerlo?Echemos

Page 336: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 336/571

[Me @ linuxbox ~] $ cat -n distros.sed 1  # Secuencia de comandos sed para producir distribuciones Linuxinforme22  1 i \3  \4  Distribuciones Linux Informe \65  s / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {4 \} \) $ / \ 3- \

1- \ 2 /6  a / abcdefghijklmnopqrstuvwxyz /ABCDEFGHIJKLMNOPQRSTUVWXYZ /

20 - Procesamiento de Texto _______________________________

Otra mirada a nuestro script. Usaremos gato a numerar las líneas:

Línea uno de nuestro script es un comentario. Al igual que muchos archivos de configuracióny los lenguajes de programación en los sistemas Linux, los comentarios comienzan con elcarácter # y van seguidos de texto legible por humanos. Los comentarios se pueden colocar encualquier lugar en la secuencia de comandos (aunque no dentro de los comandos de ellosmismos) y son útiles para cualquier ser humano que podrían necesitar para identificar y / omantener la secuencia de comandos.

La línea 2 es una línea en blanco. Al igual que los comentarios se pueden añadir líneas enblanco para mejorar la legibilidad.

Muchos comandos sed admiten direcciones de línea. Estos se utilizan para especificar que laslíneas de la entrada son a efectos de su tramitación. Direcciones de línea se pueden expresarcomo números de una sola línea, la línea número oscila, y el número de línea especial "$", queindica la última línea de entrada.

Las líneas 3 a 6 contienen texto que se inserta en la dirección 1, la primera línea de la entrada.El comando i es seguido por la secuencia de retorno de carro-barra invertida para producir unretorno de carro escapado, o lo que se llama un carácter de continuación de línea. Estasecuencia, que se puede utilizar en muchas circunstancias, incluyendo secuencias decomandos shell, permite un retorno de carro para ser embebido en una corriente de texto sin elintérprete de señalización (en este caso sed) que se ha alcanzado el final de la línea. La i, y del

mismo modo, la una (que añade el texto, en lugar de insertarlo) y C (que sustituye el texto)Comandos, permito que varias líneas de texto, siempre y cuando cada línea, excepto el último,termina con un carácter de continuación de línea. La sexta línea de nuestro script es enrealidad el final de nuestro texto insertado y termina con un retorno de carro normal en lugarde un carácter de continuación de línea, lo que indica el final de la orden i.

Nota: Un carácter de continuación de línea está formada por una barra invertida seguidade inmediato por un retorno de carro. No se permiten los espacios intermedios.

La línea 7 es nuestro comando de búsqueda y reemplazo. Dado que no está precedido por una

dirección, cada línea en el flujo de entrada está sujeta a su acción.Línea 8 realiza la transliteración de las letras minúsculas en mayúsculas. Tenga en cuenta que

298

Page 337: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 337/571

Gente que como sed también les gusta ...

SED es un programa muy capaz, capaz de realizar tareas de edición bastantecomplejos a los arroyos de texto. Se utiliza con mayor frecuencia para tareas sencillasde una sola línea en lugar de guiones largos. Muchos usuarios prefieren otrasherramientas para las tareas más grandes. El más popular de estos son awk y perl.Estos van más allá de meras herramientas como los programas incluidos aquí, y seextienden en el reino de los lenguajes de programación completos. perl, en particular,se utiliza a menudo en lugar de scripts de shell para muchas tareas de gestión delsistema y de administración, además de ser un medio muy popular para el desarrolloweb. awk es un poco más especializado. Su resistencia específica es su capacidad para

manipular los datos tabulares. Se asemeja a sed en que los programas awknormalmente procesar archivos de texto línea por línea, utilizando un esquemasimilar al concepto sed de una dirección seguida por una acción. Mientras tanto awk yperl están fuera del alcance de este libro, que son muy buenas habilidades para elusuario de la línea de comandos de Linux.

aspell cheque archivo detexto

[Me @ linuxbox ~] $ cat> foo.txt

Edición On The Fly

a diferencia de tr, el comando y en sed no es compatible con el carácter varía (por ejemplo,[az]), ni tampoco apoya las clases de caracteres de POSIX. Una vez más, ya que el comando yno está precedido por una dirección, se aplica a todas las líneas del flujo de entrada.

aspellLa última herramienta vamos a ver es aspell, un corrector ortográfico interactivo. El programaaspell es el sucesor de un programa anterior llamado ispell, y se puede utilizar, en su mayorparte, como una gota en el reemplazo. Si bien el programa aspell se utiliza sobre todo porotros programas que requieren corrección ortográfica capacidad, también se puede utilizar demanera muy eficaz como una herramienta independiente de la línea de comandos. Tiene lacapacidad para comprobar de forma inteligente varios tipos de archivos de texto, incluidos losdocumentos HTML, C / C ++ programas, mensajes de correo electrónico y otros tipos de

textos especializados.

Para revisar la ortografía de un archivo de texto que contiene prosa sencilla, que podría serutilizado de esta manera:

donde fichero de texto es el nombre del archivo para comprobar. Como ejemplo práctico,vamos a crear un archivo de texto simple llamado foo.txt que contiene algunos errores de

ortografía deliberadas:

299

Page 338: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 338/571

El zorro marrón rápido jimped sobre el perro Laxy.

[Me @ linuxbox ~] $ aspell cheque foo.txtEl zorro marrón rápido  jimped  sobre el perro Laxy.

1 )   saltado2 )   entorchados3 )   compensaron4 )   cojeando5 )   ipimped)Ignorar r)Reemplazara)  Añadir

b)  Abortar

6 )   wimped7 )   acampado8 )   joroba9 )   impedir0)  umped1)  No haga casode todoR) Reemplazartodo l) AñadirBaja x) Salir _____

?

[Me @ linuxbox ~] $ foo.txt gatoEl rápido zorro marrón saltó sobre el perro perezoso.

20 - Procesamiento de TextoA continuación vamos a comprobar el archivo usando aspell:Como aspell es interactivo en el modo de comprobación, veremos una pantalla como esta:

En la parte superior de la pantalla, vemos nuestro texto con una palabra escritasospechosamente destacó. En el medio, vemos diez sugerencias de ortografía numeradas delcero al nueve, seguido de una lista de otras acciones posibles. Por último, en la parte inferior,vemos un indicador de listo para aceptar nuestra elección.

Si pulsamos la tecla 1, aspell sustituye a la palabra ofensiva con la palabra "saltó" y pasa a lasiguiente palabra mal escrita, que es "Laxy." Si seleccionamos el reemplazo de "perezoso"aspell lo reemplaza y termina. Una vez aspell ha terminado, podemos examinar nuestroarchivo y ver que los errores ortográficos se han corregido:A menos que le indiquen lo contrario a través de la opción de línea de comandos de copia de

seguridad --dont, aspell crea un archivo de copia de seguridad que contiene el texto originalañadiendo la extensión .bak al nombre del archivo.

300

Page 339: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 339/571

[Me @ linuxbox ~] $ sed -i 's / perezoso / Laxy /; s / saltado / jimped / 'foo.txt

<Html><Head>

<Title> archivo mispelled HTML </ title></ Head><Body>

<P> El zorro marrón rápido jimped sobre el perro Laxy. </ P> </body>

</ Html>

[Me @ linuxbox ~] $ aspell cheque foo.txt

html 

</Html>

<Head>

</

Head><Body>

</Body>

<Title> archivo mispelled HTML </ title>

<P> El zorro marrón rápido jimped sobre el perro Laxy. </ P>

301

 _______________________________________________________________ Edición On The Fly

Mostrando nuestra destreza edición sed, vamos a poner nuestras faltas de ortografía de vueltaen lo que podemos reutilizar nuestro archivo:La opción sed -i le indica a sed que editar el archivo "in situ", lo que significa que en lugar de

enviar la salida editada en la salida estándar, se reescribirá el archivo con los cambiosaplicados. También vemos la posibilidad de colocar más de un comando de edición en la líneaseparándolos con un punto y coma.

A continuación, vamos a ver cómo aspell puede manejar diferentes tipos de archivos de texto.Utilizando un editor de texto como vim (el aventurero puede probar SED), vamos a añadir unpoco de formato HTML para nuestro archivo:Ahora, si tratamos de revisar la ortografía de nuestro archivo modificado, nos encontramos

con un problema. Si lo hacemos de esta manera:nos pondremos esto:

Page 340: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 340/571

[Me @ linuxbox ~] $ aspell -H cheque foo.txt

<Html><Head>

</ Head><Body>

</ Body></ Html>

<Title> Mispelled  Archivo HTML </title>

<P> El zorro marrón rápido jimped sobre el perro Laxy. </ P>

aspell verá el contenido de las etiquetas HTML como mal escrito. Este problema puede sersuperado mediante la inclusión de la opción -H (HTML) de cheques-modo, de esta manera:que se traducirá en esto:

El HTML es ignorado y sólo las partes no marcado del archivo se comprueban. En este modo,el contenido de las etiquetas HTML se ignoran y no se comprueba la ortografía. Sin embargo,

el contenido de las etiquetas ALT, que se benefician de la comprobación, se comprueban eneste modo.

302

1) HTML 4) Hamel2) ht ml 5) Hamil3) -ht ml 6) hotel

yo) Pasar por alto Yo) No haga caso de todor) Reemplazar R) Vuelva a colocar todosa) Añadir l) Añadir Bajab) Abortar x) Salida

?

20 - Procesamiento deTexto

1) Mi espelta 6) Mal aplicada

2) Escanda-Mi 7) Mal llamado3) Mal escrito 8) Respelled4) Disipó 9) Deletrear mal5) Espelta 0) Engañado

H Pasar por alto Yo) No haga caso der) Reemplazar R)Vuelva a colocara) Añadir l) Añadir Bajab) Abortar x)Salida?

Page 341: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 341/571

Edición On The Fly

Nota: De forma predeterminada, aspell ignorará las direcciones URL y direcciones decorreo electrónico en texto. Este comportamiento puede ser anulado con las opcionesde línea de comandos. También es posible especificar que se comprueban y se omiten

etiquetas de marcado. Vea la página man aspell para más detalles.

Resumiendo

En este capítulo, hemos visto algunas de las muchas herramientas de línea de comandos queoperan sobre el texto. En el próximo capítulo, vamos a ver varios más. Es cierto que puede noparecer inmediatamente obvio cómo o por qué es posible utilizar algunas de estasherramientas sobre una base del día a día, aunque hemos tratado de mostrar algunos ejemplossemi-prácticos de su uso. Nos encontraremos en capítulos posteriores que estas herramientasforman la base de un conjunto de herramientas que se utiliza para resolver una serie deproblemas prácticos. Esto será especialmente cierto cuando nos metemos en shell scripting,

donde estas herramientas realmente demostrar su valía.

Lectura adicional

El sitio web del Proyecto GNU contiene muchas guías en línea a las herramientas discutidasen este capítulo.

•  Desde el paquete Coreutils:http://www.gnu.org/software/coreutils/manual/coreutils.html#Output-of-entire-  archivos http://www.gnu.org/software/coreutils/manual/coreutils.html#Operating-on-  archivos ordenados 

http://www.gnu.org/software/coreutils/manual/coreutils.html#Operating-on-fields http://www.gnu.org/software/coreutils/manual/coreutils.html#Operating-on-char- personajes 

•  Desde el paquete Diffutils:http://www.gnu.org/software/diffutils/manual/html mono / diff.html 

•  SED:http://www.gnu.org/software/sed/manual/sed.html  

•  aspell:http://aspell.net/man-html/index.html  

•  Hay muchos otros recursos en línea para la sed, en particular:http://www.grymoire.com/Unix/Sed.html  http://sed.sourceforge.net/sed1line.txt  

•  Proveedores googlear "sed trazadores de líneas uno", "hojas de trucos sed"

303

Page 342: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 342/571

20 - Procesamiento de Texto

Crédito extra

Hay algunos comandos de manipulación de texto más interesantes que vale la penainvestigar. Entre ellas se encuentran: split (dividir archivos en trozos), csplit (archivos

divididos en piezas basadas en contexto), y sdiff (fusión de lado a lado de las diferencias dearchivo.)

304

Page 343: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 343/571

21  - Formato de salida

21 - Form ato de salida

En este capítulo, continuamos nuestra mirada a las herramientas relacionadas con el texto, secentra en los programas que se utilizan para dar formato a la salida de texto, en lugar decambiar el texto en sí. Estas herramientas a menudo se utilizan para preparar el texto para laimpresión final, un subj ect que vamos a cubrir en el próximo capítulo. Los programas quevamos a cubrir en este capítulo incluyen:

•  nl - Las rectas numéricas•  doblar - Envuelva cada línea para una longitud especificada

•  fmt - Un simple formateador de texto

•  PR - Prepare el texto para la impresión

•  printf - Formato e impresión de datos

•  Groff - Un sistema de formato de documentos

Herramientas de formato simple

Vamos a ver algunas de las herramientas de formato simples primero. En su mayoría sonprogramas de una sola función, y un poco sofisticado en lo que hacen, pero que pueden serutilizados para tareas pequeñas y como partes de las tuberías y scripts.

nl - Líneas NúmeroEl programa de nl es una herramienta bastante arcano utilizado para llevar a cabo una tareasencilla. Números que se alinee. En su uso más simple, se asemeja a -n cat:

[Me @ linuxbox ~] $ nl distros txt | cabeza1 SUSE 10.2 12/07/20062 Fedora 10 11/25/2008

3 SUSE 11.0 06.19.20084 Ubuntu 8.04 24.04.20085 Fedora 8 11/08/20076 SUSE 10.3 10/04/20077 Ubuntu 6.10 10/26/2006

305

Page 344: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 344/571

 

Al igual que el gato, nl puede aceptar cualquiera de varios archivos como argumentos de lalínea de comandos, o la entrada estándar. Sin embargo, nl tiene una serie de opciones y escompatible con una forma primitiva de marcado para permitir tipos más complejos denumeración.

nl apoya un concepto llamado "páginas lógicas" cuando la numeración. Esto permite nl pararestablecer (empezar de nuevo) la secuencia numérica cuando la numeración. Uso de lasopciones, es posible establecer el número inicial a un valor específico y, en una medidalimitada, su formato. Una página lógica se divide a su vez en un encabezado, cuerpo y pie depágina. Dentro de cada una de estas secciones, la numeración de líneas se puede restablecer y/ o se le asigna un estilo diferente. Si se da nl varios archivos, se los trata como un único flujode texto. Secciones en la secuencia de texto se indican por la presencia de algunos marcadoresen vez extraño aspecto añadido al texto:

306

21 - Formato de salida

8 Fedora 7 31.05.20079 Ubuntu 7.10 10/18/2007

10 Ubuntu 7.04 04/19/2007

Tabla 21-1: marcado nl

Marcado Significado\: \: \: Comience de encabezado de página lógica

\: \: Iniciar cuerpo de página lógica

\: Inicio de página lógica de pie de página

Cada uno de los elementos de marcado anteriores debe aparecer solo en su propia línea.

Después de procesar un elemento de marcado, nl lo elimina de la secuencia de texto.Estas son las opciones comunes para nl:

Tabla 21-2: Opciones nl comunes 

Opción Significadoestilo -b Organismo creado numeración al estilo, donde el estilo es uno de los

siguientes: a = número total de líneast = número de líneas sólo no están en blanco. Este es el valor

n = ningunop = número de expresiones regulares sólo las líneas que coincidan con

regexp básica expresión regular.

estilo -fAjuste de numeración a pie de página del estilo. El valor

redeterminado es N nin uno .

estilo -hEncabezado Numeración de estilo. El valor predeterminado es N(nin uno).

Page 345: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 345/571

Herramientas de formato simple-i número  Conjunto de la subasta la numeración de páginas a número. El valor

redeterminado es uno.-n ormato 

Conjuntos de numeración de formato a formato, donde formato es: ln =Izquierda justificada, sin ceros a la izquierda. rn = justificado a laderecha, sin ceros a la izquierda. Este es el valor predeterminado. rz =derecho justificado, con ceros a la izquierda.

-p No reinicie la numeración de páginas al principio de cada página lógica.-s cadena 

Añadir cadena al final de cada número de línea para crear un separador.Por defecto es un solo carácter de tabulación.

-v número  Establezca primer número de línea de cada página lógica a número. Elvalor redeterminado es uno.

-w ancho  Establecer el ancho del campo de número de la línea a la anchura. Elvalor predeterminado es 6.

# Secuencia de comandos sed para producir distribuciones de

Linux reportan 1 i \\\: \\: \\: \\Distribuciones Linux Informe \\Nombre Ver. Lanzamiento \

\\: \\:s / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {4 \} \) $ / \ 3 \ 1- \2 / $ a \\\: \\Fin del Informe

Es cierto, probablemente no estaremos de numeración de líneas que a menudo, pero podemosutilizar nl mirar cómo podemos combinar múltiples herramientas para llevar a cabo tareasmás complejas. Vamos a construir sobre nuestro trabajo en el capítulo anterior para producirun informe distribuciones Linux. Desde usaremos nl, será útil incluir su marcado cabecera /cuerpo / pie de página. Para ello, lo añadiremos a la secuencia de comandos sed desde elúltimo capítulo. Usando nuestro editor de texto, vamos a cambiar el guión de la siguiente yguárdelo como nl.sed-distros:

La secuencia de comandos ahora inserta la página nl marcado lógico y añade un pie de páginaal final del informe. Tenga en cuenta que teníamos que doblar las barras invertidas en nuestromargen de beneficio, ya que normalmente se interpretan como un carácter de escape por sed.

A continuación, vamos a producir nuestro informe mejorado mediante la combinación declase, sed, y nl:

307

Page 346: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 346/571

21 - Formato de salida

[Me @ linuxbox ~ ] $ Sort -k 1,1 -k 2n distros.txt distros-nl.s -f seded | nl

Distribuciones Linux Reportar

Nombre Ver. Liberado

1 Fedora 5 2006-03-202 Fedora 6 2006-10-24

3 Fedora 7 2007-05-314 Fedora 8 2007-11-085 Fedora 9 2008-05-136 Fedora 1

 2008-11-25

7 SUSE 1 0.1 2006-05-11

8 SUSE 1 0.2 2006-12-07

9 SUSE 1 0.3 2007-10-04

10 SUSE 1 0.0 2008-06-19

11 Ubunt 

6. 06 2006-06-0112 Ubunt

 6. 10 2006-10-26

13 Ubunt 

7. 04 2007-04-1914 Ubunt

 7. 10 2007-10-18

15 Ubunt 

8. 04 2008-04-2416 Ubunt

u

8. 10 2008-10-30

End Of Informe

nl -n rz

nl -w 3 -s ''

Nuestro informe es el resultado de nuestra cartera de comandos. En primer lugar, ordenar lalista por nombre de la distribución y la versión (campos 1 y 2), a continuación, en queprocesamos los resultados con sed, añadiendo el encabezado del informe (incluido el marcadode la página lógica para nl) y pie de página. Por último, procesamos el resultado con nl, que,de forma predeterminada, sólo los números de las líneas de la secuencia de texto quepertenecen a la sección del cuerpo de la página lógica.

Podemos repetir el comando y experimentar con diferentes opciones para la Liga Nacional.

Algunas de las más interesantes son:

y

308

Page 347: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 347/571

[Me @ linuxbox ~] $ echo "El rápido zorro marrón saltó sobre el perro perezoso." | -w 12vecesEl anchopropio saltozorro rápida edsobre el perroperezoso.

[Me @ linuxbox ~] $ echo "El rápido zorro marrón saltó sobre el perro perezoso." | Fold-w 12 -s

El rápidozorro marrónsaltó sobre elperroperezoso.

'Fmt' lee los argumentos de archivo (o en la entrada estándar si no se dan), y escribeen la salida estándar.

Por defecto, las líneas en blanco, espacios entre palabras, y la sangría son

Herramientas de formato simple

doblar - Envuelva cada línea a una longitud especificadaPlegable  es el proceso de romper las líneas de texto en un ancho especificado. Al igual quenuestros otros comandos, pliegue acepta uno o más archivos de texto o la entrada estándar. Sienviamos doblar una corriente sencilla de texto, podemos ver cómo funciona:

Aquí vemos a veces en la acción. El texto enviado por el comando echo se divide en segmentosespecificados por la opción -w. En este ejemplo, se especifica un ancho de línea de 12caracteres. Si no se especifica el ancho, el valor predeterminado es de 80 caracteres. Observecómo las líneas se rompen sin importar límites de las palabras. La adición de la opción -sprovocará veces para romper la línea en el último espacio disponible antes de que se alcance elancho de línea:

fmt - Un formateador de texto sencilloEl programa también se pliega fmt texto, además de un montón más. Se acepta cualquiera delos archivos o la entrada estándar y realiza formato de párrafo en la secuencia de texto.

Básicamente, se llena y se une a las líneas de texto, mientras que la preservación de las líneasen blanco y sangría.

Para demostrarlo, vamos a necesitar un poco de texto. Vamos a levantar un poco de la páginade información fmt:

309

Page 348: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 348/571

conservado en la salida; líneas de entrada sucesivas con diferentes sangría no se unen;pestañas se expanden en la entrada y se introducen en la salida.

'Fmt' prefiere romper líneas al final de una frase, y trata de evitar los saltos de líneadespués de la primera palabra de una frase o antes de la última palabra de una frase. Un"break frase" se define como el final de un párrafo o una palabra que termina encualquiera de '.?!', Seguido de dos espacios o final de la línea, haciendo caso omiso decualquier paréntesis o comillas que intervienen. Al igual que TeX, 'fmt' lee "párrafos"enteros antes de la elección de los saltos de línea; el algoritmo es una variante de la dadapor Donald E. Knuth y Michael F. Plass en "Breaking párrafos en Líneas", "Software -Práctica y Experiencia '11, 11 (noviembre de 1981), 1119-1184.

[Me @ linuxbox ~] $ fmt -w 50 fmt-info.txt | cabeza'Fmt' lee los argumentos de archivo (o en la entradaestándar si

ninguno se dan), y escribe en la salida estándar.

Por defecto, las líneas en blanco, espacios entre palabras, yla sangría sonconservado en la salida; líneas de entrada sucesivas condiferentes sangría no se unen; pestañas se expanden en laentrada y se introducen en la salida.

[Me @ linuxbox ~] $ fmt -cw 50 fmt-info.txt'Fmt' lee los argumentos de archivo (o en la entrada

estándar si no se dan), y escribe en la salida estándar.

21  - Formato de salida

Vamos a copiar este texto en nuestro editor de texto y guarde el archivo como fmt-info.txt.Ahora, digamos que queríamos volver a formatear el texto para adaptarse a una ampliacolumna de cincuenta carácter. Podríamos hacer esto mediante la tramitación del expedientecon FMT y la opción -w:

Bueno, eso es un resultado incómodo. Tal vez deberíamos leer realmente este texto, ya queexplica lo que está pasando:

Por defecto, las líneas en blanco, espacios entre palabras, y la sangría se conservan en la salida; líneas

de entrada sucesivas con diferentes sangría no se unen; pestañas se expanden en la entrada y se

introducen en la salida.

Así, fmt es preservar la sangría de la primera línea. Afortunadamente, fmt proporciona unaopción para corregir esto:

310

Page 349: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 349/571

 

Herramientas de formatosimple

Por defecto, las líneas en blanco, espacios entre palabras, yla sangría se conservan en la salida; líneas de entrada sucesivascon diferentes sangría no se unen; pestañas se expanden en laentrada y se introducen en la salida.

'Fmt' prefiere romper líneas al final de una frase, y trata deevitar los saltos de línea después de la primera palabra de unafrase o antes de la última palabra de una frase. Un "break frase"se define como el final de un párrafo o una palabra que terminaen cualquiera de '.?!', Seguido de dos espacios o final de la línea,haciendo caso omiso de cualquier paréntesis o comillas queintervienen. Al igual que TeX,'Fmt' lee "párrafos" enteros antes de la elección de los saltos delínea; el algoritmo es una variante de la dada por Donald E.Knuth y Michael F.Plass en "Breaking párrafos en Líneas", "Software - Práctica yExperiencia '11, 11 (noviembre de 1981), 1119-1184.

Mucho mejor. Mediante la adición de la opción -c, ahora tenemos el resultado deseado. fmt

tiene algunas opciones interesantes:Tabla 21-3: fmt Opciones 

Opción Descripción-c

Operar en el modo de margen de la corona. Esto preserva la sangría delas dos primeras líneas de un párrafo. Las líneas siguientes estánalineados con la muesca de la segunda línea.

cadena -p Sólo formatear esas líneas que comienzan con la cadena de prefijo.Después de formatear, el contenido de la cadena tienen el prefijo a cadalínea reformateado. Esta opción se puede utilizar para dar formato atexto en los comentarios de código fuente. Por ejemplo, cualquierlenguaje de programación o un archivo de configuración que utiliza uncarácter "#" para delinear un comentario pudieran presentarseespecificando -p '#' para que se dará formato, sólo los comentarios. Vea

-s

-Split único modo. En este modo, las líneas sólo se dividirán paraajustarse al ancho de la columna especificada. Líneas cortas no se uniránpara llenar líneas. Este modo es útil cuando el formateo de texto comocódigo donde no se desea unir.

-uRealice una separación uniforme. Esto se aplicará máquina de escribirtradicional "

311

Page 350: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 350/571

21 - Formato de salida

estilo "de formato al texto. Esto significa que un solo espacio entre laspalabras y dos espacios entre frases. Este modo es útil para eliminar la"justificación", es decir, texto que ha sido rellenado con espacios paraforzar la alineación tanto en los márgenes derecho e izquierdo.

anchura w Formato de texto para encajar dentro de unos personajes ancho decolumna de ancho. El valor por defecto es de 75 caracteres. Nota: fmtrealidad formatos líneas ligeramente más cortas que el ancho

[Me @ linuxbox ~] $ cat> fmt-code.txt#  Este archivo contiene código con comentarios.

#  Esta línea es un comentario.#  Seguido de otra línea de comentario.#  Y otro.

Esto, por otra parte, es una línea de código. Y otra líneade código.Y otro.

[Me @ linuxbox ~] '#' $ fmt -w -p 50 fmt-code.txt#  Este archivo contiene código con comentarios.

#  Esta línea es un comentario. Seguido por otro#  línea de comentario. Y otro.

Esto, por otra parte, es una línea de código.Y otra línea de código.Y otro.

La opción -p es particularmente interesante. Con él, podemos formato porciones de un archivoseleccionado, siempre que las líneas que desea formatear todos comienzan con la misma

secuencia de caracteres. Muchos lenguajes de programación utilizan el signo de número (#)para indicar el comienzo de un comentario y por lo tanto se pueden formatear utilizando estaopción. Vamos a crear un archivo que simula un programa que utiliza comentarios:

Nuestro archivo de ejemplo contiene los comentarios que comienzan con la cadena "#" (un #seguido de un espacio) y las líneas de "código" que no lo hacen. Ahora, usando fmt, podemosdar formato a los comentarios y dejar sin tocar el código:

Observe que las líneas de comentario adyacentes están unidos, mientras que las líneas enblanco y las líneas que no comienzan con el prefijo especificado se conservan.

312

Page 351: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 351/571

[Me @ linuxbox ~] $ pr -l 15 -w 65 distros.txt

2008-12-11 18:27

SUSE 10.2 12/07/2006Fedora 10 11/25/2008SUSE 11.0 06.19.2008Ubuntu 8.04 24.04.2008Fedora 8 11/08/2007

2008-12-11 18:27

distros.txt Page 1

distros.txt Página 2

Herramientas de formato simple

PR - formato de texto para impresiónEl programa de pr se utiliza para paginar texto. Al imprimir texto, a menudo es deseableseparar las páginas de salida con varias líneas de espacios en blanco, para proporcionar unmargen superior e inferior de cada página. Además, este espacio en blanco se puede utilizarpara insertar un encabezado y pie de página en cada página.

Vamos a demostrar pr formateando nuestro archivo distros.txt en una serie de páginas muycorto (sólo las dos primeras páginas se muestran):

En este ejemplo, utilizamos la opción -l (para la longitud de la página) y la opción -w (anchode página) para definir una "página" que es de 65 columnas de ancho y 15 líneas de largo. prpagina el contenido del archivo distros.txt, separa cada página con varias líneas de espacios enblanco y crea un encabezado predeterminado que contiene la fecha de modificación delarchivo, nombre de archivo, y el número de página. El programa de pr ofrece muchasopciones para controlar el diseño de página. Vamos a echar un vistazo a varios de ellos en elcapítulo siguiente.

313

SUSE 10.3 10/04/2007Ubuntu 6.1010/26/2006Fedora 7 31.05.2007Ubuntu 7.10 10/18/2007Ubuntu 7.04 04/19/2007

Page 352: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 352/571

[Me @ linuxbox ~] $ printf "he formateado la cadena:% s \ n" fooHe formateado la cadena: foo

[Me @ linuxbox ~] $ printf "he formateado '% s' como stringAn" fooHe formateado 'foo' como una cadena.

21 - Formato de salida

printf - Formato Y Imprimir datosA diferencia de los otros comandos en este capítulo, el comando printf no se utiliza para lastuberías (que no acepta la entrada estándar) ni la aplicación frecuente encontrar directamente

en la línea de comandos (se utiliza sobre todo en las secuencias de comandos). Así que ¿porqué es importante? Debido a que es tan ampliamente utilizado.

printf (de la frase "de impresión con formato") fue desarrollado originalmente para el lenguajede programación C y ha sido implementado en muchos lenguajes de programación,incluyendo la cáscara. De hecho, en bash, printf es una orden interna.

printf funciona así:

printf " formato "argumentos

El comando se da una cadena que contiene una descripción de formato que se aplica luego auna lista de argumentos. El resultado con formato se envía a la salida estándar. Aquí está unejemplo trivial:

La cadena de formato puede contener texto literal (como "he formateado la cadena:"),secuencias de escape (como \ n, un carácter de nueva línea), y secuencias que comienzan conel carácter%, que se llaman especificaciones de conversión. En el ejemplo anterior, la

especificación de conversión% s se utiliza para dar formato a la cadena "foo" y lo coloca en lasalida del comando. Aquí está otra vez:

Como podemos ver, la especificación de conversión% s se sustituye por la cadena "foo" en lasalida del comando. La conversión s se utiliza para dar formato a los datos de cadena. Hayotros especificadores para otros tipos de datos. Esta tabla muestra los tipos de datos de usocomún:Tabla 21-4: tipo común de datos printf especificadores

Prescripción Descripciónd Dar formato a un número como un entero decimal con signo.

F Formato de salida y un número de punto flotante.

o Formatear un entero como un número octal.

314

Page 353: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 353/571

 

Dado que especificamos seis especificadores de conversión, también debemos suministrar seisargumentos para printf para procesar. Los seis resultados muestran el efecto de cadaespecificador.

Varios componentes opcionales pueden añadirse a la especificador de conversión para ajustarsu salida. Una especificación de conversión completa puede consistir en lo siguiente:%[banderas] [ancho] [. Precisión] conversion_specification

Múltiples componentes opcionales, cuando se utilizan, deben aparecer en el ordenespecificado anteriormente debe interpretarse correctamente. He aquí una descripción decada uno:

21  - Formato de salida

Herramientas de formato simple

s Formatear una cadena.x Formatear un entero como un número hexadecimal utilizando af

minúsculas cuando sea necesario.

X Igual que la x pero utilizan letras mayúsculas.

% Imprimir un símbolo literal% (es decir, especificar "%%")

Vamos a demostrar el efecto de cada uno de los especificadores de conversión en la cadena"380":

[Me @ linuxbox380 380

~] $ printf "% d,% f,% s,% s,% x,% X \ n" 380 380 380 380

380, 380.000000, 574, 380, 17 quater, 17 C 

Tabla 21-5: especificación de conversión printf Componentes

Componente Descripciónbanderas  Hay cinco banderas diferentes:

# - Utilice la opción "formato alternativo" para la salida. Esto varíasegún el tipo de datos. Para O (número octal) de conversión, la salidatiene el prefijo 0. Para x y conversiones X (número hexadecimal), lasalida tiene el prefijo 0x o 0X respectivamente.

0- (cero) Pad la salida con ceros. Esto significa que el campo serellenará con ceros a la izquierda, como en "000380".

- (Guión) Izquierda-alinear la salida. De forma predeterminada, printf

derecha alinea de salida.'' - (Espacio) Producir un espacio inicial para los números positivos.

+ - (Signo más) Ingresar los números positivos. Por defecto, sólo printf

315

Page 354: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 354/571

signos números negativos.

ancho  Un número que especifica el mínimo ancho de campo.

.precision Para números de coma flotante, especificar el número de dígitos deprecisión que se emitirá después del punto decimal. Para laconversión de cuerdas, precisión especifica el número de

caracteres en la salida.

He aquí algunos ejemplos de diferentes formatos en la acción:

316

Tabla 21-6: Conversión de impresión Especificaciones Ejemplos

Argumento Formato Resultado Notas380 "% D" 380

Formato simple de unnúmero entero.

380 "% # x" 0x17c Entero con formato como unnúmero hexadecimal con el"formato alternativo" de la

380 "% 05d" 00380 Entero formateado con cerosa la izquierda (de relleno) yun ancho de campo mínimode cinco caracteres.

380 "% 05.5f" 380.00000 Número formateado como unnúmero de punto flotante conel acolchado y cinco cifrasdecimales de precisión. Dadoque el ancho de campomínimo especificado (5) es

menor que la anchura real delnúmero formateado, elrelleno no tiene ningún

380 "% 010.5f" 0380,00000Al aumentar la anchuramínima campo para el relleno10 es ahora visible.

380 "% + D" 380 La bandera + firma unnúmero positivo.

380 "% -d" 380El - bandera izquierda se

alinea el formato.

Page 355: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 355/571

 

Herramientas de formato simpleabcdefghijk "% 5s" abcedfghijk Una cadena con formato con

una anchura mínima de

abcdefghijk "%" .5s abcde Mediante la aplicación deprecisión a una cadena, se

Una vez más, printf se utiliza principalmente en scripts en los que se emplea para dar formatoa los datos tabulares, en lugar de en la línea de comandos directamente. Pero todavíapodemos mostrar cómo se puede utilizar para resolver diversos problemas de formato. Enprimer lugar, vamos de salida algunos campos separados por caracteres de tabulación:

[Me @ linuxbox ~] $ printf "% s \ t% s \ t% s \ n" str3 cad2 stristri cad2 str3

Mediante la inserción de \ t (la secuencia de escape para una ficha), logramos el efectodeseado. Siguiente, algunos números con formato ordenado:

[Me @ linuxbox ~] $ printf "Línea:% 05d% 15.3f Resultado:% 15d + \ n" 10713.14156295 32589Línea: 01071 3.142 Resultado: 32589

Esto muestra el efecto de la anchura mínima de campo en la separación de los campos. ¿O quétal el formateo de una página web pequeña:

[Me @ linuxbox ~] $ printf "<html> \ n \ t <head> \ n \ t \ t <title>% s </ title> \ n \ t</ head> \ n \ t <body> \ n \ t \ t <p>% s </ p> \ n \ t </ body> \ n </ html> \ n ""Página de tetas le "" Contenido de la página "<Html>

<Head><Title> Título de la página </ title>

</ Head><Body>

<P> Contenido de la página </ p></ Body>

</ Html>

Documento Sistemas de formato

Hasta ahora, hemos examinado las simples herramientas de formato de texto. Estos sonbuenos para los pequeños, sim-

317

Page 356: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 356/571

21 - Formato de salida ples tareas, pero ¿qué pasa con los trabajos más grandes? Una de lasrazones de que Unix se convirtió en un sistema operativo popular entre los usuarios técnicos ycientíficos (aparte de proporcionar una potente multitarea, entorno multiusuario para todotipo de desarrollo de software) es que ofrece herramientas que podrían ser utilizadas paraproducir muchos tipos de documentos, en particular publicaciones científicas y académicas.De hecho, como la documentación de GNU describe, preparación de documentos fuefundamental para el desarrollo de Unix:

La primera versión de UNIX fue desarrollado en un PDP-7, que estaba sentada alrededor de losLaboratorios Bell. En 1971 los desarrolladores querían conseguir un PDP-11 para seguir

trabajando en el sistema operativo. Con el fin de justificar el costo de este sistema, propusieron

que iban a poner en práctica un sistema de formato de documentos para la división de las

 patentes de AT & T. Este primer programa de formato era una reimplementación de 'roff de

 McIllroy, escrito por J.

F. Ossanna.

Dos familias principales del documento formateadores dominan el campo: los descendientesde la roff programa original, incluyendo nroff y troff, y los basados en TeX de Donald Knuth(pronunciado "tek") sistema de archivos de texto. Y sí, el caído "E" en el centro es parte de sunombre.

El nombre "roff" se deriva del término "corro fuera", como en, "Voy a correr de una copia parausted." El programa de nroff se utiliza para documentos de formato para la salida a losdispositivos que utilizan fuentes de monoespaciado, tales como terminales de caracteres y lasimpresoras de estilo máquina de escribir. En el momento de su introducción, esto incluía casitodos los dispositivos de impresión conectados a las computadoras. El programa troff despuésformatea documentos para la salida de los tipógrafos, los dispositivos utilizados paraproducir el tipo "camera-ready" para la impresión comercial. La mayoría de las impresoras deordenador hoy en día son capaces de simular la salida de tipógrafos. La familia roff tambiénincluye algunos otros programas que se usan para preparar porciones de documentos. Estosincluyen la ecuación (para ecuaciones matemáticas) y TBL (para las tablas).

El sistema TeX (en forma estable) apareció por primera vez en 1989 y tiene, en cierta medida,desplazados troff como la herramienta de elección para la salida de la máquina de componer.No vamos a estar cubriendo TeX aquí, debido tanto a su complejidad (hay libros enteros sobreella) y al hecho de que no se instala por defecto en la mayoría de los sistemas Linux modernos.

Consejo: Para aquellos interesados en la instalación de TeX, echa un vistazo a elpaquete texlive que se puede encontrar en la mayoría de los repositorios de ladistribución, y el editor de contenido gráfico LyX.

Groffgroff es un conjunto de programas que contienen la implementación GNU de troff. Tambiénincluye una secuencia de comandos que se utiliza para emular nroff y el resto de la familia rofftambién.

318

Page 357: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 357/571

[Me @ linuxbox ~] $ zcat /usr/share/man/man1/ls.1.gz | cabeza. \ "NO MODIFIQUE ESTE ARCHIVO! Se genera por help2man 1.35. .TH LS" 1 ""Abril 2008 "" GNU coreutils 6.10 "" Comandos de usuario "NOMBRE .SH

ls \ - Lista el contenido del directorio .SH SINOPSIS .B ls[\ FIOPTION \ fR] ... [\ fIfichero \ fR] ....SH DESCRIPCIÓN. \ "Añadir cualquier descripción adicional aquí .PP

Documento Sistemas de formato

Mientras roff y sus descendientes se utilizan para hacer documentos formateados, lo hacen deuna manera que es más bien extraño a los usuarios modernos. La mayoría de los documentosde hoy en día se produce utilizando procesadores de texto que son capaces de realizar tanto lacomposición y el diseño de un documento en un solo paso. Antes de la llegada de la palabraprocesador gráfico, los documentos se producen a menudo en un proceso de dos etapas queimplica el uso de un editor de texto para realizar la composición, y un procesador, tal comotroff, para aplicar el formato. Instrucciones para el programa de formato fueron incorporadosen el texto integrado a través del uso de un lenguaje de marcas. El análogo moderno para unproceso de este tipo es la página web, que se compone con un editor de texto de algún tipo yluego vuelve por un navegador web utilizando HTML como el lenguaje de marcas paradescribir el diseño de la página final.

No vamos a cubrir Groff en su totalidad, ya que muchos elementos de su lenguaje de marcadode acuerdo con los detalles más arcanos de la tipografía. En su lugar nos concentraremos enuno de sus paquetes de macros que sigue siendo de uso generalizado. Estos paquetes demacros se condensan muchos de sus comandos de bajo nivel en un conjunto más reducido decomandos de alto nivel que facilitan el uso de Groff mucho más fácil.

Por un momento, vamos a considerar la página hombre humilde. Vive en el directorio / usr /hombre / acción como un archivo de texto comprimido con gzip. Si tuviéramos que examinar

su contenido sin comprimir, veríamos el (la página de manual para ls en la sección 1 semuestra) siguiente:

En comparación con la página del manual en su presentación normal, podemos empezar a veruna correlación entre el lenguaje de marcas y sus resultados:

319

[Me @ linuxbox ~] $ man ls | cabezaLS (1) Comandos de usuario LS (1)

NOMBRE ls - Lista contenido del directorio

Page 358: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 358/571

21 - Formato de salida

SINOPSISls [OPCI N] ..

LU

_J

I-1

LL

yo_

y

o

 

[Me @ linuxbox ~] /usr/share/man/man1/ls.1.gz $ zcat | -mandoc Groff | cabeza%! PS-Adobe-3.0%% Creador: versión 1.18.1 Groff %% CreationDate: Jue 05 de febrero 2009 13:44:37DocumentNeededResources %%: %% %% fuente Times-Roman + fuente Times-Bold +fuente Times-Italic%% DocumentSuppliedResources: ProcSet grops 1,18 %% 1 Páginas: 4 %% PageOrder:Ascend %% Orientación: vertical

La razón de que esto es de interés es que las páginas de manual son prestados por Groff,utilizando el hombre - paquete de macros doc. De hecho, podemos simular el comando mancon la siguiente tubería:

Aquí se utiliza el programa groff con las opciones establecidas para especificar el paquete de

macros mandoc y el controlador de salida de ASCII. groff puede producir una salida en variosformatos. Si no se especifica ningún formato, PostScript se emite de forma predeterminada:

Hemos mencionado brevemente PostScript en el capítulo anterior, y lo haremos de nuevo enel próximo capítulo. PostScript es un lenguaje de descripción de página que se utiliza paradescribir el contenido de una página impresa a un dispositivo como tipógrafo. Si tomamos lasalida de nuestro comando y la almacenamos en un archivo (suponiendo que estamosutilizando un escritorio gráfico con un directorio de escritorio):

320

[Me @ linuxbox ~] $ zcat /usr/share/man/man1/ls.1.gz Groff -mandoc -T

ascii | CabezaLS (1) Comandos de usuario LS (1)

NOMBRE

ls - lista el contenido del directorio

SINOPSISls [OPCI N] ... [ARCHIVO] ...

Page 359: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 359/571

[me @ linuxbox ~] /usr/share/man/man1/ls.1.gz $ zcat | -mandoc Groff> ~ /Escritorio / foo.ps

[Me @ linuxbox ~] $ ps2pdf ~ / Desktop / foo.ps ~ / Desktop / ls.pdf

Documento Sistemas de formato

Un icono para el archivo de salida debería aparecer en el escritorio. Haciendo doble clic en elicono, un visor de página debe comenzar y revelar el archivo en su forma rendido:

Lo que vemos es una página de manual bien tipografía para ls! De hecho, es posible convertirel archivo PostScript a PDF (Portable Document Format) de archivo con este comando:

El programa ps2pdf es parte del paquete ghostscript, que se instala en la mayoría de lossistemas Linux que admiten la impresión.

Punta: Los sistemas Linux a menudo incluyen muchos programas de línea de comandospara el formato de archivo

321

Figura 4: Visualización de PostScript de salida con un Visor de páginas En GNOME

Page 360: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 360/571

# Secuencia de comandos sed para producir distribuciones Linux informe

1 i \

.TS \caja central; \ cb s s \ cb cb cb \ l n c \.Distribuciones Linux Informe \= \Nombre Versión Lanzamiento \

s / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {4 \} \) $ / \ 3 \ 1- \2 / $ a \.TEDistros-TBL -f SED | [me @ linuxbox ~] $ sort -k 1,1 -k distros.txt 2n.sed | Groff -t -T ascii 2> / dev / null

+ --------------------------------------------------- +| Distribuciones Linux Reportar |+ --------------------------------------------------- +| Nombre Versión Lanzamiento |

322

21 - Formato de salida

la conversión. A menudo se nombran usando la convención de format2format. Trate deusar el comando ls / usr / bin / * [[: alpha:]] 2 [[: alpha:]] * identificarlos. Pruebatambién la búsqueda de programas nombrados formatto formato.

Para nuestro último ejercicio con Groff, vamos a volver a nuestro viejo amigo distros.txt unavez más. Esta vez, vamos a utilizar el programa TBL que se utiliza para dar formato a tablaspara componer la lista de las distribuciones de Linux. Para ello, vamos a usar nuestro scriptsed antes de añadir marcas a una secuencia de texto que vamos a alimentar a Groff.

En primer lugar, tenemos que modificar nuestra secuencia de comandos sed para agregar lassolicitudes necesarias que TBL requiere. Con un editor de texto, cambiaremos distros.sed a losiguiente:

Tenga en cuenta que para la secuencia de comandos para que funcione correctamente, se debeha llevado a ver que las palabras "Nombre Versión Lanzamiento" están separadas porpestañas, no espacios. Guardaremos el archivo resultante como tbl.sed-distros. TBL utiliza los.TS y solicitudes .te para iniciar y terminar la tabla. Las filas siguientes los .TS solicitan definirlas propiedades globales de la tabla que, para nuestro ejemplo, se centra horizontalmente en lapágina y rodeado por una caja. Las líneas restantes de la definición describen el diseño decada fila de la tabla. Ahora, si corremos nuestra cartera reportgenerating de nuevo con lanueva secuencia de comandos sed, nos pondremos lo siguiente:

Page 361: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 361/571

Documento Sistemas de formato

+ ------------ +| Fedora 5 2006-03-20 | | Fedora 6 2006-10-24 | | Fedora 7 2007-05-31 | | Fedora 8 2007-11-08 | | Fedora 9 2008-05-13 | | Fedora 10 2008-11-25 | | SUSE 10.1 2006-05-11 | | SUSE 10.2 2006-12-07 | | SUSE 10.3 2007-10-04 | | SUSE 11.0 2008-06-19 | 

| Ubuntu 6.06 2006-06-01|

 | Ubuntu 6.10 2006-10-26 | | Ubuntu 7.04 2007-04-19 | | Ubuntu 7.10 2007-10-18 | | Ubuntu 8.04 2008-04-24 | | Ubuntu 8.10 2008-10-30 | + ------------ +

[me @ linuxbox ~] $ sort -k 1,1 -k distros.txt 2n | distros-TBL -f SED .sed | Groff -t> ~ /Escritorio / foo.ps

Adición de la opción -t para groff instruye a pre-proceso de la secuencia de texto con TBL. Delmismo modo, la opción -T se utiliza para la salida a ASCII en lugar de el medio de salida pordefecto, PostScript.

El formato de la salida es lo mejor que podemos esperar si estamos limitados a las capacidades

de un terminal de pantalla o impresora de estilo máquina de escribir. Si especificamos salidaPostScript y gráficamente ver la salida resultante, obtenemos un resultado mucho mássatisfactorio:

323

Page 362: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 362/571

21 - Formato de salida

Resumiendo

Teniendo en cuenta que el texto es tan central en el carácter de los sistemas operativos tipoUnix, que tiene sentido que habría muchas herramientas que se utilizan para manipular y darformato al texto. Como hemos visto, hay! Las sencillas herramientas de formato como FMT ypr encontrarán muchos usos en las secuencias de comandos que producen documentos cortos,mientras que Groff (y amigos) se pueden utilizar para escribir libros. Nunca podemos escribirun documento técnico utilizando herramientas de línea de comandos (aunque hay muchaspersonas que lo hacen!), Pero es bueno saber que hemos podido.

Lectura adicional

•  Guía del usuario Groffhttp://www.gnu.org/software/groff/manual/ 

•  Escribir papeles con nroff Usando -Yo:

http://docs.freebsd.org/44doc/usd/19.memacros/paper.pdf  

•  -me Manual de referencia:

324

Figura 5: Visualización de la tabla final

Page 363: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 363/571

http://docs.freebsd.org/44doc/usd/20.meref/paper.pdf  

Page 364: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 364/571

Lecturaadicional

325

•  Tbl - Un programa para los cuadros de formato:

http://plan9.bell-labs.com/10thEdMan/tbl.pdf  

Page 365: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 365/571

•  Y, por supuesto, probar los siguientes artículos en Wikipedia:http://en.wikipedia.org/wiki/TeX  http://en.wikipedia.org/wiki/DonaldKnuth http://en.wikipedia.org/wiki/Typesetting  

Page 366: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 366/571

22  - Impresión

22 -Impresión

Después de pasar los últimos dos capítulos de manipulación de texto, es el momento de ponerese texto en el papel. En este capítulo, vamos a ver las herramientas de línea de comandos quese utilizan para imprimir archivos y controlar el funcionamiento de la impresora. No vamos aestar viendo cómo configurar la impresión, como que varía desde la distribución hasta ladistribución y por lo general se configura automáticamente durante la instalación. Tenga encuenta que vamos a necesitar una configuración de la impresora de trabajo para llevar a cabo

los ejercicios de este capítulo.Vamos a discutir los siguientes comandos:

•  PR - Convertir archivos de texto para la impresión

•  LPR - Imprimir archivos

•  a2ps - archivos con formato para imprimir en una impresora PostScript

•  lpstat - Mostrar información de estado de la impresora

•  lpq - Mostrar el estado de la cola de impresión

•  lprm - Cancelar trabajos de impresión

Una breve historia de la imprenta

Para entender completamente las funciones de impresión que se encuentran en los sistemasoperativos de tipo Unix, primero tenemos que aprender un poco de historia. Impresión ensistemas tipo Unix se remonta al inicio del sistema operativo en sí. En aquellos días, lasimpresoras y la forma en que se utilizaron fue muy diferente de hoy.

Impresión En El Dim TiemposAl igual que los ordenadores, las impresoras en la era pre-PC tienden a ser grandes, caros, ycentralizado. El usuario de la computadora típica de 1980 trabajó en un terminal conectado a

un ordenador a cierta distancia. La impresora se encuentra cerca de la computadora y estababajo la atenta mirada de los operadores de la computadora.

Cuando las impresoras eran caras y centralizada, ya que a menudo se encontraban en losprimeros días de Unix, era una práctica común para muchos usuarios compartir unaimpresora. Para identificar los trabajos de impresión BE-

326

Page 367: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 367/571

Una breve historia de la imprenta

anhelo de un usuario en particular, un titular de página que muestra el nombre del usuario amenudo se imprime al principio de cada trabajo de impresión. El personal de soporteinformático sería entonces cargar un carro que contiene los trabajos de impresión del día yentregarlos a los usuarios individuales.

Impresoras basada en caracteresLa tecnología de impresión de los años 80 era muy diferente en dos aspectos. En primer lugar,las impresoras de la época eran casi siempre las impresoras de impacto. Las impresoras deimpacto utilizan un mecanismo mecánico que golpea una cinta contra el papel para formarimpresiones de caracteres de la página. Dos de las tecnologías populares de la época eran laimpresión de margarita y la impresión de matriz de puntos.

El segundo, y más importante característica de las impresoras tempranas era que lasimpresoras utilizan un conjunto fijo de personajes que eran intrínsecos al propio dispositivo.Por ejemplo, una impresora de margarita sólo podía imprimir los caracteres realmente

moldeados en los pétalos de la margarita. Esto hizo que las impresoras tanto como máquinasde escribir de alta velocidad. Al igual que con la mayoría de las máquinas de escribir, queimprimen utilizando (ancho fijo) fuentes de monoespaciado. Esto significa que cada caráctertiene la misma anchura. La impresión se realiza en posiciones fijas en la página, y el área deimpresión de una página contiene un número fijo de caracteres. La mayoría de las impresorasimprimen diez caracteres por pulgada (CPI) en horizontal y seis líneas por pulgada (LPI) ensentido vertical. El uso de este esquema, una hoja de EE.UU.-carta de papel es de 85 caracteresde ancho y 66 líneas de alta. Teniendo en cuenta un pequeño margen a cada lado, 80 caracteresse consideró la anchura máxima de una línea de impresión. Esto explica por qué las pantallasterminales (y nuestros emuladores de terminal) son normalmente de 80 caracteres de ancho.Proporciona un WYSIWYG (lo que ves es lo que obtienes) vista de la salida impresa,utilizando una fuente monoespaciada.

Los datos se envían a una impresora de la máquina de escribir como en una corriente simplede los bytes que contienen los caracteres a imprimir. Por ejemplo, para imprimir una "a", seenvía el código de caracteres ASCII 97. Además, los códigos de control de baja numeradaASCII proporcionan un medio de movimiento del carro y el papel de la impresora, utilizandocódigos de retorno de carro, avance de línea, forma de alimentación, etc. El uso de los códigosde control, es posible lograr algunos efectos de fuente limitados, tales como negrita, por tenerla impresora imprime un carácter, de retroceso, y se imprime el carácter de nuevo paraobtener una impresión más oscura de impresión en la página. De hecho, podemos presenciaresto si usamos nroff para hacer una página de manual y examine la salida utilizando -Un gato:

Page 368: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 368/571

[Me @ linuxbox ~] $ zcat /usr/share/man/man1/ls.1.gz | nroff -man | -Un gato |cabezaLS (1) Comandos de usuario LS (1)$$$NAHNAAHAMAHMEAHE $

ls - Lista el contenido del directorio $327

Page 369: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 369/571

$SAHSYAHYNAHNOAHOPAHPSAHSIAHISAHS $

lAHlsAHs [_AHO_AHP_AHT_AHI_AHO_AHN] ... [_AHF_AHI_AHL_AHE] ... $22  - Impresión

El AH caracteres (Control-h) son los retrocesos que se utilizan para crear el efecto negrita. Delmismo modo, también podemos ver una secuencia de retroceso / guión bajo se usa paraproducir el subrayado.

Impresoras gráficasEl desarrollo de interfaces gráficas de usuario llevó a grandes cambios en la tecnología de laimpresora. Medida que las computadoras se movieron a más pantallas basadas en imágenes,la impresión se mudó de carácter-basado a las técnicas gráficas. Esto fue facilitado por eladvenimiento de la impresora láser de bajo costo que, en lugar de imprimir caracteres fijos,podría imprimir pequeños puntos en cualquier lugar del área imprimible de la página. Estohizo que la impresión de las fuentes proporcionales (como los utilizados por los tipógrafos), eincluso fotografías y diagramas de alta calidad, es posible.

Sin embargo, al pasar de un esquema basado en el personaje de un esquema gráfico presentaun desafío técnico formidable. He aquí por qué: El número de bytes necesarios para llenar una

página con una impresora basada en caracteres se puede calcular de esta manera (suponiendo60 líneas por página conteniendo cada una 80 caracteres):

60 x 80 = 4800 bytes

En comparación, un 300 puntos por pulgada (DPI) impresora láser (suponiendo una superficiede 8 por 10 pulgadas de impresión por página) requiere:

( 8  X 300) X (10 X 300) / 8 = 900.000 bytes

Muchas de las redes de PC lentas simplemente no podía manejar los casi un megabyte dedatos necesarios para imprimir una página completa en una impresora láser, por lo que eraevidente que se necesitaba una invención ingeniosa.

Esa invención resultó ser el lenguaje de descripción de página (PDL). Un lenguaje de

descripción de página es un lenguaje de programación que se describe el contenido de unapágina. Básicamente, dice, "ir a esta posición, dibuja el carácter 'a' en 10 puntos Helvetica, vayaa esta posición ..." hasta que se describe todo lo que en la página. La primera gran PDL fuePostScript de Adobe Systems, que todavía está en uso amplio hoy. El lenguaje PostScript es uncom - lenguaje de programación completa adaptada a la tipografía y otros tipos de gráficos eimágenes. Se incluye una función de apoyo a los 35 estándar, fuentes de alta calidad, ademásde la posibilidad de aceptar las definiciones de fuentes adicionales en tiempo de ejecución. Enun primer momento, el apoyo a PostScript fue construido en los propios impresoras. Estoresuelve el problema de la transmisión de datos. Si bien el programa PostScript típica era muyprolijo en comparación con el flujo de bytes sencillo de impresoras basadas en caracteres, queera mucho más pequeño que el número de bytes necesarios para representar a toda la página

impresa.Una impresora PostScript aceptó un programa PostScript como entrada. La impresoracontenía su

328

Page 370: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 370/571

Una breve historia de la imprenta

propio procesador y la memoria (lo que a menudo la impresora un ordenador más potenteque el ordenador al que se adjunta) y ejecutado un programa especial llamado un intérpretede PostScript, que leyó el programa PostScript entrante y rindió los resultados en la memoriainterna de la impresora, formando de esta manera el patrón de bits (puntos) que se transfiere

al papel. El nombre genérico de este proceso de hacer algo en un patrón de bits grande(llamado un mapa de bits) es el procesador de imágenes raster o RIP.

A medida que los años pasaron, ambos equipos y redes se convirtió en mucho más rápido.Esto permitió que el RIP para pasar de la impresora al ordenador central, que, a su vez,permite impresoras de alta calidad para ser mucho menos costoso.

Muchas impresoras de hoy todavía aceptan flujos basados en caracteres, pero muchasimpresoras de bajo costo no lo hacen. Se basan en RIP de la computadora host paraproporcionar una corriente de bits a imprimir como puntos. Todavía hay algunas impresorasPostScript, también.

Impresión con LinuxSistemas Linux modernos emplean dos suites de software para llevar a cabo y gestionar laimpresión. Los primeros, CUPS (Common UNIX Printing System) proporciona controladoresde impresión y gestión de trabajos de impresión, y la segunda, Ghostscript, un intérprete dePostScript, actúa como un PIR.

CUPS gestiona impresoras mediante la creación y el mantenimiento de las colas de impresión.Como ya comentamos en nuestra lección de historia anterior, la impresión de Unix fueoriginalmente diseñado para administrar una impresora centralizada compartida por variosusuarios. Ya que las impresoras son lentos por naturaleza, en comparación con los equiposque están alimentando ellos, sistemas de impresión necesitan una manera de programarvarios trabajos de impresión y mantener las cosas organizadas. CUPS también tiene la

capacidad de reconocer diferentes tipos de datos (dentro de lo razonable) y puede convertirarchivos a un formato imprimible.

Preparación de los ficheros para la impresión

Como usuarios de la línea de comandos, que son en su mayoría interesados en la impresión detexto, aunque sin duda es posible imprimir otros formatos de datos también.

PR - Convertir archivos de texto para impresiónNos fijamos en pr un poco en el capítulo anterior. Ahora vamos a examinar algunas de susmuchas opciones que se utilizan junto con la impresión. En nuestra historia de la imprenta,

vimos cómo las impresoras basadas en caracteres utilizan fuentes de monoespaciado, lo queresulta en un número fijo de caracteres por línea y líneas por página. PR se utiliza para ajustarel texto para que quepa en un tamaño de página específico, con encabezados de página ymárgenes opcionales. He aquí un resumen de sus opciones más comúnmente utilizadas:

Tabla 22-1: Opciones pr Común

Opción Descripción

Page 371: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 371/571

329

pr se utiliza a menudo en las tuberías como un filtro. En este ejemplo, vamos a producir una

lista de directorios de / usr / bin y formatearlo en paginado, la salida de tres columnasutilizando pr:

330

22 - Impresión+ Primera [: pasado] 

Salida de una serie de páginas que empiezan por primera y,opcionalmente, terminando con el último.

-Columnas Organizar el contenido de la página en el número de columnas

especificadas por columnas.-a Por defecto, la salida de varias columnas aparece verticalmente.Mediante la adición de la opción -a (al otro lado), el contenido

-d Salida doble espacio."Formato" -D

Dar formato a la fecha que aparece en los encabezados de páginautilizando el formato. Vea la página del manual para el comandofecha para una descripción de la cadena de formato.

-fUsar formulario alimenta en lugar de retornos de carro para separarlas á inas.

-h "cabecera"En la parte central de la cabecera de la página, utilice encabezado

en lugar del nombre del archivo que se está procesando.longitud -l

Conjunto longitud de la página a la longitud. El valorpredeterminado es 66 (letras a 6 líneas por pulgada)

-n Las rectas numéricas.

-o compensar Crear un personajes compensar margen izquierdo de ancho.anchura w Conjunto ancho de página a la anchura. El valor predeterminado es

72.

[Me @ linuxbox ~] $ ls / usr / bin | PR -3 -w 65 | cabeza

02.18.2009 14:00 Page 1

[  apturl BSD-escritura411toppm Arkansas BSHa2p arecord btcflasha2ps arecordmidi bug-buddya2ps-lpr-wrapper arca buildhash

Page 372: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 372/571

 

El envío de un trabajo deimpresión en una impresora

El envío de un trabajo de impresión en una impresora

La suite de impresión CUPS admite dos métodos de impresión utilizados históricamente ensistemas tipo Unix. Un método, llamado Berkeley o LPD (utilizado en la versión Berkeley

Software Distribution de Unix), utiliza el programa lpr, mientras que el otro método, llamadoSysV (de la versión del sistema V de Unix), utiliza el programa lp. Ambos programas hacenmás o menos lo mismo. La elección de uno sobre el otro es una cuestión de gusto personal.

LPR - Archivos de impresión (Berkeley Estilo)El programa lpr se puede utilizar para enviar archivos a la impresora. Puede tambiénutilizado en las tuberías, ya que acepta la entrada estándar. Por ejemplo, para imprimir losresultados de nuestro directorio de varias columnas lista anterior, podríamos hacer esto:

[Me @ linuxbox ~] $ ls / usr / bin | PR -3 | lpr 

y el informe se enviará a la impresora predeterminada del sistema. Para enviar el archivo auna impresora diferente, la opción -P se puede utilizar de esta manera:

lpr -Pnombre_impresora 

donde nombre_impresora es el nombre de la impresora deseada. Para ver una lista de lasimpresoras que se sabe que el sistema:

[Me @ linuxbox ~] $ lpstat -a

Sugerencia: Muchas distribuciones de Linux le permiten definir una "impresora"que da salida a los archivos en formato PDF (Portable Document Format), enlugar de imprimir en la impresora física. Esto es muy útil para experimentar conlos comandos de impresión. Revise su programa de configuración de laimpresora para ver si es compatible con esta configuración. En algunas

distribuciones, es posible que necesite instalar paquetes adicionales (comocups-pdf) para habilitar esta función. 

Estas son algunas de las opciones comunes paralpr:

331

Page 373: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 373/571

22  - Impresión ________________

lp - Imprimir archivos (System V Estilo)Como LPR, lp acepta cualquiera de los archivos o la entrada estándar para la impresión. Sediferencia de LPR en que es compatible con un conjunto de opciones diferentes (y un pocomás sofisticado). Estas son las opciones comunes:

Tabla 22-2: Opciones lpr comunes

Opción Descripción

- # Número Establecer el número de copias a número.

-P Imprima cada página con un encabezado sombreado con la fecha, hora,nombre del trabajo, y el número de página. Esta opción llamada"impresión bonita" se puede utilizar al imprimir archivos de texto.

-P Impresora Especifique el nombre de la impresora utilizada para la salida. Si nose especifica una impresora, se utiliza la impresora predeterminada

-r Eliminar archivos después de la impresión. Esto sería útil para losprogramas que producen archivos de impresora de salida

Tabla 22-3: Opciones IP comunes

Opción Descripción-d impresora  Establezca el destino (impresora) a la impresora. Si no

se especifica ninguna opción d, se utiliza la impresorapor defecto del sistema.

-n número  Ajuste el número de copias a número.

-o paisaje Ajuste de salida a la orientación horizontal.-o fitplot Escalar el archivo para ajustarse a la página. Esto es

útil cuando se imprimen imágenes, como archivos

-o escala = número Escala de archivos a número. El valor de 100 llena lapágina. Los valores inferiores a 100 se reducen,mientras que los valores superiores a 100 causa elarchivo que desea imprimir a través de múltiples

-o cpi = número  Establezca los caracteres de salida por pulgada anúmero. El valor predeterminado es 10.

-o LPI = número  Establecer las líneas de salida por pulgada al número.El valor predeterminado es 6.

332

Page 374: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 374/571

El envío de un trabajo de impresión en una impresora0

o

o

o

1

11

1

página de fondo = puntospágina izquierda = puntospágina derecha = puntospágina-top = puntos

Establezca los márgenes de la página. Los valores seexpresan en puntos, una unidad de medidatipográfica. Hay 72 puntos en una pulgada.

-P  páginas Especifique la lista de páginas. páginas puedenexpresarse como una lista separada por comas y / oun rango. Por ejemplo, "1,3,5,7-10"

[Me @ linuxbox ~] $ ls / usr / bin | pr -4 -w 90 -l 88 | lp -o página-izquierda = 36 -o cpi =12 -o lpi = 8

[Me @ linuxbox ~] $ ls / usr / bin | PR -3 -t | a2ps -o ~ / Escritorio / ls.ps -L 66[Stdin (normal): 11 páginas de 6 hojas][Total: 11 páginas de 6 hojas] guardado en el archivo '/ home / me / Escritorio / ls.ps'

Vamos a producir nuestro listado de directorio nuevo, esta vez de imprimir 12 IPC y 8 LPI con

un margen izquierdo de media pulgada. Tenga en cuenta que tenemos que ajustar lasopciones de pr para dar cuenta del nuevo tamaño de página:

Este gasoducto produce una lista de cuatro columnas utilizando el tipo más pequeño que elvalor por defecto. El aumento del número de caracteres por pulgada nos permite encajar máscolumnas en la página.

Otra opción: a2ps

El programa a2ps es interesante. Como se puede suponer a partir de su nombre, es unprograma de conversión de formato, pero también mucho más. Su nombre originalmentesignificaba "ASCII a PostScript" y se utiliza para preparar los archivos de texto para imprimiren impresoras PostScript. Con los años, sin embargo, las capacidades del programa hancrecido, y ahora su nombre significa "Cualquier cosa a PostScript." Si bien su nombre indica

un programa de conversión de formato, es en realidad un programa de impresión. Se envía susalida por defecto a la impresora predeterminada del sistema en lugar de la salida estándar.Comportamiento predeterminado del programa es la de una "impresora bastante", lo que

significa que mejora el aspecto de la producción. Si utilizamos el programa para crear unarchivo PostScript en nuestro escritorio:

Aquí vamos a filtrar la corriente con la banda, utilizando la opción -t (omitir los encabezados ypies de página) y luego con a2ps, especificando un archivo de salida (opción -0) y 66 líneas porpágina (opción -L)

333

Page 375: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 375/571

22  - Impresión para que coincida con la salida de la paginación de pr. Si consideramos que elarchivo resultante con un visor de archivos adecuado, vamos a ver esto:

Como podemos ver, el diseño de salida predeterminada es el formato "dos arriba". Esto haceque el contenido de 2 páginas que se imprimen en cada hoja de papel. a2ps aplica encabezadosy pies de página agradable, también.

Figura 6: Visualización de a2ps salida

a2ps tiene un montón de opciones.A uí es

un resumen:

Tabla 22-4: a2ps Opciones 

Opción Descripción

texto --center-título Establecer página del centro de título al texto.--columns número Organizar las páginas en columnas numéricas. El

valor predeterminado es 2.

334

Page 376: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 376/571

 

335

El envío de un trabajo de impresión en una impresoratexto --footer Página Establecer pie de página al texto.

--guessInformar sobre los tipos de archivos dados comoargumentos. Desde a2ps intenta convertir yformatear todo tipo de datos, esta opción puede

ser útil para predecir lo que van a hacer a2pscuando se les da un archivo en particular.

texto --left-pie de página Set-página izquierda de pie de página al texto.

texto --left-título Set-página izquierda título al texto.

--line-números = intervaloNúmero de líneas de salida de cada líneas deintervalo.

--list = por defecto Configuración de pantalla predeterminada.--list = tema Configuración de pantalla para el tema, donde el

tema es uno de los siguientes: las delegaciones(programas externos que se utilizarán para

convertir los datos), codificaciones, características,variables, medios de comunicación (los tamañosde papel y similares), PPD (descripciones deimpresora PostScript), impresoras, prólogos(porciones de código que llevan el prefijo de salida

--pages gama Imprimir páginas en rango.

texto --right-pie de página Ajuste el botón derecho del pie de página al texto.

texto --right-título Establecer título haga página de texto.--rows número Organizar las páginas en las filas de números. El

valor predeterminado es uno.-B No hay encabezados de página.

texto -b Cabecera Set página al texto.

tamaño -f Utilice la fuente punto tamaño.-l número

Set caracteres por línea a número. Esto y la opción-L (abajo) se puede utilizar para hacer que losarchivos paginados con otros programas, como pr,encaja correctamente en la página.

-L Número Establecer líneas por página número.

Nombre -MUse el nombre los medios de comunicación. Pore em lo, "A4".

-n número Número de salida copias de cada página.

Page 377: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 377/571

 

Esto es sólo un resumen. a2ps tiene varias opciones más.

Nota: a2ps todavía está en desarrollo activo. Durante mis pruebas, me di cuenta de uncomportamiento diferente en varias distribuciones. En CentOS 4, la producciónsiempre fue a la salida estándar de forma predeterminada. En CentOS 4 y Fedora 10, lasalida por defecto en los medios A4, a pesar del programa que se está configurado parautilizar los medios de comunicación de tamaño carta por defecto. Pude superar estosproblemas mediante la especificación explícita la opción deseada. En Ubuntu 8.04, a2psrealizado tal como se documenta.

También tenga en cuenta que hay otra formateador de salida que es útil para laconversión de texto a PostScript. Enscript Llamado, puede realizar muchas de lasmismas clases de formato e impresión trucos, pero a diferencia de a2ps, sólo acepta la

introducción de texto.

Seguimiento y control de los trabajos de impresión

Como los sistemas de impresión de Unix están diseñados para manejar varios trabajos deimpresión de varios usuarios, CUPS está diseñado para hacer lo mismo. Cada impresora se dauna cola de impresión, donde están estacionados los trabajos hasta que puedan ser almacenanen la impresora. CUPS suministros varios programas de línea de comandos que se utilizanpara gestionar el estado de la impresora y las colas de impresión. Al igual que los programaslpr y lp, estos programas de gestión son el modelo de los programas correspondientes de los

sistemas de impresión de Berkeley y System V.

lpstat - pantalla de estado del sistema de impresión

El programa lpstat es útil para determinar los nombres y la disponibilidad de las impresorasen el sistema. Por ejemplo, si tuviéramos un sistema tanto con una impresora física (llamado"impresora") y una impresora virtual de PDF (llamado "PDF"), podríamos comprobar suestado así:

22 - Impresión

-o archivoEnvía la salida a un archivo. Si no se especificaarchivo como "-", utilice la salida estándar.

-P Impresora Utilice la impresora. Si no se especifica una

impresora, se utiliza la impresora por defecto del-R Orientación vertical.

-r Orientación horizontal.

-T NúmeroPestaña Configure detiene a cada caracteresnuméricos.

texto -u (Marcas de agua) páginas arpillera con el texto.

Page 378: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 378/571

336

Page 379: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 379/571

[Me @ linuxbox ~] $ lpstat -aAceptando solicitudes PDF desde lun 08 de diciembre 2008 03:05:59 PM ESTimpresora aceptando peticiones desde mar 24 de febrero 2009 08:43:22 AM EST[Me @ linuxbox ~] $ lpstat destino por defecto del sistema -s: dispositivo deimpresora para PDF: cups-pdf: /dispositivo para la impresora: ipp: // servidor de impresión: 631 / printers/ impresora

Seguimiento y control de los trabajos de impresión

Además, pudimos determinar una descripción más detallada de la configuración del sistemade impresión de esta manera:

En este ejemplo, vemos que "la impresora" es la impresora predeterminada del sistema y quees una impresora de red utilizando el protocolo de impresión de Internet (IPP: //) conectada aun sistema llamado "servidor de impresión".

Las opciones comúnmente útiles incluyen:

lpq - Pantalla de estado de la cola de la impresora

Para ver el estado de una cola de impresión, se utiliza el programa lpq. Esto nos permite ver elestado de la cola y los trabajos de impresión que contiene. He aquí un ejemplo de una colavacía para una impresora por defecto del sistema llamado "impresora":

337

Tabla 22-5: Opciones lpstat Común

Opción Descripción-a [impresora ...] Visualizar el estado de la cola de impresión para la impresora.

Tenga en cuenta que este es el estado de la capacidad de la colade impresión a aceptar puestos de trabajo, no el estado de lasimpresoras físicas. Si no se especifican impresoras, se muestran

-dMostrar el nombre de la impresora predeterminada delsistema.

-p [impresora ...]Muestra el estado de la impresora especificada. Si no seespecifican impresoras, se muestran todas las impresoras.

-r Muestra el estado del servidor de impresión.

-s Mostrar un resumen de estado.-t Visualizar un informe de estado completo.

Page 380: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 380/571

 

22 -Impresión

[Me @ linuxbox ~]impresora $ lpq hayentradas listo

Si no se especifica una impresora (usando la opción -P), se muestra la impresorapredeterminada del sistema. Si enviamos un trabajo a la impresora y luego miramos a la cola,lo veremos en la lista:

[Me @ linuxbox ~] $ ls * .txt | PR -3 | lpsolicitud id es la impresora 603-(1 archivo (s))[Me @ linuxbox ~] $ lpq impresora está lista y laimpresiónRango Propietario Trabajo Archivo (s)  Tamaño totalme activo 603 (Stdin) 1024 bytes

lprm / cancelar - Cancelar trabajos de impresiónCUPS suministra dos programas que se utilizan para terminar los trabajos de impresión yeliminarlos de la cola de impresión. Uno de ellos es el estilo de Berkeley (lprm) y el otro es deSystem V (cancelar). Ellos difieren ligeramente en las opciones que soportan, pero lo hacenbásicamente lo mismo. Usando nuestro trabajo de impresión anterior como ejemplo,podríamos detener el trabajo y eliminar de esta manera:

[Me @ linuxbox ~] $ cancelo 603[me @ linuxbox ~] impresora $ lpq

hay entradas listo

Cada comando tiene opciones para eliminar todos los puestos de trabajo que pertenecen a unusuario en particular, en particular de la impresora, y múltiples números de trabajo. Susrespectivas páginas man tienen todos los detalles.

Resumiendo

En este capítulo, hemos visto cómo las impresoras del pasado influyeron en el diseño de lossistemas de impresión en máquinas Unix, y cuánto control está disponible en la línea decomandos para controlar no sólo la programación y ejecución de los trabajos de impresión,

sino también las distintas opciones de salida.

Lectura adicional

• Un buen artículo sobre el lenguaje de descripción de página

PostScript: http://en.wikipedia.org/wiki/PostScript  

338

Page 382: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 382/571

23  - Programas de Compilación

23  - Programas de Compilación

En este capítulo, vamos a ver cómo construir programas por compilar el código fuente. Ladisponibilidad del código fuente es la libertad fundamental que hace que Linux sea posible.Todo el ecosistema de desarrollo de Linux se basa en el libre intercambio entre losdesarrolladores. Para muchos usuarios de escritorio, la compilación es un arte perdido. Lo quesolía ser bastante común, pero hoy en día, los proveedores de distribución de mantenerenormes repositorios de binarios precompilados, listos para descargar y utilizar. En elmomento de escribir estas líneas, el repositorio de Debian (una de la más grande de cualquierade las distribuciones) contiene casi 23.000 paquetes.

Entonces, ¿por compilar el software? Hay dos razones:

1.  Disponibilidad. A pesar de la cantidad de programas precompilados en losrepositorios de distribución, algunas distribuciones pueden no incluir todas lasaplicaciones deseadas. En este caso, la única manera de conseguir el programadeseado es compilarlo desde el código fuente.

2.  Oportunidad. Mientras algunas distribuciones se especializan en el corte de lasversiones de los bordes de los programas, muchos no lo hacen. Esto significa que conel fin de tener la última versión de un programa, es necesario compilación.

La compilación de software de código fuente puede llegar a ser muy complejo y técnico;mucho más allá del alcance de muchos usuarios. Sin embargo, muchas de las tareas decompilación son muy fáciles e involucran sólo unos pocos pasos. Todo depende del paquete.Vamos a ver un caso muy simple con el fin de proporcionar una visión general del proceso ycomo un punto de partida para aquellos que deseen emprender estudios posteriores.

Vamos a introducir un nuevo comando:

• make - utilidad para mantener los programas

¿Qué está recopilando?

En pocas palabras, la compilación es el proceso de traducir el código fuente (la descripción

legible por humanos de un programa escrito por un programador) en el idioma nativo delprocesador del ordenador.

El procesador del ordenador (o CPU) funciona a un nivel muy elemental, la ejecución deprogramas en lo que se llama en lenguaje de máquina. Este es un código numérico quedescribe muy pequeñas operaciones, como "añadir este byte", "punto de esta ubicación en lamemoria," o "copiar este byte."

340

Page 383: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 383/571

¿Qué está recopilando?

Cada una de estas instrucciones se expresa en binario (unos y ceros). Los programasinformáticos más antiguos fueron escritos utilizando el código numérico, lo que puedeexplicar por qué los programadores que escribieron se dijo a fumar mucho, beber litros decafé, y llevar gafas gruesas.

Este problema fue superado por el advenimiento del lenguaje ensamblador, que sustituyó alos códigos numéricos con (un poco) más fácil de usar caracteres mnemotécnicos como CPY(por copia) y MOV (para mover). Los programas escritos en lenguaje ensamblador se procesanen lenguaje de máquina por un programa llamado un ensamblador. El lenguaje ensambladorse sigue utilizando hoy en día para ciertas tareas de programación especializados, tales comocontroladores de dispositivos y sistemas embebidos.

A continuación llegamos a lo que se denominan lenguajes de programación de alto nivel. Sellaman así porque permiten que el programador sea menos preocupados con los detalles de loque el procesador está haciendo y más con la solución del problema en cuestión. Los primeros(desarrollados durante la década de 1950) incluyeron FORTRAN (diseñado para tareas

científicas y técnicas) y COBOL (diseñado para aplicaciones de negocios). Ambos estántodavía en uso limitado en la actualidad.

Si bien hay muchos lenguajes de programación populares, dos predominan. La mayoría de losprogramas escritos para sistemas modernos están escritos en C o C + +. En los ejemplos aseguir, vamos a compilar un programa C.

Los programas escritos en lenguajes de programación de alto nivel se convierten en lenguajede máquina por procesarlos con otro programa, llamado compilador. Algunos compiladorestraducen las instrucciones de alto nivel en lenguaje ensamblador y luego usar un ensambladorpara realizar la etapa final de la traducción a lenguaje de máquina.

Un proceso a menudo se utiliza junto con la compilación se llama enlace. Hay muchas tareascomunes realizadas por los programas. Tomemos, por ejemplo, la apertura de un archivo.

Muchos programas de realizar esta tarea, pero sería un desperdicio tener cada programa aimplementar su propia rutina para abrir los archivos. Tiene más sentido tener una sola piezade programación que sabe cómo abrir los archivos y permitir que todos los programas que senecesitan para la comparten. Proporcionar apoyo a las tareas comunes se logra mediante loque se denominan bibliotecas. Contienen múltiples rutinas, cada uno realizando alguna tareacomún que varios programas pueden compartir. Si nos fijamos en el directorio / lib y / usr /lib, podemos ver que muchos de ellos viven. Un programa llamado un enlazador se utilizapara formar las conexiones entre la salida del compilador y las bibliotecas que el programacompilado requiere. El resultado final de este proceso es el archivo de programa ejecutable,listo para su uso.

Se compilan todos los programas?No. Como hemos visto, hay programas como shell scripts que no requieren la compilación. Seejecutan directamente. Estos están escritos en lo que se conoce como scripts o lenguajesinterpretados. Estas lenguas han crecido en popularidad en los últimos años e incluyen Perl,Python, PHP, Ruby, y muchos otros.

Lenguajes de secuencias de comandos se ejecutan por un programa especial llamado unintérprete. Un intérprete introduce el archivo de programa y lee y ejecuta cada instrucción en

Page 384: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 384/571

ella contenidas. En

341

Page 385: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 385/571

[Me @ linuxbox ~] $ que gcc / usr/ bin / gcc

23  - Programas de Compilación en general, interpretado programas se ejecutan mucho máslentamente que los programas compilados. Esto se debe a que cada instrucción de códigofuente en un programa interpretado se traduce cada vez que se lleva a cabo, mientras que conun programa compilado, una instrucción de código fuente se traduce sólo una vez, y estatraducción se registra permanentemente en el archivo ejecutable final.¿Entonces por qué se interpretan lenguas tan popular? Para muchas tareas de programación,los resultados son "lo suficientemente rápido", pero la verdadera ventaja es que por lo generales más rápido y más fácil de desarrollar programas interpretados que los programascompilados. Los programas se desarrollan por lo general en un ciclo de repetición de código,compilar, probar. Como un programa crece en tamaño, la fase de compilación del ciclo puedellegar a ser bastante largo. Los lenguajes interpretados eliminar el paso de compilación y deeste modo acelerar el desarrollo del programa.

Compilar un programa en C

Vamos a compilar algo. Antes de hacerlo, sin embargo, vamos a necesitar algunasherramientas como el compilador, el enlazador, y hacer. El compilador de C utilizado casiuniversalmente en el entorno Linux se llama gcc (GNU C Compiler), originalmente escrito por

Richard Stallman. La mayoría de las distribuciones no instalan gcc por defecto. Podemoscomprobar para ver si el compilador está presente como esto:

Los resultados en este ejemplo indican que el compilador está instalado.

Punta: Su distribución puede tener una meta paquete (una colección de paquetes) parael desarrollo de software. Si es así, considere la instalación de que si va a compilarprogramas en su sistema. Si su sistema no proporciona un meta-paquete, intente

instalar el gcc y hacer paquetes. En muchas distribuciones, esto es suficiente para llevara cabo el siguiente ejercicio.

Obtención de El Código FuentePara nuestro ejercicio compilación, vamos a elaborar un programa de la llamada dicciónProyecto GNU. Este es un pequeño programa práctico que comprueba los archivos de texto decalidad de la escritura y el estilo. Dado que los programas van, es bastante pequeña y fácil deconstruir.

Después de la convención, que estamos en primer lugar vamos a crear un directorio paranuestro código fuente denominada src y luego descargar el código fuente en que el uso de ftp:

342

Page 386: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 386/571

[Me @ linuxbox ~] $ mkdir src [me @linuxbox ~] $ cd src [me @ src linuxbox] $ftp ftp.gnu.org Conectado a ftp.gnu.org.220 servidor de FTP de GNU listo.

Nombre (ftp.gnu.org:me): anónimo 230 Loginéxito.Tipo de sistema remoto es UNIX.Utilizando el modo binario para transferirarchivos. ftp> cd gnu / dicción 250 Directoriocambiado correctamente. ftp> ls200 PORT command successful. Considere el uso de PASV. 150Aquí viene la lista de directorios.

-rw-r -r-- 1 1003 65534 68,940 28 1998 dicción-0.7.tar.gz-rw-r -r-- 1 1003 65534 90957 Mar 04 2002 dicción-1.02.tar.gz-rw-r -r-- 11003 65534 141062 17 2007 dicción-1.11.tar.gz

226 Directorio de enviar en Aceptar.ftp> get-dicción 1.11.tar.gzlocales: dicción-1.11.tar.gz remoto: dicción-1.11.tar.gz 200 PORTcommand successful. Considere el uso de PASV.150 Apertura conexión en modo BINARIO datos de dicción-1.11.tar.gz (141062bytes).226 Archivo enviar Aceptar.141,062 bytes recibidos en 0,16 segundos (847,4 kB / s) ftp> bye 221 Adiós.[Me @ linuxbox src] $ ls dicción-1.11.tar.gz

[Me @ linuxbox src] $ tar xzf dicción-1.11.tar.gz 

343

Compilar un programa en CNota: Puesto que somos el "mantenedor" de este código fuente, mientras que

recopilamos, nos mantendremos en ~ / src. El código fuente instalada por su

distribución se instalará en / usr / src, mientras que el código fuente destinado a serutilizado por múltiples usuarios por lo general se instala en / / local / src usr.

Como podemos ver, el código fuente se suministra generalmente en forma de un archivo tarcomprimido. A veces llamado un archivo tar, este archivo contiene el árbol de código fuente, ola jerarquía de directorios y archivos que componen el código fuente. Después de llegar al sitioftp, examinamos la lista de alquitrán de los archivos disponibles y seleccione la versión másreciente para su descarga. Utilizando el comando get dentro de ftp, copiamos el archivo desdeel servidor FTP para el equipo local.

Una vez que el archivo tar se descarga, se debe desembalar. Esto se realiza con el programatar:

Page 387: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 387/571

[me @ linuxbox src] $ lsdicción-1.11 dicción-1.11.tar.gz23 - Programas de Compilación

Consejo: El programa de dicción, al igual que todo el software Proyecto GNU, sigueciertas normas para el envasado de código fuente. La mayoría otro código fuente

disponible en el ecosistema Linux también sigue este estándar. Uno de los elementosde la norma es que cuando se desempaqueta el archivo de código fuente de alquitrán,se creará un directorio que contiene el árbol de código fuente, y que este directorio seránombrado proyecto-x, xx, que contiene por lo tanto, tanto el nombre del proyecto y sunúmero de versión . Este esquema permite una fácil instalación de varias versiones delmismo programa. Sin embargo, a menudo es una buena idea examinar el diseño delárbol antes de desempaquetarlo. Algunos proyectos no van a crear el directorio, peroen vez entregará los archivos directamente en el directorio actual. Esto hará un lío en sudirectorio src de otra manera bien organizada. Para evitar esto, utilice el comandosiguiente para examinar el contenido del archivo tar:

alquitrán tzvf tarfile | cabeza

Examinar el árbol de fuentesDesembalaje de los resultados de archivos tar en la creación de un nuevo directorio, llamadodicción-1.11. Este directorio contiene el árbol de código fuente. Echemos un vistazo en elinterior:

En ella, vemos una serie de archivos. Programas pertenecientes al Proyecto GNU, así comomuchos otros, se suministrará el README archivos de documentación, INSTALAR,

NOTICIAS, y la copia. Estos archivos contienen la descripción del programa, informaciónsobre cómo construir e instalar, y sus términos de licencia. Siempre es una buena idea leerdetenidamente el README e INSTALL archivos antes de intentar construir el programa.

344

[Me @ linuxboxsrc] $ cd de

1.11 [Me @ linuxbox dicción-1.11] $ ls

config.guess diction.c getopt.c nlconfig.h.in diction.pot getopt.h nl.poconfig.sub diction.spec getopt_int.h READMEconfigurar diction.spec.in INSTALAR sentence.cconfigure.in diction.texi.in install-sh sentence.hCOPIA es Makefile.in style.1.inde es_ES misc.c style.cde.po en_GB.po misc.h pruebadiction.1.in getopt1.c NOTICIAS

Page 388: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 388/571

 

Compilar un programaen C

Los otros archivos interesantes en este directorio son los que terminan en .c y .h:

[Me @ linuxbox dicción-1.11] $ ls * .cdiction.c getoptl.c getopt.c misc.c sentence.c style.c [me @ linuxboxdicción-1.11] $ ls * .h getopt.h getopt_int.h misc.h sentence.h

Los archivos .c contienen los dos programas en C suministrados por el paquete (estilo ydicción), divididos en módulos. Es una práctica común para los programas grandes para serroto en más pequeño, más fácil de manejar piezas. Los archivos de código fuente son textonormal y pueden ser examinadas con menos:

[Me @ linuxbox dicción-1.11] $ Menos diction.c

Los archivos .h son conocidos como archivos de cabecera. Estos también son texto normal.Archivos de cabecera contienen descripciones de las rutinas incluidas en un archivo de códigofuente o de la biblioteca. Para que el com - piler para conectar los módulos, debe recibir unadescripción de todos los módulos necesarios para completar todo el programa. Cerca delprincipio del archivo diction.c, vemos esta línea:

#include "getopt.h"

Esto indica al compilador que lea las getopt.h de archivos, ya que lee el código fuente endiction.c con el fin de "saber" lo que está en getopt.c. El archivo getopt.c suministra rutinasque son compartidos tanto por los programas de estilo y dicción.

Por encima de la declaración para incluir getopt.h, vemos algún otro incluyen declaracionescomo éstas:

#include <regex.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>

Éstos también se refieren a archivos de cabecera, sino que se refieren a archivos de cabeceraque viven fuera del árbol fuente de corriente. Ellos son suministrados por el sistema de apoyoa la recopilación de todos los programas. Si nos fijamos en / usr / include, podemos verlos:

345

Page 389: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 389/571

 

23 - Programas deCompilación

[Me @ dicción-1.11 linuxbox] $ ls / usr / include

Se instalarán los archivos de cabecera en este directorio cuando instalamos elcompilador.

La construcción de El ProgramaLa mayoría de los programas construyen con una secuencia dedos comandos simples,:

./configurehacer

El programa de configuración es un script de shell que se suministra con el árbol de código

fuente. Su trabajo consiste en analizar el entorno de construcción. La mayor parte del códigofuente está diseñado para ser portátil. Es decir, que está diseñado para construir en más de untipo de sistema de tipo Unix. Pero para hacer eso, el código fuente puede tener que sometersea pequeños ajustes durante la construcción para dar cabida a las diferencias entre los sistemas.configurar también comprueba que las herramientas externas necesarias y se instalan loscomponentes. Vamos a ejecutar configure. Desde configure no se encuentra donde la cáscaraespera normalmente los programas que se encuentran, debemos decirle explícitamente a laconcha de su ubicación anteponiendo el comando con ./ para indicar que el programa seencuentra en el directorio de trabajo actual:

[Me @ linuxbox dicción-1.11] $ ./configure

configurar la salida de la voluntad de una gran cantidad de mensajes, ya que pone a prueba yconfigura la construcción. Cuando termine, se verá algo como esto:

comprobación de presencia libintl.h ... sí comprobación de libintl.h ... síla comprobación de la biblioteca que contiene gettext ... ninguno requiereconfigurar: ./config.status creandoconfig.status: la creación de Makefileconfig.status: la creación de diction.1config.status: la creación de diction.texiconfig.status: la creación de diction.spec

config.status: la creación de style.1config.status: la creación de la prueba / rundictionconfig.status: la creación de config.h[Me @ linuxbox dicción-1.11] $

346

Page 390: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 390/571

[Me @ linuxbox dicción-1.11] $ Menos Makefile

CC = gcc

dicción: diction.o sentence.o misc.o getopt.o getopt1.o$ (CC) -o $ @ $ (LDFLAGS) diction.o sentence.o misc.o \ getopt.ogetopt1.o $ (LIBS)

Compilar un programa en C

Lo que es importante aquí es que no hay mensajes de error. Si lo hubiera, la configuraciónfalló, y el programa no va a construir hasta que se corrijan los errores.

Vemos configure creado varios archivos nuevos en nuestro directorio de origen. La más

importante es Makefile. Makefile es un archivo de configuración que instruye al programa

make exactamente cómo construir el programa. Sin ella, hacer que se negará a ejecutar.Makefile es un archivo de texto normal, por lo que podemos ver que:

El programa make toma como entrada un archivo MAKE (que normalmente se denominaMakefile), que describe las relaciones y dependencias entre los componentes que conforman elprograma terminado.

La primera parte del archivo MAKE define variables que son sustituidos en las secciones

posteriores del makefile. Por ejemplo, vemos la línea:

que define el compilador de C para ser gcc. Más tarde, en el makefile, vemos un caso en el quese acostumbra:

Una sustitución se lleva a cabo aquí, y el valor $ (CC) se sustituye por gcc en tiempo deejecución.

La mayor parte del archivo MAKE se compone de líneas, que definen un objetivo, en este casola dicción archivo ejecutable, y los archivos de los que depende. Las líneas restantes describenel comando (s) necesario para crear la diana a partir de sus componentes. Vemos en esteejemplo que la dicción archivo ejecutable (uno de los productos finales) depende de laexistencia de diction.o, sentence.o, misc.o, getopt.o, y getopt1.o. Más tarde, en el makefile,vemos las definiciones de cada uno de éstos como objetivos:

347

diction.o: diction.c config.h getopt.h misc.h sentence.hgetopt.o: getopt.c getopt.h getopt_int.hgetopt1.o: getopt1.c getopt.h getopt_int.hmisc.o: misc.c config.h misc.h

Page 391: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 391/571

 

23 - Programas deCompilación

sentence.o: sentence.c config.h misc.h sentence.hstyle.o: style.c config.h getopt.h misc.h sentence.h

Sin embargo, no vemos ningún comando especificado para ellos. Esto es manejado por unobjetivo general, anteriormente en el archivo, que describe el comando utilizado paracompilar cualquier archivo .c en un .oarchivo:

.c.o:$ (CC) -c $ (CPPFLAGS) $ (CFLAGS) $ <

Todo esto parece muy complicado. ¿Por qué no simplemente una lista de todos los pasos paracompilar las partes y que hacer con ella? La respuesta a esto se aclarará en un momento.Mientras tanto, vamos a correr a hacer y construir nuestros programas:

[Me @ linuxbox dicción-1.11] $ hago

El programa se ejecutará maquillaje, usando los contenidos de Makefile para guiar susacciones. Se va a producir una gran cantidad de mensajes.

Cuando termine, veremos que todos los objetivos están ahora presentes en nuestro directorio:

[Me @ linuxbox dicción-1.11] $ lsconfig.guess de.po es install-sh sentence.cconfig.h dicción es_ES Makefile sentence.hconfig.h.in diction.1 en_GB.mo Makefile.in sentence.oconfig.log diction.1.in en_GB.po misc.c estiloconfig.status diction.c getopt1.c misc.h style.1config.sub diction.o getopt1.o misc.o style.1.inconfigurar diction.pot getopt.c NOTICIAS style.cconfigure.in diction.spec getopt.h nl style.oCOPIA diction.spec.in getopt_int.h nl.mo pruebade diction.texi getopt.o nl.pode.mo diction.texi.in INSTALAR README

Entre los archivos, vemos dicción y estilo, los programas que nos propusimos construir.Felicitaciones están en orden! Nos acaba de compilar nuestros primeros programas de códigofuente!

Pero sólo por curiosidad, vamos a correr de nuevo hacer:

348

Page 392: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 392/571

 

Compilar un programaen C

[Me @ linuxbox dicción-1.11] $ make make:Nada que hacer para el 'todo'.

Sólo se produce este extraño mensaje. Qué está pasando? ¿Por qué no construir el programade nuevo? Ah, esta es la magia de la marca. En lugar de simplemente construir todo de nuevo,hacer sólo lo que necesita construye edificio. Con todos los objetivos presentes, hacen quedeterminó que no había nada que hacer. Podemos demostrar esto mediante la eliminación deuno de los objetivos y ejecutar make nuevamente para ver lo que hace. Vamos a deshacernosde uno de los objetivos intermedios:

[Me @ linuxbox dicción-1.11] $ rm getopt.o [me @linuxbox dicción-1.1l] $ make

Vemos que marca la reconstruye y re-enlaces a los programas de dicción y estilo, ya quedependen del módulo que falta. Este comportamiento también señala otra característicaimportante de hacer: que mantiene los objetivos hasta la fecha. hacer que insiste en que losobjetivos sean más reciente que sus dependencias. Esto tiene mucho sentido, comoprogramador a menudo se actualizará un poco de código fuente y luego hacer uso deconstruir una nueva versión del producto terminado. hacer que se asegura de que todo lo quelas necesidades de creación basado en el código actualizado se construye. Si utilizamos elprograma de toque para "actualizar" uno de los archivos de código fuente, podemos ver queesto suceda:

[Me @ linuxbox dicción-1.11] $ ls -l dicción getopt.c -rwxr-xr-x 1 mí  mí 371642009-03-05 6:14 dicción-rw-r - r-- 1 mí mí 33125 2007-03-30 17:45 getopt.c[Me @ linuxbox dicción-1.11] $ touch getopt.c [me @ linuxbox dicción-1.11] $ls -l dicción getopt.c -rwxr-xr-x 1 mí mí 37164  2009-03-05 6:14 dicción-rw-r - r-- 1 mí mí 33125 2009-03-05 6:23 getopt.c[Me @ linuxbox dicción-1.11] $ hago

Después de realizar trabajos, vemos que se ha restaurado el objetivo de ser más reciente que ladependencia:

[Me @ dicción-1.11 linuxbox] $ ls -l getopt.c dicción -rwxr-xr-x 1 mí mí

  37164 2009-03-05 06:24 dicción-rw-r - r-- me 1 mí 33125 2009-03-05 06:23 getopt.c

La capacidad de cosméticos a construir de forma inteligente sólo lo que necesita es un edificiode gran beneficio para los programadores. Mientras que el tiempo de los ahorros pueden noser muy evidente con nuestro pequeño proyecto,

349

Page 393: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 393/571

[Me @ linuxbox dicción-1.11] $ sudo make install

[Me @ linuxbox dicción-1.11] $ que la dicción/ Usr / / bin / dicción locales[Me @ linuxbox dicción-1.11] $ man dicción

23  - Programas de Compilación es muy significativo con proyectos de mayor envergadura.Recuerde, el kernel de Linux (un programa que se somete a la modificación y mejora continua)contiene varios millones de líneas de código.

Instalación del programa

Código fuente bien embalados a menudo incluyen un objetivo especial llamado make install.Este objetivo se instalará el producto final en un directorio del sistema para su uso. Por logeneral, este directorio es / / local / bin usr, la ubicación tradicional de software construidolocalmente. Sin embargo, este directorio no es normalmente permisos de escritura para los

usuarios normales, por lo que debe ser el usuario root para realizar la instalación:

Después de realizar la instalación, podemos comprobar que el programa está listo para ir:

Y ahí lo tenemos!

Resumiendo

En este capítulo, hemos visto cómo tres órdenes sencillas:

./configure

hacer

make installpuede ser utilizado para construir muchos paquetes de código fuente. También hemos visto el

importante papel que hacen obras de teatro en el mantenimiento de los programas. Elprograma make se puede utilizar para cualquier tarea que necesita para mantener unarelación de destino / dependencia, no sólo para compilar el código fuente.

Lectura adicional

• La Wikipedia tiene buenos artículos sobre los compiladores y el programa

make:http://en.wikipedia.org/wiki/Compiler  http://en.wikipedia.org/wiki/Make (software) 

350

Page 395: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 395/571

 

Parte 4 - Escribiendo ShellScripts

Parte 4 - Escribiendo ShellScripts

353

Page 396: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 396/571

24  - Escribir su primer script

24 - Escrib ir su prim er sc r ipt

En los capítulos anteriores, hemos reunido un arsenal de herramientas de línea de comandos.Mientras que estas herramientas pueden resolver muchos tipos de problemas decomputación, todavía estamos limitados a ellos utilizando manualmente uno por uno en lalínea de comandos. ¿No sería fantástico si pudiéramos conseguir la cáscara para hacer más dela obra? Podemos. Al unir nuestras herramientas juntos en programas de diseño propio, la

cáscara se puede llevar a cabo complejas secuencias de tareas por sí mismo. Podemospermitirle hacer esto escribiendo scripts de shell.

¿Qué son los scripts del Shell?

En los términos más simples, un script de shell es un archivo que contiene una serie decomandos. El shell lee este archivo y ejecuta los comandos como si hubieran sido introducidosdirectamente en la línea de comandos.

La cáscara es algo único, ya que es a la vez una poderosa interfaz de línea de comandos para elsistema y un intérprete de lenguaje de scripting. Como veremos, la mayoría de las cosas que sepueden hacer en la línea de comandos se puede hacer en las secuencias de comandos, y lamayoría de las cosas que se pueden hacer en las secuencias de comandos se puede hacer en lalínea de comandos.Hemos cubierto muchas características de concha, pero nos hemos centrado en lascaracterísticas más utilizadas directamente en la línea de comandos. El shell también ofrece unconjunto de características por lo general (pero no siempre) que se utiliza al escribirprogramas.

Cómo escribir un Shell Script

Para crear con éxito y ejecutar un script de shell, que tenemos que hacer tres cosas:

1.  Escribir un guión. Los shell scripts son archivos de texto normales. Así quenecesitamos un editor de texto para escribirlos. Los mejores editores de texto

proporcionarán resaltado de sintaxis, que nos permite ver una vista con código decolor de los elementos de la secuencia de comandos. El resaltado de sintaxis nosayudará detectamos ciertos tipos de errores comunes. vim, gedit, kate, y muchos otroseditores son buenos candidatos para la escritura de guiones.

2.  Haga el script ejecutable. El sistema es bastante quisquilloso con no dejar quecualquier archivo de texto viejo ser tratado como un programa, y por una buenarazón! Tenemos que establecer los permisos del archivo de comandos para permitir la

Page 397: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 397/571

ejecución.

354

Page 398: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 398/571

#! / Bin / bash

# Este es nuestro primer script.

echo 'Hello World!'

[Me @ linuxbox ~] $ echo 'Hello World!' # Esto es un comentario demasiado¡Hola Mundo!

Cómo escribir un Shell Script

3. Ponga el guión en algún lugar de la cáscara puede encontrarlo. El shell buscaautomáticamente ciertos directorios para archivos ejecutables cuando no se especificaningún nombre de ruta explícita. Para una mayor comodidad, vamos a colocar

nuestros scripts en estos directorios.

Formato de archivo de secuencias de comandos

Siguiendo la tradición de programación, vamos a crear un programa "hola mundo" parademostrar un script muy simple. Así que vamos a disparar hasta nuestros editores de texto yescriba el siguiente script:

La última línea de nuestro script es bastante familiar, sólo un comando echo con unargumento de cadena. La segunda línea también es familiar. Se parece a un comentario quehemos visto utilizado en muchos de los archivos de configuración que hemos examinado yeditado. Una cosa acerca de los comentarios de los scripts de shell es que también puedenaparecer en los extremos de las líneas, así:

echo 'Hello World!' # Esto es un comentario demasiado

Todo, desde el símbolo # en adelante en la línea se ignora.

Como muchas cosas, esto funciona en la línea de comandos,

también:

A pesar de los comentarios son de poca utilidad en la línea de comandos, que van a trabajar.

La primera línea de nuestro script es un poco misterioso. Parece que debería ser uncomentario, ya que comienza con #, pero se ve muy a propósito para ser sólo eso. El #!secuencia de caracteres es, de hecho, una construcción especial llamado shebang. El tingladose utiliza para indicar al sistema el nombre del intérprete que se debe utilizar para ejecutar lasecuencia de comandos que sigue. Cada shell script debe incluir esto como su primera línea.

Salvemos nuestro archivo de script como hola_mundo.

Page 399: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 399/571

355

Page 400: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 400/571

 

24 - Escribir su primer script

Permisos de ejecutables

Lo siguiente que tenemos que hacer es hacer nuestro script ejecutable. Esto se hace fácilmenteusando chmod:

[Me @ linuxbox ~] $ ls -l hola_mundo-rw-r - r-- me 1 mí 63 2009-03-07 10:10 hola_mundo[Me @ linuxbox ~] $ chmod 755 hola_mundo [me@ linuxbox ~] $ ls -l hola_mundo-rwxr-xr-x me 1 mí 63 2009-03-07 10:10 hola_mundo

Hay dos configuraciones de permisos comunes para las secuencias de comandos; 755 para losscripts que todo el mundo puede ejecutar, y de 700 para los scripts que sólo el propietariopuede ejecutar. Tenga en cuenta que los guiones deben ser legibles con el fin de ser ejecutado.

Ubicación del archivo de secuencias decomandos

Con el conjunto de permisos, ahora podemos ejecutarnuestro script:

[Me @ linuxbox ~] $ ./hello_world¡Hola Mundo!

Para que el script para ejecutar, debemos preceder el nombre del script con una ruta explícita.Si no lo hacemos, obtenemos lo siguiente:

[Me @ linuxbox ~] $ hola_mundo bash:hola_mundo: comando no encontrado

¿Por qué es esto? Lo que hace que nuestro script diferente de otros programas? Pues resultaque, nada. Nuestra escritura está muy bien. Su ubicación es el problema. De vuelta en elCapítulo 11, discutimos la variable de entorno PATH y su efecto sobre cómo busca en elsistema para los programas ejecutables. En resumen, el sistema busca en una lista dedirectorios cada vez que necesita para encontrar un programa ejecutable, si no se especificaninguna ruta explícita. Así es como el sistema sabe ejecutar / bin / ls cuando tecleamos ls en la

línea de comandos. El directorio / bin es uno de los directorios que el sistema buscaautomáticamente. La lista de directorios se mantiene dentro de un llamado CAMINO variablede entorno. La variable PATH contiene una lista de directorios separados que se debe buscar.Podemos ver el contenido de RUTA:

356

Page 401: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 401/571

 

• SOJIOM Sinqj-ÁJ3A3 'UTPSP UT 8oj cachorro Jno 8oj uaqj pire Áiojoaiip uxq / ~ AQJ ajpa.ro aMjt 'siuajsÁs njunqpj uo' ós pajnoaxa si ajjj ojqseq 1 spasn AQJ uaqM sjsjxaÁrojoarjp uxq / ~ AQJ jt ajqpjreA HlVd 3LP ° 1 liojoarip uxq / ~ AQJ SPPPÁjjpojjpuiojnp njunqpj Jajojq

• preoqÁaq AQJ uiorj jnduj aqjj q sjparj pire spireuiuioo jjaqs jo ajjj pajjjoads p spparqojqM upjjnq jjaqs p 'pupuiuioo aojnos AQJ roj uiÁuouÁs pupuiuioo p si (■) jop AQx 

orqspq- ■ $ [~ xoqxnuxx @ AUI] 

: Guiamos q ",, aq aq auop uposjqx ■ ajij ojqseq 1 AQ J PPAR-ar jjaqs AQJ 3Apq jsnui un * 'uojssas jpUTiuraj Panno AQJDO aSupqo AQJ Ájddp buey' uoissas ut jpUTiuraj Mau qopa pajja aqpj jjtm jt 'appiu siaSupqo sjqj rajjy

iiHIVdSii: uxq / - = HlVd j jodxa

rejTJ Ojqseq 1 mo ut auijsjqj Sinpnpin AQ jt ppp Ájispa upo a * 'Árojoarip AQJ utpjuoo jou saop ajqpjreA

HlVd 3LH JI

• saop os jt puy 

¡PTJOM oiiaH PIJom oiiaq $ [~ xoqxnuxx@ AUI] uxq piJom_onaq AUI $ [~ xoqxnuxx@ AUI] uxq JXP> | iu $ [~ xoqxnuxx @ AUI]

: Surei§ord jaqjo aqjjq.ioM DO jrejs pjnoqs jt 'jt utijjtm jdjios cachorro mo aopjd Árojoarip uxq AQJ ajuaroun * jt os • suip.iSo.id timo jjaqj ajnoaxa oj oj siasn mojjp' Á.iojoa.np Arnoq s (.iasnAQJ ut Á. iojoa.np uxq p utpjuoo DO ajqpjreA HlVd 3LP 3-mSjjuoo suoTjnqjjjsjpxnujq jsopq • uxq / AUI / auioq / 'jstj AQJ ut Ájojoajjp jsitj AQJ aoqojq -paAjos aq

pjnoM uiajqord mo' mo jstj AQJ ut sajjojoajjp AQJ jo AUP ut pajpooj ai3M jdjios mojj 'saTTOjoajip jo jstj aas un * 3i3jj

sauipB / Jsn /: uxq /: Uxqs /: uxq / OSN /: uxqs / OSN /: uxq / xpoox / JSN /: uxqs / xpoox / JSN /: uxq

 / AUI / auioq /HlVdS oqoa $ [~ xoqxnuxx @ generis]

uoijpooq APQ jdiros

Page 402: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 402/571

[me @ linuxbox ~] $ ls -ad

[Me @ linuxbox ~] $ ls --all --directory

24  - Escribir su primer script

Buenas ubicaciones para ScriptsEl directorio ~ / bin es un buen lugar para poner los guiones destinados a uso personal. Siescribimos un guión que se permite a todos en un sistema a utilizar, la ubicación tradicional es

/ usr / local / bin. Scripts destinados a ser utilizados por el administrador del sistema amenudo se encuentran en / usr / local / sbin. En la mayoría de los casos, suministradolocalmente el software, si los scripts o programas compilados, se deben colocar en la jerarquía/ usr / local y no en / bin o / usr / bin. Estos directorios son especificados por el sistema dearchivos estándar de jerarquía de Linux para contener sólo los archivos suministrados ymantenidos por el distribuidor de Linux.

Más trucos de formato

Uno de los objetivos clave de la escritura de guiones grave es la facilidad de mantenimiento;es decir, la facilidad con la que un script puede ser modificada por su autor u otros para

adaptarlo a las necesidades cambiantes. Hacer un guión fácil de leer y entender es una formade facilitar el mantenimiento fácil.

Nombres opción largaMuchos de los comandos que hemos estudiado cuentan ambos nombres de opciones cortas y

largas. Por ejemplo, el comando ls tiene muchas opciones que se pueden expresar en forma ya

sea corto o largo. Por ejemplo:

y:

son comandos equivalentes. En aras de la reducción de la tipificación, se prefieren lasopciones cortas al especificar opciones en la línea de comandos, pero al escribir secuencias decomandos, las opciones largas pueden proporcionar una mejor legibilidad.

Sangría Y de continuación de líneaCuando se emplea comandos largos, la legibilidad puede ser mejorada mediante la difusiónde la orden en varias líneas. En el capítulo 17, nos fijamos en un ejemplo particularmente largodel comando find: 358

Page 403: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 403/571

 

Más trucos de formato

[Me @ linuxbox ~] $ encuentro parque \ (-type f -no -perm 0600 chmod -exec 0600 '{}'';' \) -o \ (-type d -no -perm 0700 chmod -exec 0700 '{ } ''; '\)

Obviamente, este comando es un poco difícil de entender a primera vista. En una secuencia decomandos, esta com - demanda podría ser más fácil de entender si escrito de esta manera:

encontrar parque \\ (\

-type f \-no -perm 0600 \chmod -exec 0600 '{}' ';' \

\) \-o \\ (\

-type d \-no -perm 0700 \chmod -exec 0700 '{}' ';' \

\)

Mediante el uso de la línea-continuaciones (secuencias de salto de línea-barra invertida) y lasangría, la lógica de este comando complejo está más claramente describe al lector. Estatécnica trabaja en la línea de comandos, también, a pesar de que rara vez se utiliza, ya que esmuy difícil de escribir y editar. Una diferencia entre un guión y una línea de comandos es queel guión puede emplear caracteres de tabulación para lograr la sangría, mientras que la líneade comandos no se puede, ya que las pestañas se usan para activar la terminación.

Configuración de vim para la escritura de guiones

El editor de texto vim tiene muchas, muchas opciones de configuración. Hay variasopciones comunes que pueden facilitar la escritura de guiones:: Sintaxis ense convierte en el resaltado de sintaxis. Con esta configuración, los diferenteselementos de la sintaxis del shell se mostrarán en diferentes colores cuando se ve unasecuencia de comandos. Esto es útil para identificar ciertos tipos de errores deprogramación. Se ve bien, también. Tenga en cuenta que para que esta característicafuncione, debe tener una versión completa de vim instalado, y el archivo que se estáeditando debe tener un tinglado que indica que el archivo es un script de shell. Si tienedificultades con el comando anterior, trate de: = sintaxis conjunto sh lugar.: Conjunto hlsearch

359

Page 404: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 404/571

se convierte en la opción para resaltar los resultados de búsqueda. Digamos que labúsqueda de la palabra "eco". Con esta opción, se resaltará cada instancia de lapalabra.: Set tabstop = 4establece el número de columnas ocupadas por un carácter de tabulación. El valorpredeterminado es de 8 columnas. Establecer el valor de 4 (que es una prácticacomún) permite que las líneas largas para adaptarse más fácilmente en la pantalla.: Conjunto autoindentse convierte en la característica de "guión auto". Esto hace que vim para sangrar unanueva línea de la misma cantidad que la línea sólo escribe. Esto acelera a escribir enmuchos tipos de construcciones de programación. Para detener la sangría, escribaCtrl-D.Estos cambios pueden ser permanentes mediante la adición de estos comandos (sinlos personajes principales del colon) para su archivo ~ / .vimrc.

24  - Escribir su primer script

Resumiendo

En este primer capítulo de secuencias de comandos, hemos visto cómo los guiones se escribeny hacen ejecutar fácilmente en nuestro sistema. También vimos cómo podemos utilizardiversas técnicas de formato para mejorar la legibilidad (y, por tanto, la capacidad demantenimiento) de nuestros scripts. En los próximos capítulos, la facilidad de mantenimientose van a plantear una y otra vez como un principio central en la buena escritura de guiones.

Lectura adicional

•  Para los programas de "Hello World" y ejemplos en varios lenguajes deprogramación, consulte:http://en.wikipedia.org/wiki/Hello mundo 

•  Este artículo de Wikipedia habla más sobre el mecanismo tinglado:http://en.wikipedia.org/wiki/Shebang (Unix) 

360

Page 405: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 405/571

<HTML><HEAD>

<TITLE> Título de la página </TITLE> </ HEAD><BODY>

Cuerpo de la página.</ BODY>

</ HTML>

25 - Creación de unproyecto

25  - Creación de un pro yecto

A partir de este capítulo, vamos a empezar a construir un programa. El propósito de esteproyecto es ver cómo varios se utilizan las funciones de shell para crear programas y, lo másimportante, crear buenos programas.

El programa que vamos a escribir es un generador de informes. Se presentarán diversasestadísticas acerca de nuestro sistema y su estado, y va a producir este informe en formatoHTML, por lo que podemos ver con un navegador web como Firefox o Chrome.

Los programas se construyen generalmente en una serie de etapas, con cada etapa de laadición de características y capacidades. La primera etapa de nuestro programa producirá una

página muy mínima HTML que no contiene la información del sistema. Eso vendrá después.

Primera Etapa: Documento Mínimo

Lo primero que necesitamos saber es el formato de un documento HTML bien formado. Separece a esto:

Si entramos en esto en nuestro editor de texto y guarde el archivo como foo.html, podemosutilizar la siguiente URL en Firefox para ver el archivo:

archivo: ///home/username/foo.html 

La primera etapa de nuestro programa será capaz de salida de este archivo HTML a la salidaestándar. Podemos escribir un programa para hacer esto con bastante facilidad. Vamos aempezar nuestro editor de texto y crear un nuevo archivo llamado ~ / bin / sys_info_page:

361

Page 406: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 406/571

[Me @ linuxbox ~] $ vim ~ / bin / sys_info_page

[Me @ linuxbox ~] $ chmod 755 ~ / bin / sys_info_page[Me @ linuxbox ~] $ sys_info_page

[Me @ linuxbox ~] $ sys_info_page> sys_info_page.html [me @linuxbox ~] $ firefox sys_info_page.html

25  - Creación de un proyecto

Nuestro primer intento de este problema contiene un tinglado, un comentario (siempre es una

buena idea) y una secuencia de comandos de eco, una para cada línea de salida. Después deguardar el archivo, lo haremos ejecutable y tratamos de ejecutarlo:

Cuando se ejecuta el programa, debemos ver el texto del documento HTML que se muestra enla pantalla, ya que los comandos de eco en la secuencia de comandos envían su salida a la

salida estándar. Vamos a ejecutar el programa y redirigir la salida del programa para lasys_info_page.html archivo, de modo que podamos ver el resultado con un navegador web:

Hasta ahora, todo bien.

Al escribir programas, siempre es una buena idea para luchar por la simplicidad y la claridad.El mantenimiento es más fácil cuando un programa es fácil de leer y comprender, por nohablar de que puede hacer que el programa sea más fácil de escribir mediante la reducción dela cantidad de mecanografía. Nuestra versión actual del programa funciona bien, pero podríaser más simple. De hecho, podríamos combinar todos los comandos de eco en una sola, lo quesin duda hará que sea más fácil para agregar más líneas a la salida del programa. Así que,

vamos a cambiar nuestro programa a esta:

362

e introduzca el siguiente programa:

#! / Bin / bash

# Programa para salida de una página de información del sistema

eco "<HTML>"eco "<HEAD>"eco "<TITLE> Título de la página </ TITLE>"eco "</ HEAD>"eco "<Body>"eco "Cuerpo de la página."eco "</ BODY>"eco "</ HTML>"

Page 407: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 407/571

#! / Bin / bash

# Programa para salida de una página de información del

sistemaecho "<HTML>

<HEAD><TITLE> Título de la página </ TITLE>

</ HEAD><BODY>

Cuerpo de la página.</ BODY>

</ HTML> "

#! / Bin / bash

# Programa para salida de una página de información del sistemaecho "<HTML>

<HEAD><TITLE> Sistema de Reporte de Información </ TITLE>

363

Primera Etapa: Documento Mínimo

Una cadena entre comillas puede incluir saltos de línea, y por lo tanto contener varias líneasde texto. La cáscara se mantendrá la lectura del texto hasta que se encuentra con las comillasde cierre. Funciona de esta manera en la línea de comandos, también:

El líder ">" El carácter es el intérprete de comandos contenidas en la variable de shell PS2. Al

parecer, cada vez que escribimos una declaración de varias líneas en la cáscara. Estacaracterística es un poco oscuro en este momento, pero más tarde, cuando nos cubrimos lasdeclaraciones de programación multi-línea, que va a llegar a ser muy útil.

Segunda Etapa: Añadir un poco de datos

Ahora que nuestro programa puede generar un documento de mínimos, vamos a poneralgunos datos en el informe. Para ello, vamos a realizar los siguientes cambios:

[Me @ linuxbox ~] $ echo "<HTML>> <HEAD>> <TITLE> Título de la página </> </ HEAD>> <BODY>> Cuerpo de la página.> < BODY>> </ HTML> "

Page 408: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 408/571

</ HEAD><BODY>

</ BODY>

</ HTML> "

<H1> Sistema de Reporte de Información</ H1>

25  - Creación de un proyecto

Hemos añadido un título de la página y un encabezado para el cuerpo del informe.

Variables y constantes

Hay un problema con nuestro guión, sin embargo. Observe cómo se repite la cadena "Informede información del sistema"? Con nuestro pequeño guión que no es un problema, peroimaginemos que nuestro guión era muy largo y tuvimos varias instancias de esta cadena. Siquisiéramos cambiar el título a otra cosa, tendríamos que cambiarlo en varios lugares, lo quepodría ser un montón de trabajo. ¿Y si pudiéramos organizar la secuencia de comandos paraque la cadena sólo apareció una vez y no varias veces? Eso haría que el mantenimiento futuro

de la escritura mucho más fácil. Así es como podríamos hacer eso:

Al crear una variable llamada título y asignándole el valor "Informe Información del sistema",podemos tomar ventaja de la expansión de parámetro y colocar la cadena en múltiplesubicaciones.

Así que, ¿cómo creamos una variable? Simple, sólo lo utilizan. Si el depósito se encuentra conuna variable, se crea automáticamente. Esto difiere de muchos lenguajes de programación enel que las variables deben ser declaradas antes de su uso o definidos de forma explícita. La

cáscara es muy laxa acerca de esto, lo que puede dar lugar a algunos problemas. Por ejemplo,considere este escenario juega en la línea de comandos: 364

#! / Bin / bash

# Programa para salida de una página de información del sistema

title = "Información del sistema"

echo "<HTML><HEAD>

<TITLE> $ título </ TITLE></ HEAD>

<BODY> <H1> $ título </ H1></ BODY>

</ HTML> "

Page 409: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 409/571

 

Variables y constantes

[Me @ linuxbox ~] $ foo = "Sí"[Me @ linuxbox ~] $ eco $ Foosí[Me @ linuxbox ~] $ eco o l a h - >

[Me @ linuxbox ~] $

En primer lugar, asignamos el valor "sí" a la variable foo, y luego mostrar su valor con eco. Acontinuación mostramos el valor del nombre de la variable mal escrito como "tonto" yobtenemos un resultado en blanco. Esto se debe a que la cáscara felizmente creado la variablede tonto cuando se encontró con él, y le dio el valor por defecto de la nada, o vacío. A partir deesto, nos enteramos de que hay que prestar mucha atención a nuestra ortografía! También esimportante entender lo que realmente sucedió en este ejemplo. Desde nuestra mirada anteriorcómo el shell realiza expansiones, sabemos que el comando:

[Me @ linuxbox ~] $ echo $ foo

se somete a la expansión de parámetros yresultados en:

[Me @ linuxbox ~] $ echo sí

Considerando que elcomando:

[Me @ linuxbox ~] $ echo $ tonto

se expandeen:

[Me @ linuxbox ~] $ echo

La variable vacía se expande en la nada! Esto puede causar estragos en los comandos querequieren argumentos. He aquí un ejemplo:

[Me @ linuxbox ~] $ foo = foo.txt [me @ linuxbox ~] $ foo1 =foo1.txt [me @ linuxbox ~] $ cp $ foo $ tontocp: falta el operando archivo de destino después de 'foo.txt'

365

Page 410: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 410/571

Trate '--help cp' para obtener más información.25 - Creación de un proyecto

Asignamos valores de dos variables, foo y tonto. A continuación, realizamos un cp, peroescribir mal el nombre del segundo argumento. Después de la expansión, el comando cp sólose envía un argumento, aunque requiere dos.

Hay algunas reglas acerca de los nombres de variables:1.  Los nombres de variables pueden consistir de caracteres alfanuméricos (letras y

números) y caracteres de subrayado.

2.  El primer carácter de un nombre de variable debe ser una letra o un guión bajo.

3.  Los espacios y signos de puntuación no están permitidos.

La palabra "variable" implica un valor que cambia, y en muchas aplicaciones, las variables seutilizan de esta manera. Sin embargo, la variable en nuestra aplicación, el título, se utilizacomo una constante. Una constante es igual que una variable en que tiene un nombre ycontiene un valor. La diferencia es que el valor de una constante no cambia. En una aplicaciónque realiza cálculos geométricos, que podríamos definir PI como una constante, y asignarle el

valor de 3.1415, en lugar de utilizar el número, literalmente, a través de nuestro programa. Lacáscara no hace distinción entre variables y constantes; en su mayoría son para la convenienciadel programador. Una convención común es utilizar letras mayúsculas para designarconstantes y letras minúsculas para las variables reales. Vamos a modificar nuestro script paracumplir la presente Convención:

También aprovechamos la oportunidad para j azz nuestro título sumando el valor del nombrede host variable de shell. Este es el nombre de red de la máquina.

366

#! / Bin / bash

# Programa para salida de una página de información del sistema

TITLE = "Información del Sistema Para Reportar $ HOSTNAME"

echo "<HTML><HEAD>

<TITLE> $ TÍTULO </ TITLE></ HEAD><BODY>

<H1> $ TÍTULO </ H1></ BODY>

</ HTML> "

Page 411: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 411/571

a = 5 b = "unacadena"

Variables y constantes

Nota: La concha en realidad proporciona una manera de hacer cumplir lainmutabilidad de las constantes, a través del uso de la orden interna de declarar con laopción -r (de sólo lectura). Si hubiéramos asignado TÍTULO de esta manera:

declarar TÍTULO -r = "Título de la página"

la cáscara impediría cualquier cesión subsiguiente a TITLE. Esta característica se utilizamuy poco, pero existe para los scripts muy formales.

 Asignación de valores a las variables y constantesAquí es donde nuestro conocimiento de la expansión realmente comienza a dar sus frutos.Como hemos visto, las variables se asignan valores de esta manera:

variable = valor

donde variable es el nombre de la variable y el valor es una cadena. A diferencia de otroslenguajes de programación, la cáscara no se preocupa por el tipo de datos asignados a unavariable; se les trata a todos como cadenas. Puede forzar la cáscara para restringir laasignación de números enteros usando el comando de declarar con la opción -i, pero, al igualque el establecimiento de las variables como de solo lectura, esto rara vez se hace.

Tenga en cuenta que en una misión, no debe haber espacios entre el nombre de la variable, elsigno igual y el valor. Entonces, ¿qué puede consistir en el valor? Cualquier cosa que podemosampliar en una cadena:

Durante la expansión, los nombres de variables pueden estar rodeadas por llaves opcionales"{}". Esto es útil en los casos en que un nombre de variable se convierte en ambigua debido a sucon- alrededores

367

a = z # Asignar la cadena "z" a la variable a.b = "una cadena" # Espacios incrustados deben estar dentro de las comillas.c = "una cadena y $ b" # Otras expansiones como las variables pueden ser

# ampliado en la asignación.d = $ (ls -l foo.txt) # Los resultados de un comando.e = $ ((5 * 7)) # Expansión aritmética.f = "\ t \ ta cadena \ n" # Secuencias de escape como los tabuladores y saltos de línea.

Múltiples asignaciones de variables se pueden realizar en una sola línea:

Page 412: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 412/571

[Me @ linuxbox ~] $ archivo = "miarchivo"[Me @ linuxbox ~] $ touch $ archivo [me @ linuxbox~] $ mv $ archivo $ nombrearchivo1mv: falta archivo de destino operando después de 'miarchivo' Try'--help mv' para obtener más información.

[Me @ linuxbox ~] $ $ mv nombre de archivo ${nombre de archivo} 1

25 - Creación de un proyecto texto. Aquí, tratamos de cambiar el nombre de un archivo demiarchivo a myfile1, utilizando una variable:

Este intento falla porque el shell interpreta el segundo argumento del comando mv como unnuevo (y vacío) variable. El problema se puede superar de esta manera:

Mediante la adición de los apoyos de los alrededores, la cáscara ya no interpreta la posterior 1como parte del nombre de la variable.

Vamos a tomar esta oportunidad para añadir algunos datos de nuestro informe, a saber, lafecha y hora del informe se ha creado y el nombre de usuario del creador:

Aquí Documentos

Hemos visto dos métodos diferentes de la salida de nuestro texto, tanto en el uso de la ecocom-

368

#! / Bin / bash

# Programa para salida de una página de información del sistema

TITLE = "Información del Sistema Para Reportar $ HOSTNAME" CURRENT_TIME = $(date + "% x% r% Z") TIMESTAMP = "generó $ CURRENT_TIME, por $ USER"

echo "<HTML><HEAD>

<TITLE> $ TÍTULO </ TITLE></ HEAD><BODY>

<H1> $ TÍTULO </ H1>

<P> $ TIMESTAMP </ P></ BODY></ HTML> "

Page 413: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 413/571

[Me @ linuxbox ~] $ foo = "texto" [me @linuxbox ~] $ cat << _EOF_> $ Foo

Aquí Documentos

demanda. Hay una tercera vía llamada una secuencia de comandos aquí documento o aquí.Un documento que aquí es una forma adicional de redirección de E / S en el que nosintegramos un cuerpo de texto en nuestro script y alimentamos en la entrada estándar de uncomando. Funciona así:

comando << ficha

texto

 ficha

donde comando es el nombre del comando que acepte la entrada estándar y token es unacadena que se utiliza para indicar el final del texto incrustado. Vamos a modificar nuestroscript para usar un documento aquí:

En lugar de utilizar eco, nuestro script ahora usa gato y un documento aquí. El _EOF_ cadena(que significa "final del archivo," una convención común) fue seleccionado como el token, ymarca el final del texto incrustado. Tenga en cuenta que la señal debe aparecer solo y que nodebe haber espacios finales en la línea.

Así que ¿cuál es la ventaja de utilizar un documento aquí? Es en su mayoría los mismos queeco, salvo que, por defecto, individual y dobles comillas dentro de aquí documentos pierdensu significado especial para el shell. Aquí está un ejemplo de línea de comandos:

369

#! / Bin / bash

# Programa para salida de una página de información del sistema

TITLE = "Sistema de Información Informe Por $ HOSTNAME" CURRENT_TIME = $ (date+ "% x% r% Z") TIMESTAMP = "generó $ HORA ACTUAL, por $ USER"

cat << EOF<HTML>

<HEAD><TITLE> $ TÍTULO </ TITLE>

</ HEAD><BODY>

<H1> $ TÍTULO </ H1><P> $ TIMESTAMP </ P>

</ BODY></ HTML> _EOF_

Page 414: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 414/571

 

25 - Creación de unproyecto

>  "$ Foo">  '$ Foo'>  \ $ Foo>  _EOF_un poco detexto "texto"'un poco detexto "$ foo

Como podemos ver, el shell no presta atención a las comillas. Se los trata como caracteresordinarios. Esto nos permite incrustar comillas libremente dentro de un documento aquí. Estopodría llegar a ser muy útil para nuestro programa de informe.

Aquí documentos pueden ser utilizados con cualquier comando que acepte la entradaestándar. En este ejemplo, se utiliza un documento de aquí a pasar una serie de comandos alprograma de ftp con el fin de recuperar un archivo desde un servidor FTP remoto:

#! / Bin / bash

# Script para recuperar un archivo a través de FTP servidor_ftp =ftp.nl.debian.org FTP_PATH = / debian / dists / lenny / main / installer-i386 / current / images / cdromRemote_file = debian-cd_info.tar.gz

ftp -n << _EOF_abierto $ servidor_ftpusuario me anónimo @ linuxboxcd $ FTP_PATH

hachísget $ remote_fileadiós

 _EOF_ls -l $ remote_file

Si cambiamos el operador de redirección de "<<" para "<< -", la cáscara ignorará lídercaracteres de tabulación en el documento aquí. Esto permite que un documento que se va aquísangría, que puede mejorar la legibilidad:

#! / Bin / bash

# Script para recuperar un archivo a través de

FTP servidor_ftp =ftp.nl.debian.org 

370

Page 415: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 415/571

FTP_PATH = / debian / dists / lenny / main / installer-i386 / current / images / cdromRemote_file = debian-cd_info.tar.gz

ftp -n << - _EOF_abierto $ servidor_ftpusuario me anónimo @ linuxboxcd $ FTP_PATHhachísget $ remote_fileadiós

 _EOF_

ls -l $ remote_fileAquí Documentos

Resumiendo

En este capítulo, empezamos un proyecto que nos llevará a través del proceso de construcciónde un guión exitoso. Hemos introducido el concepto de variables y constantes y la forma enque se pueden emplear. Ellos son los primeros de muchas aplicaciones encontraremos para laexpansión de parámetros. También nos fijamos en la manera de producir una salida denuestro script, y diversos métodos para la incorporación de bloques de texto.

Lectura adicional

•  Para obtener más información acerca de HTML, consulte los siguientes artículos ytutoriales: http://en.wikipedia.org/wiki/Html  http://en.wikibooks.org/wiki/HTML Programación http://html.net/tutorials/html/  

•  La página de manual de bash incluye una sección titulada "AQUÍ DOCUMENTOS",que cuenta con una descripción completa de esta función.

371

Page 416: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 416/571

26  - Diseño Top-Down

26  - Diseño Top-Down

Como los programas se hacen más grandes y más complejos, se vuelven más difíciles dediseñar, código y mantener. Al igual que con cualquier proyecto grande, a menudo es unabuena idea para romper grandes tareas complejas en una serie de tareas pequeñas y sencillas.Imaginemos que estamos tratando de describir una tarea cotidiana común, ir al mercado acomprar comida, a una persona de Marte. Podríamos describir el proceso general como la

siguiente serie de pasos:1.  Póngase en coche.

2.  Conduzca al mercado.

3.  Coche Park.

4.  Introduzca mercado.

5.  Compra de alimentos.

6.  Regreso a coche.

7.  Lleve a su casa.

8.  Coche Park.

9.  Introduzca casa.Sin embargo, una persona de Marte es probable que necesite más detalle. Podríamos rompermás abajo en la subtarea "cajón de estacionamiento" en esta serie de pasos:

1.  Encuentra plaza de aparcamiento.

2.  Conducir un coche en el espacio.

3.  Apague el motor.

4.  Conjunto del freno de estacionamiento.

5.  Coche Salir.

6.  Coche de bloqueo.La subtarea "Apagar el motor" más podría ser dividido en etapas que incluyen "Apague la

ignición", "Retire la llave de encendido," y así sucesivamente, hasta que cada paso de todo elproceso de ir al mercado ha sido totalmente definida.

Este proceso de identificación de los pasos a nivel de la parte superior y el desarrollo depuntos de vista cada vez más detallados de esos pasos se llama diseño de arriba hacia abajo.Esta técnica nos permite romper grandes tareas complejas en muchas tareas pequeñas ysencillas. Diseño de arriba hacia abajo es un método común de diseño

372

Page 417: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 417/571

#! / Bin / bash

# Programa para salida de una página de información delsistema

TITLE = "Información del Sistema Para Reportar $HOSTNAME" CURRENT_TIME = $ (date + "% x% r% Z")TIMESTAMP = "generó $ CURRENT_TIME, por $ USER"

cat << _EOF_<HTML>

<HEAD>

26  - Diseño Top-Down

programas y una que se adapta bien a bombardear la programación en particular.

En este capítulo, vamos a utilizar el diseño de arriba hacia abajo para seguir desarrollandonuestro script informe-generador.

Funciones de Shell

Nuestro script actualmente lleva a cabo los siguientes pasos para generar el documento

HTML:

1.  Abrir página.

2.  Encabezado de página en Abrir.

3.  Conjunto título de la página.

4.  Cerrar encabezado de la página.

5.  Cuerpo de la página abierta.

6.  Título de la página de salida.7.  Fecha y hora de salida.

8.  Cerrar cuerpo de la página.

9.  Cerrar la página.Para nuestra próxima etapa de desarrollo, vamos a añadir algunas tareas entre los pasos 7 y 8.Estos incluirán:

•  El tiempo de actividad del sistema y carga. Esta es la cantidad de tiempo transcurridodesde el último apagado o reinicio y el número medio de las tareas que se estánejecutando en el procesador durante varios intervalos de tiempo.

•  El espacio en disco. El uso general del espacio en los dispositivos de almacenamientodel sistema.

•  Inicio espacio. La cantidad de espacio de almacenamiento utilizado por cada usuario.

Si tuviéramos un comando para cada una de estas tareas, podríamos añadirlas a nuestro scriptsimplemente a través de la sustitución de comandos:

373

Page 418: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 418/571

26 - Diseño Top-Down

<TITLE> $ TÍTULO </ TITLE></ HEAD><BODY>

<H1> $ TÍTULO </ H1><P> $ TIMESTAMP </ P>$ (Report_uptime)$ (Report_disk_space)$ (Report_home_space)

</ BODY></ HTML>

EOF

1  #! / Bin / bash22  # Shell función de demostración

43  función func {4  echo "Paso 2"5  retorno6  }9

10  # Programa principal comienzaaquí1112 echo "Paso 1"

Podríamos crear estos comandos adicionales de dos maneras. Podríamos escribir tres guionesseparados y colocarlos en un directorio que aparece en nuestro camino, o podríamos integrarlos scripts dentro de nuestro programa como funciones de shell. Como hemos mencionadoantes, funciones de shell son "mini-scripts" que se encuentran dentro de otros scripts yprogramas pueden actuar como autónomas. Funciones Shell tienen dos formas sintácticas:Nombre de la función

{comandosretorno

}

y

nombre () {comandosretorno

} donde nombre es el nombre de la función y de los comandos es una serie de comandos quefiguran dentro de la función. Ambas formas son equivalentes y se pueden usarindistintamente. A continuación vemos una secuencia de comandos que muestra el uso deuna función de shell:

374

Page 419: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 419/571

13  func14  echo "Paso 3"

#! / Bin / bash

# Programa para salida de una página de información del

sistema

TITLE = "Información del Sistema Para Reportar $

HOSTNAME"CURRENT_TIME = $ (date + "% x% r% Z")TIMESTAMP = "generó $ CURRENT_TIME, por $ USER"

report_uptime () {return}

report_disk_space () {return}

report_home_space () {return} 

cat << _EOF_<HTML>

<HEAD><TITLE> $ TÍTULO </ TITLE>

</ HEAD><BODY>

<H1> $ TÍTULO </ H1><P> $ TIMESTAMP </ P>$ (Report_uptime)$ (Report_disk_space)$ (Report_home_space)

Funciones de Shell

A medida que el shell lee el guión, que pasa por encima de las líneas de la 1 a la 11, ya que esaslíneas se componen de los comentarios y la definición de la función. La ejecución comienza enla línea 12, con un comando echo. La línea 13 llama a la función func cáscara y el shell ejecutala función tal como lo haría con cualquier otro comando. El control de programa se desplaza ala línea 6, y se ejecuta el segundo comando de eco. Línea 7 se ejecuta siguiente. Su comando deretorno termina la función y devuelve el control al programa en la línea después de la llamadaa la función (línea 14), y se ejecuta el comando final de eco. Tenga en cuenta que para que lafunción llama a ser reconocido como funciones de shell y no interpretadas como los nombresde los programas externos, la definición de funciones de shell deben aparecer en la secuenciade comandos antes de que sean llamados.

Vamos a añadir definiciones mínimas función Shell en nuestro script:

375

Page 420: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 420/571

</ BODY></ HTML>

 _EOF_

#! / Bin / bash

# local-vars: script para demostrar las variables locales foo = 0 #

mundial funct_1 variable foo () {

variable local foo foo # local para funct_1 foo = 1echo "funct_1: foo = $ foo"

}

funct_2 () {

variable local foo foo # local para funct_2 foo = 2echo "funct_2: foo = $ foo"

echo "mundial: foo = $ foo "funct_126 - Diseño Top-Down

Nombres de las funciones de Shell siguen las mismas reglas que las variables. Una funcióndebe contener al menos un comando. El comando de retorno (que es opcional) satisface elrequisito.

Variables Locales

En las secuencias de comandos que hemos escrito hasta ahora, todas las variables (incluyendoconstantes) han sido las variables globales. Las variables globales mantienen su existencia através del programa. Esto está bien para muchas cosas, pero a veces puede complicar el uso defunciones de shell. Dentro de las funciones del shell, a menudo es deseable tener variableslocales. Las variables locales sólo son accesibles dentro de la función de shell en el que sedefinen y dejan de existir una vez que la función de shell termina.

Tener variables locales permite al programador utilizar variables con nombres que ya puedan

existir, ya sea en la secuencia de comandos a nivel mundial o en otras funciones de shell, sintener que preocuparse acerca de los posibles conflictos de nombres.

Aquí hay un script de ejemplo que muestra cómo las variables locales se definen y se utiliza:

376

Page 421: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 421/571

[Me @ linuxboxmundial: foofunct_1: Foomundial:funct_2 foo: foomundial: foo

~] $ Local vars= 0= 1= 0= 2= 0

Como podemos ver, las variables locales se definen precediendo el nombre de la variable conla palabra local. Esto crea una variable que es local a la función shell en el que se define. Unavez fuera de la función de shell, la variable ya no existe. Cuando ejecutamos este script, vemos

los resultados:Vemos que la asignación de valores a la variable foo local dentro de las dos funciones de shellno tiene efecto en el valor de foo definida fuera de las funciones.

Esta característica permite que las funciones de shell para ser escritas de modo que sigansiendo independientes entre sí y de la secuencia de comandos en el que aparecen. Esto es muyvalioso, ya que ayuda a evitar que una parte de un programa de interferir con otro. Tambiénpermite funciones de shell que se escriben de manera que puedan ser portátil. Es decir, que sepueden cortar y pegar desde el guión hasta la escritura, según sea necesario.

Mantenga Scripts Ejecución

Durante el desarrollo de nuestro programa, es útil para mantener el programa en un estadoejecutable. Al hacer esto, y probando con frecuencia, podemos detectar errores temprano en elproceso de desarrollo. Esto hará que los problemas de depuración mucho más fácil. Porejemplo, si ejecutamos el programa, hacer un pequeño cambio, a continuación, ejecute elprograma de nuevo y encontrar un problema, es muy probable que el cambio más reciente esel origen del problema. Mediante la adición de las funciones vacíos, llamados talones enprogramador-hablar, podemos verificar el flujo lógico de nuestro programa en una etapatemprana. Cuando la construcción de un talón, que es una buena idea incluir algo queproporciona información para el programador, que muestra el flujo lógico se está llevando acabo. Si nos fijamos en la salida de nuestro script ahora:

 

echo "mundial:func 2

foo = $ Foo "

echo "mundial: foo = $ Foo "

VariablesLocales

[Me @ linuxbox ~] $ sys_info_page<HTML>

<HEAD><TITLE> Información del sistema Informe Para TWIN2 </ TITLE>

377

Page 422: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 422/571

 

26 - Diseño Top-Down

</ HEAD><BODY>

<H1> Sistema de Reporte de Información Para linuxbox </ h1><p> Generado 3/19/2009 04:02:10 PM EDT, por mí </ P>

</ BODY></ HTML>

vemos que hay algunas líneas en blanco en nuestra salida después de la indicación de la hora,pero no podemos estar seguros de la causa. Si cambiamos las funciones para incluir algunoscomentarios:

report_uptime () {

echo "Función report_uptime ejecutado."retorno}

report_disk_space () {echo "Función report_disk_space ejecutado."retorno

report_home_space () {echo "Función report_home_space ejecutado."retorno

y ejecutar el script denuevo:

[Me @ linuxbox ~] $ sys_info_page<HTML>

<HEAD><TITLE> Información del sistema Informe Para linuxbox </ TITLE>

</ HEAD><BODY>

<H1> Sistema de Reporte de Información Para linuxbox </ h1> <p>Generado 03/20/2009 05:17:26 AM EDT, por mí </ P> Funciónreport_uptime ejecutado.Función report_disk_space ejecutado.Función report_home_space ejecutado.

</ BODY></ HTML>

378

Page 423: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 423/571

 

Mantenga ScriptsEjecución

ahora vemos que, de hecho, nuestros tres funciones se están ejecutando.

Con nuestro marco de la función en su lugar y de trabajo, es el momento de profundizar enalgunos de los códigos de función. En primer lugar, la función report_uptime:

report_uptime () {cat<< - _EOF_

<H2> Sistema Uptime </h2><PRE> $ (tiempo deactividad) </ PRE>

 _EOF_retorno

}Es bastante sencillo. Utilizamos un documento de aquí a la salida de un encabezado desección y la salida del comando uptime, rodeado de etiquetas <PRE> para conservar elformato del comando. La función report_disk_space es similar:

report_disk_space () {cat << - _EOF_<H2> Disco utilización del espacio </h2> <PRE> $ (df -h) </ PRE>

 _EOF_retorno

Esta función utiliza el comando df -h para determinar la cantidad de espacio en disco. Porúltimo, vamos a construir la función report_home_space:

report_home_space () {cat << - _EOF_<H2> Inicio utilización del espacio </h2> <PRE> $ (du -sh / home / *) </PRE> _EOF_

retorno} 

Utilizamos el comando du con las opciones - sh para realizar esta tarea. Esto, sin embargo, noes una solución completa al problema. A pesar de que va a funcionar en algunos sistemas(Ubuntu, por ejemplo), no va a funcionar en otros. La razón es que muchos sistemasestablecen los permisos de los directorios de inicio para prevenirlos de ser legible por todos,que es una medida de seguridad razonable. En estos sistemas, la función report_home_space,como está escrito, lo hará

379

Page 424: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 424/571

Funciones Shell en su .bashrc Archivo

Funciones de Shell son excelentes sustitutos de los alias, y en realidad son el métodopreferido para la creación de comandos pequeños para uso personal. Los alias sonmuy limitados en el tipo de comandos y funciones de shell que apoyan, mientras quelas funciones de shell permiten cualquier cosa que puede ser un guión. Por ejemplo, sinos gustó la función de shell report_disk_space que hemos desarrollado para nuestroguión,podría crear una función denominada similares ds para nuestroarchivo .bashrc: DS () {

echo "Disco de la utilización del espacio Por $HOSTNAME" df -h

}26  - Diseño Top-Down sólo funcionará si nuestro script se ejecuta con privilegios desuperusuario. Una mejor solución sería tener el guión ajustar su comportamiento de acuerdocon los privilegios del usuario. Vamos a tomar esto en el próximo capítulo.

Resumiendo

En este capítulo, hemos introducido un método común para el diseño del programa se llamadiseño de arriba hacia abajo, y ya hemos visto cómo funciona la cáscara se utiliza paraconstruir el refinamiento paso a paso que se requiere. También hemos visto cómo las variableslocales se puede utilizar para hacer funciones de shell independiente el uno del otro y desde elprograma en el que se encuentre. Esto hace posible para las funciones de shell para ser escritos

en una forma portátil y ser reutilizable por lo que les permite ser colocados en múltiplesprogramas; un gran ahorro de tiempo.

Lectura adicional

• La Wikipedia tiene muchos artículos sobre la filosofía de diseño de software. Aquí hayun par de buenos:http://en.wikipedia.org/wiki/Top-down diseño http://en.wikipedia.org/wiki/Subroutines  

380

Page 425: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 425/571

x = 5si [$ x -eq 5]; then echo "x es

igual a 5."más

echo "x no es igual a 5." fi

27  - Control de flujo: BifurcacionesCon si

27 - Contro l de f lu jo: Bifurc aciones Con si

En el último capítulo, se nos presentó un problema. ¿Cómo podemos hacer nuestro scriptinforme-generador de adaptarse a los privilegios del usuario que ejecuta el guión? La solucióna este problema se nos obliga a encontrar una manera de "cambiar de dirección" dentro denuestro guión, basado en los resultados de una prueba. En términos de programación, esnecesario que el programa derive.

Consideremos un ejemplo simple de la lógica expresada en pseudocódigo, una simulación deun lenguaje de programación diseñado para el consumo humano:

X = 5

Si X = 5, entonces:

Diga "X es igual a 5."

De lo contrario:

Decir "X no es igual a 5."

Este es un ejemplo de una rama. Sobre la base de la condición, "¿El X = 5?" Hacer una cosa,"Say X es igual a 5," de lo contrario hacer otra cosa, "Say X no es igual a 5."

siEl uso de la cáscara, que puede codificar la lógica anterior de la siguiente manera:

o podemos entrar directamente en la línea de comandos (un poco más corta):

381

Page 426: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 426/571

[Me @ linuxbox ~] $ x = 5[Me @ linuxbox ~] $ if [$ x -eq 5]; then echo "es igual a 5"; else echo "no es igual a 5"; fies igual a 5[Me @ linuxbox ~] $ x = 0[Me @ linuxbox ~] $ if [$ x -eq 5]; then echo "es igual a 5"; else echo "no es igual a 5"; fino es igual a 5

[Me @ linuxbox ~] $ ls -d / usr / bin /usr / bin[Me @ linuxbox ~] $ echo $?0[Me @ linuxbox ~] $ ls -d / bin / usrls: no se puede acceder / bin / usr: No existe el fichero o directorio[me @ linuxbox ~] $ echo $?2

27  - Control de flujo: Bifurcaciones Con si

En este ejemplo, ejecutamos el comando dos veces. Una vez, con el valor de x conjunto a 5, loque se traduce en la cadena "es igual a 5" ser de salida, y la segunda vez con el valor de x en 0,lo que resulta en la cadena "no es igual a 5" ser de salida.

La sentencia if tiene la siguiente sintaxis:si comandos; a continuación, los

comandos[Elif comandos; a continuación,

los comandos ...][Otra cosa

comandos]

fi

donde los comandos se muestra una lista de comandos. Esto es un poco confuso a primeravista. Pero antes de que podamos aclarar esto, tenemos que mirar cómo la cáscara evalúa eléxito o el fracaso de un comando.

Estado de salida

Comandos (incluyendo las secuencias de comandos y funciones de shell que escribimos)

emitir un valor para el sistema cuando se terminan, se llama un estado de salida. Este valor,que es un número entero en el rango de 0 a 255, indica el éxito o fracaso de la ejecución delcomando. Por convención, un valor de cero indica el éxito y cualquier otro valor indica elfracaso. El shell proporciona un parámetro que podemos utilizar para examinar el estado desalida. Aquí lo vemos en acción:

382

Page 427: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 427/571

 

Estado desalida

En este ejemplo, ejecutamos el comando ls dos veces. La primera vez, el comando se ejecutacorrectamente. Si mostramos el valor del parámetro $ ?, vemos que es cero. Ejecutamos elcomando ls segunda vez, produciendo un error, y examinamos el parámetro $? de nuevo. Esta

vez contiene un 2, lo que indica que el comando ha detectado un error. Algunos comandosutilizan diferentes valores de estado de salida para proporcionar diagnósticos de errores,mientras que muchos comandos simplemente salir con un valor de uno cuando fallan. Laspáginas man a menudo incluyen una sección titulada "Estado de Salida", que describe lo quese utilizan los códigos. Sin embargo, un cero indica siempre éxito.

El shell proporciona dos órdenes internas extremadamente simples que no hacen nadaexcepto terminar ya sea con un estado de salida cero o uno. El verdadero comando siempre seejecuta con éxito y el falso comando siempre se ejecuta sin éxito:

[Me @ linuxbox ~] $ true [me @

linuxbox ~] $ echo $? 0[Me @ linuxbox ~] $ false [me @linuxbox ~] $ echo $? 1

Podemos utilizar estos comandos para ver cómo funciona la instrucción if. Lo que la sentenciaif realmente hace es evaluar el éxito o el fracaso de los comandos:

[Me @ linuxbox ~] $ si es cierto; then echo "Es verdad."; fi

Es cierto.[Me @ linuxbox ~] $ si es falso; then echo "Es verdad."; fi[Me @ linuxbox ~] $

El comando echo "Es verdad." se ejecuta cuando el comando siguiente si se ejecutacorrectamente, y no se ejecuta cuando el comando siguiente si no se ejecuta con éxito. Si unalista de comandos siguiente si, el último comando en la lista se evalúa:

[Me @ linuxbox ~] $ si es falso; verdadero; then echo "Es verdad."; fi Es cierto.[Me @ linuxbox ~] $ si es cierto; falsa; then echo "Es verdad."; fi [me @linuxbox ~] $

383

Page 428: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 428/571

27  - Control de flujo: Bifurcaciones Con si ___________________________________________

prueba

Por el momento, el comando utilizado con más frecuencia si es con la prueba. El comando deprueba realiza una serie de comprobaciones y comparaciones. Tiene dos formas equivalentes:

prueba expresión

y los más populares:[expresión]

donde la expresión es una expresión que se evalúa como verdadera o falsa. El comando testdevuelve un estado de salida de cero cuando la expresión es verdadera y un estado de unocuando la expresión es falsa.

Expresiones de archivosLas siguientes expresiones se utilizan para evaluar el estado de los archivos:Tabla 27-1: Expresiones prueba de archivos

Expresión Si es cierto:archivol -ef archivo2  archivo1 y archivo2 tienen los mismos números de inodo

(los dos nombres de archivo hacen referencia al mismo

archivol -nt archivo2  archivo1 es más reciente que archivo2.

archivol -ot archivo2  archivo1 es más antiguo que archivo2.

-b archivo expediente existe y es un archivo de bloque especialdis ositivo .

-c archivoexpediente existe y es un archivo de caracteres especialesdis ositivo .

-d archivo expediente existe y es un directorio.

archivo -e expediente existe.

-f archivo expediente existe y es un archivo normal.

archivo -g expediente existe y es set-grupo-ID.

Archivo -G expediente existe y es propiedad de la ID de grupo efectivo.archivo -k expediente existe y tiene su conjunto "sticky bit".

-L Archivo expediente existe y es un enlace simbólico.

-O Archivo expediente existe y es propiedad de la ID de usuario efectivo.

archivo -p expediente existe y es una tubería con nombre.-r archivo expediente existe y es legible (tiene permiso de lectura para

384

Page 429: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 429/571

 

prueba

el usuario efectivo).

-s expediente  expediente existe y tiene una longitud mayor que cero.-S expediente  expediente existe y es una toma de la red.

-t d  fd es un descriptor de fichero dirigido a / desde la terminal.Esto se puede utilizar para determinar si se redirigeestándar de entrada / salida / error.

-u expediente  expediente existe y es setuid.-w expediente 

expediente existe y se puede escribir (tiene permiso deescritura para el usuario efectivo).

-x expediente expediente existe y es ejecutable (ha ejecutar / permiso debúsqueda para el usuario efectivo).

Aquí tenemos un script que muestra algunas de las expresiones dearchivos:

#! / Bin / bash

# Test-archivo: Evaluar el estado de un archivo

FILE = ~ / .bashrcsi [-e "$ FILE"]; entonces

if [-f "$ FILE"]; entoncesecho "$ archivo es un archivo normal." fi

si [-d "$ FILE"]; entoncesecho "$ archivo es un directorio." fisi [-r "$ FILE"]; entonces

echo "$ FILE se puede leer." fisi [-w "$ FILE"]; entonces

echo "$ FILE tiene permisos deescritura." fisi [-x "$ FILE"]; entonces

echo "$ FILE es ejecutable / búsquedas." fimás

echo "$ archivo no existe" exit 1 fi

Salida

385

Page 430: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 430/571

27  - Control de flujo: Bifurcaciones Con si

El guión evalúa el archivo asignado al archivo permanente y muestra sus resultados a medidaque se realiza la evaluación. Hay dos cosas interesantes a tener en cuenta acerca de este script.En primer lugar, observe cómo se cotiza el parámetro $ ARCHIVO dentro de las expresiones.Esto no es necesario, pero es una defensa contra el parámetro de estar vacío. Si la expansión deparámetro de $ ARCHIVO diera lugar a un valor vacío, causaría un error (los operadores seinterpretarían como cadenas no nulos en lugar de los operadores). Uso de las comillas elparámetro asegura que el operador siempre es seguido por una cadena, incluso si la cadenaestá vacía. En segundo lugar, observe la presencia de la orden de salida cerca del final de lasecuencia de comandos. El comando exit acepta un único argumento opcional, que seconvierte en estado de salida de la secuencia de comandos. Cuando se pasa ningúnargumento, los valores por defecto de estado de salida al estado de salida de la última ordenejecutada. Usando la salida de esta manera permite que la secuencia de comandos paraindicar fracaso si $ FILE se expande al nombre de un archivo que no existe. El comando desalida que aparece en la última línea del guión está allí como una formalidad. Cuando una

secuencia de comandos "se ejecuta fuera de la final" (alcanza el final del archivo), que terminacon un estado de salida de la última orden ejecutada por defecto, de todos modos.

Del mismo modo, funciones de shell pueden devolver un estado de salida mediante lainclusión de un argumento entero a la orden de devolución. Si tuviéramos que convertir elscript anterior a una función de shell para incluirlo en un programa más amplio, que podríareemplazar los comandos de salida con las declaraciones de devolución y obtener elcomportamiento deseado:

archivo_prueba() {

# Test-archivo : Evaluar el estado de un archivo

FILE = ~ /. bashrc

si [-e "$ FILE"]; entoncessi [ -f "$ FILE"] entonces

echo "$ FILE es un archivo normal ".fisi [ -d "$ FILE"] entonces

echo "$ FILE es un directorio ".fisi [ -r "$ FILE"] entonces

echo "$ FILE es legible ".fisi [ -w "$ FILE"] entonces

echo "$ FILE se puede escribir ".fisi [ -X "$ FILE"] entonces

echo "$ FILE es ejecutable / búsqueda ".fi

máseco "Hace $ no existe "

volver 1

Page 431: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 431/571

386

Advertencia: El> y <operadores de expresión deben ser citados (o escaparon con unabarra invertida) cuando se utiliza con la prueba. Si no lo son, que serán interpretados

por el shell como operadores de redirección, con resultados potencialmentedestructivos. También tenga en cuenta que si bien la documentación de bash estableceque el orden de clasificación se ajusta a la orden de clasificación de la localizaciónactual, no es así. ASCII (POSIX) orden se utiliza en las versiones de fiesta hasta eincluyendo 4.0.

Aquí es un script que incorpora expresiones de

cadena: #! / Bin / bash

# Test-string: evaluar el valor de una cadena RESPUESTA

= tal vez

if [-z "$ RESPUESTA"]; entonces

prueba

fi

}

Expresiones de Cuerda Las siguientes expresiones se utilizan para evaluar las cadenas:

Tabla 27-2: Expresiones de Cuerda prueba 

Expresión Si es cierto ...

cadena  cadena no es nulo.

-n cadena La longitud de la cadena es mayor que cero.

-z cadena La longitud de la cuerda es igual a cero.stringi = Cadena2 cadena1 y cadena2 son iguales. Individual o doblestringi == cadena2  signos iguales se pueden usar, pero el uso de doble

signos iguales se prefieren en gran medida.

stringi ! = Cadena2 cadena1 y cadena2 no son iguales.

stringi > Cadena2 cadena1 clases después cadena2.stringi <Cadena2 cadena1 tipo antes cadena2.

Page 432: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 432/571

387

Page 433: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 433/571

echo "No hay una respuesta." > & 2exit 1 fi

si ["$ RESPUESTA" = "yes"]; then echo "Larespuesta es SÍ." elif ["$ RESPUESTA" = "no"];then echo "La respuesta es NO." elif ["$RESPUESTA" = "quizás"]; then echo "Larespuesta es tal vez."más

echo "La respuesta es desconocida." fi27 - Control de flujo: Bifurcaciones Con si

En este script, se evalúa la RESPUESTA constante. En primer lugar, determinar si la cadenaestá vacía. Si es así, terminamos el guión y establecemos el estado de salida a uno. Note laredirección que se aplica al comando de eco. Esto redirige el mensaje de error "No hay unarespuesta." Error estándar, que es lo "correcto" que ver con los mensajes de error. Si la cadenano está vacía, se evalúa el valor de la cadena para ver si es igual a "sí", "no", o "tal vez".Hacemos esto mediante el uso de elif, que es la abreviatura de "otro si. "Mediante el uso deelif, somos capaces de construir una prueba lógica más compleja.

Expresiones enteros

Las siguientes expresiones se usan con números

enteros: Tabla 27-3: probar Entero Expresiones

Expresión Si es cierto ...

integerl -eq entero2  entero1 es igual a Entero2.

integerl -ne entero2  entero1 no es igual a Entero2.

integerl -LE entero2  entero1 es menor que o igual a entero2.

integerl -lt entero2  entero1 es menor que entero2.

integerl -ge entero2  entero1 es mayor que o igual a entero2.integerl -gt entero2  entero1 es mayor que entero2.

Aquí es un script que les demuestra:

#! / Bin / bash

388

Page 434: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 434/571

# Test-entero: evaluar el valor de un número entero. INT = -5

if [-z "$ INT"]; entoncesecho "INT está vacía." > & 2

exit 1 fi

si [$ INT -eq 0]; then echo"INT es cero."

mássi [$ INT -lt 0]; entonces

echo "INT es negativo."más

echo "INT es positivo." fisi [$ ((INT% 2)) -eq 0]; thenecho "INT es par."más

echo "INT es extraño." fi fiprueba

La parte interesante de la secuencia de comandos es cómo se determina si un número enteroes par o impar. Mediante la realización de una operación de módulo 2 sobre el número, quedivide el número por dos y devuelve el resto, se puede decir si el número es par o impar.

Una más moderna versión de prueba

Las versiones recientes de fiesta incluyen un comando compuesto que actúa como unsustituto mejorado para la prueba. Se utiliza la siguiente sintaxis:

[[ expresión]]

donde, como prueba, la expresión es una expresión que se evalúa como resultado ya seaverdadera o falsa. El comando [[]] es muy similar a la prueba (que apoya todas susexpresiones), pero añade una nueva e importante expresión de cadena:

cadenal = ~ regex

que devuelve true si cadenal se corresponde con la expresión regular expresión regularextendida. Esto abre un montón de posibilidades para la realización de tareas como lavalidación de datos. En nuestro ejemplo anterior de las expresiones enteras, el guión sería un

fracaso si la constante INT contenía nada más que un número entero. El script necesita unamanera de verificar que la constante contiene un número entero. El uso de [[]] Con la cadena= ~ expresooperador de iones, que podría mejorar la

389

Page 435: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 435/571

 

27 - Control de flujo: Bifurcaciones Con

guión si de esta manera:

#! / Bin / bash

# Test-entero2: evaluar el valor de un número entero. INT = -5si [["$ INT" = ~ * - [0-9] + $]?]; entonces

si [$ INT -eq 0]; entoncesecho "INT es cero."

mássi [$ INT -lt 0]; entonces

echo "INT es negativo."más

echo "INT es positivo." fisi [$ ((INT% 2)) -eq 0]; thenecho "INT es par."

másecho "INT es extraño." fi fi

más echo "INT no es un entero." > & 2 exit 1 fi

Mediante la aplicación de la expresión regular, estamos en condiciones de limitar el valor deINT a sólo cadenas que comienzan con un signo menos opcional, seguido por uno o másnúmeros. Esta expresión también elimina la posibilidad de valores vacíos.

Otra característica adicional de [[]] es que el operador == es compatible con el patrón quecoincide con el mismo nombre de ruta de expansión manera lo hace. Por ejemplo:

[Me @ linuxbox ~] $ FILE = foo.bar[Me @ linuxbox ~] $ si [[$ FILE == foo *].]; entonces>  echo "$ archivo coincide con el patrón 'foo. *'">  fifoo.bar coincide con el patrón 'foo. *'

Esto hace que [[]] útil para evaluar archivo y rutas de acceso.

390

Page 436: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 436/571

[Me @ linuxbox ~] $ if ((1)); then echo "Es verdad."; fiEs cierto.[Me @ linuxbox ~] $ if ((0)); then echo "Es verdad."; fi[Me @ linuxbox ~] $

#! / Bin / bash

# Test-integer2a: evaluar el valor de un número entero. INT = -5si [["$ INT" = ~ A - [0-9] + $]?]; entonces si ((INT == 0)); entonces

echo "INT es cero."más

if ((INT <0)); entoncesecho "INT es negativo."

másecho "INT es positivo." fi

if ((((INT 2%)) == 0)); thenecho "INT es par."más

echo "INT es extraño." fi fimásecho "INT no es un entero." > & 2 exit 1 fi

(()) - Diseñado para los números enteros

(()) - Diseñado para los números enteros

Además de el comando compuesto [[]], golpe también proporciona el (( )) Comcomando de libras, que es útil para operar en números enteros. Es compatible con un conjuntocompleto de evaluaciones aritméticas, un tema que cubriremos completamente en el Capítulo

34.(()) Se utiliza para realizar pruebas de verdad aritméticas. Un resultados de las pruebasverdad aritméticas en cierto si el resultado de la evaluación aritmética es distinto de cero.

El uso de (()), podemos simplificar un poco el guión de la prueba entero2 como esto:

Observe que usamos menos-que y mayor que los signos y que == se utiliza para probar laequivalencia. Esta es una sintaxis de aspecto más natural para trabajar con números enteros.Nótese también, que debido a que el comando compuesto (()) es parte de la sintaxis shell enlugar de una ordenanza

391

Page 437: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 437/571

#! / Bin / bash

#  prueba-entero3: determinar si un número entero es dentro de un#  especificada rango de valores.

MIN_VAL = 1MAX_VAL = 100

INT = 50

si [["$ INT" = ~ A - [0-9] + $]?]; entoncessi [[INT -ge MIN_VAL && INT -LE MAX_VAL]]; then echo "$

INT está a $ MIN_VAL a $ MAX_VAL."másecho "$ INT está fuera de rango." fi

másecho "INT no es un entero." > & 2 exit 1 fi

27 - Control de flujo: Bifurcaciones Con si

nario de comandos, y sólo se ocupa de los números enteros, es capaz de reconocer lasvariables por su nombre y no requiere la expansión a realizar. Discutiremos (( )) Y larelacionada

expansión aritmética en el capítulo 34.

Combinando las expresiones

También es posible combinar las expresiones para crear evaluaciones más complejas. Lasexpresiones se combinan mediante operadores lógicos. Vimos esto en el capítulo 17, cuandoaprendimos sobre el comando find. Hay tres operaciones lógicas para la prueba y [[]]. Ellosson AND, OR y NOT. prueba y [[]] utilizar diferentes operadores para representar estasoperaciones:

He aquí un ejemplo de una operación AND. La siguiente secuencia de comandos determina sies un número entero dentro de un rango de valores:

392

Operación prueba [[]] Y (())

Y -a &&Oregón -o II

NO! !

Tabla 27-4: Operadores lógicos

Page 438: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 438/571

si [$ INT -ge $ MIN_VAL -a $ INT -LE $ MAX_VAL]; then echo "$INT está a $ MIN_VAL a $ MAX_VAL."

másecho "$ INT está fuera de rango." fi

si [! \ ($ INT -ge $ MIN_VAL -a $ INT -LE $ MAX_VAL \)]; entonces

Combinando las expresiones

En este script, determinamos si el valor de INT entero se encuentra entre los valores deMIN_VAL y MAX_VAL. Esto se realiza por un único uso de [[]], que incluye dos expresionesseparadas por el operador &&. También podríamos haber codificado esta prueba usando:

El! operador de negación invierte el resultado de una expresión. Devuelve verdadero si unaexpresión es falsa, y devuelve false si una expresión es verdadera. En la siguiente secuencia decomandos, modificamos la lógica de nuestra evaluación para encontrar los valores de INT queestán fuera del rango especificado:

También se incluyen los paréntesis alrededor de la expresión, para la agrupación. Si éstas nose incluyeron, la negación sólo se aplicaría a la primera expresión y no la combinación de los

dos. Codificación con esta prueba se llevaría a cabo de esta manera:

393

#! / Bin / bash

#  prueba-integer4: determinar si un número entero es fuera de un#  especificada rango de valores.

MIN_VAL = 1MAX_VAL = 100

INT = 50

si [["$ INT" = ~ A - [0-9] + $]?]; entonces

si [[! (INT -ge MIN_VAL && INT -LE MAX_VAL) echo "$INT está fuera $ MIN_VAL a $ MAX_más

echo "$ INT está en rango." fimás

echo "INT no es un entero." > & 2 exit 1 fi

]]; entonces _VAL. "

Page 439: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 439/571

echo "$ INT está fuera $ MIN_VAL a $ MAX_VAL."más

echo "$ INT está en rango." fi

Portabilidad es el duende de las mentes pequeñas

Si usted habla con la gente "real" de Unix, usted descubrirá rápidamente que muchosde ellos no les gusta mucho Linux. Ellos consideran que es impuro y sucio. Uno de losprincipios de los seguidores de Unix es que todo debe ser "portátil". Esto significa quecualquier secuencia de comandos que usted escribe debe ser capaz de ejecutar, sincambios, en cualquier sistema Unix.La gente de Unix tienen buenas razones para creer esto. Después de haber visto lo quelas extensiones de propiedad de los comandos y conchas hizo para el mundo Unixantes de POSIX, que son naturalmente cuidadoso de los efectos de Linux en suquerido sistema operativo.

Pero la portabilidad tiene un inconveniente grave. Se impide el progreso. Requiereque las cosas siempre se hacen uso de "mínimo común denominador" técnicas. En elcaso de la programación de shell, que significa hacer todo lo compatible con sh, elshell original de Bourne.Este inconveniente es la excusa de que vendedores de software privativo utilizan para

 justificar sus extensiones propietarias, sólo los llaman "innovaciones". Pero enrealidad son sólo dispositivos de lock-in para sus clientes.Las herramientas de GNU, como bash, no tienen tales restricciones. Animan a laportabilidad mediante el apoyo a las normas y al estar universalmente disponibles.Puede instalar bash y las otras herramientas de GNU en casi cualquier tipo de sistema,incluso Windows, sin costo. Así que no dude en utilizar todas las características de

bash. Es realmente portátil.27 - Control de flujo: Bifurcaciones Con si

Puesto que todas las expresiones y operadores utilizados por la prueba son tratados comoargumentos del comando por el shell (a diferencia de [[]] y (())), personajes que tienen unsignificado especial para fiesta, como <,>, (y), deben ser citado o escapado.

Al ver que la prueba y [[]] hacer más o menos lo mismo, lo cual es preferible? prueba estradicional (y parte de POSIX), mientras que [[]] es específico para golpear. Es importantesaber cómo utilizar la prueba, ya que se utiliza mucho, pero [[]] es claramente más útil y esmás fácil de código.

Los operadores de control: Otra forma de Rama

Bash ofrece dos operadores de control que pueden realizar ramificación. El && (AND) y ||(OR) operadores funcionan como los operadores lógicos en el comando compuesto [[]]. Esta esla sintaxis:

394

Page 440: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 440/571

 

Los operadores de control: Otra forma deRama

commandl && Comando2 y commandl || Comando2 

Es importante entender el comportamiento de estos. Con el operador &&, commandl se

ejecuta y comando2 se ejecuta si, y sólo si, commandl tiene éxito. Con el operador ||,commandl se ejecuta y comando2 se ejecuta si, y sólo si, commandl no tiene éxito.

En términos prácticos, esto significa que podemos hacer algo como esto:

[Me @ linuxbox ~] $ mkdir temp temp && cd

Esto creará un directorio llamado temp, y si tiene éxito, el directorio de trabajo actual serácambiado a la temperatura. El segundo comando se intenta sólo si el comando mkdir esexitosa. Del mismo modo, un comando como este:

[Me @ linuxbox ~] $ [temp -d] || mkdir temp

pondrá a prueba para la existencia de la temperatura del directorio, y sólo si la prueba falla, secreará el directorio. Este tipo de construcción es muy útil para el manejo de errores en losscripts, un tema que discutiremos más en capítulos posteriores. Por ejemplo, podríamos haceresto en un script:

[Temp -d] || exit 1

Si la secuencia de comandos requiere que el directorio Temp, y no existe, entonces el scriptterminará con un estado de salida de uno.

Resumiendo

Comenzamos este capítulo con una pregunta. ¿Cómo podríamos hacer nuestro scriptsys_info_page detectar si el usuario tenía permiso para leer todos los directorios de inicio?Con nuestro conocimiento de si, podemos resolver el problema mediante la adición de este

código a la función report_home_space:

report_home_space () {si [[$ (-u id) -eq 0]]; entonces

395

Page 441: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 441/571

cat << - _EOF_<H2> Inicio Utilización del Espacio (Todos losusuarios) </ h2> <PRE> $ (du -sh / home / *) </ PRE>

 _EOF_más

cat << - _EOF_<H2> Inicio Utilización del Espacio ($ USER) </ h2><PRE> $ (du -sh $ HOME) </ PRE>

 _EOF_firetorno

}27 - Control de flujo: Bifurcaciones Con si

Evaluamos la salida del comando id. Con la opción -u, Identificación emite el número de ID deusuario numérico del usuario efectivo. El superusuario es siempre cero y cada otro usuario esun número mayor que cero. Sabiendo esto, podemos construir dos documentos diferentesaquí, uno toma ventaja de privilegios de superusuario, y la otra, restringidos al propiodirectorio del usuario.

Vamos a tomar un descanso de la sys_info_page programa, pero no te preocupes. Será denuevo. Mientras tanto, vamos a cubrir algunos de los temas que vamos a necesitar cuandoreanudemos nuestro trabajo.

Lectura adicionalHay varias secciones de la página de manual de bash que proporcionan más detalles sobre lostemas tratados en este capítulo:

•  Listas (cubre los operadores de control && y ||)

•  Comandos compuestos (cubiertas [[]], (()) y si)

•  Expresiones condicionales

•  ÓRDENES INTERNAS DEL SHELL (cubre prueba)

Además, la Wikipedia tiene un buen artículo sobre el concepto de pseudocódigo:

http://en.wikipedia.org/wiki/Pseudocode  

396

Page 442: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 442/571

#! / Bin / bash

# Test-entero2: evaluar el valor de un número entero. INT = -5si [["$ INT" = ~ A - [0-9] + $]?]; entonces si [$ INT -eq 0]; entonces

echo "INT es cero."más

si [$ INT -lt 0]; entoncesecho "INT es negativo."

másecho "INT es positivo." fi

si [$ ((INT% 2)) -eq 0]; thenecho "INT es par."más

echo "INT es extraño." fi fimás

echo "INT no es un entero." > & 2 exit 1 fi28  - Lectura de entrada delteclado

28  - Lectu ra de entrada del teclado

Las secuencias de comandos que hemos escrito hasta ahora carecen de una característicacomún en la mayoría interactividad programas- ordenador. Es decir, la capacidad delprograma para interactuar con el usuario. Aunque muchos programas no necesitan serinteractivo, algunos programas se benefician de ser capaz de aceptar la entrada directamentedel usuario. Tomemos, por ejemplo, esta secuencia de comandos desde el capítulo anterior:

Cada vez que queremos cambiar el valor de INT, tenemos que editar el script. Sería mucho

más útil si la secuencia de comandos se puede pedir al usuario un valor. En este capítulo,vamos a empezar a ver cómo podemos añadir interactividad a nuestros programas.

397

Page 443: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 443/571

#! / Bin / bash

# Entero leer: evaluar el valor de un número entero.

echo -n "Introduzca un número entero ->" leer int

si [["$ int" = ~ A - [0-9] + $]?]; entonces si [$ int -eq 0]; entoncesecho "$ int es cero."

mássi [$ int -lt 0]; entonces

echo "$ int es negativo."más

echo "$ int es positivo." fisi [$ ((int% 2)) -eq 0]; thenecho "$ int es par."

másecho "$ int es extraño." fi fi

másecho "El valor de entrada no es un número entero." >

& 2 exit 1 fi28 ____________________________________ -Lectura de entrada del teclado ______________________________________________________

leer - leer valores de la entrada estándar

La orden interna leer se utiliza para leer una sola línea de la entrada estándar. Este comandopuede ser utilizado para leer la entrada del teclado o, cuando se emplea la redirección, unalínea de datos de un archivo. El comando tiene la siguiente sintaxis:

leer [-opciones] [variables ...]

donde las opciones es una o más de las opciones disponibles se enumeran a continuación yvariable es el nombre de una o más variables utilizadas para mantener el valor de entrada. Sino se proporciona ningún nombre de variable, la respuesta variable de shell contiene la líneade datos.

Básicamente, leer asigna los campos de la entrada estándar a las variables especificadas. Simodificamos nuestro script evaluación entero de usar leer, podría tener este aspecto:

Utilizamos eco con la opción -n (que suprime el salto de línea final en la salida) para que

aparezca el símbolo, y luego utilizar leer a la entrada de un valor para la variable int. Alejecutar este script de resultados en esta:

398

Page 444: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 444/571

[Me @ linuxbox ~] leer entero $Introduzca un número entero -> 5 5es positivo.5 es impar.

#! / Bin / bash

# Múltiple leer: leer varios valores desde el teclado

echo -n "Introduzca uno o más valores>" var1 var2 leer var3 var4VAR5

leer - leer valores de la entrada estándar

leer puede asignar de entrada a múltiples variables, como se muestra en este script:

En este script, asignamos y mostrar hasta cinco valores. Observe cómo se comporta cuando sele da lectura diferente número de valores:

399

eco "Var1 = '$ Var1eco "Var2 = '$ Var2eco "Var3 = '$ Var3eco "Var4 = '$ Var4eco "VAR5 = '$

[Me @ linuxbox ~] $ lectura múltipleIntroduzca uno o más valores> abc d evar1 = 'A'var2 = 'B'var3 = 'C'var4 = 'D'VAR5 'E'[Me @ linuxbox ~] $ lectura múltipleIntroduzca uno o más valores> a

var1var2 = == var3

var4 =VAR5 =

'A'''''

''''[Me @ linuxbox ~] $ lectura múltipleIntroduzca uno o más valores> abc d e f gvar1 = 'A'var2 = 'B'var3 = 'C'var4 = 'D'VAR5=

'E f g'

Page 445: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 445/571

[Me @ linuxbox ~] $ lectura única Ingreseuno o más valores> Responder abcd = 'abcd'

28  - Lectura de entrada del teclado

Si de lectura recibe menos que el número era de esperar, las variables adicionales están vacíos,mientras que una cantidad excesiva de los resultados de entrada en la variable final quecontiene la totalidad de la entrada adicional.

Si no aparece ninguna variable después de que el comando de lectura, una variable de shell,

respuesta, se le asignará toda la entrada:

Opciones

#! / Bin / bash

# Solo leer: leer múltiples valores en la variable por defecto

echo -n "Enter uno o más valores> "leer

echo"RESPUESTA = $ CONTESTACIÓN '"

Al ejecutar este script de resultados en esta:

de lectura compatible con las siguientes opciones: Tabla 28-1: Opciones de lectura

Opción Descripciónmatriz -a Asigne la entrada a la gama, empezando por el índice cero.

Vamos a cubrir las matrices en el Capítulo 35.-d delimitador El primer carácter en el delimitador de cadena se utiliza para

indicar el final de la entrada, en lugar de un carácter de nueva

-e Utilice Readline para manejar la entrada. Esto permite laedición de entrada en la misma manera que la línea de

cadena -iUtilice cadena como una respuesta por defecto si el usuariosimplemente presiona Enter. Requiere la opción -e.

num -n Leer caracteres num de entrada, en lugar de una línea entera.prompt -p

Visualice un indicador para la entrada usando el símbolo decadena.

400

Page 446: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 446/571

leer - leer valores de la entrada estándar-r

Modo Raw. No interprete caracteres de barra invertida comose escapa.

-s Modo silencioso. No echo caracteres de la pantalla a medidaque se escriben. Esto es útil cuando se introducen lascontraseñas y otra información confidencial.

-t segundos Tiempo de espera. Terminar de entrada después de segundos.leer devuelve un estado de salida distinto de cero si un

-u fd Utilice la entrada de descriptor de fichero fd, en lugar de la

entrada estándar.

#! / Bin / bash

#-Secreto leer: Entrada de una frase de contraseña secreta

si se lee -t 10 -SP "Enter passphrase secreto>" secret_pass; luego echo -e "\ nsecretfrase de contraseña = '$ secret_pass'"

másecho -e "\ nInput Tiempo de espera

agotado"> & 2 exit 1 fi

El uso de las diversas opciones, que podemos hacer cosas interesantes con lectura. Porejemplo, con la opción -p, podemos proporcionar una cadena de petición:

#! / Bin / bash

# Lectura única: leer varios valores en la variable por defecto leer -p

"Ingrese uno o más valores>" echo "REPLY = '$ Responder'"

Con la -t -s y opciones que podemos escribir un script que lee la entrada y el tiempo de esperasi la entrada no se completa en un tiempo determinado "secreto":

La secuencia de comandos solicita al usuario una contraseña secreta y espera 10 segundospara que la entrada. Si la entrada no se completa dentro del tiempo especificado, el scriptfinaliza con un error. Desde la opción -s se incluye, los caracteres de la frase de contraseña nose reflejan en la pantalla a medida que se escriben.

401

Page 447: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 447/571

 

28 - Lectura del teclado deentrada

Es posible suministrar al usuario una respuesta predeterminada utilizando las opciones -e y -i juntos:

#! / Bin / bash

# Lectura predeterminado: suministrar un valor por defecto si el usuario pulsa latecla Entrar.

leer -e -p "? ¿Cuál es el nombre de usuario" $ -i USUARIO echo "Ha respondido: '$CONTESTACIÓN'"

En este guión, que solicitará al usuario que ingrese su / su nombre de usuario y utilizar lavariable de entorno USER para proporcionar un valor por defecto. Cuando se ejecuta lasecuencia de comandos que muestra la cadena por defecto y si el usuario simplementepresiona la tecla Intro, lectura asignará la cadena predeterminada a la variable respuesta.

[Me @ linuxbox ~] $ ¿Cuál es sunombre de usuario predeterminadolectura? Me Ha respondido: "yo"

IFSNormalmente, el shell realiza la división de palabras en la entrada proporcionada para leer.Como hemos visto, esto significa que varias palabras separadas por uno o más espacios se

convierten en elementos separados en la línea de entrada, y se asignan a las variables deseparar por lectura. Este comportamiento se configura por una variable de shell llamado IFS(por campo interno Separador). El valor predeterminado de IFS contiene un espacio, untabulador, y un carácter de nueva línea, cada uno de los elementos que separará unos de otros.

Podemos ajustar el valor de IFS para controlar la separación de los campos de entrada paraleer. Por ejemplo, el archivo / etc / passwd contiene líneas de datos que utilizan el carácter dedos puntos como separador de campo. Al cambiar el valor de IFS a una sola de colon,podemos usar leer para introducir los contenidos de / etc / passwd y campos separados conéxito en diferentes variables. Aquí tenemos un script que hace precisamente eso:

#! / Bin / bash

# Lectura IFS: leer campos de un archivo FILE

= / etc / passwd

402

Page 448: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 448/571

 

Esta secuencia de comandos le pide al usuario que introduzca el nombre de usuario de unacuenta en el sistema, a continuación, muestra los diferentes campos que se encuentran en elregistro del usuario en el archivo / etc / passwd. El guión contiene dos líneas interesantes. Laprimera es: file_info = $ (grep "A $ nombre_usuario:" $ FILE)

Esta línea asigna los resultados de un comando grep a la file_info variable. La expresiónregular utilizada por grep asegura que el nombre de usuario sólo coincidirá con una sola líneaen el archivo / etc / passwd.

La segunda línea interesante es esta:

IFS = ":" leer usuario pw cáscara nombre uid gid <<< "$ file_info"

La línea se compone de tres partes: una asignación de variables, un comando de lectura conuna lista de nombres de variables como argumentos, y un nuevo operador de redirecciónextraño. Pronto nos ocuparemos de la primera asignación de variables.

El depósito permite una o más asignaciones de variables a tener lugar inmediatamente antesde un comando. Estas asignaciones alteran el medio ambiente para el comando que sigue. Elefecto de la asignación es temporal; sólo cambiar el entorno para la duración de la orden. Ennuestro caso, el valor de IFS se cambia a un carácter de dos puntos. Alternativamente,podríamos haber codificado de esta manera:

OLD_IFS = "$ IFS"IFS = ":"leer usuario pw cáscara uid gid nombre hogar <<< "$ file_info"

IFS = "$ OLD_IFS"donde almacenamos el valor de IFS, asigne un nuevo valor, realice el comando de lectura, yluego restaurar IFS a su valor original. Claramente, la colocación de la asignación de lavariable en frente de

403

leer - leer valores de la entrada estándar

leer -P " Introduzca un nombre de usuario> "nombre_usuarioexpedien

  _info = $ (grep "A $ nombre_usuario:" $ FILE)

si [ -n " $ File_info "]; entoncesIFS = ': "Leer usuario pw cáscara nombre uid gid <<< "$ file_info"eco "Usuario = '$ User' "eco "UID = '$ Uid' "eco "GID = '$ Gid' "eco "Nombre '$ Nombre' "eco "Inicio Dir. = '$ A casa' "eco "Shell = '$ Shell' "

máseco

"Este usuario noexiste "$ Nombre_usuario '"> & 2

Salid 

1fi

Page 449: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 449/571

Usted no puede leer Pipe

Mientras que el comando de lectura normalmente toma la entrada de la entradaestándar, no se puede hacer esto:echo "foo" | verEs de esperar que esto funcione, pero no es así. El comando aparecerá para tener éxito,pero la variable REPLY siempre estará vacía. ¿Por qué es esto?La explicación tiene que ver con la forma en que la cáscara se encarga de las tuberías.En bash (y otros proyectiles, tales como sh), tuberías crean subniveles. Estas soncopias de la cáscara y de su entorno, que se utilizan para ejecutar el comando en latubería. En nuestro ejemplo anterior, leer se ejecuta en un subshell.

Subniveles en sistemas tipo Unix crean copias del medio ambiente para los procesos autilizar durante la ejecución. Cuando los procesos de acabados se destruye la copia delmedio ambiente. Esto significa que una subcapa nunca puede alterar el entorno de suproceso padre. lectura asigna variables, que luego se convierten en parte del medioambiente. En el ejemplo anterior, leer asigna el valor "foo" a la respuesta variable en elentorno de su subnivel, pero cuando el comando se interrumpe, el subnivel y suentorno son destruidos, y el efecto de la asignación se pierde.El uso de cadenas aquí es una manera de evitar este comportamiento. Otro método sediscute en el Capítulo 36.

28  - Lectura de entrada del teclado _________________________________________________

el comando es una forma más concisa de hacer la misma cosa.El operador <<< indica aquí una cadena. Una cadena de aquí es como un documento aquí,sólo más corto, que consiste en una sola cadena. En nuestro ejemplo, la línea de datos delarchivo / etc / passwd se alimenta a la entrada estándar del comando de lectura. Podríamospreguntarnos por qué este método bastante oblicua fue elegido en lugar de: echo "$ file_info"| IFS = ":" leer usuario pw casa cáscara nombre gid uid

Bueno, hay una razón ...

Entrada de Validación

Con nuestra nueva capacidad de tener la entrada de teclado viene un desafío de programaciónadicional, entrada validar. Muy a menudo la diferencia entre un programa bien escrito y unomal escrito radica en la capacidad del programa para hacer frente a lo inesperado. Confrecuencia, el inesperado aparece en forma de mal de entrada. Hemos hecho un poco de estocon nuestros programas de evaluación en el capítulo anterior, donde nos registramos losvalores de números enteros y descartadas valores vacíos y los caracteres no numéricos. Esimportante para llevar a cabo este tipo de controles de programación cada vez que unprograma recibe de entrada, para protegerse contra datos no válidos. Esto es especialmenteimportante para los programas que son compartidos por varios usuarios. Omitiendo 404

Page 450: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 450/571

 

Entrada deValidación

estas medidas de seguridad en aras de la economía podrían ser excusados si un programa seva a utilizar una vez y sólo por el autor para realizar alguna tarea especial. Incluso entonces, siel programa lleva a cabo tareas peligrosas como borrar archivos, sería conveniente incluir la

validación de datos, por si acaso.Aquí tenemos un ejemplo de programa que valida los diversos tipos de entrada:

#! / Bin / bash

#  lectura de validación: validar la entrada

invalid_input () {echo "Entrada no válida '$CONTESTACIÓN'"> & 2 salida 1

}

leer -p "Introduzca un solo elemento>"

#  de entrada está vacía (no válido)[[-z $ Responder]] && invalid_input

#  entrada es varios artículos (no válido)(($ (Echo $ Responder | wc -w)> 1)) && invalid_input

#  se introduce un nombre de archivo válido?si [[$ RESPUESTA = ~ * [- [: alnum:] \ ._] + $]]; then

echo "'$ CONTESTACIÓN' es un nombre dearchivo válido." si [[-e $ Responder]]; entonces

echo "Y existe el archivo '$ CONTESTACIÓN'."más

echo "Sin embargo, no existe el archivo '$

CONTESTACIÓN'." fi#  se introduce un número de punto flotante?

si [[$ RESPUESTA = ~ A - [[: dígito:]] * \ [[: dígito:?.]] + $]]; thenecho "'$CONTESTACIÓN' es un número de punto flotante."

másecho "'$ CONTESTACIÓN' no es un número de punto flotante."

fi

#  se introduce un número entero?si [[$ RESPUESTA = ~ A - [[: dígito:?]] + $]]; thenecho "'$

CONTESTACIÓN' es un número entero."más

echo "'$ CONTESTACIÓN' no es un número entero." fimás

echo "La cadena '$ CONTESTACIÓN' no es un nombre dearchivo válido." fi

405

Page 451: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 451/571

Por favor seleccione:1.  Mostrar información del sistema2.  Mostrar espacio en disco3.  Pantalla Inicio Espacio Utilización0. Salir

Introduzca la selección [0-3]>

#! / Bin / bash#-Menú leer: un programa de información del sistema de menús

claro eco "Por favor seleccione:

1.  Mostrar información del sistema2.  Mostrar espacio en disco3.  Visualización Utilización Inicio Espacio0. Salir "leer -p "Introduzca la selección [0-3]>"

si [[$ RESPUESTA = ~ A [0-3] $]];entonces si [[$ RESPUESTA == 0]];entonces

echo "Programa terminado."salida fisi [[$ RESPUESTA == 1]]; entonces

28 - Lectura del teclado de entrada

Esta secuencia de comandos le pide al usuario que introduzca un elemento. El tema se analizaposteriormente para determinar su contenido. Como podemos ver, el script hace uso demuchos de los conceptos que hemos cubierto hasta ahora, incluyendo funciones de shell, [[ ]],

(( )), El operador de control&&, Y si, además de una buena dosis de expresiones regulares.

Menús

Un tipo común de interactividad se llama basado en menús. En los programas basadas enmenús, el usuario se le presenta una lista de opciones y se le pide que elija uno. Por ejemplo,podríamos imaginar un programa que presentó el siguiente:

Usando lo que aprendimos de escribir nuestro programa sys_info_page, podemos construirun programa basado en menús para realizar las tareas en el menú de arriba:

406

Page 452: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 452/571

echo "Nombre de host: $HOSTNAME" salida tiempo de actividad fisi [[$ RESPUESTA == 2]];

entonces df -h salida fisi [[$ RESPUESTA == 3]]; entonces

si [[$ (-u id) -eq 0]]; entoncesecho "Utilización Inicio Espacio (Todos los usuarios)"du -sh / home / *

másecho "Utilización Inicio Espacio ($ USER)" du

-sh $ exit fi fi INICIOmás

echo "entrada no válida." > & 2

exit 1 fi Menús

Esta secuencia de comandos se divide lógicamente en dos partes. La primera parte muestra elmenú e introduce la respuesta del usuario. La segunda parte identifica la respuesta y lleva acabo la acción seleccionada. Observe el uso de la orden de salida en este script. Se utiliza aquípara evitar que la secuencia de comandos desde la ejecución de código innecesario después deuna acción se ha llevado a cabo. La presencia de múltiples puntos de salida en un programa esgeneralmente una mala idea (que hace que la lógica del programa más difícil de entender),pero funciona en este script.

ResumiendoEn este capítulo, dimos nuestros primeros pasos hacia la interactividad; permitiendo a losusuarios a introducir datos en nuestros programas a través del teclado. El uso de las técnicaspresentadas hasta el momento, es posible escribir muchos programas útiles, tales comoprogramas de cálculo especializados y de usar fáciles interfaces a la herramientas de línea decomandos arcanos. En el siguiente capítulo, nos basaremos en el concepto de programa menú-impulsado para que sea aún mejor.

Crédito extraEs importante estudiar los programas en este capítulo con cuidado y tener una comprensión

completa de la forma en que se estructuran lógicamente, como los programas venideros serácada vez más complejo. Como ejercicio, vuelve a escribir los programas en este capítuloutilizando el comando de prueba en lugar del comando compuesto [[]]. Sugerencia: Utilicegrep para evaluar las expresiones regulares y evaluar el estado de salida. Esta será una buenapráctica.

407

Page 453: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 453/571

28 - Lectura del teclado de entrada

Lectura adicional

• El Manual de Referencia Bash contiene un capítulo sobre órdenes internas, que incluye

el comando de lectura:

http://www.gnu.Org/software/bash/manual/bashref.html#Bash-Builtins 

408

Page 454: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 454/571

29  - Control de flujo: Looping Con tiempo /hasta

29  - Contro l de f lu jo: Loop ing Con t iempo /hasta

En el capítulo anterior, hemos desarrollado un programa basado en menús para producirdiversos tipos de información del sistema. El programa funciona, pero todavía tiene unproblema de usabilidad significativa. Sólo se ejecuta una sola elección y luego termina. Peor

aún, si se hace una selección válida, el programa termina con un error, sin dar al usuario laoportunidad de intentarlo de nuevo. Sería mejor si pudiéramos de alguna manera construir elprograma para que se pudiera repetir la visualización del menú y la selección de una y otra,hasta que el usuario elige para salir del programa.

En este capítulo, vamos a ver un concepto de programación llamado bucle, que puede serutilizado para hacer porciones de programas repiten. El shell proporciona tres comandoscompuestos por bucle. Vamos a ver dos de ellas en este capítulo, y el tercero en una tarde.

Looping

La vida cotidiana está llena de actividades repetidas. El ir a trabajar cada día, pasear al perro,

cortar una zanahoria son todas las tareas que implican la repetición de una serie de pasos.Vamos a considerar cortar una zanahoria. Si expresamos esta actividad en pseudocódigo,podría ser algo como esto:

1.  obtener la tabla de cortar

2.  conseguir cuchillo

3.  colocar la zanahoria en la tabla de cortar

4.  cuchillo ascensor

5.  zanahoria antelación

6.  rebanada de zanahoria

7.  si toda la zanahoria en rodajas, a continuación, dejar de fumar, de lo contrario, vaya al

paso 4Los pasos del 4 al 7 forman un bucle. Las acciones dentro del bucle se repite hasta que lacondición, "toda la zanahoria en rodajas," se alcanza.

Page 455: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 455/571

mientrasBash puede expresar una idea similar. Digamos que queríamos mostrar cinco números ensecuencial

409

Page 456: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 456/571

 

29 - Control de flujo: Looping Con tiempo / hasta ______________________

TiAl orden del uno al cinco. una escritura del golpe podría ser construidocomo sigue:

#! / Bin / bash# Tiempo de conteo: mostrar una serie de números

count = 1mientras que [[$ contar -LE 5]]; do echo $ count count

= $ ((count + 1))hechoecho "Terminado".

Cuando se ejecuta, el script muestra lo siguiente:

[Me @ linuxbox ~] $ mientras conteo1 2345Terminado.

La sintaxis del comando, mientras que es: mientras que los comandos; hacer comandos; hecho

Al igual que si, mientras se evalúa el estado de salida de una lista de comandos. Mientras elestado de salida es cero, realiza las mandos dentro del bucle. En el guión anterior, se crea lacuenta de variable y le asigna un valor inicial de 1. El comando mientras se evalúa el estado desalida del comando test. Mientras el comando test devuelve un estado de salida de cero, seejecutan los comandos dentro del bucle. Al final de cada ciclo, el comando de prueba se repite.Después de seis iteraciones del bucle, el valor de recuento se ha incrementado a 6, el comandode prueba ya no devuelve un estado de salida de cero y el bucle termina. El programacontinúa con la siguiente declaración después del bucle.

Podemos utilizar un bucle while para mejorar el programa de lectura-menú del capítuloanterior:

#! / Bin / bash

# Mientras-menú: un programa de información del sistema de menús

410

Page 457: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 457/571

 

Looping

DEMORA = 3 # Número de segundos para mostrar los resultados

mientras que [[$ RESPUESTA = 0]!]; hacerclaro

cat << - _EOF_Por favor seleccione:

1.  Mostrar información del sistema2.  Mostrar espacio en disco3.  Pantalla Inicio EspacioUtilización 0. Salir

 _EOF_leer -p "Introduzca la selección [0-3]>"

si [[$ RESPUESTA = ~ A [0-3] $]];entonces si [[$ RESPUESTA == 1]];

entoncesecho "Nombre de host: $HOSTNAME" tiempo de actividadsueño $ DEMORA

fisi [[$ RESPUESTA == 2]];

entonces df -hsueño $ DEMORA

fisi [[$ RESPUESTA == 3]]; entonces

si [[$ (-u id) -eq 0]]; entoncesecho "Utilización Inicio Espacio (Todos los usuarios)"du -sh / home / *

más

echo "Inicio Espacio Utilización ($ USER)" du-sh $ HOME fisueño $ DEMORA

fimás

echo "entrada no válida."sueño $ DEMORA

fihechoecho "Programa terminado."

Al encerrar el menú en un bucle while, somos capaces de tener el programa de repetir la

visualización del menú después de cada selección. El bucle continúa mientras respuesta no esigual a "0" y el menú se muestra de nuevo, dando al usuario la oportunidad de hacer otraselección. Al final de cada acción, un comando del sueño se ejecuta por lo que el programahará una pausa durante unos segundos para permitir que los resultados de la selección paraser visto antes de que la pantalla se borra y el menú se vuelve a mostrar. Una vez RESPUESTAes igual a "0", lo que indica la selección "dejar de fumar",

411

Page 458: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 458/571

29 ____________________________________ - Control de flujo: Looping Con tiempo / hasta ________________________________________

el bucle termina y la ejecución continúa con la línea siguiente hecho.

Salir de un bucleBash proporciona dos órdenes internas que se pueden utilizar para controlar el flujo delprograma dentro de bucles. El comando break termina inmediatamente un bucle, y el controldel programa se reanuda con la siguiente declaración después del bucle. El comando continuehace que el resto del bucle se omiten, y el control del programa se reanuda con la siguienteiteración del bucle. Aquí vemos una versión del programa, mientras que-menú que incorporatanto descanso y continuar:

412

#! / Bin / bash

#

Mientras-menu2

: Un programa de información del sistema de menús

DEMORA = 3 # Número de segundos para mostrar los resultados

mientras que la verdadera; hacerclarogato << - EOF

Por favor seleccione:

1. Mostrar información del sistema2.Mostrar espacio en disco3. Visualización Utilización Inicio Espacio0.Dejar de

EOFleer -p 'Introduzca la selección [0-3]> "

si [[$ RESPUESTA = ~ A [0-3] $]]; entoncessi [[$ RESPUESTA == 1]]; entonces

echo "Nombre de host: $ HOSTNAME" tiempo de actividadsueño $ RETRASO continuar

fisi [[$ RESPUESTA == 2]]; entonces

df -hsueño $ DEMORAcontinuar

fisi [[$ RESPUESTA == 3]]; entonces

si [[$ (-u id) -eq 0]]; entoncesecho "Utilización Inicio Espacio (Todos los usuarios)" du -sh /home / *

más

Page 459: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 459/571

echo "Inicio Espacio Utilización ($ USER)" du-sh $ HOME fisueño $RETRASO

continuar

#! / Bin / bash

# Hasta cargos: mostrar una serie de números count =

1

hasta que [[$ contar -gt 5]]; hacerecho $ conteo

413

Salir de un bucle

En esta versión de la secuencia de comandos, hemos creado un bucle sin fin (una que nuncatermina por sí mismo) mediante el comando fiel a suministrar un estado de salida al mismotiempo. Desde cierto siempre salir con un estado de salida de cero, el bucle nunca terminará.Esta es una técnica scripting sorprendentemente común. Dado que el bucle nunca terminarápor sí solo, es responsabilidad del programador para proporcionar alguna forma de romper el

bucle cuando sea el momento adecuado. En esta secuencia de comandos, el comando break seutiliza para salir del bucle cuando se elige la opción "0". El comando continuar se ha incluidoal final de las otras opciones de secuencia de comandos para permitir la ejecución máseficiente. Mediante el uso de continuar, el script omitirá código que no es necesaria cuando seidentifica una selección. Por ejemplo, si se elige la selección "1" y se identificó, no hay ningunarazón para la prueba de las otras selecciones.

hastaEl comando hasta que se parece mucho tiempo, pero en lugar de salir de un bucle cuando seencuentra un código de salida distinto de cero, se hace lo contrario. Un bucle hasta quecontinúa hasta que recibe un estado de salida cero. En nuestro script mientras recuento,continuamos el bucle siempre y cuando el valor de la variable de recuento era menor o igual a5. Podríamos obtener el mismo resultado mediante la codificación de la secuencia decomandos con hasta:

fisi [[$ RESPUESTA == 0]];entonces

másfi

rotura

eco "Entrada no

fisueño $ DEMORA

hechoecho "Programa terminado."

Page 460: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 460/571

count = $ ((recuento + 1))hechoecho "Terminado".

#! / Bin / bash

# Tiempo de leer: leer líneas de un archivo

mientras que la liberación de lectura versión distro; hacerprintf "Distro:% s \ tVersion:% s \ tReleased:% s \ n" \ $ distro \

$ Version \$

Comunicado hecho<distros.txt

#! / Bin / bash

# Mientras-READ2: leer líneas de un archivo

Ordenar -k 1,1 -k distros.txt 2n | mientras que la liberación de lectura versión distro; hacer

printf "Distro:% s \ tVersion:% s \ tReleased:% s \ n" \$ Distro \$ Version \$ Liberación

hecho

29  - Control de flujo: Looping Con tiempo / hasta

Al cambiar la expresión de prueba para contar -gt $ 5, hasta que se terminar el bucle en elmomento correcto. La decisión de si se debe utilizar el mismo tiempo o hasta bucle suele seruna cuestión de elegir la que permite la prueba más clara que se debe escribir.

Archivos de la lectura con Loops

mientras que y hasta que puede procesar la entrada estándar. Esto permite que los archivos

sean procesados con tiempo y hasta bucles. En el siguiente ejemplo, vamos a mostrar elcontenido del archivo tros.txt pantalla utilizado en capítulos anteriores:

Para redirigir un archivo al bucle, colocamos el operador de redirección después de ladeclaración de hecho. El bucle utilizará leer a la entrada de los campos del archivo redirigido.El comando de lectura se sale después de cada línea se lee, con un estado de salida cero hastaque se alcanza el final del archivo. En ese momento, saldrá con un estado de salida distinto decero, terminando así el bucle. También es posible a la entrada estándar tubo en un bucle:

414

Page 461: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 461/571

Archivos de la lectura con Loops

Aquí tomamos la salida del comando sort y mostrar el flujo de texto. Sin embargo, esimportante recordar que, desde una tubería se ejecutará el bucle en un subnivel, cualquiervariable creados o asignados dentro del bucle se perderán cuando el ciclo termina.

Resumiendo

Con la introducción de los bucles, y nuestros encuentros anteriores con la ramificación,subrutinas y secuencias, hemos cubierto los principales tipos de control de flujo utilizados enlos programas. Bash tiene algunos más trucos bajo la manga, pero son refinamientos sobreestos conceptos básicos.

Lectura adicional

•  La Guía de Bash para principiantes del Proyecto de Documentación de Linux tienealgunos ejemplos más de los bucles while:

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect 09 02.html •  La Wikipedia tiene un artículo sobre bucles, que es parte de un artículo más en elcontrol de flujo:http://en.wikipedia.org/wiki/Control fluir # Loops 

415

Page 462: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 462/571

#! / Bin / bash

# Problemas: la escritura para demostrar los errores denúmero común = 1

si [$ número = 1]; entoncesecho "El número es igual a 1."

másecho "Número no es igual a 1." fi

[Me @ linuxbox ~] $ Númeroproblemas es igual a 1.

30  - Solución de problemas

30 - Solución de problemas

A medida que nuestros guiones se vuelven más complejos, es el momento de echar un vistazoa lo que sucede cuando las cosas van mal y no hacen lo que queremos. En este capítulo, vamosa ver algunos de los tipos comunes de errores que se producen en las secuencias de comandos,

y describimos algunas técnicas útiles que se pueden utilizar para localizar y erradicar losproblemas.

Los errores sintácticos

Una clase general de errores es sintáctica. Errores sintácticos implican mistyping algúnelemento de la sintaxis del shell. En la mayoría de los casos, este tipo de errores conducirán ala que se deniega la shell para ejecutar el script.

En las siguientes discusiones, vamos a utilizar este script para demostrar los tipos comunes de

errores:

Como está escrito, este script se ejecuta correctamente:

416

Page 463: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 463/571

#! / Bin / bash

# Problemas: la escritura para demostrar los errores de

número común = 1

si [$ número = 1]; entoncesNúmero de eco "es igual a 1.

másecho "Número no es igual a 1." fi

: Sintaxis en

Los errores sintácticos

Falta CotizacionesSi editamos nuestro guión y retiramos la cita se arrastra desde el argumento tras el primercomando echo:

Se genera dos errores. Curiosamente, los números de línea no son reportados donde se extrajola cita que falta, sino mucho más tarde en el programa. Podemos ver por qué, si seguimos elprograma después de la cita que falta. fiesta continuará en busca de la cotización de cierrehasta que encuentra uno, lo que lo hace inmediatamente después de que el segundo comandoecho. Bash se vuelve muy confuso después de eso, y la sintaxis del comando si está rotoporque la declaración fi es ahora dentro de una cita (pero abierto) cadena.

En los guiones largos, este tipo de error puede ser muy difícil de encontrar. Utilizando un

editor con resaltado de sintaxis ayudará. Si se instala una versión completa de vim, resaltadode sintaxis se puede activar con el comando:

Fichas faltan o inesperadosOtro error común es olvidar para completar un comando compuesto, como si o

417

ver lo que sucede:[Me @ linuxbox ~] $ problemas /home / me / bin / problemas: la línea

EOF inesperado en la búsqueda decoincidencia '"'/ Home / me / bin / problemas: la error de sintaxis: final inesperado de archivo

Page 464: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 464/571

#! / Bin / bash

# Problemas: la escritura para demostrar los errores de

número común = 1

si [$ número = 1] entoncesecho "El número es igual a 1."

másecho "Número no es igual a 1." fi

[Me @ linuxbox ~] $ problemas/ Home / me / bin / problemas: la línea 9: error de sintaxis cerca símbolo

inesperado 'otra cosa'/ Home / me / bin / problemas: la línea 9: 'otra cosa'30  - Solución de problemas tiempo. Echemos un vistazo a lo que ocurre si eliminamos elpunto y coma después de la prueba en el caso de comandos:

El resultado es la siguiente:

Una vez más, el mensaje de error indica un error que se produce más tarde que el problemareal. Lo que pasa es realmente muy interesante. Como recordamos, si acepta una lista decomandos y se evalúa el código de salida de la última orden de la lista. En nuestro programa,tenemos la intención de esta lista a consistir en un solo comando, [, sinónimo de prueba. El

[comando toma lo que le sigue como una lista de argumentos; en nuestro caso, cuatroargumentos: $ número, 1, =, y]. Con el punto y coma retira la palabra a continuación, se añadea la lista de argumentos, que es sintácticamente legal. El siguiente comando echo es legal,también. Se interpreta como otro comando en la lista de comandos que si evaluarán por uncódigo de salida. Se encontró el otro lado, pero que está fuera de lugar, ya que la cáscara loreconoce como una palabra reservada (una palabra que tiene un significado especial para elshell) y no el nombre de un comando, por lo tanto, el mensaje de error.

Expansiones imprevistosEs posible tener errores que sólo se producen de forma intermitente en un script. A veces, la

secuencia de comandos se ejecutará finos y otras veces fallará debido a los resultados de unaexpansión. Si volvemos nuestro punto y coma que falta y cambiamos el valor del número auna variable vacía, podemos demostrar:

418

Page 465: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 465/571

 

Los erroressintácticos

#! / Bin / bash

# Problemas: la escritura para demostrar varios errores

comunes =

si [$ número = 1]; entoncesecho "El número es igual a 1."

másecho "Número no es igual a 1." fi

Al ejecutar el script con este cambio es consecuencia de lasalida:

[Me @ linuxbox ~] $ problemas/ Home / me / bin / problemas: la línea 7: [: =: operador unario Número

esperado no es igual a 1.

Recibimos este mensaje de error en lugar críptico, seguido de la salida del segundo comandoecho. El problema es la expansión de la variable de número dentro del comando de prueba.Cuando el comando:

[$ Número = 1]

se somete a expansión con el número está vacía, el resultado es elsiguiente:

[= 1]

que no es válido y se genera el error. El operador = es un operador binario (se requiere unvalor en cada lado), pero el primer valor se encuentra, por lo que el comando de pruebaespera que un operador unario (como -z) en su lugar. Además, puesto que la prueba hafallado (debido al error), el comando si recibe un código de salida distinto de cero y actúa enconsecuencia, y se ejecuta el segundo comando de eco.

Este problema se puede corregir añadiendo comillas alrededor del primer argumento en elcomando de la prueba:

["Número $" = 1]

419

Page 466: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 466/571

["" = 1]

cd $nombre_dir rm*

30  - Solución de problemas______________________

Luego, cuando se produce la expansión, el resultado será la siguiente:

que produce el número correcto de argumentos. Además de las cadenas vacías, citas debenutilizarse en los casos en que un valor podría ampliar en cadenas de varias palabras, como conlos nombres de archivo que contienen espacios incrustados.

Errores lógicos

A diferencia de los errores sintácticos, errores lógicos no impiden que un script se ejecute. Elscript se ejecutará, pero no va a producir el resultado deseado, debido a un problema con sulógica. Hay un sinnúmero de posibles errores lógicos, pero aquí están algunos de los tipos máscomunes que se encuentran en las secuencias de comandos:

1.  Expresiones condicionales incorrectos. Es fácil incorrectamente un código if / then

/ else y tienen la lógica equivocada lleva a cabo. A veces, la lógica se invierte, o seráincompleta.

2.  "Off por uno" errores. Al codificar bucles que emplean contadores, es posible pasarpor alto que el bucle puede requerir que el conteo se inicia con cero, en lugar de uno,para el recuento para concluir en el punto correcto. Este tipo de errores comoresultado ya sea un bucle "de ir fuera de la final" contando demasiado lejos, o de loque falta de la última iteración del bucle terminando una iteración demasiado pronto.

3.  Situaciones no previstas. La mayoría de los errores lógicos son el resultado de unprograma de datos o encontrarse con situaciones que eran imprevisto por elprogramador. Esto también puede incluir expansiones imprevistas, como un nombrede archivo que contiene espacios incrustados que se expande en múltiples

argumentos de comandos en lugar de un único nombre de archivo.

Programación DefensivoEs importante verificar las hipótesis en la programación. Esto significa una cuidadosaevaluación del estado de salida de los programas y comandos que son utilizados por unguión. He aquí un ejemplo, basado en una historia real. Un administrador del sistema

desafortunado escribió un guión para realizar una tarea de mantenimiento en un servidorimportante. El guión contiene las siguientes dos líneas de código:

420

Page 467: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 467/571

 

Errores lógicos

No hay nada intrínsecamente malo con estas dos líneas, siempre y cuando el directoriollamado en la variable, nombre_dir, existe. Pero, ¿qué pasa si no lo hace? En ese caso, elcomando cd falla y el guión sigue a la siguiente línea y elimina los archivos en el directorio de

trabajo actual. No es el resultado deseado en absoluto! El administrador desventuradodestruyó una parte importante del servidor debido a esta decisión de diseño.

Echemos un vistazo a algunas formas de este diseño se podría mejorar. En primer lugar,podría ser prudente para que la ejecución del contingente rm en el éxito del cd:

cd $ nombre_dir && rm *

De esta manera, si el comando cd falla, el comando rm no se lleva a cabo. Esto es mejor, perotodavía deja abierta la posibilidad de que la variable, nombre_dir, no está definido o está

vacío, que daría lugar a los archivos en el directorio personal del usuario se va a eliminar. Estotambién podría ser evitado mediante la comprobación para ver que nombre_dir en realidadcontiene el nombre de un directorio existente:

[[-d $ Nombre_dir]] && cd $ nombre_dir && rm *

A menudo, lo mejor es dar por terminado el guión con un error cuando una situación como laque se produce por encima de:

# Eliminar archivos en el directorio $nombre_dir si [[! -d "$ nombre_dir"]]; entoncesecho "No existe el directorio: '$ nombre_dir'"> & 2

exit 1 fisi! cd $ nombre_dir; entonces

echo "No se puede cd para '$ nombre_dir'">& 2 exit 1 fisi! rm *; entonces

echo "borrado del archivo falló. Verificar los resultados"> &2 exit 1 fi

En este caso, comprobamos tanto el nombre, a ver que es la de un directorio existente, y eléxito de la orden cd. Si cualquiera de los dos falla, un mensaje de error descriptivo se envía alerror estándar y el guión termina con un estado de salida de uno para indicar una falla.

421

Page 468: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 468/571

[[$ RESPUESTA = ~ A [0-3]$]]

El diseño es una función del tiempo

Cuando yo era un estudiante de la universidad a estudiar diseño industrial, un sabioprofesor afirmó que el grado de diseño en un proyecto se determina por la cantidadde tiempo dado para el diseñador. Si le dieron cinco minutos para el diseño de undispositivo "que mata a las moscas", que ha diseñado un matamoscas. Si le dieron decinco meses, usted puede llegar a un "sistema anti-mosca" guiado por láser en sulugar.El mismo principio se aplica a la programación. A veces un guión "rápido y sucio"hará si sólo va a ser utilizado una vez y sólo utilizado por el programador. Ese tipo deguión es común y se debe desarrollar rápidamente a hacer el esfuerzo económico.Tales secuencias de comandos no necesitan una gran cantidad de comentarios ycheques defensivas. Por otro lado, si un script está pensado para su uso enproducción, es decir, una secuencia de comandos que se utiliza una y otra vez para

una tarea importante o de múltiples usuarios, es necesario el desarrollo mucho máscuidadoso.

30 - Solución de problemas

Entrada de VerificaciónUna regla general de una buena programación es que si un programa acepta la entrada, tieneque ser capaz de hacer frente a cualquier cosa que recibe. Esto generalmente significa que laentrada debe ser cuidadosamente seleccionados, para asegurar que sólo de entrada válido esaceptado para su posterior procesamiento. Vimos un ejemplo de esto en el capítulo anterior,cuando se estudió el comando de lectura. Un guión contenía la siguiente prueba para verificaruna selección de menú:

Esta prueba es muy específica. Sólo se devuelve un estado de salida cero si la cadena devueltapor el usuario es un número en el rango de cero a tres. Ninguna otra cosa será aceptado. Aveces este tipo de pruebas puede ser muy difícil de escribir, pero el esfuerzo es necesario paraproducir una secuencia de comandos de alta calidad.

Pruebas

La prueba es un paso importante en todo tipo de desarrollo de software, incluyendo lassecuencias de comandos. Hay un dicho en el mundo del código abierto, "la libertadanticipada, la liberación a menudo," que refleja este hecho. Por la liberación de pronto y confrecuencia, el software se vuelve más exposición a utilizar y las pruebas. La experiencia ha

demostrado que los insectos son mucho más fáciles de encontrar, y mucho menos costoso paraarreglar, si se encuentran al principio del ciclo de desarrollo.

En una discusión anterior, vimos cómo los trozos se pueden utilizar para verificar el flujo delprograma. Desde las primeras etapas de desarrollo del guión, son una técnica valiosa paracomprobar el progreso

422

Page 469: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 469/571

si [[-d $ nombre_dir]]; entonces sicd $ nombre_dir; entonces

echo rm * # PRUEBASmás

echo "no puede cd para '$ nombre_dir'"> & 2exit 1 fi

másecho "no hay tal directorio: '$ nombre_dir'"> & 2 exit

1 fi# PRUEBAS salida

Pruebasde nuestro trabajo.

Veamos el problema de eliminación de archivos arriba y ver cómo esto podría ser codificadapara la prueba fácil. Probando el fragmento original de código sería peligroso, ya que supropósito es eliminar los archivos, pero podríamos modificar el código para hacer la cajafuerte de prueba:

Dado que las condiciones de error ya los mensajes útiles de salida, no hay que añadir ninguna.El cambio más importante es colocar un comando echo justo antes del comando rm parapermitir que el mando y la lista de parámetros ampliado que se mostrarán, en lugar de laorden en realidad está ejecutando. Este cambio permite la ejecución segura de código. Al finaldel fragmento de código, colocamos un comando de salida a la conclusión de la prueba yevitar que cualquier otra parte de la secuencia de comandos de ser llevado a cabo. Lanecesidad de este variará de acuerdo con el diseño de la secuencia de comandos.

También se incluyen algunos comentarios que actúan como "marcadores" para nuestroscambios relacionados con la prueba. Estos pueden ser usados para ayudar a encontrar yeliminar los cambios cuando finalice la prueba.

Casos de pruebaPara llevar a cabo las pruebas de utilidad, es importante desarrollar y aplicar buenos casos deprueba. Esto se hace seleccionando cuidadosamente los datos de entrada o condiciones quereflejan casos borde y esquina operativo. En nuestro fragmento de código (que es muysimple), queremos saber cómo el código realiza bajo tres condiciones específicas:

1.  nombre_dir contiene el nombre de un directorio existente

2.  nombre_dir contiene el nombre de un directorio inexistente

3.  nombre_dir está vacía

Mediante la realización de la prueba con cada una de estas condiciones, se logra una buena

cobertura de la prueba.

Al igual que con el diseño, la prueba es una función del tiempo, también. No todas lascaracterísticas de la escritura tiene que

423

Page 470: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 470/571

si [[-d $ nombre_dir]]; entonces sicd $ nombre_dir; entonces rm *

másecho "no puede cd para '$ nombre_dir'"> & 2

exit 1 fi#  más#  echo "no hay tal directorio: '$ nombre_dir'"> & 2#  salida 1fi

30 - Solución de problemas ser ampliamente probado. Es realmente una cuestión dedeterminar qué es lo más importante. Ya que podría ser tan potencialmente destructivo si nofunciona bien, nuestro fragmento de código se merece una cuidadosa consideración, tantodurante su diseño y pruebas.

Depuración

Si la prueba revela un problema con un guión, el siguiente paso es la depuración. "Unproblema" por lo general significa que el guión es, de alguna manera, la no realización de lasexpectativas del programador. Si este es el caso, tenemos que determinar cuidadosamenteexactamente lo que el guión está haciendo en realidad y por qué. Encontrar errores a vecespuede implicar una gran cantidad de trabajo de detective.

Un guión bien diseñado va a tratar de ayudar. Debe ser programado defensiva, para detectarcondiciones anormales y proporcionar información útil para el usuario. A veces, sin embargo,

los problemas son bastante extraña e inesperada, y se requieren técnicas más involucrados.

Encontrar el área del problemaEn algunos scripts, particularmente los largos, a veces es útil para aislar la zona de lasecuencia de comandos que se relaciona con el problema. Esto no siempre será el error real,pero el aislamiento a menudo proporciona una visión de la causa real. Una técnica que se

puede utilizar para aislar código es "comentando" secciones de una secuencia de comandos.Por ejemplo, nuestro fragmento de deleción archivo podría ser modificada para determinar sila sección eliminada se relacionó con un error:

Mediante la colocación de comentarios símbolos al comienzo de cada línea en una secciónlógica de una secuencia de comandos, evitamos que la sección de ser ejecutado. La pruebapuede entonces realizarse de nuevo, para ver si la eliminación del código tiene ningúnimpacto en el comportamiento del insecto.

Rastreo

Los errores son a menudo casos de flujo lógico inesperado dentro de un script. Es decir, laspartes de la secuencia de comandos son o bien nunca se ejecutan o se ejecutan en el ordenincorrecto o en el

424

Page 471: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 471/571

 

Depuración

momento equivocado. Para ver el flujo real del programa, se utiliza una técnica llamadarastreo.

Uno de los métodos de rastreo consiste en colocar mensajes informativos en una secuencia de

comandos que muestra el lugar de la ejecución. Podemos añadir mensajes a nuestrofragmento de código:

echo "la preparación para eliminar los archivos"> & 2si [[-d $ nombre_dir]]; entonces si cd $nombre_dir; then echo "Eliminar archivos"> &2

rm *más

echo "no puede cd para '$ nombre_dir'"> & 2exit 1 fi

másecho "no hay tal directorio: '$ nombre_dir'"> & 2 exit

1 fi

echo "la eliminación de archivos completa"> & 2

Enviamos los mensajes de error estándar para separarlos de salida normal. Tampoco guión Lalíneas que contienen los mensajes, por lo que es más fácil de encontrar cuando es el momentode retirarlos.

Ahora, cuando se ejecuta la secuencia de comandos, es posible ver que la eliminación dearchivos se ha realizado:

[Me @ linuxbox ~] $ borrado-escritura seprepara para eliminar archivos borrararchivos de un archivo borrado completo[me @ linuxbox ~] $

Bash también proporciona un método de rastreo, implementado por la opción -x y elcomando set con la opción -x. Usando nuestro anterior guión problemas, podemos activar elrastreo para toda la secuencia de comandos mediante la adición de la opción -x a la primeralínea:

#! / Bin / bash -x

# Problemas: la escritura para demostrar los errores de

número común = 1

425

Page 472: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 472/571

 

30 - Solución deproblemas

si [$ número = 1]; entoncesecho "El número es igual a 1."

másecho "Número no es igual a 1." fi

Cuando se ejecuta, los resultados se venasí:

[Me @ linuxbox ~] $ problemas +número = 1 + '[' 1 = 1 ']'+ Echo 'El número es igual a 1.' Elnúmero es igual a 1.

Con el rastreo habilitado, vemos los comandos realizados con expansiones aplicadas. Lossignos más indican que conducen la pantalla de la traza para distinguirlas de las líneas desalida regular. El signo más es el carácter predeterminado de salida de rastreo. Está contenidaen la variable de shell PS4 (cadena pronto 4). El contenido de esta variable se puede ajustarpara que el indicador más útil. Aquí, modificamos el contenido de la variable a incluir elnúmero de línea actual en la secuencia de comandos donde se realiza la traza. Tenga en cuentaque se requieren comillas simples para prevenir la expansión hasta que se utiliza realmente elsímbolo:

[Me @ linuxbox ~] PS4 $ export = '$ NUMLINEA +'[Me @ linuxbox ~] $ dificultad 5 + número = 1

7  + '[' 1 = 1 ']'8  + Echo 'El número es igual a 1.'El número es igual a 1.

Para realizar un seguimiento sobre una parte seleccionada de una secuencia de comandos, enlugar de toda la secuencia de comandos, podemos utilizar el comando set con la opción -x:

#! / Bin / bash

# Problemas: la escritura para demostrar los errores de

número común = 1

set -x # Encienda el rastreosi [$ número = 1]; entonces

echo "El número es igual a 1."

426

Page 473: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 473/571

másecho "Número no es igual a 1." fi

+ x # desactivar el seguimiento

#! / Bin / bash

# Problemas: la escritura para demostrar los errores de

número común = 1

echo "número = $ número" # DEBUGset -x # Encienda el rastreo si [$ número = 1]; entonces

echo "El número es igual a 1."más

echo "Número no es igual a 1." fi+ x # desactivar el seguimiento

Depuración

Utilizamos el comando set con la opción -x para activar el rastreo y el + x opción paradesactivar el rastreo. Esta técnica se puede utilizar para examinar múltiples porciones de unasecuencia de comandos problemático.

El examen de Valores durante la ejecuciónA menudo es útil, junto con el rastreo, para mostrar el contenido de las variables para ver elfuncionamiento interno de una secuencia de comandos mientras está siendo ejecutado. Laaplicación de las declaraciones de eco adicionales suele hacer el truco:

En este ejemplo trivial, simplemente mostramos el valor de la variable número y marcar lalínea agregada con un comentario para facilitar su posterior identificación y remoción. Estatécnica es particularmente útil cuando se ve el comportamiento de los bucles y la aritmética enlas secuencias de comandos.

Resumiendo

En este capítulo, nos fijamos en sólo algunos de los problemas que pueden surgir durante eldesarrollo de la escritura. Por supuesto, hay muchos más. Las técnicas descritas aquí permitiráencontrar errores más comunes. La depuración es un arte que se puede desarrollar a través dela experiencia, tanto en saber cómo evitar los errores (prueba constantemente a lo largo deldesarrollo) y en la búsqueda de errores (uso eficaz de rastreo).

427

Page 474: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 474/571

30 - Solución de problemas

Lectura adicional

•  La Wikipedia tiene un par de artículos cortos sobre los errores sintácticos ylógicos: http://en.wikipedia.org/wiki/Syntax error error

http://en.wikipedia.org/wiki/Logic  •  Hay muchos recursos en línea para los aspectos técnicos de la programación bash:

http://mywiki.wooledge.org/BashPitfalls  http://tldp.org/LDP/abs/html/gotchas.html  http://www.gnu.org/software/bash/manual/html nodo /Reservado-Word-index.html  

•  De Eric Raymond El arte de la programación de Unix es un gran recurso para elaprendizaje de los conceptos básicos que se encuentran en los programas de Unix bienescritos. Muchas de estas ideas se aplican a los scripts de shell:http://www.faqs.org/docs/artu/ http://www.faqs.org/docs/artu/ch01s06.html 

•  Para realmente depuración de servicio pesado, no es el Bash depurador:http://bashdb.sourceforge.net/  

428

Page 475: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 475/571

#! / Bin / bash

#-Menú leer: un programa de información del sistema de menús

claro eco "Por favor seleccione:

1. Mostrar información del sistema2. Mostrar espacio en disco3. Visualización Utilización Inicio Espacio0. Salir "leer -p "Introduzca la selección [0-3]>"

si [[$ RESPUESTA = ~ A [0-3] $]];entonces si [[$ RESPUESTA == 0]];entonces

31  - Control de flujo: Bifurcaciones Conel caso

31 - Contro l de f lu jo : B ifurcacion es Con elcaso

En este capítulo, vamos a seguir buscando en el control de flujo. En el capítulo 28, seconstruyeron algunos menús simples y construimos la lógica utilizada para actuar en la

selección de un usuario. Para ello, se utilizó una serie de comandos para identificar si cuál delas posibles opciones que se ha seleccionado. Este tipo de construcción aparece con frecuenciaen los programas, tanto es así que muchos lenguajes de programación (incluyendo la cáscara)proporcionan un mecanismo de control de flujo para las decisiones de selección múltiple.

caso

El comando compuesto de opción múltiple de bash se llama así. Tiene la siguiente sintaxis:palabra en caso

 [Patrón [| comandos patrón] ...)esac

Si nos fijamos en el programa de lectura-menú del capítulo 28, vemos la lógica utilizada paraactuar en la selección de un usuario:

429

Page 476: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 476/571

 

31 - Control de flujo: Bifurcaciones Con elcaso

echo "Programa terminado."Salida

fisi

fisi

[[$ RESPUESTA == 1]]; entoncesecho "Nombre de host: $HOSTNAME"el tiempo de actividadSalida

[[$ RESPUESTA == 2]]; salida-h entonces df

fisi [[ $ Responder == 3]]; entonces

si [[$ (-u id) -eq 0]]; entoncesecho "Utilización Inicio Espacio du-sh / home / *

más

echo "Utilización Inicio Espacio du-sh $ HOME

(Todos los

usuarios) "($

user)"fiSalidafi

másecho "entrada no válida." > & 2

exit 1 fi

Utilizando caso, podemos sustituir esta lógica con algo mássimple:

#! / Bin / bash

# Caso-menú: un programa de información del sistema de menús

claro eco "Por favor seleccione:

1.  Mostrar información del sistema2.  Mostrar espacio en disco3.  Visualización Utilización Inicio Espacio0. Salir "

leer -p "Introduzca la selección [0-3]>" caso $

Responder en0) echo "Programa terminado." Salida

430

Page 477: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 477/571

 

El comando de caso examina el valor de la palabra, en nuestro ejemplo, el valor de la variablede respuesta, y entonces intenta emparejarlo contra uno de los patrones especificados. Cuandose encuentra una coincidencia, se ejecutan los comandos asociados con el patrón especificado.Una vez que se encuentra una coincidencia, se intenta no hay más partidos.

PatronesLos patrones utilizados por caso son los mismos que los utilizados por la expansión denombre de ruta. Los patrones se terminan con un ")" carácter. Aquí hay algunos patrones

válidos:

caso

1) eco "Nombre de host: $ HOSTNAME"el tiempo de actividad

2) 1 1 df -h3) si [[

$ (-u Id) -eq 0]]; then echo "UtilizaciónInicio Espacio du -sh / home / *

(Todos los usuarios) "

másecho "Utilización Inicio Espacio du-sh $ HOME

($ USER) "

fi

*) eco "Entrada no válida"> & 2Salida1

esac

Page 478: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 478/571

 

Table32-1: Patrón caso Ejemplos

Patrón Descripción

a) Coincide si la palabra es igual a "a".

[[: Alpha:]]) Coincide si la palabra es un único carácter alfabético.???) Coincide si la palabra es exactamente tres caracteres de longitud.* .txt) Partidos si la palabra termina con los caracteres ".txt".

*) Coincide con cualquier valor de la palabra. Es una buena prácticaincluir esto como el último modelo en un comando caso, para cogercualquier valor de la palabra que no coincidía con un patrónanterior; es decir, para detectar cualquier posibles valores no

He aquí un ejemplo de los patrones en el trabajo:

431

Page 479: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 479/571

 

31 - Control de flujo: Bifurcaciones Con el caso

#! / Bin / bash

leer -p "entrar palabra> " 

caso en $ Responder

[[: Alpha:]]) eco "Es un único carácter alfabético. ";;[ABC] [0-9]) eco "Es A, B, o C, seguido de un dígito. ";;???) eco "Es tres caracteres de longitud. ";;* .txt) eco "Es una palabra que termina en '.txt' ";;*) eco "Es algo más. ";;

esac

También es posible combinar múltiples patrones usando el carácter barra vertical comoseparador. Esto crea una "o" patrón condicional. Esto es útil para cosas tales como el manejode los personajes, tanto mayúsculas y minúsculas. Por ejemplo:

#! / Bin / bash

# Caso-menú: un programa de información del sistema de menús

claro eco "or favor seleccione:

A.  Mostrar información del sistema.  Mostrar espacio en disco.  Visualización Utilización Inicio Espacio. ¿Salir

"

leer -p "Introduzca la selección [A, B, C o Q]>" caso $esponder en

q | Q) echo "Programa terminado." Salida

a | A) echo "Nombre de host: $HOSTNAME" tiempo de actividad

b | B) df -h

c | C) si [[$ (-u id) -eq 0]]; entoncesecho "Utilización Inicio Espacio (Todos los usuarios)"du -sh / home / *

más

echo "Inicio Espacio Utilización ($ USER)" du-sh $ HOME fi

432

Page 480: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 480/571

/ /

*) Echo "entrada no válida"> & 2 salida1

esac

[Me @ linuxbox ~] $ case4-1escriba un carácter> una 'a' esminúscula.

caso

Aquí, modificamos el programa de caso-menú para utilizar letras en vez de números para laselección del menú. Observe cómo los nuevos modelos permiten la entrada de letrasmayúsculas y minúsculas.

Realización de múltiples accionesEn las versiones de fiesta antes de la 4.0, caso permitió sólo una acción a realizar en unapersona compatible. Después de una persona compatible, el comando sería terminar. Aquívemos un script que pone a prueba un personaje:

El script funciona para la mayor parte, pero falla si un personaje coincide con más de uno delos personajes de las clases POSIX. Por ejemplo, el carácter "a" es a la vez minúsculas yalfabética, así como un dígito hexadecimal. En bash anteriores a la versión 4.0 no habíamanera para el caso de coincidir más de una prueba. Las versiones modernas de bash, añadirel ";; y" notación para

433

#! / Bin / bash

# Case4-1: una prueba personaje

leer -n 1 -p Tipo " un carácter> "ecocaso en $ Responder

[[: Upper:]]) eco "' $ es mayúsculas. ";;[[: Lower:]]) eco "' $ es minúscula. ";;[[: Alpha:]]) eco "' $ es alfabético. ";;[[: Dígito:]]) eco "' $ es un dígito. ";;[[: Graph:]]) eco "' $ es un carácter visible. ";;[[: Punct:]]) eco "' $ es un símbolo de puntuacion. ";;[[: Space:]]) eco "' $ es un carácter de espacio en blanco. ";;[[: Xdigit:]]) eco "' $ es un dígito hexadecimal. ";;

esac

Al ejecutar esta secuencia de comandos produce esto:

Page 481: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 481/571

31 - Control de flujo: Bifurcaciones Con el caso por terminado cada acción, por lo que ahora

podemos hacer esto:

#! / Bin / bash

# Case4-2: una prueba personaje

leer -n 1 -p Tipo " un carácter> "ecocaso en $ Responder

[[: Upper:]]) eco " $ es mayúsculas ".[[: Lower:]]) eco " $ es minúscula. ";; y[[: Alpha:]]) eco " $ es alfabético. ";; y[[: Dígito:]]) eco " $ es un dígito. ";; y[[: Graph:]]) eco " $ es un carácter visible. ";; y[[: Punct:]]) eco " $ es un símbolo de puntuacion. ";; y[[: Space:]]) eco " $ es un carácter de espacio en blanco. ";; y[[: Xdigit:]]) eco " $ es un dígito hexadecimal. ";; y

esac

Cuando ejecutamos este script, obtenemos lo siguiente:

[Me @ linuxbox ~] $ case4-2escriba un carácter> una 'a' esminúscula.'A' es alfabético.'A' es un carácter visible. 'A' es undígito hexadecimal.

La adición de la sintaxis ";; y" permite que el caso continúe a la siguiente prueba en lugar desimplemente por concluida.

Resumiendo

El comando caso es una adición útil a nuestra bolsa de trucos de programación. Comoveremos en el próximo capítulo, es la herramienta perfecta para el manejo de determinados

tipos de problemas.

Lectura adicional

•  La sección Manual de Referencia sobre Bash condicionales Las construcciones sedescribe el comando caso en detalle:http://tiswww.case.edU/php/chet/bash/bashref.html#SEC21  

•  La Guía avanzada Bash-Scripting ofrece otros ejemplos de aplicación caso

434

Page 482: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 482/571

 

Lecturaadicional

ciones:http://tldp.org/LDP/abs/html/testbranch.html 

435

Page 483: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 483/571

 

32 - Parámetrosposicionales

32 - Parámetrosposic ionales

Una característica que ha estado ausente de nuestros programas es la capacidad de aceptar yde opciones y argumentos de la línea de comandos de proceso. En este capítulo, vamos aexaminar las características de shell que permiten a nuestros programas para tener acceso alos contenidos de la línea de comandos.

Cómo acceder a la línea de comandos

El shell proporciona un conjunto de variables llamadas parámetros posicionales quecontienen las palabras individuales en la línea de comandos. Las variables se denominan 0 a 9.Pueden ser demostrados de esta manera:

#! / Bin / bash

# Posit-param: secuencia de comandos para ver los parámetros delínea de comandos

echo "\ $ 0= $ 0 \ $ 1

= $ 1 \ $ 2= $ 2 \ $ 3= $ 3 \ $ 4= $ 4 \ $ 5= $ 5 \ $ 6= $ 6 \ $ 7= $ 7 \ $ 8= $ 8 \ $ 9= $ 9

Un guión muy simple que muestra los valores de las variables $ 0- $ 9. Cuando se ejecuta sin

argumentos de línea de comandos:

[Me @ linuxbox ~] $ posit-param $ 0

= / home / me / bin / posit-param

436

Page 484: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 484/571

 

Cómo acceder a la línea decomandos

$ 1 =$ 2 =$ 3 =$ 4 =$ 5 =$ 6 =$ 7 =$ 8 =$ 9 =

Incluso cuando no se proporcionan argumentos, $ 0 siempre contendrá el primer elementoque aparece en la línea de comandos, que es el nombre de ruta del programa que se estáejecutando. Cuando se proporcionan argumentos, vemos los resultados:

[Me @ linuxbox ~] $ posit-param a b c d $ 0 = / home / me / bin / posit-param$ 1 = un$ 2 = b$ 3 = c$ 4 = d$ 5 =$ 6 =$ 7 =$ 8 =$ 9 =

Nota: En realidad se puede acceder a más de nueve parámetros mediante laexpansión de parámetro. Para especificar un número mayor que nueve, rodear elnúmero entre llaves. Por ejemplo $ {10}, $ {55}, $ {211}, y así sucesivamente. 

Determinar el número de argumentosEl shell también ofrece una variable, $ #, que da el número de argumentos en la línea decomandos:

#! / Bin / bash

# Posit-param: secuencia de comandos para ver los parámetros de

línea de comandos se hacen eco "

437

Page 485: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 485/571

 

32 - Parámetrosposicionales

Número de argumentos: $ #\ $ 0 = $ 0\ $ 1 = $ 1\ $ 2 = $ 2\ $ 3 = $ 3\ $ 4 = $ 4\ $ 5 = $ 5\ $ 6 = $ 6\ $ 7 = $ 7\ $ 8 = $ 8\ $ 9 = $ 9

Elresultado:

[Me @ linuxbox ~] $ posit-param a b c d

Número de argumentos: 4$ 0 = / home / me / bin / posit-param$ 1 = un$ 2 = b$ 3 = c$ 4 = d$ 5 =$ 6 =$ 7 =$ 8 =$ 9 =

cambiar - Conseguir acceso a muchos argumentos¿Pero qué sucede cuando damos el programa de un gran número de argumentos comoéste:

[Me @ linuxbox ~] $ posit-param *

Número de argumentos: 82 $ 0 = /home / me / bin / posit-param $ 1 = $2 = addresses.ldif bin

$ 3 = bookmarks.html $ 4 =debian-500-i386-netinst.iso $ 5 =debian-500-i386-netinst.jigdo $ 6 =debian-500-i386-netinst.template $ 7 =debian-cd_info.tar.gz

438

Page 486: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 486/571

 

Cómo acceder a la línea decomandos

$ 8 = Escritorio$ 9 = listadir-bin.txt

En este sistema de ejemplo, el comodín * expande en 82 argumentos. ¿Cómo podemosprocesar que muchos? La cáscara proporciona un método, aunque una torpe, para hacer esto.El comando de cambio hace que todos los parámetros de "bajar un" cada vez que se ejecuta.De hecho, mediante el uso de cambio, es posible llegar a funcionar con sólo un parámetro(además de $ 0, que nunca cambia):

#! / Bin / bash

# Posit-param2: script para mostrar cuentan todos los

argumentos = 1mientras que [[$ # -gt 0]]; hacerecho "El argumento $ count = $ 1"count = $ ((count + 1)) cambio

hecho

Cada cambio de hora se ejecuta, el valor de $ 2 se mueve a $ 1, el valor de $ 3 se mueve a $ 2 yasí sucesivamente. El valor de $ # también se reduce en uno.

En el programa posit-param2, creamos un bucle que evalúa el número de argumentosrestantes y continúa siempre que haya al menos una. Le mostramos el argumento actual,incrementar el número de variables con cada iteración del bucle para proporcionar una cuentacorriente de la serie de argumentos elaborados y, por último, ejecutamos un cambio paracargar $ 1 con el siguiente argumento. Aquí está el programa en el trabajo:

[Me @ linuxbox ~] $ posit-param2 a b c dArgumento 1Argumento 2 = a= b = cArgumento 3Argumento 4 = d

 Aplicaciones sencillasIncluso sin cambio, es posible escribir aplicaciones útiles que utilizan parámetros posicionales.A modo de ejemplo, he aquí un programa de información de archivos simple:

439

Page 487: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 487/571

#! / Bin / bash

# File_info: programa de información de archivos simple

Progname = $ (basename $ 0)si [[-e $ 1]]; entonces

echo -e "\ narchivo Tipo:"presentar 1 dólarecho -e "\ narchivo Estado:"stat $ 1

másecho "$ progname: uso: $ file progname"> & 2 exit 1 fi

file_info () {

# File_info: función para mostrar la información del archivo

si [[-e $ 1]]; entoncesecho -e "\ narchivo Tipo:"presentar 1 dólarecho -e "\ narchivo Estado:"stat $ 1

másecho "$ FUNCNAME: uso: $ file FUNCNAME"> & 2retorno 1

32 - Parámetros posicionales

Este programa muestra el tipo de archivo (determinado por el comando file) y el estado delarchivo (desde el comando stat) de un archivo especificado. Una característica interesante deeste programa es la variable progname. Se le da el valor que resulta de la orden basename $ 0.El comando basename elimina la porción delantera de una ruta de acceso, dejando sólo elnombre de la base de un archivo. En nuestro ejemplo, basename elimina la parte principal de

la ruta de acceso que figura en el parámetro $ 0, la ruta completa de nuestro programa deejemplo. Este valor es útil cuando la construcción de los mensajes tales como el mensaje de usoal final del programa. Por la codificación de esta manera, la secuencia de comandos puedecambiar el nombre y el mensaje se ajusta automáticamente a contener el nombre del

programa.

Uso de parámetros posicionales Con Funciones ShellAsí como parámetros posicionales se utilizan para pasar argumentos a los scripts de shell,también pueden ser utilizados para pasar argumentos a Shell funciones. Para demostrarlo,vamos a convertir el guión file_info en una función de la shell:

440

Page 488: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 488/571

fi}

Cómo acceder a la línea de comandos

Ahora bien, si un script que incorpora la función de shell file_info llama a la función con unargumento de nombre de archivo, el argumento se pasa a la función.

Con esta capacidad, podemos escribir muchas funciones de shell útiles que no sólo se pueden

usar en los scripts, pero también dentro del archivo .bashrc.Observe que la variable progname fue cambiado a la FUNCNAME variable de shell. Lacáscara se actualiza automáticamente esta variable para realizar un seguimiento de la funciónde shell actualmente ejecutada. Tenga en cuenta que $ 0 siempre contiene el nombre de rutacompleto del primer punto de la línea de comandos (es decir, el nombre del programa) y nocontiene el nombre de la función de shell como podríamos esperar.

Manipulación de Parámetros posicionales En Masse

A veces es útil para gestionar todos los parámetros de posición como un grupo. Por ejemplo,podríamos querer escribir un "envoltorio" alrededor de otro programa. Esto quiere decir que

creamos una función de secuencia de comandos o shell que simplifica la ejecución de otroprograma. La envoltura proporciona una lista de opciones de línea de comandos arcanos yluego pasa a una lista de argumentos para el programa de nivel inferior.

El shell proporciona dos parámetros especiales para este fin. Ambos se expanden en la listacompleta de los parámetros posicionales, pero difieren en formas más sutiles. Ellos son:

Aquí es un script que muestra estos parametros especiales en acción:

441

Tabla 32-1: El * Y @ Parámetros especiales

Parámetro Descripción$ *

Se expande en la lista de parámetros posicionales, empezando por 1.Cuando entre comillas dobles, se expande en una cadena entre comillasdobles que contiene todos los parámetros de posición, cada uno

separado por el primer carácter de la variable de shell IFS (por defectoun carácter de espacio) .$ @

Se expande en la lista de parámetros posicionales, empezando por 1.Cuando entre comillas dobles, se expande cada parámetro de posiciónen una palabra separada entre comillas dobles.

Page 489: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 489/571

 

32 - Parámetrosposicionales

#! / Bin / bash

# Posit-params3: script para demostrar $ * y $ @

print_params () {echo "\$ 1 = $ 1" echo "\ $2 = $ 2" echo "\ $ 3= $ 3" echo "\ $ 4 =$ 4"

}

pass_params () {echo -e "\ N" " '$ *:'; print_params $ *echo -e "\ N" " 1 "$ *": ' ; print_params "$ *echo -e "\ N" 1$ @: '; print_params $ @echo -e

} "\ N" 1"$ @": ' ; print_params "$ @

pass_params "Palabra" "palabras con espacios "

En este programa más bien complicado, creamos dos argumentos: "la palabra" y "palabras conespacios", y pasamos a la función pass_params. Esa función, a su vez, los pasa a la funciónprint_params, utilizando cada uno de los cuatro métodos disponibles con los parámetrosespeciales $! y $ @. Cuando se ejecuta, el script revela las diferencias:

[Me @ linuxbox ~] $ posit-param3

$ *:$ 1 = $ 2 = palabra palabras $ 3 = $ 4 =con espacios

1 dólar = palabras de palabras conespacios $ 2 =$ 3 =$ 4 =

$ @:$ 1 = $ 2 = palabra palabras $ 3 = $

4 = con espacios"$ @":

$ 1 = palabra

442

Page 490: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 490/571

$ 2 = palabras con espacios $3 =$ 4 =

Manipulación de Parámetros posicionales En Masse

Con nuestros argumentos, tanto $! y $ @ producir un resultado de

cuatro palabras: palabra palabras con espacios "$ *" produce un

resultado de una palabra:"palabra palabras con espacios"

"$ @" Produce un resultado de dos palabras:

"Palabra" "palabras con espacios"

que coincide con nuestra intención real. La lección a sacar de esto es que a pesar de que lacáscara ofrece cuatro maneras diferentes de conseguir la lista de parámetros posicionales, "$@" es, con mucho, el más útil para la mayoría de las situaciones, ya que conserva la integridadde cada parámetro posicional.

Una aplicación más completa

Después de un largo paréntesis, vamos a reanudar el trabajo en nuestro programasys_info_page. Nuestra próxima Además añadirá varias opciones de línea de comandos parael programa de la siguiente manera:

•  El archivo de salida. Vamos a añadir una opción para especificar un nombre de unarchivo para contener la salida del programa. Se especifica como tampoco archivo -f o- archivo -file.

•  El modo interactivo. Esta opción le pedirá al usuario un nombre de archivo de salida ydeterminará si ya existe el archivo especificado. Si lo hace, el usuario se le pedirá antesse sobrescribe el archivo existente. Esta opción se especificará por cualquiera -i o --interactive.

•  Ayuda. De cualquier -h o - -help se puede especificar para hacer que el programa de

salida de un mensaje de uso informativo.Aquí está el código necesario para implementar el procesamiento de línea de comandos:

443

el uso de () {echo "$ progname: uso: $ progname [-f archivo | -i] "retorno

}

# Opciones de línea de comandos proceso

= interactivos

Page 491: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 491/571

32 - Parámetros posicionales

filename =

mientras que [[-n $1 caso $ 1 de

]]; hacer

-f | --file) cambioarchivo = $ 1

-i | --interactive);;interactive = 1

-h | --help) ;;uso

*) ;;uso> & 2 salida 1

esaccambio

hecho

;;

Modo interactivo #

si [[-n $ interactivo]]; a continuación,mientras que la verdadera; hacer

leer -p "Introduzca el nombre de archivo de salida:"nombre de archivo si [[-e $ archivo]]; entonces

leer -p "'$ nombre' existe. Sobrescribir? [y / n / q]> caso $Responder en

Y | y) descanso

En primer lugar, añadimos una función de shell llamado uso para mostrar un mensaje cuandola opción de ayuda se invoca o una opción desconocida se intenta.

A continuación, empezamos el bucle de procesamiento. Este bucle continúa mientras elparámetro posicional $ 1 no está vacía. En la parte inferior del bucle, tenemos un comando de

desplazamiento para avanzar los parámetros posicionales para asegurar que el buclefinalmente terminará.

Dentro del bucle, tenemos una declaración de caso que examina el parámetro actual de

posición para ver si coincide con alguna de las opciones soportadas. Si se encuentra unparámetro con el apoyo, de actuar sobre él. Si no, se muestra el mensaje de uso y el guióntermina con un error.

El parámetro -f se maneja de una manera interesante. Cuando se detecta, que causa un cambioadicional que se produzca, lo que hace avanzar el parámetro posicional $ 1 a el argumento denombre de archivo suministrado a la opción -f.

A continuación añadimos el código para implementar el modo interactivo:

444

Page 492: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 492/571

Q | q) echo "Programa terminado."Salida ;;

*) Continuar ;;esac

elif [[-z $ archivo]]; luego continuarmás

roturafi

hechofi

write_html_page () {cat << - _EOF_<HTML>

<HEAD><TITLE> $ TÍTULO </TITLE>

</ HEAD><BODY>

<H1> $ TÍTULO </ H1>

<P> $ TIMESTAMP </ P>$ (Report_uptime)$ (Report_disk_space)$ (Report_home_space)

</ BODY></ HTML>

 _EOF_retorno

}

# Página html de salida

si [[-n $ archivo]]; entoncesUna aplicación más completa

Si la variable interactiva no está vacío, se inicia un bucle sin fin, que contiene el símbolo delcódigo de nombre de archivo y la posterior administración de archivos existente. Si ya existeel archivo de salida deseado, el usuario se le solicita sobrescribir, elija otro nombre de archivo,o salir del programa. Si el usuario opta por sobrescribir un archivo existente, una ruptura seejecuta para terminar el bucle. Observe cómo la declaración de caso sólo detecta si el usuarioopta por sobrescribir o dejar de fumar. Cualquier otra opción hace que el bucle de continuar ypide al usuario nuevo.

Con el fin de implementar la función de archivo de salida, primero debemos convertir elcódigo de la página-escritura existente en una función de shell, por razones que se aclararán

en un momento:

445

Page 493: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 493/571

32 - Parámetros posicionales

si toque $ archivo && [[-f $ archivo]]; entonceswrite_html_page> $ archivo

másecho "$ progname: No se puede escribir el archivo de salida 1$ Archivo '"> & 2

fimás

escribir la página htmlfi

#! / Bin / bash

# Sys_info_page: programa para la producción de una página de información

del sistema progname = $ (basename $ 0)TITLE = "Información del Sistema Para Reportar $ HOSTNAME"CURRENT_TIME = $ (date + "% x% r% Z")TIMESTAMP = "generó $ CURRENT_TIME, por $ USER"

report_uptime () {cat<< - _EOF_

<H2> Sistema Uptime </ h2><PRE> $ (tiempo de actividad) </ PRE>

 _EOF_retorno

El código que se encarga de la lógica de la opción -f aparece al final de la lista se muestra

arriba. En ella, se prueba la existencia de un nombre de archivo y, si se encuentra uno, serealiza una prueba para ver si el archivo es de hecho puede escribir. Para ello, se realiza untoque, seguido por una prueba para determinar si el archivo resultante es un archivo regular.

Estas dos pruebas se encargan de situaciones en las que una ruta de acceso no válido es deentrada (contacto fallará), y, si el archivo ya existe, que es un archivo normal.

Como podemos ver, la función write_html_page está llamada a llevar a cabo la generaciónreal de la página. Su salida se dirige ya sea a la salida estándar (si el nombre de archivovariable está vacía) o redirigido al archivo especificado.

Resumiendo

Con la incorporación de parámetros de posición, ahora podemos escribir scripts bastantefuncionales. Para tareas simples, repetitivas, parámetros posicionales permiten escribirfunciones de shell muy útiles que se pueden colocar en el archivo .bashrc del usuario.

Nuestro programa sys_info_page ha crecido en complejidad y sofisticación. Aquí está unalista completa, con los cambios más recientes destacan:

446

Page 494: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 494/571

 

Resumiendo

}

report_disk_space () {cat << - _EOF_<H2> La utilización de espacio en disco </ h2>

<PRE> $ (df -h) </ PRE> _EOF_retorno

report_home_space () {si [[$ (-u id) -eq 0]]; entonces cat << -

 _EOF_<H2> Inicio Utilización del Espacio (Todos losusuarios) </ h2> <PRE> $ (du -sh / home / *) </ PRE>

 _EOF_más

cat << - _EOF_<H2> Inicio Utilización del Espacio ($ USER) </ h2><PRE> $ (du -sh $ HOME) </ PRE>

 _EOF_firetorno

el uso de () {echo "$ progname: uso: SPROGNAME [-f archivo | -i]" retorno

}

write_html_page () {cat << - _EOF_<HTML>

<HEAD><TITLE> $ TÍTULO </ TITLE>

</ HEAD><BODY><H1> $ TÍTULO </ H1><P> $ TIMESTAMP </ P>$ (Report_uptime)$ (Report_disk_space)$ (Report_home_space)

</ BODY></ HTML>

 _EOF_retorno

# O ciones de línea de comandos roceso

447

Page 495: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 495/571

 

32 - Parámetrosposicionales

= interactivosfilename =

mientras que [[-n $ 1]]; hace

caso $ 1 -f | --file)

-i | --interactive) -h |

--help)

*)

cambioarchivo = $ 1;;interactive = 1;;usoSalida;;uso> & 2 salida 1;;

esac

cambiohecho

#  modo interactivo

si [[-n $ interactivo]]; a continuación,mientras que la verdadera;hacer

leer -p "Introduzca el nombre de archivo de salida:" nombrede archivo si [[-e $ archivo]]; entonces

leer -p "'$ nombre' existe. Sobrescribir? [y / n / q]> caso $Responder en

Y | y) descanso ;;Q | q) echo "Programa terminado."

Salida;;

*) Continuar;;

esacfi

hechofi

#  página html de salida

si [[-n $ archivo]]; entoncessi toque $ archivo && [[-f $ archivo]]; entonces write_html_page> $ archivomás

echo "$ progname: No se puede escribir el archivo '$ nombre'"> &2 exit 1 fi

más

448

Page 496: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 496/571

write_html_pagefi

Resumiendo

No hemos terminado todavía. Todavía hay más cosas que podemos hacer y las mejoras quepodemos hacer.

Lectura adicional•  El golpe de Hackers Wiki tiene un buen artículo sobre los parámetros posicionales:

http://wiki.bash-hackers.org/scripting/posparams  

•  El Manual de Referencia Bash tiene un artículo sobre los parámetros especiales,incluyendo $ * y $ @:

http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters 

•  Además de las técnicas discutidas en este capítulo, golpe incluye una orden internallamada getopts, que también se puede utilizar para los argumentos de línea decomandos de proceso. Se describe en la sección ÓRDENES INTERNAS DEL SHELLde la página de manual de bash y en The Bash Hackers Wiki:http://wiki.bash-hackers.org/howto/getopts tutorial 

449

Page 497: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 497/571

[Me @ linuxbox ~] $ for i in A B C D; hacer eco $ i; hecho LaBCD

33 - Control de flujo: Con Looping para

33  - Contro l de f lu jo: Con Loop ing para

En este capítulo final sobre el control de flujo, vamos a ver otra de las construcciones de buclesde la concha. El bucle for difiere del tiempo y hasta bucles en que proporciona un medio desecuencias de procesamiento durante un bucle. Esto resulta ser muy útil cuando se programa.De acuerdo con ello, el bucle for es una construcción muy popular en secuencias de comandosbash.

Un bucle for se implementa, como es natural, con la de mando. En las versiones modernas dela fiesta, para está disponible en dos formas.

por: Tradicional Forma Shell

El original de la sintaxis del comando es:

para variable [en palabras]; hacercomandos

hecho

Donde variable es el nombre de una variable que se incrementará durante la ejecución delbucle, palabras es una lista opcional de artículos que serán secuencialmente asignados a lavariable, y los comandos son los comandos que se van a ejecutar en cada iteración del bucle.

El comando es útil para la línea de comandos. Podemos demostrar fácilmente cómo funciona:

En este ejemplo, se da por una lista de cuatro palabras: "A", "B", "C" y "D". Con una lista decuatro palabras, el bucle se ejecuta cuatro veces. Cada vez que se ejecuta el bucle, una palabrase asigna a la variable i. Dentro del bucle, tenemos un comando echo que muestra el valor de ipara mostrar la asignación. Como con el tiempo y hasta bucles, la palabra clave hecho cierra elbucle.

450

Page 498: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 498/571

 

por: Tradicional FormaShell

La característica muy potente de cuenta es el número de formas interesantes que podemoscrear la lista de palabras. Por ejemplo, a través de la expansión de llaves:

[Me @ linuxbox ~] $ for i in {A..D}; hacer eco $ i; hechoLaBCD

o expansión de nombrede camino:

[Me @ linuxbox ~] $ for i in distros * .txt; hacer eco $ i; hechodistros por date.txt

distros-dates.txtdistros-clave-nombres.txtdistros-clave-vernums.txtdistros-nombres.txtdistros.txtdistros-vernums.txtdistros-versions.txt

o la sustitución decomandos:

#! / Bin / bash

# Más larga palabra: encontrar la cadena más larga de un archivo

mientras que [[-n $ 1]]; hacersi [[-r $ 1]]; entonces

max_word =max_len = 0para i en $ (cadenas $ 1); hacer len = $ (echo$ i | wc -c) si ((len> max_len)); entoncesmax_len = $ len max_word = $ i fihechoecho "$ 1: '$ max_word' ($ max_len caracteres)" fi

cambiohecho

451

Page 499: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 499/571

#! / Bin / bash

# Más larga word2: encontrar cadena más larga en un

archivo para i; hacersi [[-r $ i]]; entonces

max_word =max_len = 0para j en $ (cadenas $ i); hacer len = $ (echo$ j | wc -c) si ((len> max_len)); entoncesmax_len = $ len max_word = $ j fihechoecho "$ i: '$ max_word' ($ max_len caracteres)" fi

hecho

¿Por qué yo?

Usted puede haber notado que la variable i fue elegido para cada uno de los ejemplosanteriores de bucle. ¿Por qué? No hay ninguna razón específica de hecho, además dela tradición. La variable utilizada por cualquier variable puede ser válida, pero yo esel más común, seguido por j y k.

33 - Control de flujo: Con Looping para

En este ejemplo, se busca la cadena más larga se encuentra dentro de un archivo. Cuando seles da uno o más nombres de archivo en la línea de comandos, este programa utiliza elprograma de cadenas (que se incluye en el paquete binutils de GNU) para generar una lista delectura de texto "palabras" en cada archivo. El bucle for procesa cada palabra a su vez ydetermina si la palabra actual es el más largo encontrado hasta el momento. Cuando el bucletermina, aparece la palabra más larga.

Si la parte opcional en palabras del comando para se omite, por defecto es el procesamiento delos parámetros posicionales. Vamos a modificar nuestro guión de más larga palabra de

utilizar este método:

Como podemos ver, hemos cambiado el bucle más externo a utilizar en lugar de tiempo. Alomitir la lista de palabras en el para el mando, los parámetros posicionales se utilizan en sulugar. Dentro del bucle, las instancias anteriores de la variable i se han cambiado a la variable

 j. El uso de cambio también ha sido eliminado.

452

Page 500: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 500/571

La base de esta tradición viene del lenguaje de programación Fortran. En Fortran, lasvariables no declaradas que comienzan con las letras I, J, K, L y M se escribenautomáticamente como enteros, mientras que las variables que comienzan concualquier otra carta se escriben como reales (números con fracciones decimales). Estecomportamiento llevó a los programadores utilizar las variables I, J y K para lasvariables de bucle, ya que era menos trabajo para utilizarlas cuando se necesitaba unavariable temporal (como variables de bucle a menudo son).También llevó a la siguiente ocurrencia basada en Fortran:"Dios es real, a menos declarado entero."

#! / Bin / bash

# Simple_counter: demostración de estilo C de comando

por ((i = 0; i <5; i = i + 1)); hacer echo $ ihecho

por: Tradicional Forma Shell

por: Formulario C Idioma

Las versiones recientes de fiesta han añadido una segunda forma de la sintaxis de comandos,uno que se asemeja a la forma que se encuentra en el lenguaje de programación C. Muchosotros idiomas apoyan esta forma, además de:

para (( expressionl; expression2; expresión3)); hacer comandoshecho

donde expressionl, expresión2, y expresión3 son expresiones aritméticas y comandos son loscomandos que se deben realizar durante cada iteración del bucle.

En términos de comportamiento, esta forma es equivalente a la siguiente construcción:

(( expressionl)) while ((expresión2));hacer comandos

(( expresión3))hecho

expressionl se utiliza para inicializar condiciones para el bucle, expresión2 se utiliza paradeterminar cuando se termina el bucle, y expression3 se lleva a cabo al final de cada iteración

del bucle.Aquí es una aplicación típica:

453

Page 501: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 501/571

 

33 - Control de flujo: Con Looping para __________

Cuando se ejecuta, produce la siguiente salida:

[Me @ linuxbox ~] $ simple_counter 0 1234

En este ejemplo, expressionl inicializa la variable i con el valor de cero, expression2 permiteque el bucle para continuar siempre y cuando el valor de i se mantiene a menos de 5, yexpression3 incrementa el valor de i por uno cada vez que se repite el bucle.

La forma de lenguaje C para es útil en cualquier momento se necesita una secuencia numérica.

Vamos a ver varias aplicaciones para esto en los dos capítulos siguientes.

Resumiendo

Con nuestro conocimiento de la para el mando, ahora vamos a aplicar las mejoras finales anuestro script sys_info_page. En la actualidad, la función report_home_space se parece a esto:

report_home_space () {si [[$ (-u id) -eq 0]]; entonces cat << -

 _EOF_

<H2> Inicio Utilización del Espacio (Todos losusuarios) </ h2> <PRE> $ (du -sh / home / *) </ PRE> _EOF_

máscat << - _EOF_

<H2> Inicio Utilización del Espacio ($ USER) </ h2><PRE> $ (du -sh $ HOME) </ PRE>

 _EOF_firetorno

}

A continuación, vamos a reescribir a proporcionar más detalles para el directorio home decada usuario, e incluyen el número total de archivos y subdirectorios en cada uno:

report_home_space () {

454

Page 502: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 502/571

format = "% locales 8s% 10s% 10s \ n"locales i dir_list total_files total_dirs total_size nombre_usuario

si [[$ (-u id) -eq 0]]; entonces dir_list = / home / * nombre_usuario = "Todoslos usuarios"

másdir_list = $ HOMEnombre_usuario = $ USER

fi

echo "<h2> Inicio Utilización del Espacio ($ nombre_usuario) </ H2>"

for i in $ dir_list; hacer

total_files = $ ($ i encuentro -type f | wc -l)total_dirs = $ ($ i encuentro de tipo D | wc -l)total_size = $ (du -sh $ i | corté -f 1)

echo "<h3> $ i </ H3>" echo "<PRE>"printf "$ formato" "Dirs" "Archivos" "Tamaño"printf "$ formato" " ---------- "" ---------- "" --------- "printf "$ formato" $ total_dirs $ total_files $ total_size echo "</PRE>"

hechoretorno

}Resumiendo

Esta reescritura se aplica buena parte de lo que hemos aprendido hasta ahora. Todavía pruebapara el superusuario, pero en lugar de realizar el conjunto completo de acciones como partedel caso, establecemos algunas variables utilizadas más tarde en un bucle for. Hemos añadidovarias variables locales a la función y hecho uso de printf para dar formato a algunos de lasalida.

Lectura adicional

•  La Guía avanzada Bash-Scripting tiene un capítulo sobre bucles, con una variedad deejemplos que utilizan para:

http://tldp.org/LDP/abs/html/loops1.html  •  El Manual de Referencia Bash describe los comandos compuestos de bucle, enparticular para:http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs 

455

Page 503: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 503/571

[Me @ linuxbox ~] $ a = "foo" [me @linuxbox ~] $ echo "$ un_fichero"

34  - Cadenas y números

34 - Cadenas y números

Los programas de ordenador son todos acerca de cómo trabajar con los datos. En los capítulosanteriores, nos hemos centrado en el procesamiento de datos a nivel de archivo. Sin embargo,muchos problemas de programación tienen que ser resueltos usando las unidades máspequeñas de datos, tales como cadenas y números.En este capítulo, vamos a ver varias características de concha que se utilizan para manipular

cadenas y números. El shell proporciona una variedad de expansiones de parámetros querealizan operaciones de cadena. Además de la expansión aritmética (que hemos tratado en elcapítulo 7), hay un programa de línea de comandos común llamado aC, que realiza más altonivel de matemáticas.

Expansión Parámetro

A pesar de la expansión de parámetro se acercó en el capítulo 7, que no cubrimos en detalleporque la mayoría de las expansiones de los parámetros se utilizan en secuencias decomandos en lugar de en la línea de comandos. Ya hemos trabajado con algunas formas deexpansión de parámetros; por ejemplo, pagar las variables. El shell proporciona muchos más.

Parámetros básicosLa forma más simple de la expansión de parámetro se refleja en el uso ordinario de variables.Por ejemplo:$ A

cuando se expande, se convierte en lo que la variable a contiene. Parámetros simples tambiénpueden estar rodeadas por llaves:$ {A}

Esto no tiene ningún efecto sobre la expansión, pero es necesario si la variable se encuentra

 junto a otro texto, que puede confundir a la cáscara. En este ejemplo, se intenta crear unnombre de archivo añadiendo la cadena "_FILE" al contenido de la variable a.

456

Page 504: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 504/571

[Me @ linuxbox ~] $ echo "$ {a} _FILE"foo_file

[Me @ linuxbox ~] $[me @ linuxbox ~] $valor de sustitución[me @ linuxbox ~] $

foo =echo $ {foo: - "valor de sustitución si unset"}si echo unset $ foo

[Me @ linuxbox[Me @ linuxboxbar[Me @ linuxboxbar

~] $ Foo = bar

~] $ Echo $ {foo: - "valor de sustitución si unset"} ~] $ echo

$ foo

Expansión Parámetro

Si llevamos a cabo esta secuencia, el resultado será nada, porque el shell intentará expandiruna variable llamada un_fichero en lugar de una. Este problema puede ser resuelto mediantela adición de llaves:

También hemos visto que los parámetros posicionales mayores de 9 se puede acceder por los

alrededores el número de aparatos de ortodoncia. Por ejemplo, para acceder al parámetro deposición undécima, podemos hacer esto:

$ {11}

Expansiones para gestionar variables vacíasVarias expansiones de parámetros se refieren a las variables inexistentes y vacíos. Estasexpansiones son muy útiles para el manejo de desaparecidos parámetros posicionales y laasignación de valores por defecto para los parámetros.

$ {Parámetro: -palabra}

Si el parámetro no está definido (es decir, no existe) o está vacío, los resultados de estaexpansión en el valor de la palabra. Si el parámetro no está vacía, los resultados de expansiónen el valor del parámetro.

$ {Parámetro: = palabra}

Si el parámetro no está definido o está vacío, esta expansión se traduce en el valor de lapalabra. Además, el valor de la palabra se asigna al parámetro. Si el parámetro no está vacía,los resultados de expansión en el valor del parámetro.

 

[Me @ linuxbox ~] $ foo =[Me @ linuxbox ~] $ echo $ {foo: = "valor por defecto si unset"}

457

Page 505: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 505/571

 

34 - cadenas y números

valor predeterminado si unset [me @ linuxbox ~] $ echo $ foo valorpredeterminado si unset [me @ linuxbox ~] $ foo = bar[Me @ linuxbox ~] $ echo $ {foo: = "valor por defecto si unset"}bar[Me @ linuxbox ~] $ echo $ foo bar

Nota: Los parámetros posicionales y otros especiales no se pueden asignar deesta manera.

$ {Parámetro:? Palabra}

Si el parámetro no está definido o está vacío, esta expansión hace que la secuencia decomandos para salir con un error, y el contenido de la palabra se envía al error estándar. Si elparámetro no está vacía, los resultados de expansión en el valor del parámetro.

[Me @ linuxbox ~] $ foo =[Me @ linuxbox ~] $ echo $ {foo:? "Parámetro está vacío"}bash: foo: parámetro está vacío [me @ linuxbox ~] $ echo $?1[Me @ linuxbox ~] $ foo = bar[Me @ linuxbox ~] $ echo $ {foo:? "Parámetro está vacío"}bar[Me @ linuxbox ~] $ echo $?0

$ {Parámetro: + palabra}

Si el parámetro no está definido o está vacío, la expansión se traduce en nada. Si el parámetrono está vacía, el valor de la palabra se sustituye por parámetro; Sin embargo, no se cambia elvalor del parámetro.

[Me @ linuxbox ~] $ foo =[Me @ linuxbox ~] $ echo $ {foo: + "valor de sustitución si se establece"}

[Me @ linuxbox ~] $ foo = bar[Me @ linuxbox ~] $ echo $ {foo: + "valor de sustitución si se establece"}valor de sustitución si se establece

458

Page 506: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 506/571

[Me @ linuxbox ~] $ echo $ {! BASH *}BASH BASH_ARGC BASH_ARGV BASH_COMMAND bash_completionBASH_COMPLETION_DIR BASH_LINENO BASH_SOURCEBASH_SUBSHELL BASH_VERSINFO BASH_VERSION

[Me @ linuxbox ~] $ foo = "Esta cadena es larga."[Me @ linuxbox ~] $ echo "" $ foo 'es $ {# foo} caracteres de largo. ""Esta cadena es larga. ' es de 20 caracteres de longitud.

[Me @ linuxbox ~] $ foo = "Esta cadena es larga."[Me @ linuxbox ~] $ echo $ {foo: 5} cadena es larga.

Expansión Parámetro

Las expansiones que devuelven nombres de variableLa cáscara tiene la capacidad de devolver los nombres de variables. Esto se utiliza en algunassituaciones bastante exóticos.$ {! prefijo *}

$ {! prefijo @}

Esta expansión devuelve los nombres de las variables existentes con nombres que comienzancon el prefijo. De acuerdo con la documentación bash, ambas formas de la expansión realizanidénticamente. Aquí, enumeramos todas las variables en el medio ambiente con nombres quecomienzan con bash:

Operaciones de CuerdaHay un gran conjunto de expansiones que pueden ser utilizados para operar en cadenas.Muchas de estas expansiones son especialmente adecuados para las operaciones en las rutasde acceso.$ {Parámetro} #

se expande en la longitud de la cadena contenida por el parámetro. Normalmente, elparámetro es una cadena; sin embargo, si el parámetro es o bien @ o *, entonces los resultados

de expansión en el número de parámetros posicionales.

$ {Parámetro: offset}$ {Parámetro: desplazamiento: longitud}

Estas expansiones se usan para extraer una porción de la cadena contenida en el parámetro. Laextracción comienza en caracteres desplazamiento desde el principio de la cadena y continúahasta el final de la cadena, a menos que se especifica la longitud.

459

Page 507: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 507/571

[Me @ linuxbox ~] $ echo $ {foo: 5: 6} decadena

[Me @ linuxbox ~] $ foo = file.txt.zip[Me @ linuxbox ~] $ echo $ {foo%. *}Archivo.txt[Me @ linuxbox ~] $ echo $ {foo %%. *}

34 - cadenas y números

Si el valor de desplazamiento es negativo, se considera que significa que comienza desde elfinal de la cadena en lugar de al principio. Tenga en cuenta que los valores negativos deben irprecedidas de un espacio para evitar la confusión con el $ {parámetro: - palabra} expansión.longitud, si está presente, no debe ser menor que cero.

Si el parámetro es @, el resultado de la expansión es de longitud parámetros posicionales,empezando en el desplazamiento.

$ {Parámetro} patrón #

$ {Parámetro ## patrón}

Estas expansiones eliminar una porción principal de la cadena contenida en el parámetrodefinido por el patrón. patrón es un patrón de comodines como los utilizados en la expansiónde nombre de ruta. La diferencia en las dos formas es que la forma # quita la más corta,mientras que la forma ## elimina la coincidencia más larga.

$ {Parámetro% patrón}

$ {Parámetro %% patrón}

Estas expansiones son los mismos como el # ## y expansiones anteriores, excepto queeliminan el texto desde el extremo de la cadena contenida en el parámetro en lugar de desde el

principio.

460

[Me @ linuxbox ~] $ foo = 'Este cadena es larga ".[Me @ linuxbox ~] $ eco $ {Foo : -5}de largo.[Me @ linuxbox ~] $ eco « H o

la : -5: 2}

he aquí

[Me @ linuxbox ~] $ foo = file.txt.zip[Me @ linuxbox ~] $ echo $ {foo # *.}txt.zip[Me @ linuxbox ~] $ echo $ {foo ## *.}cremallera

Page 508: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 508/571

expediente

[Me @ linuxbox

[Me @ linuxbox jpg.jpg[Me @ linuxbox

 jpg-jpg[Me @ linuxbox

 jpg-JPG[Me @ linuxbox

 Jpg.jpg

~] $ Foo = jpg.jpg

~] $ Echo $ {foo / JPG / jpg}

~] $ Echo $ {foo // JPG / jpg}

~] $ Echo $ {foo / # JPG / jpg}

~] $ Echo $ {foo /% JPG / jpg}#! / Bin / bash

# Más larga word3: encontrar cadena más larga en un

archivo para i; hacersi [[-r $ i]]; entonces

max_word =max_len =para j en $ (cadenas $ i); hacer len

= $ {# j}if ((len> max_len)); entonces

461

Expansión Parámetro$ {Parámetro / patrón / cadena}

$ {Parámetro // patrón / cadena}

$ {Parámetro / # patrón / cadena}$ {Parámetro / patrón% / cadena}

Esta expansión lleva a cabo una búsqueda y reemplazo en el contenido del parámetro. Si eltexto se encuentra el modelo a juego de comodines, se reemplaza con el contenido de lacadena. En la forma normal, sólo se reemplaza la primera ocurrencia del patrón. En la //forma, se reemplazan todas las ocurrencias. El / # forma requiere que la coincidencia seproduce al principio de la cadena, y la forma /% requiere el partido que se produzca al finalde la cadena. / Cadena puede ser omitido, lo que hace que el texto que coincide con el patrónque desea eliminar.

Expansión de parámetro es una buena cosa para saber. Las expansiones de manipulación decadenas se pueden utilizar como sustitutos de otros comandos comunes como la sed y cortar.

Expansiones de mejorar la eficiencia de las secuencias de comandos al eliminar el uso deprogramas externos. Como ejemplo, vamos a modificar el programa de más larga palabra sediscutió en el capítulo anterior de utilizar la expansión de parámetro $ {#} j en lugar de lasustitución de comandos $ (echo $ j | wc -c) y su subcapa resultante, al igual que :

Page 509: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 509/571

 

La versión original de la secuencia de comandos toma 3,618 segundos para escanear el archivode texto, mientras que la nueva versión, con la expansión de parámetro, toma sólo 0,06segundos, una mejora muy significativa.

Caso ConversiónLas versiones recientes de fiesta tienen soporte para la conversión superior / minúsculas delas cadenas. Bash tiene cuatro expansiones de parámetros y dos opciones del comando declareque la apoyen.

Entonces, ¿qué es la conversión caso bueno para? Aparte del valor estético obvio, tiene unpapel importante en la programación. Consideremos el caso de una base de datos de consulta.Imagine que un usuario ha entrado en una cadena en un campo de entrada de datos quequeremos buscar en una base de datos. Es posible que el usuario introduzca el valor en letrasmayúsculas o minúsculas, o una combinación de ambos. Desde luego, no queremos poblarnuestra base de datos con toda posible permutación de grafías mayúsculas y minúsculas. Quéhacer?Un enfoque común a este problema es normalizar la entrada del usuario. Es decir, convertirloen un formulario estandarizado antes de intentar la base de datos de consulta. Podemos haceresto por con- 462

34 - cadenas y números

hecho fi

max_len = $ lenmax_word = $ j

fi

cambiohecho

eco "$ Yo: '$ Max_word' ($ max_len caracteres) "

A continuación, vamos a comparar la eficiencia de las dos versiones con el comando detiempo:

[Me @ linuxbox ~] $tiempolistadir-USR-bin.txt:

caracteres)

de más larga word2 listadir-USR-bin.txtscrollkeeper-conseguir-contenido-lista ampliada '

(38

0m3.618s reales0m1.544s usuario0m1.768s sys

[Me @ linuxbox ~] $tiempolistadir-USR-bin.txt:

caracteres)de más larga word3 listadir-USR-bin.txtscrollkeeper-conseguir-contenido-lista ampliada ' (38

verdadero usuario 0m0.060s0m0.056s sys 0m0.008s

Page 510: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 510/571

#! / Bin / bash

# Ul-declarar: demostrar la conversión de caso a través de declarar

declarar -u superior declarar -l menor

si [[$ 1]]; entonces superiores = "$ 1" = más bajos "$ 1" echo $ echo $superior inferior fi

[Me @ linuxbox ~] $ ul-declaro aBcAbecedarioabecedario

 _____________________________________________________________ Expansión Parámetro

vertir todos los personajes de la entrada del usuario ya sea inferior o mayúsculas y asegurarsede que las entradas de base de datos se normalizaron la misma manera.

El comando DECLARE puede usarse para normalizar las cuerdas a cualquiera de mayúsculaso minúsculas. Usando declarar, podemos forzar una variable para contener siempre elformato deseado sin importar lo que se le asigna a la misma:

En el guión anterior, declaramos que utilizamos para crear dos variables, superior e inferior.Asignamos el valor del argumento de la primera línea de comandos (parámetro de posición 1)a cada una de las variables y luego mostrarlos en la pantalla:

Como podemos ver, el argumento de línea de comandos ("ABC") se ha

normalizado. Hay cuatro expansiones de parámetros que realizan la conversión

superior / minúsculas:Tabla 34-1: Caso de conversión de parámetros Expansiones

Formato Resultado

$ {Parámetro,,} Expandir el valor de parámetro en minúsculas.$ {Parámetro,} Expandir el valor del parámetro cambiando sólo el primer

carácter a minúsculas.$ {} ParameterAA Expandir el valor de parámetro en mayúsculas.

$ {} ParameterA Expandir el valor del parámetro cambiando sólo el primero

463

Page 511: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 511/571

 

34 - cadenas y números

carácter en mayúsculas (mayúsculas).

Aquí es un script que demuestra estas expansiones:

#! / Bin /bash# Ul-param - demostrar conversión caso a través de la expansión de parámetro

si [[$ 1]]; entoncesecho $ {1} ,,

{echo $ 1,} echo $ {1AA}echo $ {1A} fi

Aquí está la secuencia decomandos en la acción:

[Me @ linuxbox ~] $ ul-param aBcabecedarioaBcAbecedarioABc

Una vez más, en que procesamos el primer argumento de la línea de comandos y la salida de

las cuatro variaciones con el apoyo de las expansiones de los parámetros. Aunque este scriptusa el primer parámetro posicional, parámetro mi ser cualquier cadena, una variable oexpresión de cadena.

Evaluación aritmética y la expansión

Nos fijamos en la expansión aritmética en el capítulo 7. Se utiliza para realizar diversasoperaciones aritméticas con enteros. Su forma básica es:

$ ((Expresión))

donde la expresión es una expresión aritmética válida.

Esto se relaciona con el comando compuesto (()) que se utiliza para la evaluación de laaritmética (pruebas de la verdad) que encontramos en el capítulo 27.

En los capítulos anteriores, hemos visto algunos de los tipos comunes de expresiones yoperadores. Aquí, vamos a ver una lista más completa.

464

Page 512: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 512/571

Evaluación aritmética y la expansión

Bases NúmeroDe vuelta en el capítulo 9, nos dieron un vistazo a los números octales (base 8) y hexadecimal(base 16). En expresiones aritméticas, el shell soporta constantes enteras en cualquier base.

En los ejemplos anteriores, imprimimos el valor de la FF hexadecimal número (el número dedos dígitos más grande) y el mayor de ocho dígitos binarios (base 2) números.

Operadores unariosHay dos operadores unarios, + y -, que se utilizan para indicar si un número es positivo onegativo, respectivamente. Por ejemplo, -5.

 Aritmética simpleLos operadores aritméticos comunes se listan en la siguiente tabla:

Tabla 34-2: Especificación Diferentes Bases Número

Notación Descripciónnúmero 

De forma predeterminada, los números sin ningún tipo de notaciónse tratan como decimales (base 10) números enteros.

Onumber   En expresiones aritméticas, números con un cero a la izquierda seconsideran octal.

Oxnumber   La notación hexadecimal

# Número de base  número es en la base de

Algunos ejemplos:

[Me @ linuxbox ~255[Me @ linuxbox ~255

] $ Echo $ ((0xff))

] Echo $ $ ((2 # 11111111))

Tabla 34-3: Operadores aritméticos

Operador Descripción+ Adición

- Sustracción

465

Page 513: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 513/571

 

34 - cadenas y números

* Multiplicación

/ La división entera** Exponenciación

% Módulo (resto)

La mayoría de estos son fáciles de entender, pero la división entera y módulo requieren másdiscusión.

Desde la aritmética de la cáscara sólo opera en números enteros, los resultados de la divisiónson siempre números enteros:

[Me @ linuxbox ~] $ echo $ ((5/2))

2

Esto hace que la determinación de un resto en una operación de división másimportante:

[Me @ linuxbox ~] $ echo $ ((5% 2)) 1

Mediante el uso de los operadores de división y de módulo, podemos determinar que 5dividido por 2 resultados de 2, con un resto de 1.

Calculando el resto es útil en bucles. Permite una operación a realizar en los intervalosespecificados durante la ejecución del bucle. En el siguiente ejemplo, se muestra una línea denúmeros, destacando cada múltiplo de 5:

#! / Bin / bash

# Modulo: demostrar el operador de módulo

por ((i = 0; i <= 20; i = i + 1)); hacer resto = $ ((i% 5)) if((resto == 0)); entonces printf "<% d>" $ i

másprintf "% d" $ i fi

hechoprintf "\ n"

466

Page 514: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 514/571

[Me @ linuxbox ~] $ módulo

<0> 1 2 3 4 <5> 6 7 8 9 <10> 11 12 13 14 <15> 16 17 18 19 <20>

[Me @ linuxbox ~] $[me @ linuxbox ~] $

[Me @ linuxbox ~] $es cierto. [Me @linuxbox ~] $ 5

foo =

echo $ foo

if ((foo = 5)); a continuación, echo

echo $ foo

"Es cierto."; fi

Evaluación aritmética y la expansión

Cuando se ejecuta, los resultados se ven así: Asignación

A pesar de que sus usos pueden no ser aparentes inmediatamente, expresiones aritméticaspueden realizar la asignación. Hemos realizado de asignación de muchas veces, aunque en uncontexto diferente. Cada vez que damos una variable un valor, estamos llevando a cabo la

asignación. También podemos hacerlo dentro de las expresiones aritméticas:En el ejemplo anterior, primero asignamos un valor vacío a la variable foo y verificamos que síes vacío. A continuación, realizamos un si con el comando compuesto ((foo = 5)). Este procesohace dos cosas interesantes: 1) se asigna el valor de 5 a la variable foo, y 2) se evalúa comocierto porque foo se le asignó un valor distinto de cero.

Nota: Es importante recordar el significado exacto de los = en la expresión anterior. Unsolo = realiza la asignación. foo = 5 dice "hacer foo igual a 5", mientras == evalúa laequivalencia. foo == 5 dice "hace foo igual a 5?" Esto puede ser muy confuso, porque elcomando de prueba acepta un solo = equivalencia de cadena. Esta es otra razón parautilizar los modernos [[]] y (()) comandos más compuestos en lugar de la prueba.

Además de los =, la cáscara también proporciona anotaciones que llevan a cabo algunas tareasmuy útiles:

Tabla 34-4: Operadores de Asignación

Notación Descripción

467

Page 515: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 515/571

34 - cadenas y números

 parámetro = valor   Asignación simple. Asigna el valor de parámetro. parámetro + = Valor Adición. Equivalente al parámetro = parámetro + valor.

 parámetro - = valor   Resta. Equivalente al parámetro = parámetro - valor.

* parámetro = valor   Multiplicación. Equivalente al parámetro = valor delparámetro *.

 parámetro / valor = 

La división entera. Equivalente al parámetro = parámetro/ valor. parámetro% = valor   Modulo. Equivalente al parámetro = valor del

parámetro%.

 parámetro++ Variable post-incremento. Equivalente a = parámetroparámetro + 1 (sin embargo, véase la discusión más

 parámetro-Variable de decremento posterior. Equivalente alparámetro = parámetro - 1.

++ Parámetro Variable de incremento previo. Equivalente al parámetro =parámetro + 1.

--parameter  Variable de decremento previo. Equivalente al parámetro= parámetro - 1.

[Me @ linuxbox ~] $ foo = 1 [me @linuxbox ~] $ echo $ ((foo ++)) 1[Me @ linuxbox ~] $ echo $ foo

Estos operadores de asignación proporcionan un atajo conveniente para muchas tareasaritméticas comunes. De especial interés son el incremento (++) y decremento - los operarios,que aumentan o disminuyen el valor de sus parámetros por uno (). Este estilo de notación setoma del lenguaje de programación C y ha sido incorporada por varios otros lenguajes deprogramación, incluyendo bash.

Los operadores pueden aparecer ya sea en la parte delantera de un parámetro o al final.Mientras tanto, ya sea aumentar o disminuir el parámetro a una, las dos colocaciones tienen

una sutil diferencia. Si está colocado en la parte delantera del parámetro, el parámetro seincrementa (o disminuye) antes de que se devuelva el parámetro. Si se coloca después, se llevaa cabo la operación después se devuelve el parámetro. Esto es bastante extraño, pero es elcomportamiento previsto. Aquí está una demostración:

468

Page 516: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 516/571

 

2

Evaluación aritmética y la expansión

Si asignamos el valor de uno a la variable foo y luego incrementamos con el operador ++colocado después del nombre de parámetro, foo se devuelve con el valor de uno. Sin embargo,si nos fijamos en el valor de la variable por segunda vez, vemos el valor incrementado. Sicolocamos el operador ++ delante del parámetro, obtenemos el comportamiento másesperado:

[Me @ linuxbox ~] $ foo = 1 [me @linuxbox ~] $ echo $ ((++ foo))2[Me @ linuxbox ~] $ echo $ foo2

Para la mayoría de las aplicaciones de concha, anteponiendo el operador será el más útil.Los operadores ++ y - se utilizan a menudo en combinación con bucles. Vamos a haceralgunas mejoras en nuestro script de módulo para apretarlo un poco:

#! / Bin / bash

# Modulo2: demostrar que el operador de módulo

por ((i = 0; i <= 20; ++ i)); hacer si (((i% 5) == 0));entonces printf "<% d>" $ i

más

printf "% d" $ i fihechoprintf "\ n"

Operaciones de bitsUna clase de operadores manipula los números de una manera inusual. Estos operadorestrabajan en el nivel de bit. Se utilizan para ciertos tipos de tareas de bajo nivel, a menudo conel establecimiento o la lectura de bits banderas.

Tabla 34-5: Operadores Bit

Operador Descripción~ Negación bit a bit. Negar todos los bits de un número.

469

Page 517: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 517/571

34 - cadenas y números<< Mayúsculas izquierda en modo bit. Shift todos los bits en un

número a la iz uierda.>> Desplazamiento derecha en modo bit. Shift todos los bits en un

número a la derecha.Y AND bit a bit. Lleve a cabo una operación y en todos los bits en dos

números.

| OR bit a bit. Realizar una operación OR en todos los bits en dos números.

LaBitwise XOR. Realizar una operación O exclusiva sobre todos losbits en dos números.

[Me @ linuxbox ~] $ por ((i = 0; i <8; ++ i)); hacer echo $ ((1 << i)); hecho1248163264

128Tenga en cuenta que también hay operadores de asignación correspondiente (por ejemplo, <<=) para todos, pero la negación bit a bit.

Aquí vamos a demostrar la producción de una lista de potencias de 2, usando el operador dedesplazamiento a izquierda en modo bit:

LógicaComo descubrimos en el capítulo 27, el (()) comando compuesto es compatible con unavariedad de operadores de comparación. Hay unos pocos más que se puede utilizar para

evaluar la lógica. Aquí está la lista completa:Tabla 34-6: Operadores de comparación

Operador Descripción<= Menor o igual a

> = Mayor que o igual a

< Menos que

> Más que

470

Page 518: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 518/571

Evaluación aritmética y la expansión

== Igual a

! = No es igual a

&& Y lógico

Illinois OR lógicoexpr1? expr2: Expr3

Comparación (ternario). Si exprl expresión se evalúa a ser(aritmética verdadera) entonces expr2-cero no, otra cosaexpr3.

[Me @ linuxbox ~] $ if ((1)); then echo "verdadera"; else echo "false"; fiverdadero[Me @ linuxbox ~] $ if ((0)); then echo "verdadera"; else echo "false"; fi

falso

[Me @ linuxbox ~] $ a = 0 [me @ linuxbox~] $ ((a <1 ++ un: - a)) [me @ linuxbox ~] $echo $ a 1[Me @ linuxbox ~] $ ((a <1 ++ un: - a))[Me @ linuxbox ~] $ echo $ a 0

Cuando se utiliza para operaciones lógicas, expresiones siguen las reglas de la lógicaaritmética; es decir, expresiones que evalúan como cero se consideran falso, mientras que lasexpresiones no nulos se consideran verdadera. El comando compuesto (()) los mapas de los

resultados en los códigos normales de salida de la shell:

El más extraño de los operadores lógicos es el operador ternario. Este operador (el cual es elmodelo de la una en el lenguaje de programación C) lleva a cabo una prueba lógicaindependiente. Puede ser utilizado como una especie de if / then / else. Actúa en tresexpresiones aritméticas (cadenas no funcionará), y si la primera expresión es verdadera (odistinto de cero) se lleva a cabo la segunda expresión. De lo contrario, se realiza la terceraexpresión. Podemos intentar esto en la línea de comandos:

Aquí vemos un operador ternario en la acción. Este ejemplo implementa una palanca. Cada

vez que el operador se lleva a cabo, el valor de la variable a interruptores de cero a uno oviceversa.

Tenga en cuenta que la realización de la asignación dentro de las expresiones no es sencillo.

471

Page 519: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 519/571

 

34 - cadenas y números ____________________

Cuando intento, golpe declarará un error:

[Me @ linuxbox ~] $ a = 0 [me @ linuxbox ~]$ ((a <1 a + = 1:? A- = 1))bash: ((: a <1 a + = 1: a- = 1: intento de cesión a (token error no variable es "- = 1")

Este problema puede ser mitigado por que rodea la expresión de asignación con paréntesis:

[Me @ linuxbox ~] $ ((a <1? (A + = 1) :( a- = 1)))

A continuación, vemos un ejemplo más completo de la utilización de operadores aritméticosen un guión que produce una simple tabla de números:

#! / Bin / bash

# Arith-loop: script para demostrar operadores aritméticos

terminado = 0a = 0printf "un \ ta ** 2 \ ta ** 3 \ n" printf "= \ t ==== \ t ==== \ n"

hasta que ((terminado)); hacer b = $ ((a ** 2)) c = $ ((a ** 3))

printf "% d \ t% d \ t% d \ n" $ a $ b $ c ((a <10 ++ a:? (terminado =1)))hecho

En este script, implementamos un bucle hasta que la base del valor de la variable de acabado.Inicialmente, la variable se pone a cero (falso aritmética) y continuamos el bucle hasta que seconvierte en no-cero. Dentro del bucle, se calcula el cuadrado y el cubo de la variable decontador a. Al final del bucle, se evalúa el valor de la variable de contador. Si es menos de 10

(el número máximo de iteraciones), se incrementa en uno, de lo contrario la variableterminado se le da el valor de uno, haciendo que terminó aritméticamente verdadero,finalizando de este modo el bucle. Ejecución del script da este resultado:

472

Page 520: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 520/571

[Me @ linuxbox ~] $ arith bucleun A ** 2 a ** 3

0 0 01 1 12 4 83 9 274 16 645 25 1256 36 2167 49 3438 64 5129 81 72910 100 1000

/ * Una muy simple script bc * / 2 + 2

Evaluación aritmética y la expansiónbc - Una precisión arbitraria Calculadora Idioma

Hemos visto cómo la cáscara puede manejar todo tipo de aritmética de enteros, pero lo que sitenemos que realizar más alto de matemáticas o incluso sólo tiene que utilizar los números de

punto flotante? La respuesta es, no podemos. Por lo menos no directamente con la cáscara.Para ello, tenemos que utilizar un programa externo. Existen varios enfoques que podemostomar. Incorporación de los programas de Perl o AWK es una posible solución, pero pordesgracia, fuera del alcance de este libro.

Otro enfoque es usar un programa especializado calculadora. Uno de estos programas seencuentran en la mayoría de los sistemas Linux se llama bc.

El programa bc lee un archivo escrito en su propio lenguaje similar a C y la ejecuta. Un scriptbc puede ser un archivo separado o se puede leer de la entrada estándar. El lenguaje bcsoporta un buen número de características que incluyen variables, bucles y funcionesdefinidas por el programador. No vamos a cubrir en su totalidad antes de Cristo aquí, sólo losuficiente para darte una idea. bc está bien documentado por su página de manual.

Vamos a empezar con un ejemplo sencillo. Vamos a escribir un guión bc añadir 2 más 2:La primera línea de la secuencia de comandos es un comentario. bc utiliza la misma sintaxis

para comentarios como el lenguaje de programación C. Comentarios, que pueden abarcarvarias líneas, comienzan con / * y terminan con * /.

473

Page 521: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 521/571

 

34 - cadenas y números _______________________________________

Usando bcSi ahorramos el guión bc anteriormente como foo.bc, podemosejecutar de esta manera:

[Me @ linuxbox ~] $ bc bc foo.bc 06/01/94Derechos de autor 1991-1994, 1997, 1998, 2000, 2004, 2006 Free SoftwareFoundation, Inc.Este es software libre con ABSOLUTAMENTE NINGUNA GARANTÍA.Para más detalles escriba 'garantía'.4

Si miramos con atención, podemos ver el resultado en la parte inferior, después del mensajede los derechos de autor. Este mensaje se puede suprimir con la opción -q (tranquilo).

bc también se puede utilizar de forma interactiva:

[Me @ linuxbox ~] $ bc -q 2 +2 4dejar de

Al utilizar bc interactiva, simplemente tecleamos los cálculos que queremos realizar, y semuestran inmediatamente los resultados. El comando bc dejar de fumar termina la sesióninteractiva.

También es posible pasar un guión a través de la entrada estándar bc:

[Me @ linuxbox ~] $ bc <foo.bc 4

La capacidad de tomar la entrada estándar significa que podemos utilizar aquí losdocumentos, aquí, cuerdas y tubos para pasar los scripts. Este es un ejemplo de cadena aquí:

[Me @ linuxbox ~] $ bc <<< "2 + 2" 4

474

Page 522: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 522/571

 

bc - Una precisión arbitraria Calculadora Idioma

Un script de ejemploComo un ejemplo del mundo real, vamos a construir un script que realiza un cálculo común,los pagos mensuales del préstamo. En la secuencia de comandos a continuación, se utiliza un

documento aquí para pasar un script para bc:

#! / Bin / bash

# Préstamo-calc: script para calcular los pagos mensuales del préstamo

Progname = $ (basename $ 0)

el uso de () {cat << - EOF

De uso: $ progname MESES principal interés Dónde:

Principal es la cantidad del préstamo.El interés es el APR como un número (7% = 0,07).Meses es la duración del plazo del préstamo.EOF

}

si (($ # = 3)!); luego salga uso 1 fi

director = $ 1interés = $ 2meses = $ 3

bc << - EOF

escala = 10 $ i = interés / 12 p = $ = $ principal n mesesa = p * ((i * ((1 + i) a)) / (((1 + i) a) - 1)) imprimir una, "\ n"

EOF

Cuando se ejecuta, los resultados se venasí:

[Me @ linuxbox ~] $ préstamo Calc-135000 0.0775 180

475

Page 523: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 523/571

1,270.722249000034 - cadenas y números

En este ejemplo se calcula el pago mensual de un préstamo de $ 135.000 a 7,75% TAE durante180 meses (15 años). Nótese la precisión de la respuesta. Esto se determina por el valor dado ala variable especial escala en la secuencia de comandos bc. Una descripción completa del

lenguaje de scripting bc es proporcionado por la página man bc. Mientras que su notaciónmatemática es ligeramente diferente a la de la concha (bc se asemeja más a C), la mayor partede ella resultará muy familiar, con base en lo que hemos aprendido hasta ahora.

Resumiendo

En este capítulo, hemos aprendido acerca de muchas de las pequeñas cosas que pueden serutilizados para obtener el "verdadero trabajo" realizado en los scripts. A medida que nuestraexperiencia con scripting crece, la capacidad de manipular eficazmente cadenas y números leserá muy valiosa. Nuestra escritura de préstamo-calc demuestra que incluso los guionessimples se pueden crear para hacer algunas cosas realmente útiles.

Crédito extra

Mientras que la funcionalidad básica de la escritura de préstamo-Calc está en su lugar, elguión está muy lejos de ser completa. Para el crédito adicional, trate de mejorar la escritura depréstamo-calc con las siguientes características:

•  Verificación completa de los argumentos de la línea de comandos

•  Una opción de línea de comandos para implementar un modo "interactivo" que lepedirá al usuario que introduzca el director, tasa de interés y plazo del préstamo.

•  Una mejor formato para la salida.

Lectura adicional•  El golpe de Hackers Wiki tiene una buena discusión sobre la expansión de parámetro:

http://wiki.bash-hackers.org/syntax/pe  

•  El Manual de Referencia Bash cubre esto, también:http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expan- sión 

•  La Wikipedia tiene un buen artículo que describe operaciones de bits:http://en.wikipedia.org/wiki/Bit operación 

•  y un artículo sobre las operaciones ternarias:http://en.wikipedia.org/wiki/Ternary

operación 

476

Page 524: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 524/571

 _______________________________________________________________ Lecturaadicional

• así como una descripción de la fórmula para el cálculo de los pagos de préstamos

utilizados en nuestro script préstamo-calc:calculadora http://en.wikipedia.org/wiki/Amortization 

477

Page 525: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 525/571

35 - Matrices

35  - Matrices

En el último capítulo, nos fijamos en cómo la cáscara puede manipular cadenas y números.Los tipos de datos que hemos visto hasta ahora son conocidos en los círculos informáticoscomo variables escalares; es decir, las variables que contienen un solo valor.

En este capítulo, vamos a ver otro tipo de estructura de datos llamada una matriz, quecontiene varios valores. Las matrices son una característica de casi todos los lenguajes de

programación. La cáscara de los apoya, también, aunque de manera bastante limitada. Aunasí, puede ser muy útil para resolver problemas de programación.

¿Qué son las matrices?

Los arrays son variables que tienen más de un valor a la vez. Las matrices están organizadoscomo una mesa. Vamos a considerar una hoja de cálculo como un ejemplo. Una hoja decálculo actúa como una matriz bidimensional. Tiene ambas filas y columnas, y una celdaindividual en la hoja de cálculo puede estar ubicado de acuerdo a su dirección de fila ycolumna. Una matriz se comporta de la misma manera. Una matriz tiene células, que sellaman elementos, y cada elemento contiene datos. Se accede a un elemento de matrizindividual utilizando una dirección llamada un índice o subíndice.

La mayoría de los lenguajes de programación soportan matrices multidimensionales. Unahoja de cálculo es un ejemplo de una matriz multidimensional con dos dimensiones, anchuray altura. Muchos lenguajes soportan matrices con un número arbitrario de dimensiones,aunque los arreglos de dos y tres dimensiones son, probablemente, el más comúnmenteutilizado.

Arrays en bash se limitan a una sola dimensión. Podemos pensar en ellos como una hoja decálculo con una sola columna. Incluso con esta limitación, hay muchas aplicaciones para ellos.El soporte para matrices apareció por primera vez en la versión de bash 2. El programaoriginal shell de Unix, sh, no apoyó las matrices en absoluto.

Creación de un arrayVariables de matriz se nombran igual que otras variables bash, y se crean automáticamentecuando se accede a ellos. He aquí un ejemplo:

478

Page 526: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 526/571

[Me @ linuxbox ~] $ a [1] = foo [me @linuxbox ~] echo $ {$ a [1]} foo

[Me @ linuxbox ~] declaro $ -a un

[Me @ linuxbox ~] $ días = (Dom Lun Mar Mié Jue Vie Sáb)

[Me @ linuxbox ~] $ días = ([0] = Sol [1] = Lunes [2] = mar [3] = Wed [4] = jue

Creación de un array

 Aquí vemos un ejemplo tanto de la asignación y el acceso de un elemento de matriz. Con elprimer comando, el elemento 1 de un conjunto se le asigna el valor "foo". El segundo comandomuestra el valor almacenado de elemento 1. El uso de los frenos en el segundo comando esnecesario para evitar que el shell de intentar la expansión ruta en el nombre del elemento de la

matriz.

Una matriz también se puede crear con el comando DECLARE:

El uso de la opción -a, este ejemplo de declarar crea la matriz a.

Asignación de valores a una matriz

Los valores pueden ser asignados en una de dos maneras. Los valores individuales puedenser asignados con la siguiente sintaxis:

nombre [índice] = valor

donde nombre es el nombre de la matriz y el subíndice es un número entero (o expresiónaritmética) mayor o igual a cero. Tenga en cuenta que el primer elemento de una matriz essubíndice cero, no uno. valor es una cadena o un entero asignado al elemento de la matriz.

Varios valores pueden ser asignados con la siguiente sintaxis:

nombre = (valor1 valor2 ...)

donde nombre es el nombre de la matriz y el valor ... son valores asignados secuencialmente a

los elementos de la matriz, comenzando con el elemento cero. Por ejemplo, si quisiéramos

asignar días abreviada de la semana para los días de la matriz, podríamos hacer esto:

También es posible asignar valores a un elemento específico mediante la especificación de unsubíndice para cada valor:

479

Page 527: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 527/571

[5] = vie [6] =sábado)

#! / Bin / bash

horas #: guión para contar los archivos por el uso de tiempo de

modificación () {echo "uso: $ (basename $ 0) directorio"> & 2

}

35 - Matrices

Acceso a los elementos de matriz

Entonces, ¿qué son las matrices bueno para? Al igual que muchas de las tareas de gestión dedatos se pueden realizar con un programa de hoja de cálculo, muchas tareas de programaciónse pueden realizar con arrays.

Vamos a considerar una simple recopilación de datos y presentación de ejemplo. Vamos aconstruir un guión que analiza los tiempos de modificación de los archivos en un directorioespecificado. A partir de estos datos, nuestro guión te mostrará una tabla que muestra a quéhora del día los archivos fueron modificados por última vez. Una secuencia de comandos deeste tipo podría ser utilizada para determinar cuando un sistema es el más activo. Estasecuencia de comandos, llamadas horas, produce este resultado:

Ejecutamos el programa de horas, especificando el directorio actual como el objetivo. Produceuna demostración tabla, para cada hora del día (0-23), el número de archivos de la últimamodificación. El código para producir este es el siguiente:

480

[me @ linuxbox ~] $ horas.Hora Archiv

 Hora Archivos

00 0 12 1101 1 13 702 0 14 103 0 15 704 1 16 605 1 17 506 6 18 407 3 19 408 1 20 109 14 21 010 2 22 0

11 5 23 0Total de archivos = 80

Page 528: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 528/571

#  Compruebe que el argumento es undirectorio si [[! -d $ 1]]; entonces

salida el uso de 1 fi

#  Inicialice matrizfor i in {0..23}; hacer horas [i] = 0; hecho

#  Recopilar datosfor i in $ (stat -c% a "$ 1" / * | cortó -c 12-13); hacer j = $ {i / #

0}((++ Horas [j]))((++ Recuento))

hecho

#  Visualización de datosecho -e "Hora \ tFiles \ Thour \ tFiles"echo -e " --------- \ T ------ \ T ----- \ T ------- "for i in {0..11}; hacer

 j = $ ((i + 12))printf "% 02d \ t% d \ t% 02d \ t% d \ n" $ i $ {horas [i]} $ j $ {horas [j]}

hechoprintf "\ archivos Ntotal =% d \ n", $ count

Acceso a los elementos de matriz

La secuencia de comandos consta de una función (uso) y un cuerpo principal con cuatrosecciones. En la primera sección, comprobamos que no es un argumento de línea de comandos

y que es un directorio. Si no es así, se muestra el mensaje de uso y de salida.La segunda sección inicializa las horas de matriz. Esto se hace mediante la asignación de cadaelemento un valor de cero. No hay ningún requisito especial para preparar matrices antes desu uso, pero nuestro script necesita para asegurarse de que ningún elemento está vacía. Tengaen cuenta la forma interesante se construye el lazo. Mediante el empleo de la expansión dellaves ({0..23}), que son capaces de generar fácilmente una secuencia de palabras para el parael comando.

La siguiente sección recoge los datos mediante la ejecución del programa de estadísticas sobrecada archivo en el directorio. Utilizamos corte para extraer la hora de dos dígitos delresultado. Dentro del bucle, tenemos que quitar ceros a la izquierda del campo de la hora, yaque el shell intentará (y en última instancia falla) para interpretar los valores "00" al "09" comonúmeros octales (ver Tabla 34-1). A continuación, incrementamos el valor del elemento dematriz correspondiente con la hora del día. Por último, incrementamos un contador (recuento)para realizar un seguimiento del número total de archivos en el directorio.

La última sección de la secuencia de comandos muestra el contenido de la matriz. En primerlugar, la producción de un par de líneas de cabecera y luego entramos en un bucle queproduce dos columnas de salida. Por último, la producción de la cuenta final de los archivos.

481

Page 529: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 529/571

[Me @ linuxbox ~] $ animales = ("un perro" "un gato" "un pez") [me @linuxbox ~] $ for i in $ {animales [*]}; hacer eco $ i; hechounperroungatounpescado[Me @ linuxbox ~] $ for i in $ {animales [@]}; hacer eco $ i; hechounperroungato

unpescado[Me @ linuxbox ~] $ for i in "$ {animales [*]}"; hacer eco $ i; hechoun perro un gato un pescado[Me @ linuxbox ~] $ for i in "$ {animales [@]}"; hacer eco $ i; hechounperroungatounpescado

35 - Matrices

Operaciones de matriz

Hay muchas operaciones de matriz común. Cosas tales como la supresión de las matrices, ladeterminación de su tamaño, la clasificación, etc. tienen muchas aplicaciones en secuencias decomandos.

Salida de todo el contenido del de una matrizLos subíndices * y @ pueden utilizarse para acceder a cada elemento de una matriz. Al igualque con los parámetros de posición, la notación @ es el más útil de los dos. Aquí está unademostración:

Creamos los animales de la matriz y asignarle tres cuerdas de dos palabras. A continuación,ejecutamos cuatro bucles para ver el efecto de la palabra de división sobre el contenido de lamatriz. El comportamiento de las notaciones $ {animales [*]} y $ {animales [@]} es idénticohasta que se citan. Los resultados de notación * en una sola palabra que contiene el contenidode la matriz, mientras que los resultados de notación @ en tres palabras, que coincide con lasmatrices de contenidos "reales".

Determinar el número de elementos de matrizEl uso de la expansión de parámetro, podemos determinar el número de elementos de unamatriz en mucho la misma manera que la búsqueda de la longitud de una cadena. He aquí unejemplo:

482

Page 530: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 530/571

[Me @ linuxbox ~] $ a [100] = foo[Me @ linuxbox ~] $ echo $ {# a [@]} # Número de elementos de lamatriz1[Me @ linuxbox ~] $ echo $ {# a [100]} # Longitud del elemento 1003

[Me @ linuxbox ~] $ foo = ([2] = a [4] = b [6] = c)[Me @ linuxbox ~] $ for i in "$ {foo [@]}"; hacer eco $ i; hecho

unbc[Me @ linuxbox ~] $ for i in "$ {foo [@]!}"; hacer eco $ i; hecho246

Operaciones de matriz

Creamos un array y asignamos la cadena "foo" para el elemento 100. A continuación, se utilizala expansión de parámetro para examinar la longitud de la matriz, usando la notación @. Por

último, nos fijamos en la longitud del elemento 100, que contiene la cadena "foo". Esinteresante notar que mientras que asignamos nuestra cadena de elemento 100, golpe sóloinforma de un elemento de la matriz. Esto difiere del comportamiento de algunas otraslenguas en las que los elementos no utilizados de la matriz (elementos 0-99) se inicializan convalores vacíos y contados.

Encontrar los subíndices utilizados por una matrizComo Bash permite matrices para contener "lagunas" en la asignación de los subíndices, a

veces es útil para determinar qué elementos de hecho existe. Esto se puede hacer con unaexpansión de parámetro usando las siguientes formas:

$ { ! A r r a y [ * ] }

$ { ! A r r a y [ @ ] }

donde la matriz es el nombre de una variable de matriz. Al igual que las otras expansiones queutilizan * y @, la forma @ entre comillas es el más útil, ya que se expande en palabrasseparadas:

 Adición de elementos al final de una matrizConocer el número de elementos de una matriz no es ninguna ayuda si necesitamos agregarvalores al final de una matriz, ya que los valores devueltos por el * y @ notaciones no nosdicen el índice máximo de la matriz en uso. Afortunadamente, el shell nos proporciona unasolución. Al utilizar el operador = + asignación, podemos añadir automáticamente los valoresal final de una matriz. Aquí, asignamos tres valores a la matriz foo, y luego añadimos tres más.

483

Page 531: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 531/571

35 - Matrices

[Me @ linuxbox ~] $ foo = (a b c)[Me @ linuxbox ~] $ echo $ {foo [@]}a b c[Me @ linuxbox ~] $ H O O + I I P

.C D -h

[Me @ linuxbox ~] $ echo $ {foo [@]}a b c d e f

[Me @ linuxbox ~] $ array tipooriginal matriz: fedcba matrizordenada: abcdef

[Me @ linuxbox ~] $ foo = (abcdef) [me @linuxbox ~] $ echo $ {foo [@]} abcdef

Ordenación de un conjuntoAsí como con hojas de cálculo, a menudo es necesario para ordenar los valores en unacolumna de datos. La cáscara no tiene forma directa de hacer esto, pero no es difícil de hacer

con un poco de codificación:

El script funciona copiando el contenido de la matriz original (a) en una segunda matriz(a_sorted) con una pieza difícil de sustitución de comandos. Esta técnica básica puede serutilizado para realizar muchos tipos de operaciones en la matriz cambiando el diseño de la

tubería.

Eliminación de una matrizPara eliminar una matriz, utilice el comando unset:

484

#! / Bin / bash

# Matriz de tipo: Ordenar una matriz

a = (f e d c b a)

echo "matriz original : $ {A [@]} "a_sorted = ($ (for i in "$ {A [@]}"; hacer eco $ i; hecho | sort))echo "matriz ordenada: $ {A_sorted [@]} "

Cuando se ejecuta, el script produce esto:

Page 532: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 532/571

 

Operaciones dematriz

[Me @ linuxbox ~] $ foo unset [me @linuxbox ~] $ echo $ {foo [@]}

[Me @ linuxbox ~] $

unset también puede ser utilizado para eliminar loselementos de matriz individuales:

[Me @ linuxbox ~] $ foo = (abcdef) [me @linuxbox ~] $ echo $ {foo [@]} abcdef[Me @ linuxbox ~] $ unset 'foo [2]' [me @linuxbox ~] $ echo $ {foo [@]} abdef

En este ejemplo, borramos el tercer elemento de la matriz, el subíndice 2. Recuerde, matricesempezamos con subíndice cero, no uno! Observe también que el elemento de la matriz debeser citado para evitar que el shell de realizar la expansión ruta.

Curiosamente, la asignación de un valor vacío a un array no se vacía su contenido:

[Me @ linuxbox ~] $ foo = (abcdef) [me @linuxbox ~] $ foo =[Me @ linuxbox ~] $ echo $ {foo [@]} b c d e f

Cualquier referencia a una variable de matriz sin un subíndice se refiere al elemento cero dela matriz:

[Me @ linuxbox ~] $ foo = (abcdef) [me @linuxbox ~] $ echo $ {foo [@]} abcdef[Me @ linuxbox ~] $ foo = A [me @ linuxbox~] $ echo $ {foo [@]}A B C D E F

Las matrices asociativasLas versiones recientes de fiesta ahora soportan matrices asociativas. Las matrices asociativasutilizan cuerdas en lugar de números enteros como los índices de matriz. Esta capacidadpermite nuevos enfoques interesantes a la gestión de datos. Por ejemplo, podemos crear unamatriz llamada "colores" y el uso de nombres de colores como los índices:

485

Page 533: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 533/571

declarar colores -A colores["rojo"] = colores "# FF0000"["verde"] = "# 00ff00 colores"["azul"] = "# 0000ff"

echo $ {colores ["azul"]}

35 - Matrices

A diferencia de las matrices de enteros indexados, que se crean con sólo hacer referencia aellos, matrices asociativas deben ser creados con el comando declarar utilizando la nueva

opción -A. Se accede a elementos de matriz asociativa o menos de la misma manera que losenteros conjuntos indexados:

En el próximo capítulo, vamos a ver un script que hace buen uso de matrices asociativas paraproducir un informe interesante.

Resumiendo

Si buscamos la página del manual de bash para la palabra "serie", nos encontramos conmuchos casos de fiesta, donde hace uso de variables de matriz. La mayoría de ellos sonbastante oscura, pero pueden proporcionar utilidad ocasional en algunas circunstancias

especiales. De hecho, todo el tema de las matrices es bastante infrautilizado en laprogramación de shell, debido en gran parte al hecho de que los programas tradicionales deshell de Unix (como sh) carecían de apoyo para las matrices. Esta falta de popularidad eslamentable, porque las matrices son ampliamente utilizados en otros lenguajes deprogramación y proporcionan una herramienta poderosa para resolver muchos tipos deproblemas de programación.

Arrays y loops tienen una afinidad natural y se usan a menudo juntos. El

de ((expr; expr; expr))

forma de bucle es particularmente adecuado para el cálculo de los subíndices de matriz.

Lectura adicional

• Un par de artículos de la Wikipedia acerca de las estructuras de datos que se encuentran

en este capítulo: http://en.wikipedia.org/wiki/Scalar (informática) 

http://en.wikipedia.org/wiki/Associative matriz 

486

Page 534: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 534/571

ls -l> output.txtecho "Listado de foo.txt" >> output.txt gato foo.txt>> output.txt

36  - Exotica

36 - Exo tica

En esto, el capítulo final de nuestro viaje, vamos a ver algunas probabilidades y termina.Aunque ciertamente hemos cubierto mucho terreno en los capítulos anteriores, hay muchascaracterísticas de bash que no hemos cubierto. La mayoría son bastante oscuro, y útil sobretodo para aquellos que la integración de fiesta en una distribución de Linux. Sin embargo, hayunos pocos que, aunque no es de uso común, son útiles para ciertos problemas deprogramación. Vamos a cubrir aquí.

Comandos Grupo Y subniveles

Bash permite comandos para agruparse. Esto se puede hacer en una de dos maneras; ya seacon un comando de grupo o con un subnivel. Estos son ejemplos de la sintaxis de cada uno:

Grupo comando:

{Commandl; comando2; [Command3; ...]}

Subshell:

(Comando1; comando2; [command3; ...])

Las dos formas se diferencian en que un comando de grupo rodea a sus órdenes con losapoyos y un subnivel utiliza paréntesis. Es importante señalar que, debido a la forma Bashimplementa comandos de grupo, los tirantes deben estar separados de los comandos de unespacio y el último comando debe terminar con un punto y coma o ya sea un salto de líneaantes de la llave de cierre.

Entonces, ¿qué son los comandos de grupo y subniveles bueno para? Mientras que tienen una

diferencia importante (que vamos a llegar a en un momento), que son a la vez se utiliza paragestionar la redirección. Consideremos un segmento de secuencia de comandos que realizaredirecciones en varios comandos:

Esto es bastante sencillo. Tres comandos con su salida redirigida a un archivo llamadooutput.txt. El uso de un grupo de comandos, podríamos codificar esto como sigue:

487

Page 535: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 535/571

{ls -l; echo "Listado de foo.txt"; foo.txt gato; }> Output.txt

(ls -l; echo "Listado de foo.txt"; foo.txt gato)> Output.txt

{ls -l; echo "Listado de foo.txt"; foo.txt gato; } | Lpr

36 - Exotica

Usando una subcapa es similar:

Usando esta técnica hemos salvado a nosotros mismos un poco de mecanografía, pero dondeun comando de grupo o subcapa realmente brilla es con tuberías. Cuando se construye una

tubería de comandos, a menudo es útil para combinar los resultados de varios comandos enuna sola corriente. Comandos de Grupo y subniveles hacer esto fácil:

Aquí hemos combinado la salida de los tres órdenes y les hilo en la entrada de LPR paraproducir un informe impreso.

En la secuencia de comandos que sigue, vamos a utilizar los comandos de grupos y mirarvarias técnicas de programación que se pueden emplear en combinación con matricesasociativas. Esta secuencia de comandos, llamado gama-2, cuando se le da el nombre de undirectorio, imprime una lista de los archivos en el directorio junto con los nombres delpropietario y el grupo propietario del archivo. Al final de la lista, el script imprime unrecuento de la cantidad de archivos que pertenecen a cada propietario y el grupo. Aquí vemoslos resultados (condensada por razones de brevedad) cuando la secuencia de comandos se dael directorio / usr / bin:

488

[Me @ linuxbox ~] $ array-2 / usr / bin/usr/bin/2to3-2.6 raíz raíz

/ Usr / bin / 2to3 raíz raíz/ Usr / bin / a2p raíz raíz/ Usr / bin / abrowser raíz raíz/ Usr / bin / aconnect raíz raíz/ Usr / bin / acpi_fakekey raíz raíz/ Usr / bin / acpi_listen raíz raíz/ Usr / bin / add-apt-repositorio raíz raíz

/ Usr / bin / zipgrep raíz raíz/ Usr / bin / zipinfo raíz raíz/ Usr / bin / zipnote raíz raíz/ Usr / bin / zip raíz raíz

Page 536: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 536/571

 

Comandos Grupo Y subniveles

/ Usr / bin / zipsplit raíz raíz/ Usr / bin / zjsdecode raíz raíz/ Usr / bin / zsoelim raíz raíz

Propietarios de archivos:

demonio 1 archivo (s)raíz 1394 archivo (s)

Grupo de propietarios:crontab 1 archivo (s)demonio 1 archivo (s)lpadmin 1 archivo (s)correo 4 archivo (s)mlocate 1 archivo (s)raíz 1380 archivo (s)sombra 2 archivo (s)ssh 1 archivo (s)tty 2 archivo (s)utmp 2 archivo (s)

Aquí está una lista (con los números de línea) de la secuencia de comandos:

123453 7

#! / Bin / bash

# gama-2: Utilice matrices para anotar propietarios de archivos

declarar archivos -A file_group grupos file_owner propietarios

si [[! -d "$ 1"]]; entonces8 echo "Uso: matriz de 2 dir"> & 29 salida 1

10 fi11

12 for i in / * "$!"; hacer13 propietario = $ (stat -c% T "$ i")14 grupo = $ (stat -c% G "$ i")15 archivos ["$ i"] = "$ i"16 file_owner ["$ i"] = $ propietario17 file_group ["$ i"] = $ grupo18 ((++ Propietarios [$ propietario]))19 ((++ Grupos [$ grupo]))20 hecho2122 # Enumerar los archivos recopilados23 { para i en "$ {archivos [@]}"; hacer24 printf "% -40s% -10s% -10s \ n" \

25 "$ I" $ {file_owner ["$ i"]} $ {file_group ["$ i"]}26 hecho} | sort

489

Page 537: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 537/571

 

Echemos un vistazo a la mecánica de este script:

Línea 5: Asociativa matrices deben ser creados con el comando declarar utilizando la opción

-A. En este script creamos cinco matrices de la siguiente manera:archivos contiene los nombres de los archivos en el directorio, indexada por nombre de

archivo

file_group contiene el propietario del grupo de cada archivo, indexada por nombre de archivo

file_owner contiene el propietario de cada archivo, indexada por nombre de archivo

grupos contiene el número de archivos que pertenecen al grupo indexado

propietarios contiene el número de archivos que pertenecen al propietario indexadaLíneas 7-10: Comprueba que un nombre de directorio válido se pasa como un parámetro

posicional. Si no, se muestra un mensaje de uso y el script finaliza con un estado de salida 1.Líneas 12-20: Bucle a través de los archivos en el directorio. Utilizando el comando stat, laslíneas 13 y 14 extraen los nombres del propietario y grupo propietario del archivo y asignarlos valores a sus respectivas matrices (líneas 16, 17) utilizando el nombre del archivo como elíndice de matriz. Del mismo modo el propio nombre de archivo se le asigna a la matriz dearchivos (línea 15).

Líneas 18-19: El número total de archivos que pertenecen al propietario del archivo ypropietario del grupo se incrementa en uno.

Líneas 22-27: La lista de archivos se emite. Esto se hace usando los "$ {array [@]}" de expansiónde parámetros que se expande en toda la lista de elemento de la matriz con cada elemento

tratado como una palabra separada. Esto permite la posibilidad de que un nombre de archivopuede contener espacios incrustados. También tenga en cuenta que todo el bucle estáencerrado entre llaves formando así un grupo de comandos. Esto permite que toda laproducción del bucle que se canaliza en el comando sort. Esto es necesario debido a laexpansión de los elementos de la matriz no está ordenada.

Líneas 29-40: Estos dos bucles son similares al bucle lista de archivos, excepto que utilizan los"$ {!

36 - Exotica

27 eco2829 # propietarios de la lista30 echo "dueños de archivos:"31 {For i in "$ {propietarios [@]}!"; hacer

32 printf "% -10s: archivo% 5d (s) \ n"

H $■

H

]}33 hecho} | sort34 eco3536 # Lista los grupos37 echo " ro ietarios del ru o del archivo:"38 {For i in "$ {grupos [@]}!"; hacer39 printf "% -10s: archivo% 5d (s) \ n"

H $ {grupos [■

H ]}40 hecho} | sort

Page 538: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 538/571

490

Page 539: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 539/571

echo "foo" | ver echo$ RESPUESTA

leer <<(echo "foo") echo $RESPUESTA

 ___________________________________________________ Comandos Grupo Y subniveles

array [@]} "de expansión que se expande en la lista de índices de matriz en lugar de la lista deelementos de la matriz.

Proceso de SustituciónAunque parecen similares y pueden ser utilizadas para combinar corrientes para laredirección, hay una diferencia importante entre los comandos de grupo y subniveles.Mientras que un grupo comando ejecuta todas sus comandos en el shell actual, un subnivel(como su nombre indica) ejecuta sus comandos en una copia infantil de la shell actual. Estosignifica que el medio ambiente se copia y se le dio a una nueva instancia de la cáscara.Cuando los subshell salidas, se pierde la copia del medio ambiente, por lo que los cambiosrealizados en el entorno del subshell (incluyendo la asignación de variables) se pierdetambién. Por lo tanto, en la mayoría de los casos, a menos que una secuencia de comandosrequiere una subcapa, los comandos de grupo son preferibles a las subcapas. Comandos degrupo son tanto más rápido y requieren menos memoria.

Vimos un ejemplo del problema de medio ambiente subshell en el capítulo 28, cuando

descubrimos que un comando de lectura en una tubería no funciona como cabría esperarintuitivamente. En resumen, si se construye un oleoducto como esto:

El contenido de la variable de respuesta es siempre vacío porque el comando de lectura seejecuta en un subshell, y su copia de la respuesta se destruye cuando el subnivel termina.

Debido a que los comandos de tuberías siempre se ejecutan en subniveles, cualquier comandoque asigna las variables se encontrará con este problema. Afortunadamente, la cáscara

proporciona una forma exótica de expansión llamado proceso de sustitución que se puedeutilizar para evitar este problema.

Proceso de sustitución se expresa de dos formas:

Para los procesos que producen la salida estándar:

< ( L i s t a )

o, para los procesos que la entrada estándar de admisión:

> ( L i s t a )

donde lista es una lista de comandos.

Para resolver nuestro problema con la lectura, podemos emplear la sustitución de proceso

como éste:

491

Page 540: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 540/571

[Me @ linuxbox ~] $ echo <(echo "foo") / dev/ fd / 63

36 - Exotica

Sustitución de procesos nos permite tratar la salida de un subnivel como un archivo ordinario

a los efectos de la redirección. De hecho, ya que es una forma de expansión, podemos

examinar su valor real:

Mediante el uso de eco para ver el resultado de la expansión, vemos que la salida de lasubshell está siendo prestado por un archivo llamado / dev / fd / 63.

Proceso de sustitución se utiliza a menudo con bucles que contienen lectura. He aquí unejemplo de un bucle de lectura que procesa el contenido de un anuncio en el directorio creadopor un subnivel:

El bucle se ejecuta leer para cada línea de una lista de directorios. La lista en sí se produce en lalínea final de la secuencia de comandos. Esta línea redirecciona la salida de la sustitución deproceso en la entrada estándar del bucle. El comando de la cola está incluido en la tubería desustitución proceso para eliminar la primera línea de la lista, que no es necesario.

Cuando se ejecuta, el script genera una salida como esta:

#! / Bin / bash

# Pro-sub: demostración de la sustitución de proceso

mientras que los enlaces grupo propietario de nombre de archivo de fecha y hora

cat << - EOFNombre del $ ArchivoTamaño: $ TamañoPropietario: $ PropietarioGrupo: $ GrupoModificado: $ Date $ tiempoEnlaces: $ vínculosAtributos: $ Attr

EOFhecho <<(ls -l | cola -n 2)

[Me @ linuxbox ~] $ pro_sub | cabeza -n 20

Nombre del addresses.ldifTamaño: 14540Propietario: míGrupo: míModificado: 02.04.2009 11:12

492

Page 541: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 541/571

#! / Bin / bash

# Trampa-demo: manejo de demostración simple

señal

Comandos Grupo Y subniveles

TrampasEn el capítulo 10, vimos cómo los programas pueden responder a las señales. Podemosagregar esta capacidad a nuestros scripts, también. Aunque las secuencias de comandos quehemos escrito hasta ahora no han necesitado esta capacidad (debido a que tienen tiempos deejecución muy cortos, y no crean archivos temporales), las secuencias de comandos másgrandes y más complicados pueden beneficiarse de tener una rutina de manejo de señales.

Cuando diseñamos un gran guión complicado, es importante tener en cuenta lo que sucede siel usuario cierra la sesión o se apaga el ordenador mientras el script se está ejecutando.Cuando se produce un evento de este tipo, una señal será enviada a todos los procesosafectados. A su vez, los programas que representan esos procesos pueden realizar accionespara garantizar una terminación adecuada y ordenada del programa. Digamos, por ejemplo,

que hemos escrito un script que crea un archivo temporal durante su ejecución. En el curso deun buen diseño, tendríamos el guión elimina el archivo cuando el script termine su trabajo.También sería buena idea tener el guión borrar el archivo si se recibe una señal que indica queel programa iba a ser terminado antes de tiempo.

Bash proporciona un mecanismo para este propósito se conoce como una trampa. Las trampasse implementan con el apropiado nombre de orden interna, trampa. trampa utiliza lasiguiente sintaxis:

trampa señal argumento [señal ...]

donde el argumento es una cadena que será leído y entendido como un comando y la señal esla especificación de una señal que activará la ejecución del comando interpretado.

Aquí está un ejemplo sencillo:

493

Enlaces: 1Atributos: -rw-r - r--

Nombre delpapelera

Tamaño: 4096

Propietario: míGrupo: míModificado: 2009-07-10 7:31Enlaces: 2Atributos: drwxr-xr-x

Nombre delbookmarks.html

Tamaño: 394213Propietario: míGrupo: mí

Page 542: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 542/571

 

36 - Exotica

trampa "eco" Te estoy ignorando. '"SIGTERM SIGINT

for i in {1..5}; hacer

echo "$ i iteración de 5" sueño5hecho

Este script define una trampa en la que se ejecutará un comando echo cada vez que sea laSIGINT o señal SIGTERM se recibe mientras que el script se está ejecutando. La ejecución delprograma se ve así cuando el usuario intenta detener la secuencia de comandos pulsandoCtrl-C:

[Me @ linuxbox ~] $trampa-demo Iteración 1 de 5

Iteración 2 de 5 te estoyignorando. Iteración 3 de 5 teestoy ignorando. Iteración 4 de 5Iteración 5 de 5

Como podemos ver, cada vez que el usuario intenta interrumpir el programa, el mensaje seimprime en su lugar.

La construcción de una cadena para formar una secuencia útil de comandos puede ser difícil,por lo que es práctica común para especificar una función de shell como el comando. En este

ejemplo, se especifica una función de shell separada para cada señal para ser manipulados:

#! / Bin / bash

# Trampa-demo2: manejo de demostración simpleseñal

exit_on_signal_SIGINT () {echo "Guión interrumpió." 2> & 1 salida0

}

exit_on_signal_SIGTERM () {

echo "Guión terminado." 2> & 1 salida0} 

trampa exit_on_signal_SIGINT SIGINTtrampa exit_on_signal_SIGTERM SIGTERM

494

Page 543: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 543/571

 

Trampas

for i in {1..5}; hacerecho "$ i iteración de 5" sueño5

hecho

Este script tiene dos comandos trampa, uno para cada señal. Cada trampa, a su vez, especificauna función de shell que se ejecuta cuando se recibe la señal en particular. Tenga en cuenta lainclusión de un comando de salida en cada una de las funciones de manipulación de la señal.Sin una salida, el script continuaría después de completar la función.

Cuando el usuario presiona CTRL-C durante la ejecución de este script, los resultados se venasí:

[Me @ linuxbox ~] $ trampa-demo2Iteración 1 de 5 Iteración 2 de 5Guión interrumpí.

Archivos temporales

Una de las razones manejadores de señales se incluyen en las escrituras es paraeliminar los archivos temporales que el guión puede crear para mantener los

resultados intermedios durante la ejecución. Hay algo de un arte de nombrar losarchivos temporales. Tradicionalmente, los programas de Unix como sistemas creansus archivos temporales en el directorio / tmp, un directorio compartido destinado aeste tipo de archivos. Sin embargo, dado que el directorio es compartido, esto planteaalgunos problemas de seguridad, en particular para los programas que se ejecutancon privilegios de superusuario. Aparte del paso obvio de establecer los permisosadecuados para los archivos expuestos a todos los usuarios del sistema, es importantedar a los archivos temporales de los nombres de archivo no predecibles. Esto evita unexploit conocido como un ataque de raza temp. Una forma de crear unano predecible (pero aún descriptivo) llamo a hacer algo como esto:.. tempfile = / tmp/ $ (basename $ 0) $$ $ RANDOMEsto creará un nombre de archivo que consiste en el nombre del programa, seguidopor su ID de proceso (PID), seguido por un número entero aleatorio. Tenga en cuenta,sin embargo, que el RAN $ - variable de shell DOM sólo devuelve un valor en el rangode 1 a 32.767, lo que no es una variedad muy grande en términos informáticos, por loque una sola instancia de la variable no es suficiente para superar un atacantedeterminado .

495

Page 544: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 544/571

Una mejor manera es utilizar el programa mktemp (que no debe confundirse con lafunción de la biblioteca estándar mktemp) para el nombre y crear el archivo temporal.El programa mktemp acepta una plantilla como argumento que se utiliza paraconstruir el nombre del archivo. La plantilla debe incluir una serie de caracteres "X",que se reemplazan por un número correspondiente de letras y números aleatorios.Cuanto más larga sea la serie de caracteres "X", el más largo de la serie de caracteresaleatorios. He aquí un ejemplo: tempfile = $ (mktemp/tmp/foobar.$$.XXXXXXXXXX)Esto crea un archivo temporal y le asigna el nombre al archivo temporal variable. Loscaracteres "x" en la plantilla se sustituyen por letras y números al azar para que elnombre del archivo final (que, en este ejemplo, también incluye el valor expandido deparámetro especial $$ para obtener el PID) podría ser algo como: / tmp/foobar.6593.UOZuvM6654Para los scripts que se ejecutan por los usuarios regulares, puede ser aconsejable evitarel uso del directorio / tmp y crear un directorio para los archivos temporales en elusuario dedirectorio principal, con una línea de código como este:[[-d $ HOME / tmp]] || mkdir $ HOME / tmp

36 - Exotica

Ejecución asíncronaA veces es deseable realizar más de una tarea al mismo tiempo. Hemos visto cómo todos lossistemas operativos modernos son multitarea, al menos, si no multiusuario también. Losscripts pueden ser construidos a comportarse de un modo multitarea.

Por lo general, esto implica el lanzamiento de un guión que, a su vez, pone en marcha una omás secuencias de comandos de los niños que realizan una tarea adicional, mientras que lasecuencia de comandos de los padres continúa funcionando. Sin embargo, cuando una seriede secuencias de comandos se ejecuta de esta manera, no puede haber problemas paramantener el padre y el niño coordinada. Es decir, ¿qué pasa si el padre o el niño depende de laotra, y una secuencia de comandos deben esperar a que el otro para terminar su tarea antes de

terminar su propia?Bash tiene una orden interna para ayudar a controlar la ejecución asíncrona como este. Elcomando wait hace que una secuencia de comandos de los padres para hacer una pausa hastaque un proceso especificado (es decir, la secuencia de comandos niño) termina.

esperarVamos a demostrar el comando de espera en primer lugar. Para ello, vamos a necesitar dosguiones, un guión de los padres: 496

Page 545: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 545/571

 

#! / Bin /bash

Ejecución asíncrona

# Asíncrono-padre: asíncrono demostración ejecución (padre)

echo "Padres: a partir ..."echo "Padres: el lanzamiento de la escritura de losniños ..."asíncrono-niño ypid = $!echo "Padres: niño (PID = $ pid) puesto en marcha."eco de Padres ": continuar ... sueño2

eco de Padres ": haciendo una pausa para esperar a los niños aterminar ... espera $ pid

echo "Padres:. niño está terminado Continua ... echo"Padres: los padres se lleva a cabo. Salir ".

y una secuencia de comandos niño:

#! / Bin / bash

#Asíncrono-niño : Demo ejecución asíncrona (niño)

echo "Niño: niño está funcionando ... "sueño 5echo "Niño: niño se hace. Salir ".

En este ejemplo, vemos que el guión niño es muy simple. La verdadera acción está siendorealizado por el padre. En el guión de los padres, el guión niño se lanzó y puso en el fondo. ElID de proceso de la escritura de niño se registra mediante la asignación de la variable pid conel valor de los $! parámetro de shell, que siempre contendrá el ID de proceso del últimotrabajo de poner en el fondo.

El guión de los padres continúa y luego ejecuta un comando de espera con el PID del procesohijo. Esto hace que el guión principal para hacer una pausa hasta que el script niño sale,momento en el que la secuencia de comandos padres concluye.

Cuando se ejecuta, los scripts de padre e hijo producen el siguiente resultado:

[Me @ linuxbox ~] Padres $asíncrono-padre: a partir ...

497

Page 546: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 546/571

Padres: el lanzamiento de la escritura de niño ...Padres: niño (PID = 6741) puesto en marcha.Padres: continuar ...Niño: Niño está ejecutando ...Padres: hacer una pausa para esperar a los niños a terminar... Niño: Niño que se hace. Cómo salir.Padres: niño está terminado. Continuando ... Padres: lospadres se lleva a cabo. Cómo salir.

[Me @ linuxbox ~] $ mkfifo pipel [me @ linuxbox ~] $ ls -l pipelPRW-r - r-- mí me 1 0 2009-07-17 6:41 pipel

36 - Exotica

Canalizaciones con nombre

En la mayoría de los sistemas tipo Unix, es posible crear un tipo especial de archivo llamadouna canalización con nombre. Las canalizaciones con nombre se utilizan para crear unaconexión entre dos procesos y se puede utilizar igual que otros tipos de archivos. Ellos no sontan populares, pero que son buenos para conocer.

Hay una arquitectura de programación común llamado cliente-servidor, que puede hacer usode un método de comunicación tales como canalizaciones con nombre, así como otros tipos decomunicación entre procesos, tales como conexiones de red.

El tipo más ampliamente utilizado de sistema cliente-servidor es, por supuesto, un navegadorweb que comunica con un servidor web. El navegador web actúa como el cliente, haciendopeticiones al servidor y el servidor responde al navegador con las páginas web.

Las canalizaciones con nombre se comportan como archivos, pero en realidad forman (FIFO)tampones primero en entrar, primero en salir. Al igual que con los tubos ordinarios (sinnombre), los datos va en un extremo y sale por el otro. Con canalizaciones con nombre, esposible crear algo como esto:

 processl> named_pipe

y

 process2 <named_pipe y se

comportará como si: processl |

 process2

Configuración de una canalización con nombreEn primer lugar, debemos crear una canalización con nombre. Esto se hace usando el comandomkfifo:

498

Page 547: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 547/571

[Me @ linuxbox ~] $ ls -l> pipel

[Me @ linuxbox ~] $ cat <pipel

Canalizaciones con nombre

Aquí usamos mkfifo para crear una canalización con nombre llamado pipel. Usando ls, queexaminan el archivo y ver que la primera letra en el campo de atributos es "p", que indica quees una canalización con nombre.

El uso de canalizaciones con nombrePara demostrar cómo funciona la canalización con nombre, vamos a necesitar dos ventanas de

terminal (o, alternativamente, dos consolas virtuales). En el primer terminal, entramos en unsimple comando y redirigir su salida a la canalización con nombre:

Después pulsamos la tecla Intro, el comando aparecerá para colgar. Esto es porque no haynada recibir datos desde el otro extremo de la tubería todavía. Cuando esto ocurre, se dice que

el tubo está bloqueado. Esta condición se borrará una vez que concedemos un proceso para el

otro extremo y se comienza a leer la entrada de la tubería. El uso de la segunda ventana determinal, entramos en este comando:

y el listado del directorio producido a partir de la primera ventana de terminal aparece en elsegundo terminal como la salida del comando cat. El comando ls en el primer terminal secompleta con éxito una vez que ya no se bloquea.

ResumiendoBueno, hemos completado nuestra j ourney. El único que queda por hacer ahora es práctica,práctica, práctica. A pesar de que hemos cubierto mucho terreno en nuestra caminata, apenasarañado la superficie en cuanto a la línea de comandos va. Todavía hay miles de programas delínea de comandos que quedan por descubrir y disfrutar. Empezar a cavar alrededor en / usr /bin y verás!

Lectura adicional

•  La sección "Comandos de compuestos" de la página de manual de bash contiene unadescripción completa de los comandos de grupo y notaciones subshell.

• 

La sección de expansión de la página de manual de bash contiene una subsección de lasustitución de procesos.

499

Page 548: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 548/571

36 - Exotica

•  El Bash-Scripting Guía avanzada también tiene una discusión de la sustitución deproceso: http://tldp.org/LDP/abs/html/process-sub.html 

•  Linux Journal tiene dos buenos artículos sobre canalizaciones con nombre. El primero,

de septiembre de 1997:http://www.linuxjournal.com/article/2156 

•  y el segundo, a partir de marzo de 2009:http://www.linuxjournal.com/content/using-named-pipes-fifos-bash  

500

Page 549: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 549/571

ndice

Índ ice 

 Lacomando a2ps ..................................................................... 333nombres de ruta absolutos ...................................................9comando alias .............................................................. 50, 126alias ..................................................................... 42, 50, 124American National Standards Institute (ANSI ver)........................................................................................... 160Código Estándar Americano para la InformaciónIntercambio (ver ASCII) .....................................................17anclas ............................................. ...................................... 247servidores FTP anónimo ................................................... 200ANSI ............................................................................ ........ 160Códigos de escape ANSI ......................................... 160, 164

ANSI.sys ................ ............................................................. 160Servidor web Apache ........................................................ 118comando apropos.................................................................47comando apt-cache ............................................................ 169comando apt-get............................................................. 168p.de órdenes de aptitude ............................................. ........ 168archivado ............................................................................. 230expansión aritmética .................... 70, 75, 367, 456, 464expresiones aritméticas ........................ 70, 453, 464, 467operadores aritméticos ............................................... 70, 465las pruebas de la verdad de aritmética .................. 391, 464matrices ....................................................................................

añadir valores al final ......... ...................................... 483la asignación de valores ............................................ 479

de asociación ...................................................... 485, 488la creación de .............................................................. 478borrado .................................. ...................................... 484determinar el número de elementos ....................... 482encontrar subíndices usados .................................... 483índice .............. ............................................................. 478multidimensional ...................................................... 478Variables de lectura en ....... ...................................... 400clasificación ........................................................ ........ 484subíndice ..................................................................... 478bidimensional .................................................... ........ 478

ASCII .....................................77, 81, 221, 251, 263, 333carácter campana ........................................................ 157retorno de carro .......................................................... 267Para el cotejo............................................ 251, 253, 387códigos de control ................................... 77, 251, 327Controlador de salida de Groff ............................... 320carácter de salto de línea........................................... 267carácter nulo ............................................................... 221caracteres imprimibles .............................................. 251texto ................................................................................ 17

comando aspell ................................ .................................. 299ensamblador ....................................................................... 341lenguaje ensamblador ...................................................... 341

operadores de asignación ................................................. 467matrices asociativas .......................................................... 485,488ejecución asíncrona ........................................................... 496CD de audio ................................................................ ...... 180,191Lenguaje de programación AWK ......................... ......... 299,473

Breferencias anteriores ..................................... 263, 294p.secuencias de escape de barra invertida .......................... 78caracteres especiales escapados ....................................... 156copias de seguridad, incrementales ................................ 234comando nombre base ...................................................... 440Bash ................................................................................ 2, 124

página de manual ........................................................ 48expresiones básica regular 254, 262p., 292, 296, 306comando bc ......................................................................... 473Berkeley Software Distribution ...................................... 331comando bg ......... ............................................................... 116binario ...................................................... 93, 97, 341, 465máscara de bits ..................................................................... 96operadores de bits ............................................................. 469Bourne, Steve ................................................................ 2, 6expansión de llaves ........................................ 71, 75, 451derivación ........................................................................... 381

501

Page 550: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 550/571

341, 453, 468, 471.............................. 341................................... 4.............................. 338

retorno de carro. 0.18, 77P., 157, 251p., 266, 298, 330

Índice

comando break .................................................... 412, 445enlaces rotos ......................................................................... 39Estilo BSD .......................................................................... 111buffering ............................................................................. 182

bichos .................................................................... 422, 424construir entorno ............................................................... 346comando bzip2................................................................... 229

CLenguaje de programación C,C ++ .........................................comando cal............................comando cancel .....................

comando compuesto caso ................................................. 429conversión caso .................................................................. 462comando cat.................................................................. 57, 266

comando cd .................................................................. 9, 11CD-ROM .............................................................. 179p., 191comando cdrecord ............................................................. 192cdrtools192 clases de personajes ... 26P., 248, 250p., 253,257, 289, 299rangos de caracteres ..................................... 27, 249P., 299comando chgrp .................................................................. 103proceso hijo ........................................................................ 108comando chmod ........................................... 92, 105, 356comando chown ........................................................ 102, 105Cromo .................................................................................. 361clasificación cronológica .................................................. 273cleartext ...................................................................... 200, 202arquitectura cliente-servidor ........................................... 498Lenguaje de programación COBOL ............................... 341Para el cotejo .......................... 126, 251, 253, 289, 387

ASCII ................................................................. 253, 387diccionario ................................................................. 251tradicional .................................................................. 253

comando comm .................................................................. 284historial de comandos ................................................ 3, 83línea de comandos.................................................................

argumentos ................................................................ 436edición ........................................................................... 3, 79expansión ..................................................................... 67historia .......................................................................... 3, 84las interfaces ............................................................ xvii, 28

opciones de comandos ........................................................ 14sustitución de comandos .................................... 73, 75, 451comandos ................................................................................

argumentos .......................................................... 14, 436Tipo de determinar ......................................................................................... 43

documentación ............................................................ 44archivos de programas ejecutables ..........................42,341ejecutar como otro usuario ........................................ 99opciones largas ............................................................ 14

Opciones ...................................................................... 14comentarios .............................. 128, 134, 298, 355, 424Sistema de Impresión Común de Unix .........................329,339operadores de comparación .............................................470compilador ..........................................................................341compilar ..............................................................................340terminaciones ...................................................................... 81comandos compuestos ...........................................................

caso ...............................................................................429para ...............................................................................450si ...................................................................................381hasta .............................................................................413mientras .......................................................................410(()) .............................................................. 391, 406, 464[[]] ................................................................................389,406

algoritmos de compresión ................................................227expresiones condicionales...............................................396,420los archivos de configuración ....................... 18, 21, 124comando configurar ..........................................................346constantes............................................................................366comando continuar ............................................................412los caracteres de control ...................................................157,266códigos de control...............................................................77,251operadores de control ............................................................

&& ...............................................................................394,406|| ..................................................................................394

terminal de control ............................................................109

COPIA .................................................................................344copiar y pegar ..........................................................................

en vim ..........................................................................145en la línea de comandos ............................................ 80con X Window System ................................................. 3

paquete coreutils .................................. 45, 48p., 279, 303contando las palabras en un archivo ............................... 62comando cp ............................................ 28, 35, 131, 207UPC ................................................................................. 108P.,340cron trabajo .........................................................................211crucigramas .........................................................................247comando csplit ...................................................................304CUPS ...................................................................................329,339

directorio de trabajo actual ................................................. 8el movimiento del cursor .................................................. 79comando de corte ..............................................................276,461

Dprogramas demonio ........................................... ... 108, 118

Page 551: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 551/571

 

502

Page 552: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 552/571

67, 125, 362.................... 78................. 398.................. 423................ 126.................... 98......... 98, 109................. 388................. 265................. 341.................. 457................ 206

................. 290

......... 59, 369

................. 413

..................33699, 124, 404.................. 124................. 127..................124..................127.................. 124..................124..................127................. 491

.................. 124................. 318

.................. 347

.........42, 341

..................................... 43

.................................. 126

...................5, 386, 407

........................ 382, 386

................................... 279

..................................... 6770, 75, 367, 456, 464................... 71, 75, 451................... 73, 75, 451..................................... 76................................... 418............................ 84, 8672, 75, 365, 371, 456................... 68, 75, 451............................ 69, 75

Índice

compresión de datos ......................................................... 226redundancia de datos ........................................................ 226la validación de datos ........................ ............................... 389comando date ......................................................................... 4

formatos de fecha .............................................................. 273comando dd ........................................................................ 190Debian ................................................................................. 166Estilo Debian (.deb) .......................................................... 167depuración ................................................................ 377, 424comando declarar .............................................................. 463programación defensiva ......................................... 420, 424delimitadores ................................................... 76, 271, 274dependencias ............................................................ 168, 349diseño .............................................................................. 422P.controladores de dispositivo ................................. 174, 341nombres de dispositivo .................................................... 182nodos de dispositivos ......................................................... 20comando df ................................................................. 4, 379dicción ................................................................................. 342cotejo fin diccionario ........................................................ 251comando diff ...................................................................... 284Restricciones de gestión digital (DRM) ......................... 168directorios ................................................................................

archivado ..................................................................... 230cambio ................................................................. ............ 9copia ............................................................................... 28la creación de ...................................................... 28, 34de trabajo actual ............................................................. 8borrado ................................................................ 31, 39jerárquica ............................................................ ............ 7casa ............................................................. 21, 90, 379

listado ............................................................................ 13en movimiento ................................................... 30, 36navegar ............................................................................ 7Variable de OLD_PWD ............................................ 126padre ................................................................................ 8Variable PATH ........................................................... 126Variable de las personas con discapacidad ........... 127eliminación ......................................................... 31, 39el cambio de nombre ......................................... 30, 36raíz .................................................................................... 7compartido .................................................................. 103sticky bit ........................................................................ 98sincronización ............................................................ 238

transferir través de una red ...................................... 238visualización de contenidos ......................................... 8

particiones de disco ........................................................... 177Variable DISPLAY ............................. ............................... 126Delfín ............................................ ........................................ 27comando dos2unix............................................................. 267comillas dobles ..... ............................................................... 75

comando dpkg .... ............................................................. 168comando du ............................................................ 269, 379Protocolo de configuración dinámica de host (DHCP) 199

Ecomando echo ........................opción -e ..........................opción -n .........................

casos de borde y esquina ......La variable EDITOR .............ID de grupo efectivo .............ID de usuario efectivo ..........declaración elif ......................correo electrónico ..................sistemas embebidos ..............las variables vacías ................túneles cifrados......................cifrado .....................................final del archivo.....................bucle sin fin ............................comando enscript ..................medio ambiente .....................

alias ..................................el establecimiento de ....el examen ........................shell de entrada ..............funciones de shell..........variables de shell ...........archivos de inicio ...........subniveles .......................las variables ....................

comando de la ecuación .......archivos ejecutables ..............archivos de programasejecutables ..programas ejecutables ..........

la determinación de laubicación ...Variable PATH ..............

comando exit ..........................estado de salida .....................comando ampliar ...................expansiones ............................

aritmética ........................

abrazadera .......................sustitución decomandos.delimitadores .................errores resultantes de ...historia ............................parámetro ........................nombre de ruta ...............tilde ..................................

Page 553: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 553/571

503

Page 554: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 554/571

Índice

palabra-división ....................................................... 74P.expresiones ..............................................................................

aritmética .............................. 70, 453, 464, 467, 479condicional .......................................................... 396, 420

ext3 ....................................................................................... 188expresiones regulares extendidas ................................... 254Lenguaje de marcado extensible .................................... 265

Ffalsa comando .................................................................... 383comando fdformat ............................................................. 190comando fdisk ................................................................... 185comando fg ......................................................................... 116FIFO ..................................................................................... 498comando de archivo ............................................................ 17descriptor de archivo .......................................................... 56la corrupción del sistema de archivos ............................ 182

Protocolo de transferencia de archivos (FTP) ............... 199los nombres de archivo .................................................... 221distingue mayúsculas y minúsculas......................... 11espacios incrustados en ....................................... 12, 260extensiones ................................................................... 12oculto ............................................................................. 11

archivos ....................................................................................acceso ............................................................................. 89archivado ....................................................... ...... 230, 236atributos ........................................................................ 90bloque especial ............................................................ 91bloquear el dispositivo especial ............................. 212cambiar el modo de archivo....................................... 92el cambio de dueño y propietario del grupo ......... 102especial carácter ........................................................... 91dispositivo especial de caracteres ........................... 212compresión ................................................................. 226configuración ............................................ 18, 124, 264copia ....................................................................... 28, 34copia través de una red ............................................. 199la creación de vacío ..................................................... 55debutante .................................................................... 166borrado ....................................................... 31, 39, 218la determinación de contenidos ................................ 17nodos de dispositivos ................................................. 20acceso de ejecución ..................................................... 90expresiones ................................................................. 384

descubrimiento .......................................................... 209oculto ............................................................................. 11imagen ISO.............................................................. 191p.listado ....................................................................... 8, 13modo .............................................................................. 91en movimiento ...................................................... 30, 35

propietario .................................................................... 92Permisos ....................................................................... 89acceso de lectura .......................................................... 90regular ......................................................................... 212

eliminación ......................................................... 31, 39el cambio de nombre ......................................... 30, 35rpm .............................................................................. 166biblioteca compartida ................................................. 21inicio............................................................................ 127sticky bit ....................................................................... 98enlaces simbólicos .................................................... 212sincronización ............................................................ 238temporal ...................................................................... 495texto ............................................................................... 17transferir través de una red ................ 199, 235, 238truncando...................................................................... 55tipo ................................................................................. 90visualización de contenidos ...................................... 17acceso de escritura ....................................................... 90

filtros ..................................................................................... 61comando Buscar ............................................................... 211,234paquete findutils ............................................................... 225Firefox ................................................................................. 361cortafuegos ......................................................................... 196primero en entrar, primero en salir ................................ 498disquetes ....................................................... 176, 183, 189control de flujo ........................................................................

derivación ................................................................... 381comando compuesto caso......................................... 429declaración elif .......................................................... 388bucle sin fin ............................................................... 413

para el comando compuesto .................................... 450bucle for ...................................................................... 450sentencia de función ................................................. 374si el comando compuesto ......................................... 381looping ........................................................................ 409por menús ................................................................... 406las decisiones de selección múltiple ...................... 429mientras que con la lectura de archivos y hastabucles ......................................................................... 414terminación de un bucle .......................................... 412trampas ....................................................................... 493hasta bucle .................................................................. 413while............................................................................ 410

comando fmt ...................................................................... 309política de enfoque ............................................................... 4comando veces ................................................................... 309para el comando compuesto ............................................ 450bucle for .............................................................................. 450Previsión ............................................................................. 166Lenguaje de programación Fortran ............................... 341,453comando gratis ..................................................................... 5,181

Page 555: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 555/571

 

504

Page 556: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 556/571

 .................... xix, xxi.............................. 189199, 207, 342, 370.................. 200, 370

.............................. 441.............................. 374

Índice

Free Software Foundation.comando fsck ..........................comando ftp ............................Servidores FTP .......................

Variable de FUNCNAME.....sentencia de función .............

Ggcc ........................................................................................ 342comando gedit .................................................................. 114,131comando genisoimage ..................................................... 191Gentoo ................................................................................ 166comando getopts ............................................................... 449Ghostscript ........................................................................ 329gid ......................................................................................... 89variables globales ............................................................. 376globbing ............................................................................... 26

GNOME .................................. 2, 27, 40, 95, 131, 208gnome-terminal..................................................................... 2Paquete binutils de GNU ................................................ 452GNU C Compiler .............................................................. 342Paquete coreutils GNU ...................... 45, 48p., 279, 303Paquete findutils GNU .................................................... 225Proyecto GNU ........... 14, XIX, XXI, 225, 303, 342, 344

comando info ............................................................... 48GNU / Linux ...................................................................... xix,xxiinterfaces gráficas de usuario ........................................ xviicomando grep ................................................. 62, 243, 403Groff ................................................................................... 318comandos de grupo .......................................................... 487

grupos ................................................................................... 89ID de grupo efectivo................................................... 98gid .................................................................................. 89grupo primario de identificación ............................. 89setgid ............................................................................. 98

Interfaz gráfica de usuario ... 3, xvii, 27, 40, 79, 95, 127comando gunzip ............................................................... 227comando gzip ..................................................................... 50,227

Hdiscos duros ....................................................................... 176enlaces duros ....................................................... 24, 33, 37

la creación de ............................................................... 37

listado ........................................................................... 38comando de la cabeza ........................................................ 63archivos de cabecera ......................................................... 345Hola mundo ....................................................................... 355comando de ayuda .............................................................. 44aquí documentos .............................................................. 369

aquí cuerdas ....................................................................... 404hexadecimal ................................................................ 93, 465archivos ocultos.......................................................... 11, 69estructura jerárquica de directorios ................................... 7

lenguajes de programación de alto nivel ...................... 341historia ......................................................................................expansión ............................................................ 84, 86búsqueda ..................................................................... 84

comando de la historia ....................................................... 84directorios de inicio ............................................................ 21

cuenta de root .............................................................. 22 / Etc / passwd ............................................................... 90

directorio de inicio ............................ 8, 11, 69, 100, 126INICIO variables .............................................................. 126nombre de host .................................................................. 157HTML .............................. 265, 299, 319, 361, 371, 373Hypertext Markup Language .......................................... 265

YoE / S de redirección (ver redirección) ............................... 53comando id .......................................................................... 89IDE ...................................................................................... 183si el comando compuesto ........................... 129, 418, 429La variable IFS .................................................................. 402IMCP ECHO_REQUEST ................................................. 196Las copias de seguridad incrementales ......................... 234archivos de información .................................................... 49init ....................................................................................... 108scripts de inicio ................................................................. 108inodos ................................................................................... 37

INSTALAR ........................................................................ 344asistente de instalación .................................................... 167enteros ......................................................................................

aritmética .................................................................... 70,473división ....................................................................... 71,466expresiones ................................................................ 388

interactividad .................................................................... 397El campo interno Separador ............................................ 402lenguajes interpretados ................................................... 341programas interpretados .................................................. 342intérprete ............................................................................ 341imágenes ISO ........................................................... ...... 191p.iso9660 ............................................................................... 180,192

 Jel control de trabajos ........................................................ 115el número de empleos ...................................................... 115espectrab ............................................................................ 116comando unirse ................................................................. 281

Page 557: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 557/571

 

505

Page 558: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 558/571

kernel ... xvi, xixp., 46, 108, 118, 174, 183, 287, 350

Linux Filesystem Hierarchy Standard .. .19, 24, 358Kernel de Linux ... xvi, xixp., 46, 108, 118, 174, 183,287, 350controladores de dispositivo 

.................. 174 

caracteres literales .................. .................. 245 CD en vivo .............................. .................. xix comando ln ............................. ............. 33, 37 variables locales ..................... .................. 376 lugar .......................................... .......... 251, 253, 289, 387 comando locale ....................... ................. 253 localhost .................................. .................. 203 comando locate ....................... ........ 209, 261 errores lógicos ........................ .................. 420 operaciones lógicas ................ .................. 392 operadores lógicos .................. .................. 214 relaciones lógicas ................... ........ 214, 218 símbolo de login ..................... ............. 5, 201 

shell de entrada ....................... ... 90, 99, 127 opciones largas ....................... .................... 14 interfaz de bucle de retorno ..  .................. 199 looping .................................... .................. 409 bucles ....................................... ..420, 466, 469, 486, 492 la compresión sin pérdidas .. .................. 227 compresión con pérdida ....... .................. 227 minúsculas a la conversión en .................. 463 comando lp ............................. .................. 332 comando lpq ........................... .................. 337 comando lpr ............................ .................. 331 comando lprm ........................ ................. 338 comando lpstat ....................... .................. 336 comando ls .............................. ................ 8, 13 formato largo ................... ................... 16 archivo de ver los atributos .....................90 Lukyanov, Alexander ............ ................. 202 LVM (Logical Volume Manager) .............. ........ 176, 179 

.............................. 340358, 362, 364, 372............................... 347............................... 347................................ 45..................... 45, 319

................... 265, 319

109... 5111119111

Índice

Extensiones Joliet .......................................................... 192Alegría, Bill .................................................................... 137

K

comando kate ................................................................. 131KDE .............................................. 2, 27, 40, 95, 131, 208comando kedit ............................................................... 131

campos clave ...................................................................... 271comando matar .................................................................. 117comando killall .................................................................. 120texto matanza ....................................................................... 80Knuth, Donald ................................................................... 318Konqueror ......................................................... 27, 95, 208Konsole ................................................................................... 2comando kwrite ..................................................... 114, 131

LVariable LANG ........................................... 126, 251, 253comando less .......................................... 17, 60, 238, 261comando lftp ...................................................................... 202bibliotecas .......................................................................... 341LibreOffice Escritor ........................................................... xxicarácter de continuación de línea ................................... 359editores de línea ................................................................ 137carácter de continuación de línea ................................... 298enlazador ............................................................................ 341enlace .................................................................................. 341enlaces ......................................................................................

roto ................................................................................. 39

la creación de ................................................................ 33duro.......................................................................... 24, 33simbólico ................................................................ 23, 34

Comunidad Linux ............................................................. 166Distribuciones de Linux ................................ .................. 166

CentOS ............................................................... 167, 336Debian ............................................................. 166p., 340Fedora .............................................. xix, 89, 167, 336Previsión ..................................................................... 166Gentoo ......................................................................... 166Linspire ....................................................................... 167Mandriva .................................................................... 167OpenSUSE .......................................................... xix, 167

sistemas de envasado ................................................ 166PCLinuxOS ................................................................. 167Red Hat Enterprise Linux ........................................ 167Slackware ................................................................... 166Ubuntu .................................................. xix, 166p., 336Xandros ....................................................................... 167

Mlenguaje máquina ......................mantenimiento ...........................hacer de comandos .....................Makefile ......................................comando man .............................páginas man ................................lenguajes de marcas ...................memoria .......................................

asignado a cada proceso demostrando gratis .................Residente Set Tamaño .......violación de segmentación... uso.....................................

Page 559: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 559/571

 

506

Page 560: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 560/571

Índice

el uso de la visualización ......................................... 121virtual .................................................................. ........ 111

programas basadas en menús .......................................... 406tecla meta ............... ............................................................... 81

secuencias de meta ............................................................ 246metacaracteres .................................................................... 246metadatos ................................................................... 167, 169comando mkdir ..........................................................28, 34comando mkfifo ... ............................................................. 498comando mkfs ........................................................... 188, 190comando mkisofs .............................................................. 192comando mktemp .............................................................. 496nemotécnica ........................................................................ 341editor modal .......... ............................................................. 139fuentes de monoespaciado ............................................... 329Moolenaar, Bram ................................ ............................... 137comando more ...................................................................... 19comando mount ........................................................ 178, 192

puntos de montaje .......................................... 21, 178, 180montaje ................................................................................ 177MP3 ...................................................................................... 104sistemas multiusuario ......................................................... 88las decisiones de selección múltiple .............................. 429multitarea ......................................................... 88, 108, 496comando mv ...............................................................30, 35

Ncanalizaciones con nombre .............................................. 498comando nano .................................................................... 136Nautilo ............................................................. 27, 95, 208

comando netstat ................................................................. 198la creación de redes ........................................................... 195servidores FTP anónimo ........................................... 200ruta por defecto .......................................................... 199Protocolo de configuración dinámica de host(DHCP)...................................................................................... 199túneles cifrados .......................................................... 206examinar los ajustes y estadísticas de la red ....... 198Protocolo de transferencia de archivos (FTP) ........ 199cortafuegos .................................................................. 196Servidores FTP ........................................................... 200Red de área local ........................................................ 199interfaz de bucle de retorno ..................................... 199

hombre en los ataques medios ................................ 203routers .......................................................................... 198comunicación segura con hosts remotos .... 203probar si un host está vivo ....................................... 196trazando la ruta a un host ......................................... 197la transferencia de archivos ..................................... 238transportar archivos........................................... ........ 199

Red Privada Virtual .................................................. 206carácter de nueva línea ..................................................... 157saltos de línea....................................................................... 76NOTICIAS.......................................................................... 344

comando nl ......................................................................... 305comando nroff.......................................................... .......... 318carácter nulo ....................................................................... 221bases numéricas ................................................................. 465

Ooctal................................................................... 93, 465, 481Ogg Vorbis ................................................................ ......... 104Variable de OLD_PWD .................................................... 126OpenOffice.org Writer ........................................... 18, XXP.OpenSSH ............................................................................ 203operadores ...............................................................................

aritmética .......................................................... 70, 465

asignación ................................................................... 467binario ......................................................................... 419comparación ............................................................... 470ternario ........................................................................ 471

poseer archivos ........................................................ ............ 89

Parchivos de paquetes......................................................... 167mantenedores de paquetes .............................................. 167gestión de paquetes .......................................................... 166

debutante .................................................................... 166Estilo Debian (.deb) .................................................. 167paquetes hallazgo ...................................................... 169

herramientas de alto nivel ....................................... 168Instalación de paquetes ............................................ 169herramientas de bajo nivel ...................................... 168repositorios de paquetes ......... ................................. 167Red Hat Estilo (.rpm) ................................................ 167la eliminación de los paquetes ................................ 170RPM ............................................................................. 166paquetes de actualización ........................................ 171

sistemas de envasado ........................................................ 166página de descripción del lenguaje ............. 265, 320, 328La variable PAGER ........................................................... 126buscapersonas ...................................................................... 19expansión de parámetro ................................ 72, 75, 456

directorio padre ................................ ..................................... 8proceso padre ..................................................................... 108comando passwd .............................. ................................. 106contraseñas ......................................................................... 106comando pegar ................................................................... 280PATA ................................................................................... 183

Page 561: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 561/571

 

507

Page 562: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 562/571

Índice

comando patch ................................................................ 287parches ............................................................................. 285Variable PATH ................................. 126, 129, 356, 374expansión ruta .................................................. 68, 75, 451

nombres de ruta ................................................................. 260absoluto........................................................................... 9terminación .................................................................. 81relativo ............................................................................ 9

PDF ..................................................................................... 321,331Programación Perl language.42, 243, 299, 341, 473Permisos ............................................................................. 354Lenguaje de programación PHP ..................................... 341comando ping .................................................................... 196tuberías ........................................................ 60, 404, 491

en sustitución de comandos ...................................... 73portabilidad ................................................ 346, 380, 394portátil................................................................................. 380Formato de documento portátil ..................................... 321,331Interfaz de sistema operativo portátil ............................ 255parámetros posicionales ............................ 436, 457p., 460POSIX ................................................. 192, 251, 254p., 394

clases de personajes .. 26P., 250p., 253, 257, 289,299

PostScript................................... 265, 320, 328, 333, 338comando pr ........................................................................ 313,329grupo primario de identificación ..................................... 89caracteres imprimibles ..................................................... 251comando printenv .............................................................. 73,124buffers de impresora ........................................................ 181impresoras ......................................................................... 181,183

salida buffering ......................................................... 181

códigos de control ..................................................... 327margarita ruedas ........................................................ 327nombres de dispositivo ............................................ 183conductores ................................................................ 329gráfico.......................................................................... 328impacto ........................................................................ 327láser.............................................................................. 328

comando printf ................................................................. 314,455impresión.................................................................................

determinar el estado del sistema ............................ 336historia de ................................................................... 326Protocolo de impresión de Internet ........................ 337fuentes de monoespaciado....................................... 327

texto preparación ....................................................... 329bastante ....................................................................... 333colas de impresión ................................ .................... 336fuentes proporcionales ............................................. 328cola ............................................................................... 337la cola de impresión .................................................. 336terminar los trabajos de impresión ........................ 338

visualización de empleos ......................................... 337ID del proceso.................................................................... 109sustitución proceso ........................................................... 491procesos .............................................................................. 108

fondo ........................................................................... 115niño.............................................................................. 108controlador ................................................................. 113primer plano .............................................................. 115interrumpiendo ......................................................... 114el control de trabajos ................................................ 115matanza ....................................................................... 117agradable .................................................................... 110padre............................................................................ 108PID ............................................................................... 109ID del proceso ............................................................ 109SIGINT ....................................................................... 494señales ......................................................................... 117SIGTERM ................................................................... 494sueño ........................................................................... 110estado .......................................................................... 110parada .......................................................................... 116visita ........................................................................... 109,111zombi .......................................................................... 110

su uso en producción ........................................................ 422finalización programable .................................................. 83comando ps ........................................................................ 109La variable PS1 ................................................................. 126,156Variable de PS2 ................................................................. 363comando ps2pdf ................................................................ 321Variable de PS4 ................................................................. 426pseudocódigo .................................................................... 381,409

comando pstree ................................................................. 121PuTTY ................................................................................. 208comando pwd ........................................................................ 8Variable de las personas con discapacidad .................. 127Lenguaje de programación Python ................................ 341

Qcitando .................................................................................. 74

comillas dobles ............................................................ 75carácter de escape ........................................................ 77cita desaparecidos ..................................................... 417comillas simples .......................................................... 76

RRAID (matriz redundante de discos independientes)............................................................................................ 176procesador de imagen de trama .................................... 329comando de lectura .................. 398, 408, 414, 422, 491

Page 563: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 563/571

 

508

Page 564: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 564/571

 ...................................... 370...................................... 404

........................................ 54

...................................... 491

....................................... 55

....................................... 6062, 243, 295, 389, 403 247

Índice

Readline ............................................................................. 79README ................................................................. 49, 344redirección ...............................................................................

tubería obstruida ....................................................... 499

comandos de grupos y subcapas ............................. 487aquí documentos........................................................ 369aquí cuerdas................................................................ 404error estándar ............................................................... 55entrada estándar .............................................. 57, 370salida estándar ............................................................. 54

operadores de redirección .....................................................Y> ........................................... ........................................ 57Y >> ................................................................................ 57< ...................................................................................... 59<(Lista) ......................................................................... 491<< .............................................................................. 369p.<< -....<<< ...,> .........> (Lista),>> .......

expresionesregulares anclas .referencias anteriores ................................. 263, 294p.básico ............................... 254, 262p., 292, 296, 306extendido ................................ .................................... 254

bases de datos relacionales .............................................. 281rutas relativas ......................................................................... 9libertad anticipada, la liberación a menudo ................. 422la eliminación de líneas duplicadas en un archivo ........ 61

RESPUESTA variables .......................................... 398, 491generador de informes ...................................................... 361repositorios ......................................................................... 167comando de retorno ............................................... 375, 386reutilizable ................................................................. ........ 380DEP ...................................................................................... 329comando rlogin .................................................................. 202comando rm .......................................................................... 31Extensiones Rock Ridge ................................................... 192roff .......................... ............................................................. 318Codificación ROT13 .......................................................... 290RPM ..................................................................................... 166comando rpm ..................................................................... 169

comando rsync ................................................................... 238rsync protocolo remoto de actualización ....................... 238Lenguaje de programación Ruby .................................... 341

Svariables escalares ............................................................ 478

Schilling, Jorg .................................................................... 192comando scp ....................................................................... 207comando de script ............................................................... 86lenguajes de script ..................................................... 42, 341

comando sdiff .................................................................... 304buscar un archivo de patrones .......................................... 62historia buscar ..................................................................... 84Secure Shell ........................................................................ 203comando sed................................................. 290, 322, 461comando set ............................................................... 124, 425setgid ..................................................................................... 98setuid ............................................................................ 98, 385Seward, Julian .................................................................... 229comando sftp ...................................................................... 207bibliotecas compartidas ............................................ 21, 168shebang ...................................................................... 355, 360órdenes internas del shell .................................................. 42funciones de shell ................................ 42, 124, 374, 440Indicadores de los shells 2, 9, 85, 100, 114, 126, 156, 204,363scripts de shell ................................................................... 354Variable SHELL ................................................................. 126variables de shell ............................................................... 124comando de cambio ................................................. 439, 444SIGINT .............................................. ................................. 494señales ................................................................................. 493comillas simples .................................................................. 76Slackware .......................................... ................................. 166comando del sueño ........................................................... 411enlace suave ......................................................................... 23comando sort ............................................................... 61, 267

claves de ordenación ......................................................... 271código fuente ................................ .. 166p., 174, 265, 340comando fuente ..................................................... 135, 357árbol de código fuente ...................................................... 343parámetros especiales .............................................. 441, 458comando de división ........................................................ 304SSH ...................................................................................... 203comando ssh .............................................................. 203, 235programa ssh ........................................................................ 88Stallman, Richard .............. XVI, XIX, XXI, 131, 255, 342error estándar ......................................................... 53p., 56

la eliminación de ......................................................... 57volver a dirigir a un archivo ...................................... 55

entrada estándar .......................................... 53, 370, 398redireccionamiento ......................................... ............ 57

salida estándar ..................................................................... 53añadiendo a un archivo .............................................. 55la eliminación de ......................................................... 57redirigir el error estándar de ...................................... 56volver a dirigir a un archivo ...................................... 54

archivos de inicio .............................................................. 127

Page 565: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 565/571

 

509

Page 566: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 566/571

Índice

comando stat ......................................................... ............. 223sticky bit ............................................................................... 98dispositivos de almacenamiento .................................... 176

CD de audio .............................................................. 180,191

CD-ROM ................................................................. 179p.,191la creación de sistemas de archivos ........................ 185nombres de dispositivo ............................................ 182particiones de disco ................................................... 177FAT32 .......................................................................... 185disquetes .................................................................... 183,189formato ........................................................................ 185LVM (Logical Volume Manager) ............................ 179puntos de montaje .................................................... 178,180particiones .................................................................. 185leer y escribir directamente ..................................... 190la reparación de los sistemas de archivos .............. 189desmontaje ................................................................. 181Unidades flash USB .................................................. 190

editor de flujo .................................................................... 290cuerdas .....................................................................................

expresiones ................................................................. 387extraer una porción de .............................................. 459longitud de ................................................................. 459realizar búsqueda y reemplazo en .......................... 461eliminar parte principal de ...................................... 460eliminar parte posterior de ...................................... 460$ {Parámetro: desplazamiento: longitud} ............... 459$ {Parámetro: offset} .................................................. 459

comando de cuerdas .......................................................... 452talones ................................................................................ 377,422estilo .................................................................................... 345

comando su ........................................................... ............... 99subniveles.......................................................................... 404,487comando sudo ..................................................................... 99,101Sun Microsystems ............................................................. 137superusuario .............................................. 2, 90, 100, 120enlaces simbólicos.............................................. 23, 34, 38

la creación de ........................................................ 38, 40listado ............................................................................ 38

enlace simbólico .................................................................. 23errores de sintaxis ......................................... .................... 416resaltado de sintaxis ......................................................... 354,359

Ttablas ................................................................................... 281datos tabulares .................................................................. 271,317comando tail ......................................................................... 63archivo de cinta .................................................................. 230comando tar ........................................................................ 230tarballs ................................................................................ 343

objetivos ............................................................................. 347Administrador de tareas .................................................. 113Tatham, Simon .................................................................. 208comando TBL ............................................................ 318, 322

camiseta de comandos ........................................................ 64Teletipo ............................................................................... 109comando telnet .................................................................. 202Variable TERM.................................................................. 127emuladores de terminal ....................................................... 2sesiones de terminal ...............................................................

terminal de control .................................................... 109efecto de .bashrc ........................................................ 357medio ambiente ........................................................... 99salir .................................................................................. 5shell de entrada .................................................. 99, 127Variable TERM .......................................................... 127utilizando canalizaciones con nombre .................. 499virtual .............................................................................. 5con sistemas remotos .................................................. 88

terminales ................................... 81, 87P., 160, 318, 327operador ternario .............................................................. 471casos de prueba ................................................................. 423comando de prueba ........................... 384, 389, 410, 419cobertura de la prueba ...................................................... 423pruebas ............................................................................ 422P.TEX ...................................................................................... 318texto ....................................................................................... 17

el ajuste de longitud de la línea .............................. 309ASCII ............................................................................. 17retorno de carro .......................................................... 267comparar ..................................................................... 283

la conversión de MS-DOS a Unix ........................... 289contando palabras ....................................................... 62corte ............................................................................. 276borrar las líneas duplicadas ..................................... 275la supresión de múltiples líneas en blanco ........... 267la detección de diferencias ....................................... 284mostrando las líneas comunes ................................ 284se presentan los caracteres de control .................... 266Formato DOS ............................................................. 267La variable EDITOR ................................................. 126editores ............................................................... 130, 264la ampliación de las pestañas .................................. 279archivos ......................................................................... 17

filtración ....................................................................... 61plegable ...................................................................... 309formato ........................................................................ 305formato para tipógrafos ............................................ 318tablas de formato ....................................................... 322unión ........................................................................... 281carácter de salto de línea .......................................... 267

Page 567: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 567/571

 

510

Page 568: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 568/571

89, 102, 166, 250, 357........................... 96, 105................................... 181

...................................... 51..................................... 419

.....................................465

..................................... 279

.................................... 418

............................61, 275

.................................... xvii

Índice

minúsculas a la conversión en mayúsculas ........... 289líneas de numeración ....................................... 267, 305paginar ......................................................................... 313pegar .................................................................... ........ 280

la preparación para la impresión............................. 329la eliminación de líneas duplicadas ......................... 61renderizado en PostScript ........................................ 320ROT13 codificado ...................................................... 290la búsqueda de patrones ............................................. 62clasificación ......................................................... 61, 267corrección ortográfica ................................................ 299sustitución ................................................................... 294la sustitución de lengüetas para espacios .............. 279delimitado por tabuladores ...................................... 278personajes Transliterando ........................................ 288Formato Unix .............................................................. 267ver con menos ..................................................... 17, 60

editores de texto ...........................................130, 264, 288emacs ............................................................................ 131para escribir scripts de shell .................................... 354gedit .................................................................... 131, 354interactivo ................................................................... 288kate ...................................................................... 131, 354kedit ............................................................................. 131kwrite ........................................................................... 131línea.............................................................................. 137nano..................................................................... 131, 136Pico ............................................................................... 131corriente ....................................................................... 290resaltado de sintaxis ......................................... 354, 359vi ................................................................................... 131

empuje ...................................................131, 354, 359visual ............................................................................ 137

expansión de tilde ..................................................... 69, 75comando tload .................................................................... 121comando top ............................................................... ........ 111diseño de arriba hacia abajo ............................................ 372Torvalds, Linus .......................................................... xvi, xxicomando touch ................................ 222p., 239, 349, 446comando tr .................................... ...................................... 288comando traceroute ........................................................... 197rastreo .................................................................................. 425personajes Transliterando ................................................ 288trampas ................................................................................ 493

comando troff ..................................................................... 318verdadero comando ........................................................... 383TTY .............................................................................. ........ 109escriba command ................................................................. 43cajistas ........................................................................ 318, 328Variable TZ ......................................................................... 127

TUbuntu ................................comando umask .................comando umount ...............

comando unalias ................operador unario espera,operadores unarios ............comando unexpand ...........símbolo inesperado ...........comando Uniq ....................Unix .....................................Unix System V ................................................................... 331comando unix2dos ............................................................ 267comando unset ................................................................... 484hasta comando compuesto ............................................... 413hasta bucle .......................................................................... 413comando unzip ................................ .................................. 236comando updatedb ............................................................ 211proveedores de aguas arriba ............................................ 167el tiempo de actividad ...................................................... 373comando uptime ................................................................ 379Unidades flash USB ............................................... 176, 190Usenet .................................................................................. 290Variable USER ........................................................ 125, 127usuarios ....................................................................................

cuentas ........................................................................... 89identidad cambiante ................ ................................... 99cambio de contraseñas .............................................. 106ID de usuario efectivo.................................... 98, 109directorio de inicio ...................................................... 90identidad ....................................................................... 89

contraseña ..................................................................... 90Permisos configuración por defecto ......................... 96setuid ............................................................................. 98superusuario .................................... 90, 92, 98p., 107

 / Etc / passwd ................................................................ 90 / Etc / shadow ................................................................ 90

Ventrada de validación ........................................................ 404las variables ..................................................... 72, 364, 456

la asignación de valores ........................................... 367,467constantes .................................................................... 366declarando ........................................................ ......... 364,367

medio ambiente ......................................................... 124global ........................................................................... 376local .............................................................................. 376nombres ...................................................................... 366,459escalar .......................................................................... 478cáscara .......................................................................... 124

Page 569: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 569/571

 

511

Page 570: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 570/571

45

................................... 20

................................... 20

................................... 20

................................... 20.................................... 20

.................................... 20

................................... 183

................................... 183

.................................... 183

..................................... 57

.................................... 21

.................................. 128

.................................... 21

................ 21, 177, 189

......................................9021, 90, 274, 279, 403.......................... 127, 129..................................... 90..................................... 99.....................................21.................................... 21.................................... 21.....................................21................................... 21................................... 22.......................... 22, 100.................................... 22........................... 22, 496.................................... 22................................... 22

.....................................22

.................................... 22

................. 22, 350, 358

................................... 358

.................................... 22

Índice

vfat ....................................................................................... 188comando de vi .................................................................... 136comando vim .......................................................... 263, 359consolas virtuales .................................................................. 5

Red Privada Virtual .......................................................... 206terminales virtuales ............... ............................................... 5editores visuales ................................................................ 137comando vmstat ................................................................. 121

.bash_login ......................................................................... 127

.bash_profile ...................................................................... 127

.bashrc ........................................ 128, 130, 357, 380, 441

.profile ................................... ............................................. 127

.ssh / known_hosts ............................................................ 205

(Comando compuesto (()) ...................................... 464, 470

Wespere comando ................................................................. 496comando wc .......................................................................... 62páginas web ....................................................................... 265comando wget .................................................................... 202Lo que ves es lo que obtienes .......................................... 327comando whatis ................................................................... 47que comando .................................................................. 43, 73mientras comando compuesto ......................................... 410comodines......................................... 26, 58, 67, 243, 250comando wodim ................................................................ 193palabra-división ............................................................ 74pp.mundo ................................................................................... 89

 WYSIWYG .......................................................................... 327

XSistema X Window .............................................. 3, 88, 206xargs comando ................................................................... 220comando xload ................................................................... 121comando xlogo ................................................................... 114XML ..................................................................................... 265

Ytexto tirón.............................................................................. 80

comando yum.......................... ........................................... 169

Zcomando zgrep ................................................................... 263comando zip ....................................................................... 236comando zless ............................................ 50 --help opción.

./configure....................................................................... 346

.bash_history .................................................................. 83

[ [Comando ......................................................................... 418/ 

 / ........................................ / Bin ................................ / Boot .............................. /boot/grub/grub.conf. / Boot / vmlinuz ............ / Dev ...............................

 / Dev / cdrom ................. / Dev / dvd ..................... / Dev / floppy ................ / Dev / null ..................... / Etc ................................. /etc/bash.bashrc ............ / Etc / crontab ................. / Etc / fstab ..................... / Etc / group ................... / Etc / passwd ................. / Etc / profile .................. / Etc / shadow ................ / etc / sudoers .................

 / Lib ................................. / Perdido encontrado + / medios .......................... / Mnt ............................... / Opt ................................ / Proc ............................... / Root .............................. / Sbin .............................. / Tmp .............................. / Usr ................................ / Usr / bin ....................... / Usr / lib ........................ / Usr / local ..................... / Usr / local / bin............ / Usr / local / sbin .......... / Usr / sbin .....................

512

Page 571: The Linux Command Line.en.Es

7/23/2019 The Linux Command Line.en.Es

http://slidepdf.com/reader/full/the-linux-command-lineenes 571/571

Índice

 / Usr / share .......................................................................... 22 / Usr / share / dict .............................................................. 247 / Usr / share / doc ......................................................... 22, 49 / Var ....................................................................................... 23

 / Var / log .............................................................................. 23 / var / log / messages ............................................ 23, 64, 183 / Var / log / syslog ................................................ 64, 183

$ {Parámetro: -palabra} ..................................................... 457$ {Parámetro:? Palabra} .................................................... 458$ {Parámetro: + palabra}................................................... 458$ {Parámetro: = palabra}................................................... 457

$ {Parámetro // patrón / cadena} ...................................... 461$ {Parámetro / # patrón / cadena} .................................... 461$ {Parámetro /% patrón / cadena} ................................... 461