Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Comandos Linux

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 16

HERRAMIENTAS BÁSICAS Y EL SISTEMA

OPERATIVO LINUX

Objetivo:

– Introducir las herramientas principales que se usan en los sistemas operativos


en red.
– Introducir el interprete Bourne Again Shell

INTRODUCCION A GNU/Linux

Linux es un sistema operativo que se parece a UNIX. El acrónimo GNU es


recursivo y significa GNU NO ES UNIX. La parte LINUX es en realidad el núcleo del
sistema operativo, el componente que se encarga de realizar la abstracción entre
el software y el hardware, la parte GNU es la colección de aplicaciones que lo
acompañan y que lo hacen un sistema completo y totalmente funcional.

Los sistemas UNIX definen diferentes tipos de archivos:


• Los archivos físicos, que son los que se introducen en el disco duro. Este
es un archivo en el sentido generalmente entendido de la palabra;
• Los directorios son archivos (nodos) de la estructura jerárquica capaces de
contener archivos u otros directorios. Un directorio contiene al menos un
directorio principal (que se escribe ..), que se relaciona con el directorio del
nivel superior, y un directorio actual (que se escribe .), es decir, el directorio
en sí mismo;
• Los enlaces son archivos especiales que permiten que varios nombres
(enlaces) se asocien a un único e idéntico archivo. Este sistema hace
posible que se puedan tener varias instancias de un mismo archivo en
diversos lugares de la estructura jerárquica sin necesidad de copiarlos. Esto
ayuda a asegurar la coherencia y ahorra espacio en el disco. Existen dos
tipos de enlaces:
• Enlaces simbólicos, que representan a los punteros virtuales
(accesos directos) de los archivos reales. En el caso de que se elimine
un enlace simbólico, no se elimina el archivo al que indica. Los enlaces
simbólicos se crean utilizando comandos In -s de acuerdo con la
siguiente sintaxis:
ln -s name-of-real-file nombre-del-enlace-simbólico

• Enlaces físicos (también denominados enlaces rígidos),


representan un nombre alternativo para un archivo. Así, cuando un
archivo tiene dos enlaces físicos, la eliminación de uno u otro de estos
enlaces no implica la eliminación del archivo. Más específicamente,
mientras haya quedado al menos un enlace físico, el archivo no se
elimina. Por otro lado, cuando se eliminan todos los enlaces físicos de
un mismo archivo, también se elimina dicho archivo. Sin embargo,
debemos advertir que sólo es posible crear enlaces físicos dentro de
un único e idéntico sistema de archivos. Los enlaces físicos se crean
utilizando comandos In (con la opción del comando n) de acuerdo a la
siguiente sintaxis:
ln nombre-del-archivo-real nombre-del-enlace-físico

• Los archivos virtuales no existen realmente ya que sólo existen en la


memoria. Estos archivos, ubicados especialmente en el directorio /proc,
contienen información sobre el sistema (procesador, memoria, discos
rígidos, procesos, etc.);
• Los archivos de dispositivo, ubicados en el directorio /dev/, se relacionan
con los dispositivos del sistema.
Los archivos en un sistema UNIX están organizados en una única estructura
jerárquica. Sin embargo, es posible tener varias particiones utilizando un
mecanismo denominado montaje, el cual hace posible la conexión entre una
partición y un directorio en la estructura jerárquica principal. Por eso, el hecho de
montar una partición en el directorio /mnt/partition hace que todos los archivos en
la partición sean accesibles para este directorio, que se denomina: "punto de
montaje".
La jerarquía de archivos en los sistemas UNIX/Linux debería cumplir con el
estándar FHS (File Hierarchy System) y se define de la siguiente manera.

● / La raíz, que contiene los directorios principales.


