Un libro
LinuxCommand.org
Esta obra est bajo la licencia Creative Commons Reconocimiento-No comercial-Sin obras
derivadas 3.0 Licencia de Estados Unidos. Para ver una copia de esta licencia, visite el enlace
de 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 dems marcas comerciales
pertenecen a sus respectivos propietarios.
Este libro forma parte del proyecto LinuxCommand.org, un sitio para la educacin y la
promocin dedicada a ayudar a los usuarios de sistemas operativos Linux heredados migran
hacia el futuro. Usted puede ponerse en contacto con el proyecto en LinuxCommand.org
http://linuxcommand.org.
Este libro tambin est disponible en forma impresa, publicada por Sin Almidn de prensa y
se pueden comprar donde quiera buenos libros se venden. Sin Almidn de prensa tambin
ofrece este libro en formato electrnico para los lectores electrnicos ms populares:
http://nostarch.com/tlcl.htm
Historial de versiones
Versin
Fecha
Descripcin
13.07
06 de julio 2013
09.12
09.11
14 de diciembre 2009
19 de noviembre 2009
09.10
03 de octubre 2009
09.08
12 de agosto 2009
09.07
18 de julio 2009
Tabla de contenido
Introduccin. .................................................................................................... xvi
Por qu utilizar la lnea de comandos? .......................................................................xvi
Lo que trata este libro ................................................................................................... xvii
Quin debe leer este libro ............................................................................................ xvii
Qu hay en este libro ................................................................................................ xviii
Cmo leer este libro .................................................................................................... xviii
Requisitos previos ....................................................................................................xix
Por qu no lo llaman "GNU / Linux" ..................................................................xix
Agradecimientos ............................................................................................................ xx
Su regeneracin es necesaria! ..................................................................................... xx
Qu hay de nuevo en la segunda edicin del Internet ...............................................xxi
Lectura adicional ...........................................................................................................xxi
Colofn ..........................................................................................................................xxi
2 - Navegacin. ................................................................................................. 7
Entender el archivo del rbol de sistemas ...................................................................... 7
El directorio de trabajo actual .......................................................................................... 7
Aadir el contenido de un directorio................................................................................ 8
Cambiar el directorio de trabajo actual ........................................................................... 9
Rutas absolutas.......................................................................................................... 9
Rutas relativas............................................................................................................ 9
Algunos atajos tiles ................................................................................................ 11
Datos importantes sobre nombres de archivo .................................................... 11
yo
Resumiendo
12
6 - Redireccin. .............................................................................................. 53
Estndar de entrada, salida y error .............................................................................. 53
Redireccin de la salida estndar................................................................................. 54
La reorientacin de error estndar ............................................................................... 55
Redireccin de la salida estndar y el error estndar en un archivo ...................... 56
Cmo deshacerse de la produccin no deseado .................................................... 57
/ Dev / null En Unix Cultura ................................................................................. 57
Reorientacin de la entrada estndar .......................................................................... 57
gato - Concatenar archivos ...................................................................................... 57
Tuberas.........................................................................................................................59
La diferencia entre> y |........................................................................................ 60
Filtros ........................................................................................................................ 61
Lneas Reportar u omitir Repetido - Uniq ................................................................ 61
wc - Imprimir lnea, palabra y Nmero total de bytes .............................................. 62
Lneas de impresin coinciden con un patrn - grep .............................................. 62
cabeza / cola - Imprimir Primera / ltima parte de Archivos .................................... 63
tee - Leer de la entrada estndar y la salida a stdout y Archivos ........................... 64
Resumiendo .................................................................................................................. 65
Linux es la imaginacin ....................................................................................... 65
9 - Permisos.................................................................................................... 88
Los propietarios, miembros del grupo, y todos los dems .......................................... 89
La lectura, la escritura, y ejecucin .............................................................................. 90
chmod - Cambia el modo de archivo ...................................................................... 92
Qu diablos es octal? ....................................................................................... 93
Ajuste de modo de archivo con la GUI .................................................................... 95
umask - Establecer permisos predeterminados ...................................................... 96
Algunos permisos especiales ............................................................................. 98
Cambio de Identidades ................................................................................................. 99
do - Ejecutar un depsito de Sustituto de usuario e ID de grupo ............................ 99
sudo - ejecutar un comando como otro usuario .................................................... 101
Ubuntu y sudo ................................................................................................... 101
chown - Cambiar propietario del archivo y de grupo ............................................. 102
chgrp - Cambia Propiedad del Grupo .................................................................... 103
El ejercicio de nuestros privilegios .............................................................................. 103
Cambio de la contrasea ............................................................................................ 106
Resumiendo ................................................................................................................ 107
Lectura adicional ......................................................................................................... 107
10 - Procesos................................................................................................ 108
Cmo un proceso funciona ....................................................................................... 108
Visualizacin de Procesos .......................................................................................... 109
Viendo Procesos dinmicamente con la parte superior ........................................ 111
El control de procesos................................................................................................. 113
Interrupcin de un proceso .................................................................................... 114
Poner un proceso en segundo plano ..................................................................... 114
Volviendo un proceso para el primer plano ........................................................... 115
Parada (pausa) Proceso A ..................................................................................... 116
Seales ....................................................................................................................... 117
El envo de seales a los procesos con kill ........................................................... 117
Envo de seales a mltiples procesos con killall .................................................. 120
Ms de procesos relacionados Comandos................................................................. 120
Resumiendo ................................................................................................................ 121
El
Medio
Ambiente.
IV
Lo que se almacena en el medio ambiente? .............................................................. 124
Lectura adicional
164
tambin
te
guste
299
aspell ...................................................................................................................... 299
Resumiendo ................................................................................................................ 303
Lectura adicional ......................................................................................................... 303
Crdito extra ................................................................................................................ 304
xn
Comandos Grupo Y subniveles .................................................................................. 487
Proceso de Sustitucin .......................................................................................... 491
Trampas....................................................................................................................... 493
Archivos temporales .......................................................................................... 495
xiii
xiv
Para
Karen
xv
Introduccin
I quiero contarles una historia.
No, no es la historia de cmo, en 1991, Linus Torvalds escribi la primera versin del kernel de
Linux. Usted puede leer esa historia en un montn de libros de Linux. Tampoco voy a contar
la historia de cmo, unos aos antes, Richard Stallman comenz el Proyecto GNU para crear
un Unix libre como sistema operativo. Eso es una historia importante tambin, pero la
mayora de los otros libros de Linux tienen que uno, tambin.
No, yo quiero contar la historia de cmo se puede recuperar el control de su ordenador.
Cuando empec a trabajar con los ordenadores como un estudiante de la universidad a finales
de 1970, hubo una revolucin en marcha. La invencin del microprocesador haba hecho
posible que la gente comn como usted y yo a poseer en realidad un ordenador. Es difcil para
muchas personas hoy en da imaginar lo que era el mundo cuando slo las grandes empresas
y el gran gobierno corran todos los ordenadores. Digamos, no se poda conseguir mucho por
hacer.
Hoy en da, el mundo es muy diferente. Las computadoras estn por todas partes, desde
diminutos relojes de pulsera a los centros de datos gigantes a todo lo dems. Adems de las
computadoras en todas partes, tambin tenemos una red ubicua conectndolos entre s. Esto
ha creado una nueva era maravillosa de empoderamiento personal y la libertad creativa, pero
en el ltimo par de dcadas, otra cosa que ha estado sucediendo. A pocas corporaciones
gigantes han estado imponiendo su control sobre la mayor parte de las computadoras del
mundo y decidir lo que puede y no puede hacer con ellos. Afortunadamente, la gente de todo
el mundo estn haciendo algo al respecto. Ellos estn luchando para mantener el control de
sus computadoras, escribiendo su propio software. Estn construyendo Linux.
Muchas personas hablan de "libertad" con respecto a Linux, pero no creo que la mayora de la
gente sabe lo que esto realmente significa la libertad. La libertad es el poder de decidir lo que
hace 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 te
importa lo suficiente para averiguarlo.
xvi
es escribiendo en un teclado!
La mayora de los usuarios de computadoras de hoy son slo familiarizado con la interfaz
grfica de usuario (GUI) y se les ha enseado por los vendedores y los expertos que la interfaz
de lnea de comandos (CLI) es una cosa aterradora del pasado. Esto es lamentable, porque una
buena interfaz de lnea de comandos es una manera maravillosamente expresiva de la
comunicacin con un ordenador de la misma forma en que la palabra escrita es para los seres
humanos. Se ha dicho que "las interfaces grficas de usuario hacen tareas fciles fcil, mientras
que las interfaces de lnea de comandos hacen tareas difciles posible", y esto es todava muy
cierto hoy en da.
Desde Linux sigue el modelo de la familia Unix de sistemas operativos, que comparte la
misma herencia rica de herramientas de lnea de comandos como Unix. Unix entr en la
prominencia durante la dcada de 1980 (aunque fue desarrollado por primera vez en la
dcada anterior), antes de la adopcin generalizada de la interfaz grfica de usuario y, como
resultado, desarroll una extensa interfaz de lnea de comandos en lugar. De hecho, una de las
razones ms fuertes los primeros usuarios de Linux lo eligieron sobre, por ejemplo, Windows
NT fue el potente interfaz de lnea de comandos que hizo las "tareas difciles posibles."
xvii
tura sistema Linux tiene literalmente miles de programas que usted puede emplear en la lnea
de comandos. Considrese advertido; el aprendizaje de la lnea de comandos no es un
esfuerzo ocasional.
Por otra parte, el aprendizaje de la lnea de comandos de Linux es muy gratificante. Si usted
piensa que usted es un "usuario avanzado" Ahora, slo tiene que esperar. Usted no sabe lo que
el poder real es-todava. Y, a diferencia de muchos otros conocimientos de informtica, el
conocimiento de la lnea de comandos es de larga duracin. Las habilidades aprendidas hoy
todava sern tiles dentro de diez aos. La lnea de comandos ha sobrevivido la prueba del
tiempo.
Tambin se asume que usted no tiene ninguna experiencia en programacin, pero que no se
preocupe, nosotros le empezamos por ese camino tambin.
Requisitos previos
Para utilizar este libro, todo lo que necesita es una instalacin de Linux trabajando. Usted
puede conseguir esto en una de dos maneras:
1. Instalar Linux en una (no tan nuevo) equipo. No importa que la distribucin que
usted elija, aunque la mayora de la gente hoy en da comienzan con cualquiera de
Ubuntu, Fedora, OpenSUSE o. En caso de duda, probar Ubuntu por primera vez. La
instalacin de una moderna distribucin de Linux puede ser ridculamente fcil o
ridculamente difcil dependiendo de su hardware. Sugiero una computadora de
escritorio que es un par de aos de edad y tiene por lo menos 256 megabytes de RAM
y 6 GB de espacio libre en el disco duro. Evite los ordenadores porttiles y redes
inalmbricas, si es posible, ya que estas son a menudo ms difcil conseguir trabajo.
2. Use un "Live CD". Una de las cosas interesantes que puedes hacer con ellos muchas
distribuciones de Linux se ejecuta directamente desde un CD-ROM (o unidad flash
USB) sin instalarlos en absoluto. Slo tienes que ir a la configuracin del BIOS y
configurar su computadora para "Arrancar desde CD-ROM", inserte el CD en vivo, y
reiniciar el sistema. El uso de un CD en vivo es una gran manera de probar un
ordenador para la compatibilidad de Linux antes de la instalacin. La desventaja de
usar un CD en vivo es que puede ser muy lenta en comparacin con tener Linux
instalado en su disco duro. Tanto Ubuntu y Fedora (entre otros) tienen versiones en
CD en vivo.
Independientemente de cmo instalar Linux, usted tendr que tener superusuario ocasional
(es decir, los privilegios administrativos) para llevar a cabo las lecciones de este libro.
Despus de tener una instalacin de trabajo, comenzar a leer y seguir con su propio
ordenador. La mayor parte del material de este libro es "manos en", por lo sentarse y llegar a
escribir!
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 que
escribiera un libro de secuencias de comandos de shell.
John C. Dvorak, seal el columnista y comentarista. En un episodio de su podcast de vdeo,
"Cranky Geeks," Sr. Dvorak describe el proceso de la escritura: "El infierno. Escribir 200
palabras al da y en un ao, usted tiene una novela. "Este consejo me llev a escribir una
pgina al da hasta que tuve un libro.
Dmitri Popov, escribi un artculo en la Revista de Software Libre titulado "Creacin de una
plantilla de libro con Writer", que me inspir a utilizar OpenOffice.org Writer para componer
el texto. Al final result que, funcion maravillosamente.
Marcos Polesky realiza una revisin extraordinaria y prueba del texto.
Jesse Becker, Tomasz Chrzczonowicz, Michael Levin, Spence Minero tambin probaron y
revisaron partes del texto.
Karen M. Shotts aport una gran cantidad de horas, puliendo mi llamado Ingls editando el
texto.
Y por ltimo, los lectores de LinuxCommand.org, Que me han enviado tantos correos
electrnicos amables. Su aliento me dio la idea de que yo estaba realmente en lo cierto!
Su regeneracin es necesaria!
Este libro es un proyecto en curso, al igual que muchos proyectos de software de cdigo
abierto. Si usted encuentra un error tcnico, mndenme una lnea en:
bshotts@users.sourceforge.net
Sus cambios y sugerencias pueden entrar en futuras versiones.
xx
Lectura adicional
stos son algunos de los artculos de Wikipedia sobre los personajes famosos
mencionados en este captulo: 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" cuestin de nomenclatura:
http://www.gnu.org/gnu/why-gnu-linux.html
http://www.gnu.org/gnu/ gnu-linux-faq.html # herramientas
Colofn
Este libro fue escrito originalmente usando OpenOffice.org Writer en fuentes de Liberacin
serif y sans en un Dell Inspiron 530N, fbrica configurados con Ubuntu 8.04. La versin PDF
del texto se genera directamente por OpenOffice.org Writer. La Segunda Edicin de Internet
se produjo en el mismo ordenador usando LibreOffice escritor en Ubuntu 12.04.
xxi
xxii
1 - Cul es la cscara?
1 - Cul es la cscara?
Cuando hablamos de la lnea de comandos, en realidad estamos hablando de la cscara. El
shell es un programa que toma los comandos del teclado y los pasa al sistema operativo para
llevar a cabo. Casi todas las distribuciones de Linux proporcionan un programa de shell de la
llamada fiesta de Proyecto GNU. El nombre de "fiesta" es un acrnimo de "Bourne Again
Shell", una referencia al hecho de bash es un sustituto mejorado para sh, el programa original
shell de Unix escrito por Steve Bourne.
Sus primeras
pulsaciones de teclas
leges.
Suponiendo que las cosas son buenas hasta ahora, vamos a tratar algunos de mecanografa.
Ingrese algn galimatas en el smbolo de este modo:
Histrico de comandos
Si pulsamos la tecla de flecha hacia arriba, veremos que el comando anterior "kaekfjaeifj"
vuelve a aparecer despus de la solicitud. Esto se llama la historia de comandos. La mayora
de las distribuciones de Linux recuerdan los ltimos 500 comandos por defecto. Pulse la tecla
de flecha hacia abajo y el comando anterior desaparece.
1 - Cul es la cscara?
[Me @ linuxbox ~] $ df
Filesystem
/ Dev / sda2
/ Dev / sda5
/ Dev / sda1
1K-blocks
Usado
15115452 5012392
59631908 26545424
147764
17370
Utilice
Disponible %
Montado en
9949716 34 /
% / Home
30008432 47
122765 %
13 / Boot
%
256856
256856
0% / dev / shm
Del mismo modo, para mostrar la cantidad de memoria libre, entre el mandato
libre.
[Me @ linuxbox ~] $ gratis
usado total
Mem: 513712
503976
- / + Buffers / cache: 375748
Intercambio: 1052248 104712
libre
9736
137964
947536
compartid
o
0
tampones
5312
cach
122916
Resumiendo
Al comenzar nuestro viaje, se nos presenta a la cscara y vemos la lnea de comandos, por
primera vez y aprender cmo iniciar y finalizar una sesin de terminal. Tambin vemos cmo
emitir algunos comandos simples y realizar un poco de edicin de lnea de comandos de la
luz. Eso no era tan temible era?
1 - Cul es la cscara?
Lectura adicional
Para aprender ms sobre Steve Bourne, padre de la Bourne Shell, consulte este artculo
de Wikipedia:
http://en.wikipedia.org/wiki/Steve Bourne
He aqu un artculo sobre el concepto de conchas en la computacin:
http://en.wikipedia.org/wiki/Shell (informtica)
2 -
Navegacin
2 - Navegacin
Lo primero que tenemos que aprender (adems de slo escribir) es cmo navegar el sistema de
archivos en nuestro sistema Linux. En este captulo vamos a introducir los siguientes
comandos:
CD - Directorio de Cambio
2 - Navegacin ____________________________________________________________________
Imagine que el sistema de archivos es una forma de un rbol al revs laberinto y somos
capaces de
Bft / h bin D h CD
de arranque de
exploracin y
produccin de
CD dev $ CD etc
lj casa i CD
bshotts | $ CD ftp
ih CD karen! CD
perdido encontr
+
0 CD .enlightenment r
CD .gnome-escritorio
que CD .gnome
[me @ linuxbox ~] $ ls
Documentos de Escritorio Msica Fotos Plantillas Pblicos Videos
Rutas absolutas
Una ruta absoluta comienza con el directorio raz y sigue la rama de un rbol por la rama hasta
que se complete la ruta de acceso al directorio o archivo deseado. Por ejemplo, hay un
directorio de su sistema en el que la mayor parte de los programas de su sistema estn
instalados. La ruta de acceso del directorio es / usr / bin. Esto significa que desde el directorio
raz (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 que
est lleno de archivos. Observe cmo ha cambiado la lnea de comandos? Para su
conveniencia, por lo general se estableci para mostrar automticamente el nombre del
directorio de trabajo.
Rutas relativas
Cuando una ruta absoluta comienza desde el directorio raz y conduce a su destino, un
nombre de ruta relativa empieza desde el directorio de trabajo. Para ello, utiliza un par de
smbolos especiales para representar posiciones relativas en el rbol del sistema de archivos.
Estos smbolos son especiales "." (Punto) y ".." (punto punto).
El "." smbolo se refiere al directorio de trabajo y el ".." smbolo se refiere a directorio padre del
directorio de trabajo. Aqu es cmo funciona. Vamos a cambiar el directorio de trabajo a
9
2 - Navegacin /
usr / bin de nuevo:
[Me @ linuxbox ~] $ cd / usr / bin [me
@ bin linuxbox] $ pwd / usr / bin
Bien, ahora vamos a decir que queramos cambiar el directorio de trabajo al padre de / usr /
bin, que es / usr. Podramos hacer que dos maneras diferentes. Ya sea con una ruta absoluta:
Ahora, hay algo importante que debo sealar aqu. En casi todos los casos, se puede
10
11
Resumiendo
En este captulo hemos visto cmo la cscara trata la estructura de directorios del sistema.
Aprendimos sobre nombres de ruta absolutos y relativos y los comandos bsicos que se
utilizan para moverse por esa estructura. En el prximo captulo vamos a utilizar este
conocimiento para ir en un tour de un moderno sistema Linux.
12
3 Exploracin
sistema
del
Ahora que sabemos cmo mover todo el sistema de archivos, es el momento para una visita
guiada de nuestro sistema Linux. Antes de empezar, sin embargo, vamos a aprender algunos
comandos ms que sern tiles a lo largo del camino:
[me @ linuxbox ~] $ ls
Documentos de Escritorio Msica Fotos Plantillas Pblicos Videos
Adems 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
Ms diversin con ls
El comando ls es probablemente el comando ms utilizado, y por una buena razn. Con l,
podemos ver el contenido del directorio y determinar una variedad de atributos de archivos y
directorios importantes. Como hemos visto, podemos simplemente entrar ls para ver una lista
de archivos y subdirectorios contenidos en el directorio de trabajo actual:
O incluso especificar varios directorios. En este ejemplo vamos a enumerar tanto el directorio
del usuario domstico (simbolizada por el carcter "~") y el directorio / usr:
13
3 - la exploracin del
sistema
Documentos de Escritorio Msica Fotos Plantillas Pblicos Videos
/ Usr:
papelera
src
etc
incluir
juegos
kerberos
libexec sbin
lib
local
cuota
tmp
Opciones y argumentos
Esto nos lleva a un punto muy importante sobre el funcionamiento de la mayora de los
comandos. Comandos suelen ir seguidas de una o ms opciones que modifican su
comportamiento, y, adems, por uno o ms argumentos, los artculos sobre los que los actos
de comando. As que la mayora de los comandos se ven un poco como esto:
comando -Opciones
argumentos
La mayora de los comandos utilizan las opciones que consisten de un solo carcter precedido
por un guin, por ejemplo, "-l", pero muchos de los comandos, entre ellos los del Proyecto
GNU, tambin admiten opciones largas, que consiste en una palabra precedida de dos
guiones. Adems, muchos comandos permiten mltiples opciones cortas que se encadenan
juntos. En este ejemplo, el comando ls se le da dos opciones, la opcin "l" para producir la
salida de formato largo, y la opcin de "t" para ordenar el resultado por hora de modificacin
del archivo.
[Me @ linuxbox ~] $ ls -lt
14
Ms diversin con ls
Tenga en cuenta que las opciones de comando, al igual que los nombres de archivos en
Linux, entre maysculas y minsculas.
El comando ls tiene un gran nmero de opciones posibles. Los ms comunes se enumeran en
la Tabla 3-1.
Tabla 3-1: Es comn Opciones
Opcin
-a
Largo Opcin
--all
-A
--casi todo-
Descripcin
Haga una lista de todos los archivos, incluso los
que tienen nombres que comienzan con un
perodo, que normalmente no figuran (es decir,
oculto).
Al igual que la opcin -a anterior, excepto que no
lista. (Directorio actual) y .. (directorio padre).
-d
--directory
Normalmente, si se especifica un directorio, LS
listar el contenido del directorio, no el propio directorio. Utilice esta opcin junto con la
opcin -l para ver detalles sobre el directorio en lugar de su contenido.
-F
--classify
Esta opcin aadir un carcter 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 tamao
de los archivos en formato legible para las
personas en lugar de en bytes.
-l
Mostrar resultados en formato largo.
-r
--reverse
Mostrar los resultados en orden inverso.
Normalmente, ls muestra sus resultados en orden
alfabtico ascendente.
-S
-t
15
-r--r--r--r--r--r--r--r--r--r--r--
1 raz raz
3576296 2007-04-03 11 05 Experiencia ubuntu.ogg
1 raz raz
1186219 2007-04-03 11 05 kubuntu-leaflet.png
1 raz raz
47584 2007-04-03 11 05 logo-Edubuntu.png
1 raz raz
44355 2007-04-03 11 05 logo-Kubuntu.png
1 raz raz
34391 2007-04-03 11 05 logo-Ubuntu.png
1 raz raz
32059 2007-04-03 11 05 oo-cd-cover.odf
1 raz raz
159744 2007-04-03 11 05 oo-derivatives.doc
1 raz raz
27837 2007-04-03 11 05 oo-maxwell.odt
1 raz raz
98816 2007-04-03 11 05 oo-trig.xls
453764 2007-04-03 11 05 oo-welcome.odt
1 raz raz
358374 2007-04-03 11 05 ubuntu Sax.ogg
1 raz raz
Echemos un vistazo a los diferentes campos de uno de los archivos y examinar sus
significados:
Tabla 3-2: Es campos Listing largas
Campo
-rw-r - r--
raz
Significado
Los derechos de acceso al archivo. El primer carcter indica el
tipo de archivo. Entre los diferentes tipos, un guin que lleva
significa un archivo normal, mientras que una "d" indica un
directorio. Los siguientes tres caracteres son los derechos de
acceso para el propietario del archivo, el prximo tres son
para los miembros del grupo del archivo, y la final tres son
para todos los dems. El significado completo de esto se
discute en el Captulo 9 - Permisos.
Nmero de archivo de enlaces duros. Vase el anlisis de los
vnculos ms adelante en este captulo.
El nombre de usuario del propietario del archivo.
raz
32059
2007-04-03 11:05
oo-cd-cover.odf
16
archivo de
nombre de
archivo
como "picture.jpg" para contener una imagen JPEG comprimida, no se requiere que en Linux.
Podemos invocar el comando de archivo de esta manera:
Qu es el "texto"?
Hay muchas formas de representar la informacin en un ordenador. Todos los
mtodos implican la definicin de una relacin entre la informacin y algunos
nmeros que se utilizarn para representarla. Computadoras, despus de todo, slo
entienden nmeros y todos los datos se convierten a la representacin numrica.
Algunos de estos sistemas de representacin son muy complejos (como los archivos
de vdeo comprimido), mientras que otros son bastante simples. Uno de los primeros
y ms simple se llama texto ASCII. ASCII (pronunciado "Como-Key") es la abreviatura
de American Standard
lecciones, veremos qu tan cierto que la declaracin 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 extraa.
17
3 - la exploracin del
sistema
Cdigo para el Intercambio de Informacin. Se trata de un esquema de codificacin
simple que fue utilizado por primera vez en las mquinas de teletipo para mapear los
caracteres del teclado a los nmeros.
El texto es una sencilla asignacin uno a uno de los personajes a los nmeros. Es muy
compacto. Cincuenta caracteres de texto se traduce a cincuenta bytes de datos. Es
importante entender que slo texto contiene un mapeo simple de caracteres que
nmeros. No es lo mismo que un documento de procesador de textos, como uno
creado por OpenOffice.org Writer o Microsoft Word. Esos archivos, en contraste con
texto ASCII simple, contienen muchos elementos no son de texto que se utilizan para
describir su estructura y formato. Archivos de texto plano ASCII contienen slo los
propios y unos cdigos de control rudimentarias como tabuladores, retornos de carro
y avances de lnea 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. Incluso
Windows reconoce la importancia de este formato. El programa NOTEPAD.EXE bien
es unaeditor
deexaminar
archivos de
ASCIIde
sintexto?
formato.
Porconocido
qu bamos
querer
lostexto
archivos
Debido a que muchos de los
archivos que contienen los ajustes del sistema (llamados archivos de configuracin) se
almacenan en este formato, y ser capaz de leerlos nos da una idea de cmo funciona el
sistema. Adems, muchos de los programas reales que utiliza el sistema (llamados scripts) se
almacenan en este formato. En captulos posteriores, vamos a aprender cmo editar archivos
de texto con el fin de modificar la configuracin de los sistemas y escribir nuestros propios
guiones, pero por ahora nos limitaremos a mirar su contenido.
El comando se utiliza menos como esto:
menos el
nombre de
archivo
Una vez iniciado, el programa less le permite desplazarse hacia adelante y hacia atrs a travs
de un archivo de texto. Por ejemplo, para examinar el archivo que define todas las cuentas de
usuario del sistema, escriba el siguiente comando:
18
Menos es ms
Cuanto menos programa fue diseado como un reemplazo de la mejora de un
programa anterior de Unix llamada ms. El nombre de "menos" es un juego en la frase
"menos es ms" -a lema de arquitectos modernistas y diseadores.
menos cadas en la clase de programas llamados programas que permiten la fcil
Tabla
3-3: Comandos
visualizacin
demenos
documentos de texto largo en una pgina por pgina de manera
"buscapersonas". Considerando que el programa podra ms adelante slo la pgina,
Comando
Accin
el programa permite menos
paginacin tanto hacia delante como hacia atrs y tiene
muchas
tambin.
Pg
o b otras caractersticas
Vaya
a la pgina anterior
Av Pg o espacio
Flecha arriba
Flecha abajo
G
1G o g
/ caracteres
Salga menos
Recuerde que el copiar y pegar truco! Si est utilizando un ratn, puede hacer doble clic
en 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 estn en gran medida
prohibidos de ensuciar las cosas. Ese es el trabajo de los administradores de sistema! Si un
comando se queja de algo, simplemente pasar a otra cosa. Pasa algn tiempo mirando a su
alrededor. El sistema es el nuestro para explorar. Recuerde, en Linux, no hay secretos!
Tabla 3-4 enumera slo algunos de los directorios que podemos explorar. Sintase libre de
probar ms!
Tabla 3-4: Directorios encontrados en sistemas Linux
Directorio
/
/ Bin
Comentarios
El directorio raz. Dnde empieza todo.
Contiene binarios (programas) que deben estar presentes para
que el sistema arranque y funcionamiento.
Contiene el kernel de Linux, imagen de disco RAM inicial (para
los conductores necesarios en el arranque), y el gestor de
arranque.
/ Boot
Archivos de inters:
/ Dev
20
Una visita guiada
Directorio
/ Etc
Comentarios
El / etc directorio contiene todos los archivos de configuracin
de todo el sistema. Tambin contiene una coleccin de scripts de
shell que se inician cada uno de los servicios del sistema en el
arranque. Todo en este directorio debe ser un texto legible.
/ Home
/ Lib
/ Perdido
encontrado +
/ medios
/ Mnt
/ Opt
21
/ Tmp
/ Usr
/ Usr / bin
/ Usr / lib
/ Usr / local
/ Usr / sbin
/ Usr / share
22
Directorio
/ Var
Comentarios
Con la excepcin de / tmp y / home, los directorios que hemos
visto hasta el momento siguen siendo relativamente esttico, es
decir, sus contenidos no cambian. El rbol de directorios / var es
donde se almacenan los datos que es probable que cambie.
Varias bases de datos, archivos de cola, correo de usuario, etc., se
encuentran aqu.
/ Var / log contiene archivos de registro, registros de diversas
actividades del sistema. Estos son muy importantes y deben ser
vigilados de vez en cuando. La ms til es / var / log /
messages. Tenga en cuenta que por razones de seguridad en
algunos sistemas, debe ser superusuario para ver los archivos de
registro.
/ Var / log
Enlaces simblicos
Al mirar alrededor, que es probable que veamos un listado de directorios con una entrada
como esta:
lrwxrwxrwx 1 raz
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 simblico (tambin conocido como
enlace blando o enlace bolo.) En sistemas ms Unix que es posible tener un archivo
referenciado por varios nombres. Mientras que el valor de este puede no ser obvio, es
realmente una caracterstica til.
Imagnese este escenario: Un programa requiere el uso de un recurso compartido de una
especie que figura en un archivo llamado "foo", pero "foo" tiene cambios de versin frecuentes.
Sera bueno incluir el nmero de versin en el nombre del archivo para que el administrador u
otra parte interesada poda ver qu versin de "foo" se instala. Esto presenta un problema. Si
cambiamos el nombre del recurso compartido, tenemos que localizar a cada programa que
pueda usarlo y modificarlo para buscar un nuevo nombre de recurso cada vez que se instala
una nueva versin del recurso. Eso no suena como la diversin en absoluto.
Aqu es donde los enlaces simblicos salvar el da. Digamos que instalar la versin 2.6 de
"foo", que tiene el nombre de archivo "foo-2.6" y luego crear un enlace simblico llamado
simplemente "foo" que apunta a "foo-2.6." Esto significa que cuando un programa se abre el
archivo " 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 todava podemos ver lo que la
versin actual instalada. Cuando es el momento de actualizar a "foo-2.7," que acabamos de
agregar el archivo a nuestro sistema, eliminar el enlace simblico "foo" y crear una nueva que
apunta a la nueva versin. Esto no slo resuelve el problema de la actualizacin de la versin,
sino que tambin nos permite mantener ambas versiones en nuestra mquina. Imagina que
"foo-2.7" tiene un error (maldita aquellos desarrolladores!) Y tenemos que volver a la versin
antigua. Una vez ms, acabamos de eliminar el vnculo simblico que apunta a la nueva
versin y crear una nueva
23
3 - Exploracin del sistema ________________________________________________________
enlace simblico que apunta a la versin antigua.
El listado del directorio anterior (desde el directorio / lib de un sistema Fedora) muestra un
enlace simblico 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 realidad
obtener el archivo" libc-2.6.so. "Vamos a aprender cmo crear enlaces simblicos en el
prximo captulo.
Enlaces duros
Ya que estamos en el tema de los vnculos, tenemos que mencionar que hay un segundo tipo
de enlace llamado un enlace duro. Los enlaces duros tambin permitir que los archivos que
tienen varios nombres, pero lo hacen de una manera diferente. Hablaremos ms sobre las
diferencias entre los enlaces simblicos y duros en el prximo captulo.
Resumiendo
Con nuestro tour detrs de nosotros, hemos aprendido mucho acerca de nuestro sistema.
Hemos visto varios archivos y directorios y sus contenidos. Una cosa que usted debe tomar
distancia de todo esto es el grado de apertura del sistema es. En Linux hay muchos archivos
importantes que son texto sin formato legible por humanos. A diferencia de muchos sistemas
propietarios, Linux hace todo lo disponible para su examen y estudio.
Lectura adicional
24
4 - Manipulacin
directorios
de
archivos
m k d i r - Crear directorios
-u cp * .html destino
directorio de destino o son ms recientes que las versiones en la carpeta de destino? Bastante
duro con un administrador de archivos. Bastante fcil con la lnea de comandos:
Los comodines
Antes de comenzar el uso de nuestros comandos, tenemos que hablar de una funcin de shell
que hace que estos comandos de manera poderosa. Desde el shell utiliza nombres de archivo
tanto, proporciona caracteres especiales para ayudarle a especificar rpidamente grupos de
nombres de archivo. Estos caracteres especiales son
25
Comodn
*
Significado
Coincide con cualquier carcter
[personajes]
[! caracteres]
[[: Clase:]]
Carcter de clase
Significado
[: Alnum:]
[: Alpha:]
[: Dgito:]
[: Lower:]
[: Upper:]
Patrn
*
Cerillas
Todos los archivos
g*
b * .txt
26
Los comodines
Datos ???
[Abc] *
COPIA DE SEGURIDAD. [0-9]
[0-9] [0-9]
[[: Upper:]] *
[[: Dgito:]] *
* [[: Lower:] 123]
Los comodines se pueden usar con cualquier comando que acepta nombres de archivo como
argumentos, pero vamos a hablar ms sobre esto en el captulo 7.
Rangos de caracteres
Si usted viene de otro entorno Unix o ha estado leyendo algunos otros libros sobre
este tema, es posible que haya encontrado el [AZ] o los [AZ] notaciones rango de
caracteres. Estas son las notaciones tradicionales de Unix y trabajaron en las versiones
anteriores de Linux tambin. An as, pueden trabajar, pero hay que tener mucho
cuidado 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 clases
de caracteres en lugar.
28
-v, --verbose
cp -i archivol archivo2
cp archivol archivo2 dirl
dirl cp / * dir2
Resultados
Copie archivo1 a archivo2. Si existe archivo2, se sobrescribe
con el contenido de archivol. Si archivo2 no existe, se crea.
29
elemento mv ...
directorio
despus de la operacin. 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 ms objetos de un directorio a otro.
Opcin
-i, --interactive
-u, --update
-v, --verbose
30
Significado
Antes de sobrescribir un archivo existente, pedir
confirmacin al usuario. Si no se especifica esta opcin, se
mv silencio sobrescribir archivos.
Al mover archivos de un directorio a otro, slo mover
archivos que o bien no existen, o son ms recientes que los
archivos correspondientes existentes en el directorio de
destino.
Mostrar mensajes informativos como el movimiento es
elemento
rm ...
realizado.
Comando
archivo2 mv archivol
mv -i archivol archivo2
Resultados
Mueva archivo1 a archivo2. Si existe archivo2, se sobrescribe
con el contenido de archivol. Si archivo2 no existe, se crea. En
cualquier caso, archivol deja de existir.
Igual que el anterior, excepto que si existe archivo2, se
solicita al usuario antes de que se sobrescribe.
Opcin
Significado
-i, --interactive Antes de borrar un archivo existente, solicitar al usuario
confirmacin. Si no se especifica esta opcin, rm
silenciosamente eliminar archivos.
31
rm -r archivol dirl
rm -rf archivol dirl
Resultados
Eliminar archivol silencio.
Igual que el anterior, excepto que se solicita al usuario
que confirme antes de realizar la eliminacin.
Eliminar archivol y dirl y su contenido.
Igual que el anterior, excepto que si bien archivol o dirl
no existen, rm continuar en silencio.
32
archivos que se eliminarn. A continuacin, pulse la tecla de flecha hacia arriba para
recuperar el comando y vuelva a colocar los ls con rm.
rm - Quitar los archivos y directorios
ln - Crear enlaces
El comando ln se utiliza para crear vnculos, ya sea duro o simblicos. Se utiliza en una de dos
vnculo de
archivo ln
enlace elemento
ln -s
maneras:
para crear un enlace duro, y:
para crear un enlace simblico donde "elemento" es un archivo o un directorio.
Enlaces duros
Los enlaces duros son la manera original de Unix de crear vnculos, en comparacin con los
enlaces simblicos, que son ms modernos. De forma predeterminada, cada archivo tiene un
nico vnculo fsico que da el archivo su nombre. Cuando creamos un vnculo fsico, creamos
una entrada de directorio adicional para un archivo. Los enlaces duros tienen dos limitaciones
importantes:
1. Un enlace duro no puede hacer referencia a un archivo fuera de su propio sistema de
archivos. Esto significa que un enlace no puede hacer referencia a un archivo que no
est en la misma particin 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 simblico,
cuando la lista de un directorio que contiene un enlace duro ver ninguna indicacin especial
del enlace. Cuando se elimina un enlace duro, se quita el enlace, pero se borran los contenidos
del archivo en s siguen existiendo (es decir, su espacio no se desasigna) hasta que todos los
vnculos al archivo.
Es importante ser consciente de los vnculos fsicos, ya que podra encontrarse con ellos de vez
en cuando, pero la prctica moderna prefiere enlaces simblicos, que vamos a cubrir la
prxima.
Enlaces simblicos
Los enlaces simblicos se crearon para superar las limitaciones de los enlaces duros. Los
enlaces simblicos de trabajo mediante la creacin de un tipo especial de archivo que contiene
un puntero de texto al archivo o referencia
33
Creacin de directorios
El comando mkdir se utiliza para crear un directorio. Para crear nuestro directorio patio que
primero se asegurar de que estamos en nuestro directorio home y crear el nuevo directorio:
Copia de archivos
A continuacin, vamos a obtener algunos datos en nuestro patio de recreo. Haremos esto
mediante la copia de un archivo. Uso de la 34
16:40 dirl
16:40 dir2
16:07 passwd
Ahora, slo por diversin, vamos a repetir la copia mediante la opcin "-v" (detallado) para
ver 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 indicando
qu operacin que estaba realizando. Observe que cp sobrescribi la primera copia sin
ninguna advertencia. Una vez ms se trata de un caso de cp asumiendo que sabes lo que ests
haciendo. Para obtener una advertencia, vamos a incluir la opcin "-i" (interactivo):
35
4 - La manipulacin de archivos y
directorios
Vamos a pasar a la diversin en torno a un poco moviendo nuestro archivo renombrado a
cada uno de los directorios y de vuelta:
Tenga en cuenta que, dado que ya exista dir2, mv traslad dirl en dir2. Si no hubieran
existido dir2, mv habra cambiado el nombre a dirl dir2. Por ltimo, vamos a poner todo de
vuelta:
[Me @ patio linuxbox] $ mv dir2 / diri. [Me @ patio
linuxbox] $ mv diri / diversin.
36
37
4 - La manipulacin de archivos y
directorios
12353538 -rw-r - r-- me 4 me 1650 2008-01-10 16:33-diversin duro
En esta versin de la lista, el primer campo es el nmero de inodo y, como podemos ver, a la
vez divertido y compartir la diversin dura el mismo nmero de inodo, lo que confirma que
son el mismo archivo.
La lista para la diversin-sym en dir1 muestra que es un enlace simblico de la "l" que lleva en
el primer campo y que apunte a "../fun", lo cual es correcto. En relacin con la ubicacin de la
diversin-sym, diversin est en el directorio por encima de ella. Observe tambin que la
duracin del archivo de enlace simblico es 6, el nmero de caracteres en el "../fun" cadena en
lugar de la longitud del archivo al que se est apuntando.
Al crear enlaces simblicos, puede utilizar nombres de ruta absolutos:
38
m
m
m
m
m
m
m
m
m
m
m
m
4096 2008
4 2008
4096 2008
1650 2008
1650 2008
3 2008
m
m
m
m
m
m
m
m
m
m
4096 2008
4 2008
4096 2008
1650 2008
3 2008
39
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 obtener
una buena comprensin de los comandos bsicos de manipulacin de archivos y comodines.
No dude en ampliar el ejercicio parque aadiendo ms archivos y directorios, utilizando
comodines para especificar archivos para diversas operaciones. El concepto de enlaces es un
poco confuso al principio, pero se toma el tiempo para aprender cmo funcionan. Ellos
pueden ser un verdadero salvavidas.
Lectura adicional
Una discusin de los enlaces simblicos: enlace http://en.wikipedia.org/wiki/Symbolic
41
42
La identificacin de los
comandos
escriba
command
donde "comando" es el nombre del comando que desea examinar. He aqu algunos ejemplos:
Aqu vemos los resultados para tres comandos diferentes. Tenga en cuenta que el de ls
(tomado de un sistema Fedora) y cmo el comando ls es en realidad un alias para el comando
ls con la "- color = tty" opcin aaden. Ahora sabemos por qu la salida de ls se muestra en
color!
44
45
programa
man
5 - Trabajar con los comandos
donde "programa" es el nombre del comando para ver.
Las pginas man varan un poco en el formato, pero generalmente contienen un ttulo, un
resumen de la com - sintaxis del comando, una descripcin del propsito de la orden, y una
lista y descripcin de cada una de las opciones del comando. Las pginas man, sin embargo,
[me @ linuxbox ~] $ man ls
no suelen incluir ejemplos, y pretenden ser una referencia, no un tutorial. Como ejemplo,
vamos a intentar ver la pgina del manual para el comando ls:
En la mayora de los sistemas Linux, el hombre utiliza menos para mostrar la pgina de
manual, por lo que todos los familiares menos comandos funcionan mientras se visualiza la
pgina.
Los "manuales" que el hombre muestra se divide en secciones y no slo abarca los comandos
del usuario, sino tambin los comandos de administracin de sistemas, interfaces de
programacin, formatos de archivos y mucho ms. La siguiente tabla describe el diseo del
manual:
Tabla 5-1: Hombre Organizacin Pgina
Secci
n
1
Contenido
Los comandos de usuario
4
5
6
7
Miscelneo
Comandos de administracin del sistema
A veces tenemos que mirar en una seccin especfica del manual para encontrar lo que
estamos buscando. Esto es particularmente cierto si estamos buscando un formato de archivo
que es tambin el nombre de un comando. Sin especificar un nmero de seccin, siempre
vamos a obtener la primera instancia de un partido, probablemente en el apartado 1. Para
especificar un nmero de seccin, utilizamos hombre como este: 46
Obtencin de documentacin de un
comando
seccin de hombre
SEARCH_TERM
Por ejemplo:
~] $ A
[Me @ linuxbox
propsito flexible
create_floppy_devices (8)
- Llamada udev para crear todo posible dispositivo de
disco flexible en funcin 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 daados
en la FAT
mformat
(1)
- Aadir un sistema de archivos MS-DOS en un disquete
formateado de bajo nivel
El primer campo de cada lnea de la salida es el nombre de la pgina de manual, el segundo
campo muestra la seccin. Tenga en cuenta que el comando man con la opcin "-k" realiza la
misma funcin exacta como a propsito.
47
El programa 'ls' contiene informacin sobre los archivos (de cualquier tipo, incluyendo
directorios). Opciones y argumentos de archivo se pueden mezclar de manera arbitraria,
como de costumbre.
Para que no sean opciones argumentos de lnea de comandos que son directorios,
listas predeterminadas por 'ls' el contenido de los directorios, no de forma recursiva y
archivos omitiendo con nombres que comienzan con '.'. Para otros argumentos que no
sean opciones, por listas predeterminadas 'ls' slo el nombre de archivo. Si no se
especifica ningn argumento que no es opcin, 'ls' opera en el directorio actual, actuando
como si hubiera sido invocada con un solo argumento de '.'.
48
Comando
?
Accin
Mandato Visualizar ayuda
Re Pg o Retroceso
AvPg o Espacio
p
u
Entrar
Dejar de
La mayora de los programas de lnea de comandos que hemos discutido hasta ahora son
parte del paquete "coreutils" del Proyecto GNU, por lo que escribir:
[Me @ linuxbox ~] $
Informacin
coreutils
se mostrar una pgina de men con enlaces a cada programa que figura en el paquete
coreutils.
49
_
tmp compartido local
sbin src
Como podemos ver, hemos combinado tres comandos en una sola lnea. Primero cambiamos
el 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 esta
secuencia en un nuevo comando utilizando alias. Lo primero que tenemos que hacer es soar
un nombre para nuestro nuevo comando. Vamos a tratar de "prueba". Antes de hacer eso,
sera una buena idea para saber si ya se est utilizando el nombre de "prueba". Para
averiguarlo, podemos utilizar el comando de nuevo tipo:
[Me @ linuxbox ~] test test $ type
es una orden interna del shell
Huy! El nombre de "prueba" ya est en uso. Vamos a
tratar de "foo":
[Me @ linuxbox ~] $ foo tipo
bash: Tipo: foo: No encontrado
50
nombre de alias =
'cadena'
Despus de que el "alias" de comandos que le damos un nombre de alias seguido
inmediatamente (sin espacio en blanco permitido) por un signo igual, seguido
inmediatamente por una cadena entre comillas que contiene el significado que se asignar al
nombre. Despus definimos nuestros alias, se puede utilizar en cualquier lugar de la cscara
esperara un comando. Vamos a intentarlo:
[Me @ linuxbox ~] $ Foo
juegos bin
kerberos
etc incluyen
lib
/ Home / me
[Me @ linuxbox ~] $
lib64
libexec
Tambin podemos utilizar el comando tipo de nuevo para ver nuestras alias:
51
Resumiendo
Ahora que ya hemos aprendido cmo encontrar la documentacin de comandos, vaya y vea la
documentacin para todos los comandos que hemos encontrado hasta ahora. Estudiar qu
opciones adicionales estn disponibles y probarlos!
Lectura adicional
Hay muchas fuentes en lnea de documentacin para Linux y la lnea de comandos. stos son
algunos de los mejores:
52
El Manual de Referencia de Bash es una gua de referencia para el shell bash. Sigue
siendo una obra de referencia, pero contiene ejemplos y es ms fcil de leer que la
pgina
de
manual
de
bash.
http://www.gnu.org/software/bash/manual/bashref.html
El Bash FAQ contiene respuestas a las preguntas ms frecuentes en relacin con bash.
Esta lista tiene como objetivo intermedio para usuarios avanzados, pero contiene una
gran cantidad de buena informacin.
http://mywiki.wooledge.org/BashFAQ
6 Redireccin
- Redireccin
En esta leccin vamos a dar rienda suelta a lo que puede ser la mejor caracterstica de la lnea
de comandos. Se llama redireccin de E / S. El "I / O" significa de entrada / salida y con esta
instalacin se puede redirigir la entrada y la salida de los comandos hacia y desde archivos,
as como conectar varios comandos juntos en potentes tuberas de mando. Para mostrar esta
instalacin, vamos a introducir los siguientes comandos:
wc - de nueva lnea de impresin, palabra, y los recuentos de bytes para cada archivo
53
6 - redireccin
E / S de redireccin permite que cambiemos donde la produccin va y de donde viene la
entrada de. Normalmente, la produccin va a la pantalla de entrada y viene desde el teclado,
pero con E / S de la redireccin, podemos cambiar eso.
_______________________________________________________Redireccin
estndar
de
la
salida
para redirigir el error estndar en un minuto, pero en primer lugar, echemos un vistazo a lo
que 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 redireccin, el archivo de destino est siempre reescrito desde el principio.
Desde nuestro comando ls genera ningn resultado y slo un mensaje de error, la operacin
de redireccin comenz a reescribir el archivo y luego se detuvo a causa del error, lo que
resulta en su truncamiento. De hecho, si alguna vez necesitamos para truncar en realidad un
archivo (o crear un archivo nuevo, vaco) podemos utilizar un truco como esto:
puede producir una salida en cualquiera de varias secuencias de archivo numerados. Si bien
nos hemos referido a los tres primeros de estos flujos de archivos como estndar de entrada,
salida y error, los internamente referencias shell como descriptores de archivo 0, 1 y 2,
[Me @ linuxbox ~] $ ls -l / bin / usr 2> ls-error.txt
respectivamente. El shell proporciona una notacin para la reorientacin de archivos
utilizando el nmero de descriptor de archivo. Desde error estndar es el mismo que el
descriptor de archivo nmero 2, podemos redirigir el error estndar con esta notacin:
El descriptor de archivo "2" se coloca inmediatamente antes de que el operador de redireccin
para llevar a cabo la reorientacin de error estndar para el archivo ls-error.txt.
La reorientacin de error
estndar
redireccin
combinado:
[Me @ linuxbox ~] $ ls -l / bin / usr y> ls-output.txt
En este ejemplo, utilizamos la nica notacin y> para redirigir tanto la salida estndar y error
estndar para el archivo ls-output.txt. Tambin puede aadir los flujos de salida y de error
estndar estndar en un solo archivo de este modo:
6 - redireccin
gato [archivo
...]
En la mayora de los casos, se puede pensar de gato como anloga al comando TYPE de DOS.
Se puede utilizar para mostrar los archivos sin paginacin, por ejemplo:
Reorientacin de la entrada
estndar
final alcanzado de archivo (EOF) en la entrada
estndar:
[Me @ linuxbox ~] $ cat
El rpido zorro marrn salt sobre el perro
perezoso.
El rpido zorro marrn salt sobre el perro perezoso.
A falta de argumentos de nombre de archivo, gato copias de entrada estndar a la salida
estndar, por lo que vemos nuestra lnea de texto repetido. Podemos utilizar este
comportamiento para crear archivos de texto cortos. Digamos que hemos querido crear un
archivo llamado "lazy_dog.txt" que contiene el texto en nuestro ejemplo. Queremos hacer esto:
Tuberas
La capacidad de los comandos para leer datos de la entrada estndar y enviar a la salida
estndar es
59
6 - redireccin
utilizado por una funcin de shell llamado tuberas. Usando el operador de la tubera "|"
(barra vertical), la salida estndar de un comando se puede canalizar en la entrada estndar
de otro:
commandl | Comando2
Para demostrar plenamente esto, vamos a necesitar algunos comandos. Recuerdas cmo nos
dijeron que no haba uno que ya saban que acepta la entrada estndar? Es menos. Podemos
usar menos para mostrar, pgina por pgina, la salida de cualquier comando que enva sus
resultados a la salida estndar:
La diferencia entre> y |
A primera vista, puede ser difcil de entender la redireccin realizada por el operador
de canalizacin | frente al operador de redireccin>. En pocas palabras, el operador
de redireccin conecta un comando con un archivo mientras que el operador de la
tubera se conecta la salida de un comando con la entrada de un segundo mandato.
commandl > Archivol
commandl | comando2
Mucha gente va a tratar lo siguiente cuando estn aprendiendo acerca de los
oleoductos, "slo 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 de
servidor basado en Linux. Como superusuario, lo hizo:
# cd / usr / bin
# ls> menos
60
Filtros
Las tuberas se utilizan a menudo para llevar a cabo operaciones complejas en los datos. Es
posible poner varios comandos juntos en un oleoducto. Con frecuencia, los comandos que se
utilizan de esta manera se conocen como filtros. Filtros toman de entrada, cambiar de alguna
manera y luego la salida l. El primero de ellos vamos a tratar es una especie. Imaginemos que
[Me @ linuxbox ~] $ ls / bin / usr / bin | sort | menos
queramos 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 habra consistido
en dos listas ordenadas, una para cada directorio. Con la inclusin de una especie en nuestra
cartera, hemos cambiado los datos para producir una sola, lista ordenada.
6 - redireccin
[Me @ linuxbox ~] $ ls / bin / usr / bin | sort | Uniq -d | menos
62
bunzip2
bzip2
gunzip
gzip
abrir la
cremallera
cremallera
zipcloak
zipgrep
zipinfo
zipnote
zipsplit
Tuberas
Hay un par de opciones tiles para grep: "-i", que hace que grep para ignorar el caso cuando se
realiza la bsqueda (normalmente bsquedas entre maysculas y minsculas) y "-v", que le
dice a grep para slo las lneas de impresin que no coinciden con el patrn.
8:58 [
13:39 411toppm
14:27 a2p
20:16 a52dec
10:56
04:21
12:23
12:23
5:22
Nueva
zonetab2pot.py
zonetab2pot.pyc
zonetab2pot.pyo
zsoelim -> soelim
63
Tuberas
[Me @ linuxbox ~] $ ls / usr / bin | tee ls.txt | grep postal
bunzip2
bzip2
gunzip
gzip
abrir la cremallera
cremallera
zipcloak
zipgrep
zipinfo
zipnote
zipsplit
Resumiendo
Como siempre, echa un vistazo a la documentacin de cada uno de los comandos que hemos
cubierto en este captulo. Slo hemos visto su uso ms bsico. Todos ellos tienen una serie de
opciones interesantes. A medida que adquirimos experiencia en Linux, veremos que la
funcin de redireccin de la lnea de comandos es extremadamente til para la solucin de
problemas especializados. Hay muchos comandos que hacen uso de la entrada y salida
estndar, y casi todos los programas de lnea de comandos utilizan error estndar para
mostrar sus mensajes informativos.
Linux es la imaginacin
Cuando se me pide que explique la diferencia entre Windows y Linux, a menudo
utilizo una analoga juguete.
Windows es como una Game Boy. Vas a la tienda y comprar uno totalmente nuevo y
brillante en el cuadro. Usted toma a su casa, lo enciende y jugar con l. Bonitos
grficos, sonidos lindos. Despus de un tiempo, sin embargo, usted se cansa del juego
que vino con l por lo que ir de nuevo a la tienda y comprar otro. Este ciclo se repite
una y otra. Por ltimo, usted va a la tienda y decir a la persona detrs del mostrador,
"Quiero un juego que hace esto!", Slo para que le dijeran que no existe tal juego,
porque no hay "demanda del mercado" por ello. Entonces usted dice: "Pero yo slo
necesita cambiar una cosa!" La persona detrs del mostrador dice que no puedes
cambiarlo. Los juegos estn sellados en sus cartuchos. Usted descubre que su juguete
se limita a los juegos que otros han decidido que usted necesita y no ms.
Linux, en cambio, es como el ms grande del mundo Set Erector. Lo abres y es slo
una enorme coleccin de piezas. Una gran cantidad de puntales de acero, tornillos,
tuercas, engranajes, poleas, motores y algunas sugerencias sobre lo que debe
construir. As que empiezas a jugar con l. Usted construye una de las sugerencias y
luego otro. Despus de un tiempo se descubre
65
6 - redireccin
que tiene sus propias ideas de lo que debe hacer. No siempre tiene que volver a la
tienda, como usted ya tiene todo lo que necesita. El juego de construccin adquiere la
forma de su imaginacin. Se hace lo que quiere.
La eleccin de los juguetes es, por supuesto, una cosa personal, por lo que habra que
encontrar el juguete ms satisfactorio?
66
Expansin
Cada vez que escriba una lnea de comandos y pulsa la tecla Intro, Bash realiza varios
procesos sobre el texto antes de que se lleve a cabo su mandato. Hemos visto un par de casos
de cmo una secuencia de caracteres simples, por ejemplo, "*", puede tener mucho significado
a la cscara. El proceso que hace que esto suceda se llama expansin. Con la expansin, se
introduce algo y se expande en otra cosa antes de que los actos de concha sobre ella. Para
demostrar lo que queremos decir con esto, vamos a echar un vistazo a el comando echo. eco es
[Me @ linuxbox ~] $ echo esto es una prueba
esta es una prueba
una orden interna del shell que realiza una tarea muy simple. Se imprime sus argumentos de
[me @ linuxbox ~] $ ls
Escritorio ls-output.txt
Documentos Msica
Imgenes
Pblico
Plantillas
Vdeos
68
Expansin
Expansin Tilde
Como se recordar de nuestra introduccin al comando cd, el carcter de tilde ("~") tiene un
significado especial. Cuando se usa al principio de una palabra, que se expande en el nombre
del directorio de inicio del usuario llamado, o si no hay ningn usuario llamado, el directorio
de inicio del usuario actual:
69
Expansin aritmtica
El depsito permite la aritmtica que se realizar por la expansin. Esto nos permite usar la
lnea de comandos como una calculadora:
[Me @ linuxbox ~] $ echo $ ((2 + 2))
4
Expansin aritmtica utiliza el formulario:
$ ((Expresin))
donde la expresin es una expresin aritmtica que consiste en valores y operadores
aritmticos.
Expansin aritmtica slo admite nmeros enteros (nmeros enteros, sin decimales), pero
puede llevar a cabo un buen nmero de diferentes operaciones. Aqu estn algunos de los
operadores compatibles:
Tabla 7-1: Operadores aritmticos
Operador
+
Descripcin
Adicin
Sustraccin
/
%
**
Multiplicacin
Divisin (pero recuerde, ya que la expansin slo es compatible con la
aritmtica de enteros, los resultados son nmeros enteros.)
Modulo, que simplemente significa, "resto".
Exponenciacin
70
Expansin
[Me @ linuxbox ~] $ echo $ (((5 ** 2) * 3))
75
Aqu est un ejemplo utilizando los operadores de divisin y resto. Observe el efecto de la
divisin entera:
Expansin Brace
Quizs la expansin ms extraa se llama la expansin de llaves. Con l, usted puede crear
varias cadenas de texto de un patrn que contiene tirantes. He aqu un ejemplo:
Expansin Parmetro
Slo vamos a hablar brevemente sobre la expansin de parmetro en este captulo, pero
vamos a estar cubriendo ampliamente ms adelante. Es una caracterstica que es ms til en
scripts de shell que directamente en la lnea de comandos. Muchos de sus capacidades tienen
que ver con la capacidad del sistema para almacenar pequeas cantidades de datos y dar a
cada trozo un nombre. Muchos de estos trozos, ms correctamente llamados variables, estn
disponibles para su examen. Por ejemplo, la variable denominada "USUARIO" contiene su
nombre de usuario. Para invocar la expansin de parmetro y revelar el contenido de usuario
que haga lo siguiente:
Expansin
m
Para ver una lista de las variables
disponibles, intente lo siguiente:
[Me @ linuxbox ~] $ printenv | less
Usted puede haber notado que con otros tipos de expansin, si se escribe incorrectamente un
patrn, la ampliacin no tendr lugar y el comando echo simplemente mostrar el patrn
escrito mal. Con la expansin de parmetro, si se escribe incorrectamente el nombre de una
variable, la expansin se llevar a cabo todava, pero dar lugar a una cadena vaca:
Comando Sustitucin
Sustitucin de comandos nos permite usar la salida de un comando como una
expansin:
[Me @ linuxbox ~] $ echo $ (ls)
Escritorio Documentos ls-Output.txt Msica Imgenes Plantillas Pblica Videos
73
Citando
Ahora que hemos visto cmo muchas maneras la cscara puede realizar expansiones, es hora
de aprender cmo podemos controlarlo. Tomemos, por ejemplo:
Citando
Doble Cotizaciones
El primer tipo de citar vamos a ver es entre comillas dobles. Si coloca texto entre comillas
dobles, todos los caracteres especiales utilizados por el shell pierden su significado especial y
se tratan como caracteres normales. Las excepciones son "$", "\" (barra invertida), y "'" (comilla
inversa). Esto significa que la palabra de reparto, la expansin ruta, la expansin de tilde, y la
expansin de llaves se suprimen, pero la expansin de parmetro, expansin aritmtica, y la
sustitucin de comandos an se llevan a cabo. El uso de comillas dobles, podemos hacer frente
a los nombres de archivo que contienen espacios incrustados. Decir que nos quedamos la
desafortunada vctima de un archivo llamado dos words.txt. Si tratamos de utilizar esto en la
lnea de comandos, palabra-divisin causara que esto se trata como dos argumentos
separados 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 divisin y obtenemos el resultado
deseado; an ms, incluso podemos reparar el dao:
Soltero Cotizaciones
Si tenemos que suprimir todas las expansiones, usamos comillas simples. He aqu una
comparacin de, comillas dobles no cotizadas, y las comillas simples: 76
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, ms y ms de las expansiones se
suprimen.
Escapar Personajes
A veces slo queremos citar un solo carcter. Para ello, podemos preceder a un personaje con
una barra invertida, que en este contexto se llama el carcter de escape. A menudo esto se hace
dentro de las comillas dobles para evitar una expansin selectiva:
[Me @ linuxbox ~] $ echo "El balance para el usuario $ usuario es: \ $ 5,00"
El balance para m usuario es: $ 5.00
Tambin es comn el uso de escape para eliminar el significado especial de un carcter en un
nombre de archivo. Por ejemplo, es posible utilizar caracteres en los nombres de archivo que
normalmente tienen un significado especial para el shell. Estos incluyen "$", "!", "&", "", Y
otros. Para incluir un carcter especial en un nombre de archivo que pueda para esto:
77
Resumiendo
A medida que avanzamos con el uso de la cscara, nos encontraremos con que las expansiones
y de cotizacin se utiliza cada vez con mayor frecuencia, as que tiene sentido para obtener
una buena comprensin de la forma en que trabajan. De hecho, se podra argumentar que son
los temas ms importantes para aprender acerca de la cscara. Sin una comprensin adecuada
de la expansin, la cscara siempre ser una fuente de misterio y confusin, y gran parte de
ella poder potencial desperdiciado.
Lectura adicional
La pgina de manual de bash tiene grandes secciones en tanto la expansin como la
que citando a cubrir estos temas de una manera ms formal.
El Manual de Referencia Bash tambin contiene captulos sobre la expansin y
citando: http://www.gnu.org/software/bash/manual/bashref.html
78
8 - Trucos
teclado
avanzadas
del
c l a r o - Borrar la pantalla
Nota: Algunas de las secuencias de teclas de abajo (en particular los que utilizan la
tecla Alt) pueden ser interceptados por la interfaz grfica de usuario para otras
funciones. Todas las secuencias de teclas debera funcionar correctamente cuando se
utiliza una consola virtual.
79
Clave
Accin
Ctrl-a
Ctrl-e
Ctrl-b
Alt-f
Alt-b
Ctrl-l
Ctrl-f
Clave
Ctrl-D
Ctrl-t
Alt-t
Alt-l
Alt-u
Accin
Eliminar el carcter situado en la posicin del cursor
Transpose (cambio) el carcter en la posicin del cursor con el que le
precede.
Transposicin de la palabra en la posicin del cursor con el que le
precede.
Convertir los caracteres de la posicin del cursor hasta el final de la
palabra a minsculas.
Convertir los caracteres de la posicin del cursor hasta el final de la
palabra a maysculas.
80
De lnea de comandos
de edicin
Tabla 8-3: cortar y pegar los comandos
Clave
Ctrl-k
Accin
Matar texto desde la posicin del cursor hasta el final de la lnea.
Ctrl-u
Alt-d
Alt
Retroceso
Ctrl-y
La tecla Meta
Si se aventura en la documentacin de Readline, que se puede encontrar en la seccin
READLINE de la pgina de manual de bash, se encontrar con el trmino "tecla meta."
En los teclados modernos esto se asigna a la tecla Alt, pero no siempre fue as. Ya en
los tiempos oscuros (antes de las PC, pero despus de Unix) no todo el mundo tena su
propio ordenador. Lo que ellos podran haber tenido era un dispositivo llamado un
terminal. Un terminal era un dispositivo de comunicacin que cont con una pantalla
de visualizacin de texto y un teclado y suficiente dentro de la electrnica para
mostrar caracteres de texto y mover el cursor alrededor. Se adjunta (generalmente por
cable en serie) a un ordenador ms grande o la red de comunicacin de un ordenador
ms grande. Haba muchas marcas diferentes de terminales y todos ellos tenan
diferentes teclados y conjuntos de caractersticas de visualizacin. Ya que todos
tendan a por lo menos entender ASCII, los desarrolladores de software que desean
aplicaciones porttiles escribieron al mnimo comn denominador. Sistemas Unix
tienen una forma muy elaborada de hacer frente a las terminales y sus diferentes
caractersticas de visualizacin. Dado que los desarrolladores de Readline no podan
estar seguros de la presencia de una tecla de control adicional dedicado, inventaron
uno y lo llamaron "meta". Si bien la tecla Alt sirve como la tecla meta en los teclados
modernos, puede tambin pulsar y soltar la tecla Esc clave para conseguir el mismo
efecto que mantiene pulsada la tecla Alt si usted todava est utilizando un terminal
(que todava se puede hacer en Linux!).
Terminacin
Otra forma en que la cscara puede ayudar es a travs de un mecanismo llamado finalizacin.
Finalizacin se produce cuando se pulsa la tecla de tabulacin mientras se escribe un
comando. Vamos a ver cmo funciona esto. Dado un directorio principal que se parece a esto:
81
Fotos Plantillas
Pblico
Vdeos
[me @ linuxbox ~] $ ls l
A continuacin, pulse
la tecla de tabulacin:
[Me @ linuxbox ~] $ ls-output.txt
Vea cmo la cscara complet la lnea para usted? Vamos a probar otra. Una vez ms, no
pulse Intro:
[Me @ linuxbox ~] $ ls D
Pulse la
ficha:
[Me @ linuxbox ~] $ ls D
Sin terminar, slo un pitido. Esto sucedi porque "D" coincide con ms de una entrada en el
directorio. Para completar para tener xito, la "idea" le dar lo que tiene que ser inequvoco. Si
vamos ms all:
[Me @ linuxbox ~] $ ls Do
A continuacin,
pulse la ficha:
[me @ linuxbox ~] $ ls Documentos
La conclusin es exitosa.
Aunque este ejemplo muestra la terminacin de nombres de ruta, que es su uso ms comn,
82
Terminacin
finalizacin tambin trabajar en las variables (si el principio de la palabra es un "$"), nombres
de usuario (si la palabra comienza con "~"), los comandos (si la palabra es la primera palabra
en la lnea.) y los nombres de host ( si el comienzo de la palabra es "@"). Terminacin de
nombre de host slo funciona para los nombres de host que figuran en el / etc / hosts.
Finalizacin
Tabla
8-4: Comandos deprogramable
finalizacin
Las versiones recientes de fiesta tienen una instalacin llamada finalizacin
Clave
Accin
programable. Finalizacin
programable le permite (o, ms probablemente, su
Aproveedor
lt?
Mostrar la lista
terminaciones
posibles.
En la mayora
de losPor
sistemas
de distribucin)
paradeagregar
reglas de
terminacin
adicionales.
lo
tambin
puede
hacer esto
la tecla
de tabulacin
una segunda
general, esto se hace
para se
aadir
soporte
parapulsando
aplicaciones
especficas.
Por ejemplo,
es
aadir lasvez,
terminaciones
de la lista
opciones de un comando o que coincida
lo que es mucho
ms de
fcil.
Aposible
lt *
Insertar todas las terminaciones posibles. Esto es til cuando se desea
con determinados tipos de archivo que soporta una aplicacin. Ubuntu tiene una
utilizar ms de una posible coincidencia.
bastante grande conjunto definido de forma predeterminada. Finalizacin
programable se implementa mediante funciones de shell, una especie de mini-shell
script que vamos a cubrir en los prximos captulos. Si eres curioso, pruebe: set | less
y ver si usted puede encontrarlos. No todas las distribuciones los incluyen por
defecto.
Hay un nmero de control y meta secuencias de teclas que estn asociadas con la terminacin:
Hay unos cuantos ms que me parece ms bien oscuro. Usted puede ver una lista en la pgina
de manual de bash en "READLINE".
83
Historia bsqueda
En cualquier momento, podemos ver el contenido de la lista
de la historia a travs de:
[Me @ linuxbox ~] $ historia | menos
De forma predeterminada, golpe almacena los ltimos 500 comandos que ha introducido.
Vamos a ver cmo ajustar este valor en un captulo posterior. Digamos que queremos
encontrar los comandos que usamos para listar / usr / bin. Una manera de que pudiramos
hacer esto:
[Me @ linuxbox ~] $ historia | grep / usr / bin
Y digamos que entre los resultados que conseguimos una lnea que contiene un comando
interesante como esto:
88 ls -l / usr / bin> ls-output.txt
El nmero "88" es el nmero de lnea del comando en la lista del historial. Podramos utilizar
este inmediatamente utilizando otro tipo de expansin llamado expansin de historia. Para
usar nuestra lnea descubrimos que podamos hacer esto:
[Me @ linuxbox ~] $ 88
Bash se expandir "88" en el contenido de la Octogsima octava lnea en
la lista de historial. Hay otras formas de expansin de historia que vamos
a cubrir un poco ms tarde.
Bash tambin proporciona la capacidad de buscar en la lista de la historia
de forma incremental. Esto signific a que podemos decirle a bash para
buscar en la lista de la historia a medida que entramos personajes, con
cada personaje adicional refinar an ms nuestra bsqueda. Para iniciar
la bsqueda incremental pulse Ctrl -r seguido del texto que busca.
Cuando lo encuentre, puede pulsar Enter para ejecutar el comando o
pulse Ctrl-J para copiar la lnea de la lista de la historia a la lnea de
comandos actual. Para buscar la siguiente aparicin del texto (que se
m[Me
u e v@
e linuxbox
" 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 a
salir de la bsqueda, pulse Ctrl -g o Ctrl-C. Aqu lo vemos en accin:
Primero, pulse Ctrl-r:
84
(Reverse-i-bsqueda) ''
Los rpidos cambios que indican que estamos llevando a cabo una bsqueda incremental
inversa. Se trata de "revertir" porque estamos en busca de "ahora" para algn momento en el
(Reverse-i-bsqueda) '/ usr / bin': ls -l / usr / bin> ls-output.txt
pasado. A continuacin, empezamos a escribir nuestro texto de bsqueda. En este ejemplo "/
usr / bin":
Inmediatamente, la bsqueda devuelve nuestro resultado. Con nuestro resultado, podemos
[Me @ linuxbox ~] $ ls -l / usr / bin> ls-output.txt
ejecutar el comando pulsando Enter, o podemos copiar el comando a nuestra lnea de
comando actual para su posterior edicin pulsando Ctrl-j. Vamos a copiarlo. Presione Ctrl-j:
Nuestros shell prompt devoluciones y nuestra lnea de comandos, se haya
cargado y listo para la accin! La siguiente tabla muestra algunas de las
pulsaciones de teclas que se utilizan para manipular la lista de la historia:
Tabla 8-5: Comandos de historia
Clave
Ctrl-p
Ctrl-n
Alt <
Alt>
Ctrl-r
Alt-p
Alt-N
Ctrl-O
85
Accin
Mover a la entrada de la historia anterior. La misma accin como la
flecha hacia arriba.
Mover a la siguiente entrada de la historia. La misma accin como la
flecha hacia abajo.
Ir al principio (arriba) de la lista del historial.
Mover a la final (abajo) de la lista del historial, es decir, la lnea de
comandos actual.
Invierta bsqueda incremental. Busca en forma incremental desde la
lnea de comandos actual hasta la lista del historial.
Bsqueda hacia atrs, no incremental. Con esta clave, escriba la cadena
de bsqueda y pulse enter antes de realizar la bsqueda.
Bsqueda hacia adelante, no incremental.
Ejecute el elemento actual de la lista de la historia y avanzar a la
siguiente. Esto es til si usted est tratando de volver a ejecutar una
secuencia de comandos en la lista del historial.
Historia de Expansin
La cscara ofrece un tipo especializado de expansin para los elementos de la lista del historial
mediante el uso de la "!" Carcter. Ya hemos visto cmo el signo de exclamacin puede ser
seguido por un nmero de insertar una entrada de la lista del historial. Hay un nmero de
otras caractersticas de expansin:
Tabla 8-6: Comandos Historia de expansin
Secuencia
Accin
!! Repetir el ltimo comando. Es probablemente ms fcil que pulsar la flecha hacia arriba
y entrar.
! nmero
Resumiendo
En este captulo hemos cubierto algunos de los trucos de teclado que la cscara proporciona
para ayudar a los mecangrafos del hardcore reducir sus cargas de trabajo. Sospecho que a
medida que pasa el tiempo y que involucrarse ms con la lnea de comandos, se le consulte de
nuevo a este captulo para recoger a 86
Resumiendo
ms de estos trucos. Por ahora, considerarlos opcional y potencialmente til.
Lectura adicional
La Wikipedia tiene un buen artculo sobre terminales de ordenador:
http://en.wikipedia.org/wiki/Computer terminales
87
9 - Permisos
9 - Permisos
Los sistemas operativos en la tradicin Unix difieren de las de la tradicin de MS-DOS, ya que
son no slo los sistemas multitarea, sino tambin los sistemas multi-usuario, as.
Qu significa exactamente esto? Esto significa que ms de una persona puede ser el uso de la
computadora al mismo tiempo. Mientras que una computadora tpica probablemente tendr
slo un teclado y un monitor, todava puede ser utilizado por ms de un usuario. Por ejemplo,
si un ordenador est conectado a una red o de Internet, los usuarios remotos pueden
conectarse a travs de SSH (Secure Shell) y operar el equipo. De hecho, los usuarios remotos
pueden ejecutar aplicaciones grficas y tienen la salida grfica aparece en una pantalla remota.
El sistema X Window apoya esto como parte de su diseo bsico.
La capacidad multiusuario de Linux no es una "innovacin", reciente sino ms bien una
caracterstica que est profundamente arraigada en el diseo del sistema operativo. Teniendo
en cuenta el entorno en el que Unix fue creado, esto tiene mucho sentido. Hace aos, antes de
los ordenadores eran "personal", que eran grandes, caros, y centralizado. Un sistema tpico
equipo universitario, por ejemplo, consista en un gran ordenador central situado en un
edificio y los terminales que se encuentran en todo el campus, cada uno conectado a la
computadora central de gran tamao. El ordenador apoyara muchos usuarios al mismo
tiempo.
Con el fin de hacer esta prctica, un mtodo tena que ser concebidos para proteger a los
usuarios de la otra. Despus de todo, las acciones de un usuario no se podra permitir a
estrellar la computadora, ni podran un usuario interferir con los archivos que pertenecen a
otro usuario.
En este captulo vamos a ver esta parte esencial de la seguridad del sistema e introducir los
siguientes comandos:
88
9 - Permisos
9 - Permisos de ver que el usuario de Ubuntu pertenece a muchos ms grupos. Esto tiene que
ver con la forma en Ubuntu gestiona los privilegios de dispositivos y servicios del sistema.
As que de dnde viene esta informacin? Como tantas cosas en Linux, desde un par de
archivos de texto. Las cuentas de usuario se definen en el archivo / etc / passwd y grupos se
definen en el archivo / etc / group. Cuando se crean las cuentas de usuarios y grupos, estos
archivos se modifican junto con / etc / shadow que contiene informacin acerca de la
contrasea del usuario. Para cada cuenta de usuario, el archivo / etc / passwd define el
usuario (login) nombre, uid, gid, el verdadero nombre de la cuenta, el directorio home, y de
inicio de sesin de shell. Si se examina el contenido de / etc / passwd y / etc / group, te dars
cuenta de que adems de las cuentas de usuarios regulares, hay cuentas de superusuario (uid
0) y otros usuarios del sistema.
En el prximo captulo, 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 comn como
"usuarios", la prctica moderna de Linux es la creacin de un grupo nico, de un solo
miembro con el mismo nombre que el usuario. Esto hace que ciertos tipos de asignacin de
permisos ms fcil.
90
Atributo
-
Tipo de archivo
Un archivo normal.
d
l
Un directorio.
Un enlace simblico. Tenga en cuenta que con enlaces simblicos, los
atributos de archivo restantes son siempre "rwxrwxrwx" y son valores
ficticios. Los atributos de archivo reales son las del archivo de los puntos de
enlace simblico a.
dispositivo que maneja los datos como un flujo de bytes, tales como un
terminal o mdem.
Un archivo especial de bloques. Este tipo de archivo se refiere a un
dispositivo que gestiona los datos en bloques, como un disco duro o
unidad de CD-ROM.
El resto de los nueve personajes de los atributos de archivo, llamado el modo de archivo,
representan la lectura, escritura y ejecucin permisos para el propietario del archivo,
propietario del grupo del archivo, y todos los dems:
Propietar
Grupo
Mundo
io
rwx
rwx
rwx
Cuando atributos conjunto, la r, w, x, y de modo tienen el siguiente efecto sobre los archivos y
directorios:
Tabla 9-2: Atributos de permisos
Atributo
r
Archivos
Directorios
Permite que un archivo sea abierto Permite que el contenido de un
y ledo.
directorio para ser listados si
tambin se establece el atributo de
ejecutar.
Permite que un archivo sea escrito Permite a los archivos dentro de
o trunca, sin embargo, este
un directorio para crear, eliminar,
atributo no permite archivos para
cambiar el nombre y si tambin se
cambiar el nombre ni eliminar. La
establece el atributo de ejecutar.
capacidad de eliminar o cambiar el
nombre de los archivos est
determinada por los atributos de
directorio.
Permite que un archivo sea tratado Permite a un directorio para
como un programa y ejecutado.
introducir, por ejemplo, el
Archivos de programa escritos en
directorio cd.
lenguajes de script tambin se
deben configurar como legible
para ser ejecutado.
9 - Permisos
91
92
Qu diablos es octal?
Octal (base 8), y su primo, hexadecimal (base 16) son sistemas numricos a menudo utilizadas
para expresar nmeros en las computadoras. Nosotros, los humanos, debido al hecho de que
nosotros (o al menos la mayora de nosotros) nacimos con diez dedos, cuente el uso de un sistema
de base de 10 nmeros. Computadoras, por otro otro lado, nacieron con un solo dedo y as hacer
todo todo su conteo en binario (base 2). Su sistema numrico slo tiene dos nmeros, 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 nmeros 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 nmeros del cero al nueve, ms 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 slo tienen un dedo),
lo que son buenas octal y hexadecimal? La respuesta tiene que ver con la conveniencia
humana. Muchas veces, las pequeas porciones de datos se representan en las
computadoras como patrones de bits. Tomemos por ejemplo un color RGB. En la
mayora de las pantallas de ordenador, cada pxel se compone de tres componentes de
color: ocho bits de color rojo, ocho bits de color verde, y ocho bits de azul. Un azul
medio precioso sera un nmero de 24 dgitos: 010000110110111111001101
Cmo le gustara a leer y escribir ese tipo de nmeros todo el da? Yo no lo creo. Aqu
es donde otro sistema numrico ayudara. Cada dgito en un nmero hexadecimal
representa cuatro dgitos en binario. En octal, cada dgito representa tres dgitos
binarios. As que nuestro azul medio de 24 dgitos puede ser condensado a un nmero
hexadecimal de seis dgitos:
436FCD
Desde los dgitos en el nmero hexadecimal "line up" con los bits del nmero binario
se puede observar que el componente rojo de nuestro color es 43, el verde 6F, y el CD
azul.
En estos das, la notacin hexadecimal (a menudo pronunciado como "hexagonal") es
ms comn de lo que octal, pero como veremos ms adelante, la capacidad de
expresar octal de tres bits binarios sern muy tiles ...
Con la notacin octal utilizamos nmeros octales para establecer el patrn de permisos
deseados. Dado que cada dgito en un nmero octal representa tres dgitos binarios, esta muy
bien los mapas con el esquema utilizado para almacenar el modo de archivo. Esta tabla
muestra lo que queremos decir:
Tabla 9-4: Modos de archivos en formato binario y octal
Octal
Binario
Modo de archivo
93
9 - Permisos
0
000
---
001
--x
010
-W-
011
WX
100
r--
101
r-x
110
rw-
111
rwx
Smbolo
u
Significado
Abreviatura de "usuario", pero significa que el propietario del archivo o
directorio.
un
94
La lectura, la escritura, y ejecucin
Si no se especifica un carcter, "todo" ser asumido. La operacin 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 slo los permisos especificados se van a aplicar y que todos los dems han
de ser eliminado.
Los permisos se especifican con la "r", "w", y caracteres "x". Estos son algunos ejemplos de la
notacin simblica:
Tabla 9-6: chmod Ejemplos notacin simblica
Notacin
Significado
u+x
u-x
+X
o-rw
go = rw
u + x, go =
rx
Algunas personas prefieren utilizar la notacin octal, algunas personas les gusta realmente lo
simblico. Notacin simblica s ofrece la ventaja de que le permite establecer un nico
atributo sin molestar a cualquiera de los otros.
Echa un vistazo a la pgina del manual de chmod para obtener ms detalles y una lista de
opciones. Una palabra de precaucin con respecto a la opcin "--recursive": acta sobre los
archivos y directorios, as que no es tan til como es de esperar, ya que, rara vez desee
archivos y directorios que tienen los mismos permisos.
9 - Permisos
95
[Me @ linuxbox ~] $
[Me @ linuxbox ~] $
0002
[Me @ linuxbox ~] $
[Me @ linuxbox ~] $
-rw-rw-r-- 1
m
rm -f foo.txt
umas
k
> Foo TXT
ls -l foo.txt
m
0 2008-03-06 14:53 foo.txt
En primer lugar, eliminamos cualquier copia antigua de foo.txt para asegurarse de que
estbamos empezando fresco. A continuacin, nos encontramos con el comando umask sin
argumentos para ver el valor actual. Responda
96
con el valor de 0002 (el valor 0022 es otro valor predeterminado comn), que es la
[Me @ linuxbox ~] $
[Me @ linuxbox ~] $
[Me @ linuxbox ~] $
[Me @ linuxbox ~] $
-rw-rw-rw- 1
m
foo rm .txt
umask 0000
> Foo. TXT
ls -l foo.txt
m
0 2008-03-06 14:58 foo.txt
Cuando establecimos la mscara para 0000 (efectivamente apagarlo), vemos que el archivo ya
est grabable mundo. Para entender cmo funciona esto, tenemos que mirar los nmeros
octales de nuevo. Si tomamos la mscara y expandirlo hasta binario, y luego compararlo con
los atributos que podemos ver lo que sucede:
Modo de archivo
- Rw- rw- rworiginal
Enmascarar
Resultado
Ignorar por el momento los ceros a la izquierda (vamos a llegar a los de un minuto) y observar
que cuando el 1 aparece en nuestra mscara, atributo este caso, el permiso de escritura en el
mundo se retira. Eso es lo que hace la mscara. Por todas partes un 1 aparece en el valor
binario de la mscara, un atributo no est definido. Si nos fijamos en un valor de mscara de
0022, podemos ver que es lo que hace:
Modo de archivo
original
Enmascarar
Resultado
Una vez ms, donde un 1 aparece en el valor binario, el atributo correspondiente no est
definida. Juega con algunos valores (probar algunos sietes) para acostumbrarse a cmo
funciona esto. Cuando haya terminado, no olvide limpiar:
97
9 - Permisos
[Me @ linuxbox ~] foo.txt $ rm; umask 0002
La mayora de las veces usted no tendr que cambiar la mscara; el valor por defecto
proporcionada por su distribucin va a estar bien. En algunas situaciones de alta seguridad,
sin embargo, tendr que controlarlo.
98
Al ver la salida de ls, puede determinar los permisos especiales. He aqu algunos
ejemplos. En primer lugar, un programa que es setuid:
-rwsr-xr-x
Un directorio que tiene el atributo setgid: drwxrwsr-x
Un directorio con el bit pegajoso: drwxrwxrwt
La lectura, la escritura, y ejecucin
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 alguna
tarea administrativa, pero tambin es posible "llegar a ser" otro usuario regular para cosas
tales 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 tcnica ya que sabemos cmo hacerlo y que carece de la comodidad
de los otros dos. Desde dentro de nuestra propia sesin de shell, el comando su le permite
asumir la identidad de otro usuario, y, o bien iniciar una nueva sesin de shell con
identificadores de ese usuario, o para emitir un solo comando como ese usuario. El comando
sudo permite a un administrador configurar un archivo de configuracin llamado / etc /
sudoers, y definir comandos especficos que los usuarios particulares estn autorizados a
ejecutar bajo una identidad falsa. La eleccin de el comando a utilizar est determinada en
gran medida por la que Linux la distribucin que utilice. Su distribucin incluye
probablemente ambos comandos, pero su configuracin favorecer ya sea uno o el otro.
Vamos a empezar con su.
99
9 - Permisos
cambiado en el directorio home del usuario. Esto es por lo general lo que queremos. Si no se
especifica 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 ms frecuencia. Para iniciar un shell
para el superusuario, haramos lo siguiente:
'comando' su -c
El uso de este formulario, una sola lnea de comandos se pasa a la nueva cscara para su
ejecucin. Es importante para encerrar el comando entre comillas, ya que no queremos que se
produzca la expansin de nuestra cscara, sino ms bien en el nuevo shell:
100
Cambio de
Identidades
Ubuntu y sudo
Uno de los problemas recurrentes de los usuarios habituales es cmo realizar ciertas
tareas que requieren privilegios de superusuario. Estas tareas incluyen la instalacin y
actualizacin de software, la edicin de archivos de configuracin del sistema, y los
dispositivos de acceso. En el mundo de Windows, esto se hace a menudo por dar a los
usuarios privilegios administrativos. Esto permite a los usuarios realizar estas tareas.
Sin embargo, tambin permite a los programas ejecutados por el
101
9 - Permisos
usuario tener las mismas habilidades. Esto es deseable en la mayora de los casos, sino
que tambin permite que el malware (software malicioso), como los virus para tener
libre reinado de la computadora. En el mundo Unix, siempre ha habido una divisin
mayor entre los usuarios regulares y administradores, debido a la herencia
multiusuario de Unix. El enfoque adoptado en Unix es otorgar privilegios de
superusuario slo cuando sea necesario. Para ello, los comandos sudo su y son de uso
comn.
Hasta hace unos pocos aos, la mayora de las distribuciones de Linux se bas en Do
para este propsito. Do no requiri la configuracin que requiere sudo, y tener una
cuenta de root es tradicional en Unix. Esto introdujo un problema. Los usuarios se ven
tentados a operar como root sin necesidad. De hecho, algunos usuarios operaban sus
sistemas 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 sesin a la cuenta de root (al no establecer una
contrasea para la cuenta), y en su lugar utiliza sudo para otorgar privilegios de
superusuario. La cuenta de usuario inicial se concede pleno acceso a privilegios de
superusuario a travs de sudo y podr otorgar poderes similares a las cuentas de
usuario subsiguientes.
Argumento
bob
Resultados
Cambia la propiedad del archivo de su actual propietario de la sacudida
de usuario.
bob:
usuarios
102
Cambio de
Identidades
: los
administr
adores
bob:
9 - Permisos de archivos de msica como Ogg Vorbis o MP3. Proyecto de ley de usuario tiene
acceso a privilegios de superusuario a travs de sudo.
Lo primero que tiene que ocurrir es la creacin de un grupo que tendr tanto factura y karen
como miembros. El uso de la herramienta grfica de gestin de usuarios, proyecto de ley crea
un grupo llamado msica y aade usuarios factura y karen a la misma:
104
[Factura @ linuxbox ~] $ sudo chown: msica / usr / local / share / Msica [factura @
linuxbox ~] $ sudo chmod 775 / usr / local / share / Msica [factura @ linuxbox ~] $ ls -ld /
usr / local / share / Msica
msica drwxrwxr-x root 2 4096 03/21/2008 18:05 / usr / local / share / Msica
El ejercicio de nuestros privilegios
Entonces, qu significa todo esto? Esto significa que ahora tenemos un directorio, / / share /
Msica local / usr que es propiedad de la raz y con programas de lectura y escritura a la
msica del grupo. Music Group cuenta con miembros factura y karen, as factura y karen
puede crear archivos en el directorio / usr / local / share / Msica. Otros usuarios pueden
listar el contenido del directorio, pero no pueden crear archivos all.
[Factura @ linuxbox ~] $> / usr / local / share / Msica / archivo_prueba
[factura @ linuxbox ~] $ ls -l / usr / local / share / Msica
-rw-r - r-- 1 proyecto de ley proyecto de ley 0 03/24/2008 20:03
archivo_prueba
Pero todava tenemos un problema. Con los permisos actuales, archivos y directorios creados
dentro del directorio de la Msica tendr los permisos normales de la factura de los usuarios y
karen:
En realidad hay dos problemas. En primer lugar, el umask por defecto en este sistema es 0022
que impide que los miembros del grupo de escritura de archivos pertenecientes a otros
miembros del grupo. Esto no sera un problema si el directorio compartido slo contena
archivos, pero desde este directorio va a almacenar la msica, y la msica est organizada por
lo general en una jerarqua de los artistas y los lbumes, los miembros del grupo tendr la
capacidad 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.
[Factura @ linuxbox ~] $ sudo chmod g + s / usr / local / share / Msica [factura @
linuxbox ~] $ ls -ld / usr / local / share / Msica
msica drwxrwsr-x root 2 4096 2008-03-24 20:03 / usr / local / share / Msica
En segundo lugar, cada archivo y directorio creado por uno de los miembros se establecern
en el grupo primario del usuario en lugar de la msica del grupo. Esto se puede solucionar
configurando el bit setgid en el directorio:
Ahora ponemos a prueba para ver si los nuevos permisos de solucionar el problema. proyecto
de ley establece su umask en 0002, elimina el archivo de prueba anterior, y crea un nuevo
[Factura @ linuxbox ~] $ umask 0002
archivo de prueba y el directorio:
105
9 - Permisos
[Factura @ linuxbox ~] $ rm / usr / local / share / Msica / archivo_prueba
[factura @ linuxbox ~] $> / usr / local / share / Msica / archivo_prueba
[factura @ linuxbox ~] $ mkdir / usr / local / share / Msica / test_dir
[factura @ linuxbox ~] $ ls -l / usr / local / share / Msica
drwxrwsr-x 2 proyecto de ley de la msica 4096 2008-03-24 20:24
test_dir -rw-rw-r-- msica 1 proyecto de ley 0 03/24/2008 20:22
archivo_prueba [factura @ linuxbox ~] $
Ambos archivos y directorios se crean ahora con los permisos correctos para permitir que
todos los miembros del grupo de msica para crear archivos y directorios dentro del
directorio de la msica.
La cuestin pendiente es umask. El ajuste necesario slo dura hasta el final de la sesin y se
debe restablecer. En el captulo 11, vamos a ver lo que el cambio de umask permanente.
Cambio de la contrasea
El ltimo tema que vamos a cubrir en este captulo es establecer contraseas para ti mismo (y
para los dems usuarios, si tiene acceso a privilegios de superusuario.) Para establecer o
cambiar una contrasea, se utiliza el comando passwd. La sintaxis del comando es la
siguiente:
passwd
[usuario]
Para cambiar su contrasea, basta con introducir el comando passwd. Se le pedir su
contrasea antigua y su nueva contrasea:
106
Resumiendo
En este captulo hemos visto cmo los sistemas de tipo Unix como Linux administrar los
permisos de usuario para permitir la lectura, escritura y acceso de ejecucin a los archivos y
directorios. Las ideas bsicas de este sistema de permisos se remontan a los primeros das de
Unix y se han mantenido bastante bien a la prueba del tiempo. Pero el mecanismo de permisos
nativos en sistemas tipo Unix carece de la granularidad fina de los sistemas ms modernos.
Lectura adicional
Hay una serie de programas de lnea de comandos que se utilizan para crear y mantener
usuarios y grupos. Para obtener ms informacin, consulte las pginas man de los comandos
siguientes:
adduser
useradd
groupadd
107
10 - Procesos
10 - Procesos
Los sistemas operativos modernos son multitarea por lo general, lo que significa que crean la
ilusin de hacer ms de una cosa a la vez cambiando rpidamente de una ejecucin de
programa a otro. El ncleo de Linux gestiona esto a travs de la utilizacin de procesos. Los
procesos son cmo Linux organiza los diferentes programas en espera de su turno en la CPU.
A veces un equipo se convierta en lento o una aplicacin dejar de responder. En este captulo,
vamos a ver algunas de las herramientas disponibles en la lnea de comandos que nos
permiten examinar qu programas estn haciendo, y cmo poner fin a los procesos que se
portan mal.
Este captulo introducir los siguientes comandos:
[Me @ linuxbox ~] $ ps
PID TTY
TIEMPO CMD
5.198 pts / 1
00:00:00 Bash
10.129 pts / 1
00:00:00 ps
tienen propietarios y los ID de usuario, ID de usuario eficaces, etc.
Visualizacin de Procesos
El comando ms utilizado para los procesos de visin (hay varios) es ps. El programa ps tiene
un montn de opciones, pero en forma ms 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 muestran
mucho, slo los procesos asociados a la sesin de terminal actual. Para ver ms, tenemos que
aadir algunas opciones, pero antes de hacer eso, echemos un vistazo a los otros campos
producidos por ps. TTY es la abreviatura de "teletipo", y se refiere a la terminal de control para
el proceso. Unix est mostrando su edad aqu. El campo de hora es la cantidad de tiempo de
CPU consumido por el proceso. Como podemos ver, ni proceso hace que el trabajo de equipo
muy duro.
Si aadimos una opcin, podemos obtener una visin ms amplia de lo que el sistema est
haciendo:
[Me @ linuxbox ~ ] $ Ps x
PID TTY
STA TIEMPO COMANDO
T
2799 ?
Ssl
0 00 / Usr / libexec / bonobo-activacin-servidor -AC
Sl
2820 ?
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-sesin
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
dcopserver -nosid
0 00
y muchos ms.
109
10 - Procesos
Adicin de la opcin "x" (tenga en cuenta que no hay guin lder) le dice a ps para mostrar
todos nuestros procesos, independientemente de lo que el terminal (si lo hay) que son
controlados por. La presencia de un "?" En la columna TTY indica que no hay terminal de
control. Usando esta opcin, vemos una lista de todos los procesos que poseemos.
Dado que el sistema est ejecutando una gran cantidad de procesos, ps produce una larga
lista. A menudo es til para canalizar la salida de ps en menos para facilitar la visualizacin.
Algunas combinaciones de opciones tambin producen largas colas de salida, por lo que
maximiza la ventana de emulador de terminal puede ser una buena idea, tambin.
Una nueva columna titulada STAT ha sido aadido a la salida. STAT es la abreviatura de
"Estado" y revela el estado actual del proceso:
Tabla 10-1: Estados Proceso
Estado
R
S
D
T
Z
<
Significado
Correr. Esto significa que el proceso se est ejecutando o listos para
funcionar.
Dormir. El proceso no se est ejecutando; ms bien, est esperando un
evento, tal como un paquete de pulsaciones de teclas o de red.
El sueo ininterrumpida. Proceso de espera de E / S, como una unidad
de disco.
Detenido. Proceso ha sido instruido para detener. Ms sobre esto ms
adelante.
Un proceso "zombie" o desaparecida. Este es un proceso hijo que ha
terminado, pero no ha sido limpiado por su padre.
Un proceso de alta prioridad. Es posible conceder ms importancia a un
proceso, dndole ms tiempo a la CPU. Esta propiedad de un proceso se
llama amabilidad. Un proceso con prioridad alta se dice que es menos
agradable porque est tomando ms tiempo de la CPU, lo que deja
menos para todos los dems.
Un proceso de baja prioridad. Un proceso con prioridad baja (un
proceso "bonito") slo obtendr el tiempo de procesador despus de
haber mantenido otros procesos con mayor prioridad.
El estado de proceso puede ser seguido por otros caracteres. Estos indican diversas
caractersticas del proceso exticos. Vea la pgina man ps para obtener ms detalles.
Otra serie popular de las opciones es "aux" (sin un guin que lleva). Esto nos da an ms
informacin:
110
Visualizacin de Procesos
LU
SR
Q
1-I
CL
VSZ
2136
0
0
0
0
0
0
RSS TTY
644 ?
0?
0?
0?
0?
0?
0?
STAT INICIO
Ss
Mar05
S < Mar05
S < Mar05
S < Mar05
S < Mar05
S < Mar05
S < Mar05
TIE COMAN
Doce
MPO DO
init
y
[Tonelad
0:00
treint [Mi]
as]
0:00
a
y [Ks]
0:00
uno
0:06 [Wa]
Doce [EV]
y0:00 [Kh]
treint
ay
seis
y muchos ms ...
Este conjunto de opciones muestra los procesos correspondientes a cada usuario. Uso de las
opciones sin que el tablero principal invoca el comando con el comportamiento "estilo BSD".
La versin para Linux de ps puede emular el comportamiento del programa ps encontrado en
varios diferentes implementaciones de Unix. Con estas opciones, obtenemos estas columnas
adicionales:
Tabla 10-2: Estilo BSD ps encabezados de columna
Encabezami
Significado
ento
USUARIO
% UPC
% MEM
VSZ
RSS
INICIO
111
10
- Procesos
El programa de la parte superior muestra una actualizacin continua (por defecto, cada 3
segundos) la visualizacin de los procesos del sistema que figuran en el orden de actividad del
proceso. El nombre de "arriba" viene del hecho de que el programa de la parte superior se
utiliza 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 de
procesos ordenados por la actividad de la CPU:
Fila Campo
Significado
1 arriba
112
2 usuarios
promedio de
carga:
Colorado
Colorado
P.
14:59:20
CD
Colo
rado
CD
la parte 14:59 : 20 up
, 2 usuarios,
carg media: 0.
07, 0,02,
superior
a
Tareas- 109 total
1
0 detuvo, 2
! zombi
, 106 dormir,
:
consecutivo
Cpu
: 0.
7% , 1 0,0%
sy, 0. 0% de 98. Identifica 0,0%
0.0% hi, 0.0% si
(s)
noso total
Ni, utiliza, cin del 4636k
wa, libre, 19392k aficionado
Mem:
319496k
314860k
tros total
Intercam 875500k
149128k utiliza, 3%, 0
726372k libre, cach 114676k
bio:
PID USUA
PR
NI VIRT RES SHR S %
%
TIEMP COMANDO
RIO
MEM 16:O24.42
+
6244 m
39
19 31752 3124 2188 S UPC
6.3 1.0
trackerd
11071 m
20
0 2304 1092 840 R 1.3 0,3
0: 00.14 superior
0,7 0,3
0: 03,66 dbus-dae
6180 m
20
0 2700 1100 772 S
6321 m
0,7 2.3
2: 51.38
multiloa
20
0 20944 7248 6560 S
4955 raz
20
0 104m 9668 5776 S
0,3 3.0
2: 19.39 Xorg
0: 03.14 init
1 raz
20
0 2976 528 476 S
0.0 0,2
raz
15
-5
S
0: 00.00 kthreadd
2
0
0
0
0.0 0.0
3 raz
RT
-5
0
0
0S
0.0 0.0
0: 00.00
Migratio
4 raz
15
-5
0: 00,72
ksoftirq
0
0
0S
0.0 0.0
5 raz
RT
-5
0: 00.04
perro
0
0
0S
0.0 0.0
guardin/
15
-5
0: 00.42 eventos
6 raz
0
0
0S
0.0 0.0
7 raz
15
-5
0
0
0S
0.0 0.0
0: 00.06 khelper 0
41 raz
15
-5
0: 01.08 kblockd /
0
0
0S
0.0 0.0
67 raz
15
-5
0
0
0S
0.0 0.0
0: 00.00 kseriod
114 raz
0: 01.62 pdflush
20
0
0
0
0S
0.0 0.0
raz
15
-5
S
0: 02,44 kswapd0
116
0
0
0
0.0 0.0
Visualizacin de Procesos
2
3
Tareas:
Cpu (s):
0,7% con
nosotros
1,0% sy
0.0% de Ni
Identificacin
del 98,3%
4
5
0.0% wa
Mem:
Intercambio:
El programa acepta la parte superior una serie de comandos de teclado. Los dos ms
interesantes son h, que muestra la pantalla de ayuda del programa, y q, que cierra la parte
superior.
Ambos principales entornos de escritorio proporcionan las aplicaciones grficas que muestran
informacin similar a arriba (de la misma manera que el Administrador de tareas en Windows
funciona), pero me parece que la parte superior es mejor que las versiones grficas, ya que es
ms rpido y que consume muchos menos recursos del sistema. Despus de todo, nuestro
programa 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 sobre
ellos. Para nuestro
113
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 a
dibujar el logotipo en el nuevo tamao, el programa se est ejecutando.
Observe cmo no ha vuelto nuestro intrprete de comandos? Esto se debe a que la cscara est
esperando a que el programa termine, igual que todos los otros programas que hemos
utilizado hasta ahora. Si cerramos la ventana xlogo, los rpidos retornos.
Interrupcin de un proceso
Observemos lo que ocurre cuando nos encontramos xlogo nuevo. En primer lugar, entre el
[Me @ linuxbox ~] $ xlogo
[me @ linuxbox ~] $
mandato xlogo y verifique que el programa se est ejecutando. A continuacin, volver a la
ventana de terminal y pulse Ctrl-c.
En una terminal, al pulsar Ctrl-c, interrumpe un programa. Esto significa que cortsmente le
pedimos al programa para terminar. Despus presionamos Ctrl-c, la ventana xlogo cerrado y
el intrprete de comandos devuelve.
Muchos (pero no todos) los programas de lnea de comandos se pueden interrumpir mediante
el uso de esta tcnica.
El control de procesos
gramo. Haremos esto mediante la colocacin del programa en el fondo. Piense en el terminal
[Me @ linuxbox ~] $ xlogo y [1]
28.236 [me @ linuxbox ~] $
como tener un primer plano (con la materia visible en la superficie como el intrprete de
comandos) y un fondo (con cosas ocultas detrs de la superficie). Para iniciar un programa de
manera que se coloca inmediatamente en el fondo, seguimos el comando con an- carcter "&":
Despus de introducir el comando, la ventana xlogo apareci y el intrprete de comandos
regres, pero algunos nmeros divertidos se imprimieron tambin. Este mensaje es parte de
una funcin de shell llamado control de trabajos. Con este mensaje, el shell nos est diciendo
que hemos empezado el trabajo nmero 1 ("[1]") y que tiene PID 28236. Si corremos ps,
podemos ver nuestro proceso:
[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
Instalacin de control de trabajo de la cscara tambin nos da una manera de enumerar los
puestos de trabajo que se han lanzado desde nuestro terminal. Utilizando el comando trabajos,
podemos ver esta lista:
xlogo y
Los resultados muestran que tenemos un puesto de trabajo, el nmero "1", que se est
ejecutando, y que la orden era xlogo y.
xlogo y
115
xlogo
10 - Procesos
El fg comando seguido de un signo de porcentaje y el nmero de trabajo (llamado espectrab)
hace el truco. Si slo tenemos un trabajo en segundo plano, la espectrab es opcional. Para
terminar ogo XL-, pulse Ctrl-c.
xlogo
Despus de parar xlogo, podemos verificar que el programa se haya detenido por el intento de
[Me @ linuxbox ~] $ bg% 1
[l] + xlogo y [me @ linuxbox
~] $
cambiar el tamao de la ventana xlogo. Veremos que parece bastante muerto. Podemos o bien
restaurar el programa al primer plano, con el comando fg, o mover el programa a un segundo
plano con el comando bg:
Al igual que con el comando fg, la espectrab es opcional si slo hay un puesto de trabajo.
Traslado de un proceso desde el primer plano hasta el fondo es muy til si lanzamos un
programa grfico del comando, pero olvidamos que colocarlo en el fondo aadiendo el
arrastre "&".
Por qu quieres poner en marcha un programa grfico de la lnea de comandos? Hay dos
razones. En primer lugar, el programa que desea ejecutar no podra estar listado en los mens
del gestor de ventanas (como xlogo). En segundo lugar, con el lanzamiento de un programa
desde la lnea de comandos, es posible que pueda ver los mensajes de error que de otro modo
seran invisibles si el programa se puso en marcha de forma grfica. A veces, un programa no
se podr iniciar cuando se inicia desde el men grfico. Con el lanzamiento desde la lnea de
comandos en lugar, podemos ver un mensaje de error que revelar el problema. Adems,
algunos programas grficos tienen muchas opciones de lnea de comandos interesantes y
tiles.
116
xlogo
Seales
Seales
El comando kill se usa para "matar" los procesos. Esto nos permite dar por terminado los
programas que necesitan matar. He aqu un ejemplo:
Primero lanzamos xlogo en el fondo. La concha imprime el espectrab y el PID del proceso en
segundo plano. A continuacin, utilizamos el comando kill y especificamos el PID del proceso
que queremos terminar. Tambin podramos haber especificado el procedimiento utilizando
un espectrab (por ejemplo, "% 1") en lugar de un PID.
Si bien todo esto es muy sencillo, no hay ms que eso. El comando kill no exactamente "matar"
a los procesos, sino que los enva seales. Las seales son una de las varias formas en que el
sistema operativo se comunica con los programas. Ya hemos visto seales en la accin con el
uso de Ctrl-C y Ctrl-z. Cuando el terminal recibe una de estas pulsaciones de teclado, se enva
una seal al programa en el primer plano. En el caso de Ctrl- c, una seal de llamada INT
(Interrupt) se enva; con Ctrl-Z, una seal de llamada TSTP (Terminal de parada). Programas,
a su vez, "escuchar" para seales y pueden actuar sobre ellos a medida que se reciben. El hecho
de que un programa se puede escuchar y actuar sobre las seales permite que un programa
para hacer cosas como guardar el trabajo cuando se enva una seal de terminacin.
HUP
Significado
Colgar. Se trata de un vestigio de los viejos tiempos,
cuando los terminales se unen a distancia
117
10 - Procesos
computadoras con lneas telefnicas y mdems. La
seal se utiliza para indicar a los programas que la
terminal de control ha "colgado". El efecto de esta
seal se puede demostrar mediante el cierre de una
sesin de terminal. El programa se ejecuta en primer
plano de la terminal se enviar la seal y har que
cesen.
INT
MATANZA
15
PLAZO
18
19
118
CONT
Detngase
Seales
Nmero
3
Nombre
QUIT
11
SEGV
20
TSTP
119
Significado
Salir.
Violacin de segmentacin. Esta seal se enva si un
programa hace uso ilegal de la memoria, es decir, se
trat de escribir en algn lugar que no se le permiti.
Detener la Terminal. Esta es la seal enviada por el
terminal cuando se pulsa la tecla Ctrl-z. A diferencia
de la seal de parada, la seal es recibida por TSTP
10 - Procesos
28
TORNO
Para los curiosos, una lista completa de las seales se puede ver con el siguiente
comando:
[Me @ linuxbox ~] $ kill -l
Comando
pstree
vmstat
xload
tload
Descripcin
Devuelve una lista de procesos dispuestos en un patrn en forma de
rbol que muestra las relaciones padre / hijo entre los procesos.
Salidas de una instantnea del uso de recursos del sistema, incluyendo,
memoria, swap y disco de E / S. Para ver una visualizacin continua,
siga el comando con un retardo de tiempo (en segundos) para las
actualizaciones. Por ejemplo: vmstat 5. Terminar la salida con Ctrl-C.
Un programa grfico que dibuja un grfico que muestra la carga del
sistema en el tiempo.
Similar al programa xload, pero dibuja el grfico en el terminal.
Terminar la salida con Ctrl-C.
Resumiendo
La mayora de los sistemas modernos cuentan con un mecanismo para la gestin de mltiples
procesos. Linux proporciona un completo conjunto de herramientas para este fin. Dado que
Linux es el sistema operativo de servidor ms desplegada en el mundo, esto hace mucho
sentido. Sin embargo, a diferencia de otros sistemas, Linux se basa principalmente en las
herramientas de lnea de comandos para la gestin de procesos. Aunque existen herramientas
de proceso grfico para Linux, las herramientas de lnea de comandos son muy preferidos
debido 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, lo
que contradice un tanto la finalidad.
121
Parte 2 - Configuracin y
theenvironment
123
11 - El Medio Ambiente
11 - El Medio Ambiente
Como hemos comentado anteriormente, la carcasa mantiene un cuerpo de informacin
durante nuestra sesin de shell llamado el medio ambiente. Los datos almacenados en el
entorno es utilizado por los programas para determinar hechos sobre nuestra configuracin.
Si bien la mayora de los programas utilizan archivos de configuracin para almacenar la
configuracin del programa, algunos programas tambin buscarn valores almacenados en el
medio ambiente para ajustar su comportamiento. Sabiendo esto, podemos usar el entorno
para personalizar nuestra experiencia cscara.
En este captulo, vamos a trabajar con los siguientes comandos:
KDE_MULTIHEAD = false
SSH_AGENT_PID = 6666
HOSTNAME = linuxboX
GPG_AGENT_INFO = / tmp / gpg-PdOt7g / S.gpg-agente: 6689: 1
SHELL = / bin / bash
TERM = xterm
XDG_MENU_PREFIX = kdeHISTSIZE = 1000
XDG_SESSION_COOKIE = 6d7b05c65846c3eaf3101b0046bd2b001208521990,996705-1177056199
GTK2_RC_FILES = / etc / gtk-2.0 / gtkrc: /home/me/.gtkrc2.0: /home/me/.kde/share/config/gtkrc-2.0
GTK_RC_FILES = / etc / gtk / gtkrc: /home/me/.gtkrc: /home/me/.kde/share/confi
g / gtkrc
GS_LIB = / home / me / .fonts
WINDOWID = 29360136
QTDIR = / usr / lib / qt-3.3
QTINC = / usr / lib / qt-3.3 / include
KDE_FULL_SESSION = true
USUARIO 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 una
variable llamada USUARIO, que contiene el valor "yo". El comando printenv tambin puede
listar el valor de una variable especfica:
El comando set, cuando se usa sin opciones o argumentos, se mostrar tanto en la cscara y
variables de entorno, as como las funciones de shell definidas. A diferencia de printenv, su
salida est ordenada cortsmente en orden alfabtico:
125
[Me @ linuxbox
HOME
linuxbox ~]
~] $$echo
alias $alias
l. = /'Ls
home
/ me = Tty' alias ll = 'ls -l --color =
-d. * --color
tty' alias ls = 'ls -color = tty' alias vi =
'vim'
alias que = 'alias | / usr / bin / que --tty-slo --read-alias --show- salpican --show-tilde'
- El Medio Ambiente
11
Uno de los elementos del medio ambiente que ni conjunto ni pantallas printenv es alias. Para
verlos, introduzca el comando alias sin argumentos:
Variable
PANTALL
A
Contenido
EDITOR
SHELL
INICIO
LANG
OLD_PWD
PAGER
CAMINO
PS1
126
Una lista separada por dos puntos de los directorios que se buscan
cuando se introduce el nombre de un programa ejecutable.
Cadena Prompt 1. Esto define el contenido de su intrprete de
comandos. Como veremos ms adelante, esto puede ser ampliamente
modificado para requisitos particulares.
TZ
USUARI
O
Expediente
/ Etc / profile
~ / .bash_profile
~ / .bash_login
~ / .profile
Contenido
Una secuencia de comandos de configuracin global que se
aplica a todos los usuarios.
Archivo de inicio personal de un usuario. Puede ser
utilizado para extender o anular la configuracin de la
secuencia de comandos de configuracin global.
S i ~ / . b a s h _ p r o f i l e no se encuentra, golpe intenta leer
este guin.
Si no se encuentra ni ~ / .bash_profile ni ~ / .bash_login,
golpe intenta leer este archivo. Este es el valor por defecto en
distribuciones basadas en Debian, como Ubuntu.
Sesiones de intrprete de
leer los siguientes archivos de inicio:
no ingreso
127
11 - El Medio Ambiente
Tabla 11-3: archivos de inicio para los no Login Shell Sesiones
Expediente
Contenido
Una secuencia de comandos de configuracin global que se
/etc/bash.bashrc
aplica a todos los usuarios.
~ / .bashrc
Archivo de inicio personal de un usuario. Puede ser
utilizado para extender o anular la configuracin de la
secuencia de comandos de configuracin global.
Adems de la lectura de los archivos de inicio de arriba, no de inicio de sesin conchas
tambin heredan el entorno de su proceso padre, un intrprete de ingreso.
Echa un vistazo a su sistema y ver cul de estos archivos de inicio que tiene. Recuerde: ya que
la mayora de los nombres de los archivos enumerados anteriormente comienzo con un punto
# .bash_profile
# Obtener los alias y las funciones if [-f
~ / .bashrc]; entonces
. ~ / .bashrc
Fi
# Programas de inicio entorno especfico del usuario y
PATH = $ PATH: $ PATH
HOME / bin exportacin
(es decir, que estn ocultos), tendr que utilizar la opcin "-a" al usar ls.
El archivo ~ / .bashrc es probablemente el archivo de inicio ms importante desde el punto de
vista del usuario normal, ya que casi siempre se lee. De no ingreso conchas leen por defecto y
la mayora de los archivos de inicio para inicio de sesin conchas estn escritos de tal manera
como para leer el archivo ~ / .bashrc tambin.
128
Modificar el entorno
Ya que sabemos donde estn los archivos de inicio y lo que contienen, que pueden
modificarlos para personalizar nuestro entorno.
Editores de texto
Para editar (es decir, modificar) los archivos de inicio de la cscara, as como la mayora de los
otros archivos de configuracin en el sistema, se utiliza un programa llamado un editor de
texto. Un editor de texto es un programa que es, en cierto modo, como un procesador de textos
en el que le permite editar las palabras en la pantalla con un cursor en movimiento. Se
diferencia de un procesador de textos por slo apoyar el texto puro, y con frecuencia contiene
caractersticas diseadas para escribir programas. Editores de texto son la herramienta central
utilizado por los desarrolladores de software para escribir cdigo, y por los administradores
de sistemas para la gestin de los archivos de configuracin que controlan el sistema.
Hay un montn de diferentes editores de texto disponibles para Linux; su sistema
probablemente ha instalado varias. Por qu tantas personas diferentes? Probablemente
porque los programadores como la escritura
130
131
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 una
pantalla como esta:
Nano 2.0.3
Archivo: .bashrc
# .bashrc
# Fuente definiciones globales if
[-f / etc / bashrc]; entonces
. / Etc / bashrc fi
# Alias y funciones especficas del usuario
[Leer 8 lneas]
OBTENER AYUDA | AO Writeout | AR Lea Fil | AY Anterior
Cortar texto | AC
Cur Pos
LaX Salir | aj
Justificar | aw
Dnde est | av
Pag ^ u
UnCut TqAT Para Hechizo
LaG
Pag
AK
Siguiente
Modificar el entorno
0. Con este conocimiento en nuestro haber, estamos listos para hacer algo de edicin. Con la
tecla de flecha hacia abajo y / o la tecla AvPg, mueva el cursor hasta el final del archivo, a
continuacin, agregue las siguientes lneas al archivo .bashrc:
umask 0002
HISTCONTROL exportacin = ignoredups HISTSIZE exportacin = 1000 alias l. = 'ls
-d. * --color = auto' alias ll = 'ls -l --color = auto'
Lnea
umask 0002
exportacin HISTCONTROL =
ignoredups
Significado
Establece la umask para resolver el
problema con los directorios
compartidos que discutimos en el
Captulo 9.
Causas funcin de grabacin de la
historia de la cscara de ignorar una
orden si el mismo comando se acaba
de grabar.
Aumenta el tamao del historial de
comandos desde el valor
predeterminado de 500 lneas a 1000
lneas.
Crea un nuevo comando llamado "l.
", Que muestra todas las entradas de
directorio que comienzan con un
punto.
Crea un nuevo comando llamado "ll",
que muestra una lista de directorios
de formato largo.
Como podemos ver, muchas de nuestras adiciones no son intuitivamente obvio, por lo que
sera una buena idea aadir algunos comentarios a nuestro archivo .bashrc para ayudar a
explicar las cosas a los seres humanos.
133
11 - El Medio Ambiente
Usando el editor, cambiar nuestras adiciones a tener este
aspecto:
Modificar el entorno
[Me @ linuxbox ~] $ ll
Despus de hacer esto, deberamos ser capaces de ver el efecto de los cambios. Pruebe uno de
los nuevos alias:
Resumiendo
En este captulo nos enteramos de un archivo de configuracin de habilidades de edicin
esenciales con un editor de texto. En el futuro, a medida que leemos las pginas man para los
comandos, tome nota de las variables de entorno que los comandos de apoyo. Puede haber
una joya o dos. En captulos posteriores, vamos a aprender acerca de las funciones de shell,
una caracterstica de gran alcance que tambin se puede incluir en los archivos de inicio de
bash para agregar a su arsenal de comandos personalizados.
Lectura adicional
La seccin de invocacin de la pgina de manual de bash cubre los archivos de inicio de
bash en detalles sangrientos.
135
vi siempre est disponible. Esto puede ser un salvavidas si tenemos un sistema sin
interfaz grfica, como por ejemplo un servidor remoto o un sistema local con una
configuracin X rota. nano, mientras que cada vez ms popular todava no es
universal. POSIX, un estndar para la compatibilidad de programas en los sistemas
Unix, requiere que vi estar presente.
vi es ligero y rpido. Para muchas tareas, es ms fcil para que aparezca vi de lo que es
encontrar el editor grfico de texto en los mens y esperar a que sus mltiples
megabytes para cargar. Adems, vi est diseado para escribir velocidad. Como
veremos, un usuario experto vi nunca tiene que levantar sus dedos del teclado
durante la edicin.
No queremos que otros usuarios de Linux y Unix que creen que somos cobardes.
136
Un poco de historia
Un poco de historia
La primera versin de vi fue escrito en 1976 por Bill Joy, de la Universidad de California en
Berkley estudiante que ms tarde pas a co-encontr Sun Microsystems. vi deriva su nombre
de la palabra "visual", ya que tena la intencin de permitir la edicin en un terminal de vdeo
con un cursor en movimiento. Anterior a los editores visuales, haba editores de lnea que
operaban en una sola lnea de texto a la vez. Para especificar un cambio, le decimos a un editor
de lnea para ir a una lnea en particular y describir lo que el cambio para hacer, por ejemplo,
agregar o borrar texto. Con el advenimiento de terminales de vdeo (en lugar de terminales
basados en la impresora como teletipos) edicin visual se hizo posible. vi en realidad
incorpora un editor de lnea de gran alcance llamada ex, y podemos usar los comandos de
edicin de lnea mientras se utiliza vi.
La mayora de las distribuciones de Linux no incluyen los bienes vi; ms bien, que se entregan
con un reemplazo llamado vim mejorada (que es la abreviatura de "vi mejorado") escrito por
Bram Moolenaar. vim es una mejora sustancial sobre tradicional vi Unix y por lo general se
vincula simblicamente (o alias) para el nombre de "vi" en los sistemas Linux. En las
discusiones que siguen, vamos a suponer que tenemos un programa que se llama "vi" que es
realmente vim.
[Me @ linuxbox ~] $ vi
Inicio y detencin de vi
Para iniciar vi, simplemente escriba lo siguiente:
Y una pantalla como esta debera aparecer:
para salir
en busca de ayuda
en
lnea info
Versin
Al igual que hicimos con nano anterior, lo primero que debe aprender es cmo salir. Para
salir, entramos en el siguiente comando (tenga en cuenta que el carcter de dos puntos es
parte del comando):
:
Q
El intrprete de comandos debe devolver. Si, por alguna razn, no le vi salir (normalmente
porque hemos hecho un cambio en un archivo que an no se ha guardado), podemos decir
que vi que realmente queremos decir que mediante la adicin de un signo de exclamacin al
comando:
Sugerencia: Si se "pierde" en vi, intente presionar la tecla Esc dos veces para
encontrar el camino de nuevo.
Modo de compatibilidad
En la pantalla de inicio de ejemplo anterior (tomado de Ubuntu 8.04), vemos que el
texto "Ejecutar en modo compatible Vi." Esto significa que vim se ejecutar en un
modo que est ms cerca el comportamiento normal de vi ms que el comportamiento
mejorado de vim . Para efectos de este captulo, vamos a querer ejecutar vim con su
comportamiento 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. Como
alternativa, utilice este comando para aadir una lnea a su fichero de configuracin
de vim: echo "NOCP ajuste" >> ~ / .vimrc
Diferentes distribuciones Linux paquete vim de diferentes maneras. Algunas
distribuciones instalan una versin mnima de vim por defecto que slo es compatible
con un conjunto limitado de funciones vim. Mientras preformacin las lecciones que
siguen, puede encontrar las caractersticas que faltan. Si este es el caso, instalar la
versin completa de vim.
13
8
Modos de edicin
Modos de edicin
[Me @ linuxbox ~] $ rm -f foo.txt [me @
linuxbox ~] $ vi foo.txt
Vamos a empezar a vi de nuevo, esta vez pasando a ella el nombre de un archivo que no
139
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 confirmacin en la
parte inferior de la pantalla, as:
Modos de edicin
Tenga cuidado.
Clave
Mueve el cursor
l o Flecha derecha
Haga un carcter.
h o Flecha izquierda
Quede un carcter.
j o Flecha abajo
k o Flecha arriba
0 (cero)
La
$
w
W
b
B
C t r l - F o P g i n a Abajo
Ctrl-b o Re Pg
Numberg
Edicin bsica
La mayor parte de edicin consiste en un par de operaciones bsicas tales como la insercin de
texto, 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 tambin proporciona una forma
limitada de deshacer. Si pulsamos la tecla "u" en el modo de comando, se vi deshacer el ltimo
cambio que realiz. Esto ser muy til ya que tratamos a cabo algunos de los comandos
bsicos de edicin.
Al aadir texto
vi tiene varias formas diferentes de entrar en el modo de insercin. Ya hemos utilizado el
El rpido zorro marrn salt sobre el perro perezoso.
comando i para insertar texto.
Volvamos a nuestro archivo foo.txt por un momento:
Si quisiramos aadir un poco de texto al final de esta frase, descubriramos que el comando
no voy a hacerlo, ya que no podemos mover el cursor ms all del final de la lnea. vi ofrece un
comando para aadir el texto, la "a" de comandos con sensatez llamado. Si movemos el cursor
El rpido zorro marrn salt sobre el perro perezoso. Ha sido muy
interesante.
al final de la lnea y de tipo "A", el cursor se mover ms all del final de la lnea y vi entrar en
el modo de insercin. Esto nos permitir aadir ms texto:
Recuerde pulsar la tecla Esc para salir del modo de insercin.
Ya que casi siempre le quieren aadir texto al final de una lnea, vi ofrece un acceso directo
para pasar a la final de la lnea actual y empezar aadiendo. Es el comando "A". Vamos a
intentarlo y aadir algunas lneas ms a nuestro archivo.
En primer lugar, vamos a pasar el cursor al principio de la lnea con el comando "0" (cero).
142
Edicin bsica
Comando
Abre
o
La lnea debajo de la lnea actual.
El rpido zorro marrn salt sobre el perro perezoso. Ha sido muy
O
La3lnea por encima de la lnea actual.
interesante.
Lnea 2 Lnea
Lnea 4
Lnea 5
Podemos demostrar esto de la siguiente manera: colocar el cursor sobre "Lnea 3" a
continuacin, pulse la tecla o.
Se abri una nueva lnea por debajo de la tercera lnea y entramos en el modo de insercin.
Salga del modo de insercin pulsando la tecla Esc. Pulse la tecla U para deshacer nuestro
El rpido zorro marrn salt sobre el perro perezoso. Ha sido muy
interesante. Lnea 2
cambio.
Pulse la tecla O para abrir la lnea por encima del cursor:
143
Lnea 3
Lnea 4
Lnea 5
12 - Una suave introduccin a VI
Salga del modo de insercin presionando la tecla Esc y deshacer nuestro cambio pulsando u.
Eliminacin de Texto
Como era de esperar, vi ofrece una variedad de formas de eliminar el texto, todos los cuales
contienen una de dos golpes de teclado. En primer lugar, la clave x eliminar un carcter en la
posicin del cursor. x puede ser precedido por un nmero que especifica el nmero de
caracteres se van a eliminar. La clave es d propsito ms general. Al igual que x, que puede ser
precedida por un nmero que especifica el nmero de veces que la delecin se va a realizar.
Adems, d siempre es seguido por un comando de movimiento que controla el tamao de la
delecin. He aqu algunos ejemplos:
Tabla 12-3: Comandos de texto de eliminacin
Comando
x
Borra
El carcter actual.
3x
dd
5dd
dW
d$
d0
dA
dG
d20G
Coloque el cursor sobre la palabra "No" en la primera lnea de nuestro texto. Pulse la tecla x
varias veces hasta que se elimina el resto de la frase. A continuacin, pulse la tecla u varias
veces hasta que la eliminacin
144
Edicin bsica
es deshecho.
Copias
aa
La lnea actual.
5yy
yW
y$
y0
yA
yG
El
el perro
perezoso.
sido muy
y 2rpido
0 G zorro marrn salt sobre
Desde
la lnea
actual aHa
la lnea
XX del archivo.
interesante.
Lnea 2
Lnea 3
Lnea 4
Lnea 5
El rpido zorro marrn salt sobre el perro perezoso. Ha sido muy
interesante.
Vamos a probar un poco de copiar y pegar. Coloque el cursor en la primera lnea del texto y
escriba yy copiar la lnea actual. A continuacin, mueva el cursor a la ltima lnea (G) y de tipo
El rpido zorro marrn salt sobre el perro perezoso. Ha sido muy
interesante. Lnea 2 Lnea 3 Lnea 4
p para pegar la lnea por debajo de la lnea actual:
Al igual que antes, el comando u deshar nuestro cambio. Con el cursor sigue en la posicin
en la ltima lnea del archivo, tipo P para pegar el texto por encima de la lnea actual:
146
Unirse Lneas
vi es bastante estricto en cuanto a su idea de una lnea. Normalmente, no es posible mover el
El rpido zorro marrn salt sobre el perro perezoso. Ha sido muy
interesante. Lnea 2
Lnea 3 Lnea 4
Lnea 5
cursor hasta el final de una lnea y eliminar el carcter de fin de lnea para unirse a una lnea
con la de abajo. Debido a esto, vi proporciona un comando especfico, J (que no debe
confundirse con j, que es para el movimiento del cursor) para unirse a las lneas juntas.
Si colocamos el cursor en la lnea 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 bsquedas. Se puede hacer
esto ya sea en una sola lnea oa travs de un archivo completo. Tambin puede realizar
sustituciones de texto con o sin confirmacin del usuario.
/
Lnea
seguido de la tecla Enter. El cursor se mover a la lnea 2. A continuacin, escriba n y el cursor
se mover a la lnea 3. Repetir el comando n se mover el cursor hacia abajo el archivo hasta
que se queda sin partidos. Si bien no tenemos palabras y frases que hasta ahora slo se utilizan
para nuestros patrones de bsqueda, vi permite el uso de expresiones regulares, un poderoso
mtodo para expresar patrones de texto complejas. Cubriremos expresiones regulares en
cierto detalle en un captulo posterior.
:% S / lnea / lnea
/g
Vamos a romper este comando abajo en artculos separados y ver lo que hace cada
uno:
Table12- 5: Un ejemplo de bsqueda global y reemplazo de sintaxis
Artculo
Significado
: El carcter de dos puntos comienza un ex comando.
%
Especifica el rango de lneas para la operacin. % Es un acceso
directo el significado de la primera lnea a la ltima lnea.
Alternativamente, se podra haber especificado el rango de 1,5 (ya
que nuestro archivo es de cinco lneas de largo), o 1, $, que significa
"de la lnea 1 a la ltima lnea en el archivo." Si se omite el rango de
lneas, la operacin slo se realiza en la lnea actual.
148
Buscar y reemplazar
s
/ Lnea /
lnea /
g
Despus de la
ejecucin de nuestra buscar y reemplazar comandos nuestro fichero tiene el siguiente aspecto:
El rpido zorro marrn salt sobre el perro perezoso. Ha sido muy interesante.
la lnea 2
la lnea 3
lnea 4
lnea 5
:% S / lnea / lnea /
gc
Tambin podemos especificar un comando de sustitucin con la confirmacin del usuario.
Esto se hace mediante la adicin de una "C" al final del comando. Por ejemplo:
Este comando cambiar nuestro archivo de nuevo a su forma anterior; Sin embargo, antes de
cada sustitucin, vi detiene y nos pide que confirme la sustitucin con este mensaje:
Clave
Accin
un
posteriores
del patrn.
149
Salga de la sustitucin.
l
Ctrl-e, Ctrl-Y
Si escribe y, se llevar a cabo la sustitucin, n har que vi para saltar esta instancia y pasar a la
siguiente.
150
Edicin de varios
archivos
:
N
Para regresar a la utilizacin archivo
anterior:
:
N
Mientras que podemos pasar de un archivo a otro, vi hace cumplir una poltica que nos
impide archivos de conmutacin si el archivo actual tiene cambios sin guardar. Para forzar vi
para cambiar los archivos y abandonar sus cambios, aadir un signo de exclamacin (!) Al
comando.
Adems del mtodo de conmutacin descrito anteriormente, vim (y algunas versiones de vi)
tambin proporcionan algunos comandos ex que hacen varios archivos ms fciles de
manejar. Podemos ver una lista de archivos que se est editando con el comando: tampones. Si
lo hace, se mostrar una lista de los archivos en la parte inferior de la pantalla:
: Los tampones
1% un "foo.txt"
2 "ls-salida TXT "
Presione ENTER o el tipo comando para continuar
lnea 1
lnea 0
Para cambiar a otro buffer (archivo), escriba: tampn seguido por el nmero de la memoria
intermedia que desea editar. Por ejemplo, para cambiar de tampn 1 que contiene el archivo
foo.txt para amortiguar 2 que contiene el archivo ls-output.txt que escribira esto:
: Tampn
2
y nuestra pantalla muestra ahora el segundo archivo.
151
: e ls-output.txt
Y debe aparecer en la pantalla.
: Los tampones
1 # "foo.txt"
la lnea 1
2% un "ls-output.txt"
lnea 0
Presione ENTER o el comando
para continuar
escriba
Nota: No se puede cambiar a los archivos cargados con el comando: correo utilizando
el comando: N: N o. Para cambiar los archivos, utilice el comando: tampn seguido por
el nmero de bfer.
1
1
1
1
1
1
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
31316 2007-12-05
8240 2007-12-09
111276 2008-01-31
25368 2006-10-06
11532 2007-05-04
7292 2007-05-04
8:58
13:39
13:36
20:16
17:43
17:43
411toppm
a2p
a52dec
aafire
aainfo
Mueva el cursor a la primera lnea y pegar la lnea copiamos desde el archivo anterior
escribiendo el comando p:
total de 343.700
El rpido zorro marrn salt
-rwxr-xr-x 1 root root root
-rwxr-xr-x 1 root -rwxr-xr-x 1
root
-rwxr-xr-x
1
root
-rwxr-xr-x 1 root -rwxr-XR x 1
root root
153
1
1
1
1
1
1
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
31316 2007-12-05
8240 2007-12-09
111276 2008-01-31
25368 2006-10-06
11532 2007-05-04
7292 2007-05-04
8:58
13:39
13:36
20:16
17:43
17:43
411toppm
a2p
a52dec
aafire
aainfo
: R foo.txt
El comando: r (abreviatura de "leer") inserta el archivo especificado antes de la posicin del
cursor. Nuestra pantalla ahora debera tener este aspecto:
: W foo1.txt
"Guardar como ..." Por ejemplo, si estuviramos editando foo.txt y queramos ahorrar una
versin alternativa llamada foo1.txt, entraramos lo siguiente:
Nota: Mientras que el comando anterior guarda el archivo con un nuevo nombre, no
cambia el nombre del archivo que se est editando. A medida que contine para editar,
usted todava ser la edicin foo.txt, no foo1.txt.
Resumiendo
Con este conjunto bsico de habilidades que ahora podemos llevar a cabo la mayor parte de la
edicin de texto necesario para mantener un sistema tpico de Linux. Aprender a usar vim
sobre una base regular dar sus frutos en el largo plazo. Desde editores vi-estilo estn tan
profundamente arraigados en la cultura Unix, vamos a ver muchos otros programas que han
sido influenciados por su diseo. menos es un buen ejemplo de esta influencia.
Lectura adicional
Incluso con todo lo que hemos cubierto en este captulo, apenas hemos araado la superficie
de lo que vi y vim puede hacer. Aqu hay un par de recursos en lnea que puede utilizar para
seguir su viaje hacia el dominio vi:
Aprender El editor vi - Un wikilibro de Wikipedia que ofrece una gua concisa para vi y
varios 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 pginas que cubre (casi) todas las
caractersticas en vim. Usted lo puede encontrar en:
ftp://ftp.vim.org/pub/vim/doc/book/vimbook-OPL.pdf.
155
13 - Personalizacin de El Smbolo
13
- Personalizacin de El Smbolo
[Me @ linuxbox ~] $
Anatoma de un Smbolo
Nuestro indicador predeterminado se ve algo como esto:
Observe que contiene nuestro nombre de usuario, nuestro nombre de host y nuestro
directorio de trabajo actual, pero cmo lleg esa manera? Muy simplemente, resulta. El
[Me @ linuxbox ~] $ echo $ PS1 [\
u @ \ h \ W] \ $
indicador se define por una variable de entorno denominada PS1 (abreviatura de "cadena de
uno pronto"). Podemos ver el contenido de PS1 con el comando echo:
Anatoma de un Smbolo
los vimos en el captulo 7. Aqu est una lista parcial de los caracteres que las golosinas de
concha especialmente en la cadena del indicador:
Tabla 13-1: Escape cdigos utilizados en Indicadores de los shells
Secuencia
\H
\H
Valor visualizado
Campana ASCII. Esto hace que el pitido del ordenador cuando se
encontr.
Fecha y hora actual en el da, el mes, el formato de fecha. Por ejemplo,
"Mon 26 de mayo"
Nombre de host de la mquina local, sin incluir el nombre de dominio al
final.
Nombre de host completo.
\J
\L
\N
\R
Un retorno de carro.
\s
\T
\T
\@
\A
\U
\V
\V
\W
\W
\!
\#
\$
\A
\D
\[
157
13 - Personalizacin de El Smbolo
cursor o cambiar los colores del texto.
\]
Aadiendo color
La mayora de los programas emuladores de terminal responden a ciertas secuencias de
caracteres no imprimibles para controlar cosas tales como atributos de carcter (como el color,
el texto en negrita, y el texto parpadeante temido) y la posicin del cursor. Vamos a cubrir la
posicin del cursor en un poco, pero primero vamos a ver el color.
159
Confusin Terminal
Ya en la antigedad, cuando los terminales se engancharon a equipos remotos, haba
muchas marcas de la competencia de los terminales y todos ellos trabajaron de
manera diferente. Tenan diferentes teclados y todos ellos tenan diferentes formas de
interpretar la informacin de control. Unix y sistemas tipo Unix tienen dos
subsistemas ms complejos para hacer frente a la babel de control del terminal
(denominado termcap y terminfo). Si nos fijamos en lo ms profundo de la
configuracin del emulador de terminal es posible encontrar una configuracin para
el tipo de emulacin de terminal.
En un esfuerzo por hacer terminales parecen ser una especie de lenguaje comn, el
American National Standards Institute (ANSI) desarroll un conjunto estndar de
secuencias de caracteres para controlar terminales de vdeo. Old Time usuarios de
DOS recordarn la AN - archivo SI.SYS que se utiliz para permitir la interpretacin
de estos cdigos.
- Personalizacin de El Smbolo
13
Color de los caracteres se controla mediante el envo del emulador de terminal un cdigo de
escape ANSI incrustado en el flujo de caracteres que se mostrar. El cdigo de control no
"imprimir" en la pantalla, sino que se interpreta por el terminal como una instruccin. Como
vimos en la tabla anterior, el \ [y \] secuencias se utilizan para encapsular caracteres no
imprimibles. Un cdigo de escape ANSI comienza con una octal 033 (el cdigo generado por
la tecla de escape), seguido de un atributo de carcter opcional, seguido de una instruccin.
Por ejemplo, el cdigo para establecer el color del texto a la normalidad (atributo = 0), texto en
negro es:
\ 033 [0; 30m
Aqu hay una tabla de colores de texto disponibles. Observe que los colores se dividen en dos
grupos, diferenciados por la aplicacin del atributo de negrita carcter (1) que crea la
apariencia de los colores "ligeros":
Table14- 2: Secuencias de escape utiliza para ajustar colores de texto
Secuencia
Negro
Gris oscuro
Rojo
Red Light
Verde
Verde Luz
Marrn
Amarillo
Azul
Azul claro
Prpura
Purpreo claro
160
Secuencia
Aadiendo color
\ 033 [0; 36m
Cian claro
Blanco
Vamos a tratar de hacer un smbolo rojo. Nos insertaremos el cdigo de escape por el
principio:
<M @ linuxbox ~> $ PS1 = "\ [\ 033 [0; 31m \] <\ u @ \ h \ W>
<m @ linuxbox ~> $ \ $"
Eso funciona, pero aviso de que todo el texto que escribimos despus el smbolo tambin es
rojo. Para solucionar esto, vamos a aadir otro cdigo de escape hasta el final de la
confirmacin 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!
Tambin es posible configurar el color de fondo del texto utilizando los cdigos que figuran a
continuacin. Los colores de fondo no son compatibles con el atributo negrita.
Tabla 13-3: Secuencias de escape utiliza para establecer el color de fondo
Secuencia
Color de fondo
Secuencia
Color de fondo
Negro
Azul
Rojo
Prpura
Verde
Marrn
Cyan
Gris claro
<M @ linuxbox ~> $ PS1 = "\ [\ 033 [0; 41m \] <\ u @ \ h \ W> \ $ \ [\ 033 [0m \]"
<M @ linuxbox ~> $
Podemos crear un smbolo con un fondo rojo mediante la aplicacin de un simple cambio en el
primer cdigo de escape:
Pruebe los cdigos de colores y ver lo que puede crear!
161
13 - Personalizacin de El Smbolo
Mover el cursor
Cdigos de escape se pueden utilizar para posicionar el cursor. Esto se utiliza comnmente
para proporcionar un reloj o algn otro tipo de informacin en una ubicacin diferente en la
pantalla, tal como una esquina superior cada vez que el smbolo se dibuja. Aqu est una lista
de los cdigos de escape que posicionan el cursor:
Tabla 13-4: Secuencias de Escape movimiento del cursor
Escapar Cdigo
\ 033 [l; cH
Accin
Mueva el cursor a la lnea L y la columna c
\ 033 [nA
\ 033 [NB
\ 033 [nC
\ 033 [nD
\ 033 [2J
\ 033 [K
\ 033 [s
\ 033 [u
El uso de los cdigos de arriba, vamos a construir un indicador que seala a una barra roja en
PS1 = "\ [\ 033 [s \ 033 [0; 0H \ 033 [0; 41m \ 033 [K \ 033 [1; 33m \ t \ 033 [0m
\ 033 [u \] <\ u @ \ h \ W> \ $ "
la parte superior de la pantalla que contiene un reloj (dictada en texto amarillo) cada vez que
se muestra el smbolo. El cdigo para el smbolo es esta cadena busca formidable:
Echemos un vistazo a cada parte de la cadena para ver que es lo que hace:
162
Secuencia
\[
\ 033 [s
Mover el cursor
Accin
Comienza una secuencia de caracteres no imprimibles. El propsito
de esto es para permitir bash para calcular correctamente el tamao
del smbolo del visible. Sin un clculo exacto, funciones de edicin
de lnea de comandos no pueden colocar el cursor correctamente.
Almacenar la posicin del cursor. Esto es necesario para volver a la
ubicacin de smbolo despus de la barra y el reloj se han elaborado
en la parte superior de la pantalla. Tenga en cuenta que algunos
emuladores de terminal no honran este cdigo.
\ 033 [0; 0H
\ 033 [0m
\ 033 [u
\]
<\ U @ \ h \ W> \
$
Ahorro El Prompt
Obviamente, no queremos estar escribiendo monstruo que todo el tiempo, as que vamos a
querer guardar nuestro en alguna parte del sistema. Podemos hacer el smbolo permanente
PS1 = "\ [\ 033 [s \ 033 [0; 0H \ 033 [0; 41m \ 033 [K \ 033 [1; 33m \ t \ 033 [0m
\ 033 [u \]
aadiendo a nuestro archivo .bashrc. Para ello, aadir estas dos lneas al archivo:
163
<\ U @ \ h \ W>
\ $ "export PS1
13 - Personalizacin de El Smbolo
Resumiendo
Lo creas o no, hay mucho ms que se puede hacer con los mensajes que implican funciones de
shell y los scripts que no hemos cubierto aqu, pero este es un buen comienzo. No todo el
mundo le importa lo suficiente como para cambiar el smbolo, ya que el indicador
predeterminado es generalmente satisfactoria. Pero para aquellos de nosotros que les gusta
juguetear, la cscara proporciona la oportunidad para que muchas horas de diversin trivial.
Lectura adicional
164
14 - Gestin de paquetes
165
14 - Gestin de paquetes
Si gastamos todo momento en la comunidad Linux, escuchamos muchas opiniones en cuanto
a cul de las muchas distribuciones de Linux es "mejor". A menudo, estas discusiones se
ponen realmente tonto, centrndose en aspectos como la hermosura del fondo del escritorio
(algunas personas ganaron 't utilizar Ubuntu debido a su esquema de color por defecto!) y
otros asuntos triviales.
El determinante ms importante de la calidad de la distribucin es el sistema de paquetes y la
vitalidad de la comunidad el apoyo de la distribucin. A medida que pasamos ms tiempo
con Linux, vemos que su entorno de software es extremadamente dinmico. Las cosas estn
cambiando constantemente. La mayor parte de la grada superior de las distribuciones Linux
liberar nuevas versiones cada seis meses y muchos programas individuales actualiza todos los
das. Para mantenerse al da con esta ventisca de software, necesitamos buenas herramientas
para la gestin de paquetes.
Gestin de paquetes es un mtodo de instalacin y mantenimiento de software en el sistema.
Hoy en da, la mayora de la gente puede satisfacer todas sus necesidades de software
mediante la instalacin de paquetes de su distribucin de Linux. Esto contrasta con los
primeros das de Linux, cuando uno tena que descargar y compilar el cdigo fuente con el fin
de instalar el software. No es que haya nada malo con la compilacin de cdigo fuente; De
hecho, tener acceso al cdigo fuente es la gran maravilla de Linux. Nos (y todos los dems) le
da la capacidad de examinar y mejorar el sistema. Es slo que el tener un paquete
precompilado es ms rpido y ms fcil de tratar.
En este captulo, vamos a ver algunas de las herramientas de lnea de comandos utilizados
para la gestin de paquetes. Si bien todas las principales distribuciones proporcionan potentes
y sofisticados programas grficos para el mantenimiento del sistema, es importante aprender
acerca de los programas de lnea de comandos, tambin. Ellos pueden realizar muchas tareas
que son difciles (o imposibles) de hacer con sus homlogos grficas.
Packaging Systems
Diferentes distribuciones utilizan diferentes sistemas de envasado y como regla general, un
paquete destinado a una distribucin no es compatible con otra distribucin. La mayora de
las distribuciones caen en una de dos campos de las tecnologas de envasado: el campamento
de Debian ".deb" y el campo ".rpm" Red Hat. Hay algunas excepciones importantes, como
Gentoo, Slack- ware, y Prospectiva, pero la mayora de los otros usan uno de estos dos
sistemas bsicos.
166
Packaging Systems
Sistema de Embalaje
Package Files
La unidad bsica de software en un sistema de envasado es el archivo del paquete. Un archivo
de paquete es una coleccin comprimido de archivos que componen el paquete de software.
Un paquete puede consistir en numerosos programas y archivos de datos que apoyan los
programas. Adems de los archivos que se instale, el archivo del paquete tambin incluye
metadatos acerca del paquete, como un texto de descripcin del paquete y su contenido.
Adems, muchos paquetes contienen secuencias de comandos previas y posteriores a la
instalacin que realizan tareas de configuracin antes y despus de la instalacin del paquete.
Los archivos del paquete son creados por una persona conocida como mantenedor del
paquete, a menudo (pero no siempre) un empleado del proveedor de distribucin. El
mantenedor del paquete obtiene el software en forma de cdigo fuente desde el proveedor de
aguas arriba (el autor del programa), compila y crea los metadatos del paquete y las
secuencias de comandos de instalacin necesarios. A menudo, el mantenedor del paquete se
aplicar modificaciones al cdigo fuente original para mejorar la integracin del programa con
las otras partes de la distribucin de Linux.
Repositorios
Mientras que algunos proyectos de software eligen realizar su propio embalaje y distribucin,
la mayora de los paquetes actuales son creados por los proveedores de distribucin y los
terceros interesados. Los paquetes se pondrn a disposicin de los usuarios de una
distribucin en repositorios centrales que pueden contener muchos miles de paquetes, cada
uno especialmente construidos y mantenidos para la distribucin.
14 - Gestin de paquetes
167
Una distribucin puede mantener varios repositorios diferentes para las diferentes etapas del
ciclo de vida de desarrollo de software. Por ejemplo, generalmente existir un repositorio
"pruebas" que contiene los paquetes que slo se han construido y estn destinados a ser
utilizados por los valientes almas que estn en busca de errores antes de ser liberados para su
distribucin general. Una distribucin a menudo tienen un repositorio de "desarrollo", donde
los paquetes de trabajo-en-progreso destinados para su inclusin en la prxima versin maj o
de la distribucin se mantienen.
Una distribucin tambin puede haber relacionado repositorios de terceros. Estos son a
menudo necesarios para suministrar un software que, por razones legales, tales como patentes
o cuestiones DRM contra la elusin, no puede ser incluido en la distribucin. Tal vez el caso
ms conocido es el de apoyo DVD encriptado, que no es legal en los Estados Unidos. Los
repositorios de terceros operan en pases donde no se aplican las patentes de software y las
leyes contra la elusin. Estos repositorios suelen ser totalmente independiente de la
distribucin que apoyan y de utilizarlos, hay que saber acerca de ellos y de forma manual
incluirlos en los archivos de configuracin para el sistema de gestin de paquetes.
Dependencias
Programas rara vez "independiente"; sino que se basan en la presencia de otros componentes
de software para hacer su trabajo. Las actividades comunes, tales como entrada / salida por
ejemplo, son manejados por rutinas compartidas por muchos programas. Estas rutinas se
almacenan en lo que se denominan bibliotecas compartidas, que proporcionan servicios
esenciales a ms de un programa. Si un paquete requiere un recurso compartido, como una
biblioteca compartida, que se dice que tiene una dependencia. Los sistemas modernos de
gestin de paquetes de todas las proporcionan algn mtodo de resolucin de dependencias
para asegurar que cuando se instala un paquete, todas sus dependencias estn instaladas,
tambin.
dpkg
apt-get, aptitude
168
Cmo funciona un sistema de paquetes
Fedora, Red Hat
Enterprise Linux, CentOS
rpm
yum
Comando (s)
apt-get update
apt-cache search SEARCH_STRING
yum bsqueda SEARCH_STRING
Ejemplo: Para buscar yum repositorio para el editor de texto Emacs, este comando podra
ser
un usado:
Comando (s)
apt-get update
169
14 - Gestin de paquetes
apt-get install nombre_paquete Red Hat
Comando (s)
dpkg --install package_file
Red Hat
rpm -i package_file
rpm -i emacs-22.1-7.fc7-i386.rpm
Ejemplo: Si el archivo de paquete emacs-22.1-7.fc7-i386.rpm haba sido descargado de un sitio
no repositorio, que sera instalado de esta manera:
Nota: Dado que esta tcnica utiliza el programa rpm de bajo nivel para llevar a cabo la
instalacin, no se realiza ninguna resolucin de dependencias. Si rpm descubre una
dependencia faltante, rpm terminar con un error.
Eliminacin de un paquete
Los paquetes se pueden desinstalar utilizando el nivel alto o herramientas de bajo nivel. Las
herramientas de alto nivel se muestran a continuacin.
170
Comando (s)
Debian
Red Hat
Comando (s)
Debian
Red Hat
Comando (s)
Debian
171
14 - Gestin de paquetes
Red Hat
-U rpm package_file
rpm -U emacs-22.1-7.fc7-i386.rpm
Ejemplo: Actualizacin de una instalacin existente de emacs a la versin contenida en el
archivo del paquete emacs-22.1-7.fc7-i386.rpm en un sistema Red Hat:
Nota: dpkg no tiene una opcin especfica para la actualizacin de un paquete frente a la
instalacin de uno como rpm hace.
Comando (s)
dpkg --list
Red Hat
rpm -qa
Comando (s)
dpkg --status nombre_paquete
Red Hat
rpm -q nombre_paquete
172
Comando (s)
apt-cache show nombre_paquete
Red Hat
Comando (s)
dpkg --search nombre_archivo
Red Hat
Ejemplo: Para
ver
Resumiendo
En los captulos que siguen, vamos a explorar muchos programas diferentes que abarcan una
amplia gama de reas de aplicacin. Si bien la mayora de estos programas son comnmente
instalados por defecto, es posible que necesitemos instalar paquetes adicionales si los
programas necesarios no estn ya instalados en nuestro sistema. Con nuestro nuevo
conocimiento (y apreciacin) del paquete
173
Lectura adicional
Lectura adicional
Dedique algn tiempo a conocer el sistema de gestin de paquetes para su distribucin. Cada
distribucin proporciona documentacin para sus herramientas de gestin de paquetes.
Adems, aqu estn algunas fuentes ms genricas:
El captulo de Debian GNU / Linux FAQ en la administracin de paquetes ofrece una
visin general de la gestin de paquetes en sistemas Debian:
http://www.debian.org/doc/FAQ/ch-pkgtools .en.html
La pgina principal del proyecto
RPM: http://www.rpm.org
La pgina de inicio para el proyecto de la Universidad de Duke
YUM: http://linux.duke.edu/projects/yum/
Por un poco de historia, la Wikipedia tiene un artculo sobre los metadatos:
http://en.wikipedia.org/wiki/Metadata
15 - Soporte de almacenamiento
175
15
- Soporte de almacenamiento
En los captulos anteriores hemos visto la manipulacin de los datos a nivel de archivo. En
este captulo, vamos a considerar los datos a nivel de dispositivo. Linux tiene capacidades
increbles para el manejo de dispositivos de almacenamiento, ya sea de almacenamiento fsico,
tales como discos duros, o almacenamiento de red o dispositivos de almacenamiento virtuales
como RAID (matriz redundante de discos independientes) y LVM (Logical Volume Manager).
Sin embargo, ya que este no es un libro sobre la administracin del sistema, no vamos a tratar
de cubrir todo este tema en profundidad. Lo que vamos a tratar de hacer es introducir algunos
de los conceptos y comandos de teclado que se utilizan para gestionar los dispositivos de
almacenamiento.
Para llevar a cabo los ejercicios de este captulo, vamos a utilizar una unidad flash USB, un
disco CD-RW (para sistemas equipados con una grabadora de CD-ROM) y un disquete (de
nuevo, si el sistema est equipado para ello.)
Vamos a ver los siguientes comandos:
mount - Montar un sistema de archivos
umount - Desmontar un sistema de archivos
fsck - Comprobar y reparar un sistema de archivos
fdisk - Particin tabla manipulador
mkfs - Crear un sistema de archivos
fdformat - Formatear un disquete
dd - Escribir los datos en bloque orientado directamente a un dispositivo
genisoimage (mkisofs) - Crear un archivo de imagen ISO 9660
wodim (cdrecord) - Escribir datos en un soporte de almacenamiento ptico
md5sum - Calcula una suma de comprobacin MD5
con los dispositivos conectados en varios puntos. Esto contrasta con otros sistemas operativos
como MS-DOS y Windows que mantienen los rboles del sistema de archivos separados para
cada dispositivo (por ejemplo, C: \, D: \, etc.).
Un archivo llamado / etc / fstab muestra los dispositivos (normalmente particiones de disco
duro) que se van a montar en el arranque. He aqu un ejemplo / etc / fstab de un sistema
Fedora 7:
LABEL = / 12
LABEL = / home
LABEL = / b00t
tmpfs
devpts
sysfs
proc
LABEL =
SWAP-sda3
/
/ Home
/ Boot
/ Dev / shm
/ dev / pts
/ sys
/ Proc
intercambio
ext3
ext3
ext3
tmpfs
devpts
sysfs
proc
interca
mbio
por defecto
por defecto
por defecto
por defecto
gid = 5, mode =
620 defecto
por
por defecto
por defecto
11
12
12
00
00
00
00
00
La mayora de los sistemas de archivos que figuran en este fichero de ejemplo son virtuales y
no son aplicables a nuestra discusin. Para nuestros propsitos, los interesantes son los tres
primeros:
LABEL = / 12
LABEL = / home
LABEL = / b00t
11
12
12
Estas son las particiones del disco duro. Cada lnea del archivo se compone de seis campos,
de la siguiente manera:
Tabla 15-1: Campos / etc / fstab
Contenido del campo
1 dispositivo
177
/
/ Home
/ Boot
ext3
ext3
ext3
por defecto
por defecto
por defecto
Descripcin
Tradicionalmente, este campo contiene el nombre real de
un archivo de dispositivo asociado con el dispositivo fsico,
como por ejemplo / dev / hda1 (la primera particin del
dispositivo maestro en el primer canal IDE). Pero con los
ordenadores de hoy en da, que tienen muchos dispositivos
que son conectables en caliente (como unidades USB),
muchas distribuciones modernas de Linux
15 - Soporte de almacenamiento
Punto de montaje
Archivo Tipo de
sistema
Opciones
Frecuencia
Orden
178
15 - Soporte de
almacenamiento
TEM) se ha montado en /media/live-1.0.10-8, y es de tipo iso9660 (CDROM). A los efectos de
nuestro experimento, estamos interesados en el nombre del dispositivo. Al realizar este
experimento usted mismo, el nombre del dispositivo ser probablemente diferente.
El siguiente paso es crear un nuevo punto de montaje del disco. Un punto de montaje es
simplemente un directorio en alguna parte en el rbol del sistema de archivos. No hay nada
especial en ello. Ni siquiera tiene que ser un directorio vaco, aunque si se monta un
dispositivo en un directorio que no est vaca, usted no ser capaz de ver contenidos previos
del directorio hasta que se desmonte el dispositivo. Para nuestros propsitos, vamos a crear
un nuevo directorio:
[Root @ linuxbox ~] # mkdir / mnt / cdrom
Por ltimo, monte el CD-ROM en el nuevo punto de montaje. La opcin -t se utiliza para
especificar el tipo de sistema de archivos:
180
182
/ Dev / lp *
/ Dev / sd *
/ Dev / sr *
Unidades de disquete.
IDE (PATA) de discos en sistemas ms antiguos. Placas base tpicas
contienen dos conectores IDE o canales, cada uno con un cable con
dos puntos de fijacin para las unidades. La primera unidad en el
cable se llama el dispositivo maestro y el segundo se llama el
dispositivo esclavo. Los nombres de los dispositivos se ordenan de tal
manera que / dev / hda se refiere al dispositivo principal en el
primer canal, / dev / hdb es el dispositivo esclavo en el primer canal;
/ Dev / hdc, el dispositivo maestro en el segundo canal, y as
sucesivamente. Un dgito de salida indica el nmero de particin en
el dispositivo. Por ejemplo, / dev / hdal se refiere a la primera
particin en el primer disco duro en el sistema, mientras que / dev /
hda hace referencia a toda la unidad.
Impresoras.
Discos SCSI. En los sistemas recientes de Linux, el kernel trata todos
los dispositivos (incluyendo en forma de disco PATA / discos duros
SATA, unidades flash y dispositivos de almacenamiento masivo
USB, como reproductores de msica porttiles y cmaras digitales)
como discos SCSI. El resto del sistema de nombres es similar a la
anterior / dev / hd * esquema de nombres descrito anteriormente.
Las unidades pticas (lectores de CD / DVD y quemadores).
Adems, a menudo vemos enlaces simblicos, como / dev / cdrom, / dev / dvd, y / dev /
floppy, que apuntan a los archivos de dispositivos reales, proporcionado para su
conveniencia.
Si usted est trabajando en un sistema que no se monta automticamente los dispositivos
extrables, puede utilizar la siguiente tcnica para determinar cmo el dispositivo extrable se
llama cuando est unido. En primer lugar, comenzar una visin en tiempo real de los / var /
[me @ linuxbox ~] $ sudo cola -f / var / log / messages
log / messages o / var / log archivo / syslog (usted puede requerir privilegios de
superusuario para esto):
Las ltimas lneas del archivo se mostrarn a continuacin, hacer una pausa. A continuacin,
conecte el dispositivo extrable. En este ejemplo, vamos a utilizar una unidad flash de 16 MB.
Casi de inmediato, el kernel se dar cuenta de que el dispositivo y la sonda que:
183
15
- Soporte de almacenamiento
kernel: sd
disco extrable 23
de julio 10:07:59
sg3 tipo 0
00
Jul 23 10:07:53 kernel linuxbox: usando scsi3 configuracin # 1 elegido:: usb 3-2:
uhci_hcd y direccin de 02 de julio 23 del
ncleo 10:07:53 linuxbox: desde el 1 de nuevo usb dispositivo USB de velocidad
eleccin
Jul23
2310:07:53
10:07:59kernel
kernellinuxbox:
linuxbox:Los
sdb: sdb1
completa
3.2 emulacin SCSI para
Jul
23 de julio del
kernel 10:07:59 linuxbox: sd 3: 0: 0: 0: [sdb] Attached SCSI disco
dispositivos
de almacenamiento
extrable
exploracin scsi masivo USB: MENSAJE
Jul
23 10:07:58 kernel linuxbox:
(5), utilizando 36
demasiado
corto
Jul 23 10:07:58 kernel linuxbox: scsi 3: 0: 0:resultado
0: Direct-Access
Easy
Disco 1.00
0 ANSI 2
[Sdb] 31263 512-byte
kernel: sd
sectores de hardware (16 MB)
proteccin contra
23 de julio 10:07:59 linuxbox off
kernel: sd 3: 0: 0: 0: [Sdb] De
escritura
est
Jul 23 10:07:59 cach linuxbox:
escribir a travs de 23 de julio
kernel: sd 3: 0: 0: 0: [Sdb] Suponiendo unidad
10:07:59 sectores de hardware
linuxbox (16 MB) 23 de julio
kernel: sd 3: 0: 0: 0: [Sdb] 31263 512-byte
10:07:59 linuxbox off
proteccin contra
23 de julio 10:07:59 cach
kernel: sd 3: 0: 0: 0: [Sdb] De
escritura
est
linuxbox: escribir a travs de
kernel: sd 3: 0: 0: 0: [Sdb] Suponiendo unidad
Despus de la pantalla hace una pausa de nuevo, pulse Ctrl-c para obtener la parte posterior
del sistema. Las partes interesantes de la salida son las repetidas referencias a "[sdb]", que
coincide con nuestra expectativa de un nombre de dispositivo de disco SCSI. Sabiendo esto,
dos lneas se vuelven particularmente esclarecedor:
Esto nos dice el nombre de dispositivo es / dev / sdb para todo el dispositivo y / dev / sdb1
para la primera particin en el dispositivo. Como hemos visto, el trabajo con Linux est lleno
de interesante trabajo de detective!
Consejo: Utilizando la tcnica de tail -f / var / log / messages es una gran manera de ver
lo que el sistema est haciendo en tiempo casi real.
Con nuestro nombre del dispositivo en la mano, ahora podemos montar la unidad flash:
184
185
15 - Soporte de
almacenamiento
Comando (m para ayuda):
Introduccin de una "m" se mostrar el men del
programa:
Accin Comando
un alternar una bandera arrancable
b edicin de etiquetas de disco BSD
c alternar el DOS compatibilidad bandera d
eliminar una particin
l
Lista conocido tipos de particiones
m imprimir este men
n aadir una nueva particin
o crear una nueva tabla de particiones DOS vaca p
imprimir la tabla de particiones
q salir sin guardar los cambios
s crear una nueva etiqueta de disco Sun vaco
t
cambiar Identificacin del sistema de una
particin
u cambiar la pantalla de entrada de unidades /
v
verificar la tabla de particiones
tabla de escritura w en el disco y la salida (slo
expertos) x funcionalidad adicional
Fin
1008
Bloques Id Sistema
15608+ b W95 FAT32
En este ejemplo, vemos un dispositivo de 16 MB con una nica particin (1) que utiliza 1.006
de los 1.008 cilindros disponibles en el dispositivo. La particin se identifica como una
particin FAT32 de Windows 95. Algunos programas utilizan este identificador para limitar el
tipo de operacin que se puede hacer para el disco, pero la mayora de las veces no es crtica
para cambiarlo. Sin embargo,
186
Creacin de Nuevos
Sistemas de archivos
en aras de la demostracin, nosotros lo cambiar para indicar una particin de Linux. Para
ello, tenemos que averiguar primero qu ID se utiliza para identificar una particin de Linux.
En el listado anterior, vemos que el ID de "b" se utiliza para especificar la particin existente.
Para ver una lista de los tipos de particiones disponibles, nos referimos de nuevo al men del
programa. No podemos ver la siguiente opcin:
Si hubiramos decidido dejar el dispositivo sin cambios, podramos haber entrado en "q" en el
smbolo,
187
[Me @ linuxbox ~] $ sudo mkfs -t ext3 / dev / sdbl mke2fs 1.40.2 (12-jul-2007)
Etiqueta del sistema de archivos =
Tipo de SO: Linux
Tamao de bloque = 1024 (log = 0)
Tamao del fragmento = 1024 (log = 0)
3904 inodos, 15608 bloques
780 bloques (5.00%) reservados para el superusuario Primer bloque de datos = 1
bloquea los mximos del sistema de archivos = 15990784 2 grupos de bloques
8192 bloques por grupo, 8192 fragmentos por grupo
1952 inodos por grupo
Las copias de seguridad almacenadas en Superblock bloques:
8193
Escribir tablas de inodos: Creacin de hecho revista (1024 bloques): hecho
Escribiendo superbloques y la informacin contable del sistema de ficheros: hecho
Este sistema de archivos se comprobar de forma automtica cada 34 montajes o 180
das, lo que ocurra primero. Utilice tune2fs -c -i o para anular. [Me @ linuxbox ~] $
15 - Soporte de almacenamiento que habra salido del programa sin tener que escribir los
cambios. Podemos ignorar el mensaje de advertencia que suena ominosa.
________________________________________________________ Creacin
Sistemas de archivos
de
Nuevos
se puede aplicar a los discos duros internos y otros dispositivos de almacenamiento extrables,
como unidades de disco duro USB.
Lo que el fsck?
En la cultura Unix, la palabra "fsck" se utiliza a menudo en lugar de una palabra
popular con el que comparte tres letras. Esto es especialmente apropiado, teniendo en
cuenta que es probable que se pronunciar la palabra antes mencionada si te
encuentras en una situacin en la que se ven obligados a ejecutar fsck.
hacer lo siguiente:
En mi experiencia, la corrupcin del sistema de archivos es bastante raro a menos que haya un
problema de hardware, tales como una unidad de disco en su defecto. En la mayora de los
sistemas, la corrupcin del sistema de archivos detectados en el arranque har que el sistema
se detenga y que dirija a ejecutar fsck antes de continuar.
Formatear disquetes
Para aquellos de nosotros todava el uso de computadoras con edad suficiente para ser
equipado con disquete
189
15 - Soporte de
almacenamiento
unidades, que pueden gestionar los dispositivos, tambin. Preparacin de un disquete en
blanco para su uso es un proceso de dos pasos. En primer lugar, se realiza un formateo de bajo
nivel 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
Verificacin de hecho
...
A continuacin, se aplica un sistema de archivos FAT en el disquete con mkfs:
190
Resumiendo
En este captulo hemos visto las tareas bsicas de gestin de almacenamiento. Hay, por
supuesto, muchos ms. Linux soporta una amplia gama de dispositivos de almacenamiento y
esquemas del sistema de archivos. Tambin ofrece muchas caractersticas para la
interoperabilidad con otros sistemas.
Lectura adicional
Echa un vistazo a las pginas de manual de los comandos que hemos cubierto. Algunos de
ellos soportan un gran nmero de opciones y operaciones. Tambin, busque los tutoriales en
lnea para aadir unidades de disco duro a su sistema Linux (hay muchos) y el trabajo con los
medios de comunicacin ptica.
Crdito extra
A menudo es til para verificar la integridad de una imagen ISO que hemos descargado. En la
mayora de los casos, un distribuidor de una imagen iso tambin suministrar un archivo de
suma de comprobacin. Una suma de control es el resultado de un clculo matemtico extico
que resulta en un nmero que representa el con-
193
15 - Soporte de
almacenamiento
tienda de campaa del archivo de destino. Si el contenido del cambio de archivos, incluso por
un bit, la suma de comprobacin resultante ser muy diferente. El mtodo ms comn de la
generacin de suma de control utiliza el programa md5sum. Cuando utilice md5sum,
produce un nmero hexadecimal nico:
image.iso md5sum
Image.iso 34e354760f9bb7fbf85c96f6a3f94ece
Despus de descargar una imagen, se debe ejecutar md5sum en contra de ella y comparar los
resultados con el valor md5sum proporcionada por el editor.
Adems de comprobar la integridad de un archivo descargado, podemos usar md5sum para
verificar medios pticos recin escritos. Para ello, primero calculamos la suma de
comprobacin del archivo de imagen y luego calcular una suma de comprobacin de los
medios de comunicacin. El truco para la verificacin de los medios de comunicacin es la de
limitar el clculo a slo la parte de los medios de comunicacin ptica que contiene la imagen.
Hacemos esto mediante la determinacin de la cantidad de 2.048 bloques de byte contiene la
imagen (medios pticos siempre se escribe en 2048 bloques de bytes) y la lectura de esa
cantidad de bloques de los medios de comunicacin. En algunos tipos de medios de
comunicacin, esto no es necesario. Un CD-R escrita en disc-at-once modo se puede
comprobar de esta manera:
194
16 - Redes
16 - Redes
Cuando se trata de la creacin de redes, probablemente no hay nada que no se puede hacer
con Linux. Linux se utiliza para construir todo tipo de sistemas y dispositivos de red,
incluidos los servidores de seguridad, enrutadores, servidores de nombres, NAS (Network
Attached Storage) cajas y as sucesivamente.
As como el tema de la creacin de redes es enorme, por lo que son el nmero de comandos
que se pueden usar para configurar y controlar. Nos vamos a centrar nuestra atencin en slo
algunos de los ms utilizados queridos. Los comandos elegidos para examen incluyen los
utilizados para supervisar las redes y los utilizados para transferir archivos. Adems, vamos a
explorar el programa ssh que se utiliza para realizar conexiones remotas. Este captulo
cubrir:
195
16 - Redes
y algunos pueden requerir privilegios de superusuario para ejecutar.
de ping
El comando ms bsico de la red es de ping. El comando ping enva un paquete de red
especial llamada ECHO_REQUEST IMCP a un host especificado. La mayora de los
dispositivos de red que reciben este paquete respondern a la misma, lo que permite la
conexin de red para ser verificada.
Nota: Es posible configurar la mayora de los dispositivos de red (incluyendo los hosts
de Linux) hacer caso omiso de estos paquetes. Esto se hace generalmente por razones
de seguridad, para ocultar parcialmente una serie de un atacante potencial. Tambin es
[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 ms
64 bytes de vhost.sourceforge.net (66.35.250.210): icmp_seq = 2 TTL = 43 tiempo
linuxbox ~] $ de ping linuxcommand.org
=[Me
108@ms
64 bytes de vhost.sourceforge.net (66.35.250.210): icmp_seq = 3 ttl = 43 tiempo =
106 ms
64 bytes de vhost.sourceforge.net (66.35.250.210): icmp_seq = 4 TTL = 43 tiempo
= 106 ms
64 bytes de vhost.sourceforge.net (66.35.250.210): icmp_seq = 5 TTL = 43 tiempo
= 105 ms
64 bytes de vhost.sourceforge.net (66.35.250.210): icmp_seq = 6
comn que los servidores de seguridad para ser configurados para bloquear el trfico
de IMCP.
Por ejemplo, para ver si podemos llegar a linuxcommand.org (uno de nuestros sitios
favoritos;-), podemos utilizar el uso de ping como esto:
Una vez iniciado, mesa de ping contina enviando paquetes a un intervalo especificado (por
defecto es de un segundo) hasta que se interrumpe:
196
traceroute
El programa traceroute (algunos sistemas utilizan el programa tracepath similar en lugar)
muestra una lista de todo el trfico 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 a
hacer esto:
La salida es la siguiente:
197
pos-0-7-3-1.newyork.savvis.net (204.70.195.93)
19.634 ms
12 cr2-pos-0-7-3-0.chicago.savvis.net (204.70.192.109)
41.586 ms
42.843 ms cr2-tengig-0-0-2-0.chicago.savvis.net (204.70.196.242) 43,115 ms
13 hr2-tengigabitethernet-12-1.elkgrovech3.savvis.net
(204.70.195.122)
44.215 ms 41.833 ms 45.658 ms
14 csr1-ve241.elkgrovech3.savvis.net (216.64.194.42)
46.840 ms
43.372 ms 47.041 ms
15 64.27.160.194 (64.27.160.194)
56.137 ms 55.887 ms 52.810 ms
16 slashdot.org (216.34.181.45)
42.727 ms 42.016 ms 41.437 ms
[Me @ linuxbox ~] $ netstat -ie
eth0
Enlace encap: Ethernet HWaddr 00: 1d: 09: 9b: 99: 67
inet addr: 192.168.1.2 Bcast: Mscara 192.168.1.255: 255.255.255.0 inet6
addr: fe80 :: 21d: 9ff: fe9b: 9967/64 Alcance: Enlace ARRIBA DIFUSIN
CORRIENDO MULTICAST MTU: 1500 Mtrica: 1 paquetes RX: 238488
errores: 0 cado: 0: 0 sobrecostos marco: 0 paquetes TX: 403217 Errores: 0
cado: 0: 0 sobrecostos de transporte: 0 colisiones: 0 txqueuelen: 100
Bytes RX: 153098921 (146,0 MB) TX bytes: 261 035 246 (248.9 MB)
Memoria: fdfc0000-fdfe0000
he aqu Enlace encap: Bucle local
inet addr: 127.0.0.1
Mscara: 255.0.0.0
inet6 addr: :: 1/128 Alcance: Anfitrin
UP LOOPBACK FUNCIONANDO MTU: 16436 Mtrica: 1
Paquetes RX: errores 2208: 0 bajaron: 0 sobrecostos: 0 marco: 0
Paquetes TX: errores 2208: 0 bajaron: 0 sobrecostos: 0 portadora: 0
colisiones: 0 txqueuelen: 0
Bytes RX: 111490 (108.8 KB) TX bytes: 111490 (108.8 KB)
16 - Redes
En la salida, se puede ver que la conexin de nuestro sistema de prueba para slashdot.org
requiere que atraviesan diecisis routers. Para los routers que proporcionan informacin de
identificacin, vemos sus nombres de host, direcciones IP y los datos de rendimiento, que
incluye tres muestras de tiempo de ida y vuelta desde el sistema local al router. Para los
routers que no proporcionan informacin de identificacin (debido a la configuracin del
router, la congestin de red, cortafuegos, etc.), vemos como asteriscos en la lnea de salto
nmero 2.
netstat
El programa netstat se usa para examinar diversas configuraciones y estadsticas de la red. A
travs del uso de sus muchas opciones, podemos mirar a una variedad de caractersticas en
nuestra configuracin de red. El uso de la opcin ", es decir", podemos examinar las interfaces
de red en nuestro sistema:
En el ejemplo anterior, podemos ver que nuestro sistema de prueba tiene dos interfaces de
red. La primera,
198
*
192.168.1.1
-r
Banderas Genmask
255.255.255.0 U
0.0.0.0 UG
MSS Ventana
00
00
irtt De Iface
0 eth0
0 eth0
En este sencillo ejemplo, vemos una tabla de enrutamiento tpica de una mquina cliente en
un (Red de rea local) LAN detrs de un firewall / router. La primera lnea de la lista muestra
el destino 192.168.1.0. Direcciones IP que terminan en cero se refiere a las redes en lugar de
hosts individuales, por lo que este destino se refiere a cualquier host en la LAN. El siguiente
campo, puerta de enlace, es el nombre o direccin IP de la puerta de enlace (enrutador) que se
utiliza para ir desde el host actual de la red de destino. Un asterisco en este campo indica que
no se necesita ninguna puerta de enlace.
La ltima lnea contiene el valor por defecto de destino. Esto significa que cualquier trfico
destinado a una red que no aparece en la lista de otro modo en la tabla. En nuestro ejemplo,
vemos que la puerta de entrada se define como un router con la direccin de 192.168.1.1, que
presumiblemente sabe qu hacer con el trfico de destino.
El programa netstat tiene muchas opciones y slo hemos mirado un par. Echa un vistazo a la
pgina man netstat para ver la lista completa.
ftp
Uno de los verdaderos programas "clsicos", ftp obtiene su nombre del protocolo que utiliza el
Protocolo de transferencia de archivos. FTP se utiliza ampliamente en la Internet para las
descargas de archivos. La mayora, si no todos,
199
200
annimo
ls
LCD de escritorio
adis
Significado
Invoque el programa ftp y haga que la
conexin con el servidor de archivos del
servidor FTP.
Nombre de inicio de sesin. Despus de la
indicacin de inicio de sesin, aparecer
una solicitud de contrasea. Algunos
servidores aceptarn una contrasea en
blanco, otros requerirn una contrasea
en la forma de una direccin de correo
electrnico. En ese caso, intente algo como
"user@example.com".
Cambie al directorio en el sistema remoto
que contiene el archivo deseado. Tenga en
cuenta que en los servidores FTP ms
annimos, los archivos para descarga
pblica se encuentran en algn lugar bajo
el directorio pub.
Anote el directorio en el sistema remoto.
Cambie el directorio en el sistema local de
- / escritorio. En el ejemplo, el programa
de ftp se invoca cuando el directorio de
trabajo era ~. Este comando cambia el
directorio de trabajo a - / escritorio.
Dgale al sistema remoto para transferir el
archivo i386.iso-ubuntu-8.04 tablero del
escritorio para el sistema local. Desde el
directorio de trabajo en el sistema local se
cambi a - / escritorio, el archivo se
descargar all.
Cierre la sesin en el servidor remoto y
poner fin a la sesin del programa ftp. Los
comandos de dejar de fumar y de salida
tambin se pueden usar.
Al escribir "ayuda" en el "ftp>" del sistema mostrar una lista de los comandos admitidos. El
uso de FTP en un servidor en el que se han concedido los permisos necesarios, es posible
llevar a cabo
201
16 - Redes _______________________________________________________________________
muchas de las tareas de gestin de archivos ordinarios. Es torpe, pero funciona.
] 3120
--.-- K / s
wget
Otro programa de lnea de comandos populares para la descarga de archivos es wget. Es til
para la descarga de contenido de ambas web y sitios FTP. Archivos individuales, mltiples
archivos, e incluso sitios enteros se pueden descargar. Para descargar la primera pgina de
linuxcommand.org podramos hacer esto:
Muchas opciones del programa permiten wget para descargar de forma recursiva, la descarga
de archivos en segundo plano (lo que le permite cerrar la sesin pero contina la descarga), y
completar la descarga de un archivo descargado parcialmente. Estas caractersticas estn bien
documentados en su pgina hombre medio mejor que la prevista.
ssh
Para abordar este problema, un nuevo protocolo llamado SSH (Secure Shell) fue desarrollado.
SSH resuelve los dos problemas bsicos de la comunicacin segura con un host remoto. En
primer lugar, autentica que la mquina remota es que se dice que es (evitando as llamado
"hombre en el medio" ataques), y en segundo lugar, que encripta todas las comunicaciones
entre los anfitriones locales y remotos.
SSH consta de dos partes. Un servidor SSH se ejecuta en el host remoto, la escucha de
conexiones entrantes en el puerto 22, mientras que un cliente SSH se utiliza en el sistema local
para comunicarse con el servidor remoto.
La mayora de las distribuciones de Linux enviar una implementacin de SSH llamada
OpenSSH desde el proyecto OpenBSD. Algunas distribuciones incluyen tanto el cliente como
los paquetes de servidor por defecto (por ejemplo, Red Hat), mientras que otros (como
Ubuntu) slo suministran el cliente. Para habilitar un sistema para recibir las conexiones
remotas, debe tener el paquete penSSH-servidor S instalado, configurado y funcionando, y (si
el sistema es o bien corriendo o est detrs de un servidor de seguridad) que debe permitir las
conexiones de red entrantes en el puerto TCP 22.
Punta : Si usted no tiene un sistema remoto para conectarse a pero quieres probar
estos ejemplos, asegrese de que el paquete OpenSSH-servidor est instalado en el
[me @ linuxbox ~] $ ssh remotas-sys
La autenticidad de acogida 'remotas-sys (192.168.1.4)' no se puede
establecer.
RSA huella digital es clave
41: ed: 7a: df: 23: 19: BF: 3c: a5: 17: BC: 61: b3: 7f: D9: bb.
Seguro que quieres continuar la conexin (s / no)?
sistema y utilizar localhost como el nombre de la mquina remota. De esta forma, la
mquina crear conexiones de red con s mismo.
El programa cliente SSH utilizado para conectarse a servidores SSH remotos se llama, muy
apropiadamente, ssh. Para conectarse a un host remoto denominado remoto-sys, usaramos el
programa cliente de ssh de este modo:
La primera vez que la conexin se intenta, se muestra un mensaje que indica que la
autenticidad del host remoto no se puede establecer. Esto se debe a que el programa cliente
nunca ha visto este host remoto antes. Para aceptar las credenciales del host remoto, escriba
"s" cuando se le solicite. Una vez establecida la conexin, el usuario se le solicita su / su
contrasea:
203
16 - Redes
Advertencia: Permanentemente aadido "a distancia-sys, 192.168.1.4 '(RSA) a la lista de
hosts conocidos. me @ contrasea del remote-sys:
cach
154596
507184
268352
0
110068
- Buffers / + / cache:
242520
533016
Intercambio: 1572856
0
1572856
[Me @ linuxbox ~] $
Es posible utilizar esta tcnica en formas ms interesantes, como este ejemplo en el que
llevamos a cabo un ls en el sistema remoto y redirigir la salida a un archivo en el sistema local:
205
16 - Redes
[me @ linuxbox ~] $ ssh 'ls *' Remote-sys> ListaDir.txt
me @ contrasea de twin4:
[Me @ linuxbox ~] $
Observe el uso de las comillas simples en el comando anterior. Esto se hace porque no
queremos que el nombre de ruta de expansin realizado en el equipo local; ms bien,
queremos que se lleva a cabo en el sistema remoto. Del mismo modo, si hubiramos querido la
salida redirigida a un archivo en la mquina remota, podramos haber colocado el operador
de redireccin y el nombre del archivo dentro de las comillas simples:
SCP y SFTP
El paquete OpenSSH tambin incluye dos programas que pueden hacer uso de un tnel SSH
encriptado para copiar archivos a travs de la red. La primera, scp (copia de seguridad) se
utiliza al igual que el programa cp familiar para copiar archivos. La diferencia ms notable es
[Me @ linuxbox ~] $ scp remotas-sys: document.txt.
me @ contrasea del remote-sys:
document.txt
100% 5581
5,5 KB / s 00:00
[Me @ linuxbox ~] $
que los nombres de ruta de origen o destino pueden estar precedidas por el nombre de un
host remoto, seguido de un carcter de dos puntos. Por ejemplo, si queremos copiar un
documento llamado doc- ument.txt de nuestro directorio personal en el sistema remoto,
Remote-sys, al directorio de trabajo actual en nuestro sistema local, podramos hacer esto:
207
Resumiendo
En este captulo, hemos estudiado el campo de las herramientas que se encuentran en la
mayora de los sistemas Linux en red. Desde Linux es tan ampliamente utilizado en servidores
y equipos de red, hay muchos ms que se puede aadir mediante la instalacin de software
adicional. Pero incluso con el conjunto bsico de herramientas, es posible realizar muchas
tareas relacionados con la red de utilidad.
Lectura adicional
208
Wikipedia contiene muchos buenos artculos de redes. stos son algunos de los
conceptos bsicos:http://en.wikipedia.org/wiki/Internet direccin de protocolo
http://en.wikipedia.org/wiki/Host nombre Resource Identifier
http://en.wikipedia.org/wiki/Uniform
17 Bsqueda
archivos
de
- Bsqueda de archivos
17
Como hemos vagado alrededor de nuestro sistema Linux, una cosa ha quedado muy claro: Un
sistema tpico de Linux tiene una gran cantidad de archivos! Esto plantea la pregunta, "Cmo
encontramos cosas?" Ya sabemos que el sistema de archivos de Linux est bien organizado de
acuerdo a las convenciones que se han transmitido de generacin en generacin de los
sistemas de tipo Unix a la siguiente, pero el gran nmero de archivos puede presentar un
problema de enormes proporciones.
En este captulo, vamos a ver dos herramientas que se utilizan para buscar archivos en un
sistema. Estas herramientas son:
Tambin vamos a mirar a un comando que se utiliza a menudo con comandos de archivos de
bsqueda para procesar la lista resultante de archivos:
Adems, vamos a introducir un par de comandos para que nos ayuden en nuestras
exploraciones:
210
211
17
- Bsqueda de archivos
Pruebas
Digamos que queremos una lista de directorios de nuestra bsqueda. Para hacer esto,
podramos aadir la siguiente prueba:
[Me @ linuxbox
~] Encontrar $ ~ -type d | wc -l
1695
La adicin de la prueba - tipo d limita la bsqueda a los directorios. Por el contrario,
podramos haber limitado la bsqueda a los archivos regulares con esta prueba:
[Me @ linuxbox
~] Encontrar $ ~ -type f | wc -l
38737
Aqu estn los ensayos de tipo de archivo comunes soportados por hallazgo:
Tabla 17-1: encontrar Tipos de archivo
Expediente
Tipo
Descripcin
d
F
Directorio
Archivo regular
Enlace simblico
Unidad
Bloques de 512 bytes. Este es el valor por defecto si no se especifica
ninguna unidad.
Bytes
Palabras de 2 bytes
M
G
archivo -cnewer
-ctime n
-empty
-Grupo nombre
-iname patrn
-inum n
213
Descripcin
Archivos de partido o directorios cuyo contenido o atributos
fueron modificada por ltima vez hace exactamente n minutos.
Para especificar hace menos de n minutos, utilizar y -n para
especificar hace ms de n minutos, uso + n.
Coinciden con los archivos o directorios cuyo contenido o
atributos eran modificada por ltima vez ms recientemente
que los de archivo.
Archivos de partido o directorios cuyo contenido o atributos
eran modificada por ltima vez n * hace 24 horas.
Coinciden con los archivos y directorios vacos.
Partido archivo o directorios pertenecientes al grupo. grupo puede
ser expresada ya sea como un nombre de grupo o como un ID de
grupo numrico.
Al igual que el - prueba de nombre pero maysculas y
minsculas.
Coinciden con los archivos con el nmero de inodo n. Esto es
til para encontrar todos los enlaces duros a un inodo
particular.
17 - Bsqueda de archivos
-mmin n
-mtime n
-name patrn
archivo -newer
-nouser
-nogroup
modo -perm
nombre -samefile
-size n
de tipo c
nombre -user
Esta no es una lista completa. La pgina de manual hallazgo tiene todos los detalles.
Operadores
Incluso con todas las pruebas que se encuentran proporciona, todava es posible que
necesitemos una mejor manera de describir las relaciones lgicas entre las pruebas. Por
ejemplo, qu pasa si lo que necesitbamos para determinar si todos los archivos y
subdirectorios de un directorio tenan permisos seguras? Nos buscar todos los archivos con
permisos que no son 0600 y los directorios con permisos que no son 0700. Afortunadamente,
encontrar proporciona una manera de combinar las pruebas utilizando los operadores lgicos
214
[Me @ linuxbox ~] encontrar $ ~ \ (-type f -no -perm 0600 \) -o \ (-type d -no -perm 0700 \)
Way
para crear relaciones lgicas ms complejas. Para expresar la prueba mencionada, podramos
hacer esto:
Caramba! Eso seguro que se ve extrao. Qu es todo esto? En realidad, los operadores no son
tan complicado una vez que llegue a conocerlos. Aqu est la lista:
Tabla 17-4: encontrar operadores lgicos
Operador
-y
-o
-no
()
Descripcin
Coincide si las pruebas en ambos lados del operador son
verdaderas. Puede ser acortado a - a. Tenga en cuenta que
cuando ningn operador est presente, -y se implic de forma
predeterminada.
Partido si una prueba a cada lado del operador es verdadero.
Puede ser acortado a -o.
Coincide si la prueba siguiente el operador es falso. Se puede
abreviar con un signo de exclamacin (!).
Grupos pruebas y operadores juntos para formar expresiones
ms grandes. Esto se utiliza para controlar la precedencia de las
evaluaciones lgicas. Por defecto, encontrar evala de izquierda
a derecha. A menudo es necesario para anular el orden de
evaluacin predeterminado para obtener el resultado deseado.
Incluso si no es necesario, a veces es til incluir los caracteres de
agrupamiento para mejorar la legibilidad de la orden. Tenga en
cuenta que dado que los personajes parntesis tienen un
significado especial para el shell, deben ser citados cuando se
utiliza en la lnea de comandos para que puedan ser pasados
como argumentos a encontrar. Por lo general, el carcter de
barra invertida se utiliza para escapar de ellos.
Con esta lista de operadores en la mano, vamos a deconstruir nuestro comando find. Cuando
se ve desde el nivel superior, vemos que nuestras pruebas estn dispuestos como dos grupos
separados por un operador -o:
(expresin 1) -o (expresin 2)
Esto tiene sentido, ya que estamos en busca de archivos con un determinado conjunto de
permisos y de directorios con un conjunto diferente. Si estamos buscando a los archivos y
directorios, por qu hacer
215
Operador
expr2 es ...
Verdadero
Falso
-y
-y
Siempre realizado
Nunca realizado
Verdadero
-o
Nunca realizado
Falso
-o
Siempre realizado
Por qu sucede esto? Se hace para mejorar el rendimiento. Tome -y, por ejemplo. Sabemos
que la expresin exprl -y expr2 no puede ser verdad si el resultado de exprl es
216
Acciones predefinidas
Vamos 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 de
bsqueda. Hay una serie de acciones predefinidas y varias formas de aplicar las acciones
definidas por el usuario. Primero echemos un vistazo a algunas de las acciones predefinidas:
Tabla 17-6: find acciones predefinidas
Accin
Descripcin
-delete
-ls
-QUIT
Al igual que con las pruebas, hay muchas ms acciones. Vea la pgina man hallazgo para los
encon
trar ~
detalles completos. En nuestro primer ejemplo, hemos hecho esto:
que produjo una lista de todos los archivos y subdirectorios contenidos dentro de nuestro
encontrar ~
-print
directorio personal. Produjo una lista porque la accin -print est implcito si no se especifica
ninguna otra accin. Por lo tanto nuestro comando tambin podra expresarse como:
Podemos utilizar find para eliminar los archivos que cumplen con ciertos criterios. Por
ejemplo, para eliminar los archivos que
217
Advertencia: No hace falta decir que usted debe tener mucho cuidado al usar la
accin -delete. Siempre pruebe el comando por primera vez por la sustitucin de la
accin para -print - Eliminar para confirmar los resultados de la bsqueda.
encontrar ~ -type f - name '* .BAK'
-print
Antes de continuar, vamos a echar otro vistazo a cmo los operadores lgicos afectan a las
acciones. Considere el siguiente comando:
Como hemos visto, este comando buscar todos los archivos regulares (-type f) cuyo nombre
termina con .BAK (-name '* .BAK') y te mostrar el nombre de ruta relativa de cada archivo
correspondiente a la salida estndar (-print) . Sin embargo, la razn el comando realiza la
manera que lo hace est determinado por las relaciones lgicas entre cada una de las pruebas
y acciones. Recuerde, no es, por defecto, una relacin -y implcita entre cada prueba y la
accin. Tambin podramos expresar el comando de esta forma de hacer las relaciones lgicas
ms fciles de ver:
encontrar ~
-type f -
Con nuestro comando plenamente expresada, echemos un vistazo a cmo los operadores
lgicos afectan su ejecucin:
Prueba / Accin
-print
- t i p o f es cierto
-type f
218
219
17 - Bsqueda de archivos
Mejora de la Eficiencia
Cuando se utiliza la accin -exec, se pone en marcha una nueva instancia del comando
especificado cada vez que un archivo coincidente se encuentra. Hay momentos en los que
podramos preferir combinar todos los resultados de bsqueda y lanzar una sola instancia de
comando. Por ejemplo, en lugar de ejecutar los comandos como este:
ls -l archivol
ls -l archivo2
podemos preferir ejecutarlos de esta manera:
ls -l archivol archivo2
haciendo as que el comando se ejecute slo una vez en lugar de varias veces. Hay dos
maneras en que podemos hacer esto. La forma tradicional, utilizando los comando xargs
externos y la forma alternativa, el uso de una nueva caracterstica de encontrarse. Vamos a
hablar de la forma alternativa de primera.
xargs
El comando xargs realiza una funcin interesante. Se acepta la entrada de la entrada estndar
y lo convierte en una lista de argumentos de un comando especificado. Con nuestro ejemplo,
podramos utilizar de esta manera: 220
Nota: Mientras que el nmero de argumentos que se pueden colocar en una lnea de
comandos es bastante grande, no es ilimitada. Es posible crear comandos que son
demasiado largos para el shell para aceptar. Cuando una lnea de comandos supera la
longitud mxima soportada por el sistema, xargs ejecuta el comando especificado con
el nmero mximo de argumentos posibles y luego repite este proceso hasta que se
agote la entrada estndar. Para ver el tamao mximo de la lnea de comandos, ejecute
xargs con la opcin --show-lmites.
17 - Bsqueda de
archivos
[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 lnea de comandos! Con estas dos lneas, hemos creado un directorio
de parque infantil con 100 subdirectorios que contienen cada una 26 archivos vacos. Trate de
que con la interfaz grfica de usuario!
El mtodo que empleamos para lograr esta magia involucrado un comando familiarizado
(mkdir), una expansin extica concha (tirantes) y un nuevo comando, toque. Al combinar
mkdir con la opcin -p (que causa mkdir para crear los directorios principales de las rutas
especificadas) con la expansin de llaves, hemos sido capaces de crear 100 subdirectorios.
El comando touch se suele utilizar para establecer o actualizar el acceso, cambiar y modificar
los tiempos de los archivos. Sin embargo, si un argumento de nombre de archivo es el de un
archivo que no existe, se crea un archivo vaco.
En nuestro patio de recreo, hemos creado 100 casos de un archivo llamado archivo-A. Vamos
a ver ellos:
222
Esto actualiza todos los archivos en el patio de recreo llamado archivo-B. A continuacin
vamos a utilizar la funcin Buscar para identificar los archivos actualizados mediante la
comparacin 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 en
todos los archivos en el patio de recreo nombramos archivo-B despus actualizamos marca de
tiempo, que ahora son "ms nuevo" de marca de tiempo y por lo tanto se pueden identificar
con la - prueba ms reciente.
Por ltimo, vamos a ir de nuevo a la prueba permisos mal que realizamos anteriormente y
aplicarlo a patio de recreo:
22
3
[Me @ linuxbox ~] $ encuentro parque \ (-type f -no -perm 0600 \) -o \ (-type d -no -perm
0700 \)
17 - Bsqueda de archivos
Este comando enumera todos los directorios 100 y 2.600 archivos en patio (as como la
indicacin de la hora y la zona de juegos en s, para un total de 2.702), ya que ninguno de ellos
[Me @ linuxbox ~] $ encuentro parque \ (-type f -no -perm 0600 chmod -exec 0600 '{}'
';' \) -o \ (-type d -no -perm 0700 chmod -exec 0700 '{ } ''; '\)
cumple con nuestra definicin de "buenas permisos." Con nuestro conocimiento de los
operadores y las acciones, podemos aadir acciones a este comando para aplicar los nuevos
permisos a los archivos y directorios en nuestro patio de recreo:
Sobre una base del da a da, podemos encontrar que es ms fcil emitir dos comandos, uno
para los directorios y otra para los archivos, en lugar de este comando un gran complejo, pero
es bueno saber que podemos hacerlo de esta manera. El punto importante aqu es entender
cmo los operadores y las acciones pueden ser utilizados en conjunto para realizar tareas
tiles.
Opciones
Por ltimo, tenemos las opciones. Las opciones se utilizan para controlar el alcance de una
bsqueda hallazgo. Pueden ser incluidos con otras pruebas y acciones cuando la construccin
de expresiones de bsqueda. Aqu est una lista de los ms comnmente utilizados:
Tabla 17-7: encontrar opciones
Opcin
-depth
- m a x d e p t h niveles
- m i n d e p t h niveles
-mount
224
Descripcin
Hallazgo directa para procesar los archivos de un directorio
antes de que el propio directorio. Esta opcin se aplica
automticamente cuando se especifica la accin -delete.
Establecer el nmero mximo de niveles que se encuentran
descender en un rbol de directorios al realizar pruebas y
acciones.
Establecer el nmero mnimo de los niveles que se encuentran
descender en un rbol de directorios antes de la aplicacin
de pruebas y acciones.
Directo Buscar Si no es para atravesar los directorios que se
montan en otros sistemas de archivos.
Resumiendo
Es fcil ver que localizar es tan simple como hallazgo es complicado. Ambos tienen sus usos.
Tmese el tiempo para explorar las muchas caractersticas del hallazgo. Se puede, con el uso
regular, mejorar su comprensin 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 amplia
documentacin en lnea, lo cual es bastante bueno y se debe leer si usted est usando
estos programas en entornos de alta seguridad:
http://www.gnu.org/software/findutils/
225
b z i p 2 - Un bloque de clasificacin
y el programa de sincronizacin de
archivos:
Compresin de Archivos
A lo largo de la historia de la informtica, ha habido una lucha para conseguir la mayor
cantidad 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 datos
que damos por sentado hoy en da, tales como reproductores porttiles de msica, la
televisin de alta definicin, o Internet de banda ancha, deben su existencia a las tcnicas
eficaces de compresin de datos.
La compresin de datos es el proceso de eliminacin de la redundancia de los datos. Vamos a
considerar un ejemplo imaginario. Digamos que tenamos un archivo de imagen
completamente negro con las dimensiones de 100 pxeles por 100 pxeles. En trminos de
almacenamiento de datos (suponiendo 24 bits, o 3 bytes por pxel), la imagen ocupar 30.000
bytes de almacenamiento:
100 * 100 * 3 = 30.000
Una imagen que es de un solo color contiene datos totalmente redundantes. Si furamos
inteligentes, podramos codificar los datos de tal manera que simplemente describe el hecho
de que tenemos un bloque
226
Compresin de Archivos
de 10.000 pxeles negros. As, en lugar de almacenar un bloque de datos que contienen ceros
30000 (negro se representa normalmente en archivos de imagen como cero), se podra
comprimir los datos en el nmero 10000, seguido por un cero para representar nuestros datos.
Tal esquema de compresin de datos se denomina codificacin de longitud de ejecucin y es
una de las tcnicas de compresin de ms rudimentarias. Tcnicas de hoy en da son mucho
ms avanzado y complejo, pero el objetivo bsico sigue siendo el mismo: conseguir deshacerse
de los datos redundantes.
Los algoritmos de compresin (Las tcnicas matemticas utilizadas para llevar a cabo la
compresin) se dividen en dos categoras generales, sin prdidas y con prdidas. La
compresin sin prdidas conserva todos los datos contenidos en el original. Esto significa que
cuando un archivo se restaura desde una versin comprimida, el archivo restaurado es
exactamente la misma que la versin original, sin comprimir. La compresin con prdida, por
otro lado, elimina los datos como se lleva a cabo la compresin, para permitir que ms de
compresin que debe aplicarse. Cuando se restaura un archivo con prdidas, que no coincide
con la versin original; ms bien, es una aproximacin cercana. Ejemplos de compresin con
prdida son JPEG (para imgenes) y MP3 (msica). En nuestra discusin, vamos a tener
[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.txt [me @
linuxbox ~] foo.txt $ gzip [me @ linuxbox ~] $ ls -l foo *
-rw-r -. r-- 1 me me 3230 2008-10-14 07:15 foo.txt.gz [me
@ linuxbox ~] $ gunzip foo.txt [me @ li nuxbox ~] $ ls -l foo
*
-rw-r - r-- m me 1 15738 2008 -10-14 07:15 foo.txt
exclusivamente en cuenta la compresin sin prdidas, ya que la mayora de los datos en las
computadoras no pueden tolerar ninguna prdida de datos.
gzip
El programa gzip se utiliza para comprimir uno o ms archivos. Cuando se ejecuta, sustituye
el archivo original con una versin comprimida del original. El programa gunzip
correspondiente se utiliza para restaurar los archivos comprimidos a su forma original, sin
comprimir. He aqu un ejemplo:
En este ejemplo, creamos un archivo de texto llamado foo.txt de una lista de directorios. A
continuacin, se corre gzip, que sustituye el archivo original con una versin llamada
foo.txt.gz. comprimido En la lista de directorios de foo. *, Vemos que el archivo original se ha
sustituido por la versin comprimida, y que la versin comprimida es de aproximadamente
una quinta parte del tamao del original. Tambin podemos ver que el archivo comprimido
tiene los mismos permisos y marca de tiempo que el original.
A continuacin, ejecutamos el programa gunzip para descomprimir el archivo. Despus,
podemos ver que la versin comprimida del archivo se ha sustituido por el original, de nuevo
con el permiso
227
-t
-v
-nmero
Descripcin
Escribe la salida a la salida estndar y mantener los archivos originales.
Tambin puede ser especificado con --stdout y --to-stdout.
Descomprimir. Esto hace que gzip para actuar como gunzip. Tambin
puede ser especificado con - -decompress o - -uncompress.
Fuerza de compresin, incluso si ya existe una versin comprimida del
archivo original. Tambin puede ser especificado con - -force.
Muestra informacin de uso. Tambin puede ser especificado con - -help.
Las estadsticas de compresin de lista para cada archivo comprimido.
Tambin puede ser especificado con --list.
Si uno o ms argumentos en la lnea de comandos son los directorios, de
forma recursiva comprimir archivos contenidos dentro de ellos. Tambin
puede ser especificado con - -Recursive.
Pon a prueba la integridad de un archivo comprimido. Tambin puede ser
especificado con --test.
Mostrar mensajes detallados, mientras que la compresin. Tambin puede
ser especificado con - -verbose.
Cantidad de compresin Set. nmero es un nmero entero en el intervalo
de 1 (la ms rpida, menos compresin) a 9 (la ms lenta, la mayor parte de
compresin). Los valores 1 y 9 tambin pueden expresarse como --fast y -mejor, respectivamente. El valor por defecto es 6.
Compresin de
Archivos
finalmente, hemos descomprimido el archivo de nuevo a su forma original.
gzip tambin se puede utilizar de manera interesante a
travs de la entrada y salida estndar:
[Me @ linuxbox ~] $ ls -l / etc | gzip> foo.txt.gz
Este comando crea una versin comprimida de un anuncio en el directorio.
El programa gunzip, que descomprime archivos gzip, asume que los nombres de archivo
terminen en la extensin .gz, as que no es necesario especificar que, siempre y cuando el
nombre especificado no est en conflicto con un archivo comprimido existente:
bzip2
El programa bzip2, por Julian Seward, es similar a gzip, pero utiliza un algoritmo de
compresin diferente que logra niveles ms altos de compresin a costa de la velocidad de
compresin. En la mayora de lo que se refiere, funciona de la misma manera como gzip. Un
archivo comprimido con bzip2 se denota con la extensin .bz2:
22
9
Almacenamiento de archivos
Una tarea comn de administracin de archivos a menudo se utiliza junto con la compresin
est archivando. El archivo es el proceso de reunir a muchos archivos y agrupar juntos en un
nico archivo de gran tamao. Archiving se hace a menudo como parte de las copias de
seguridad del sistema. Tambin se utiliza cuando los datos de edad se mueve desde un
sistema a algn tipo de almacenamiento a largo plazo.
alquitrn
En el mundo Unix de software, el programa de alquitrn es la herramienta clsica para
archivar los archivos. Su nombre, abreviatura de archivo de cinta, revela sus races como una
herramienta para la toma de las cintas de copia de seguridad. A pesar de que todava se utiliza
para esa tarea tradicional, es igualmente hbil en otros dispositivos de almacenamiento
tambin.
230
Almacenamient
o de archivos
A menudo vemos los nombres de archivo que terminen con la extensin .tar o .tgz, que
indican un archivo "llanura" alquitrn y un archivo comprimido con gzip, respectivamente.
Un archivo tar puede consistir de un grupo de archivos separados, uno o ms jerarquas de
directorios, o una mezcla de ambos. La sintaxis del comando funciona as:
modo de alquitrn [opciones] nombre de ruta ...
donde mode es uno de los siguientes modos de funcionamiento (slo se muestra una lista
parcial aqu, ver la pgina de manual de alquitrn para una lista completa):
Tabla 18-2: Modos de alquitrn
Modo
c
Descripcin
Crear un archivo de una lista de archivos y / o directorios.
Extraer un archivo.
alquitrn utiliza una forma un poco extraa de expresar opciones, por lo que vamos a
necesitar algunos ejemplos para mostrar cmo funciona. En primer lugar, vamos a volver a
crear nuestro patio de recreo del captulo anterior:
[Me @ linuxbox ~] $ mkdir -p patio de recreo / dir- {001..100} [me @ linuxbox ~]
$ touch patio de recreo / dir- {001..100} / {Archivo- A..Z}
A continuacin, vamos a crear un archivo tar de toda la
zona de juegos:
[Me @ linuxbox ~] $ tar cf playground.tar parque infantil
Este comando crea una playground.tar llamado archivo tar que contiene toda la jerarqua de
directorios de juegos. Podemos ver que el modo y la opcin f, que se utiliza para especificar el
nombre del archivo tar, pueden estar unidos entre s, y no requieren de un guin que conduce.
Tenga en cuenta, sin embargo, que el modo siempre se debe especificar primero, antes de
cualquier otra opcin.
Para listar el contenido del archivo, podemos hacer esto:
231
232
Almacenamiento de archivos
Aqu podemos ver que cuando hemos extrado nuestro segundo archivo, se vuelve a crear el
directorio home / me / parque infantil con relacin a nuestro directorio de trabajo actual, ~ /
foo, no en relacin con el directorio raz, como hubiera sido el caso con un absoluto nombre de
ruta. Esto puede parecer una manera extraa para que funcione, pero en realidad es ms til
de esta manera, ya que nos permite extraer los archivos a cualquier lugar en vez de ser
forzados a extraer a sus ubicaciones originales. Repetir el ejercicio con la inclusin de la opcin
verbosa (v) dar una idea ms clara de lo que est pasando.
Vamos a considerar un hipottico, pero prctico, ejemplo de alquitrn en la accin.
Imaginemos que queremos copiar el directorio de inicio y su contenido desde un sistema a
otro y tenemos un gran disco duro USB que podemos utilizar para la transferencia. En nuestro
moderno sistema Linux, la unidad es "automgicamente" montado en el directorio / media.
[Me @ linuxbox ~] $ sudo tar cf /media/BigDisk/home.tar / casa
Tambin vamos a imaginar que el disco tiene un nombre de volumen de BigDisk cuando nos
[Me @ linuxbox2 ~] $ cd /
[Me @ linuxbox2 /] $ sudo tar xf /media/BigDisk/home.tar
concedemos la misma. Para hacer que el archivo tar, podemos hacer lo siguiente:
Despus de que el archivo tar est escrito, que desmontar la unidad y colquelo en el segundo
equipo. Una vez ms, 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 que
la extraccin es relativa al directorio raz, ya que todas las rutas de acceso dentro del archivo
son relativos.
233
234
Almacenamiento de archivos
ern versiones de GNU tar apoyan tanto gzip y bzip2 compresin directa, con el uso de las
[Me @ linuxbox ~] $ find -name parque infantil 'archivo-A' | tar czf
playground.tgz -T opciones de z y j, respectivamente. Usando nuestro ejemplo anterior como base, se puede
[Me @ linuxbox ~] $ find -name parque infantil 'archivo-A' | tar CJF
playground.tbz -T simplificar de la siguiente manera:
Si hubiramos querido crear un archivo comprimido bzip2 lugar, podramos haber hecho esto:
Simplemente cambiando la opcin de compresin de la Z a j (y cambiar la extensin del
archivo de salida para .tbz para indicar un archivo comprimido bzip2) hemos habilitado la
[Me @ linuxbox ~] $ mkdir remoto-cosas
[Me @ linuxbox ~] $ cd remoto-cosas
[Me @ linuxbox remoto cosas] $ ssh remotas-sys 'tar cf - Documentos' | tar xf me @ contrasea del remote-sys:
[Me @ linuxbox remoto-stuff] $ ls Documentos
compresin bzip2.
Otro uso interesante de la entrada estndar y la salida con el comando tar implica la
transferencia de archivos entre sistemas en una red. Imagina que tenamos dos mquinas que
ejecutan un sistema operativo tipo Unix equipado con alquitrn y ssh. En tal escenario,
podramos transferir un directorio de un sistema remoto (llamado remoto-sys para este
ejemplo) a nuestro sistema local:
Aqu hemos sido capaces de copiar un directorio de documentos con nombre del sistema
remoto a distancia-sys a un directorio dentro del directorio llamado remoto-cosas en el sistema
local. Cmo hacemos esto? En primer lugar, pusimos en marcha el programa de alquitrn en
el sistema remoto usando ssh. Usted recordar que ssh nos permite ejecutar un programa de
forma remota en un equipo en red y "ver" los resultados en el sistema de la salida estndar
local producido en el sistema remoto se enva al sistema local para su visualizacin. Podemos
tomar ventaja de esto por tener alquitrn crear un archivo (el modo c) y enviarlo a la salida
estndar, en lugar de un archivo (la opcin f con el argumento de guin), el transporte de este
modo el archivo sobre el tnel cifrado proporcionado por ssh a el sistema local. En el sistema
local, ejecutamos el alquitrn y hacer que se expanda un archivo (el modo x) suministrada
desde la entrada estndar
235
cremallera
El programa de compresin es a la vez una herramienta de compresin y un archivador. El
formato de archivo utilizado por el programa es familiar para los usuarios de Windows, ya
que lee y escribe archivos .zip. En Linux, sin embargo, gzip es el programa de compresin
predominante con bzip2 ser un cercano segundo lugar.
En su uso ms bsico, 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:
236
Almacenamiento de archivos
Una cosa a tener en cuenta sobre postal (a diferencia de alquitrn) es que si no se especifica un
archivo existente, se actualiza en lugar de reemplazarlo. Esto significa que el archivo existente
se conserva, pero se aaden nuevos archivos y los archivos coincidentes se sustituyen.
Los archivos se pueden enumerar y extrajeron de forma selectiva desde un archivo zip
mediante la especificacin de ellos para descomprimir:
[Me @
linuxbox
Archivo: ..
Longitud
237
Sincronizacin de archivos y
directorios
ING no es compatible.
Vamos a tratar de rsync a cabo en algunos archivos locales. En primer lugar, vamos
a limpiar nuestro directorio foo:
[Me @ linuxbox ~] $ rm -rf foo / *
A continuacin, vamos a sincronizar el directorio de parque infantil con una copia
correspondiente en foo:
[Me @ linuxbox ~] $ rsync parque -av foo
Hemos incluido tanto la opcin -a (para archivar causa-recursividad y la preservacin de los
atributos de archivo) y la opcin -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 de
los 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 tamao
total 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 ver
un resultado diferente:
Observe que no haba ninguna lista de archivos. Esto se debe a rsync detecta que no hubo
diferencias entre - / parque infantil y ~ / foo / zona de juegos, y por lo tanto no tena
necesidad de copiar nada. Si modificamos un archivo en el parque y correr de nuevo rsync:
239
240
Hemos hecho dos cambios en nuestro comando para facilitar la copia de red. En primer lugar,
hemos aadido la opcin --rsh = ssh, que indica a rsync de utilizar el programa ssh como su
shell remoto. De esta manera, hemos sido capaces de utilizar un tnel ssh cifrado para
transferir 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 se
nombra a distancia-sys) para la ruta de destino.
La segunda forma en que se puede utilizar rsync para sincronizar archivos a travs de una red
es mediante el uso de un servidor de rysnc. rsync puede ser configurado para ejecutarse como
un demonio y escuche las peticiones de entrada para la sincronizacin. Esto se hace a menudo
para permitir la creacin de reflejo de un sistema remoto. Por ejemplo, Red Hat Software
mantiene un gran repositorio de paquetes de software en fase de desarrollo para su
distribucin Fedora. Es til para los probadores de software para reflejar esta coleccin
durante la fase de pruebas del ciclo de liberacin de distribucin. Dado que los archivos en el
repositorio de cambio con frecuencia (a menudo ms de una vez al da), es deseable mantener
[Me @ linuxbox ~] $ mkdir fedora-devel
[Me @ linuxbox ~] $ rsync -av -delete rsync: //rsync.gtlib.gatech.edu/fed ora-linux-core /
desarrollo / i386 / os fedora-devel
una rplica local por la sincronizacin peridica, en vez de por la copia grueso del repositorio.
Uno de estos repositorios se mantiene en Georgia Tech; podramos reflejar que el uso de
nuestra 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 de
ruta del repositorio .
Resumiendo
Hemos visto los programas de compresin y archivo comunes utilizados en Linux y otros
sistemas operativos tipo Unix. Para los archivos de archivo, la combinacin tar / gzip es el
mtodo preferido en sistemas tipo Unix mientras zip / unzip se utiliza para la
interoperabilidad con los sistemas Windows. Por ltimo, nos fijamos en el programa rsync (un
favorito personal) que es muy til para la sincronizacin eficiente de los archivos y directorios
a travs de los sistemas.
Lectura adicional
Las pginas de manual para todos los comandos discutidos aqu son bastante claras y
contienen ejemplos tiles. Adems, el proyecto GNU tiene un buen manual en lnea
para su versin de alquitrn. Se puede encontrar aqu:
241
18 - Archivado y copia de
seguridad
http://www.gnu.org/software/tar/manual/index.h
tml
242
19 regulares
Expresiones
19 - Expresiones regulares
En los prximos captulos, vamos a mirar a las herramientas que se utilizan para manipular el
texto. Como hemos visto, los datos de texto juega un papel importante en todos los sistemas
de tipo Unix, como Linux. Pero antes de que podamos apreciar plenamente todas las
caractersticas que ofrecen estas herramientas, tenemos que examinar en primer lugar una
tecnologa que se asocia con frecuencia a los usos ms sofisticados de estas herramientas
expresiones regulares.
Como hemos navegado las funciones y prestaciones que ofrece la lnea de comandos, nos
hemos encontrado con algunas de las caractersticas y comandos de shell realmente arcanos,
como la expansin de shell y citando, atajos de teclado, y la historia de comandos, por no
mencionar el editor vi. Las expresiones regulares siguen esta "tradicin" y pueden ser
(posiblemente) la caracterstica ms arcano de todos ellos. Esto no es para sugerir que el
tiempo que se necesita para aprender acerca de ellos no vale la pena el esfuerzo. Muy por el
contrario. Una buena comprensin nos permitir realizar hazaas increbles, aunque su valor
total puede no ser evidente de inmediato.
grep
El programa principal que utilizaremos para trabajar con expresiones regulares es nuestro
viejo amigo, grep. El nombre de "grep" en realidad se deriva de la frase "impresin global de la
expresin regular", por lo que podemos ver que grep tiene algo que ver con las expresiones
regulares. En esencia, grep busca en archivos de texto para la aparicin de una expresin
regular especificada y da salida a cualquier lnea que contenga un partido a la salida estndar.
243
-c
-l
-L
-n
-h
Descripcin
Ignorar caso. No distinguir entre maysculas y minsculas. Tambin
puede ser especificado --ignore caso.
Invertir partido. Normalmente, grep muestra las lneas que contienen un
partido. Esta opcin hace que grep para imprimir cada lnea que no
contenga un partido. Tambin puede ser especificado - -invert-partido.
Imprimir el nmero de partidos (o no-partidos si tambin se especifica la
opcin -v) en lugar de las propias lneas. Tambin puede ser especificado
- -count.
Escriba el nombre de cada archivo que contiene un partido en lugar de
las lneas mismas. Tambin se puede especificar --files-con-partidos.
Al igual que la opcin -l, pero imprimir slo los nombres de los archivos
que no contienen coincidencias. Tambin se puede especificar partido
--files-Without-.
Prefijo en cada lnea coincidente con el nmero de la lnea en el archivo.
Tambin puede ser especificado --line-nmero.
Para bsquedas de varios archivos, suprimir la salida de los nombres de
archivo. Tambin puede ser especificado - -no-nombre de archivo.
Con el fin de explorar ms a fondo grep, vamos a crear algunos archivos de texto a buscar: 244
gre
EUR
[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 listadir
listadir-bin.txt listadir-sbin.txt listadir-USR-sbin.txt listadir-USR-bin.txt
Metacaracteres y literales
Aunque no lo parezca evidente, nuestras bsquedas grep han sido el uso de expresiones
regulares todo el tiempo, aunque sean muy simples. La expresin "bzip" regular se entiende
que un partido se producir slo si la lnea del archivo contiene al menos cuatro caracteres y
que en algn lugar en la lnea 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 caracteres
literales, ya que coincide con ellos mismos. Adems de los literales, expresiones regulares
tambin pueden in245
19
El Cualquier carcter
La primera metacaracter vamos a ver es el punto o perodo de carcter, que se utiliza para que
coincida con cualquier carcter. Si incluimos en una expresin regular, que coincidir con
cualquier carcter en esa posicin de carcter. He aqu un ejemplo:
Se realizaron bsquedas de cualquier lnea en nuestros archivos que coincide con la expresin
regular ".zip". Hay un par de cosas interesantes a tener en cuenta sobre los resultados.
Observe que no se encontr el programa de compresin. Esto se debe a la inclusin de la
metacarcter punto en nuestra expresin regular aumenta la longitud del partido necesario
para cuatro personajes, y porque el nombre de "zip" slo contiene tres, no coincide. Adems, si
los archivos de nuestras listas haban contenido la extensin de archivo .zip, habran sido
acompaados tambin, porque el carcter de punto en la extensin de archivo se trata como
"cualquier carcter", tambin.
246
Anclas
Anclas
El smbolo de intercalacin (A) y el signo de dlar ($) caracteres se tratan como anclas en
expresiones regulares. Esto significa que causan el partido a ocurrir solamente si la expresin
regular se encuentra al comienzo de la lnea (a) o al final de la lnea ($):
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 en
particular. 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.
Saba usted que su sistema Linux contiene un diccionario? Lo hace. Echa un vistazo
en el directorio / usr / share / dict y usted puede encontrar uno, o varios. Los
archivos de diccionario ubicados slo hay largas listas de palabras, una por lnea,
dispuestos en orden alfabtico. En mi sistema, el archivo de palabras contiene un poco
ms de 98.500
247
Negacin
Si el primer carcter de una expresin entre corchetes es un smbolo de intercalacin (A), se
[Me @ linuxbox ~] -h $ grep '[Abg] zip' listadir * .txt
bunzip2
gunzip
toman los caracteres restantes a ser un conjunto de caracteres que no deben estar presentes en
la posicin del carcter dado. Hacemos esto mediante la modificacin de nuestro ejemplo
anterior:
248
250
con este comando se obtiene un resultado totalmente diferente (slo se muestra una lista
parcial de los resultados). Porqu es eso? Es una historia larga, pero aqu est la versin corta:
Antes, cuando Unix fue desarrollado por primera vez, slo se saba de caracteres ASCII, y esta
caracterstica se refleja este hecho. En ASCII, los primeros 32 caracteres (nmeros 0-31) son
cdigos de control (cosas como pestaas, retrocesos, y los retornos de carro). El prximo 32
(32-63) contienen caracteres imprimibles, incluyendo la mayora de los signos de puntuacin y
los nmeros del cero al nueve. Los siguientes 32 (nmeros 64 a 95) contienen las letras
maysculas y un poco ms de los smbolos de puntuacin. Los ltimos 31 (nmeros 96-127)
contienen las letras minsculas y sin embargo ms smbolos de puntuacin. En base a este
acuerdo, los sistemas que utilizan ASCII utilizan un orden de clasificacin que se vea as:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Esto difiere de la orden de diccionario adecuado, que es como esta:
aAbBcCdDeEfFgGhHiljJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
A medida que la popularidad de Unix se extendi ms all de los Estados Unidos, all creci la
necesidad de apoyar a los personajes que no se encuentran en los Estados Unidos Ingls. La
tabla ASCII se ampli a utilizar un total de ocho bits, aadiendo los nmeros 128 a 255
caracteres, que alojan muchos ms idiomas. Para apoyar esta capacidad, las normas POSIX
introdujeron un concepto llamado un entorno local, lo que podra ser ajustado para
[Me @ linuxbox ~] $ echo $ LANG
en_US.UTF-8
seleccionar el conjunto de caracteres necesario para una ubicacin particular. Podemos ver la
configuracin del idioma de nuestro sistema con este comando:
Con esta configuracin, las aplicaciones compatibles con POSIX usarn una colacin para el
diccionario en lugar de orden ASCII. Esto explica el comportamiento de los comandos
anteriores. Una gama carcter de [AZ] cuando se interpreta con el fin diccionario incluye
todos los caracteres alfabticos en minsculas, excepto la "a", por lo tanto, nuestros resultados.
Para trabajar parcialmente alrededor de este problema, el estndar POSIX incluye una serie de
clases de caracteres que proporcionan intervalos tiles de caracteres. Se describen en la tabla
BE- 251
Descripcin
Los caracteres alfanumricos. En ASCII, lo que equivale a:
[A-Za-z0-9]
El mismo que [: alnum:], con la adicin de el carcter de
subrayado (_) carcter.
Los caracteres alfabticos. En ASCII, lo que equivale a: [A-Za-z]
[: Blank:]
[: Cntrl:]
[: Dgito:]
[: Graph:]
[: Lower:]
[: Punct:]
[: Print:]
[: Space:]
[: Upper:]
[: Xdigit:]
Incluso con las clases de caracteres, todava 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 resultado
mejorado: 252
253
export LANG =
POSIX
19 - Expresiones regulares
$. [] *
Todos los dems caracteres se consideran literales. Con ERE, se aaden los siguientes
POSIX
Durante la dcada de 1980, Unix lleg a ser un sistema operativo comercial muy
popular, pero en 1988, el mundo de Unix estaba en la agitacin. Muchos fabricantes de
ordenadores han licenciado el cdigo fuente de Unix de sus creadores, AT & T, y
fueron el suministro de varias versiones del sistema operativo con sus sistemas. Sin
embargo, en sus esfuerzos para crear la diferenciacin de productos, cada fabricante
aade cambios de propiedad y extensiones. Esto comenz a limitar la compatibilidad
del software. Como siempre con los vendedores propietarios, cada uno estaba
tratando de jugar un partido ganador de "lock-in" con sus clientes. Esta poca oscura
en la historia de Unix es conocido hoy en da como "la balcanizacin".
metacaracteres (y sus funciones asociadas):
() {}? + I
Sin embargo (y esta es la parte divertida), el "(", ")", "{" y "}" personajes son tratados como
metacaracteres en BRE si se escaparon con una barra invertida, mientras que con el ERE, que
precede 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 caractersticas que vamos a discutir el prximo son parte del ERE, que vamos a
tener que utilizar un grep diferente. Tradicionalmente, esto se ha realizado por el programa
egrep, pero la versin GNU de grep tambin soporta expresiones regulares extendidas cuando
se utiliza la opcin -E.
254
Alternancia
La primera de las funciones de expresiones regulares extendidas que discutiremos se llama
Introduzca el IEEE (Instituto de Ingenieros Elctricos y Electrnicos). En la dcada de
1980 a mediados, el IEEE comenz a desarrollar un conjunto de normas que definen
cmo Unix (y Unix) sistemas realizaran. Estas normas, conocidas formalmente como
IEEE 1003, definen los interfaces de programacin de aplicaciones (API), la cscara y
los servicios pblicos que se van a encontrar en un sistema de tipo Unix estndar. El
nombre "POSIX", que significa Interfaz de sistema operativo porttil (con la "X" se
aade al final de Snappiness extra), fue sugerido por Richard Stallman (s, que
Richard Stallman), y fue aprobado por la IEEE.
alternancia, que es la instalacin que permite a un partido que se produzca entre un conjunto
de expresiones. As como una expresin de soporte permite un solo carcter para que coincida
de un conjunto de caracteres especificados, la alternancia permite partidos a partir de un
conjunto de cadenas u otras expresiones regulares.
Para demostrarlo, vamos a utilizar grep en conjunto con eco. En primer lugar, vamos a tratar
de una llanura partido cadena antigua:
grep AAA
grep AAA
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 ninguna
coincidencia, no vemos resultados.
Ahora vamos a aadir la alternancia, significada por el meta-carcter vertical de la barra:
Aqu vemos la expresin regular 'AAA | BBB', lo que significa que "corresponde a ninguno de
[Me @ linuxbox ~] $ echo AAA 1 grep -E 'AAA |
AAA
"
BBB'
[Me @ linuxbox ~] $ echo Acre 1 grep -E 'AAA |
ditac
BBB'
acreditacin
in
"
CCC
'AAA |
[Me @ linuxbox ~] $ echo
1 grep -E BBB'
"
[me @ linuxbox ~] $
la AAA cuerda o la cadena de la acreditacin." Tenga en cuenta que dado que esta es una
caracterstica extendida, hemos aadido la -E
255
Cuantificadores
Expresiones regulares extendidas soportan varias formas de especificar el nmero de veces
que un elemento se corresponde.
donde "n" es un nmero. Podramos construir una expresin 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 expresin, seguimos los caracteres de parntesis con signos de interrogacin para
indicar que estn a emparejar cero o una vez. Una vez ms, ya que los parntesis son
normalmente metacaracteres (en ERE), que los preceden con barras invertidas para hacer que
ser tratados como literales en lugar.
256
[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 ~] $
Cuantificadores
Vamos a intentarlo:
Aqu vemos que la expresin coincide con las dos formas del nmero de telfono, pero no
coincide con uno que contiene caracteres no numricos.
[Me @ linuxbox ~] $ echo "Esto que" | grep -E 'A (? [[: Alpha:]] +) + $'
Esto que
[Me @ linuxbox ~] $ echo "abc" | grep -E 'A (? [[: Alpha:]] +) + $'
abc
[Me @ linuxbox ~] $ echo "ab 9" | grep -E 'A ([[: alpha:]]? +) + $' [Me @ linuxbox ~] $
echo "abc d" | grep -E 'A ([[: alpha:]]? +) + $ '
[Me @ linuxbox ~] $
lder carcter en mayscula y posterior perodo.
Significado
{N}
{N, m}
{N,}
{, M}
Volviendo a nuestro ejemplo anterior con los nmeros de telfono, podemos utilizar este
mtodo para especificar repeticiones para simplificar nuestra expresin regular original: A \
(? [0-9] [0-9] [0-9] \)?
[0-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9] $
258
[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 ~] $
Cuantificadores
a:
La
Vamos a intentarlo:
Como podemos ver, nuestra expresin revisada puede validar correctamente los nmeros con
y sin los parntesis, al tiempo que rechaza esos nmeros que no tienen el formato correcto.
259
260
261
19 - Expresiones regulares
a continuacin, busque nuestra expresin de validacin:
m e n o s pondr de relieve las cadenas que coinciden, dejando a los no vlidos fciles de
[Me @ linuxbox ~] $ Menos phonelist.txt
(232)
2
( 29382- 2
) 265
(269284- 2
) 265
(368214- 1
) 078
( 58410- 1
) 078
3
(152460- 1
) 980
(18
) 9108-518
227
964
2- 1
80
1
6
3
2
885
(129)
( 8 7 4 )44-1379
(126836- 2
) 885
(225846- 2
) 860
( 25942- 2
) 816008 - 5 1 8
2
(129) 44-1379
(458) 273 a
6 4\2 ([0-9]
( 6 8 6{3} )\) [0-9] {3} - [0-9] {4}
/1A
299-8268
$(Fin)
(198)
307-2440
detectar:
v i m , por otra parte, apoya las expresiones regulares bsicas, por lo que nuestra expresin de
bsqueda se vera as:
/ ([0-9] \ {3 \}) [0-9] \ {3 \} - [0-9] \ {4 \}
Podemos ver que la expresin es en su mayora de la misma; Sin embargo, muchos de los
personajes que se consideran metacaracteres en las expresiones extendidas son considerados
en los literales de expresiones bsicas. Ellos slo son tratados como metacaracteres cuando
escapado con una barra invertida. De262
_______________________________________________ Poner
trabajar
expresiones
regulares
para
Resumiendo
[Me @ linuxbox ~] $ cd / usr / share / man / MANL
[Me @ linuxbox man1] $ zgrep -El 'regex | expresin regular' * .gz
En este captulo, hemos visto algunos de los muchos usos de las expresiones regulares.
Podemos encontrar an ms si utilizamos expresiones regulares para buscar aplicaciones
adicionales que los utilizan. Podemos hacerlo mediante la bsqueda en las pginas de manual:
El programa zgrep proporciona un front-end para grep, lo que le permite leer archivos
comprimidos. En nuestro ejemplo, buscamos la seccin de un hombre archivos de pginas
comprimidas en su ubicacin habitual. El resultado de este comando es una lista de los
archivos que contienen la cadena "expresiones regulares" o "expresin regular". Como
podemos ver, las expresiones regulares se presentan en una gran cantidad de programas.
Hay una caracterstica que se encuentra en las expresiones regulares bsicas que no cubrimos.
Llamado de nuevo las referencias, esta funcin se discutir en el siguiente captulo.
Lectura adicional
Hay muchos recursos en lnea para el aprendizaje de las expresiones regulares, incluyendo
varios tutoriales y hojas de trucos.
Adems, la Wikipedia tiene buenos artculos sobre los siguientes temas de fondo:
POSIX: http://en.wikipedia.org/wiki/Posix
ASCII: http://en.wikipedia.org/wiki/Ascii
263
20 - Procesamiento de Texto
20 - Procesamiento de Texto
Todos los sistemas operativos tipo Unix se basan en gran medida en los archivos de texto para
varios tipos de almacenamiento de datos. As que tiene sentido que hay muchas herramientas
para la manipulacin de texto. En este captulo, vamos a ver los programas que se utilizan
para "slice and dice" texto. En el prximo captulo, vamos a ver ms de procesamiento de
texto, centrndose en los programas que se utilizan para dar formato al texto para la impresin
y otros tipos de consumo humano.
En este captulo se volver a examinar a algunos viejos amigos y presentarnos a algunos
nuevos:
Aplicaciones De Texto
Hasta ahora, hemos aprendido un par de editores de texto (nano y vim), mir a un montn de
archivos de configuracin, y hemos sido testigos de la salida de decenas de comandos, todo
ello en el texto. Pero qu otra cosa se utiliza para texto? Por muchas cosas, resulta que.
264
Aplicaciones De Texto
Documentos
Muchas personas escriben documentos utilizando los formatos de texto sin formato. Si bien es
fcil ver cmo un pequeo archivo de texto que puede ser til para mantener las notas
simples, tambin es posible escribir grandes documentos en formato de texto, tambin. Un
mtodo popular es escribir un documento de gran tamao en un formato de texto y luego usar
un lenguaje de marcas para describir el formato del documento final. Muchos trabajos
cientficos se escriben utilizando este mtodo, ya que los sistemas de procesamiento de texto
basados en Unix fueron de los primeros sistemas que apoyaron el diseo tipogrfico avanzado
que necesitan los escritores en las disciplinas tcnicas.
Pginas Web
Tipo ms popular del mundo de documento electrnico es probablemente la pgina web. Las
pginas Web son documentos de texto que utilizan ya sea HTML (Hypertext Markup
Language) o XML (Extensible Markup Language) como lenguajes de marcas para describir el
formato visual del documento.
Correo electrnico
El correo electrnico es un medio intrnsecamente basado en texto. Incluso los archivos
adjuntos no son de texto se convierten en una representacin de texto para su transmisin.
Esto lo podemos ver por nosotros mismos mediante la descarga de un mensaje de correo
electrnico y luego verlo en menos. Veremos que el mensaje comienza con una cabecera que
describe la fuente del mensaje y el tratamiento que recibi durante su viaje, seguido por el
cuerpo del mensaje con su contenido.
Salida de impresora
En los sistemas Unix, salida con destino a una impresora se enva como texto sin formato o, si
la pgina contiene grficos, se convierte en un formato de texto de descripcin de pgina
conocido como PostScript, que se enva a un programa que genera los puntos grficos para se
va a imprimir.
gato
El programa gato tiene un nmero de opciones interesantes. Muchos de ellos se utilizan para
ayudar a visualizar mejor el contenido del texto. Un ejemplo es la opcin -A, que se utiliza
para mostrar los caracteres no imprimibles en el texto. Hay momentos en los que queremos
saber si los caracteres de control estn integrados en nuestro texto de otra manera visible. El
ms comn de estos son caracteres de tabulacin (por oposicin a los espacios) y retornos de
carro, a menudo se presentan como caracteres de fin de lnea en archivos de texto al estilo de
MS DOS. Otra situacin comn es un archivo que contiene lneas de texto con espacios finales.
Vamos a crear un archivo de prueba utilizando gato como un procesador de palabra primitiva.
Para ello, slo tendremos que entrar en el comando cat (junto con la especificacin de un
archivo para la salida redirigida) y tecleamos nuestro texto, seguido de Enter para terminar
[Me @ linuxbox ~] $ cat> foo.txt
El rpido zorro marrn salt sobre el perro perezoso. [Me
@ linuxbox ~] $
correctamente la lnea, a continuacin, Ctrl-d, para indicar al gato que hemos llegado al final
-de-archivo. En este ejemplo, entramos en un protagonista pestaa y seguimos la lnea con
algunos espacios finales:
A continuacin, vamos a utilizar el gato con la opcin -A para mostrar el texto:
[Me @ linuxbox ~] $ cat -A foo.txt
LaI El rpido zorro marrn salt sobre el perro perezoso.
[Me @ linuxbox ~] $
266
clase
El programa sort ordena el contenido de la entrada estndar, o uno o ms archivos
especificados en la lnea de comandos, y enva los resultados a la salida estndar. Utilizando la
misma tcnica que se utiliz con el gato, podemos demostrar el procesamiento de la entrada
estndar directamente desde el
267
20 - Procesamiento
de Texto teclado:
como esto:
Largo Opcin
--ignore lder-espacios en
blanco
-f
-n
--ignore caso
--numeric-tipo
268
Descripcin
Por defecto, la clasificacin se realiza
en toda la lnea, comenzando con el
primer carcter de la lnea. Esta
opcin hace que tipo de ignorar los
espacios iniciales de las lneas y
calcula la clasificacin basada en la
primera no est en blanco en la lnea.
Hace que la clasificacin entre
maysculas y minsculas.
Realiza la clasificacin basan en la
evaluacin numrica de una cadena.
El uso de esta opcin permite ordenar
que se realice en los valores numricos
en lugar de valores alfabticos.
-t
--field-separador = Char
Aunque la mayor parte de las opciones anteriores son bastante explica por s mismo, algunos
no lo son. En primer lugar, echemos un vistazo a la opcin -n, que se utiliza para la
clasificacin numrica. Con esta opcin, es posible ordenar los valores basados en valores
numricos. Podemos demostrar esto mediante la clasificacin de los resultados del comando
du para determinar los mayores usuarios de espacio en disco. Normalmente, el comando du
recoge los resultados de un resumen en orden nombre de ruta:
269
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
Mediante el uso de las opciones -NR, producimos un tipo numrico inverso, con los valores
ms grandes que aparece por primera vez en los resultados. Este tipo funciona porque los
valores numricos se producen al comienzo de cada lnea. Pero qu pasa si queremos ordenar
una lista en base a un valor que se encuentra dentro de la lnea? Por ejemplo, los resultados de
un ls -l:
[Me @ linuxbox ~] $ ls -l / usr / bin | altura total de 152.948
-rwxr-xr-x
raz
34824 2008-04-04
1 raz
-rwxr-xr-x
1 raz
raz
101556 2007-11-27
-rwxr-xr-x
raz
13036 2008-02-27
1 raz
-rwxr-xr-x
1 raz
raz
10552 2007-08-15
-rwxr-xr-x
raz
3800 2008-04-14
1 raz
-rwxr-xr-x
raz
7536 2008-04-19
1 raz
-rwxr-xr-x
raz
3576 2008-04-29
1 raz
-rwxr-xr-x
raz
1 raz
20808 2008-01-03
-rwxr-xr-x
raz
489704 2008-10-09
1 raz
02
06
08
10
03
00
07
18
17
42
08
22
34
51
19
57
02
02
a2p
aconnect
acpi
acpi_fakekey
acpi_listen
addpart
addr2line
adept_batch
Haciendo caso omiso, por el momento, que ls pueden ordenar sus resultados por tamao,
podramos usar sort para ordenar esta lista por tamao del archivo, as:
[Me @ linuxbox ~] $ ls -l / usr / bin | sort -k -nr 5 | cabeza
-rwxr-xr-x
raz
8234216 2008-04-07
1 raz
-rwxr-xr-x
raz
8222692 2008-04-07
1 raz
-rwxr-xr-x
1 raz
raz
3746508 2008-03-07
-rwxr-xr-x
raz
3654020 2008-08-26
1 raz
-rwxr-xr-x
raz
2928760 2008-09-10
1 raz
-rwxr-xr-x
raz
2928756 2008-09-10
1 raz
-rwxr-xr-x
1 raz
raz
2602236 2008-10-10
-rwxr-xr-x
raz
2304684 2008-10-10
1 raz
-rwxr-xr-x
raz
2241832 2008-04-04
1 raz
-rwxr-xr-x
1 raz
raz
2202476 2008-10-10
270
17
17
23
16
14
14
12
12
05
12
42
42
45
16
31
31
56
56
56
56
inkscape
inkview
gimp-2.4
quanta
gdbtui
gdb
neto
rpcclient
aptitud
smbcacls
10.2 12/07/2006
11/25/2008
10
11.0 06.19.2008
8.04 24.04.2008
11/08/2007
8
10.3 10/04/2007
271
20 - Procesamiento de Texto
Ubuntu
Fedora
Ubuntu
Ubuntu
SUSE
Fedora
Fedora
Ubuntu
Ubuntu
Fedora
6.10 10/26/2006
7
31.05.2007
7.10 10/18/2007
7.04 04/19/2007
10.1 05/11/2006
6
10/24/2006
9
13.05.2008
6.06 06/01/2006
8.10 10/30/2008
5
03.20.2006
Con un editor de texto (tal vez vim), vamos a entrar en estos datos y el nombre del archivo
tros.txt pantalla resultante.
A continuacin, vamos a tratar de clasificar el archivo y observe los resultados:
272
273
20 - Procesamiento de Texto
Ubuntu
7.04 04/19/2007
SUSE
10.2 12/07/2006
Ubuntu
6.10 10/26/2006
Fedora
10/24/2006
6
Ubuntu
6.06 06/01/2006
SUSE
10.1 05/11/2006
Fedora
5
03.20.2006
[Me @ linuxbox ~] $ cabeza / etc / passwd
root: x: 0: 0: root: / root: / bin / bash
demonio: x: 1: 1: demonio: / usr / sbin: / bin / sh
bin: x: 2: 2: bin: / bin: / bin / sh
sys: x: 3: 3: sys: / dev: / bin / sh
sincronizacin: x: 4: 65534: sincronizacin: / bin: /
bin / sync
juegos: x: 5: 60: juegos: / usr / juegos: / bin / sh
hombre: x: 6: 12: hombre: / var / cache / man: / bin /
sh
lp: x: 7: 7: lp: / var / spool / lpd: / bin / sh
mail: x: 8: 8: e: / var / mail: / bin / sh
noticia: x: 9: 9: noticias: / var / spool / news: / bin /
sh
Al especificar -k 3,7 instruimos especie utilizar una clave de clasificacin que comienza en el
carcter sptima dentro del tercer campo, que corresponde al inicio del ao. Del mismo modo,
especificamos -k 3.1 y 3.4 -K para aislar las partes de mes y da de la fecha. Tambin vamos a
aadir los n y r opciones para lograr una ordenacin numrica inversa. La opcin B se incluye
para suprimir los espacios iniciales (cuyo nmero vara de una lnea a otra, lo que afecta el
resultado de la especie) en el campo de fecha.
[Me @ linuxbox ~] $ sort -t ':' -k 7 / etc / passwd | cabeza
me: x: 1001: 1001: Yo Mismo ,,,: / home / me: / bin / bash
root: x: 0: 0: root: / root: / bin / bash
dhcp: x: 101: 102 :: / inexistente: / bin / false
GDM: 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
Algunos archivos no utilizan tabulaciones y espacios como delimitadores de campo; por
ejemplo, el archivo / etc / passwd:
Los campos de este archivo estn delimitadas con dos puntos (:), as que cmo podemos
resolver este archivo usando un campo clave? especie proporciona la opcin -t para definir el
carcter separador de campo. Para ordenar el archivo passwd en el sptimo campo (shell por
defecto de la cuenta), podramos hacer esto:
274
Uniq
En comparacin a ordenar, el programa Uniq es un peso ligero. Uniq realiza una tarea
aparentemente trivial. Cuando se administra un archivo ordenado (incluyendo la entrada
estndar), que elimina las lneas duplicadas y enva los resultados a la salida estndar. A
menudo se utiliza en conjuncin con tipo para limpiar la salida de duplicados.
275
20 - Procesamiento de Texto
~] $ Sort foo.txt | Uniq
[Me @ linuxbox
un
b
c
Esto es porque Uniq slo elimina las lneas duplicadas que son adyacentes entre s. Uniq
tiene varias opciones. stos son los ms comunes:
Tabla 20-2: Opciones uniq comunes
Opcin
-c
Descripcin
-d
fn
-i
-s n
- u @ linuxbox ~] Slo
Este es el valor predeterminado.
[Me
$ sortsalida
foo.txtlneas
| Uniqnicas.
-c
2 a
2 b
2c
Aqu vemos Uniq utilizados para informar el nmero de duplicados que se encuentran en
nuestro archivo de texto, usando la opcin -c:
Cortar y rebanar
Los siguientes tres programas que discutiremos se utilizan para pelar columnas de texto de los
archivos y se recombinan en formas tiles.
cortada
El programa de corte se utiliza para extraer una seccin de texto de una lnea de salida y la
extrae 276
Cortar y rebanar
-f field_list
delim_char -d
--complement
Descripcin
Se extrae la porcin de la lnea definida por lista_caracteres. La
lista puede consistir en uno o ms rangos numricos separados por
comas.
Extracto de uno o ms campos de la lnea definida por field_list. La
lista puede contener uno o ms campos o rangos de campo
separados por comas.
Cuando se especifica -f, use delim_char como el carcter de
delimitacin de campo. Por defecto, los campos deben estar
separados por un solo carcter de tabulacin.
Extraer toda la lnea de texto, excepto para aquellas partes
especificadas por -c y / o - f.
Como podemos ver, la forma de corte extractos de texto es bastante inflexible. corte se utiliza
mejor para extraer texto de archivos que se producen por otros programas, en lugar de texto
escrito directamente por los seres humanos. Vamos a echar un vistazo a nuestro archivo
distros.txt para ver si est "limpiar" lo suficiente como para ser un buen ejemplar para
nuestros ejemplos de corte. Si utilizamos gato con la opcin -A, podemos ver si el archivo
[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
cortar -c 7-10
Cortar y rebanar
2006
2008
2006
2008
2006
Mediante la ejecucin de cortar por segunda vez en nuestra lista, somos capaces de extraer
posiciones de caracteres de 7 a 10, que corresponde al ao en nuestro campo de fecha. La
notacin 7-10 es un ejemplo de un rango. La pgina de manual de corte contiene una
descripcin completa de cmo se pueden especificar rangos.
Ampliacin Tabs
Nuestro archivo distros.txt est muy bien formateado para campos de extraccin
utilizando corte. Pero lo que si queramos un archivo que podra ser totalmente
manipulado con el corte por los personajes, en lugar de los campos? Esto nos
requerira para reemplazar los caracteres de tabulacin en el archivo con el
correspondiente nmero de espacios. Afortunadamente, el paquete GNU Coreutils
incluye una herramienta para eso. Nombrado ampliar, este programa acepta uno o
ms argumentos de archivo o entrada estndar, y emite el texto modificado a la salida
estndar.
Si procesamos nuestro archivo distros.txt con ampliar, podemos utilizar el -c corte
para extraer cualquier rango de caracteres del archivo. Por ejemplo, podramos
utilizar el siguiente comando para extraer el ao de la liberacin de nuestra lista,
mediante la ampliacin del archivo y el uso de corte para extraer todos los personajes
de la vigsimo tercera posicin al final de la lnea:
[Me @ linuxbox ~] $ ampliar distros.txt | cortar -c 23Coreutils tambin ofrece el programa unexpand sustituir pestaas para espacios.
Al trabajar con campos, es posible especificar un delimitador de campo diferente en lugar del
carcter de tabulacin. Aqu vamos a extraer el primer campo del archivo / etc / passwd:
279
corre
o
notici
as
20 - Procesamiento de Texto
El uso de la opcin -d, somos capaces de especificar el carcter de dos puntos como
delimitador de campo.
pasta
El comando de pegar hace lo contrario de corte. En lugar de la extraccin de una columna de
texto de un archivo, se aade una o ms columnas de texto en un archivo. Lo hace mediante la
lectura de varios archivos y la combinacin de los campos que se encuentran en cada archivo
en un nico flujo en la salida estndar. Al igual que cortar, pegar acepta mltiples argumentos
de archivo y / o la entrada estndar. Para demostrar cmo funciona la pasta, vamos a realizar
una ciruga en nuestro archivo distros.txt para producir una lista cronolgica de las
liberaciones.
[Me @ linuxbox ~] $ sort -k 3.7nbr -k -k 3.1nbr 3.4nbr distros.txt> dis tros por date.txt
A partir de nuestro trabajo anterior con clase, primero elaborar una lista de distribuciones
ordenadas por fecha y almacenar el resultado en un archivo llamado distros por date.txt:
A continuacin, vamos a utilizar corte para extraer los dos primeros campos del archivo (el
nombre y la versin de la distro), y la tienda que se traducen en un archivo llamado
distro-versions.txt:
[Me @ linuxbox ~] $ cortar -f 1,2 distros - BY-date.txt> distros -versions.t
xt
[Me @ linuxbox ~] $ cabeza distros -versi ons.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
280
unirse
En cierto modo, es como unirse a pegar ya que agrega columnas a un archivo, sino que utiliza
una forma nica de hacerlo. Una unin es una operacin por lo general asociados con las
bases de datos relacionales, donde los datos de varias tablas con un campo de clave
compartida se combina para formar un resultado deseado. El programa unirse realiza la
misma operacin. Se une a los datos de varios archivos en funcin de un campo de clave
compartida.
Para ver cmo se utiliza una operacin de combinacin en una base de datos relacional,
imaginemos una pequea base de datos que consta de dos mesas, cada una contiene un solo
registro. La primera tabla, llamada
281
20 - Procesamiento de Texto
CLIENTES, tiene tres campos: un nmero de cliente (CUSTNUM), en primer lugar el nombre
del cliente (FNAME), nombre y apellido del cliente (LNAME):
CUSTNUM
FNAME
LNAME
4681934
Juan
Herrero
La segunda tabla se llama PEDIDOS y contiene cuatro campos: un nmero de orden (ordenNUM), el nmero de clientes (CUSTNUM), la cantidad (QUAN), y el artculo pedido (TEMA).
NumOrden
CUSTNUM
QUAN TEMA
3014953305
4681934
Azul Widget
Tenga en cuenta que las dos tablas comparten el CUSTNUM campo. Esto es importante, ya
que permite una relacin entre las tablas.
Realizar aj oin operacin nos permitira combinar los campos en las dos tablas para lograr un
[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 Ubuntu
04/24/2008 11/08/2007 10/18/2007 Fedora Ubuntu 10/04/2007 SUSE 05 / 31/2007
04/19/2007 Fedora Ubuntu
resultado til, tales como la preparacin de una factura. Utilizando los valores coincidentes en
los campos CUSTNUM de ambas tablas, una operacin de combinacin puede producir lo
siguiente:
FNAME
LNAME
QUAN TEMA
Juan
Herrero
1 Blue Widget
Para demostrar el programa de unirse, tendremos que hacer un par de archivos con una clave
compartida. Para ello, vamos a utilizar nuestras distribuciones por date.txt archivo. A partir
de este archivo, vamos a construir dos archivos adicionales, uno que contienen las fechas de
lanzamiento (que ser nuestra clave compartida para esta demostracin) y los nombres de
liberacin:
y el segundo archivo, que contiene las fechas de lanzamiento y los nmeros de versin:
282
La comparacin de texto
A menudo es til para comparar las versiones de los archivos de texto. Para los
administradores de sistemas y desarrolladores de software, esto es particularmente
importante. Un administrador del sistema puede, por ejemplo, la necesidad de comparar un
archivo de configuracin existente a una versin anterior de diagnosticar un problema del
sistema. Del mismo modo, un programador frecuentemente necesita ver qu cambios se han
hecho a los programas a travs del tiempo.
283
20 - Procesamiento de
Texto
comm
El programa comm compara dos archivos de texto y muestra las lneas que son exclusivas de
cada uno y las lneas que tienen en comn. Para demostrarlo, vamos a crear dos archivos de
texto casi idnticos utilizando gato:
diff
Al igual que el programa de comm, diff se utiliza para detectar las diferencias entre archivos.
Sin embargo,
284
La comparacin de texto
d i f f es una herramienta mucho ms complejo, el apoyo a muchos formatos de salida y la
capacidad de procesar grandes colecciones de archivos de texto a la vez. diff es a menudo
utilizado por los desarrolladores de software para examinar los cambios entre diferentes
versiones del cdigo fuente del programa, y por lo tanto tiene la capacidad de examinar de
forma recursiva los directorios de cdigo fuente, a menudo se hace referencia como rboles de
cdigo fuente. Un uso comn de diff es la creacin de archivos diff o parches que son
utilizados por programas como el parche (que hablaremos en breve) para convertir una
versin de un archivo (o archivos) a otra versin.
Si usamos diff para mirar nuestros archivos de ejemplo anteriores:
~] $ Diff file1.txt file2.txt
[Me @ linuxbox
1d0 <a 4A4
>E
vemos su estilo por defecto de la produccin: una descripcin concisa de las diferencias entre
los dos archivos. En el formato por defecto, cada grupo de cambios est precedido por un
comando de cambio en la forma de rango de operacin rango para describir las posiciones y
los tipos de cambios necesarios para convertir el primer archivo en el segundo archivo:
Tabla 20-4: Comandos diff Cambio
Cambio
r1ar2
r1cr2
r1dr2
Descripcin
Aada las lneas en el r2 posicin en el segundo archivo de la r1 posicin
en el primer archivo.
Cambiar (reemplazar) las lneas en posicin r1 con las lneas en el r2
posicin en el segundo archivo.
Eliminar las lneas en el primer archivo en la posicin R1, que habra
aparecido en la gama r2 en el segundo archivo
En este formato, una serie es una lista separada por comas de la lnea de salida y la lnea final.
Aunque este formato es la opcin predeterminada (en su mayora para el cumplimiento
POSIX y la compatibilidad hacia atrs con versiones tradicionales de Unix diff), que no es tan
ampliamente utilizado como otros, formatos opcionales. Dos de los formatos ms populares
[Me @ linuxbox ~] $ diff -c file1.txt file2.txt
son el formato de contexto y el formato unificado.
Cuando se ve con el formato de contexto (la opcin -c), vamos a ver esto:
285
*** File1.txt
--- File2.txt
***************
*** I 4
- A
B
****
C
D
---
1,4 - - b
c
d
+ E
20 - Procesamiento de Texto
La salida comienza con los nombres de los dos archivos y sus marcas de tiempo. El primer
archivo est marcado con asteriscos y el segundo archivo se marca con guiones. A lo largo del
resto del establecimiento, estos marcadores se significan sus respectivos archivos. A
continuacin, vemos grupos de cambios, incluyendo el nmero predeterminado de lneas de
contexto que lo rodea. En el primer grupo, vemos:
*** 1 4 ***
que indica las lneas 1 a 4 en el primer archivo. Ms tarde vemos:
--- 1,4 -que indica las lneas 1 a 4 en el segundo archivo. Dentro de un grupo de cambio, las
lneas comienzan con uno de los cuatro indicadores:
Tabla 20-5: diff Formato Contexto de Cambio Indicadores
Indicador
blanco
+
Significado
Una lnea de muestra para el contexto. No indica una diferencia entre los
dos archivos.
Una lnea eliminado. Esta lnea aparecer en el primer archivo, pero no
en el segundo archivo.
Una lnea aadi. Esta lnea aparecer en el segundo archivo, pero no en
el primer archivo.
! Una lnea cambi. Se mostrarn las dos versiones de la lnea, cada uno en su respectiva
seccin del grupo de cambio.
El
formato
unificado con la es similar al formato de contexto, pero es ms concisa. Se especifica
opcin -u
286
La comparacin de texto
Significado
Esta lnea es compartida por ambos archivos.
parche
El programa de parche se utiliza para aplicar los cambios a archivos de texto. Se acepta la
salida de diff y se utiliza generalmente para convertir versin anterior de los archivos en las
versiones ms recientes. Vamos a considerar un ejemplo famoso. El kernel de Linux es
desarrollado por un equipo grande, poco organizada de los contribuyentes que presenten un
flujo constante de pequeos cambios en el cdigo fuente. El kernel de Linux se compone de
varios millones de lneas de cdigo, mientras que los cambios que se realizan por un
contribuyente a la vez son bastante pequeas. No tiene sentido para un contribuyente a enviar
cada desarrollador un rbol completo de fuentes del ncleo cada vez que se hace un pequeo
cambio. En su lugar, se presenta un archivo diff. El archivo diff contiene el cambio de la
versin anterior del kernel a la nueva versin con los cambios del contribuyente. El receptor
entonces utiliza el programa de parche para aplicar el cambio a su propio rbol de cdigo
fuente. El uso de diferencias / parche ofrece dos ventajas importantes:
1. El archivo diff es muy pequea, en comparacin con el tamao total del rbol de
cdigo fuente.
2. El archivo diff muestra de forma concisa el cambio est hecho, lo que los
colaboradores de la
287
20 - Procesamiento de Texto
parche para evaluar rpidamente.
Por supuesto, diferencias / parche funcionar en cualquier archivo de texto, no slo el cdigo
fuente. Sera igualmente aplicable a los archivos de configuracin o cualquier otro texto.
Para preparar un archivo diff para su uso con el parche, la documentacin de GNU (vase
Lecturas abajo) sugiere el uso de diff de la siguiente manera:
[Me @ linuxbox ~] $ diff -Naur file1.txt file2.txt> patchfile.txt [me @ linuxbox ~] $
parche <patchfile.txt
parches file1.txt archivo
[Me @ linuxbox ~] $ file1.txt gato
b
c
d
e
diff -Naur archivo_viejo new_file> diff_file
Dnde archivo_viejo y new_file son o archivos individuales o directorios que contengan
archivos. La opcin r soporta recursin de un rbol de directorios.
Una vez que el archivo diff se ha creado, podemos aplicarlo a parchear el archivo antiguo en el
nuevo archivo:
parche <diff_file
Vamos a demostrar con nuestro archivo de prueba:
En este ejemplo, creamos un archivo llamado patchfile.txt diff y luego utiliz el programa de
parche para aplicar el parche. Tenga en cuenta que nosotros no tenemos que especificar un
archivo de destino al parche, como el archivo diff (en formato unificado) ya contiene los
nombres de archivo en el encabezado. Una vez que se aplica el parche, se puede observar que
file1.txt ahora coincide file2.txt.
p a r c h e tiene un gran nmero de opciones, y hay programas de utilidades adicionales que
pueden utilizarse para analizar y parches de edicin.
tr
El programa tr se usa para transcribir caracteres. Podemos pensar en esto como una especie de
carac288
Como podemos ver, tr opera en la entrada estndar, y emite sus resultados en la salida
estndar. tr acepta dos argumentos: un conjunto de caracteres para convertir desde y un
conjunto correspondiente de caracteres para convertir a. Los conjuntos de caracteres pueden
expresarse 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 mtodo es a
veces sujetos a los mismos problemas que otros comandos, debido a la orden de
clasificacin local, y por lo tanto se debe utilizar con precaucin.
3. Clases de caracteres de POSIX. Por ejemplo, [: upper:].
En la mayora de los casos, ambos conjuntos de caracteres deben ser de la misma longitud; Sin
[Me @ linuxbox ~] $ echo "letras minsculas" | tr [: lower:] A
AAAAAAAAA AAAAAAA
embargo, es posible para el primer conjunto sea ms grande que la segunda, sobre todo si
queremos convertir varios caracteres a un solo carcter:
289
20 - Procesamiento de
Texto
tr puede realizar otro truco, tambin. El uso de la opcin -s, tr puede "exprimir" (borrar) los
casos repetidos de un personaje:
sed
El nombre es la abreviatura de sed editor de flujo. Se lleva a cabo la edicin de texto en un
flujo de texto, EI290
291
Descripcin
n
$
/ Regexp /
addrl, addr2
primer paso ~
addrl, + n
dir!
292
Aqu vemos el resultado esperado: todas las lneas en el archivo excepto los emparejados por
la expresin regular.
Hasta ahora, hemos visto dos de los comandos de edicin de sed, s y p. Aqu est una lista ms
completa de los comandos bsicos de edicin:
Tabla 20-8: sed comandos de edicin bsicos
Comando
Descripcin
293
20 - Procesamiento de Texto
=
un
d
yo
Q
s / regexp / reemplazo /
294
SUSE
Fedora
SUSE
Ubuntu
Fedora
SUSE
Ubuntu
Fedora
Ubuntu
Ubuntu
SUSE
Fedora
Fedora
Ubuntu
Ubuntu
Fedora
GO
"V
\ 2 / 'distros.txt
10.2 2006-12-07
2008-11-25
10
11.0 2008-06-19
8.04 2008-04-24
2007-11-08
8
10.3 2007-10-04
6.10 2006-10-26
7
2007-05-31
7.10 2007-10-18
7.04 2007-04-19
10.1 2006-05-11
2006-10-24
6
9
2008-05-13
6.06 2006-06-01
8.10 2008-10-30
5
2006-03-20
Guau! Ahora que es un comando de feo aspecto. Pero funciona. En tan slo un paso, hemos
cambiado el formato de fecha en nuestro archivo. Tambin es un ejemplo perfecto de por qu
las expresiones regulares se refieren a veces en tono de broma como "de slo escribir" medio.
Podemos escribir, pero a veces no podemos leerlos. Antes de que nos sentimos tentados a huir
295
20 - Procesamiento de
Texto
\ 3 \ 1\ 2
lo que nos da el ao, un guin, el mes, un guin, y el da. 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 nuestra
expresin regular confundirn sed cuando se trata de interpretar el comando s. La segunda es
que, dado sed, por defecto, acepta expresiones regulares slo bsicos, varios de los personajes
de nuestra expresin regular se tomar como literales, y no como metacaracteres. Podemos
resolver estos dos problemas con una aplicacin liberal de barras invertidas para escapar los
caracteres ofensivos:
Nota: Un carcter de continuacin de lnea est formada por una barra invertida seguida
de inmediato por un retorno de carro. No se permiten los espacios intermedios.
La lnea 7 es nuestro comando de bsqueda y reemplazo. Dado que no est precedido por una
direccin, cada lnea en el flujo de entrada est sujeta a su accin.
Lnea 8 realiza la transliteracin de las letras minsculas en maysculas. Tenga en cuenta que
298
aspell
La ltima herramienta vamos a ver es aspell, un corrector ortogrfico interactivo. El programa
aspell es el sucesor de un programa anterior llamado ispell, y se puede utilizar, en su mayor
parte, como una gota en el reemplazo. Si bien el programa aspell se utiliza sobre todo por
otros programas que requieren correccin ortogrfica capacidad, tambin se puede utilizar de
manera muy eficaz como una herramienta independiente de la lnea de comandos. Tiene la
capacidad para comprobar de forma inteligente varios tipos de archivos de texto, incluidos los
documentos HTML, C / C ++ programas, mensajes de correo electrnico y otros tipos de
aspell cheque archivo de
texto
textos especializados.
Para revisar la ortografa de un archivo de texto que contiene prosa sencilla, que podra ser
utilizado de esta manera:
donde fichero de texto es el nombre del archivo para comprobar. Como ejemplo prctico,
vamos a crear un archivo de texto simple llamado foo.txt que contiene algunos errores de
[Me @ linuxbox ~] $ cat> foo.txt
ortografa deliberadas:
299
20 - Procesamiento de Texto
A continuacin vamos a comprobar el archivo usando aspell:
Como aspell es interactivo en el modo de comprobacin, veremos una pantalla como esta:
El zorro marrn rpido jimped sobre el perro Laxy.
[Me @ linuxbox ~] $ aspell cheque foo.txt
El zorro marrn rpido jimped sobre el perro Laxy.
1 ) saltado
2 ) entorcha
dos
3 ) compens
aron
4 ) cojeando
5) i
pimped)
Ignorar r)
Reemplaza
?r
a) Aadir
b) Abortar
6 ) wimped
7 ) acampado
8 ) joroba
9 ) impedir
0) umped
1) No haga caso
de todo
R) Reemplazar
todo l) Aadir
Baja x) Salir _____
En la parte superior de la pantalla, vemos nuestro texto con una palabra escrita
sospechosamente destac. En el medio, vemos diez sugerencias de ortografa numeradas del
cero al nueve, seguido de una lista de otras acciones posibles. Por ltimo, en la parte inferior,
vemos un indicador de listo para aceptar nuestra eleccin.
Si pulsamos la tecla 1, aspell sustituye a la palabra ofensiva con la palabra "salt" y pasa a la
siguiente palabra mal escrita, que es "Laxy." Si seleccionamos el reemplazo de "perezoso"
aspell lo reemplaza y termina. Una vez aspell ha terminado, podemos examinar nuestro
archivo y ver que los errores ortogrficos se han corregido:
A menos que le indiquen lo contrario a travs de la opcin de lnea de comandos de copia de
[Me @ linuxbox ~] $ foo.txt gato
El rpido zorro marrn salt sobre el perro perezoso.
seguridad --dont, aspell crea un archivo de copia de seguridad que contiene el texto original
aadiendo la extensin .bak al nombre del archivo.
300
<Head>
</
Head>
<Body>
</
Html>
</
Body>
301
20 - Procesamiento de
Texto
1) HTML
2) ht ml
3) -ht ml
[Me
yo @ linuxbox ~] $ aspell -H cheque foo.txt
) Pasar por alto
r) Reemplazar
a) Aadir
b) Abortar
4) Hamel
5) Hamil
6) hotel
Yo) No haga caso de todo
R) Vuelva a colocar todos
l) Aadir Baja
x) Salida
aspell ver el contenido de las etiquetas HTML como mal escrito. Este problema puede ser
superado mediante la inclusin de la opcin -H (HTML) de cheques-modo, de esta manera:
que se traducir en esto:
1) Mi espelta
6) Mal aplicada
2) Escanda-Mi
7) Mal llamado
3)<Html>
Mal escrito
8) Respelled
4) Disip <Head>
9) Deletrear mal
5) Espelta
Engaado
<Title> Mispelled Archivo 0)
HTML
</
</alto
Head>
Pasar por
title> Yo) No haga caso de
<Body>
Vuelva a colocar
r) Reemplazar
R) todo
todos
a) Aadir
l) Aadir
<P>
El
zorro
marrn
rpido
jimped
sobreBaja
el perro Laxy. </ P>
b) Abortar </ Body>
x) Salida
</ Html>
?
El HTML es ignorado y slo las partes no marcado del archivo se comprueban. En este modo,
el contenido de las etiquetas HTML se ignoran y no se comprueba la ortografa. Sin embargo,
el contenido de las etiquetas ALT, que se benefician de la comprobacin, se comprueban en
este modo.
302
Resumiendo
En este captulo, hemos visto algunas de las muchas herramientas de lnea de comandos que
operan sobre el texto. En el prximo captulo, vamos a ver varios ms. Es cierto que puede no
parecer inmediatamente obvio cmo o por qu es posible utilizar algunas de estas
herramientas sobre una base del da a da, aunque hemos tratado de mostrar algunos ejemplos
semi-prcticos de su uso. Nos encontraremos en captulos posteriores que estas herramientas
forman la base de un conjunto de herramientas que se utiliza para resolver una serie de
problemas prcticos. Esto ser especialmente cierto cuando nos metemos en shell scripting,
donde estas herramientas realmente demostrar su vala.
Lectura adicional
El sitio web del Proyecto GNU contiene muchas guas en lnea a las herramientas discutidas
en este captulo.
SED:
http://www.gnu.org/software/sed/manual/sed.html
aspell:
http://aspell.net/man-html/index.html
303
20 - Procesamiento de Texto
Crdito extra
Hay algunos comandos de manipulacin de texto ms interesantes que vale la pena
investigar. Entre ellas se encuentran: split (dividir archivos en trozos), csplit (archivos
divididos en piezas basadas en contexto), y sdiff (fusin de lado a lado de las diferencias de
archivo.)
304
21 - Formato de salida
21 - Formato de salida
En este captulo, continuamos nuestra mirada a las herramientas relacionadas con el texto, se
centra en los programas que se utilizan para dar formato a la salida de texto, en lugar de
cambiar el texto en s. Estas herramientas a menudo se utilizan para preparar el texto para la
impresin final, un subj ect que vamos a cubrir en el prximo captulo. Los programas que
vamos a cubrir en este captulo incluyen:
nl - Lneas Nmero
El programa de nl es una herramienta bastante arcano utilizado para llevar a cabo una tarea
sencilla. Nmeros que se alinee. En su uso ms simple, se asemeja a -n cat:
[Me @ linuxbox ~] $ nl distros
SUSE
1
10.2
Fedora
2
10
3
SUSE
11.0
4
Ubuntu
8.04
5
Fedora
8
6
SUSE
10.3
7
Ubuntu
6.10
305
txt | cabeza
12/07/2006
11/25/2008
06.19.2008
24.04.2008
11/08/2007
10/04/2007
10/26/2006
21 - Formato de salida
8
9
10
Fedora
Ubuntu
Ubuntu
31.05.2007
7.10 10/18/2007
7.04 04/19/2007
Al igual que el gato, nl puede aceptar cualquiera de varios archivos como argumentos de la
lnea de comandos, o la entrada estndar. Sin embargo, nl tiene una serie de opciones y es
compatible con una forma primitiva de marcado para permitir tipos ms complejos de
numeracin.
nl apoya un concepto llamado "pginas lgicas" cuando la numeracin. Esto permite nl para
restablecer (empezar de nuevo) la secuencia numrica cuando la numeracin. Uso de las
opciones, es posible establecer el nmero inicial a un valor especfico y, en una medida
limitada, su formato. Una pgina lgica se divide a su vez en un encabezado, cuerpo y pie de
pgina. Dentro de cada una de estas secciones, la numeracin de lneas se puede restablecer y
/ o se le asigna un estilo diferente. Si se da nl varios archivos, se los trata como un nico flujo
de texto. Secciones en la secuencia de texto se indican por la presencia de algunos marcadores
en vez extrao aspecto aadido al texto:
Tabla 21-1: marcado nl
Marcado
\: \: \:
Significado
Comience de encabezado de pgina lgica
\: \:
\:
Cada uno de los elementos de marcado anteriores debe aparecer solo en su propia lnea.
Despus 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
Opcin
estilo -b
estilo -f
estilo -h
306
Significado
Organismo creado numeracin al estilo, donde el estilo es uno de los
siguientes: a = nmero total de lneas
t = nmero de lneas slo no estn en blanco. Este es el valor
predeterminado.
n = ninguno
p = nmero de expresiones regulares slo las lneas que coincidan con
regexp bsica expresin regular.
Ajuste de numeracin a pie de pgina del estilo. El valor
predeterminado es N (ninguno).
Encabezado Numeracin de estilo. El valor predeterminado es N
(ninguno).
307
21 - Formato de salida
[Me @ linuxbox ~ ] $ Sort
ed | nl
-k 1,1 -k 2n distros.txt
distros-nl.s -f sed
Fedora
Fedora
Fedora
Fedora
Fedora
Fedora
SUSE
SUSE
SUSE
SUSE
Ubunt
u
Ubunt
u
Ubunt
u
Ubunt
u
Ubunt
u
Ubunt
u
Ver.
Liberado
5
6
7
8
9
1
0 0.1
1
0 0.2
1
0 0.3
1
0 0.0
1
1 06
6.
6. 10
7. 04
7. 10
8. 04
8. 10
2006-03-20
2006-10-24
2007-05-31
2007-11-08
2008-05-13
2008-11-25
2006-05-11
2006-12-07
2007-10-04
2008-06-19
2006-06-01
2006-10-26
2007-04-19
2007-10-18
2008-04-24
2008-10-30
End Of Informe
Nuestro informe es el resultado de nuestra cartera de comandos. En primer lugar, ordenar la
lista por nombre de la distribucin y la versin (campos 1 y 2), a continuacin, en que
procesamos los resultados con sed, aadiendo el encabezado del informe (incluido el marcado
de la pgina lgica para nl) y pie de pgina. Por ltimo, procesamos el resultado con nl, que,
de forma predeterminada, slo los nmeros de las lneas de la secuencia de texto que
pertenecen a la seccin del cuerpo de la pgina lgica.
Podemos repetir el comando y experimentar con diferentes opciones para la Liga Nacional.
nl -n rz
nl -w 3 -s ''
Algunas de las ms interesantes son:
y
308
[Me @ linuxbox ~] $ echo "El rpido zorro marrn salt sobre el perro perezoso." | -w 12
veces
El ancho
propio salto
zorro rpida ed
sobre el perro
perezoso.
Herramientas de formato simple
309
310
Herramientas de formato
simple
Por defecto, las lneas en blanco, espacios entre palabras, y
la sangra se conservan en la salida; lneas de entrada sucesivas
con diferentes sangra no se unen; pestaas se expanden en la
entrada y se introducen en la salida.
'Fmt' prefiere romper lneas al final de una frase, y trata de
evitar los saltos de lnea despus 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 prrafo o una palabra que termina
en cualquiera de '.?!', Seguido de dos espacios o final de la lnea,
haciendo caso omiso de cualquier parntesis o comillas que
intervienen. Al igual que TeX,
'Fmt' lee "prrafos" enteros antes de la eleccin de los saltos de
lnea; el algoritmo es una variante de la dada por Donald E.
Knuth y Michael F.
Plass en "Breaking prrafos en Lneas", "Software - Prctica y
Experiencia '11, 11 (noviembre de 1981), 1119-1184.
Mucho mejor. Mediante la adicin de la opcin -c, ahora tenemos el resultado deseado. fmt
tiene algunas opciones interesantes:
Tabla 21-3: fmt Opciones
Opcin
-c
Descripcin
cadena -p
-s
-u
311
21 - Formato de salida
estilo "de formato al texto. Esto significa que un solo espacio entre las
palabras y dos espacios entre frases. Este modo es til para eliminar la
"justificacin", es decir, texto que ha sido rellenado con espacios para
forzar la alineacin tanto en los mrgenes derecho e izquierdo.
anchura w
Formato de texto para encajar dentro de unos personajes ancho de
[Me @ linuxbox ~] $ cat> fmt-code.txt
columna
de con
ancho.
El valor por defecto es de 75 caracteres. Nota: fmt
# Este archivo contiene
cdigo
comentarios.
realidad formatos lneas ligeramente ms cortas que el ancho
# Esta lnea es un comentario.
especificado
para permitir el balanceo de la lnea.
# Seguido de otra lnea
de comentario.
# Y otro.
Esto, por otra parte, es una lnea de cdigo. Y otra lnea
de cdigo.
Y otro.
La opcin -p es particularmente interesante. Con l, podemos formato porciones de un archivo
seleccionado, siempre que las lneas que desea formatear todos comienzan con la misma
[Me @ linuxbox ~] '#' $ fmt -w -p 50 fmt-code.txt
# Este archivo contiene cdigo con comentarios.
# Esta lnea es un comentario. Seguido por otro
# lnea de comentario. Y otro.
Esto, por otra parte, es una lnea de cdigo.
Y otra lnea de cdigo.
Y otro.
secuencia de caracteres. Muchos lenguajes de programacin utilizan el signo de nmero (#)
para indicar el comienzo de un comentario y por lo tanto se pueden formatear utilizando esta
opcin. 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 lneas de "cdigo" que no lo hacen. Ahora, usando fmt, podemos
dar formato a los comentarios y dejar sin tocar el cdigo:
Observe que las lneas de comentario adyacentes estn unidos, mientras que las lneas en
blanco y las lneas que no comienzan con el prefijo especificado se conservan.
312
SUSE
Fedora
SUSE
Ubuntu
Fedora
10.2
10
11.0
8.04
8
2008-12-11
18:27
Page 1
12/07/2006
11/25/2008
06.19.2008
24.04.2008
11/08/2007
distros.txt
Pgina 2
313
21
- Formato de salida
Descripcin
Dar formato a un nmero como un entero decimal con signo.
314
Descripcin
banderas
315
21 - Formato de salida
Formato
"% D"
Resultado
380
380
"% # x"
0x17c
380
"% 05d"
00380
380
"% 05.5f"
380.00000
380
"% 010.5f"
0380,00000
380
"% + D"
380
380
"% -d"
380
316
Notas
Formato simple de un
nmero entero.
Entero con formato como un
nmero hexadecimal con el
"formato alternativo" de la
bandera.
Entero formateado con ceros
a la izquierda (de relleno) y
un ancho de campo mnimo
de cinco caracteres.
Nmero formateado como un
nmero de punto flotante con
el acolchado y cinco cifras
decimales de precisin. Dado
que el ancho de campo
mnimo especificado (5) es
menor que la anchura real del
nmero formateado, el
relleno no tiene ningn
efecto.
Al aumentar la anchura
mnima campo para el relleno
10 es ahora visible.
La bandera + firma un
nmero positivo.
El - bandera izquierda se
alinea el formato.
"%" .5s
abcedfghijk
abcde
Una vez ms, printf se utiliza principalmente en scripts en los que se emplea para dar formato
a los datos tabulares, en lugar de en la lnea de comandos directamente. Pero todava
podemos mostrar cmo se puede utilizar para resolver diversos problemas de formato. En
primer lugar, vamos de salida algunos campos separados por caracteres de tabulacin:
21 - Formato de salida ples tareas, pero qu pasa con los trabajos ms grandes? Una de las
razones de que Unix se convirti en un sistema operativo popular entre los usuarios tcnicos y
cientficos (aparte de proporcionar una potente multitarea, entorno multiusuario para todo
tipo de desarrollo de software) es que ofrece herramientas que podran ser utilizadas para
producir muchos tipos de documentos, en particular publicaciones cientficas y acadmicas.
De hecho, como la documentacin de GNU describe, preparacin de documentos fue
fundamental para el desarrollo de Unix:
La primera versin de UNIX fue desarrollado en un PDP-7, que estaba sentada alrededor de los
Laboratorios Bell. En 1971 los desarrolladores queran 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 prctica un sistema de formato de documentos para la divisin de las
patentes de AT & T. Este primer programa de formato era una reimplementacin de 'roff de
McIllroy, escrito por J.
F. Ossanna.
Dos familias principales del documento formateadores dominan el campo: los descendientes
de 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 cado "E" en el centro es parte de su
nombre.
El nombre "roff" se deriva del trmino "corro fuera", como en, "Voy a correr de una copia para
usted." El programa de nroff se utiliza para documentos de formato para la salida a los
dispositivos que utilizan fuentes de monoespaciado, tales como terminales de caracteres y las
impresoras de estilo mquina de escribir. En el momento de su introduccin, esto inclua casi
todos los dispositivos de impresin conectados a las computadoras. El programa troff despus
formatea documentos para la salida de los tipgrafos, los dispositivos utilizados para
producir el tipo "camera-ready" para la impresin comercial. La mayora de las impresoras de
ordenador hoy en da son capaces de simular la salida de tipgrafos. La familia roff tambin
incluye algunos otros programas que se usan para preparar porciones de documentos. Estos
incluyen la ecuacin (para ecuaciones matemticas) 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 eleccin para la salida de la mquina de componer.
No vamos a estar cubriendo TeX aqu, debido tanto a su complejidad (hay libros enteros sobre
ella) y al hecho de que no se instala por defecto en la mayora de los sistemas Linux modernos.
Groff
groff es un conjunto de programas que contienen la implementacin GNU de troff. Tambin
incluye una secuencia de comandos que se utiliza para emular nroff y el resto de la familia roff
tambin.
318
LS (1)
319
21 - Formato de salida
LU _J
I-1 LL
ls [OPCIN] ..
yo
_y
o
SINOPSIS
La razn de que esto es de inters es que las pginas de manual son prestados por Groff,
utilizando el hombre - paquete de macros doc. De hecho, podemos simular el comando man
con la siguiente tubera:
[Me @ linuxbox ~] $ zcat /usr/share/man/man1/ls.1.gz
ascii | Cabeza
LS (1)
Comandos de usuario
Groff -mandoc -T
LS (1)
320
Punta: Los sistemas Linux a menudo incluyen muchos programas de lnea de comandos
para el formato de archivo
321
21 - Formato de salida
la conversin. A menudo se nombran usando la convencin de format2format. Trate de
usar el comando ls / usr / bin / * [[: alpha:]] 2 [[: alpha:]] * identificarlos. Prueba
tambin la bsqueda de programas nombrados formatto formato.
Para nuestro ltimo ejercicio con Groff, vamos a volver a nuestro viejo amigo distros.txt una
vez ms. Esta vez, vamos a utilizar el programa TBL que se utiliza para dar formato a tablas
para componer la lista de las distribuciones de Linux. Para ello, vamos a usar nuestro script
sed antes de aadir 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 las
solicitudes necesarias que TBL requiere. Con un editor de texto, cambiaremos distros.sed a lo
siguiente:
# Secuencia de comandos sed para producir distribuciones Linux informe
1i\
.TS \
caja central; \ cb s s \ cb cb cb \ l n c \.
Distribuciones Linux Informe \
=\
Nombre Versin Lanzamiento \
s / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {2 \} \) \ / \ ([0-9] \ {4 \} \) $ / \ 3 \ 1- \
2/$a\
Distros-TBL -f SED | [me @ linuxbox ~] $ sort -k 1,1 -k distros.txt 2n
.TE
.sed | Groff -t -T ascii 2> / dev / null
+--------------------------------------------------- +
| Distribuciones Linux Reportar
|
+--------------------------------------------------- +
| Nombre Versin Lanzamiento |
322
Tenga en cuenta que para la secuencia de comandos para que funcione correctamente, se debe
ha llevado a ver que las palabras "Nombre Versin Lanzamiento" estn separadas por
pestaas, 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 definir
las propiedades globales de la tabla que, para nuestro ejemplo, se centra horizontalmente en la
pgina y rodeado por una caja. Las lneas restantes de la definicin describen el diseo de
cada fila de la tabla. Ahora, si corremos nuestra cartera reportgenerating de nuevo con la
nueva secuencia de comandos sed, nos pondremos lo siguiente:
21 - Formato de salida
Resumiendo
Teniendo en cuenta que el texto es tan central en el carcter de los sistemas operativos tipo
Unix, que tiene sentido que habra muchas herramientas que se utilizan para manipular y dar
formato al texto. Como hemos visto, hay! Las sencillas herramientas de formato como FMT y
pr encontrarn muchos usos en las secuencias de comandos que producen documentos cortos,
mientras que Groff (y amigos) se pueden utilizar para escribir libros. Nunca podemos escribir
un documento tcnico utilizando herramientas de lnea de comandos (aunque hay muchas
personas que lo hacen!), Pero es bueno saber que hemos podido.
Lectura adicional
324
http://docs.freebsd.org/44doc/usd/20.meref/paper.pdf
Lectura
adicional
325
22 - Impresin
22 -Impresin
Despus de pasar los ltimos dos captulos de manipulacin de texto, es el momento de poner
ese texto en el papel. En este captulo, vamos a ver las herramientas de lnea de comandos que
se utilizan para imprimir archivos y controlar el funcionamiento de la impresora. No vamos a
estar viendo cmo configurar la impresin, como que vara desde la distribucin hasta la
distribucin y por lo general se configura automticamente durante la instalacin. Tenga en
cuenta que vamos a necesitar una configuracin de la impresora de trabajo para llevar a cabo
los ejercicios de este captulo.
Vamos a discutir los siguientes comandos:
$
SAHSYAHYNAHNOAHOPAHPSAHSIAHISAHS $
lAHlsAHs [_AHO_AHP_AHT_AHI_AHO_AHN] ... [_AHF_AHI_AHL_AHE] ... $
22 - Impresin
El AH caracteres (Control-h) son los retrocesos que se utilizan para crear el efecto negrita. Del
mismo modo, tambin podemos ver una secuencia de retroceso / guin bajo se usa para
producir el subrayado.
Impresoras grficas
El desarrollo de interfaces grficas de usuario llev a grandes cambios en la tecnologa de la
impresora. Medida que las computadoras se movieron a ms pantallas basadas en imgenes,
la impresin se mud de carcter-basado a las tcnicas grficas. Esto fue facilitado por el
advenimiento de la impresora lser de bajo costo que, en lugar de imprimir caracteres fijos,
podra imprimir pequeos puntos en cualquier lugar del rea imprimible de la pgina. Esto
hizo que la impresin de las fuentes proporcionales (como los utilizados por los tipgrafos), e
incluso fotografas y diagramas de alta calidad, es posible.
Sin embargo, al pasar de un esquema basado en el personaje de un esquema grfico presenta
un desafo tcnico formidable. He aqu por qu: El nmero de bytes necesarios para llenar una
pgina con una impresora basada en caracteres se puede calcular de esta manera (suponiendo
60 lneas por pgina conteniendo cada una 80 caracteres):
60 x 80 = 4800 bytes
En comparacin, un 300 puntos por pulgada (DPI) impresora lser (suponiendo una superficie
de 8 por 10 pulgadas de impresin por pgina) requiere:
( 8 X 300) X (10 X 300) / 8 = 900.000 bytes
Muchas de las redes de PC lentas simplemente no poda manejar los casi un megabyte de
datos necesarios para imprimir una pgina completa en una impresora lser, por lo que era
evidente que se necesitaba una invencin ingeniosa.
Esa invencin result ser el lenguaje de descripcin de pgina (PDL). Un lenguaje de
descripcin de pgina es un lenguaje de programacin que se describe el contenido de una
pgina. Bsicamente, dice, "ir a esta posicin, dibuja el carcter 'a' en 10 puntos Helvetica, vaya
a esta posicin ..." hasta que se describe todo lo que en la pgina. La primera gran PDL fue
PostScript de Adobe Systems, que todava est en uso amplio hoy. El lenguaje PostScript es un
com - lenguaje de programacin completa adaptada a la tipografa y otros tipos de grficos e
imgenes. Se incluye una funcin de apoyo a los 35 estndar, fuentes de alta calidad, adems
de la posibilidad de aceptar las definiciones de fuentes adicionales en tiempo de ejecucin. En
un primer momento, el apoyo a PostScript fue construido en los propios impresoras. Esto
resuelve el problema de la transmisin de datos. Si bien el programa PostScript tpica era muy
prolijo en comparacin con el flujo de bytes sencillo de impresoras basadas en caracteres, que
era mucho ms pequeo que el nmero de bytes necesarios para representar a toda la pgina
impresa.
Una impresora PostScript acept un programa PostScript como entrada. La impresora
contena su
328
Descripcin
22 - Impresin
+ Primera [: pasado]
-Columnas
-a
-d
"Formato" -D
-f
-h "cabecera"
longitud -l
329
Salida de una serie de pginas que empiezan por primera y,
opcionalmente, terminando con el ltimo.
Organizar el contenido de la pgina en el nmero de columnas
especificadas por columnas.
Por defecto, la salida de varias columnas aparece verticalmente.
Mediante la adicin de la opcin -a (al otro lado), el contenido
aparece horizontalmente.
Salida doble espacio.
Dar formato a la fecha que aparece en los encabezados de pgina
utilizando el formato. Vea la pgina del manual para el comando
fecha para una descripcin de la cadena de formato.
Usar formulario alimenta en lugar de retornos de carro para separar
las pginas.
En la parte central de la cabecera de la pgina, utilice encabezado
en lugar del nombre del archivo que se est procesando.
Conjunto longitud de la pgina a la longitud. El valor
predeterminado es 66 (letras a 6 lneas por pulgada)
-n
-o compensar
anchura w
pr se utiliza a menudo en las tuberas como un filtro. En este ejemplo, vamos a producir una
lista de directorios de / usr / bin y formatearlo en paginado, la salida de tres columnas
utilizando pr:
[Me @ linuxbox ~] $
02.18.2009 14:00
411toppm
a2p
a2ps
a2ps-lpr-wrapper
330
Page 1
apturl
Arkansas
arecord
arecordmidi
arca
BSD-escritura
BSH
btcflash
bug-buddy
buildhash
El envo de un trabajo de
impresin en una impresora
lpr -P
nombre_impresora
donde nombre_impresora es el nombre de la impresora deseada. Para ver una lista de las
impresoras que se sabe que el sistema:
[Me @ linuxbox ~] $ lpstat -a
331
22 - Impresin ________________
Tabla 22-2: Opciones lpr comunes
Opcin
Descripcin
- # Nmero
-P
-P Impresora
-r
Descripcin
Establezca el destino (impresora) a la impresora. Si no
se especifica ninguna opcin d, se utiliza la impresora
por defecto del sistema.
-n nmero
-o paisaje
-o fitplot
-o escala = nmero
-o cpi = nmero
-o LPI = nmero
332
0 ooo
1 111
Vamos a producir nuestro listado de directorio nuevo, esta vez de imprimir 12 IPC y 8 LPI con
[Me @ linuxbox ~] $ ls / usr / bin | pr -4 -w 90 -l 88 | lp -o pgina-izquierda = 36 -o cpi =
12 -o lpi = 8
un margen izquierdo de media pulgada. Tenga en cuenta que tenemos que ajustar las
opciones de pr para dar cuenta del nuevo tamao de pgina:
Este gasoducto produce una lista de cuatro columnas utilizando el tipo ms pequeo que el
valor por defecto. El aumento del nmero de caracteres por pulgada nos permite encajar ms
columnas en la pgina.
333
22 - Impresin para que coincida con la salida de la paginacin de pr. Si consideramos que el
archivo resultante con un visor de archivos adecuado, vamos a ver esto:
Descripcin
texto --center-ttulo
--columns nmero
334
texto --left-ttulo
--line-nmeros = intervalo
--list = por defecto
--list = tema
--pages gama
texto --right-ttulo
--rows nmero
-B
texto -b
tamao -f
-l nmero
-L Nmero
Nombre -M
-n nmero
335
22 - Impresin
-o archivo
-P Impresora
-R
-r
-T Nmero
texto -u
Nota: a2ps todava est en desarrollo activo. Durante mis pruebas, me di cuenta de un
comportamiento diferente en varias distribuciones. En CentOS 4, la produccin
siempre fue a la salida estndar de forma predeterminada. En CentOS 4 y Fedora 10, la
salida por defecto en los medios A4, a pesar del programa que se est configurado para
utilizar los medios de comunicacin de tamao carta por defecto. Pude superar estos
problemas mediante la especificacin explcita la opcin deseada. En Ubuntu 8.04, a2ps
realizado tal como se documenta.
Tambin tenga en cuenta que hay otra formateador de salida que es til para la
conversin de texto a PostScript. Enscript Llamado, puede realizar muchas de las
mismas clases de formato e impresin trucos, pero a diferencia de a2ps, slo acepta la
introduccin de texto.
336
-d
-p [impresora ...]
Descripcin
Visualizar el estado de la cola de impresin para la impresora.
Tenga en cuenta que este es el estado de la capacidad de la cola
de impresin a aceptar puestos de trabajo, no el estado de las
impresoras fsicas. Si no se especifican impresoras, se muestran
todas
laselcolas
de impresin.
Mostrar
nombre
de la impresora predeterminada del
sistema.
Muestra el estado de la impresora especificada. Si no se
especifican impresoras, se muestran todas las impresoras.
-r
-s
-t
337
22 Impresin
[Me @ linuxbox ~]
impresora $ lpq hay
entradas listo
Si no se especifica una impresora (usando la opcin -P), se muestra la impresora
predeterminada 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 | lp
solicitud id es la impresora 603-(1 archivo (s))
[Me @ linuxbox ~] $ lpq impresora est lista y la
impresin
Rango
Propietario
Trabajo
Tamao total
me activo
603
(Stdin)
Archivo
(s)
1024 bytes
Cada comando tiene opciones para eliminar todos los puestos de trabajo que pertenecen a un
usuario en particular, en particular de la impresora, y mltiples nmeros de trabajo. Sus
respectivas pginas man tienen todos los detalles.
Resumiendo
En este captulo, hemos visto cmo las impresoras del pasado influyeron en el diseo de los
sistemas de impresin en mquinas Unix, y cunto control est disponible en la lnea de
comandos para controlar no slo la programacin y ejecucin de los trabajos de impresin,
sino tambin las distintas opciones de salida.
Lectura adicional
Un buen artculo sobre el lenguaje de descripcin de pgina
PostScript: http://en.wikipedia.org/wiki/PostScript
338
Lectura
adicional
339
23 - Programas de Compilacin
23
- Programas de Compilacin
En este captulo, vamos a ver cmo construir programas por compilar el cdigo fuente. La
disponibilidad del cdigo 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 los
desarrolladores. Para muchos usuarios de escritorio, la compilacin es un arte perdido. Lo que
sola ser bastante comn, pero hoy en da, los proveedores de distribucin de mantener
enormes repositorios de binarios precompilados, listos para descargar y utilizar. En el
momento de escribir estas lneas, el repositorio de Debian (una de la ms grande de cualquiera
de 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 los
repositorios de distribucin, algunas distribuciones pueden no incluir todas las
aplicaciones deseadas. En este caso, la nica manera de conseguir el programa
deseado es compilarlo desde el cdigo fuente.
2. Oportunidad. Mientras algunas distribuciones se especializan en el corte de las
versiones de los bordes de los programas, muchos no lo hacen. Esto significa que con
el fin de tener la ltima versin de un programa, es necesario compilacin.
La compilacin de software de cdigo fuente puede llegar a ser muy complejo y tcnico;
mucho ms all del alcance de muchos usuarios. Sin embargo, muchas de las tareas de
compilacin son muy fciles e involucran slo unos pocos pasos. Todo depende del paquete.
Vamos a ver un caso muy simple con el fin de proporcionar una visin general del proceso y
como 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 compilacin es el proceso de traducir el cdigo fuente (la descripcin
legible por humanos de un programa escrito por un programador) en el idioma nativo del
procesador del ordenador.
El procesador del ordenador (o CPU) funciona a un nivel muy elemental, la ejecucin de
programas en lo que se llama en lenguaje de mquina. Este es un cdigo numrico que
describe muy pequeas operaciones, como "aadir este byte", "punto de esta ubicacin en la
memoria," o "copiar este byte."
340
Qu est recopilando?
Cada una de estas instrucciones se expresa en binario (unos y ceros). Los programas
informticos ms antiguos fueron escritos utilizando el cdigo numrico, lo que puede
explicar por qu los programadores que escribieron se dijo a fumar mucho, beber litros de
caf, y llevar gafas gruesas.
Este problema fue superado por el advenimiento del lenguaje ensamblador, que sustituy a
los cdigos numricos con (un poco) ms fcil de usar caracteres mnemotcnicos como CPY
(por copia) y MOV (para mover). Los programas escritos en lenguaje ensamblador se procesan
en lenguaje de mquina por un programa llamado un ensamblador. El lenguaje ensamblador
se sigue utilizando hoy en da para ciertas tareas de programacin especializados, tales como
controladores de dispositivos y sistemas embebidos.
A continuacin llegamos a lo que se denominan lenguajes de programacin de alto nivel. Se
llaman as porque permiten que el programador sea menos preocupados con los detalles de lo
que el procesador est haciendo y ms con la solucin del problema en cuestin. Los primeros
(desarrollados durante la dcada de 1950) incluyeron FORTRAN (diseado para tareas
cientficas y tcnicas) y COBOL (diseado para aplicaciones de negocios). Ambos estn
todava en uso limitado en la actualidad.
Si bien hay muchos lenguajes de programacin populares, dos predominan. La mayora de los
programas escritos para sistemas modernos estn escritos en C o C + +. En los ejemplos a
seguir, vamos a compilar un programa C.
Los programas escritos en lenguajes de programacin de alto nivel se convierten en lenguaje
de mquina por procesarlos con otro programa, llamado compilador. Algunos compiladores
traducen las instrucciones de alto nivel en lenguaje ensamblador y luego usar un ensamblador
para realizar la etapa final de la traduccin a lenguaje de mquina.
Un proceso a menudo se utiliza junto con la compilacin se llama enlace. Hay muchas tareas
comunes realizadas por los programas. Tomemos, por ejemplo, la apertura de un archivo.
Muchos programas de realizar esta tarea, pero sera un desperdicio tener cada programa a
implementar su propia rutina para abrir los archivos. Tiene ms sentido tener una sola pieza
de programacin que sabe cmo abrir los archivos y permitir que todos los programas que se
necesitan para la comparten. Proporcionar apoyo a las tareas comunes se logra mediante lo
que se denominan bibliotecas. Contienen mltiples rutinas, cada uno realizando alguna tarea
comn 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 utiliza
para formar las conexiones entre la salida del compilador y las bibliotecas que el programa
compilado requiere. El resultado final de este proceso es el archivo de programa ejecutable,
listo para su uso.
ella contenidas. En
341
Compilar un programa en C
Vamos a compilar algo. Antes de hacerlo, sin embargo, vamos a necesitar algunas
herramientas como el compilador, el enlazador, y hacer. El compilador de C utilizado casi
universalmente en el entorno Linux se llama gcc (GNU C Compiler), originalmente escrito por
[Me @ linuxbox ~] $ que gcc / usr
/ bin / gcc
Richard Stallman. La mayora de las distribuciones no instalan gcc por defecto. Podemos
comprobar para ver si el compilador est presente como esto:
Los resultados en este ejemplo indican que el compilador est instalado.
Punta: Su distribucin puede tener una meta paquete (una coleccin de paquetes) para
el desarrollo de software. Si es as, considere la instalacin de que si va a compilar
programas 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 llevar
a cabo el siguiente ejercicio.
342
Compilar un programa en C
Nota: Puesto que somos el "mantenedor" de este cdigo fuente, mientras que
[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): annimo 230 Login
xito.
Tipo de sistema remoto es UNIX.
Utilizando el modo binario para transferir
archivos. ftp> cd gnu / diccin 250 Directorio
cambiado correctamente. ftp> ls
200 PORT command successful. Considere el uso de PASV. 150
Aqu viene la lista de directorios.
recopilamos, nos mantendremos en ~ / src. El cdigo fuente instalada por su
68,940
-rw-r -r-1 1003 65534
28 1998 diccin-0.7.tar.gz
agostoMar 04 2002 diccin-1.02.tar.gz
-rw-r -r-1 1003 65534
90957
-rw-r -r-17 2007 diccin-1.11.tar.gz
1 1003 65534 141062
226 Directorio de enviar en Aceptar. septiembre
ftp> get-diccin 1.11.tar.gz
locales: diccin-1.11.tar.gz remoto: diccin-1.11.tar.gz 200 PORT
command successful. Considere el uso de PASV.
150 Apertura conexin en modo BINARIO datos de diccin-1.11.tar.gz (141062
bytes).
226 Archivo enviar Aceptar.
141,062 bytes recibidos en 0,16 segundos (847,4 kB / s) ftp> bye 221 Adis.
[Me @ linuxbox src] $ ls diccin-1.11.tar.gz
distribucin se instalar en / usr / src, mientras que el cdigo fuente destinado a ser
utilizado por mltiples usuarios por lo general se instala en / / local / src usr.
Como podemos ver, el cdigo fuente se suministra generalmente en forma de un archivo tar
comprimido. A veces llamado un archivo tar, este archivo contiene el rbol de cdigo fuente, o
la jerarqua de directorios y archivos que componen el cdigo fuente. Despus de llegar al sitio
ftp, examinamos la lista de alquitrn de los archivos disponibles y seleccione la versin ms
reciente para su descarga. Utilizando el comando get dentro de ftp, copiamos el archivo desde
el servidor FTP para el equipo local.
Una vez que el archivo tar se descarga, se debe desembalar. Esto se realiza con el programa
tar:
[Me @ linuxbox src] $ tar xzf diccin-1.11.tar.gz
343
23
Consejo: El programa de diccin, al igual que todo el software Proyecto GNU, sigue
ciertas normas para el envasado de cdigo fuente. La mayora otro cdigo fuente
disponible en el ecosistema Linux tambin sigue este estndar. Uno de los elementos
de la norma es que cuando se desempaqueta el archivo de cdigo fuente de alquitrn,
se crear un directorio que contiene el rbol de cdigo fuente, y que este directorio ser
nombrado proyecto-x, xx, que contiene por lo tanto, tanto el nombre del proyecto y su
nmero de versin . Este esquema permite una fcil instalacin de varias versiones del
mismo programa. Sin embargo, a menudo es una buena idea examinar el diseo del
rbol antes de desempaquetarlo. Algunos proyectos no van a crear el directorio, pero
en vez entregar los archivos directamente en el directorio actual. Esto har un lo en su
directorio src de otra manera bien organizada. Para evitar esto, utilice el comando
siguiente para examinar el contenido del archivo tar:
alquitrn tzvf tarfile | cabeza
1.11
getopt.c
getopt.h
getopt_int.h
INSTALAR
install-sh
Makefile.in
misc.c
misc.h
NOTICIAS
nl
nl.po
README
sentence.c
sentence.h
style.1.in
style.c
prueba
En ella, vemos una serie de archivos. Programas pertenecientes al Proyecto GNU, as como
muchos otros, se suministrar el README archivos de documentacin, INSTALAR,
NOTICIAS, y la copia. Estos archivos contienen la descripcin del programa, informacin
sobre cmo construir e instalar, y sus trminos de licencia. Siempre es una buena idea leer
detenidamente el README e INSTALL archivos antes de intentar construir el programa.
344
Compilar un programa
en C
Los otros archivos interesantes en este directorio son los que terminan en .c y .h:
Los archivos .c contienen los dos programas en C suministrados por el paquete (estilo y
diccin), divididos en mdulos. Es una prctica comn para los programas grandes para ser
roto en ms pequeo, ms fcil de manejar piezas. Los archivos de cdigo fuente son texto
normal y pueden ser examinadas con menos:
#include "getopt.h"
Esto indica al compilador que lea las getopt.h de archivos, ya que lee el cdigo fuente en
diction.c con el fin de "saber" lo que est en getopt.c. El archivo getopt.c suministra rutinas
que son compartidos tanto por los programas de estilo y diccin.
Por encima de la declaracin para incluir getopt.h, vemos algn otro incluyen declaraciones
como stas:
#include <regex.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
stos tambin se refieren a archivos de cabecera, sino que se refieren a archivos de cabecera
que viven fuera del rbol fuente de corriente. Ellos son suministrados por el sistema de apoyo
a la recopilacin de todos los programas. Si nos fijamos en / usr / include, podemos verlos:
345
23 - Programas de
Compilacin
[Me @ diccin-1.11 linuxbox] $ ls / usr / include
Se instalarn los archivos de cabecera en este directorio cuando instalamos el
compilador.
La construccin de El Programa
La mayora de los programas construyen con una secuencia de
dos comandos simples,:
./configure
hacer
El programa de configuracin es un script de shell que se suministra con el rbol de cdigo
fuente. Su trabajo consiste en analizar el entorno de construccin. La mayor parte del cdigo
fuente est diseado para ser porttil. Es decir, que est diseado para construir en ms de un
tipo de sistema de tipo Unix. Pero para hacer eso, el cdigo fuente puede tener que someterse
a pequeos ajustes durante la construccin para dar cabida a las diferencias entre los sistemas.
configurar tambin comprueba que las herramientas externas necesarias y se instalan los
componentes. Vamos a ejecutar configure. Desde configure no se encuentra donde la cscara
espera normalmente los programas que se encuentran, debemos decirle explcitamente a la
concha de su ubicacin anteponiendo el comando con ./ para indicar que el programa se
encuentra en el directorio de trabajo actual:
[Me @ linuxbox diccin-1.11] $ ./configure
configurar la salida de la voluntad de una gran cantidad de mensajes, ya que pone a prueba y
configura la construccin. Cuando termine, se ver algo como esto:
346
Compilar un programa en C
Lo que es importante aqu es que no hay mensajes de error. Si lo hubiera, la configuracin
fall, 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 ms
importante es Makefile. Makefile es un archivo de configuracin que instruye al programa
[Me @ linuxbox diccin-1.11] $ Menos Makefile
make exactamente cmo 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 denomina
Makefile), que describe las relaciones y dependencias entre los componentes que conforman el
programa terminado.
CC =
gcc
La primera parte del archivo MAKE define variables que son sustituidos en las secciones
diccin:
347
23 - Programas de
Compilacin
sentence.o:
style.o:
Sin embargo, no vemos ningn comando especificado para ellos. Esto es manejado por un
objetivo general, anteriormente en el archivo, que describe el comando utilizado para
compilar cualquier archivo .c en un .o
arch
ivo:
.c.o:
Todo esto parece muy complicado. Por qu no simplemente una lista de todos los pasos para
compilar 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:
es
es_ES
en_GB.mo
en_GB.po
getopt1.c
getopt1.o
getopt.c
getopt.h
getopt_int.h
getopt.o
INSTALAR
install-sh
Makefile
Makefile.in
misc.c
misc.h
misc.o
NOTICIAS
nl
nl.mo
nl.po
README
sentence.c
sentence.h
sentence.o
estilo
style.1
style.1.in
style.c
style.o
prueba
Entre los archivos, vemos diccin y estilo, los programas que nos propusimos construir.
Felicitaciones estn en orden! Nos acaba de compilar nuestros primeros programas de cdigo
fuente!
Pero slo por curiosidad, vamos a correr de nuevo hacer:
348
Compilar un programa
en C
[Me @ linuxbox diccin-1.11] $ make make:
Nada que hacer para el 'todo'.
Slo se produce este extrao mensaje. Qu est pasando? Por qu no construir el programa
de nuevo? Ah, esta es la magia de la marca. En lugar de simplemente construir todo de nuevo,
hacer slo lo que necesita construye edificio. Con todos los objetivos presentes, hacen que
determin que no haba nada que hacer. Podemos demostrar esto mediante la eliminacin de
uno de los objetivos y ejecutar make nuevamente para ver lo que hace. Vamos a deshacernos
de uno de los objetivos intermedios:
[Me @ linuxbox diccin-1.11] $ rm getopt.o [me @
linuxbox diccin-1.1l] $ make
Vemos que marca la reconstruye y re-enlaces a los programas de diccin y estilo, ya que
dependen del mdulo que falta. Este comportamiento tambin seala otra caracterstica
importante de hacer: que mantiene los objetivos hasta la fecha. hacer que insiste en que los
objetivos sean ms reciente que sus dependencias. Esto tiene mucho sentido, como
programador a menudo se actualizar un poco de cdigo fuente y luego hacer uso de
construir una nueva versin del producto terminado. hacer que se asegura de que todo lo que
las necesidades de creacin basado en el cdigo actualizado se construye. Si utilizamos el
programa de toque para "actualizar" uno de los archivos de cdigo fuente, podemos ver que
esto suceda:
[Me @ linuxbox diccin-1.11] $ ls -l diccin getopt.c -rwxr-xr-x 1
m
m 371642009-03-05 6:14
diccin
-rw-r - r-1 m
m
33125 2007-03-30
17:45 getopt.c
[Me @ linuxbox diccin-1.11] $ touch getopt.c [me @ linuxbox diccin-1.11] $
ls -l diccin getopt.c -rwxr-xr-x
1
m
m
37164
2009-03-05 6:14 diccin
-rw-r - r-1 m
m
33125 2009-03-05
6:23 getopt.c
[Me @ linuxbox diccin-1.11] $ hago
Despus de realizar trabajos, vemos que se ha restaurado el objetivo de ser ms reciente que la
dependencia:
[Me @ diccin-1.11 linuxbox] $ ls -l getopt.c diccin -rwxr-xr-x 1 m m
37164 2009-03-05 06:24 diccin
-rw-r - r-- me 1
m
33125 2009-03-05 06:23 getopt.c
La capacidad de cosmticos a construir de forma inteligente slo lo que necesita es un edificio
de gran beneficio para los programadores. Mientras que el tiempo de los ahorros pueden no
ser muy evidente con nuestro pequeo proyecto,
349
Resumiendo
En este captulo, hemos visto cmo tres rdenes sencillas:
./configure
hacer
make install
puede ser utilizado para construir muchos paquetes de cdigo fuente. Tambin hemos visto el
importante papel que hacen obras de teatro en el mantenimiento de los programas. El
programa make se puede utilizar para cualquier tarea que necesita para mantener una
relacin de destino / dependencia, no slo para compilar el cdigo fuente.
Lectura adicional
La Wikipedia tiene buenos artculos sobre los compiladores y el programa
make:http://en.wikipedia.org/wiki/Compiler
http://en.wikipedia.org/wiki/Make (software)
350
Lectura
adicional
El GNU Make Manual:
http://www.gnu.org/software/make/manual/html nodo /
index.html
351
353
ejecucin.
354
#! / Bin / bash
# Este es nuestro primer script.
echo 'Hello World!'
nuestros scripts en estos directorios.
A pesar de los comentarios son de poca utilidad en la lnea de comandos, que van a trabajar.
La primera lnea de nuestro script es un poco misterioso. Parece que debera ser un
comentario, ya que comienza con #, pero se ve muy a propsito para ser slo eso. El #!
secuencia de caracteres es, de hecho, una construccin especial llamado shebang. El tinglado
se utiliza para indicar al sistema el nombre del intrprete que se debe utilizar para ejecutar la
secuencia de comandos que sigue. Cada shell script debe incluir esto como su primera lnea.
Salvemos nuestro archivo de script como hola_mundo.
355
Permisos de ejecutables
Lo siguiente que tenemos que hacer es hacer nuestro script ejecutable. Esto se hace fcilmente
usando chmod:
356
SOJIOM Sinqj
-J3A3 'UTPSP UT 8oj cachorro Jno 8oj uaqj pire iojoaiip uxq / ~ AQJ ajpa.ro aM
jt 'siuajss 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
preoqaq AQJ uiorj jnduj aqjj q sjparj pire spireuiuioo jjaqs jo ajjj pajjjoads p sppar
qojqM upjjnq jjaqs p 'pupuiuioo aojnos AQJ roj uiuous pupuiuioo p si () jop AQx
orqspq- $ [~ xoqxnuxx @ AUI]
uoijpooq APQ
jdiros
Ms 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 guin fcil de leer y entender es una forma
de facilitar el mantenimiento fcil.
Ms 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 difcil de entender a primera vista. En una secuencia de
comandos, esta com - demanda podra ser ms fcil 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 lnea-continuaciones (secuencias de salto de lnea-barra invertida) y la
sangra, la lgica de este comando complejo est ms claramente describe al lector. Esta
tcnica trabaja en la lnea de comandos, tambin, a pesar de que rara vez se utiliza, ya que es
muy difcil de escribir y editar. Una diferencia entre un guin y una lnea de comandos es que
el guin puede emplear caracteres de tabulacin para lograr la sangra, mientras que la lnea
de comandos no se puede, ya que las pestaas se usan para activar la terminacin.
359
Resumiendo
En este primer captulo de secuencias de comandos, hemos visto cmo los guiones se escriben
y hacen ejecutar fcilmente en nuestro sistema. Tambin vimos cmo podemos utilizar
diversas tcnicas de formato para mejorar la legibilidad (y, por tanto, la capacidad de
mantenimiento) de nuestros scripts. En los prximos captulos, la facilidad de mantenimiento
se van a plantear una y otra vez como un principio central en la buena escritura de guiones.
Lectura adicional
360
25
- Creacin de un
proyecto
25
- Creacin de un proyecto
361
"<HTML>"
"<HEAD>"
"<TITLE> Ttulo de la pgina </ TITLE>"
"</ HEAD>"
"<Body>"
"Cuerpo de la pgina."
"</ BODY>"
"</ HTML>"
25 - Creacin de un proyecto
Nuestro primer intento de este problema contiene un tinglado, un comentario (siempre es una
[Me @ linuxbox ~] $ chmod 755 ~ / bin / sys_info_page
[Me @ linuxbox ~] $ sys_info_page
buena idea) y una secuencia de comandos de eco, una para cada lnea de salida. Despus de
guardar el archivo, lo haremos ejecutable y tratamos de ejecutarlo:
Cuando se ejecuta el programa, debemos ver el texto del documento HTML que se muestra en
la pantalla, ya que los comandos de eco en la secuencia de comandos envan su salida a la
[Me @ linuxbox ~] $ sys_info_page> sys_info_page.html [me @
linuxbox ~] $ firefox sys_info_page.html
salida estndar. Vamos a ejecutar el programa y redirigir la salida del programa para la
sys_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 ms fcil cuando un programa es fcil de leer y comprender, por no
hablar de que puede hacer que el programa sea ms fcil de escribir mediante la reduccin de
la cantidad de mecanografa. Nuestra versin actual del programa funciona bien, pero podra
ser ms simple. De hecho, podramos combinar todos los comandos de eco en una sola, lo que
sin duda har que sea ms fcil para agregar ms lneas a la salida del programa. As que,
vamos a cambiar nuestro programa a esta:
362
363
25 - Creacin de un proyecto
</ HEAD>
<BODY>
Variables y constantes
Hay un problema con nuestro guin, sin embargo. Observe cmo se repite la cadena "Informe
de informacin del sistema"? Con nuestro pequeo guin que no es un problema, pero
imaginemos que nuestro guin era muy largo y tuvimos varias instancias de esta cadena. Si
quisiramos cambiar el ttulo a otra cosa, tendramos que cambiarlo en varios lugares, lo que
podra ser un montn de trabajo. Y si pudiramos organizar la secuencia de comandos para
que la cadena slo apareci una vez y no varias veces? Eso hara que el mantenimiento futuro
de la escritura mucho ms fcil. As es como podramos hacer eso:
#! / Bin / bash
# Programa para salida de una pgina de informacin del sistema
title = "Informacin del sistema"
echo "<HTML>
<HEAD>
</ HEAD>
<BODY>
</ BODY>
</ HTML> "
Al crear una variable llamada ttulo y asignndole el valor "Informe Informacin del sistema",
podemos tomar ventaja de la expansin de parmetro y colocar la cadena en mltiples
ubicaciones.
As que, cmo creamos una variable? Simple, slo lo utilizan. Si el depsito se encuentra con
una variable, se crea automticamente. Esto difiere de muchos lenguajes de programacin en
el que las variables deben ser declaradas antes de su uso o definidos de forma explcita. La
cscara es muy laxa acerca de esto, lo que puede dar lugar a algunos problemas. Por ejemplo,
considere este escenario juega en la lnea de comandos: 364
Variables y constantes
H
o
l
a
O
O
h
>
En primer lugar, asignamos el valor "s" a la variable foo, y luego mostrar su valor con eco. A
continuacin mostramos el valor del nombre de la variable mal escrito como "tonto" y
obtenemos un resultado en blanco. Esto se debe a que la cscara felizmente creado la variable
de tonto cuando se encontr con l, y le dio el valor por defecto de la nada, o vaco. A partir de
esto, nos enteramos de que hay que prestar mucha atencin a nuestra ortografa! Tambin es
importante entender lo que realmente sucedi en este ejemplo. Desde nuestra mirada anterior
cmo el shell realiza expansiones, sabemos que el comando:
365
Tambin aprovechamos la oportunidad para j azz nuestro ttulo sumando el valor del nombre
de host variable de shell. Este es el nombre de red de la mquina.
366
Variables y constantes
d = $ (ls -l foo.txt)
e = $ ((5 * 7))
af =
= "\
5 bt=\"una
ta cadena \ n"
cadena"
Mltiples asignaciones de variables se pueden realizar en una sola lnea:
Durante la expansin, 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 su
con- alrededores
367
Aqu Documentos
Hemos visto dos mtodos diferentes de la salida de nuestro texto, tanto en el uso de la eco
com-
368
Aqu Documentos
demanda. Hay una tercera va llamada una secuencia de comandos aqu documento o aqu.
Un documento que aqu es una forma adicional de redireccin de E / S en el que nos
integramos un cuerpo de texto en nuestro script y alimentamos en la entrada estndar de un
comando. Funciona as:
comando << ficha
texto
ficha
donde comando es el nombre del comando que acepte la entrada estndar y token es una
cadena que se utiliza para indicar el final del texto incrustado. Vamos a modificar nuestro
script para usar un documento aqu:
#! / Bin / bash
# Programa para salida de una pgina de informacin del sistema
TITLE = "Sistema de Informacin Informe Por $ HOSTNAME" CURRENT_TIME = $ (date
+ "% x% r% Z") TIMESTAMP = "gener $ HORA ACTUAL, por $ USER"
cat << EOF
<HTML>
<HEAD>
</ HEAD>
<BODY>
</ BODY>
</ HTML>
_EOF_
En lugar de utilizar eco, nuestro script ahora usa gato y un documento aqu. El _EOF_ cadena
(que significa "final del archivo," una convencin comn) fue seleccionado como el token, y
marca el final del texto incrustado. Tenga en cuenta que la seal debe aparecer solo y que no
debe haber espacios finales en la lnea.
[Me @ linuxbox ~] $ foo = "texto" [me @
linuxbox ~] $ cat << _EOF_
> $ Foo
As que cul es la ventaja de utilizar un documento aqu? Es en su mayora los mismos que
eco, salvo que, por defecto, individual y dobles comillas dentro de aqu documentos pierden
su significado especial para el shell. Aqu est un ejemplo de lnea de comandos:
369
25 - Creacin de un
proyecto
> "$ Foo"
> '$ Foo'
> \ $ Foo
> _EOF_
un poco de
texto "texto"
'un poco de
texto "$ foo
Como podemos ver, el shell no presta atencin a las comillas. Se los trata como caracteres
ordinarios. Esto nos permite incrustar comillas libremente dentro de un documento aqu. Esto
podra llegar a ser muy til para nuestro programa de informe.
Aqu documentos pueden ser utilizados con cualquier comando que acepte la entrada
estndar. En este ejemplo, se utiliza un documento de aqu a pasar una serie de comandos al
programa de ftp con el fin de recuperar un archivo desde un servidor FTP remoto:
#! / Bin / bash
# Script para recuperar un archivo a travs de FTP servidor_ftp =ftp.nl.debian.org
FTP_PATH = / debian / dists / lenny / main / installer-i386 / current / images / cdrom
Remote_file = debian-cd_info.tar.gz
ftp -n << _EOF_
abierto $ servidor_ftp
usuario me annimo @ linuxbox
cd $ FTP_PATH
hachs
get $ remote_file
adis
_EOF_
ls -l $ remote_file
Si cambiamos el operador de redireccin de "<<" para "<< -", la cscara ignorar lder
caracteres de tabulacin en el documento aqu. Esto permite que un documento que se va aqu
sangra, que puede mejorar la legibilidad:
#! / Bin / bash
# Script para recuperar un archivo a travs de
FTP servidor_ftp =ftp.nl.debian.org
370
Aqu Documentos
Resumiendo
En este captulo, empezamos un proyecto que nos llevar a travs del proceso de construccin
de un guin exitoso. Hemos introducido el concepto de variables y constantes y la forma en
que se pueden emplear. Ellos son los primeros de muchas aplicaciones encontraremos para la
expansin de parmetros. Tambin nos fijamos en la manera de producir una salida de
nuestro script, y diversos mtodos para la incorporacin de bloques de texto.
Lectura adicional
371
26
26
- Diseo Top-Down
- Diseo Top-Down
26
- Diseo Top-Down
Funciones de Shell
Nuestro script actualmente lleva a cabo los siguientes pasos para generar el documento
HTML:
1. Abrir pgina.
2. Encabezado de pgina en Abrir.
3. Conjunto ttulo de la pgina.
4. Cerrar encabezado de la pgina.
5. Cuerpo de la pgina abierta.
6. Ttulo de la pgina de salida.
7. Fecha y hora de salida.
8. Cerrar cuerpo de la pgina.
9. Cerrar la pgina.
Para nuestra prxima etapa de desarrollo, vamos a aadir algunas tareas entre los pasos 7 y 8.
Estos incluirn:
#! / Bin / bash
# Programa para salida de una pgina de informacin del
sistema
TITLE = "Informacin del Sistema Para Reportar $
HOSTNAME" CURRENT_TIME = $ (date + "% x% r% Z")
TIMESTAMP = "gener $ CURRENT_TIME, por $ USER"
cat << _EOF_
<HTML>
<HEAD>
El tiempo de actividad del sistema y carga. Esta es la cantidad de tiempo transcurrido
desde el ltimo apagado o reinicio y el nmero medio de las tareas que se estn
ejecutando en el procesador durante varios intervalos de tiempo.
Si tuviramos un comando para cada una de estas tareas, podramos aadirlas a nuestro script
simplemente a travs de la sustitucin de comandos:
373
26 - Diseo Top-Down
</ HEAD>
<BODY>
</ BODY>
</ HTML>
EOF
Podramos crear estos comandos adicionales de dos maneras. Podramos escribir tres guiones
separados y colocarlos en un directorio que aparece en nuestro camino, o podramos integrar
los scripts dentro de nuestro programa como funciones de shell. Como hemos mencionado
antes, funciones de shell son "mini-scripts" que se encuentran dentro de otros scripts y
programas pueden actuar como autnomas. Funciones Shell tienen dos formas sintcticas:
Nombre de la funcin
{comandos
retorno
1
#! / Bin / bash
2
2
# Shell funcin de demostracin
4
3
funcin func {
4
echo "Paso 2"
5
retorno
6
}
9
10
# Programa principal comienza
aqu
11
12 echo "Paso 1"
}
y
nombre () {
comandos
retorno
}
donde nombre es el nombre de la funcin y de los comandos es una serie de comandos que
figuran dentro de la funcin. Ambas formas son equivalentes y se pueden usar
indistintamente. A continuacin vemos una secuencia de comandos que muestra el uso de
una funcin de shell:
374
#! / Bin / bash
# Programa para salida de una pgina de informacin del
13
func
sistema
14
echo "Paso 3"
TITLE = "Informacin 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
}
Funciones de Shell
A medida que el shell lee el guin, que pasa por encima de las lneas de la 1 a la 11, ya que esas
lneas se componen de los comentarios y la definicin de la funcin. La ejecucin comienza en
la lnea 12, con un comando echo. La lnea 13 llama a la funcin func cscara y el shell ejecuta
la funcin tal como lo hara con cualquier otro comando. El control de programa se desplaza a
la lnea 6, y se ejecuta el segundo comando de eco. Lnea 7 se ejecuta siguiente. Su comando de
retorno termina la funcin y devuelve el control al programa en la lnea despus de la llamada
a la funcin (lnea 14), y se ejecuta el comando final de eco. Tenga en cuenta que para que la
funcin llama a ser reconocido como funciones de shell y no interpretadas como los nombres
de los programas externos, la definicin de funciones de shell deben aparecer en la secuencia
de comandos antes de que sean llamados.
Vamos a aadir definiciones mnimas funcin Shell en nuestro script:
375
#! / </
BinBODY>
/ bash
</ HTML>
_EOF_
#
local-vars: script para demostrar las variables locales foo = 0 #
mundial funct_1 variable foo () {
funct_2 () {
variable local foo foo # local para funct_2 foo = 2
echo "funct_2: foo = $ foo"
}
echo "mundial:
foo = $ foo "
funct_1
- Diseo Top-Down
26
Nombres de las funciones de Shell siguen las mismas reglas que las variables. Una funcin
debe contener al menos un comando. El comando de retorno (que es opcional) satisface el
requisito.
Variables Locales
En las secuencias de comandos que hemos escrito hasta ahora, todas las variables (incluyendo
constantes) han sido las variables globales. Las variables globales mantienen su existencia a
travs del programa. Esto est bien para muchas cosas, pero a veces puede complicar el uso de
funciones de shell. Dentro de las funciones del shell, a menudo es deseable tener variables
locales. Las variables locales slo son accesibles dentro de la funcin de shell en el que se
definen y dejan de existir una vez que la funcin 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, sin
tener que preocuparse acerca de los posibles conflictos de nombres.
Aqu hay un script de ejemplo que muestra cmo las variables locales se definen y se utiliza:
376
Variables
Locales
echo
"mundial:
func 2
echo "mundial:
[Me @ linuxbox
mundial:
foo
funct_1:
Foo
mundial:
funct_2 foo: foo
mundial: foo
~] $ Local vars
= 0
= 1
= 0
= 2
=0
Como podemos ver, las variables locales se definen precediendo el nombre de la variable con
la palabra local. Esto crea una variable que es local a la funcin shell en el que se define. Una
vez fuera de la funcin de shell, la variable ya no existe. Cuando ejecutamos este script, vemos
los resultados:
Vemos que la asignacin de valores a la variable foo local dentro de las dos funciones de shell
no tiene efecto en el valor de foo definida fuera de las funciones.
Esta caracterstica permite que las funciones de shell para ser escritas de modo que sigan
siendo independientes entre s y de la secuencia de comandos en el que aparecen. Esto es muy
valioso, ya que ayuda a evitar que una parte de un programa de interferir con otro. Tambin
permite funciones de shell que se escriben de manera que puedan ser porttil. Es decir, que se
pueden cortar y pegar desde el guin hasta la escritura, segn sea necesario.
26 - Diseo Top-Down
</ HEAD>
<BODY>
<H1> Sistema de Reporte de Informacin Para linuxbox </ h1>
<p> Generado 3/19/2009 04:02:10 PM EDT, por m </ P>
</ BODY>
</ HTML>
vemos que hay algunas lneas en blanco en nuestra salida despus de la indicacin de la hora,
pero no podemos estar seguros de la causa. Si cambiamos las funciones para incluir algunos
comentarios:
report_uptime () {
echo "Funcin report_uptime ejecutado."
retorno
}
report_disk_space () {
echo "Funcin report_disk_space ejecutado."
retorno
}
report_home_space () {
echo "Funcin report_home_space ejecutado."
retorno
}
y ejecutar el script de
nuevo:
[Me @ linuxbox ~] $ sys_info_page
<HTML>
<HEAD>
<TITLE> Informacin del sistema Informe Para linuxbox </ TITLE>
</ HEAD>
<BODY>
<H1> Sistema de Reporte de Informacin Para linuxbox </ h1> <p>
Generado 03/20/2009 05:17:26 AM EDT, por m </ P> Funcin
report_uptime ejecutado.
Funcin report_disk_space ejecutado.
Funcin report_home_space ejecutado.
</ BODY>
</ HTML>
378
Mantenga Scripts
Ejecucin
ahora vemos que, de hecho, nuestros tres funciones se estn ejecutando.
Con nuestro marco de la funcin en su lugar y de trabajo, es el momento de profundizar en
algunos de los cdigos de funcin. En primer lugar, la funcin report_uptime:
report_uptime () {cat
<< - _EOF_
<H2> Sistema Uptime </
h2>
<PRE> $ (tiempo de
actividad) </ PRE>
_EOF_
retorno
}
Es bastante sencillo. Utilizamos un documento de aqu a la salida de un encabezado de
seccin y la salida del comando uptime, rodeado de etiquetas <PRE> para conservar el
formato del comando. La funcin report_disk_space es similar:
Esta funcin utiliza el comando df -h para determinar la cantidad de espacio en disco. Por
ltimo, vamos a construir la funcin report_home_space:
Utilizamos el comando du con las opciones - sh para realizar esta tarea. Esto, sin embargo, no
es una solucin completa al problema. A pesar de que va a funcionar en algunos sistemas
(Ubuntu, por ejemplo), no va a funcionar en otros. La razn es que muchos sistemas
establecen 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 funcin report_home_space,
como est escrito, lo har
379
Resumiendo
En este captulo, hemos introducido un mtodo comn para el diseo del programa se llama
diseo de arriba hacia abajo, y ya hemos visto cmo funciona la cscara se utiliza para
construir el refinamiento paso a paso que se requiere. Tambin hemos visto cmo las variables
locales se puede utilizar para hacer funciones de shell independiente el uno del otro y desde el
programa en el que se encuentre. Esto hace posible para las funciones de shell para ser escritos
en una forma porttil y ser reutilizable por lo que les permite ser colocados en mltiples
programas; un gran ahorro de tiempo.
Lectura adicional
La Wikipedia tiene muchos artculos sobre la filosofa de diseo de software. Aqu hay
un par de buenos:
http://en.wikipedia.org/wiki/Top-down diseo
http://en.wikipedia.org/wiki/Subroutines
380
x=5
si [$ x -eq 5]; then echo "x es
igual a 5."
ms
echo "x no es igual a 5." fi
Decir "X no es igual a 5."
Este es un ejemplo de una rama. Sobre la base de la condicin, "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."
si
El uso de la cscara, que puede codificar la lgica anterior de la siguiente manera:
o podemos entrar directamente en la lnea de comandos (un poco ms corta):
381
[Me @ linuxbox ~] $ x = 5
[Me @ linuxbox ~] $ if [$ x -eq 5]; then echo "es igual a 5"; else echo "no es igual a 5"; fi
es 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"; fi
no es igual a 5
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, lo
que 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 continuacin, los
comandos
[Elif comandos; a continuacin,
los comandos ...]
[Otra cosa
comandos]
fi
donde los comandos se muestra una lista de comandos. Esto es un poco confuso a primera
vista. Pero antes de que podamos aclarar esto, tenemos que mirar cmo la cscara evala 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 nmero entero en el rango de 0 a 255, indica el xito o fracaso de la ejecucin del
comando. Por convencin, un valor de cero indica el xito y cualquier otro valor indica el
fracaso. El shell proporciona un parmetro que podemos utilizar para examinar el estado de
salida. Aqu lo vemos en accin:
382
Estado de
salida
En este ejemplo, ejecutamos el comando ls dos veces. La primera vez, el comando se ejecuta
correctamente. Si mostramos el valor del parmetro $ ?, vemos que es cero. Ejecutamos el
comando ls segunda vez, produciendo un error, y examinamos el parmetro $? de nuevo. Esta
vez contiene un 2, lo que indica que el comando ha detectado un error. Algunos comandos
utilizan diferentes valores de estado de salida para proporcionar diagnsticos de errores,
mientras que muchos comandos simplemente salir con un valor de uno cuando fallan. Las
pginas man a menudo incluyen una seccin titulada "Estado de Salida", que describe lo que
se utilizan los cdigos. Sin embargo, un cero indica siempre xito.
El shell proporciona dos rdenes internas extremadamente simples que no hacen nada
excepto terminar ya sea con un estado de salida cero o uno. El verdadero comando siempre se
ejecuta con xito y el falso comando siempre se ejecuta sin xito:
Podemos utilizar estos comandos para ver cmo funciona la instruccin if. Lo que la sentencia
if 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 ejecuta
correctamente, y no se ejecuta cuando el comando siguiente si no se ejecuta con xito. Si una
lista de comandos siguiente si, el ltimo comando en la lista se evala:
383
27
prueba
Por el momento, el comando utilizado con ms frecuencia si es con la prueba. El comando de
prueba realiza una serie de comprobaciones y comparaciones. Tiene dos formas equivalentes:
prueba expresin
y los ms populares:
[expresin]
donde la expresin es una expresin que se evala como verdadera o falsa. El comando test
devuelve un estado de salida de cero cuando la expresin es verdadera y un estado de uno
cuando la expresin es falsa.
Expresiones de archivos
Las siguientes expresiones se utilizan para evaluar el estado de los archivos:
Tabla 27-1: Expresiones prueba de archivos
Expresin
archivol -ef
archivo2
archivol -nt
archivo2
Si es cierto:
archivo1 y archivo2 tienen los mismos nmeros de inodo
(los dos nombres de archivo hacen referencia al mismo
archivo
vinculacin
archivo1 de
es ms
recienteduro).
que archivo2.
archivol -ot
archivo2
-b archivo
-c archivo
-d archivo
archivo -e
expediente existe.
-f archivo
archivo -g
Archivo -G
archivo -k
-L Archivo
-O Archivo
archivo -p
-r archivo
384
prueba
el usuario efectivo).
-s expediente
-S expediente
-t fd
-u expediente
-w expediente
-x expediente
385
ms
no existe "
386
prueba
fi
}
Expresiones de Cuerda
Si es cierto ...
cadena
cadena no es nulo.
-n cadena
-z cadena
stringi = Cadena2
stringi == cadena2
stringi ! = Cadena2
Advertencia: El> y <operadores de expresin deben ser citados (o escaparon con una
barra invertida) cuando se utiliza con la prueba. Si no lo son, que sern interpretados
por el shell como operadores de redireccin, con resultados potencialmente
destructivos. Tambin tenga en cuenta que si bien la documentacin de bash establece
que el orden de clasificacin se ajusta a la orden de clasificacin de la localizacin
actual, no es as. ASCII (POSIX) orden se utiliza en las versiones de fiesta hasta e
incluyendo 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
387
Expresiones enteros
Las siguientes expresiones se usan con nmeros
enteros: Tabla 27-3: probar Entero Expresiones
Expresin
Si es cierto ...
integerl -eq
entero2
integerl -ne
entero2
integerl -LE
entero2
integerl -lt
entero2
integerl -ge
integerl -gt
entero2
entero2
#! / Bin / bash
388
ms
prueba
390
#! / Bin / bash
# Test-integer2a: evaluar el valor de un nmero entero. INT = -5
si [["$ INT" = ~ A - [0-9] + $]?]; entonces si ((INT == 0)); entonces
echo "INT es cero."
ms
if ((INT <0)); entonces
echo "INT es negativo."
ms
echo "INT es positivo." fi
if ((((INT 2%)) == 0)); thenecho "INT es par."
ms
echo "INT es extrao." fi fi
ms
[Me @ linuxbox ~] $ if ((1)); then echo "Es verdad."; fi
echo "INT no es un entero." > & 2 exit 1 fi
Es cierto.
[Me @ linuxbox ~] $ if ((0)); then echo "Es verdad."; fi
[Me @ linuxbox ~] $
(()) - Diseado para los nmeros enteros
392
El! operador de negacin invierte el resultado de una expresin. Devuelve verdadero si una
expresin es falsa, y devuelve false si una expresin es verdadera. En la siguiente secuencia de
comandos, modificamos la lgica de nuestra evaluacin para encontrar los valores de INT que
estn fuera del rango especificado:
#! / Bin / bash
# prueba-integer4: determinar si un nmero entero es fuera de un
# especificada rango de valores.
MIN_VAL = 1
MAX_VAL = 100
INT = 50
]]; entonces _VAL. "
si [["$ INT" = ~ A - [0-9] + $]?]; entonces
si [[! (INT -ge MIN_VAL && INT -LE MAX_VAL) echo "$
INT est fuera $ MIN_VAL a $ MAX_
ms
echo "$ INT est en rango." fi
ms
echo "INT no es un entero." > & 2 exit 1 fi
393
Resumiendo
Comenzamos este captulo con una pregunta. Cmo podramos hacer nuestro script
sys_info_page detectar si el usuario tena permiso para leer todos los directorios de inicio?
Con nuestro conocimiento de si, podemos resolver el problema mediante la adicin de este
cdigo a la funcin report_home_space:
report_home_space () {
si [[$ (-u id) -eq 0]]; entonces
395
ms
fi
retorno
}
27 - Control de flujo: Bifurcaciones Con si
Evaluamos la salida del comando id. Con la opcin -u, Identificacin emite el nmero de ID de
usuario numrico del usuario efectivo. El superusuario es siempre cero y cada otro usuario es
un nmero mayor que cero. Sabiendo esto, podemos construir dos documentos diferentes
aqu, uno toma ventaja de privilegios de superusuario, y la otra, restringidos al propio
directorio del usuario.
Vamos a tomar un descanso de la sys_info_page programa, pero no te preocupes. Ser de
nuevo. Mientras tanto, vamos a cubrir algunos de los temas que vamos a necesitar cuando
reanudemos nuestro trabajo.
Lectura adicional
Hay varias secciones de la pgina de manual de bash que proporcionan ms detalles sobre los
temas tratados en este captulo:
Expresiones condicionales
396
#! / Bin / bash
# Test-entero2: evaluar el valor de un nmero entero. INT = -5
si [["$ INT" = ~ A - [0-9] + $]?]; entonces si [$ INT -eq 0]; entonces
echo "INT es cero."
ms
si [$ INT -lt 0]; entonces
echo "INT es negativo."
ms
echo "INT es positivo." fi
si [$ ((INT% 2)) -eq 0]; thenecho "INT es par."
ms
echo "INT es extrao." fi fi
ms
echo "INT no es un entero." > & 2 exit 1 fi
28 - Lectura de entrada del
teclado
28
Las secuencias de comandos que hemos escrito hasta ahora carecen de una caracterstica
comn en la mayora interactividad programas- ordenador. Es decir, la capacidad del
programa para interactuar con el usuario. Aunque muchos programas no necesitan ser
interactivo, algunos programas se benefician de ser capaz de aceptar la entrada directamente
del usuario. Tomemos, por ejemplo, esta secuencia de comandos desde el captulo anterior:
Cada vez que queremos cambiar el valor de INT, tenemos que editar el script. Sera mucho
ms til si la secuencia de comandos se puede pedir al usuario un valor. En este captulo,
vamos a empezar a ver cmo podemos aadir interactividad a nuestros programas.
397
#! / Bin / bash
# Entero leer: evaluar el valor de un nmero entero.
echo -n "Introduzca un nmero entero ->" leer int
si [["$ int" = ~ A - [0-9] + $]?]; entonces si [$ int -eq 0]; entonces
echo "$ int es cero."
ms
si [$ int -lt 0]; entonces
echo "$ int es negativo."
ms
echo "$ int es positivo." fi
si [$ ((int% 2)) -eq 0]; thenecho "$ int es par."
ms
echo "$ int es extrao." fi fi
ms
echo "El valor de entrada no es un nmero entero." >
& 2 exit 1 fi
28 ____________________________________
398
En este script, asignamos y mostrar hasta cinco valores. Observe cmo se comporta cuando se
le da lectura diferente nmero de valores:
[Me @ linuxbox ~] $ lectura mltiple
Introduzca uno o ms valores> abc
var1 = 'A'
var2 = 'B'
var3 = 'C'
var4 = 'D'
VAR5
'E'
=
[Me @ linuxbox ~] $ lectura mltiple
Introduzca uno o ms valores> a
'A'
var1
var2 = = ''
=
var3 ''
var4
= ''
VAR5 = ''
[Me @ linuxbox ~] $ lectura mltiple
Introduzca uno o ms valores> abc
var1 = 'A'
var2 = 'B'
var3 = 'C'
var4 = 'D'
VAR5
'E f g'
=
de
defg
399
#! / Bin / bash
# Solo leer:
[Me
lectura
nica
Ingrese
echo@-nlinuxbox
"Enter ~] $uno
o ms
valores>
"
uno
o
ms
valores>
Responder
abcd
= 'abcd'
leer
echo
"RESPUESTA = $ CONTESTACIN '"
Al ejecutar este script de resultados en esta:
respuesta, se le asignar toda la entrada:
Opciones
de lectura compatible con las siguientes opciones: Tabla 28-1: Opciones de lectura
Opcin
matriz -a
-d delimitador
-e
cadena -i
num -n
prompt -p
400
Descripcin
Asigne la entrada a la gama, empezando por el ndice cero.
Vamos a cubrir las matrices en el Captulo 35.
El primer carcter en el delimitador de cadena se utiliza para
indicar el final de la entrada, en lugar de un carcter de nueva
lnea.
Utilice Readline para manejar la entrada. Esto permite la
edicin de entrada en la misma manera que la lnea de
comandos.
Utilice cadena como una respuesta por defecto si el usuario
simplemente presiona Enter. Requiere la opcin -e.
Leer caracteres num de entrada, en lugar de una lnea entera.
Visualice un indicador para la entrada usando el smbolo de
cadena.
El uso de las diversas opciones, que podemos hacer cosas interesantes con lectura. Por
ejemplo, con la opcin -p, podemos proporcionar una cadena de peticin:
#! / Bin / bash
#-Secreto leer: Entrada de una frase de contrasea secreta
si se lee -t 10 -SP "Enter passphrase secreto>" secret_pass; luego echo -e "\ nsecret
frase de contrasea = '$ secret_pass'"
ms
echo -e "\ nInput Tiempo de espera
agotado"> & 2 exit 1 fi
#! / Bin / bash
# Lectura nica: leer varios valores en la variable por defecto leer -p
"Ingrese uno o ms valores>" echo "REPLY = '$ Responder'"
Con la -t -s y opciones que podemos escribir un script que lee la entrada y el tiempo de espera
si la entrada no se completa en un tiempo determinado "secreto":
La secuencia de comandos solicita al usuario una contrasea secreta y espera 10 segundos
para que la entrada. Si la entrada no se completa dentro del tiempo especificado, el script
finaliza con un error. Desde la opcin -s se incluye, los caracteres de la frase de contrasea no
se reflejan en la pantalla a medida que se escriben.
401
#! / Bin / bash
# Lectura predeterminado: suministrar un valor por defecto si el usuario pulsa la
tecla Entrar.
leer -e -p "? Cul es el nombre de usuario" $ -i USUARIO echo "Ha respondido: '$
CONTESTACIN'"
En este guin, que solicitar al usuario que ingrese su / su nombre de usuario y utilizar la
variable de entorno USER para proporcionar un valor por defecto. Cuando se ejecuta la
secuencia de comandos que muestra la cadena por defecto y si el usuario simplemente
presiona la tecla Intro, lectura asignar la cadena predeterminada a la variable respuesta.
IFS
Normalmente, el shell realiza la divisin de palabras en la entrada proporcionada para leer.
Como hemos visto, esto significa que varias palabras separadas por uno o ms espacios se
convierten en elementos separados en la lnea de entrada, y se asignan a las variables de
separar 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, un
tabulador, y un carcter de nueva lnea, cada uno de los elementos que separar unos de otros.
Podemos ajustar el valor de IFS para controlar la separacin de los campos de entrada para
leer. Por ejemplo, el archivo / etc / passwd contiene lneas de datos que utilizan el carcter de
dos 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
Entrada de Validacin
Con nuestra nueva capacidad de tener la entrada de teclado viene un desafo de programacin
adicional, entrada validar. Muy a menudo la diferencia entre un programa bien escrito y uno
mal escrito radica en la capacidad del programa para hacer frente a lo inesperado. Con
frecuencia, el inesperado aparece en forma de mal de entrada. Hemos hecho un poco de esto
con nuestros programas de evaluacin en el captulo anterior, donde nos registramos los
valores de nmeros enteros y descartadas valores vacos y los caracteres no numricos. Es
importante para llevar a cabo este tipo de controles de programacin cada vez que un
programa recibe de entrada, para protegerse contra datos no vlidos. Esto es especialmente
importante para los programas que son compartidos por varios usuarios. Omitiendo 404
Entrada de
Validacin
estas medidas de seguridad en aras de la economa podran ser excusados si un programa se
va a utilizar una vez y slo por el autor para realizar alguna tarea especial. Incluso entonces, si
el programa lleva a cabo tareas peligrosas como borrar archivos, sera conveniente incluir la
validacin de datos, por si acaso.
Aqu tenemos un ejemplo de programa que valida los diversos tipos de entrada:
#! / Bin / bash
# lectura de validacin: validar la entrada
invalid_input () {
echo "Entrada no vlida '$
CONTESTACIN'"> & 2 salida 1
}
leer -p "Introduzca un solo elemento>"
# de entrada est vaca (no vlido)
[[-z $ Responder]] && invalid_input
# entrada es varios artculos (no vlido)
(($ (Echo $ Responder | wc -w)> 1)) && invalid_input
# se introduce un nombre de archivo vlido?
si [[$ RESPUESTA = ~ * [- [: alnum:] \ ._] + $]]; then
echo "'$ CONTESTACIN' es un nombre de
archivo vlido." si [[-e $ Responder]]; entonces
echo "Y existe el archivo '$ CONTESTACIN'."
ms
echo "Sin embargo, no existe el archivo '$
CONTESTACIN'." fi
# se introduce un nmero de punto flotante?
si [[$ RESPUESTA = ~ A - [[: dgito:]] * \ [[: dgito:?.]] + $]]; thenecho "'$
CONTESTACIN' es un nmero de punto flotante."
ms
echo "'$ CONTESTACIN' no es un nmero de punto flotante."
fi
ms
405
Mens
Un tipo comn de interactividad se llama basado en mens. En los programas basadas en
mens, el usuario se le presenta una lista de opciones y se le pide que elija uno. Por ejemplo,
podramos imaginar un programa que present el siguiente:
Usando lo que aprendimos de escribir nuestro programa sys_info_page, podemos construir
un programa basado en mens para realizar las tareas en el men de arriba:
406
Mens
Esta secuencia de comandos se divide lgicamente en dos partes. La primera parte muestra el
men e introduce la respuesta del usuario. La segunda parte identifica la respuesta y lleva a
cabo la accin seleccionada. Observe el uso de la orden de salida en este script. Se utiliza aqu
para evitar que la secuencia de comandos desde la ejecucin de cdigo innecesario despus de
una accin se ha llevado a cabo. La presencia de mltiples puntos de salida en un programa es
generalmente una mala idea (que hace que la lgica del programa ms difcil de entender),
pero funciona en este script.
Resumiendo
En este captulo, dimos nuestros primeros pasos hacia la interactividad; permitiendo a los
usuarios a introducir datos en nuestros programas a travs del teclado. El uso de las tcnicas
presentadas hasta el momento, es posible escribir muchos programas tiles, tales como
programas de clculo especializados y de usar fciles interfaces a la herramientas de lnea de
comandos arcanos. En el siguiente captulo, nos basaremos en el concepto de programa menimpulsado para que sea an mejor.
Crdito extra
Es importante estudiar los programas en este captulo con cuidado y tener una comprensin
completa de la forma en que se estructuran lgicamente, como los programas venideros ser
cada vez ms complejo. Como ejercicio, vuelve a escribir los programas en este captulo
utilizando el comando de prueba en lugar del comando compuesto [[]]. Sugerencia: Utilice
grep para evaluar las expresiones regulares y evaluar el estado de salida. Esta ser una buena
prctica.
407
Lectura adicional
El Manual de Referencia Bash contiene un captulo sobre rdenes internas, que incluye
el comando de lectura:
http://www.gnu.Org/software/bash/manual/bashref.html#Bash-Builtins
408
Looping
La vida cotidiana est llena de actividades repetidas. El ir a trabajar cada da, pasear al perro,
cortar una zanahoria son todas las tareas que implican la repeticin de una serie de pasos.
Vamos a considerar cortar una zanahoria. Si expresamos esta actividad en pseudocdigo,
podra 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 antelacin
6. rebanada de zanahoria
7. si toda la zanahoria en rodajas, a continuacin, dejar de fumar, de lo contrario, vaya al
paso 4
Los pasos del 4 al 7 forman un bucle. Las acciones dentro del bucle se repite hasta que la
condicin, "toda la zanahoria en rodajas," se alcanza.
mientras
Bash puede expresar una idea similar. Digamos que queramos mostrar cinco nmeros en
secuencial
409
La sintaxis del comando, mientras que es: mientras que los comandos; hacer comandos; hecho
Al igual que si, mientras se evala el estado de salida de una lista de comandos. Mientras el
estado de salida es cero, realiza las mandos dentro del bucle. En el guin anterior, se crea la
cuenta de variable y le asigna un valor inicial de 1. El comando mientras se evala el estado de
salida del comando test. Mientras el comando test devuelve un estado de salida de cero, se
ejecutan los comandos dentro del bucle. Al final de cada ciclo, el comando de prueba se repite.
Despus de seis iteraciones del bucle, el valor de recuento se ha incrementado a 6, el comando
de prueba ya no devuelve un estado de salida de cero y el bucle termina. El programa
contina con la siguiente declaracin despus del bucle.
Podemos utilizar un bucle while para mejorar el programa de lectura-men del captulo
anterior:
#! / Bin / bash
# Mientras-men: un programa de informacin del sistema de mens
410
Looping
DEMORA = 3 # Nmero de segundos para mostrar los resultados
mientras que [[$ RESPUESTA = 0]!]; hacer
claro
cat << - _EOF_
Por favor seleccione:
1. Mostrar informacin del sistema
2.
Mostrar espacio en disco
3.
Pantalla Inicio Espacio
Utilizacin 0. Salir
_EOF_
leer -p "Introduzca la seleccin [0-3]>"
ms
fi
hecho
echo "Programa terminado."
29 ____________________________________
Salir de un bucle
Bash proporciona dos rdenes internas que se pueden utilizar para controlar el flujo del
programa dentro de bucles. El comando break termina inmediatamente un bucle, y el control
del programa se reanuda con la siguiente declaracin despus del bucle. El comando continue
hace que el resto del bucle se omiten, y el control del programa se reanuda con la siguiente
iteracin del bucle. Aqu vemos una versin del programa, mientras que-men que incorpora
tanto descanso y continuar:
#! / Bin / bash
#
: Un programa de informacin del sistema de mens
Mientras-menu2
DEMORA = 3 # Nmero de segundos para mostrar los resultados
mientras que la verdadera; hacer
claro
gato << - EOF
Por favor seleccione:
1. Mostrar informacin del sistema
2. Mostrar espacio en disco
3. Visualizacin Utilizacin Inicio Espacio
0. Dejar de
EOF
leer -p
412
fi
si [[$ RESPUESTA == 0]];
echo "Inicio Espacio Utilizacin ($ USER)" du
entonces
-sh $ HOME fi
rotura
sueo $
fi
RETRASO
ms
continuar
"Entrada no
eco
sueo vlida
$ DEMORA
fi
hecho
echo "Programa terminado."
Salir de un bucle
En esta versin de la secuencia de comandos, hemos creado un bucle sin fin (una que nunca
termina por s mismo) mediante el comando fiel a suministrar un estado de salida al mismo
tiempo. Desde cierto siempre salir con un estado de salida de cero, el bucle nunca terminar.
Esta es una tcnica scripting sorprendentemente comn. 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 se
utiliza para salir del bucle cuando se elige la opcin "0". El comando continuar se ha incluido
al final de las otras opciones de secuencia de comandos para permitir la ejecucin ms
eficiente. Mediante el uso de continuar, el script omitir cdigo que no es necesaria cuando se
identifica una seleccin. Por ejemplo, si se elige la seleccin "1" y se identific, no hay ninguna
razn para la prueba de las otras selecciones.
hasta
El comando hasta que se parece mucho tiempo, pero en lugar de salir de un bucle cuando se
encuentra un cdigo de salida distinto de cero, se hace lo contrario. Un bucle hasta que
contina 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 a
5. Podramos obtener el mismo resultado mediante la codificacin de la secuencia de
comandos con hasta:
#! / Bin / bash
# Hasta cargos: mostrar una serie de nmeros count =
1
hasta que [[$ contar -gt 5]]; hacer
echo $ conteo
413
hecho
mientras que y hasta que puede procesar la entrada estndar. Esto permite que los archivos
sean procesados con tiempo y hasta bucles. En el siguiente ejemplo, vamos a mostrar el
contenido del archivo tros.txt pantalla utilizado en captulos anteriores:
Para redirigir un archivo al bucle, colocamos el operador de redireccin despus de la
declaracin de hecho. El bucle utilizar leer a la entrada de los campos del archivo redirigido.
El comando de lectura se sale despus de cada lnea se lee, con un estado de salida cero hasta
que se alcanza el final del archivo. En ese momento, saldr con un estado de salida distinto de
cero, terminando as el bucle. Tambin es posible a la entrada estndar tubo en un bucle:
414
Resumiendo
Con la introduccin de los bucles, y nuestros encuentros anteriores con la ramificacin,
subrutinas y secuencias, hemos cubierto los principales tipos de control de flujo utilizados en
los programas. Bash tiene algunos ms trucos bajo la manga, pero son refinamientos sobre
estos conceptos bsicos.
Lectura adicional
415
30 - Solucin de problemas
30 - Solucin de problemas
A medida que nuestros guiones se vuelven ms complejos, es el momento de echar un vistazo
a lo que sucede cuando las cosas van mal y no hacen lo que queremos. En este captulo, vamos
a ver algunos de los tipos comunes de errores que se producen en las secuencias de comandos,
#! / Bin / bash
# Problemas: la escritura para demostrar los errores de
nmero comn = 1
si [$ nmero = 1]; entonces
echo "El nmero es igual a 1."
ms
echo "Nmero no es igual a 1." fi
y describimos algunas tcnicas tiles que se pueden utilizar para localizar y erradicar los
problemas.
416
#! / Bin / bash
# Problemas: la escritura para demostrar los errores de
nmero comn = 1
si [$ nmero = 1]; entonces
Nmero de eco "es igual a 1.
ms
echo "Nmero no es igual a 1." fi
en la bsqueda de
final inesperado de archivo
Los errores sintcticos
Falta Cotizaciones
Si editamos nuestro guin y retiramos la cita se arrastra desde el argumento tras el primer
comando echo:
Se genera dos errores. Curiosamente, los nmeros de lnea no son reportados donde se extrajo
la cita que falta, sino mucho ms tarde en el programa. Podemos ver por qu, si seguimos el
programa despus de la cita que falta. fiesta continuar en busca de la cotizacin de cierre
hasta que encuentra uno, lo que lo hace inmediatamente despus de que el segundo comando
echo. Bash se vuelve muy confuso despus de eso, y la sintaxis del comando si est roto
porque la declaracin fi es ahora dentro de una cita (pero abierto) cadena.
En los guiones largos, este tipo de error puede ser muy difcil de encontrar. Utilizando un
: Sintaxis en
editor con resaltado de sintaxis ayudar. Si se instala una versin completa de vim, resaltado
de sintaxis se puede activar con el comando:
#! / Bin / bash
# Problemas: la escritura para demostrar los errores de
nmero comn = 1
si [$ nmero = 1] entonces
echo "El nmero es igual a 1."
ms
echo "Nmero no es igual a 1." fi
[Me @ linuxbox ~] $ problemas
/ Home / me / bin / problemas: la lnea 9: error de sintaxis cerca smbolo
inesperado 'otra cosa'
/ Home / me / bin / problemas: la lnea 9: 'otra cosa'
30 - Solucin de problemas tiempo. Echemos un vistazo a lo que ocurre si eliminamos el
punto y coma despus de la prueba en el caso de comandos:
El resultado es la siguiente:
Una vez ms, el mensaje de error indica un error que se produce ms tarde que el problema
real. Lo que pasa es realmente muy interesante. Como recordamos, si acepta una lista de
comandos y se evala el cdigo de salida de la ltima orden de la lista. En nuestro programa,
tenemos la intencin de esta lista a consistir en un solo comando, [, sinnimo de prueba. El
[comando toma lo que le sigue como una lista de argumentos; en nuestro caso, cuatro
argumentos: $ nmero, 1, =, y]. Con el punto y coma retira la palabra a continuacin, se aade
a la lista de argumentos, que es sintcticamente legal. El siguiente comando echo es legal,
tambin. Se interpreta como otro comando en la lista de comandos que si evaluarn por un
cdigo de salida. Se encontr el otro lado, pero que est fuera de lugar, ya que la cscara lo
reconoce como una palabra reservada (una palabra que tiene un significado especial para el
shell) y no el nombre de un comando, por lo tanto, el mensaje de error.
Expansiones imprevistos
Es posible tener errores que slo 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 una
expansin. Si volvemos nuestro punto y coma que falta y cambiamos el valor del nmero a
una variable vaca, podemos demostrar:
418
Los errores
sintcticos
#! / Bin / bash
# Problemas: la escritura para demostrar varios errores
comunes =
si [$ nmero = 1]; entonces
echo "El nmero es igual a 1."
ms
echo "Nmero no es igual a 1." fi
["Nmero $" = 1]
419
["" = 1]
30 - Solucin de problemas______________________
Luego, cuando se produce la expansin, el resultado ser la siguiente:
que produce el nmero correcto de argumentos. Adems de las cadenas vacas, citas deben
utilizarse en los casos en que un valor podra ampliar en cadenas de varias palabras, como con
los nombres de archivo que contienen espacios incrustados.
Errores lgicos
A diferencia de los errores sintcticos, errores lgicos no impiden que un script se ejecute. El
script se ejecutar, pero no va a producir el resultado deseado, debido a un problema con su
lgica. Hay un sinnmero de posibles errores lgicos, pero aqu estn algunos de los tipos ms
comunes que se encuentran en las secuencias de comandos:
1. Expresiones condicionales incorrectos. Es fcil incorrectamente un cdigo if / then
/ else y tienen la lgica equivocada lleva a cabo. A veces, la lgica se invierte, o ser
incompleta.
2. "Off por uno" errores. Al codificar bucles que emplean contadores, es posible pasar
por 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 como
resultado ya sea un bucle "de ir fuera de la final" contando demasiado lejos, o de lo
que falta de la ltima iteracin del bucle terminando una iteracin demasiado pronto.
3. Situaciones no previstas. La mayora de los errores lgicos son el resultado de un
programa de datos o encontrarse con situaciones que eran imprevisto por el
programador. Esto tambin puede incluir expansiones imprevistas, como un nombre
de archivo que contiene espacios incrustados que se expande en mltiples
argumentos de comandos en lugar de un nico nombre de archivo.
Programacin Defensivo
Es importante verificar las hiptesis en la programacin. Esto significa una cuidadosa
evaluacin del estado de salida de los programas y comandos que son utilizados por un
guin. He aqu un ejemplo, basado en una historia real. Un administrador del sistema
cd
$
nombre_dir rm
*
desafortunado escribi un guin para realizar una tarea de mantenimiento en un servidor
importante. El guin contiene las siguientes dos lneas de cdigo:
420
Errores lgicos
No hay nada intrnsecamente malo con estas dos lneas, siempre y cuando el directorio
llamado en la variable, nombre_dir, existe. Pero, qu pasa si no lo hace? En ese caso, el
comando cd falla y el guin sigue a la siguiente lnea y elimina los archivos en el directorio de
trabajo actual. No es el resultado deseado en absoluto! El administrador desventurado
destruy una parte importante del servidor debido a esta decisin de diseo.
Echemos un vistazo a algunas formas de este diseo se podra mejorar. En primer lugar,
podra ser prudente para que la ejecucin 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, pero
todava deja abierta la posibilidad de que la variable, nombre_dir, no est definido o est
vaco, que dara lugar a los archivos en el directorio personal del usuario se va a eliminar. Esto
tambin podra ser evitado mediante la comprobacin para ver que nombre_dir en realidad
contiene el nombre de un directorio existente:
421
30 - Solucin de problemas
Entrada de Verificacin
Una regla general de una buena programacin es que si un programa acepta la entrada, tiene
que ser capaz de hacer frente a cualquier cosa que recibe. Esto generalmente significa que la
entrada debe ser cuidadosamente seleccionados, para asegurar que slo de entrada vlido es
aceptado para su posterior procesamiento. Vimos un ejemplo de esto en el captulo anterior,
cuando se estudi el comando de lectura. Un guin contena la siguiente prueba para verificar
una seleccin de men:
Esta prueba es muy especfica. Slo se devuelve un estado de salida cero si la cadena devuelta
por el usuario es un nmero en el rango de cero a tres. Ninguna otra cosa ser aceptado. A
veces este tipo de pruebas puede ser muy difcil de escribir, pero el esfuerzo es necesario para
producir una secuencia de comandos de alta calidad.
Pruebas
La prueba es un paso importante en todo tipo de desarrollo de software, incluyendo las
secuencias de comandos. Hay un dicho en el mundo del cdigo abierto, "la libertad
anticipada, la liberacin a menudo," que refleja este hecho. Por la liberacin de pronto y con
frecuencia, el software se vuelve ms exposicin a utilizar y las pruebas. La experiencia ha
demostrado que los insectos son mucho ms fciles de encontrar, y mucho menos costoso para
arreglar, si se encuentran al principio del ciclo de desarrollo.
En una discusin anterior, vimos cmo los trozos se pueden utilizar para verificar el flujo del
programa. Desde las primeras etapas de desarrollo del guin, son una tcnica valiosa para
comprobar el progreso
422
Pruebas
de nuestro trabajo.
Veamos el problema de eliminacin de archivos arriba y ver cmo esto podra ser codificada
para la prueba fcil. Probando el fragmento original de cdigo sera peligroso, ya que su
propsito es eliminar los archivos, pero podramos modificar el cdigo para hacer la caja
fuerte de prueba:
Dado que las condiciones de error ya los mensajes tiles de salida, no hay que aadir ninguna.
El cambio ms importante es colocar un comando echo justo antes del comando rm para
permitir que el mando y la lista de parmetros ampliado que se mostrarn, en lugar de la
orden en realidad est ejecutando. Este cambio permite la ejecucin segura de cdigo. Al final
del fragmento de cdigo, colocamos un comando de salida a la conclusin de la prueba y
evitar que cualquier otra parte de la secuencia de comandos de ser llevado a cabo. La
necesidad de este variar de acuerdo con el diseo de la secuencia de comandos.
Tambin se incluyen algunos comentarios que actan como "marcadores" para nuestros
cambios relacionados con la prueba. Estos pueden ser usados para ayudar a encontrar y
eliminar los cambios cuando finalice la prueba.
Casos de prueba
Para llevar a cabo las pruebas de utilidad, es importante desarrollar y aplicar buenos casos de
prueba. Esto se hace seleccionando cuidadosamente los datos de entrada o condiciones que
reflejan casos borde y esquina operativo. En nuestro fragmento de cdigo (que es muy
simple), queremos saber cmo el cdigo realiza bajo tres condiciones especficas:
1. nombre_dir contiene el nombre de un directorio existente
2. nombre_dir contiene el nombre de un directorio inexistente
3. nombre_dir est vaca
Mediante la realizacin de la prueba con cada una de estas condiciones, se logra una buena
cobertura de la prueba.
Al igual que con el diseo, la prueba es una funcin del tiempo, tambin. No todas las
caractersticas de la escritura tiene que
423
Depuracin
Si la prueba revela un problema con un guin, el siguiente paso es la depuracin. "Un
problema" por lo general significa que el guin es, de alguna manera, la no realizacin de las
expectativas del programador. Si este es el caso, tenemos que determinar cuidadosamente
exactamente lo que el guin est haciendo en realidad y por qu. Encontrar errores a veces
puede implicar una gran cantidad de trabajo de detective.
Un guin bien diseado va a tratar de ayudar. Debe ser programado defensiva, para detectar
condiciones anormales y proporcionar informacin til para el usuario. A veces, sin embargo,
si [[-d $ nombre_dir]]; entonces si
cd $ nombre_dir; entonces rm *
ms
echo "no puede cd para '$ nombre_dir'"> & 2
exit 1 fi
# ms
#
echo "no hay tal directorio: '$ nombre_dir'"> & 2
#
salida 1
fi
los problemas son bastante extraa e inesperada, y se requieren tcnicas ms involucrados.
Rastreo
Los errores son a menudo casos de flujo lgico inesperado dentro de un script. Es decir, las
partes de la secuencia de comandos son o bien nunca se ejecutan o se ejecutan en el orden
incorrecto o en el
424
Depuracin
momento equivocado. Para ver el flujo real del programa, se utiliza una tcnica llamada
rastreo.
Uno de los mtodos de rastreo consiste en colocar mensajes informativos en una secuencia de
comandos que muestra el lugar de la ejecucin. Podemos aadir mensajes a nuestro
fragmento de cdigo:
echo "la preparacin para eliminar los archivos"> & 2
si [[-d $ nombre_dir]]; entonces si cd $
nombre_dir; then echo "Eliminar archivos"> &
2
rm *
ms
echo "no puede cd para '$ nombre_dir'"> & 2
exit 1 fi
ms
echo "no hay tal directorio: '$ nombre_dir'"> & 2 exit
1 fi
echo "la eliminacin de archivos completa"> & 2
Enviamos los mensajes de error estndar para separarlos de salida normal. Tampoco guin La
lneas que contienen los mensajes, por lo que es ms fcil de encontrar cuando es el momento
de retirarlos.
Ahora, cuando se ejecuta la secuencia de comandos, es posible ver que la eliminacin de
archivos se ha realizado:
425
30 - Solucin de
problemas
si [$ nmero = 1]; entonces
echo "El nmero es igual a 1."
ms
echo "Nmero no es igual a 1." fi
Con el rastreo habilitado, vemos los comandos realizados con expansiones aplicadas. Los
signos ms indican que conducen la pantalla de la traza para distinguirlas de las lneas de
salida regular. El signo ms es el carcter predeterminado de salida de rastreo. Est contenida
en la variable de shell PS4 (cadena pronto 4). El contenido de esta variable se puede ajustar
para que el indicador ms til. Aqu, modificamos el contenido de la variable a incluir el
nmero de lnea actual en la secuencia de comandos donde se realiza la traza. Tenga en cuenta
que se requieren comillas simples para prevenir la expansin hasta que se utiliza realmente el
smbolo:
[Me @ linuxbox ~] PS4 $ export = '$ NUMLINEA +'
[Me @ linuxbox ~] $ dificultad 5 + nmero = 1
7 + '[' 1 = 1 ']'
8 + Echo 'El nmero es igual a 1.'
El nmero es igual a 1.
Para realizar un seguimiento sobre una parte seleccionada de una secuencia de comandos, en
lugar de toda la secuencia de comandos, podemos utilizar el comando set con la opcin -x:
#! / Bin / bash
# Problemas: la escritura para demostrar los errores de
nmero comn = 1
set -x # Encienda el rastreo
si [$ nmero = 1]; entonces
echo "El nmero es igual a 1."
426
#! / Bin / bash
# Problemas: la escritura para demostrar los errores de
nmero comn = 1
echo "nmero = $ nmero" # DEBUG
set -x # Encienda el rastreo si [$ nmero = 1]; entonces
ms echo "El nmero es igual a 1."
ms echo "Nmero no es igual a 1." fi
+ x # desactivar
el seguimiento
echo "Nmero
no es igual a 1." fi
+ x # desactivar el seguimiento
Depuracin
Utilizamos el comando set con la opcin -x para activar el rastreo y el + x opcin para
desactivar el rastreo. Esta tcnica se puede utilizar para examinar mltiples porciones de una
secuencia de comandos problemtico.
Resumiendo
En este captulo, nos fijamos en slo algunos de los problemas que pueden surgir durante el
desarrollo de la escritura. Por supuesto, hay muchos ms. Las tcnicas descritas aqu permitir
encontrar errores ms comunes. La depuracin es un arte que se puede desarrollar a travs de
la experiencia, tanto en saber cmo evitar los errores (prueba constantemente a lo largo del
desarrollo) y en la bsqueda de errores (uso eficaz de rastreo).
427
30 - Solucin de problemas
Lectura adicional
La Wikipedia tiene un par de artculos cortos sobre los errores sintcticos y
lgicos: http://en.wikipedia.org/wiki/Syntax error error
http://en.wikipedia.org/wiki/Logic
Hay muchos recursos en lnea para los aspectos tcnicos de la programacin 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 programacin de Unix es un gran recurso para el
aprendizaje de los conceptos bsicos que se encuentran en los programas de Unix bien
escritos. 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 depuracin de servicio pesado, no es el Bash depurador:
http://bashdb.sourceforge.net/
428
caso
El comando compuesto de opcin mltiple de bash se llama as. Tiene la siguiente sintaxis:
palabra en caso
[Patrn [| comandos patrn] ...)
esac
Si nos fijamos en el programa de lectura-men del captulo 28, vemos la lgica utilizada para
actuar en la seleccin de un usuario:
429
fi
si
fi
si
echo "Programa
Salida
terminado."
fi
si
ms
430
los
"($
caso
1)
2)
3)
*)
$ (-u Id) -eq 0]]; then echo "Utilizacin (Todos los usuarios) "
Inicio Espacio du -sh / home / *
echo "Utilizacin Inicio Espacio du
-sh $ HOME
($ USER) "
esac
El comando de caso examina el valor de la palabra, en nuestro ejemplo, el valor de la variable
de respuesta, y entonces intenta emparejarlo contra uno de los patrones especificados. Cuando
se encuentra una coincidencia, se ejecutan los comandos asociados con el patrn especificado.
Una vez que se encuentra una coincidencia, se intenta no hay ms partidos.
Patrones
Los patrones utilizados por caso son los mismos que los utilizados por la expansin de
nombre de ruta. Los patrones se terminan con un ")" carcter. Aqu hay algunos patrones
vlidos:
Descripcin
a)
[[: Alpha:]])
???)
* .txt)
*)
"
caso en $ Responder
[[: Alpha:]])
[ABC] [0-9])
???)
* .txt)
*)
esac
eco
eco
eco
eco
eco
"Es
"Es
"Es
"Es
"Es
Tambin es posible combinar mltiples patrones usando el carcter barra vertical como
separador. Esto crea una "o" patrn condicional. Esto es til para cosas tales como el manejo
de los personajes, tanto maysculas y minsculas. Por ejemplo:
#! / Bin / bash
# Caso-men: un programa de informacin del sistema de mens
claro eco "
Por favor seleccione:
A. Mostrar informacin del sistema
B.
Mostrar espacio en disco
C.
Visualizacin Utilizacin Inicio Espacio
P. Salir
"
leer -p "Introduzca la seleccin [A, B, C o Q]>" caso $
Responder 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]]; entonces
echo "Utilizacin Inicio Espacio (Todos los usuarios)"
du -sh / home / *
ms
echo "Inicio Espacio Utilizacin ($ USER)" du
-sh $ HOME fi
432
//
caso
Aqu, modificamos el programa de caso-men para utilizar letras en vez de nmeros para la
seleccin del men. Observe cmo los nuevos modelos permiten la entrada de letras
maysculas y minsculas.
#! / Bin / bash
# Case4-1: una prueba personaje
leer -n 1 -p Tipo "
un carcter> "
eco
caso en $ Responder
[[: Upper:]])
eco "' $
es maysculas. ";;
[[: Lower:]])
eco "' $CONTES es minscula. ";;
TACIN es alfabtico. ";;
[[: Alpha:]])
eco "' $CONTES
TACIN es un dgito. ";;
[[: Dgito:]])
eco "' '$CONTES
'$CONTES es un carcter visible. ";;
[[: Graph:]])
eco "' TACIN
'
TACIN
[[: Punct:]])
eco "' $CONTES
es un smbolo de puntuacion. ";;
[Me @ linuxbox
~] $ case4-1
'
TACIN
[[: Space:]])
eco "' $CONTES
es un carcter de espacio en blanco. ";;
escriba un[[:
carcter>
una 'a'eco
es "' $CONTES
'
TACIN
Xdigit:]])
es un dgito hexadecimal. ";;
minscula.
'CONTES
TACIN
esac
'TACIN
Al ejecutar esta secuencia de comandos
' produce esto:
El script funciona para la mayor parte, pero falla si un personaje coincide con ms de uno de
los personajes de las clases POSIX. Por ejemplo, el carcter "a" es a la vez minsculas y
alfabtica, as como un dgito hexadecimal. En bash anteriores a la versin 4.0 no haba
manera para el caso de coincidir ms de una prueba. Las versiones modernas de bash, aadir
el ";; y" notacin para
433
La adicin de la sintaxis ";; y" permite que el caso contine a la siguiente prueba en lugar de
simplemente por concluida.
Resumiendo
El comando caso es una adicin til a nuestra bolsa de trucos de programacin. Como
veremos en el prximo captulo, es la herramienta perfecta para el manejo de determinados
tipos de problemas.
Lectura adicional
434
Lectura
adicional
ciones:
http://tldp.org/LDP/abs/html/testbranch.ht
ml
435
32 - Parmetros
posicionales
32 - Parmetros
posicionales
Una caracterstica que ha estado ausente de nuestros programas es la capacidad de aceptar y
de opciones y argumentos de la lnea de comandos de proceso. En este captulo, vamos a
examinar las caractersticas de shell que permiten a nuestros programas para tener acceso a
los contenidos de la lnea de comandos.
#! / Bin / bash
# Posit-param: secuencia de comandos para ver los parmetros de
lnea de comandos
echo "\ $ 0
=$0\$1
=$1\$2
=$2\$3
=$3\$4
=$4\$5
=$5\$6
=$6\$7
=$7\$8
=$8\$9
=$9
Un guin muy simple que muestra los valores de las variables $ 0- $ 9. Cuando se ejecuta sin
argumentos de lnea de comandos:
[Me @ linuxbox ~] $ posit-param $ 0
= / home / me / bin / posit-param
436
#! / Bin / bash
# Posit-param: secuencia de comandos para ver los parmetros de
lnea de comandos se hacen eco "
437
32 - Parmetros
posicionales
Nmero de argumentos: $ #
\$0=$0
\$1=$1
\$2=$2
\$3=$3
\$4=$4
\$5=$5
\$6=$6
\$7=$7
\$8=$8
\$9=$9
El
resultado:
[Me @ linuxbox ~] $ posit-param a b c d
Nmero de argumentos: 4
$ 0 = / home / me / bin / posit-param
$ 1 = un
$2=b
$3=c
$4=d
$5=
$6=
$7=
$8=
$9=
438
#! / Bin / bash
# Posit-param2: script para mostrar cuentan todos los
argumentos = 1
mientras que [[$ # -gt 0]]; hacer
echo "El argumento $ count = $ 1"
count = $ ((count + 1)) cambio
hecho
Aplicaciones sencillas
Incluso sin cambio, es posible escribir aplicaciones tiles que utilizan parmetros posicionales.
A modo de ejemplo, he aqu un programa de informacin de archivos simple:
439
#! / Bin / bash
# File_info: programa de informacin de archivos simple
Progname = $ (basename $ 0)
si [[-e $ 1]]; entonces
echo -e "\ narchivo Tipo:"
presentar 1 dlar
echo -e "\ narchivo Estado:"
stat $ 1
ms
echo "$ progname: uso: $ file progname"> & 2 exit 1 fi
- Parmetros posicionales
32
Este programa muestra el tipo de archivo (determinado por el comando file) y el estado del
archivo (desde el comando stat) de un archivo especificado. Una caracterstica interesante de
este programa es la variable progname. Se le da el valor que resulta de la orden basename $ 0.
El comando basename elimina la porcin delantera de una ruta de acceso, dejando slo el
nombre de la base de un archivo. En nuestro ejemplo, basename elimina la parte principal de
file_info () {
# File_info: funcin para mostrar la informacin del archivo
si [[-e $ 1]]; entonces
echo -e "\ narchivo Tipo:"
presentar 1 dlar
echo -e "\ narchivo Estado:"
stat $ 1
ms
echo "$ FUNCNAME: uso: $ file FUNCNAME"> & 2
retorno 1
la ruta de acceso que figura en el parmetro $ 0, la ruta completa de nuestro programa de
ejemplo. Este valor es til cuando la construccin de los mensajes tales como el mensaje de uso
al final del programa. Por la codificacin de esta manera, la secuencia de comandos puede
cambiar el nombre y el mensaje se ajusta automticamente a contener el nombre del
programa.
440
fi
Cmo acceder a la lnea de comandos
Ahora bien, si un script que incorpora la funcin de shell file_info llama a la funcin con un
argumento de nombre de archivo, el argumento se pasa a la funcin.
Con esta capacidad, podemos escribir muchas funciones de shell tiles que no slo se pueden
usar en los scripts, pero tambin dentro del archivo .bashrc.
Observe que la variable progname fue cambiado a la FUNCNAME variable de shell. La
cscara se actualiza automticamente esta variable para realizar un seguimiento de la funcin
de shell actualmente ejecutada. Tenga en cuenta que $ 0 siempre contiene el nombre de ruta
completo del primer punto de la lnea de comandos (es decir, el nombre del programa) y no
contiene el nombre de la funcin de shell como podramos esperar.
$@
Descripcin
Se expande en la lista de parmetros posicionales, empezando por 1.
Cuando entre comillas dobles, se expande en una cadena entre comillas
dobles que contiene todos los parmetros de posicin, cada uno
separado por el primer carcter de la variable de shell IFS (por defecto
un carcter de espacio) .
Se expande en la lista de parmetros posicionales, empezando por 1.
Cuando entre comillas dobles, se expande cada parmetro de posicin
en una palabra separada entre comillas dobles.
441
32 - Parmetros
posicionales
#! / 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" "
echo -e "\ N" "
echo -e "\ N"
echo -e "\ N"
'$ *:';
print_params $ *
1 "$ *": ' ; print_params "$ *
1$ @: ';
print_params $ @
1"$ @": ' ; print_params "$ @
pass_params
"Palabr "palabra
a"
s
con espacios "
En este programa ms bien complicado, creamos dos argumentos: "la palabra" y "palabras con
espacios", y pasamos a la funcin pass_params. Esa funcin, a su vez, los pasa a la funcin
print_params, utilizando cada uno de los cuatro mtodos disponibles con los parmetros
especiales $! y $ @. Cuando se ejecuta, el script revela las diferencias:
442
-i] "
443
32 - Parmetros posicionales
filename =
mientras que [[-n $ ]]; hacer
1 caso $ 1 de
-f | --file)
-i | --interactive)
-h | --help)
*)
esac
cambio
hecho
cambio
archivo = $ 1
;;
interactive = 1
;;
uso
Salida
;;
uso> & 2 salida 1
;;
En primer lugar, aadimos una funcin de shell llamado uso para mostrar un mensaje cuando
la opcin de ayuda se invoca o una opcin desconocida se intenta.
A continuacin, empezamos el bucle de procesamiento. Este bucle contina mientras el
parmetro posicional $ 1 no est vaca. En la parte inferior del bucle, tenemos un comando de
desplazamiento para avanzar los parmetros posicionales para asegurar que el bucle
finalmente terminar.
Modo interactivo #
si [[-n $ interactivo]]; a continuacin,
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
Dentro del bucle, tenemos una declaracin de caso que examina el parmetro actual de
posicin para ver si coincide con alguna de las opciones soportadas. Si se encuentra un
parmetro con el apoyo, de actuar sobre l. Si no, se muestra el mensaje de uso y el guin
termina con un error.
El parmetro -f se maneja de una manera interesante. Cuando se detecta, que causa un cambio
adicional que se produzca, lo que hace avanzar el parmetro posicional $ 1 a el argumento de
nombre de archivo suministrado a la opcin -f.
A continuacin aadimos el cdigo para implementar el modo interactivo:
444
Si la variable interactiva no est vaco, se inicia un bucle sin fin, que contiene el smbolo del
cdigo de nombre de archivo y la posterior administracin de archivos existente. Si ya existe
el 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 se
ejecuta para terminar el bucle. Observe cmo la declaracin de caso slo detecta si el usuario
opta por sobrescribir o dejar de fumar. Cualquier otra opcin hace que el bucle de continuar y
pide al usuario nuevo.
Con el fin de implementar la funcin de archivo de salida, primero debemos convertir el
cdigo de la pgina-escritura existente en una funcin de shell, por razones que se aclararn
en un momento:
445
32 - Parmetros posicionales
si toque $ archivo && [[-f $ archivo]];
entonces
write_html_page> $ archivo
ms
echo "$ progname: No se puede escribir el archivo de salida 1 $ Archivo '"> & 2
ms
fi
fi
escribir la pgina html
Resumiendo
Con la incorporacin de parmetros de posicin, ahora podemos escribir scripts bastante
funcionales. Para tareas simples, repetitivas, parmetros posicionales permiten escribir
funciones de shell muy tiles que se pueden colocar en el archivo .bashrc del usuario.
Nuestro programa sys_info_page ha crecido en complejidad y sofisticacin. Aqu est una
lista completa, con los cambios ms recientes destacan:
446
Resumiendo
}
report_disk_space () {cat << - _EOF_
<H2> La utilizacin de espacio en disco </ h2>
<PRE> $ (df -h) </ PRE>
_EOF_
retorno
}
report_home_space () {
si [[$ (-u id) -eq 0]]; entonces cat << _EOF_
<H2> Inicio Utilizacin del Espacio (Todos los
usuarios) </ h2> <PRE> $ (du -sh / home / *) </ PRE>
_EOF_
ms
cat << - _EOF_
<H2> Inicio Utilizacin del Espacio ($ USER) </ h2>
<PRE> $ (du -sh $ HOME) </ PRE>
_EOF_
fi
retorno
}
el uso de () {
echo "$ progname: uso: SPROGNAME [-f archivo | -i]" retorno
}
write_html_page () {cat << - _EOF_
<HTML>
<HEAD>
<TITLE> $ TTULO </ TITLE>
</ HEAD>
<BODY>
<H1> $ TTULO </ H1>
<P> $ TIMESTAMP </ P>
$ (Report_uptime)
$ (Report_disk_space)
$ (Report_home_space)
</ BODY>
</ HTML>
_EOF_
retorno
}
447
32 - Parmetros
posicionales
= interactivos
filename =
mientras que [[-n $ 1]]; hace
caso $ 1
-f | --file)
-i | --interactive) -h |
--help)
*)
hecho
cambio
archivo = $ 1
;;
interactive = 1
;;
uso
Salida
;;
uso> & 2 salida 1
;;
esac
cambi
o
# modo interactivo
si [[-n $ interactivo]]; a continuacin,
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 ;;
Q | q) echo "Programa terminado."
Salida
;;
*) Continuar
;;
esac
fi
hecho
fi
# pgina html de salida
si [[-n $ archivo]]; entonces
si toque $ archivo && [[-f $ archivo]]; entonces write_html_page> $ archivo
ms
echo "$ progname: No se puede escribir el archivo '$ nombre'"> &
2 exit 1 fi
ms
448
write_html_page
fi
Resumiendo
No hemos terminado todava. Todava hay ms cosas que podemos hacer y las mejoras que
podemos hacer.
Lectura adicional
El golpe de Hackers Wiki tiene un buen artculo sobre los parmetros posicionales:
http://wiki.bash-hackers.org/scripting/posparams
El Manual de Referencia Bash tiene un artculo sobre los parmetros especiales,
incluyendo $ * y $ @:
http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters
Adems de las tcnicas discutidas en este captulo, golpe incluye una orden interna
llamada getopts, que tambin se puede utilizar para los argumentos de lnea de
comandos de proceso. Se describe en la seccin RDENES INTERNAS DEL SHELL
de la pgina de manual de bash y en The Bash Hackers Wiki:
http://wiki.bash-hackers.org/howto/getopts tutorial
449
33
33
En este captulo final sobre el control de flujo, vamos a ver otra de las construcciones de bucles
de la concha. El bucle for difiere del tiempo y hasta bucles en que proporciona un medio de
secuencias de procesamiento durante un bucle. Esto resulta ser muy til cuando se programa.
De acuerdo con ello, el bucle for es una construccin muy popular en secuencias de comandos
bash.
Un bucle for se implementa, como es natural, con la de mando. En las versiones modernas de
la fiesta, para est disponible en dos formas.
hecho
[Me @ linuxbox ~] $ for i in A B C D; hacer eco $ i; hecho
La
B
C
D
Donde variable es el nombre de una variable que se incrementar durante la ejecucin del
bucle, palabras es una lista opcional de artculos que sern secuencialmente asignados a la
variable, y los comandos son los comandos que se van a ejecutar en cada iteracin del bucle.
El comando es til para la lnea de comandos. Podemos demostrar fcilmente cmo funciona:
En este ejemplo, se da por una lista de cuatro palabras: "A", "B", "C" y "D". Con una lista de
cuatro palabras, el bucle se ejecuta cuatro veces. Cada vez que se ejecuta el bucle, una palabra
se asigna a la variable i. Dentro del bucle, tenemos un comando echo que muestra el valor de i
para mostrar la asignacin. Como con el tiempo y hasta bucles, la palabra clave hecho cierra el
bucle.
450
451
#! / Bin / bash
# Ms larga word2: encontrar cadena ms larga en un
archivo para i; hacer
si [[-r $ i]]; entonces
max_word =
max_len = 0
para j en $ (cadenas $ i); hacer len = $ (echo
$ j | wc -c) si ((len> max_len)); entonces
max_len = $ len max_word = $ j fi
hecho
echo "$ i: '$ max_word' ($ max_len caracteres)" fi
hecho
33 - Control de flujo: Con Looping para
En este ejemplo, se busca la cadena ms larga se encuentra dentro de un archivo. Cuando se
les da uno o ms nombres de archivo en la lnea de comandos, este programa utiliza el
programa de cadenas (que se incluye en el paquete binutils de GNU) para generar una lista de
lectura de texto "palabras" en cada archivo. El bucle for procesa cada palabra a su vez y
determina si la palabra actual es el ms largo encontrado hasta el momento. Cuando el bucle
termina, aparece la palabra ms larga.
Si la parte opcional en palabras del comando para se omite, por defecto es el procesamiento de
los parmetros posicionales. Vamos a modificar nuestro guin de ms larga palabra de
Por qu yo?
Usted puede haber notado que la variable i fue elegido para cada uno de los ejemplos
anteriores de bucle. Por qu? No hay ninguna razn especfica de hecho, adems de
la tradicin. La variable utilizada por cualquier variable puede ser vlida, pero yo es
el ms comn, seguido por j y k.
utilizar este mtodo:
Como podemos ver, hemos cambiado el bucle ms externo a utilizar en lugar de tiempo. Al
omitir la lista de palabras en el para el mando, los parmetros posicionales se utilizan en su
lugar. Dentro del bucle, las instancias anteriores de la variable i se han cambiado a la variable
j. El uso de cambio tambin ha sido eliminado.
452
La base de esta tradicin viene del lenguaje de programacin Fortran. En Fortran, las
variables no declaradas que comienzan con las letras I, J, K, L y M se escriben
automticamente como enteros, mientras que las variables que comienzan con
cualquier otra carta se escriben como reales (nmeros con fracciones decimales). Este
comportamiento llev a los programadores utilizar las variables I, J y K para las
variables de bucle, ya que era menos trabajo para utilizarlas cuando se necesitaba una
variable temporal (como variables de bucle a menudo son).
Tambin llev a la siguiente ocurrencia basada en Fortran:
"Dios es real, a menos declarado entero."
por: Tradicional Forma Shell
#! / Bin / bash
# Simple_counter: demostracin de estilo C de comando
por ((i = 0; i <5; i = i + 1)); hacer echo $ i
hecho
(( expresin3))
hecho
expressionl se utiliza para inicializar condiciones para el bucle, expresin2 se utiliza para
determinar cuando se termina el bucle, y expression3 se lleva a cabo al final de cada iteracin
del bucle.
Aqu es una aplicacin tpica:
453
En este ejemplo, expressionl inicializa la variable i con el valor de cero, expression2 permite
que el bucle para continuar siempre y cuando el valor de i se mantiene a menos de 5, y
expression3 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 numrica.
Vamos a ver varias aplicaciones para esto en los dos captulos siguientes.
Resumiendo
Con nuestro conocimiento de la para el mando, ahora vamos a aplicar las mejoras finales a
nuestro script sys_info_page. En la actualidad, la funcin report_home_space se parece a esto:
report_home_space () {
si [[$ (-u id) -eq 0]]; entonces cat << _EOF_
<H2> Inicio Utilizacin del Espacio (Todos los
usuarios) </ h2> <PRE> $ (du -sh / home / *) </ PRE>
_EOF_
ms
cat << - _EOF_
<H2> Inicio Utilizacin del Espacio ($ USER) </ h2>
<PRE> $ (du -sh $ HOME) </ PRE>
_EOF_
fi
retorno
}
A continuacin, vamos a reescribir a proporcionar ms detalles para el directorio home de
cada usuario, e incluyen el nmero total de archivos y subdirectorios en cada uno:
report_home_space () {
454
hecho
retorno
Resumiendo
Esta reescritura se aplica buena parte de lo que hemos aprendido hasta ahora. Todava prueba
para el superusuario, pero en lugar de realizar el conjunto completo de acciones como parte
del caso, establecemos algunas variables utilizadas ms tarde en un bucle for. Hemos aadido
varias variables locales a la funcin y hecho uso de printf para dar formato a algunos de la
salida.
Lectura adicional
La Gua avanzada Bash-Scripting tiene un captulo sobre bucles, con una variedad de
ejemplos que utilizan para:
http://tldp.org/LDP/abs/html/loops1.html
455
34 - Cadenas y nmeros
34 - Cadenas y nmeros
Los programas de ordenador son todos acerca de cmo trabajar con los datos. En los captulos
anteriores, nos hemos centrado en el procesamiento de datos a nivel de archivo. Sin embargo,
muchos problemas de programacin tienen que ser resueltos usando las unidades ms
pequeas de datos, tales como cadenas y nmeros.
En este captulo, vamos a ver varias caractersticas de concha que se utilizan para manipular
cadenas y nmeros. El shell proporciona una variedad de expansiones de parmetros que
realizan operaciones de cadena. Adems de la expansin aritmtica (que hemos tratado en el
captulo 7), hay un programa de lnea de comandos comn llamado aC, que realiza ms alto
nivel de matemticas.
Expansin Parmetro
A pesar de la expansin de parmetro se acerc en el captulo 7, que no cubrimos en detalle
porque la mayora de las expansiones de los parmetros se utilizan en secuencias de
comandos en lugar de en la lnea de comandos. Ya hemos trabajado con algunas formas de
expansin de parmetros; por ejemplo, pagar las variables. El shell proporciona muchos ms.
Parmetros bsicos
La forma ms simple de la expansin de parmetro se refleja en el uso ordinario de variables.
Por ejemplo:
$A
cuando se expande, se convierte en lo que la variable a contiene. Parmetros simples tambin
pueden estar rodeadas por llaves:
$ {A}
Esto no tiene ningn efecto sobre la expansin, pero es necesario si la variable se encuentra
[Me @ linuxbox ~] $ a = "foo" [me @
linuxbox ~] $ echo "$ un_fichero"
junto a otro texto, que puede confundir a la cscara. En este ejemplo, se intenta crear un
nombre de archivo aadiendo la cadena "_FILE" al contenido de la variable a.
456
Expansin Parmetro
Si llevamos a cabo esta secuencia, el resultado ser nada, porque el shell intentar expandir
una variable llamada un_fichero en lugar de una. Este problema puede ser resuelto mediante
la adicin de llaves:
Tambin hemos visto que los parmetros posicionales mayores de 9 se puede acceder por los
[Me @ linuxbox ~] $ echo "$ {a} _FILE"
foo_file
alrededores el nmero de aparatos de ortodoncia. Por ejemplo, para acceder al parmetro de
posicin undcima, podemos hacer esto:
$ {11}
34 - cadenas y nmeros
valor predeterminado si unset [me @ linuxbox ~] $ echo $ foo valor
predeterminado si unset [me @ linuxbox ~] $ foo = bar
[Me @ linuxbox ~] $ echo $ {foo: = "valor por defecto si unset"}
bar
[Me @ linuxbox ~] $ echo $ foo bar
$ {Parmetro: + palabra}
Si el parmetro no est definido o est vaco, la expansin se traduce en nada. Si el parmetro
no est vaca, el valor de la palabra se sustituye por parmetro; Sin embargo, no se cambia el
valor del parmetro.
458
Expansin Parmetro
Operaciones de Cuerda
Hay 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 rutas
de acceso.
$ {Parmetro} #
[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.
se expande en la longitud de la cadena contenida por el parmetro. Normalmente, el
parmetro es una cadena; sin embargo, si el parmetro es o bien @ o *, entonces los resultados
de expansin en el nmero de parmetros posicionales.
$ {Parmetro: offset}
$ {Parmetro: desplazamiento: longitud}
[Me @ linuxbox ~] $ foo = "Esta cadena es larga."
[Me @ linuxbox ~] $ echo $ {foo: 5} cadena es larga.
Estas expansiones se usan para extraer una porcin de la cadena contenida en el parmetro. La
extraccin comienza en caracteres desplazamiento desde el principio de la cadena y contina
hasta el final de la cadena, a menos que se especifica la longitud.
459
H
ol
a
O
O
460
Expansin Parmetro
$ {Parmetro / patrn / cadena}
expe
dient
e
$ {Parmetro // patrn / cadena}
$ {Parmetro / # patrn / cadena}
$ {Parmetro / patrn% / cadena}
Esta expansin lleva a cabo una bsqueda y reemplazo en el contenido del parmetro. Si el
texto se encuentra el modelo a juego de comodines, se reemplaza con el contenido de la
cadena. En la forma normal, slo se reemplaza la primera ocurrencia del patrn. En la //
forma, se reemplazan todas las ocurrencias. El / # forma requiere que la coincidencia se
produce al principio de la cadena, y la forma /% requiere el partido que se produzca al final
de la cadena. / Cadena puede ser omitido, lo que hace que el texto que coincide con el patrn
que desea eliminar.
[Me @ linuxbox
[Me @ linuxbox
jpg.jpg
[Me @ linuxbox
jpg-jpg
[Me @ linuxbox
jpg-JPG
[Me @ linuxbox
Jpg.jpg
#! / Bin / bash
~] $ Foo = jpg.jpg
~] $ Echo $ {foo / JPG / jpg}
~] $ Echo $ {foo // JPG / jpg}
~] $ Echo $ {foo / # JPG / jpg}
~] $ Echo $ {foo /% JPG / jpg}
461
Expansin de parmetro es una buena cosa para saber. Las expansiones de manipulacin de
cadenas 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 de
programas externos. Como ejemplo, vamos a modificar el programa de ms larga palabra se
discuti en el captulo anterior de utilizar la expansin de parmetro $ {#} j en lugar de la
sustitucin de comandos $ (echo $ j | wc -c) y su subcapa resultante, al igual que :
34 - cadenas y nmeros
max_len = $ len
max_word = $ j
hecho fi
eco "$ Yo: '$ Max_word' ($ max_len caracteres) "
fi
cambi
o
hecho
A continuacin, vamos a comparar la eficiencia de las dos versiones con el comando de
tiempo:
[Me @ linuxbox ~] $
tiempo
listadir-USR-bin.txt:
caracteres)
0m3.618s reales
0m1.544s usuario
0m1.768s sys
[Me @ linuxbox ~] $
tiempo
listadir-USR-bin.txt:
caracteres)
(38
(38
La versin original de la secuencia de comandos toma 3,618 segundos para escanear el archivo
de texto, mientras que la nueva versin, con la expansin de parmetro, toma slo 0,06
segundos, una mejora muy significativa.
Caso Conversin
Las versiones recientes de fiesta tienen soporte para la conversin superior / minsculas de
las cadenas. Bash tiene cuatro expansiones de parmetros y dos opciones del comando declare
que la apoyen.
Entonces, qu es la conversin caso bueno para? Aparte del valor esttico obvio, tiene un
papel importante en la programacin. 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 que
queremos buscar en una base de datos. Es posible que el usuario introduzca el valor en letras
maysculas o minsculas, o una combinacin de ambos. Desde luego, no queremos poblar
nuestra base de datos con toda posible permutacin de grafas maysculas y minsculas. Qu
hacer?
Un enfoque comn a este problema es normalizar la entrada del usuario. Es decir, convertirlo
en un formulario estandarizado antes de intentar la base de datos de consulta. Podemos hacer
esto por con- 462
#! / Bin / bash
# Ul-declarar: demostrar la conversin de caso a travs de declarar
declarar -u superior declarar -l menor
si [[$ 1]]; entonces superiores = "$ 1" = ms bajos "$ 1" echo $ echo $
superior inferior fi
_____________________________________________________________ Expansin Parmetro
vertir todos los personajes de la entrada del usuario ya sea inferior o maysculas y asegurarse
de que las entradas de base de datos se normalizaron la misma manera.
El comando DECLARE puede usarse para normalizar las cuerdas a cualquiera de maysculas
o minsculas. Usando declarar, podemos forzar una variable para contener siempre el
formato deseado sin importar lo que se le asigna a la misma:
[Me @ linuxbox ~] $ ul-declaro aBc
Abecedario
abecedario
En el guin anterior, declaramos que utilizamos para crear dos variables, superior e inferior.
Asignamos el valor del argumento de la primera lnea de comandos (parmetro de posicin 1)
a cada una de las variables y luego mostrarlos en la pantalla:
Como podemos ver, el argumento de lnea de comandos ("ABC") se ha
normalizado. Hay cuatro expansiones de parmetros que realizan la conversin
superior / minsculas:
Tabla 34-1: Caso de conversin de parmetros Expansiones
Formato
Resultado
$ {Parmetro,,}
$ {Parmetro,}
$ {} ParameterAA
$ {} ParameterA
463
34 - cadenas y nmeros
carcter en maysculas (maysculas).
Aqu es un script que demuestra estas expansiones:
#! / Bin /
bash
# Ul-param - demostrar conversin caso a travs de la expansin de parmetro
si [[$ 1]]; entonces
echo $ {1} ,,
{echo $ 1,} echo $ {1AA}
echo $ {1A} fi
464
Bases Nmero
De vuelta en el captulo 9, nos dieron un vistazo a los nmeros octales (base 8) y hexadecimal
(base 16). En expresiones aritmticas, el shell soporta constantes enteras en cualquier base.
Tabla 34-2: Especificacin Diferentes Bases Nmero
Notacin
nmero
Descripcin
Onumber
Oxnumber
La notacin hexadecimal
# Nmero de base
nmero es en la base de
Algunos ejemplos:
[Me @ linuxbox ~
] $ Echo $ ((0xff))
255
[Me @ linuxbox ~ ] Echo $ $ ((2 # 11111111))
255
En los ejemplos anteriores, imprimimos el valor de la FF hexadecimal nmero (el nmero de
dos dgitos ms grande) y el mayor de ocho dgitos binarios (base 2) nmeros.
Operadores unarios
Hay dos operadores unarios, + y -, que se utilizan para indicar si un nmero es positivo o
negativo, respectivamente. Por ejemplo, -5.
Aritmtica simple
Los operadores aritmticos comunes se listan en la siguiente tabla:
Tabla 34-3: Operadores aritmticos
Operador
+
Descripcin
Adicin
Sustraccin
465
34 - cadenas y nmeros
*
Multiplicacin
/
**
La divisin entera
Mdulo (resto)
Exponenciacin
La mayora de estos son fciles de entender, pero la divisin entera y mdulo requieren ms
discusin.
Desde la aritmtica de la cscara slo opera en nmeros enteros, los resultados de la divisin
son siempre nmeros enteros:
#! / Bin / bash
# Modulo: demostrar el operador de mdulo
por ((i = 0; i <= 20; i = i + 1)); hacer resto = $ ((i% 5)) if
((resto == 0)); entonces printf "<% d>" $ i
ms
printf "% d" $ i fi
hecho
printf "\ n"
466
Asignacin
[Me @ linuxbox ~] $ mdulo
<0> 1 2 3 4 <5> 6 7 8 9 <10> 11 12 13 14 <15> 16 17 18 19 <20>
A pesar de que sus usos pueden no ser aparentes inmediatamente, expresiones aritmticas
pueden realizar la asignacin. Hemos realizado de asignacin de muchas veces, aunque en un
contexto diferente. Cada vez que damos una variable un valor, estamos llevando a cabo la
[Me @ linuxbox ~] $ foo =
[me @ linuxbox ~] $
echo $ foo
[Me @ linuxbox ~] $
"Es cierto.";
fi
if ((foo = 5)); a continuacin, echo
es cierto. [Me @
linuxbox ~] $ 5
echo $ foo
asignacin. Tambin podemos hacerlo dentro de las expresiones aritmticas:
En el ejemplo anterior, primero asignamos un valor vaco a la variable foo y verificamos que s
es vaco. A continuacin, realizamos un si con el comando compuesto ((foo = 5)). Este proceso
hace dos cosas interesantes: 1) se asigna el valor de 5 a la variable foo, y 2) se evala como
cierto porque foo se le asign un valor distinto de cero.
Nota: Es importante recordar el significado exacto de los = en la expresin anterior. Un
solo = realiza la asignacin. foo = 5 dice "hacer foo igual a 5", mientras == evala la
equivalencia. foo == 5 dice "hace foo igual a 5?" Esto puede ser muy confuso, porque el
comando de prueba acepta un solo = equivalencia de cadena. Esta es otra razn para
utilizar los modernos [[]] y (()) comandos ms compuestos en lugar de la prueba.
Adems de los =, la cscara tambin proporciona anotaciones que llevan a cabo algunas tareas
muy tiles:
Tabla 34-4: Operadores de Asignacin
Notacin
Descripcin
467
34 - cadenas y nmeros
parmetro = valor
parmetro + = Valor
parmetro - = valor
* parmetro = valor
parmetro / valor =
parmetro% = valor
parmetro++
parmetro++ Parmetro
--parameter
#! / Bin / bash
# Modulo2: demostrar que el operador de mdulo
por ((i = 0; i <= 20; ++ i)); hacer si (((i% 5) == 0));
entonces printf "<% d>" $ i
ms
printf "% d" $ i fi
hecho
printf "\ n"
Operaciones de bits
Una clase de operadores manipula los nmeros de una manera inusual. Estos operadores
trabajan en el nivel de bit. Se utilizan para ciertos tipos de tareas de bajo nivel, a menudo con
el establecimiento o la lectura de bits banderas.
Tabla 34-5: Operadores Bit
Operador
~
469
Descripcin
Negacin bit a bit. Negar todos los bits de un nmero.
34 - cadenas y nmeros
<<
>>
Y
| OR bit a bit. Realizar una operacin OR en todos los bits en dos nmeros.
La
Lgica
Como descubrimos en el captulo 27, el (()) comando compuesto es compatible con una
variedad de operadores de comparacin. Hay unos pocos ms que se puede utilizar para
evaluar la lgica. Aqu est la lista completa:
Tabla 34-6: Operadores de comparacin
Operador
<=
Descripcin
Menor o igual a
>=
<
Menos que
>
Ms que
470
Igual a
!=
No es igual a
&&
Y lgico
Illinois
expr1? expr2: Expr3
OR lgico
Comparacin (ternario). Si exprl expresin se evala a ser
(aritmtica verdadera) entonces expr2-cero no, otra cosa
expr3.
471
34 - cadenas y nmeros____________________
Cuando intento, golpe declarar un error:
Este problema puede ser mitigado por que rodea la expresin de asignacin con parntesis:
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 aritmtica) y continuamos el bucle hasta que se
convierte en no-cero. Dentro del bucle, se calcula el cuadrado y el cubo de la variable de
contador a. Al final del bucle, se evala el valor de la variable de contador. Si es menos de 10
(el nmero mximo de iteraciones), se incrementa en uno, de lo contrario la variable
terminado se le da el valor de uno, haciendo que termin aritmticamente verdadero,
finalizando de este modo el bucle. Ejecucin del script da este resultado:
472
473
Usando bc
Si ahorramos el guin bc anteriormente como foo.bc, podemos
ejecutar de esta manera:
[Me @ linuxbox ~] $ bc bc foo.bc 06/01/94
Derechos de autor 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software
Foundation, Inc.
Este es software libre con ABSOLUTAMENTE NINGUNA GARANTA.
Para ms detalles escriba 'garanta'.
4
Si miramos con atencin, podemos ver el resultado en la parte inferior, despus del mensaje
de los derechos de autor. Este mensaje se puede suprimir con la opcin -q (tranquilo).
bc tambin se puede utilizar de forma interactiva:
[Me @ linuxbox ~] $ bc -q 2 +
24
dejar de
La capacidad de tomar la entrada estndar significa que podemos utilizar aqu los
documentos, aqu, cuerdas y tubos para pasar los scripts. Este es un ejemplo de cadena aqu:
[Me @ linuxbox ~] $ bc <<< "2 + 2" 4
474
Un script de ejemplo
Como un ejemplo del mundo real, vamos a construir un script que realiza un clculo comn,
los pagos mensuales del prstamo. En la secuencia de comandos a continuacin, se utiliza un
documento aqu para pasar un script para bc:
#! / Bin / bash
# Prstamo-calc: script para calcular los pagos mensuales del prstamo
Progname = $ (basename $ 0)
el uso de () {
cat << - EOF
De uso: $ progname MESES principal inters Dnde:
475
1,270.7222490000
34 - cadenas y nmeros
En este ejemplo se calcula el pago mensual de un prstamo de $ 135.000 a 7,75% TAE durante
180 meses (15 aos). Ntese la precisin de la respuesta. Esto se determina por el valor dado a
la variable especial escala en la secuencia de comandos bc. Una descripcin completa del
lenguaje de scripting bc es proporcionado por la pgina man bc. Mientras que su notacin
matemtica es ligeramente diferente a la de la concha (bc se asemeja ms a C), la mayor parte
de ella resultar muy familiar, con base en lo que hemos aprendido hasta ahora.
Resumiendo
En este captulo, hemos aprendido acerca de muchas de las pequeas cosas que pueden ser
utilizados para obtener el "verdadero trabajo" realizado en los scripts. A medida que nuestra
experiencia con scripting crece, la capacidad de manipular eficazmente cadenas y nmeros le
ser muy valiosa. Nuestra escritura de prstamo-calc demuestra que incluso los guiones
simples se pueden crear para hacer algunas cosas realmente tiles.
Crdito extra
Mientras que la funcionalidad bsica de la escritura de prstamo-Calc est en su lugar, el
guin est muy lejos de ser completa. Para el crdito adicional, trate de mejorar la escritura de
prstamo-calc con las siguientes caractersticas:
Lectura adicional
476
El golpe de Hackers Wiki tiene una buena discusin sobre la expansin de parmetro:
http://wiki.bash-hackers.org/syntax/pe
_______________________________________________________________ Lectura
adicional
as como una descripcin de la frmula para el clculo de los pagos de prstamos
utilizados en nuestro script prstamo-calc:
calculadora http://en.wikipedia.org/wiki/Amortization
477
35
35
- Matrices
- Matrices
En el ltimo captulo, nos fijamos en cmo la cscara puede manipular cadenas y nmeros.
Los tipos de datos que hemos visto hasta ahora son conocidos en los crculos informticos
como variables escalares; es decir, las variables que contienen un solo valor.
En este captulo, vamos a ver otro tipo de estructura de datos llamada una matriz, que
contiene varios valores. Las matrices son una caracterstica de casi todos los lenguajes de
programacin. La cscara de los apoya, tambin, aunque de manera bastante limitada. Aun
as, puede ser muy til para resolver problemas de programacin.
Creacin de un array
Variables de matriz se nombran igual que otras variables bash, y se crean automticamente
cuando se accede a ellos. He aqu un ejemplo:
478
[Me @ linuxbox ~] $ das = ([0] = Sol [1] = Lunes [2] = mar [3] = Wed [4] = jue
Tambin es posible asignar valores a un elemento especfico mediante la especificacin de un
subndice para cada valor:
479
480
481
[Me @ linuxbox ~] $ animales = ("un perro" "un gato" "un pez") [me @
linuxbox ~] $ for i in $ {animales [*]}; hacer eco $ i; hecho
un
perro
un
gato
un
pescado
[Me @ linuxbox ~] $ for i in $ {animales [@]}; hacer eco $ i; hecho
un
perro
un
gato
un
pescado
[Me @ linuxbox ~] $ for i in "$ {animales [*]}"; hacer eco $ i; hecho
un perro un gato un pescado
[Me @ linuxbox ~] $ for i in "$ {animales [@]}"; hacer eco $ i; hecho
un
perro
un
gato
un
pesca
do
35 - Matrices
Operaciones de matriz
Hay muchas operaciones de matriz comn. Cosas tales como la supresin de las matrices, la
determinacin de su tamao, la clasificacin, etc. tienen muchas aplicaciones en secuencias de
comandos.
482
# Nmero de elementos de la
# Longitud del elemento 100
Operaciones de matriz
Creamos un array y asignamos la cadena "foo" para el elemento 100. A continuacin, se utiliza
la expansin de parmetro para examinar la longitud de la matriz, usando la notacin @. Por
ltimo, nos fijamos en la longitud del elemento 100, que contiene la cadena "foo". Es
interesante notar que mientras que asignamos nuestra cadena de elemento 100, golpe slo
informa de un elemento de la matriz. Esto difiere del comportamiento de algunas otras
lenguas en las que los elementos no utilizados de la matriz (elementos 0-99) se inicializan con
valores vacos y contados.
35 - Matrices
"
H
O
O
+
II
P.
C
D
-h
Ordenacin de un conjunto
As como con hojas de clculo, a menudo es necesario para ordenar los valores en una
columna de datos. La cscara no tiene forma directa de hacer esto, pero no es difcil de hacer
con un poco de codificacin:
#! / Bin / bash
# Matriz de tipo: Ordenar una matriz
a = (f e d c b a)
[Me
linuxbox
~] $ array
echo @
"matriz
original
: $ {Atipo
[@]} "
original
matriz:
fedcba
a_sorted = ($ (for i in
"$ matriz
{A [@]}"; hacer eco $ i; hecho | sort))
ordenada:
abcdef
echo "matriz
ordenada:
$ {A_sorted [@]} "
Cuando se ejecuta, el script produce esto:
El script funciona copiando el contenido de la matriz original (a) en una segunda matriz
(a_sorted) con una pieza difcil de sustitucin de comandos. Esta tcnica bsica puede ser
utilizado para realizar muchos tipos de operaciones en la matriz cambiando el diseo de la
[Me @ linuxbox ~] $ foo = (abcdef) [me @
linuxbox ~] $ echo $ {foo [@]} abcdef
tubera.
Operaciones de
matriz
[Me @ linuxbox ~] $ foo unset [me @
linuxbox ~] $ echo $ {foo [@]}
[Me @ linuxbox ~] $
unset tambin puede ser utilizado para eliminar los
elementos de matriz individuales:
[Me @ linuxbox ~] $ foo = (abcdef) [me @
linuxbox ~] $ echo $ {foo [@]} abcdef
[Me @ linuxbox ~] $ unset 'foo [2]' [me @
linuxbox ~] $ echo $ {foo [@]} abdef
Cualquier referencia a una variable de matriz sin un subndice se refiere al elemento cero de
la matriz:
[Me @ linuxbox ~] $ foo = (abcdef) [me @
linuxbox ~] $ echo $ {foo [@]} abcdef
[Me @ linuxbox ~] $ foo = A [me @ linuxbox
~] $ echo $ {foo [@]}
ABCDEF
Resumiendo
Si buscamos la pgina del manual de bash para la palabra "serie", nos encontramos con
muchos casos de fiesta, donde hace uso de variables de matriz. La mayora de ellos son
bastante oscura, pero pueden proporcionar utilidad ocasional en algunas circunstancias
especiales. De hecho, todo el tema de las matrices es bastante infrautilizado en la
programacin de shell, debido en gran parte al hecho de que los programas tradicionales de
shell de Unix (como sh) carecan de apoyo para las matrices. Esta falta de popularidad es
lamentable, porque las matrices son ampliamente utilizados en otros lenguajes de
programacin y proporcionan una herramienta poderosa para resolver muchos tipos de
problemas de programacin.
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 clculo de los subndices de matriz.
Lectura adicional
Un par de artculos de la Wikipedia acerca de las estructuras de datos que se encuentran
en este captulo: http://en.wikipedia.org/wiki/Scalar (informtica)
http://en.wikipedia.org/wiki/Associative matriz
486
36 - Exotica
36 - Exotica
En esto, el captulo final de nuestro viaje, vamos a ver algunas probabilidades y termina.
Aunque ciertamente hemos cubierto mucho terreno en los captulos anteriores, hay muchas
caractersticas de bash que no hemos cubierto. La mayora son bastante oscuro, y til sobre
todo para aquellos que la integracin de fiesta en una distribucin de Linux. Sin embargo, hay
unos pocos que, aunque no es de uso comn, son tiles para ciertos problemas de
programacin. Vamos a cubrir aqu.
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
raz
488
raz
raz
raz
raz
raz
raz
Propietarios de archivos:
demonio
1 archivo (s)
raz
1394 archivo (s)
Grupo de
archivos
crontab
demonio
lpadmin
correo
mlocate
raz
sombra
ssh
tty
utmp
propietarios:
1 archivo (s)
1 archivo (s)
1 archivo (s)
4 archivo (s)
1 archivo (s)
1380 archivo (s)
2 archivo (s)
1 archivo (s)
2 archivo (s)
2 archivo (s)
Aqu est una lista (con los nmeros de lnea) de la secuencia de comandos:
1
2
3
4
5
3
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
489
#! / Bin / bash
# gama-2: Utilice matrices para anotar propietarios de archivos
declarar archivos -A file_group grupos file_owner propietarios
si
fi
36 - Exotica
eco
]}
$ {grupos [
$
{propietario
s[
# propietarios de la lista
echo "dueos de archivos:"
{For i in "$ {propietarios [@]}!"; hacer
printf "% -10s: archivo% 5d (s) \ n"
hecho} | sort
eco
27
28
29
30
31
32
33
34
35
36
37
38
39
40
]}
490
Proceso de Sustitucin
Aunque parecen similares y pueden ser utilizadas para combinar corrientes para la
redireccin, 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. Esto
significa que el medio ambiente se copia y se le dio a una nueva instancia de la cscara.
Cuando los subshell salidas, se pierde la copia del medio ambiente, por lo que los cambios
realizados en el entorno del subshell (incluyendo la asignacin de variables) se pierde
tambin. Por lo tanto, en la mayora de los casos, a menos que una secuencia de comandos
requiere una subcapa, los comandos de grupo son preferibles a las subcapas. Comandos de
grupo son tanto ms rpido y requieren menos memoria.
Vimos un ejemplo del problema de medio ambiente subshell en el captulo 28, cuando
echo "foo" | ver echo
$ RESPUESTA
descubrimos que un comando de lectura en una tubera no funciona como cabra esperar
intuitivamente. En resumen, si se construye un oleoducto como esto:
El contenido de la variable de respuesta es siempre vaco porque el comando de lectura se
ejecuta en un subshell, y su copia de la respuesta se destruye cuando el subnivel termina.
Debido a que los comandos de tuberas siempre se ejecutan en subniveles, cualquier comando
que asigna las variables se encontrar con este problema. Afortunadamente, la cscara
proporciona una forma extica de expansin llamado proceso de sustitucin que se puede
utilizar para evitar este problema.
Proceso de sustitucin se expresa de dos formas:
Para los procesos que producen la salida estndar:
<(Lista)
o, para los procesos que la entrada estndar de admisin:
> (Lista)
donde lista es una lista de comandos.
Para resolver nuestro problema con la lectura, podemos emplear la sustitucin de proceso
leer <<(echo "foo") echo $
RESPUESTA
como ste:
491
36 - Exotica
Sustitucin de procesos nos permite tratar la salida de un subnivel como un archivo ordinario
[Me @ linuxbox ~] $ echo <(echo "foo") / dev
/ fd / 63
a los efectos de la redireccin. De hecho, ya que es una forma de expansin, podemos
examinar su valor real:
Mediante el uso de eco para ver el resultado de la expansin, vemos que la salida de la
subshell est siendo prestado por un archivo llamado / dev / fd / 63.
Proceso de sustitucin se utiliza a menudo con bucles que contienen lectura. He aqu un
ejemplo de un bucle de lectura que procesa el contenido de un anuncio en el directorio creado
por un subnivel:
#! / Bin / bash
# Pro-sub: demostracin de la sustitucin de proceso
mientras que los enlaces
attr lectura
cat << - EOF
Nombre del
archivo:
Tamao:
Propietario:
Grupo:
Modificado:
Enlaces:
Atributos:
EOF
hecho <<(ls -l | cola
El bucle se ejecuta leer para cada lnea de una lista de directorios. La lista en s se produce en la
lnea final de la secuencia de comandos. Esta lnea redirecciona la salida de la sustitucin de
proceso en la entrada estndar del bucle. El comando de la cola est incluido en la tubera de
sustitucin proceso para eliminar la primera lnea de la lista, que no es necesario.
Cuando se ejecuta, el script genera una salida como esta:
[Me @ linuxbox ~] $ pro_sub | cabeza -n 20
Nombre del addresses.ldif
archivo:
Tamao:
14540
Propietario: m
Grupo:
m
Modificado: 02.04.2009 11:12
492
1
-rw-r - r--
Nombre del
archivo:
Tamao:
Propietario:
Grupo:
Modificado:
Enlaces:
Atributos:
papelera
4096
m
m
2009-07-10 7:31
2
drwxr-xr-x
Nombre del
archivo:
Tamao:
Propietario:
Grupo:
bookmarks.html
394213
m
m
Trampas
En el captulo 10, vimos cmo los programas pueden responder a las seales. Podemos
agregar esta capacidad a nuestros scripts, tambin. Aunque las secuencias de comandos que
hemos escrito hasta ahora no han necesitado esta capacidad (debido a que tienen tiempos de
ejecucin muy cortos, y no crean archivos temporales), las secuencias de comandos ms
grandes y ms complicados pueden beneficiarse de tener una rutina de manejo de seales.
Cuando diseamos un gran guin complicado, es importante tener en cuenta lo que sucede si
el usuario cierra la sesin o se apaga el ordenador mientras el script se est ejecutando.
Cuando se produce un evento de este tipo, una seal ser enviada a todos los procesos
afectados. A su vez, los programas que representan esos procesos pueden realizar acciones
para garantizar una terminacin adecuada y ordenada del programa. Digamos, por ejemplo,
que hemos escrito un script que crea un archivo temporal durante su ejecucin. En el curso de
un buen diseo, tendramos el guin elimina el archivo cuando el script termine su trabajo.
Tambin sera buena idea tener el guin borrar el archivo si se recibe una seal que indica que
el programa iba a ser terminado antes de tiempo.
Bash proporciona un mecanismo para este propsito se conoce como una trampa. Las trampas
se implementan con el apropiado nombre de orden interna, trampa. trampa utiliza la
siguiente sintaxis:
#! / Bin / bash
# Trampa-demo: manejo de demostracin simple
seal
trampa seal argumento [seal ...]
donde el argumento es una cadena que ser ledo y entendido como un comando y la seal es
la especificacin de una seal que activar la ejecucin del comando interpretado.
Aqu est un ejemplo sencillo:
493
36 - Exotica
Este script define una trampa en la que se ejecutar un comando echo cada vez que sea la
SIGINT o seal SIGTERM se recibe mientras que el script se est ejecutando. La ejecucin del
programa se ve as cuando el usuario intenta detener la secuencia de comandos pulsando
Ctrl-C:
[Me @ linuxbox ~] $
trampa-demo Iteracin 1 de 5
Iteracin 2 de 5 te estoy
ignorando. Iteracin 3 de 5 te
estoy ignorando. Iteracin 4 de 5
Iteracin 5 de 5
Como podemos ver, cada vez que el usuario intenta interrumpir el programa, el mensaje se
imprime en su lugar.
La construccin de una cadena para formar una secuencia til de comandos puede ser difcil,
por lo que es prctica comn para especificar una funcin de shell como el comando. En este
ejemplo, se especifica una funcin de shell separada para cada seal para ser manipulados:
#! / Bin / bash
# Trampa-demo2: manejo de demostracin simple
seal
exit_on_signal_SIGINT () {
echo "Guin interrumpi." 2> & 1 salida
0
}
exit_on_signal_SIGTERM () {
echo "Guin terminado." 2> & 1 salida
0
}
494
Tram
pas
for i in {1..5}; hacer
echo "$ i iteracin de 5" sueo
5
hecho
Este script tiene dos comandos trampa, uno para cada seal. Cada trampa, a su vez, especifica
una funcin de shell que se ejecuta cuando se recibe la seal en particular. Tenga en cuenta la
inclusin de un comando de salida en cada una de las funciones de manipulacin de la seal.
Sin una salida, el script continuara despus de completar la funcin.
Cuando el usuario presiona CTRL-C durante la ejecucin de este script, los resultados se ven
as:
Archivos temporales
Una de las razones manejadores de seales se incluyen en las escrituras es para
eliminar los archivos temporales que el guin puede crear para mantener los
resultados intermedios durante la ejecucin. Hay algo de un arte de nombrar los
archivos temporales. Tradicionalmente, los programas de Unix como sistemas crean
sus archivos temporales en el directorio / tmp, un directorio compartido destinado a
este tipo de archivos. Sin embargo, dado que el directorio es compartido, esto plantea
algunos problemas de seguridad, en particular para los programas que se ejecutan
con privilegios de superusuario. Aparte del paso obvio de establecer los permisos
adecuados para los archivos expuestos a todos los usuarios del sistema, es importante
dar a los archivos temporales de los nombres de archivo no predecibles. Esto evita un
exploit conocido como un ataque de raza temp. Una forma de crear una
no predecible (pero an descriptivo) llamo a hacer algo como esto:.. tempfile = / tmp
/ $ (basename $ 0) $$ $ RANDOM
Esto crear un nombre de archivo que consiste en el nombre del programa, seguido
por su ID de proceso (PID), seguido por un nmero entero aleatorio. Tenga en cuenta,
sin embargo, que el RAN $ - variable de shell DOM slo devuelve un valor en el rango
de 1 a 32.767, lo que no es una variedad muy grande en trminos informticos, por lo
que una sola instancia de la variable no es suficiente para superar un atacante
determinado .
495
Una mejor manera es utilizar el programa mktemp (que no debe confundirse con la
funcin de la biblioteca estndar mktemp) para el nombre y crear el archivo temporal.
El programa mktemp acepta una plantilla como argumento que se utiliza para
construir el nombre del archivo. La plantilla debe incluir una serie de caracteres "X",
que se reemplazan por un nmero correspondiente de letras y nmeros aleatorios.
Cuanto ms larga sea la serie de caracteres "X", el ms largo de la serie de caracteres
aleatorios.
He
aqu
un
ejemplo:
tempfile
=
$
(mktemp
/tmp/foobar.$$.XXXXXXXXXX)
Esto crea un archivo temporal y le asigna el nombre al archivo temporal variable. Los
caracteres "x" en la plantilla se sustituyen por letras y nmeros al azar para que el
nombre del archivo final (que, en este ejemplo, tambin incluye el valor expandido de
parmetro especial $$ para obtener el PID) podra ser algo como: / tmp
/foobar.6593.UOZuvM6654
Para los scripts que se ejecutan por los usuarios regulares, puede ser aconsejable evitar
el uso del directorio / tmp y crear un directorio para los archivos temporales en el
usuario de
directorio principal, con una lnea de cdigo como este:
[[-d $ HOME / tmp]] || mkdir $ HOME / tmp
36 - Exotica
Ejecucin asncrona
A veces es deseable realizar ms de una tarea al mismo tiempo. Hemos visto cmo todos los
sistemas operativos modernos son multitarea, al menos, si no multiusuario tambin. Los
scripts pueden ser construidos a comportarse de un modo multitarea.
Por lo general, esto implica el lanzamiento de un guin que, a su vez, pone en marcha una o
ms secuencias de comandos de los nios que realizan una tarea adicional, mientras que la
secuencia de comandos de los padres contina funcionando. Sin embargo, cuando una serie
de secuencias de comandos se ejecuta de esta manera, no puede haber problemas para
mantener el padre y el nio coordinada. Es decir, qu pasa si el padre o el nio depende de la
otra, 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 ejecucin asncrona como este. El
comando wait hace que una secuencia de comandos de los padres para hacer una pausa hasta
que un proceso especificado (es decir, la secuencia de comandos nio) termina.
esperar
Vamos a demostrar el comando de espera en primer lugar. Para ello, vamos a necesitar dos
guiones, un guin de los padres: 496
Ejecucin asncrona
#! / Bin /
bash
# Asncrono-padre: asncrono demostracin ejecucin (padre)
echo "Padres: a partir ..."
echo "Padres: el lanzamiento de la escritura de los
nios ..."
asncrono-nio y
pid = $!
echo "Padres: nio (PID = $ pid) puesto en marcha."
eco de Padres ": continuar ... sueo
2
eco de Padres ": haciendo una pausa para esperar a los nios a
terminar ... espera $ pid
echo "Padres:. nio est terminado Continua ... echo"
Padres: los padres se lleva a cabo. Salir ".
y una secuencia de comandos nio:
#! / Bin / bash
#
Asncrono-nio
echo "Nio:
sueo 5
echo "Nio:
En este ejemplo, vemos que el guin nio es muy simple. La verdadera accin est siendo
realizado por el padre. En el guin de los padres, el guin nio se lanz y puso en el fondo. El
ID de proceso de la escritura de nio se registra mediante la asignacin de la variable pid con
el valor de los $! parmetro de shell, que siempre contendr el ID de proceso del ltimo
trabajo de poner en el fondo.
El guin de los padres contina y luego ejecuta un comando de espera con el PID del proceso
hijo. Esto hace que el guin principal para hacer una pausa hasta que el script nio sale,
momento en el que la secuencia de comandos padres concluye.
Cuando se ejecuta, los scripts de padre e hijo producen el siguiente resultado:
497
498
Despus pulsamos la tecla Intro, el comando aparecer para colgar. Esto es porque no hay
nada recibir datos desde el otro extremo de la tubera todava. Cuando esto ocurre, se dice que
el tubo est bloqueado. Esta condicin se borrar una vez que concedemos un proceso para el
[Me @ linuxbox ~] $ cat <pipel
otro extremo y se comienza a leer la entrada de la tubera. El uso de la segunda ventana de
terminal, entramos en este comando:
y el listado del directorio producido a partir de la primera ventana de terminal aparece en el
segundo terminal como la salida del comando cat. El comando ls en el primer terminal se
completa con xito una vez que ya no se bloquea.
Resumiendo
Bueno, hemos completado nuestra j ourney. El nico que queda por hacer ahora es prctica,
prctica, prctica. A pesar de que hemos cubierto mucho terreno en nuestra caminata, apenas
araado la superficie en cuanto a la lnea de comandos va. Todava hay miles de programas de
lnea de comandos que quedan por descubrir y disfrutar. Empezar a cavar alrededor en / usr /
bin y vers!
Lectura adicional
36 - Exotica
El Bash-Scripting Gua avanzada tambin tiene una discusin de la sustitucin de
proceso: http://tldp.org/LDP/abs/html/process-sub.html
Linux Journal tiene dos buenos artculos 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
ndice
ndice
La
comando a2ps .....................................................................333
nombres de ruta absolutos ...................................................9
comando alias .............................................................. 50, 126
alias ..................................................................... 42, 50, 124
American National Standards Institute (ANSI ver)
........................................................................................... 160
Cdigo Estndar Americano para la Informacin
Intercambio (ver ASCII) .....................................................17
anclas ...................................................................................247
servidores FTP annimo ...................................................200
ANSI ....................................................................................160
Cdigos de escape ANSI ......................................... 160, 164
ANSI.sys .............................................................................160
Servidor web Apache ........................................................118
comando apropos.................................................................47
comando apt-cache ............................................................169
comando apt-get............................................................. 168p.
de rdenes de aptitude .....................................................168
archivado.............................................................................230
expansin aritmtica .................... 70, 75, 367, 456, 464
expresiones aritmticas........................ 70, 453, 464, 467
operadores aritmticos............................................... 70, 465
las pruebas de la verdad de aritmtica .................. 391, 464
matrices ....................................................................................
aadir valores al final ...............................................483
la asignacin de valores ............................................479
de asociacin...................................................... 485, 488
la creacin de ..............................................................478
borrado ........................................................................484
determinar el nmero de elementos .......................482
encontrar subndices usados ....................................483
ndice ...........................................................................478
multidimensional ......................................................478
Variables de lectura en .............................................400
clasificacin ................................................................484
subndice .....................................................................478
bidimensional ............................................................478
B
referencias anteriores..................................... 263, 294p.
secuencias de escape de barra invertida .......................... 78
caracteres especiales escapados....................................... 156
copias de seguridad, incrementales................................ 234
comando nombre base ...................................................... 440
Bash ................................................................................ 2, 124
pgina de manual ........................................................ 48
expresiones bsica regular 254, 262p., 292, 296, 306
comando bc......................................................................... 473
Berkeley Software Distribution ...................................... 331
comando bg ........................................................................ 116
binario ...................................................... 93, 97, 341, 465
mscara de bits..................................................................... 96
operadores de bits ............................................................. 469
Bourne, Steve ................................................................ 2, 6
expansin de llaves ........................................ 71, 75, 451
derivacin ........................................................................... 381
501
ndice
comando break .................................................... 412, 445
enlaces rotos ......................................................................... 39
Estilo BSD .......................................................................... 111
buffering............................................................................. 182
bichos .................................................................... 422, 424
construir entorno ............................................................... 346
comando bzip2................................................................... 229
C
Lenguaje de programacin C,
C ++ .........................................
comando cal............................
comando cancel .....................
documentacin ............................................................ 44
archivos de programas ejecutables ..........................42,341
ejecutar como otro usuario ........................................ 99
opciones largas ............................................................ 14
Opciones ...................................................................... 14
comentarios .............................. 128, 134, 298, 355, 424
Sistema de Impresin Comn de Unix .........................329,339
operadores de comparacin .............................................470
compilador ..........................................................................341
compilar ..............................................................................340
terminaciones ...................................................................... 81
comandos compuestos ...........................................................
caso ...............................................................................429
para...............................................................................450
si ...................................................................................381
hasta .............................................................................413
mientras .......................................................................410
(()) .............................................................. 391, 406, 464
[[]] ................................................................................389,406
algoritmos de compresin ................................................227
expresiones condicionales...............................................396,420
los archivos de configuracin ....................... 18, 21, 124
comando configurar ..........................................................346
constantes............................................................................366
comando continuar ............................................................412
los caracteres de control...................................................157,266
cdigos de control...............................................................77,251
operadores de control ............................................................
&& ...............................................................................394,406
||..................................................................................394
terminal de control ............................................................109
COPIA .................................................................................344
copiar y pegar ..........................................................................
en vim ..........................................................................145
en la lnea de comandos ............................................ 80
con X Window System ................................................. 3
paquete coreutils .................................. 45, 48p., 279, 303
contando las palabras en un archivo ............................... 62
comando cp ............................................ 28, 35, 131, 207
UPC ................................................................................. 108P.,340
cron trabajo .........................................................................211
crucigramas.........................................................................247
comando csplit ...................................................................304
CUPS...................................................................................329,339
directorio de trabajo actual ................................................. 8
el movimiento del cursor .................................................. 79
comando de corte ..............................................................276,461
502
ndice
compresin de datos ......................................................... 226
redundancia de datos ........................................................ 226
la validacin de datos ....................................................... 389
comando date ......................................................................... 4
formatos de fecha .............................................................. 273
comando dd ........................................................................ 190
Debian ................................................................................. 166
Estilo Debian (.deb) .......................................................... 167
depuracin ................................................................ 377, 424
comando declarar .............................................................. 463
programacin defensiva ......................................... 420, 424
delimitadores ................................................... 76, 271, 274
dependencias............................................................ 168, 349
diseo .............................................................................. 422P.
controladores de dispositivo ................................. 174, 341
nombres de dispositivo .................................................... 182
nodos de dispositivos ......................................................... 20
comando df ................................................................. 4, 379
diccin ................................................................................. 342
cotejo fin diccionario ........................................................ 251
comando diff ...................................................................... 284
Restricciones de gestin digital (DRM) ......................... 168
directorios ................................................................................
archivado ..................................................................... 230
cambio ............................................................................. 9
copia ............................................................................... 28
la creacin de ...................................................... 28, 34
de trabajo actual ............................................................. 8
borrado ................................................................ 31, 39
jerrquica ........................................................................ 7
casa ............................................................. 21, 90, 379
listado ............................................................................ 13
en movimiento ................................................... 30, 36
navegar ............................................................................ 7
Variable de OLD_PWD ............................................ 126
padre ................................................................................ 8
Variable PATH........................................................... 126
Variable de las personas con discapacidad ........... 127
eliminacin ......................................................... 31, 39
el cambio de nombre ......................................... 30, 36
raz.................................................................................... 7
compartido .................................................................. 103
sticky bit........................................................................ 98
sincronizacin ............................................................ 238
transferir travs de una red ...................................... 238
visualizacin de contenidos ......................................... 8
particiones de disco ........................................................... 177
Variable DISPLAY ............................................................ 126
Delfn .................................................................................... 27
comando dos2unix............................................................. 267
comillas dobles .................................................................... 75
E
comando echo ........................
opcin -e ..........................
opcin -n .........................
casos de borde y esquina......
La variable EDITOR .............
ID de grupo efectivo .............
ID de usuario efectivo ..........
declaracin elif ......................
correo electrnico ..................
sistemas embebidos ..............
las variables vacas ................
tneles 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 ecuacin .......
archivos ejecutables ..............
archivos
de
programas
ejecutables ..
programas ejecutables ..........
la determinacin de la
ubicacin ...
Variable PATH ..............
comando exit ..........................
estado de salida .....................
comando ampliar ...................
expansiones ............................
aritmtica ........................
abrazadera.......................
sustitucin
de
comandos.
delimitadores .................
errores resultantes de ...
historia ............................
parmetro ........................
nombre de ruta ...............
tilde ..................................
503
ndice
palabra-divisin ....................................................... 74P.
expresiones ..............................................................................
aritmtica .............................. 70, 453, 464, 467, 479
condicional .......................................................... 396, 420
ext3....................................................................................... 188
expresiones regulares extendidas ................................... 254
Lenguaje de marcado extensible .................................... 265
F
falsa comando .................................................................... 383
comando fdformat............................................................. 190
comando fdisk ................................................................... 185
comando fg ......................................................................... 116
FIFO ..................................................................................... 498
comando de archivo ............................................................ 17
descriptor de archivo .......................................................... 56
la corrupcin del sistema de archivos ............................ 182
Protocolo de transferencia de archivos (FTP) ............... 199
los nombres de archivo .................................................... 221
distingue maysculas y minsculas......................... 11
espacios incrustados en ....................................... 12, 260
extensiones ................................................................... 12
oculto ............................................................................. 11
archivos ....................................................................................
acceso............................................................................. 89
archivado ............................................................. 230, 236
atributos ........................................................................ 90
bloque especial ............................................................ 91
bloquear el dispositivo especial ............................. 212
cambiar el modo de archivo....................................... 92
el cambio de dueo y propietario del grupo......... 102
especial carcter ........................................................... 91
dispositivo especial de caracteres ........................... 212
compresin ................................................................. 226
configuracin ............................................ 18, 124, 264
copia ....................................................................... 28, 34
copia travs de una red ............................................. 199
la creacin de vaco ..................................................... 55
debutante .................................................................... 166
borrado ....................................................... 31, 39, 218
la determinacin de contenidos ................................ 17
nodos de dispositivos ................................................. 20
acceso de ejecucin ..................................................... 90
expresiones ................................................................. 384
descubrimiento .......................................................... 209
oculto ............................................................................. 11
imagen ISO.............................................................. 191p.
listado ....................................................................... 8, 13
modo .............................................................................. 91
en movimiento ...................................................... 30, 35
propietario .................................................................... 92
Permisos ....................................................................... 89
acceso de lectura .......................................................... 90
regular ......................................................................... 212
eliminacin ......................................................... 31, 39
el cambio de nombre ......................................... 30, 35
rpm .............................................................................. 166
biblioteca compartida ................................................. 21
inicio............................................................................ 127
sticky bit ....................................................................... 98
enlaces simblicos .................................................... 212
sincronizacin ............................................................ 238
temporal ...................................................................... 495
texto ............................................................................... 17
transferir travs de una red ................ 199, 235, 238
truncando...................................................................... 55
tipo ................................................................................. 90
visualizacin de contenidos ...................................... 17
acceso de escritura ....................................................... 90
filtros ..................................................................................... 61
comando Buscar ............................................................... 211,234
paquete findutils............................................................... 225
Firefox ................................................................................. 361
cortafuegos ......................................................................... 196
primero en entrar, primero en salir ................................ 498
disquetes ....................................................... 176, 183, 189
control de flujo ........................................................................
derivacin ................................................................... 381
comando compuesto caso......................................... 429
declaracin elif .......................................................... 388
bucle sin fin ............................................................... 413
para el comando compuesto .................................... 450
bucle for ...................................................................... 450
sentencia de funcin ................................................. 374
si el comando compuesto ......................................... 381
looping ........................................................................ 409
por mens ................................................................... 406
las decisiones de seleccin mltiple ...................... 429
mientras que con la lectura de archivos y hasta
bucles ......................................................................... 414
terminacin de un bucle .......................................... 412
trampas ....................................................................... 493
hasta bucle .................................................................. 413
while............................................................................ 410
comando fmt ...................................................................... 309
poltica de enfoque ............................................................... 4
comando veces ................................................................... 309
para el comando compuesto ............................................ 450
bucle for.............................................................................. 450
Previsin............................................................................. 166
Lenguaje de programacin Fortran ............................... 341,453
comando gratis ..................................................................... 5,181
504
ndice
Free Software Foundation.
comando fsck..........................
comando ftp ............................
Servidores FTP .......................
Variable de FUNCNAME.....
sentencia de funcin .............
G
gcc........................................................................................ 342
comando gedit .................................................................. 114,131
comando genisoimage ..................................................... 191
Gentoo ................................................................................ 166
comando getopts ............................................................... 449
Ghostscript ........................................................................ 329
gid ......................................................................................... 89
variables globales ............................................................. 376
globbing ............................................................................... 26
GNOME .................................. 2, 27, 40, 95, 131, 208
gnome-terminal..................................................................... 2
Paquete binutils de GNU ................................................ 452
GNU C Compiler .............................................................. 342
Paquete coreutils GNU ...................... 45, 48p., 279, 303
Paquete findutils GNU .................................................... 225
Proyecto GNU ........... 14, XIX, XXI, 225, 303, 342, 344
comando info ............................................................... 48
GNU / Linux ...................................................................... xix,xxi
interfaces grficas de usuario ........................................ xvii
comando grep ................................................. 62, 243, 403
Groff ................................................................................... 318
comandos de grupo .......................................................... 487
grupos ................................................................................... 89
ID de grupo efectivo................................................... 98
gid.................................................................................. 89
grupo primario de identificacin ............................. 89
setgid............................................................................. 98
Interfaz grfica de usuario ... 3, xvii, 27, 40, 79, 95, 127
comando gunzip ............................................................... 227
comando gzip ..................................................................... 50,227
H
discos duros ....................................................................... 176
enlaces duros ....................................................... 24, 33, 37
la creacin de ............................................................... 37
listado ........................................................................... 38
comando de la cabeza ........................................................ 63
archivos de cabecera ......................................................... 345
Hola mundo ....................................................................... 355
comando de ayuda .............................................................. 44
aqu documentos .............................................................. 369
Yo
E / S de redireccin (ver redireccin) ............................... 53
comando id .......................................................................... 89
IDE ...................................................................................... 183
si el comando compuesto ........................... 129, 418, 429
La variable IFS .................................................................. 402
IMCP ECHO_REQUEST ................................................. 196
Las copias de seguridad incrementales ......................... 234
archivos de informacin .................................................... 49
init ....................................................................................... 108
scripts de inicio ................................................................. 108
inodos ................................................................................... 37
INSTALAR ........................................................................ 344
asistente de instalacin .................................................... 167
enteros ......................................................................................
aritmtica .................................................................... 70,473
divisin ....................................................................... 71,466
expresiones ................................................................ 388
interactividad .................................................................... 397
El campo interno Separador ............................................ 402
lenguajes interpretados ................................................... 341
programas interpretados.................................................. 342
intrprete ............................................................................ 341
imgenes ISO ................................................................. 191p.
iso9660 ............................................................................... 180,192
J
el control de trabajos ........................................................ 115
el nmero de empleos ...................................................... 115
espectrab ............................................................................ 116
comando unirse ................................................................. 281
505
ndice
Extensiones Joliet .......................................................... 192
Alegra, Bill .................................................................... 137
K
comando kate ................................................................. 131
KDE .............................................. 2, 27, 40, 95, 131, 208
comando kedit ............................................................... 131
kernel ... xvi, xixp., 46, 108, 118, 174, 183, 287, 350
campos clave ...................................................................... 271
comando matar .................................................................. 117
comando killall.................................................................. 120
texto matanza ....................................................................... 80
Knuth, Donald ................................................................... 318
Konqueror ......................................................... 27, 95, 208
Konsole ................................................................................... 2
comando kwrite ..................................................... 114, 131
L
Variable LANG ...........................................126, 251, 253
comando less .......................................... 17, 60, 238, 261
comando lftp ...................................................................... 202
bibliotecas .......................................................................... 341
LibreOffice Escritor ........................................................... xxi
carcter de continuacin de lnea ................................... 359
editores de lnea ................................................................ 137
carcter de continuacin de lnea ................................... 298
enlazador ............................................................................ 341
enlace .................................................................................. 341
enlaces ......................................................................................
roto ................................................................................. 39
la creacin de................................................................ 33
duro.......................................................................... 24, 33
simblico ................................................................ 23, 34
Comunidad Linux ............................................................. 166
Distribuciones de Linux .................................................. 166
CentOS ............................................................... 167, 336
Debian ............................................................. 166p., 340
Fedora .............................................. xix, 89, 167, 336
Previsin ..................................................................... 166
Gentoo......................................................................... 166
Linspire ....................................................................... 167
Mandriva .................................................................... 167
OpenSUSE .......................................................... xix, 167
sistemas de envasado................................................ 166
PCLinuxOS................................................................. 167
Red Hat Enterprise Linux ........................................ 167
Slackware ................................................................... 166
Ubuntu ..................................................xix, 166p., 336
Xandros ....................................................................... 167
............. 33, 37
.................. 376
.................. 420
.................. 392
.................. 214
........ 214, 218
............. 5, 201
.................. 227
.................. 463
.................. 332
.................. 337
.................. 331
................. 338
.................. 336
................ 8, 13
................... 16
.....................90
................. 202
........ 176, 179
M
lenguaje mquina ......................
mantenimiento ...........................
hacer de comandos.....................
Makefile ......................................
comando man .............................
pginas man ................................
lenguajes de marcas ...................
memoria .......................................
asignado a cada proceso de
mostrando gratis.................
Residente Set Tamao .......
violacin de segmentacin
... uso.....................................
.............................. 340
358, 362, 364, 372
............................... 347
............................... 347
................................ 45
..................... 45, 319
................... 265, 319
109
... 5
111
119
111
506
ndice
el uso de la visualizacin ......................................... 121
virtual .......................................................................... 111
programas basadas en mens .......................................... 406
tecla meta .............................................................................. 81
secuencias de meta ............................................................ 246
metacaracteres .................................................................... 246
metadatos ...................................................................167, 169
comando mkdir ..........................................................28, 34
comando mkfifo ................................................................ 498
comando mkfs ...........................................................188, 190
comando mkisofs .............................................................. 192
comando mktemp .............................................................. 496
nemotcnica ........................................................................ 341
editor modal ....................................................................... 139
fuentes de monoespaciado ............................................... 329
Moolenaar, Bram ............................................................... 137
comando more ...................................................................... 19
comando mount ........................................................178, 192
puntos de montaje .......................................... 21, 178, 180
montaje................................................................................ 177
MP3 ...................................................................................... 104
sistemas multiusuario......................................................... 88
las decisiones de seleccin mltiple .............................. 429
multitarea......................................................... 88, 108, 496
comando mv ...............................................................30, 35
N
canalizaciones con nombre .............................................. 498
comando nano .................................................................... 136
Nautilo ............................................................. 27, 95, 208
comando netstat ................................................................. 198
la creacin de redes ........................................................... 195
servidores FTP annimo ........................................... 200
ruta por defecto .......................................................... 199
Protocolo de configuracin dinmica de host
(DHCP)
...................................................................................... 199
tneles cifrados .......................................................... 206
examinar los ajustes y estadsticas de la red ....... 198
Protocolo de transferencia de archivos (FTP)........ 199
cortafuegos.................................................................. 196
Servidores FTP ........................................................... 200
Red de rea local ........................................................ 199
interfaz de bucle de retorno ..................................... 199
hombre en los ataques medios ................................ 203
routers .......................................................................... 198
comunicacin segura con hosts remotos .... 203
probar si un host est vivo ....................................... 196
trazando la ruta a un host ......................................... 197
la transferencia de archivos ..................................... 238
transportar archivos................................................... 199
O
octal................................................................... 93, 465, 481
Ogg Vorbis ......................................................................... 104
Variable de OLD_PWD .................................................... 126
OpenOffice.org Writer ........................................... 18, XXP.
OpenSSH ............................................................................ 203
operadores ...............................................................................
aritmtica .......................................................... 70, 465
asignacin ................................................................... 467
binario ......................................................................... 419
comparacin ............................................................... 470
ternario ........................................................................ 471
poseer archivos .................................................................... 89
P
archivos de paquetes......................................................... 167
mantenedores de paquetes .............................................. 167
gestin de paquetes .......................................................... 166
debutante .................................................................... 166
Estilo Debian (.deb) .................................................. 167
paquetes hallazgo ...................................................... 169
herramientas de alto nivel ....................................... 168
Instalacin de paquetes ............................................ 169
herramientas de bajo nivel ...................................... 168
repositorios de paquetes .......................................... 167
Red Hat Estilo (.rpm) ................................................ 167
la eliminacin de los paquetes ................................ 170
RPM ............................................................................. 166
paquetes de actualizacin ........................................ 171
sistemas de envasado........................................................ 166
pgina de descripcin del lenguaje ............. 265, 320, 328
La variable PAGER ........................................................... 126
buscapersonas ...................................................................... 19
expansin de parmetro ................................ 72, 75, 456
directorio padre ..................................................................... 8
proceso padre ..................................................................... 108
comando passwd ............................................................... 106
contraseas ......................................................................... 106
comando pegar................................................................... 280
PATA ................................................................................... 183
507
ndice
comando patch ................................................................ 287
parches ............................................................................. 285
Variable PATH ................................. 126, 129, 356, 374
expansin ruta .................................................. 68, 75, 451
nombres de ruta................................................................. 260
absoluto........................................................................... 9
terminacin .................................................................. 81
relativo ............................................................................ 9
PDF ..................................................................................... 321,331
Programacin Perl language.42, 243, 299, 341, 473
Permisos ............................................................................. 354
Lenguaje de programacin PHP ..................................... 341
comando ping .................................................................... 196
tuberas ........................................................ 60, 404, 491
en sustitucin de comandos ...................................... 73
portabilidad ................................................ 346, 380, 394
porttil................................................................................. 380
Formato de documento porttil ..................................... 321,331
Interfaz de sistema operativo porttil............................ 255
parmetros posicionales............................ 436, 457p., 460
POSIX................................................. 192, 251, 254p., 394
clases de personajes .. 26P., 250p., 253, 257, 289,
299
PostScript................................... 265, 320, 328, 333, 338
comando pr........................................................................ 313,329
grupo primario de identificacin ..................................... 89
caracteres imprimibles ..................................................... 251
comando printenv .............................................................. 73,124
buffers de impresora ........................................................ 181
impresoras ......................................................................... 181,183
salida buffering ......................................................... 181
cdigos de control ..................................................... 327
margarita ruedas ........................................................ 327
nombres de dispositivo ............................................ 183
conductores ................................................................ 329
grfico.......................................................................... 328
impacto........................................................................ 327
lser.............................................................................. 328
comando printf ................................................................. 314,455
impresin.................................................................................
determinar el estado del sistema ............................ 336
historia de ................................................................... 326
Protocolo de impresin de Internet ........................ 337
fuentes de monoespaciado....................................... 327
texto preparacin ....................................................... 329
bastante ....................................................................... 333
colas de impresin .................................................... 336
fuentes proporcionales ............................................. 328
cola ............................................................................... 337
la cola de impresin .................................................. 336
terminar los trabajos de impresin ........................ 338
Q
citando .................................................................................. 74
comillas dobles ............................................................ 75
carcter de escape ........................................................ 77
cita desaparecidos ..................................................... 417
comillas simples .......................................................... 76
R
RAID (matriz redundante de discos independientes)
............................................................................................ 176
procesador de imagen de trama .................................... 329
comando de lectura .................. 398, 408, 414, 422, 491
508
ndice
Readline ............................................................................. 79
README ................................................................. 49, 344
redireccin ...............................................................................
tubera obstruida ....................................................... 499
comandos de grupos y subcapas ............................. 487
aqu documentos........................................................ 369
aqu cuerdas................................................................ 404
error estndar ............................................................... 55
entrada estndar.............................................. 57, 370
salida estndar ............................................................. 54
operadores de redireccin .....................................................
Y> ................................................................................... 57
Y >> ................................................................................ 57
< ...................................................................................... 59
<(Lista)......................................................................... 491
<<.............................................................................. 369p.
...................................... 370
<< -....
...................................... 404
<<< ...,
........................................ 54
> .........
...................................... 491
> (Lista),
....................................... 55
>>.......
....................................... 60
62, 243, 295, 389, 403 247
expresiones
regulares anclas .
referencias anteriores ................................. 263, 294p.
bsico ............................... 254, 262p., 292, 296, 306
extendido .................................................................... 254
bases de datos relacionales .............................................. 281
rutas relativas ......................................................................... 9
libertad anticipada, la liberacin a menudo ................. 422
la eliminacin de lneas duplicadas en un archivo ........ 61
RESPUESTA variables .......................................... 398, 491
generador de informes...................................................... 361
repositorios ......................................................................... 167
comando de retorno ............................................... 375, 386
reutilizable ......................................................................... 380
DEP ...................................................................................... 329
comando rlogin .................................................................. 202
comando rm .......................................................................... 31
Extensiones Rock Ridge ................................................... 192
roff ....................................................................................... 318
Codificacin ROT13 .......................................................... 290
RPM ..................................................................................... 166
comando rpm ..................................................................... 169
comando rsync ................................................................... 238
rsync protocolo remoto de actualizacin ....................... 238
Lenguaje de programacin Ruby .................................... 341
509
ndice
comando stat ...................................................................... 223
sticky bit ............................................................................... 98
dispositivos de almacenamiento .................................... 176
CD de audio .............................................................. 180,191
CD-ROM ................................................................. 179p.,191
la creacin de sistemas de archivos ........................ 185
nombres de dispositivo ............................................ 182
particiones de disco................................................... 177
FAT32 .......................................................................... 185
disquetes .................................................................... 183,189
formato ........................................................................ 185
LVM (Logical Volume Manager) ............................ 179
puntos de montaje .................................................... 178,180
particiones .................................................................. 185
leer y escribir directamente ..................................... 190
la reparacin de los sistemas de archivos .............. 189
desmontaje ................................................................. 181
Unidades flash USB .................................................. 190
editor de flujo .................................................................... 290
cuerdas .....................................................................................
expresiones ................................................................. 387
extraer una porcin de .............................................. 459
longitud de ................................................................. 459
realizar bsqueda y reemplazo en .......................... 461
eliminar parte principal de ...................................... 460
eliminar parte posterior de ...................................... 460
$ {Parmetro: desplazamiento: longitud} ............... 459
$ {Parmetro: offset} .................................................. 459
comando de cuerdas.......................................................... 452
talones ................................................................................ 377,422
estilo .................................................................................... 345
comando su .......................................................................... 99
subniveles.......................................................................... 404,487
comando sudo ..................................................................... 99,101
Sun Microsystems ............................................................. 137
superusuario .............................................. 2, 90, 100, 120
enlaces simblicos.............................................. 23, 34, 38
la creacin de ........................................................ 38, 40
listado ............................................................................ 38
enlace simblico .................................................................. 23
errores de sintaxis ............................................................. 416
resaltado de sintaxis......................................................... 354,359
T
tablas ................................................................................... 281
datos tabulares .................................................................. 271,317
comando tail ......................................................................... 63
archivo de cinta.................................................................. 230
comando tar ........................................................................ 230
tarballs ................................................................................ 343
510
ndice
minsculas a la conversin en maysculas ........... 289
lneas de numeracin ....................................... 267, 305
paginar ......................................................................... 313
pegar ............................................................................ 280
la preparacin para la impresin............................. 329
la eliminacin de lneas duplicadas ......................... 61
renderizado en PostScript ........................................ 320
ROT13 codificado ...................................................... 290
la bsqueda de patrones ............................................. 62
clasificacin ......................................................... 61, 267
correccin ortogrfica ................................................ 299
sustitucin................................................................... 294
la sustitucin de lengetas para espacios .............. 279
delimitado por tabuladores ...................................... 278
personajes Transliterando ........................................ 288
Formato Unix .............................................................. 267
ver con menos ..................................................... 17, 60
editores de texto ...........................................130, 264, 288
emacs............................................................................ 131
para escribir scripts de shell .................................... 354
gedit .................................................................... 131, 354
interactivo ................................................................... 288
kate ...................................................................... 131, 354
kedit ............................................................................. 131
kwrite ........................................................................... 131
lnea.............................................................................. 137
nano..................................................................... 131, 136
Pico ............................................................................... 131
corriente....................................................................... 290
resaltado de sintaxis ......................................... 354, 359
vi ................................................................................... 131
empuje ...................................................131, 354, 359
visual............................................................................ 137
expansin de tilde ..................................................... 69, 75
comando tload .................................................................... 121
comando top ....................................................................... 111
diseo de arriba hacia abajo ............................................ 372
Torvalds, Linus .......................................................... xvi, xxi
comando touch ................................ 222p., 239, 349, 446
comando tr .......................................................................... 288
comando traceroute ........................................................... 197
rastreo .................................................................................. 425
personajes Transliterando................................................ 288
trampas ................................................................................ 493
comando troff ..................................................................... 318
verdadero comando ........................................................... 383
TTY ...................................................................................... 109
escriba command ................................................................. 43
cajistas ........................................................................ 318, 328
Variable TZ......................................................................... 127
T
89, 102, 166, 250, 357
Ubuntu ................................
comando umask .................
........................... 96, 105
................................... 181
comando umount...............
...................................... 51
comando unalias ................
..................................... 419
operador unario espera,
.....................................465
operadores unarios ............
..................................... 279
comando unexpand ...........
smbolo inesperado ...........
.................................... 418
............................61, 275
comando Uniq....................
.................................... xvii
Unix .....................................
Unix System V ................................................................... 331
comando unix2dos ............................................................ 267
comando unset ................................................................... 484
hasta comando compuesto ............................................... 413
hasta bucle .......................................................................... 413
comando unzip .................................................................. 236
comando updatedb............................................................ 211
proveedores de aguas arriba ............................................ 167
el tiempo de actividad ...................................................... 373
comando uptime ................................................................ 379
Unidades flash USB ............................................... 176, 190
Usenet.................................................................................. 290
Variable USER ........................................................ 125, 127
usuarios ....................................................................................
cuentas ........................................................................... 89
identidad cambiante ................................................... 99
cambio de contraseas .............................................. 106
ID de usuario efectivo.................................... 98, 109
directorio de inicio ...................................................... 90
identidad ....................................................................... 89
contrasea ..................................................................... 90
Permisos configuracin por defecto ......................... 96
setuid ............................................................................. 98
superusuario .................................... 90, 92, 98p., 107
/ Etc / passwd ................................................................ 90
/ Etc / shadow................................................................ 90
V
entrada de validacin........................................................ 404
las variables ..................................................... 72, 364, 456
la asignacin de valores ........................................... 367,467
constantes.................................................................... 366
declarando ................................................................. 364,367
medio ambiente ......................................................... 124
global ........................................................................... 376
local .............................................................................. 376
nombres...................................................................... 366,459
escalar .......................................................................... 478
cscara.......................................................................... 124
511
ndice
vfat ....................................................................................... 188
comando de vi .................................................................... 136
comando vim.......................................................... 263, 359
consolas virtuales .................................................................. 5
Red Privada Virtual .......................................................... 206
terminales virtuales .............................................................. 5
editores visuales ................................................................ 137
comando vmstat................................................................. 121
X
Sistema X Window ..............................................3, 88, 206
xargs comando ................................................................... 220
comando xload ................................................................... 121
comando xlogo ................................................................... 114
XML ..................................................................................... 265
Y
texto tirn.............................................................................. 80
comando yum..................................................................... 169
Z
comando zgrep................................................................... 263
comando zip ....................................................................... 236
comando zless ............................................ 50 --help opcin.
./configure....................................................................... 34645
.bash_history .................................................................. 83
512
/ ........................................
/ 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 .....................
................................... 20
................................... 20
................................... 20
................................... 20
.................................... 20
.................................... 20
................................... 183
................................... 183
....................................183
..................................... 57
.................................... 21
..................................128
.................................... 21
................ 21, 177, 189
......................................90
21, 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
/ 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
$
$! ............................................................................. 442, 497
$ ((Expresin)) ................................................................... 464
$ {! Array [@]} ..................................................................... 483
$ {! Array [*]} ...................................................................... 483
$ {! Prefijo @} ...................................................................... 459
$ {! Prefijo *} ....................................................................... 459
$ {Parmetro} # .................................................................. 459
$ {Parmetro ,,}................................................................... 463
$ {Parmetro,}..................................................................... 463
513