● /bin Contiene los ejecutables necesarios para el sistema, utilizados por
todos los usuarios.
● /boot Contiene los archivos de carga para el kernel, incluyendo el cargador
de la rutina de arranque.
● /dev Contiene los puntos de entrada para los dispositivos.
● /etc Contiene los archivos de configuración que se necesitan para la
administración del sistema (archivos passwd, group, inittab, ld.so.conf,
lilo.conf, etc.)
● /etc/X11 Contiene los archivos específicos para la configuración de X
● /home Contiene los directorios personales del usuario. En lo que respecta a
los directorios ubicados en /home, éstos pretenden alojar los archivos del
usuario en el sistema.
● /lib Contiene bibliotecas estándares que se comparten con las diferentes
aplicaciones del sistema.
● /mnt Hace posible alojar los puntos de montaje de las particiones
temporales (CD-ROM, disquete, etc.)
● /proc Fusiona un conjunto de archivos virtuales y hace posible el
intercambio de información sobre el sistema o sobre los procesos que se
están ejecutando.
● /root Directorio personal de administración Root. El directorio de
administración personal se encuentra aislado de los otros directorios
personales ya que se encuentra ubicado en la partición de la raíz. Así, éste
se puede cargar al inicio, antes del montaje de la partición /home.
● /sbin Contiene los ejecutables esenciales del sistema (por ejemplo, el
comando adduser).
● /tmp Contiene archivos temporales.
● /usr Jerarquía secundaria.
● /usr/X11R6 Este directorio se reserva para el sistema X versión 11 edición 6
(los sistemas modernos utilizaran X11R7).
● /usr/X386 Utilizado anteriormente por X versión 5, es un enlace simbólico a
/usr/X11R6.
● /usr/bin Contiene la mayor parte de los archivos binarios y los comandos del
usuario.
● /usr/include Contiene los archivos de cabecera para los programas C y C++.
● /usr/lib Contiene la mayoría de las bibliotecas compartidas del sistema.
● /usr/local Contiene datos que pertenecen a los programas instalados en la
máquina local por Root.
● /usr/local/bin Binarios para programas locales.
● /usr/local/include Archivos de cabecera locales para C y C++.
● /usr/local/lib Bibliotecas locales compartidas.
● /usr/local/sbin Binarios del sistema local.
● /usr/local/share Jerarquía independiente.
● /usr/local/src Archivos locales de fuente.
● /usr/sbin Contiene los archivos binarios que no son fundamentales para el
sistema y que están reservados para el administrador del sistema.
● /usr/share Reservado para datos independientes de la arquitectura.
● /usr/src Contiene archivos del código fuente.
● /var Contiene datos editables, como por ejemplo, archivos de bases de
datos, registros, archivos para un gestor de colas de impresión o incluso
archivos para la espera del correo electrónico.

Los archivos en UNIX/Linux deben referenciarse utilizando su ruta absoluta o


especificando el path en las variables del shell. Para referenciar una ruta absoluta
simplemente se debe proceder a ingresarla desde raiz, es decir: si quisiéramos
ejecutar un programa dentro del directorio personal del usuario luis registrado en
nuestro sistema haríamos.

$ /home/luis/programa

Linux no tiene un sistema de extensiones de archivos (este es un concepto del


viejo DOS donde se usaban los nombres de tipo 8.3 ), aunque algunos archivos
pueden tener extensión, bash no interpretará dicho campo en los archivos
asumiendo que se trata del nombre de archivo del mismo.

Existen dos identificadores que pueden hacer la vida mas sencilla cuando nos
estamos refiriendo a un archivo en un arblo UNIX/Linux. El identificador punto y el
identificador dos puntos seguidos.

El primero será traducido en una ruta como el directorio actual, de manera que si
queremos ejecutar un programa alojado en nuestro home, podremos evitar la ruta
absoluta haciendo lo siguiente:

/ $ cd /home/luis
~ $ ./programa

Note como ha cambiado el indicador a ~ , algunos interpretes (como bash)


utilizan este simbolo para simbolizar que se trata de nuestro directorio de trabajo.
Luego, podemos hacer

/ $ cd ~
~ $ pwd
/home/luis
~$

El operador dos puntos seguidos indica el padre de nuestro directorio, por ejemplo

~ $ ../luis/programa
~ $ ../../home/luis/programa

Linux, como sistema multiusuario, asigna un propietario y un grupo a cada fichero


(y directorio) y unos permisos al propietario, al grupo y al resto de los usuarios.
La forma más rápida de comprobar esta característica es usar el comando
~ $ ls -la.

Uno de los principales problemas de seguridad en un sistema de archivos es la


forma en que se configuran los permisos, es importante asegurar que los ficheros
del sistema y los de cada usuario solo pueden ser utilizados por las personas
autorizadas para hacerlo.
En general, cualquier sistema UNIX divide el control de acceso a ficheros y
directorios en tres elementos: propietario, grupo y otros.
Tanto el propietario como el grupo son únicos para cada fichero o directorio, a un
grupo pueden pertenecer múltiples usuarios, otros hace referencia a los usuarios
que ni son el propietario ni pertenecen al grupo.
Dentro del nodo indice del archivo estará almacenada toda la información
relevante al archivo, en principio se almacenará el user id y el group id del usuario
que es dueño del archivo, estos parámetros se establecen en los archivos
/etc/passwd y /etc/group y sirven para identificar y autenticar los usuarios en el
sistema. Ademas de el UID y el GID, tambien se almacenan los bits individuales
que definen el acceso a un directorio.
El significado de estos permisos puede variar dependiendo si se trata de un
fichero o un directorio.
• Lectura (r):
• Fichero: Poder acceder a los contenidos de un fichero
• Directorio: Poder leer un directorio, ver qué ficheros contiene
• Escritura (w):
• Fichero: Poder modificar o añadir contenido a un fichero
• Directorio: Poder borrar o mover ficheros en un directorio
• Ejecución(x):
• Fichero: Poder ejecutar un programa binario o guion de shell
• Directorio: Poder entrar en un directorio

Estos permisos se pueden aplicar a:


• usuario (u): El propietario del fichero
• grupo (g): El grupo al que pertenece el fichero
• otros (o): El resto de los usuarios del sistema

Además tenemos otros bits de permisos que no podemos pasar por alto cuando
estamos tratando temas de seguridad.
Sticky bit:
El sticky bit tiene su significado propio cuando se aplica a directorios. Si el
sticky bit está activo en un directorio, entonces un usuario sólo puede borrar
ficheros que son de su propiedad o para los que tiene permiso explícito de
escritura, incluso cuando tiene acceso de escritura al directorio. Esto está
pensado para directorios como /tmp, que tienen permiso de escritura global,
pero no es deseable permitir a cualquier usuario borrar los ficheros que
quiera. El sticky bit aparece como 't' en los listados largos de directorios.

drwxrwxrwt 19 root root 8192 Jun 24 14:40 tmp

Attributo SUID: (Para Ficheros)


Este bit describe permisos al identificador de usuario del fichero. Cuando el
modo de acceso de ID de usuario está activo en los permisos del propietario,
y ese fichero es ejecutable, los procesos que lo ejecutan obtienen acceso a
los recursos del sistema basados en el usuario que crea el proceso (no el
usuario que lo lanza). Por ejemplo /usr/bin/passwd es un ejecutable propiedad
de root y con el bit SUID activo. ¿Por qué? Este programa lo puede usar
cualquier usuario para modificar su clave de acceso, que se almacena en

-rw-r--r-- 1 root root 1265 Jun 22 17:35 /etc/passwd

pero según los permisos que observamos en este fichero, sólo root puede
escribir y modificar en él. Entonces sería imposible que un usuario pudiera
cambiar su clave si no puede modificar este fichero. La solución para este
problema consiste en activar el bit SUID para este fichero:

-r-s--x--x 1 root root 10704 Apr 14 23:21 /usr/bin/passwd


de forma que cuando se ejecute, el proceso generado por él es un proceso
propiedad de root con todos los privilegios que ello acarrea.

Esto podría ser un riesgo de seguridad si no mantenemos un mínimo de


atención, ya que en este tipo de programas se pueden producir una
vulnerabilidad de tipo desbordamiento de buffer que comprometan su
sistema. Recuerde siempre lo siguiente:

• No asignar el bit SUID salvo cuando sea estrictamente necesario.


• Comprobar que cualquier programa con este bit activo no tiene ningún
desbordamiento de buffer (conocido).
• No asignarlo jamás si el programa permite salir al shell.

Atributo SGID: (Para ficheros)


Si está activo en los permisos de grupo, este bit controla el estado de "poner
id de grupo" de un fichero. Actúa de la misma forma que SUID, salvo que
afecta al grupo. El fichero tiene que ser ejecutable para que esto tenga algún
efecto.

Atributo SGID: (Para directorios)


Si activa el bit SGID en un directorio ( con "chmod g+s directorio"), los
ficheros creados en ese directorio tendrán puesto su grupo como el grupo del
directorio.

BOURNE AGAIN SHELL (BASH)

De wikipedia

“bash es un shell de Unix (intérprete de órdenes de Unix) escrito para el proyecto


GNU. Su nombre es un acrónimo de bourne-again shell (otro shell bourne) —
haciendo un juego de palabras (born-again significa renacimiento) sobre el
Bourne shell (sh), que fue uno de los primeros intérpretes importantes de Unix.
Hacia 1978 el intérprete Bourne era el intérprete distribuido con el Unix Version 7.
Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió el
intérprete Bourne original . Brian Fox escribió el intérprete bash en 1987. En
1990, Chet Ramey se convirtió en su principal desarrollador. bash es el intérprete
predeterminado en la mayoría de sistemas GNU/Linux, además de Mac OS X
Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo Unix.
También se ha llevado a Microsoft Windows por el proyecto Cygwin.”

Cuando el interprete lee entrada, la procesa atraves de una secuencia de


operaciones. Si la entrada indica el principio de un comentario el shell ignorará el
simbolo de comentario (#) y el resto de la línea.

En otro caso, el interprete leerá la entrada y la dividirá en palabras y operadores,


utilizando reglas definidas para determinar el significado de la expresion.
La siguiente es una descripción breve de la operación del shell cuando lee y
ejecutas un comando. Basicamente, el shell sigue los siguientes pasos:

1. Lee la entrada desde un archivo, una linea dada como argumentos, o desde
la entrada estandar de un terminal.
2. Descompone la entrada en palabras y operadores, obedeciendo unas reglas
establecidas.
3. Luego se transforma la expresión en comandos simple y compuestos.
4. Ejecuta varias expansiones, creando listas de arhcivos, comandos y
argumentos.
5. Luego realiza cualquier redirección necesaria y remueve los operadores de
redicreccion y sus operandos de la lsta de argumentos.
6. Ejecuta los comandos.
7. Opcionalmente espera que el comando termine y recolecta su estado de
salida.

Como manejar las comillas

Las comillas son usadas para remover el significado especial de ciertos caracteres
o palabras que van hacia el interprete. Las comillas pueden ser usadas para
deshabilitar el tratamiento de ciertos caracteres, para prevenir que algunas
palabras reservadas sean reconocidas como tales, y para prevenir la expansion de
parametros.

Existen tres mecanismos de comillas, el carácter de escape, las comillas sencillas


y las comillas dobles.

El carácter de escape

Un carácter '\' sin las comillas es el carácter de escape de Bash. Este preserva el
valor literal del siguiente carácter que sigue, con la escepción de una nueva linea
(enter) . Si \ (enter) aparece y no esta rodeado de comillas, será tratado como
una continuación de linea, esto es, será removido del flujo de entrada e ignorado.

Comillas sencillas

Rodear los caracteres en comillas sencillas ('c') preserva el valor literal de cada
carácter dentro de las comillas. Una comilla sencilla no puede ocurrir dentro de
las comillas sencillas aún cuando este precedida de un backslash '\'

Comillas dobles

Rodear caracteres en comillas dobles (”c”) preserva el valor literal de todos los
caracteres dentro de las comillas, con la escepción de '$', '´','\' y cuando la
expansión historial esta habilitada '!'. El carácter '$' y '´' retienen su significado
especial cuando se encuentran al interior de las comillas dobles. El backslash
retiene su significado especial solamente cuando es seguido por uno de los
siguientes caracteres: $, ´ , “, \ o enter. Dentro de las comillas sencillas, los
backslashes que son seguidos por uno de estos caracteres son removidos. Los
backslashes que anteceden a caracteres sin significado especial se dejan sin
modificar. Una comilla doble puede encontrarse al interior de dos comillas dobles
si se le precede el carácter de escape. Los parametros especiales * y @ tienen un
significado especial cuando se encuentran en comillas dobles.

Comandos de BASH

Un comando simple de bash como $ echo a b c consiste de el comando mismo,


seguido por argumentos, separados por espacios.

Comandos mas complejos se componen de simples comandos arreglados juntos


en diferentes maneras: En una tubería en la cual la salida de un comando se
convierte en la entrada del segundo, en un lazo o constructo condicional, o en
algun otro grupo.

Comandos simples

Un comando simple es el tipo de comando encontrado mas amenudo.


Simplemente es una secuencia de palabras separadas por espacio y terminada
por uno de los operandos de control del interprete. La primera palabra
generalmente especifica que comando debe ser ejecutado, con el resto de las
palabras en forma de argumentos.

Ejemplo:

~$ echo hola

Tuberías

Una tubería es una secuencia de comandos simples separados por '|'.

El formato de una tuberia es

[time [-p]] [!] command1 [| command2 ...]

La salida de cada comando en la tubería es conectado vía un tubo hacia la


entrada del próximo comando. Esto quiere decir, cada comando lee la salida de
cada comando como su entrada.

Cada comando en la tubería es ejecutado en su propio subshell, la salida de una


tuberia es la salida del último comando en la tubería, a menos que la opción
pipefail sea habilitada.

Ejemplo:

Cat es un programa que sirve para imprimir un archivo en la salida estandar. Para
mas información consultar el manual de Linux
$ man cat

NAME
cat - concatenate files and print on the standard output

SYNOPSIS
cat [OPTION] [FILE]...

Grep es un programa que sirve para imprimir lineas que coinciden con un
parametro, aunque grep puede utilizarse para abrir archivos, podemos utilizarlo
mediante tuberias. Grep es una herramienta muy poderosa, para aprender mas
de el se recomienda ver la pagina del manual.

$ man grep

utilizando grep y cat mediante tuberías

cat weave.txt | grep hola

Listas

Una lista es una secuencia de una o mas tuberías separadas por uno de los
operadores ';', '&', '&&', o '||', y opcionalmente terminada por ';', '&' o enter.

De estos operadores de lista, '&&' y '||' tienen una precedencia igual, seguidos por
';' y '&'.

Una secuencia de uno o mas enter puede aparecer en una lista para delimitar
comandos, equivalente a un puntoycoma. Si un comando es terminado por el
operador de control '&', el interprete lo ejecutará de manera asincrona en un
nuevo subshell.

Esto se conoce como ejecutar el comando en el fondo (background). El interprete


no esperará a que el comando termine y regrese el estado 0 (true). Cuando no
esta activo el control de trabajos, la entrada estandar en ausencia de una
redirección explicita sera redirijida a /dev/null.

Los comandos separados por ';' son ejecutados secuencialmente; el interprete


esperará que cada comando termine para procesar el siguiente. La salida es el
estado del ultimo comando ejecutado.

Los operadores de control '&&' y '||' denotan listas 'y' y listas 'o', respectivamente.
Una lista 'y' tiene la forma

comando1 && comando 2

Comando2 sera ejecutada si, y solo si, comando 1 returna una salida de cero.
Una lista 'o' tiene la forma

comando1 || comando2

comando2 será ejecutado si, y solo si, comando1 retorna una salida no cero (es
decir, falla). El estado de salida de una lista o, es la salida del ultimo comando
ejecutado en la lista.

Agrupar comandos

Bash tiene dos formas de agrupar una lista de comandos para ser ejecutados
como unidad.

Uso de parentesis

Ubicar una lista de comandos entre parentesis causa que se cree un nuevo
espacio de trabajo en un subshell para la ejecución de la lista, las variables no
permanecerán despues de que el subshell finalice.

Uso de llaves

Ubicar una lista de comandos al rededor de llaves causa que la lista sea ejecutada
en el contexto del interprete acutal, quiere decir que no se creara un nuevo
subshell, el punto y coma es requerido.

Adicionalmente a la creacion de un nuevo espacio de trabajo, existe una sutil


diferencia entre estas dos construcciones debido a razones historicas. Las llaves
son palabras reservadas, asi que deben separarse de la lista usando espacios. Los
parentesis son operadores y son reconocidos como entes separados del shell
inclusive si no son separados usando espacios.

Sustitución de comandos

La sustitución de comandos permite que la salida de un comando reemplace el


comando mismo.

Se puede utilizar de dos formas

$(comando) o ´comando´

Bash realiza la expansión ejecutando primero el comando y reemplazando la


salida estándar del comando.

Redirecciones

Antes de ejecutar un programa, su entrada y salida pueden ser redireccionadas


usando notación especial interpretada por el shell. La redireccón tambien puede
ser usada para abrir o cerrar archivos en el ambiente de trabajo acutal. Los
siguientes operadores de redirección pueden aparecer en cualquier lugar dentro
de un comando simple o ser la continuación del mismo. Las redirecciones son
procesadas en el orden de aparición de izquierda a derecha.

En la siguiente descripción, si se omite el descriptor de archivo y el primer


carácter de redirección en aparecer es '<', la redirección se referirá a la entrada
estandar (descriptor de archivo 0). Si el primer carácter de redirección es '>', la
redirección se referirá a la salida estandar (descriptor de archivo 1). La palabra
que sigue al operador de redirección en las siguientes descripciones, a menos que
se indique lo contrario, esta sujeto a la expansión de llaves, expansión de tildes,
expansión de parametros, sustitución de comandos, expansión aritmetica, etc...

Note que el orden de redirección es importante, por ejemplo el comando

ls > dirlist 2>&1

Redirecciona ambas, la salida estandar y el error estandar (descriptor de archivo


2) hacia el archivo dirlist, mientras que el comando

ls 2>&1 > dirlist

Únicamente redirecciona la salida estándar hacia dirlist, por que el error estandar
fue duplicado como salida estandar antes de que la salida estandar fuera
redireccionada a dirlist.

Bash maneja diferentes archivos de una manera especial cuando se utilizan en la


redirección de acuerdo a la tabla siguiente.

/dev/fd/NN
Si NN es un entero valido, entonces se usará
/dev/stdin
El descriptor 0
/dev/stdout
El descriptor 1
/dev/stderr
El descriptor 2
Si no es posible abrir o crear un archivo, la redirección falla. Las redirecciones
utilizando descriptores de archivo superiores a 9, deben utilizarse con cuidado,
por que pueden entrar en conflicto con aquellos descriptores que el shell utiliza
internamente.
Redireccionar la entrada

Redireccionar la entrada causa que aquellos archivos cuyos nombres resulten de


la expansiñon de una palabra sean abiertos para lectura utilizando el descriptor
de archivo n, o la salida estandar (descriptor de archivo 0) si n no es especificado,
por ejemplo.
~$ cat 0 < /dev/stdin

Redireccionar la salida

La redirección de la salida causa que el archivo cuyo nombre resute de la


expansión de palabra sea abierto para escritura en el descriptor n, o la salida
estándar si n no se especifica. Si el archivo no existe será creado, si existe será
truncado a talla cero.

Por ejemplo:

~$ cat 1 > hola

Para evitar que el archivo sea truncado a cero y sobre escrito se debe utilizar el
operador de inserción al final (append) >>.

Ejemplo:

~$ cat 1 >> hola

Redirección de la salida estandar y el error estandar

Bash permite redireccionar ambos, la salida estándar (descriptor 1) y el error


estándar (descriptor 2) para ser redireccionados al archivo cuyo nombre es la
expansión de la palabra.

Hay dos formatos para redireccionar la salida estándar y el error estándar:

&>word
y >&word

Por claridad es preferible utilizar la primera, esto es equivalente a hacer

> word 2>&1

Usando 'HERE DOCUMENTS'

Este tipo de redirección hace que el interprete lea la entrada desde la fuente
hasta que una línea que contenga word (no debe estar acompañada de ningún
otro tipo de carácter, ni espacios) sea encontrada. Todas las lineas que sean
leídas hasta ese punto serán usadas como entrada estándar para el comando.

<<[−]word
here-document
delimiter

Flujo de programa

Condicionales
if
if test-commands; then

consequent-commands;
[elif more-test-commands; then
more-consequents;]
[else alternate-consequents;]
fi

case

case word in [ [(] pattern [| pattern]...) command-list ;;]... esac

Ejemplo

echo -n "Enter the name of an animal: "


read ANIMAL
echo -n "The $ANIMAL has "
case $ANIMAL in
horse | dog | cat) echo -n "four";;
man | kangaroo ) echo -n "two";;
*) echo -n "an unknown number of";;
esac
echo " legs."

select

La construcción select permite generar menus facilmente. Su sintaxis es:


select name [in words ...]; do commands; done
La lista de palabras se expande, generando una lista de items.
Ejemplo
select fname in *;
do
echo you picked $fname \($REPLY\)
break;
done

Bucles

until
until test-commands; do consequent-commands; done

while

while test-commands; do consequent-commands; done

for

for name [in words ...]; do commands; done

Guiones Bash

Es posible crear archivos ejecutables en guiones BASH, de hecho la mayoría de


los procedimientos de inicio del sistema están escritos de esta manera.

Para hacer un script o guión de bash se procede a crear un archivo de texto, la


primera línea debe hacer referencia al interprete antecedida por los caracteres #!

ejemplo:
#!/bin/bash

Recuerde dar permisos de ejecución, de otra manera deberá llamar al interprete


con el guión como argumento.

~$ /bin/bash miguion.sh

Algunos programas interesantes:

Para determinar que un archivo "resumen.txt" tenga menos de 5000 palabras se


debe realizar:

wc -w resumen.txt

Con wc -w determinamos el número de palabras que tiene el archivo.

Para verificar que un archivo llamado "correo.txt" tenga menos de 75 caracteres


se debe realizar

wc -l correo.txt

Con wc -l determinamos el número de caracteres que tiene el archivo.

Para dividir un texto llamado "pord.txt" de 100 lineas, en dos archivos "uno.txt" y
"dos.txt", el primero con las primeras 40 líneas y el segundo con las últimas 60 se
debe realizar:

head -n 40 pord.txt > uno.txt


tail -n 60 pord.txt > dos.txt

4. El comando que ordena los nombres y muestra los 10 primeros de un archivo


con nombres de personas "pers.txt"

sort pers.txt | head -n 10

Con sort se ordenan las lineas de un archivo y con head -n 10 pedimos las
primeras 10 lineas ordenadas.
El comando para bash que presenta la cantidad de palabras no repetidas del
archivo "palabras.txt", en el cual hay una lista de palabras(una en cada linea) es:

sort -u palabras.txt | wc -l
Con sort se ordenan las lineas de un archivo, el cual tiene la capacidad de
eliminar lineas repetidas con -u.

El comando para bash que muestra la cantidad de archivos de configuración de


mi directorio personal es:

grep # ~/joralm

También podría gustarte