Fundamentos Linux
Fundamentos Linux
Fundamentos Linux
El núcleo Linux apareció por primera vez en el año 1991 gracias a un estudiante de informática
finlandés llamado Linus Torvalds, quien liberó su núcleo en el año 1992. A partir de ese momento,
la evolución del núcleo junto con el software del proyecto GNU desembocó en lo que se conoce
como GNU/Linux, que ha tenido un amplio y profundo desarrollo hasta hoy día.
La portada de Ubuntu destaca por su aspecto visual, ya que tiene el soporte y mantenimiento
económico de la empresa Canonical. En su menú superior vemos como se pueden apreciar
diferentes productos, así como la zona de “Download”, que en su desplegable ya podemos elegir
que tipo de producto descargarnos.
Instalación máquina virtual
Una vez la aplicación está instalada vamos a crear una máquina virtual y procederemos a instalar
Ubuntu Desktop.
Lo primero que vamos a hacer es descargar la versión correspondiente de la web de Ubuntu:
Es recomendable utilizar versiones de 64 bits en las máquinas virtuales si contamos con los
suficientes recursos de ejecución y/o la distribución nos lo permite, puesto que algunas solo cuentan
con la versión de 32 bits.
Una vez descargada la ISO, procedemos a crear la nueva máquina virtual en Virtual Box.
En la pantalla principal, pulsamos el botón “Nueva”:
La siguiente pantalla nos permite establecer el disco duro que tendrá la máquina virtual. Le
crearemos un disco nuevo que tenga una capacidad de 8 Gb:
La siguiente pantalla nos permite seleccionar el tipo de fichero de imagen para la máquina virtual.
Existen varios tipos, pero escogeremos el formato nativo de Virtual Box, que es VDI:
La siguiente pantalla nos permite gestionar el tamaño del fichero de imagen en relación con el uso
de la máquina virtual, pudiendo escoger entre establecer desde un principio el tamaño fijo del
fichero o ir incrementando el tamaño en función de los datos que se escriban en la máquina virtual.
Escogeremos “Reservado dinámicamente”:
La siguiente pantalla nos permite establecer el tamaño del disco duro y la ubicación del fichero de
imagen. Dejamos los valores por defecto:
Y con esto finaliza la fase de creación de la máquina virtual. Lo siguiente que veremos es en la
pantalla principal la nueva máquina virtual ya creada en estado apagada. Para encenderla, podemos
pulsar el botón “Iniciar” del menú superior o bien con click derecho del ratón sobre la máquina
“Iniciar”:
Una vez iniciada por primera vez aparecerá una pantalla donde nos indicará que la unidad virtual de
CD-ROM está vacía, y nos permite la opción de poder cargarle una ISO a la unidad para la
instalación. Por tanto, en la ventana de disco de inicio pulsamos el icono de la carpeta con la flecha
verde hacia arriba para poder seleccionar la ISO de Ubuntu que nos hemos descargado
anteriormente:
Nota: Para poner la pantalla de la máquina virtual a pantalla completa y viceversa, Host + F (la tecla
host suele ser el Ctrl Derecha)
Instalando Ubuntu
La instalación del sistema operativo tiene muchas vertientes disponibles de configuración. Para
este caso concreto vamos a realizar la instalación estándar.
Una vez arrancada la máquina nos aparece una primera pantalla donde elegir el idioma y si
queremos probar Ubuntu o instalarlo directamente. Seleccionamos la opción de instalación:
En la siguiente pantalla seleccionamos las dos casillas para actualizar el equipo mientras se
instala e instalar el software de terceros:
En el tipo de instalación, dejamos la opción de borrar el disco e instalar Ubuntu sin otras opciones:
Tras darle a “Instalar ahora” nos aparecerá una ventana donde se nos indica el resumen de las
particiones que va a realizar en el disco para el sistema. Aceptamos y ya procedemos a instalar.
Durante la instalación terminaremos de configurar el sistema. La primera pantalla que nos aparece
es la zona horaria, donde habrá que establecer el País donde nos encontremos.
La siguiente pantalla nos consulta la distribución del teclado. Si no sabemos qué distribución de
teclado tenemos y queremos estar seguros basta con pulsar en el botón “Detectar la distribución
de teclado” donde, con una serie de preguntas, el sistema va a detectar y establecer de forma
automática qué distribución tenemos.
La última pantalla de configuración nos permite establecer tanto el nombre de la máquina como el
usuario que vamos a utilizar para acceder al sistema:
Tras esta pantalla comenzará la instalación que tarda un poco en finalizar. Una vez se haya
instalado, pulsamos el botón “Reiniciar Ahora” y finaliza la instalación reiniciando el equipo.
GNU/Linux permite muchas formas de poder acceder al sistema operativo, a través de interfaces
gráficas, consolas virtuales e incluso a través de la red.
En este curso vamos a explicar, gracias a nuestra máquina virtual, el método de acceso local
(interfaz gráfica y consola virtual) y el método de acceso en remoto a través del servicio ssh.
Método local:
Interfaz gráfica: Esta interfaz es la que nos aparece por defecto en el arranque del sistema
operativo Ubuntu. Nos permite ejecutar una terminal en modo gráfico
Terminal virtual: Este tipo de terminales se pueden visualizar en el sistema pulsando la
combinación de teclas Alt + Ctrl + F1-F6. Linux crea por defecto 6 terminales virtuales para poder
usar y dos displays gráficos, ubicados en Ctrl + Alt + F7-F8.
Método remoto:
SSH: Ssh es el acrónimo de Secure SHell y permite el acceso a una terminal de nuestro sistema a
través de la red con la característica de aportar seguridad gracias a la encriptación de sus
comunicaciones. Es un servicio de estructura cliente-servidor, donde el servidor abre el puerto 22
para admitir conexiones y el cliente utiliza la aplicación para conectarse a dicho puerto.
Comprender y gestionar la
estructura de directorios de Linux
COMANDOS BASICOS
Antes de pasar a los comandos para la navegación debemos comprender un poco
mejor como funciona el sistema de archivos y directorios.
Directorios y archivos
Una ruta señala la localización exacta de un archivo o directorio mediante una
cadena de caracteres concreta. En líneas generales se compondrá de los nombres
de los directorios que conforman el camino hasta nuestro archivo o directorio a
lo largo del árbol de directorios, y finalmente estará el nombre del archivo o
directorio al que se quiere llegar.
En Linux estos nombres estarán separados por el carácter delimitador "/".
El acceso a archivos y directorios se hace mediante rutas absolutas o rutas
relativas.
Las rutas absolutas señalan la ubicación de un archivo o directorio desde el
directorio raíz del sistema de archivos. Por ejemplo es una ruta
absoluta /home/usuario/prueba.txt que señala la ubicación del archvo de
texto prueba.txt desde la raíz del sistema de archivos.
root@maquina /home $ cat /home/usuario/prueba.txt
Linea 1
Linea 1
Linea 2
Linea 2
Linea 3
Linea 4
En este ejemplo dentro del directorio /home se hace uso de una ruta
absoluta para visualizar el archivo de texto prueba.txt
Las rutas relativas señalan la ubicación de un archivo o directorio a partir
de la posición actual en el sistema de archivos. Por ejemplo es una ruta
relativa usuario/prueba.txt que señala al archivo prueba.txt dentro del
directorio /home en la ubicación actual.
root@maquina /home $ cat usuario/prueba.txt
Linea 1
Linea 1
Linea 2
Linea 2
Linea 3
Linea 4
$ touch hola
$ ls -l
$ cd /home/usuario/Descargas/
$ mkdír -p documentos/curso/lpi/101
$ ls -l
$ ls -lh
total 1,3M
Permisos y propietarios
Ya hemos visto que con el comando ls podemos ver tanto los permisos como el
propietario y grupo al que pertenece un fichero o directorio. A continuación
vamos a explicar la política de identidad de los ficheros contenidos en el sistema
Linux:
# ls -l /etc/X11/
total 80
l : Enlace simbólico. Este archivo contiene el nombre de otro archivo o directorio.
c : Dispositivo especial de caracteres. Un archivo que corresponde a un
dispositivo de hardware el cuál transfiere los datos en unidades de un bit.
p : Se le denomina canal, ya que permite tener disponibles dos programas de
linux y que se puedan comunicar uno con el otro. Uno abre el canal para leer y
otro para escribir, permitiendo que los datos sean transferidos de uno a otro.
s : Socket. Es similar al llamado canal (p), pero éste permite redireccionar enlaces.
- : Archivo convencionalDebe ser texto, un archivo ejecutable, gráficos, etc.
definir
o global = x ejecución
igual que
ejecutar solo si el
fichero es un
a todos X
directorio o tiene
permisos de ejecución
s SUID o SGID
t sticky bit
permisos del
u
propietario existentes
permisos globales
o
existentes
chmod g-w,o-rw
rw-rw-rw- rw-r—–
report.txt
Gestión de ficheros
Encontrar ficheros y directorios
El Comando find
El comando find implementa un sistema de fuerza bruta para localizar ficheros ya
que realiza una búsqueda por todo el árbol de directorios especificado para
localizar los que satisfagan el criterio especificado. find tiende a ser lento pero es
flexible y tiene una mayor probabilidad de éxito.
find [ruta...] [expresión...]
Esta expresión devolverá todos los ficheros que coincidan con el criterio de
búsqueda.
Los usuarios normales pueden utilizar find, pero si carecen de permisos para listar
el contenido de un directorio, find devolverá un error junto con el nombre del
directorio.
El Comando locate
Esta utilidad funciona de forma similar a find pero difiere en dos aspectos
importantes:
Es mucho menos sofisticado en sus opciones de búsqueda ya que se utiliza
para buscar por el nombre de fichero con lo que el programa devuelve
todos los ficheros que contienen la cadena especificada.
Al trabajar con una base de datos es más rápido que find , sobre todo en las
búsquedas por todo el sistema. También es probable que devuelva muchas falsas
alarmas, especialmente si se quiere localizar un fichero con un nombre corto.
Algunas distribuciones utilizan slocate en vez de locate, que incluye
características de seguridad que impiden que los usuarios vean los nombres de
los ficheros o de los directorios a los que no tienen acceso. En la mayoría de los
sistemas con slocate, locate es un enlace aslocate.
El Comando whereis
Busca los ficheros en un conjunto restringido de localizaciones. Esta herramienta
no busca en directorios de usuario pero es un modo rápido de localizar
ejecutables de programas y ficheros relacionados como ficheros de
documentación o configuración. El programa whereis devuelve los nombres de
fichero que comienzan por aquello que se escribe como criterio de búsqueda,
incluso los ficheros que contienen extensiones, con frecuencia suele hallar los
ficheros de configuración de /etc , paginas MAN y ficheros similares. Para
localizar por ejemplo el programa ls, se escribirá:
whereis ls
El Comando which
Está considerado comando de búsqueda pero es poco potente. Busca la ruta del
comando escrito y la lista completa, desde la primera coincidencia que encuentre.
La opción -a permite buscar todas las coincidencias. Puede resultar útil, por
ejemplo, para saber la ruta completa de un programa que se desee llamar desde
un script.Realiza la búsqueda solamente en los directorios definidos en la variable
del entorno PATH.
$ which xterm
/usr/bin/xterm
Visualización de ficheros
Existen múltiples formas de visualizar ficheros con Linux, con diferentes tipos de
criterios a la hora de visualizarlos.
Linea 1
Linea 2
Linea 3
El comando cuenta con varias opciones, entre las que se destacan las mas
importantes:
-b añade el número de línea en la salida. Si hay líneas vacias, no las cuenta.
-E muestra el signo dolar ($) al final de cada línea. Util para scripts.
-n similar a la opción -b con la diferencia que si cuenta las líneas vacias.
-T muestra el simbolo ^I para las tabulaciones en el fichero.
tac: Tiene la misma función del comando cat pero muestra el contenido
de forma inversa.
tac prueba.txt
Linea 3
Linea 2
Linea 1
Linea 1
Linea 2
Linea 3
nl: Numera las líneas en los ficheros. Algunas de sus opciones son las
siguientes:
2 Linea 1
3 Linea 2
4 Linea 3
Linea 1
Linea 1
Linea 2
Linea 2
Linea 3
Linea 4
$ uniq prueba.txt
Linea 1
Linea 2
Linea 3
Linea 4
Linea 1
Linea 1
Linea 2
Linea 2
Linea 3
Linea 4
$ sort -r prueba.txt
Linea 4
Linea 3
Linea 2
Linea 2
Linea 1
Linea 1
No nos podemos meter en la piel de nadie, por mucho que nos parezca haberlo logrado mediant
$ fmt parrafo.txt
No nos podemos meter en la piel de nadie, por mucho que nos parezca
en su cumbre de espuma.
cumbre de espuma.
Linea 2
Linea 3
Edición de ficheros
Modo de navegación
Es el modo inicial de Vim . En éste, las teclas del teclado actúan básicamente para
la navegación y edición de bloques de texto. Generalmente los comandos son
letras únicas. Si viene precedido por un número, el comando se repetirá de
acuerdo con el valor de este número. Algunas teclas comunes utilizadas en el
modo de navegación son:
O, $ - Inicio y final de línea
u - Deshacer
ZQ - Cierra y no guarda.
Modo de inserción
La manera más común de entrar en el modo de inserción es por medio de la tecla
[i] o [a] , ya sea en mayúscula o minúscula. Es el modo más intuitivo usado para
escribir texto en un documento. La tecla [ESC] sale del modo de inserción y
vuelve al modo de navegación.
Modo de comando
Accesible al pulsar la tecla [:] en el modo de navegación. Se utiliza para realizar
búsquedas, guardar, salir, ejecutar comandos en el shell, modificar
configuraciones de VI , etc.
Para volver al modo de navegación se utiliza la instrucción visual o simplemente
se pulsa [Enter] con la línea vacía. A continuación se muestran los comandos de
VI :
:! Permite ejecutar un comando del shell.
Gestión de ficheros
Las herramientas de gestión de ficheros en Linux nos permiten realizar las tareas
cotidianas de eliminación, copia, movimiento y renombramiento de ficheros y
directorios. Vamos a explicar a continuación cuales son estas herramientas y sus
opciones de uso, tanto en el ámbito local como en el ámbito de red:
Introducción
Los flujos, la redirección y las tuberias son algunas de las herramientas más
potentes de la línea de comandos. Linux trata la entrada y salida de comandos
como un flujo (datos que podemos manipular). Normalmente la entrada es el
teclado y la salida la pantalla, pero se pueden redirigir estos flujos de entrada y
salida hacia otros comandos o archivos. La tuberia [ | ] se utiliza para redirigir la
salida de un comando hacia otro. Esto supone una magnífica herramienta de
conexión entre comandos, lo cual permite realizar tareas complejas combinando
varias herramientas sencillas.
Para empezar a entender el redireccionamiento y tuberías hay que comprender
primero los diferentes tipos de flujos de entrada y salida. Todo comando en Linux
posee tres canales básicos por donde fluye la información y estos canales son:
Entrada Estándar , en inglés standard input ( stdin ) es el mecanismo por el
cual un usuario le indica a los programas la información que estos deben
procesar. Esta información suele introducirse por el teclado. Ejemplos:
$ cat
$ wc
Al ejecutar estos ejemplos sin argumentos el comando espera a que el
usuario inserte información para posteriormente procesarla, dicha
información de entrada debe ser proporcionada por la entrada estándar, en
este caso por el teclado.
Salida Estándar , en inglés standard output ( stdout ) es el método por el
cual el programa puede comunicarse con el usuario. Por defecto la salida
estándar es la pantalla donde se ejecutan dichos comandos. Ejemplos:
$ ls -l /etc/hosts /etc/passwd
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
Error Estándar , en inglés standard error output ( stderr ) es utilizado para
mostrar mensajes de error que surjan durante el transcurso de su
ejecución. Al igual que stdout, stderr será la pantalla donde se procesaron
las instrucciones. Ejemplos:
$ rm esteArchivoNoExiste
$ rmdir /carpetaInexistente
Redireccionamiento
Para redireccionar la salida estándar de un comando a un archivo se utiliza el
símbolo > después del cual debe indicarse el nombre del archivo que se creará:
$ cat /etc/passwd > copia_passwd
xaa xab
Muestra un error porque no existe ningún archivo que empiece por z y muestra
los archivos que empiezan por x
$ ls x* z* >stdout.txt 2>stderr.txt
yaa yab
xaa
xab
yaa
yab
Tubería (pipe)
Es posible enviar la salida de un comando a la entrada de otro comando,
utilizando el carácter de tubería [ | ]. Por ejemplo:
$ cat /home/usuario/prueba.txt | grep -i linea
Sustitución de Comandos
También es posible utilizar la salida de un comando como argumento para otro,
utilizando comillas ejecutivas [ ` ] (en el teclado se ubica en la tecla de apertura
de corchetes):
$ ls -ld `echo $PATH|tr ':' ' '`
Las herramientas que suelen utilizarse para el uso de expresiones regulares son
grep y sus derivadas.
Comando grep
Muchos programas soportan el uso de estos elementos y el comando grep es el
más común para realizar búsquedas en textos mediante patrones. Algunos
caracteres tienen un significado especial en expresiones regulares como se
muestra a continuación:
^ Inicio de línea.
$ Final de línea.
. (punto) Cualquier carácter
* Cualquier secuencia de cero o más caracteres.
[ ] Cualquier carácter que esté presente en los corchetes.
Un uso común del comando grep es mostrar el contenido de archivos de
configuración ignorando únicamente las líneas que corresponden a los
comentarios, es decir, las líneas que se inician con el carácter almohadilla [#]. Para
hacer esto, es necesario añadir el parámetro -v que invierte el patrón de
busqueda, seleccionando las líneas que no coincidan con el patrón.
Por ejemplo, para hacerlo con el archivo /etc/default/grub :
$ grep -v '^#' /etc/default/grub
Expresiones regulares
Bueno en esta guía os quería explicar de forma mas clara y con ejemplos explicados que es esto de las expresiones
regulares. Para comenzar lo primero que hay que aclarar es la diferencia entre expresiones regulares y patrones de
ficheros, ya que se pueden confundir y a nivel funcional son diferentes. Las expresiones regulares son las utilizadas
para buscar un texto dentro de un fichero, mientras que los patrones de ficheros son normalmente los argumentos
pasados a los comandos como rm, cp, mv, etc. para hacer referencia a varios ficheros en el disco duro. Por tanto,
podemos concluir en que tenemos un grupo de comandos que serán los que utilicen expresiones regulares y que están
orientados al tratamiento de texto: grep, egrep, ed, sed, awk, vi, etc...
Existen dos tipos de expresiones regulares: las básicas y las extendidas. Como se puede deducir de su nombre las
extendidas otorgan muchas mas opciones a la hora de tratar con los patrones a buscar. Antes de comenzar con la guía y
ver ejemplos vamos a ver todas las expresiones regulares así como las reglas de uso de estas mismas:
Reglas
Cuando hablamos de expresiones, estas pueden ser un carácter, un conjunto de caracteres o un metacáracter.
Para utilizar las expresiones regulares es necesario ponerlas entre comillas simples ' '
Para usar las expresiones regulares extendidas, es necesario otorgar al comando la funcionalidad. Por ejemplo, para
el comando grep es necesario utilizar la opción -E o utilizar directamente el comando egrep, y para el
comando sed es necesario añadirle la opción -r.
Los caracteres son tratados de forma literal, es decir, que concuerdan consigo mismo. Por ejemplo x concuerda con
x, abc concuerda con abc, etc...
La excepción a la regla anterior esta en los metacaracteres:
.[]^$*()\
Para utilizar estos metacaracteres como literales, es necesario escaparlos, esto se consigue antecediendole el
metacaracter de barra invertida \
A continuación seguiremos viendo algunas reglas más en conjunto de las diferentes expresiones regulares. Estas
expresiones se pueden subdividir en varias categorías, que son las siguientes:
Expresiones regulares básicas de un solo carácter
Dentro de esta categoría tenemos las siguientes expresiones:
Expresión regular Concuerda con....
. Cualquier carácter
[] Cualquiera de los caracteres que estén dentro de los corchetes
[^ ] Cualquiera de los caracteres que NO estén dentro de los corchetes
^ El principio de línea
$ El final de la línea
* Cero o mas ocurrencias de la expresión anterior (izquierda)
\( \) Permite agrupar varias expresiones regulares
\ Escapa un metacarácter
Estas expresiones tienen las siguientes reglas especiales:
Dentro de los corchetes [ ] los metacaracteres pierden su función especial y se tratan como literales.
Hay varias excepciones a la regla anterior. Por ejemplo el carácter del “sombrerito” si se pone al inicio del corchete
gana una funcionalidad diferente, como hemos visto en la tabla anterior.
Expresiones regulares básicas de repetición
Podemos repetir una expresión regular tantas veces como queramos con la secuencia \{ \}. Esta repetición se puede
realizar de las siguientes formas:
Constructor Proposito
\{n\} Concuerda exactamente con n ocurrencias de la expresión anterior
\{n,\} Concuerda con la menos n ocurrencias de la expresión anterior
\{n, m\} Concuerda con entre n y m ocurrencias de la expresión anterior
Pongamos un ejemplo rápido de este tipo de expresiones. Por ejemplo para buscar números de tres cifras podemos
utilizar [0-9]\{3\}. Esto significa que repetirá 3 veces la búsqueda de números del cero al nueve, podría igualarse a [0-9]
[0-9] [0-9]
Expresiones regulares extendidas
Como hemos visto antes, para poder utilizar estas expresiones es necesario darle al comando que se ejecuta el soporte
para poder usarlas. Antes de comenzar a verlas, es necesario ver reglas de conversión:
El uso de las barras invertidas en los corchetes y los paréntesis no sirve en las expresiones regulares extendidas.
Esto quiere decir que lo que hemos visto antes de \( \) y \{ \} ahora se debe poner de este modo: ( ) y { }. Si
queremos que sean caracteres literales es necesario escaparlos.
Expresiones regulares extendidas de un solo carácter
En este grupo se agregan las siguientes expresiones:
Expresión regular Concuerda con...
+ Una o mas ocurrencias de la expresión anterior (izquierda)
? Cero o una ocurrencia de la expresión anterior (izquierda)
Expresiones regulares extendidas de alternancia
Con el metacarácter tubería | podemos alternar entre dos expresiones regulares. Por ejemplo si queremos buscar una
palabra que sea abc o bbc podemos indicarlo del siguiente modo (a|b)bc
Expresiones regulares extendidas de etiquetado
Un etiquetado consiste en referenciar una expresión regular en otro lugar del patrón de búsqueda. Para etiquetar una
expresión regular debemos hacer uso de los paréntesis ( ) y luego para referenciar esa expresión debemos indicarlo con \
n siendo n el número de la etiqueta en orden ascendente comenzando por uno (pueden existir varias etiquetas dentro del
patrón).
Por ejemplo la expresión (.)e\1e concuerda con pepe y con nene
Otros metacaracteres utilizados en las expresiones regulares extendidas
Existen otros metacaracteres para las expresiones regulares extendidas, entre los cuales solamente vamos a ver uno muy
utilizado que hace referencia a la delimitación entre el principio y el fin de una palabra. Para referenciar el principio se
debe usar \< y para referenciar el final \>
Casos prácticos
Bueno, una vez visto todo esto, vamos al caso práctico! Vamos a utilizar este texto para nuestros ejemplos:
Primeros pasos
Si desea empezar a usar Debian, puede obtener fácilmente una copia y seguir la Guía de Instalación para instalarla.
Si está actualizando a la última versión estable desde una versión anterior, por favor, lea las Notas de Publicación antes
de hacerlo.
Para obtener ayuda sobre el uso o instalación de Debian, consulte nuestras páginas de documentación y soporte.
Los usuarios que hablen en idiomas que no sean el inglés deberían echar un vistazo a nuestra sección internacional.
Los usuarios que usen sistemas distintos de Intel x86 deberían revisar la sección de adaptaciones a otras arquitecturas.
RSS
Últimas noticias.
[28 de sep de 2013] Debian Edu / Skolelinux Wheezy - una solución completa basada en Linux para la escuela
URLs
http://ftp.debian.org/debian/dists/wheezy/ChangeLog
http://ftp.debian.org/debian/dists/stable/
http://ftp.debian.org/debian/dists/proposed-updates
https://www.debian.org/releases/stable/
https://security.debian.org/
Lo primero que vamos a hacer para esta guía es configurar el comando grep con la opción de color. Esto nos va a
ayudar mucho a saber realmente lo que estamos filtrando con el patrón que hemos puesto. Para activar esta opción se
puede hacer de dos formas: o bien con la variable de entornoGREP_OPTIONS contenga el valor --color o bien
creando un alias al comando alias grep='grep --color=always'.
$ export GREP_OPTIONS='--color'
Comenzamos con el ejemplo mas básico que es buscar una palabra concreta. En este caso vamos a buscar la palabra
“Debian”:
$ grep 'Debian' texto
Si desea empezar a usar Debian, puede obtener fácilmente una copia y seguir la Guía de Instalación para instalarla.
Para obtener ayuda sobre el uso o instalación de Debian, consulte nuestras páginas de documentación y soporte.
[28 de sep de 2013] Debian Edu / Skolelinux Wheezy - una solución completa basada en Linux para la escuela
Como podemos apreciar, no nos ha cogido las palabras “debian” que existen en el texto. Esto se debe a que, como ya
sabemos, Linux discrimina entre mayúsculas y minúsculas. Para ignorar esta discriminación, debemos ponerle al
comando grep la opción -i
Esto mismo podriamos abordarlo del siguiente modo, aunque no es el mas correcto. Usando el punto podemos sustituir
cualquier carácter dentro del patrón de búsqueda, por tanto:
$ grep '.ebian' texto
Si desea empezar a usar Debian, puede obtener fácilmente una copia y seguir la Guía de Instalación para instalarla.
Para obtener ayuda sobre el uso o instalación de Debian, consulte nuestras páginas de documentación y soporte.
[28 de sep de 2013] Debian Edu / Skolelinux Wheezy — una solución completa basada en Linux para la escuela
http://ftp.debian.org/debian/dists/wheezy/ChangeLog
http://ftp.debian.org/debian/dists/stable/
http://ftp.debian.org/debian/dists/proposed-updates
https://www.debian.org/releases/stable/
https://security.debian.org/
De este modo buscaría cualquier palabra que contenga cualquier carácter seguido de “ebian”.
Ahora vamos a complicarlo mas. Vamos a realizar una búsqueda de todas las líneas que contengan la fecha de release
pertenecientes a los dias 10 hasta el 19 de cualquier mes. Analizando el texto debemos notar que la expresión debe
coincidir los números al inicio de línea. Viendo la estructura del fichero lo podemos acometer del siguiente modo:
$ grep '^\[1[0-9]' texto
El acento circunflejo ^ lo utilizamos para indicar que la expresión se debe buscar al inicio de linea,
despues escapamos el corchete para hacerlo literal, a continuación ponemos el uno y luego un rango que comprenda
entre el 0 y el 9.
Lo siguiente que vamos a ver es el uso de una expresión regular extendida, que va a ser la interrogación. Por ejemplo,
vamos a seleccionar las líneas que contengan tanto http como https. Para ello construimos el patrón del siguiente modo:
$ grep -E 'https?' texto
http://ftp.debian.org/debian/dists/wheezy/ChangeLog
http://ftp.debian.org/debian/dists/stable/
http://ftp.debian.org/debian/dists/proposed-updates
https://www.debian.org/releases/stable/
https://security.debian.org/
La interrogación permite que el carácter que esta a su izquierda sea opcional, por tanto nos va a buscar tanto cadenas
http como https.
Para comprender como funciona el metacarácter + vamos a ver una sucesión de comandos para poder comprenderlo:
$ cat texto | cut -d " " -f 1-5 |grep -E '[0-1]+'
[8 de feb de 2014]
$ cat texto | cut -d " " -f 1-5 |grep -E '[0-2]+'
[8 de feb de 2014]
$ cat texto | cut -d " " -f 1-5 |grep -E '[0-3]+'
[8 de feb de 2014]
$ cat texto | cut -d " " -f 1-5 |grep -E '[0-4]+'
[8 de feb de 2014]
Si desea empezar a usar Debian, puede obtener fácilmente una copia y seguir la Guía de Instalación para instalarla.
Si está actualizando a la última versión estable desde una versión anterior, por favor, lea las Notas de Publicación antes
de hacerlo.
Para obtener ayuda sobre el uso o instalación de Debian, consulte nuestras páginas de documentación y soporte.
Los usuarios que hablen en idiomas que no sean el inglés deberían echar un vistazo a nuestra sección internacional.
Los usuarios que usen sistemas distintos de Intel x86 deberían revisar la sección de adaptaciones a otras arquitecturas.
[28 de sep de 2013] Debian Edu / Skolelinux Wheezy — una solución completa basada en Linux para la escuela
URLs
http://ftp.debian.org/debian/dists/wheezy/ChangeLog
http://ftp.debian.org/debian/dists/stable/
http://ftp.debian.org/debian/dists/proposed-updates
Como podemos apreciar, con los delimitadores \< y \> hacemos que solo encuentren un carácter comprendido entre la a
y z tanto minúscula como mayúscula repetida la secuencia 4 veces.
Ahora algo mas complicado, vamos a seleccionar las líneas que tengan frases de dos palabras. Para ello lo primero a la
hora de montar la expresión regular es saber que una palabra es una serie de letras consecutivas. Para afrontarlo como
patrón de búsqueda podriamos indicar [a-zA-z]+
Lo siguiente que debemos entender que entre palabras hay un espacio, por tanto lo siguiente que deberiamos buscar
sería cualquier cosa que no sea una letra, también hay que tener en cuenta que el final de la frase entendemos que se
realiza con un punto, por tanto [^a-zA-Z]
Bien, ya tenemos una palabra y un espacio/punto. Ahora para saber una frase de dos palabras lo único que tendriamos
que indicarle es que se repitiera 2 veces, pero claro, si lo ponemos de forma literal no va a comprender lo que queremos
realizar. Por tanto es necesario agrupar las dos expresiones anteriores para realizar la repetición y delimitándolas para
que entienda que es una frase, quedando una cosa asi:
$ grep -E '^([a-zA-Z]+[^a-zA-Z]){2}$' texto
Últimas noticias.
Si analizamos la expresión regular, el inicio de la frase lo expresamos con ^ y el final con $. Lo siguiente es entre
paréntesis la unión de una letra con un espacio o un punto, y ese conjunto se repite dos veces.
Espero que esta guía os haya servido. La he acortado en esta segunda edición de ejemplos, creo que en la otra me
quedaron mas, pero bueno si necesitais algun ejemplo concreto de algún metacarácter, solo teneis que decirmelo.
Procesos y usuarios
Procesos y trabajos
En el sistema Linux, cuando una aplicación se ejecuta genera lo que llamamos un
proceso. Este proceso tiene un identificador de proceso (PID) y, si la propia
aplicacion ejecuta otra aplicación, generará otro proceso hijo de la aplicación
inicial, que también tendrá su propio (PID).
Esta regla tiene la excepción de los programas internos de la shell, que como ya
vimos en el apartado de la shell, utilizan el propio PID de la shell para su
ejecución.
A continuación veremos las diferentes aplicaciones que se utilizan en Linux para
monitorizar y gestionar procesos.
Monitorizar procesos
Pueden utilizarse diversos comandos para inspeccionar procesos y son
especialmente útiles para localizar y finalizar procesos que no son necesarios o
son sospechosos.
Una de las herramientas más importantes de administración de procesos es el
comando ps , que muestra el estado de los procesos. Incluye algunas opciones
muy útiles y ayuda a monitorizar lo que está ocurriendo en el sistema. Su sintaxis
es bastante simple:
ps [options]
Como programa se debe especificar el nombre del programa cuyo PID deseemos
consultar. El PID puede ser uno solo o varios, ya que un programa puede tener
distintos procesos en ejecución relacionados entre sí (procesos padre e hijos).
Ejemplo de pidof:
$ pidof chrome
Otra aplicación que permite visualizar los procesos filtrando por cierto criterio es
el programa pgrep . Funciona de un modo similar al comando grep pero esta
variante permite filtrar procesos según un criterio dado. La sintaxis básica es la
siguiente:
pgrep [-flvx] [-d delimitador] [.n|-o] [-P ppid] [-g pgrp,...] [-s sid,...] [-u euid,...] [-U uid,...] [-G gid,...] [-t term,...]
[patrón]
4532
19485
Finalizar procesos
Un programa puede llegar a quedarse totalmente sin respuesta o bien puede
ocurrir que se desee finalizar un programa que no debería estar arrancado. En
estos casos el comando kill es la herramienta a usar.
Este comando envía una señal (es un método que Linux usa para comunicarse
con los procesos) a un proceso. La señal estándar cuando no se informa ninguna
señal es SIGTERM, con el valor numérico 15 que solicita al programa en cuestión
su finalización. El proceso no necesariamente obedece a la señal a menos que la
señal sea SIGKILL. En algunos casos la señal SIGHUP puede interpretarse como
orden para que el proceso lea nuevamente su(s) archivo(s) de configuración.
Por ejemplo, para enviar la señal SIGTERM al proceso número 4902:
# kill -SIGTERM 4902
[2] 23055
¿Qué es cron?
Cron es el nombre del programa que permite a usuarios Linux/Unix ejecutar
automáticamente comandos o scripts (grupos de comandos) a una hora o fecha
específica. Es usado normalmente para comandos de tareas administrativas,
como respaldos, pero puede ser usado para ejecutar cualquier cosa.
Cron es el demonio del sistema con el que se programan acciones en base al
tiempo. Las realiza cada hora, día, semana, mes y con cierto intervalo de días,
desde segundo plano, siempre y cuando el sistema se encuentre en modo
multiusuario. Para esto, debe leer el archivo llamado crontab, que se localiza
normalmente en /etc o algún otro directorio, dependiendo de la versión de Unix
que se maneje.
Entendiendo el papel de cron
El programa cron es un demonio, por lo que funciona de forma continua, en
busca de eventos que hacen que entre en acción. A diferencia de la mayoría de
los demonios, que son los servidores de red, cron responde a eventos
temporales. En concreto, se "despierta" una vez por minuto, examina los archivos
de configuración en los directorios /var/spool/cron y /etc/cron.d y el archivo
/etc/crontab y ejecuta los comandos especificados por estos archivos de
configuración si el tiempo coincide con la hora indicada en estos archivos.
Se pueden agregar comandos o scripts como tareas de cron para automatizar
algunos procesos. Esto es útil por ejemplo para automatizar la actualización de un
sistema o establecer un robusto sistema de copias de seguridad.
Existen dos tipos de tareas de cron: tareas cron del sistema y tareas cron de
usuario. Las tareas de cron del sistema se ejecutan como root y se convierten en
tareas de mantenimiento del sistema. Por defecto, la mayoría de las
distribuciones incluyen tareas cron del sistema que limpian los archivos antiguos
del /tmp, realizan rotaciones de logs, y demás tareas de mantenimiento.
Normalmente los usuarios pueden crear tareas cron de usuario, las cuales
ejecutarán algunos programas de usuario habituales. Se pueden crear tareas cron
de usuario como root, las cuales pueden ser útiles si se necesita realizar alguna
tarea en algún momento no cubierto por las tareas cron del sistema, que están
programadas de forma mas rígida.
Una de las cuestiones críticas de las tareas del cron es que se ejecutan sin
supervisión. Por lo tanto, no se debe incluir cualquier programa en una tarea
programada si el programa requiere intervención del usuario. Por ejemplo, no se
podría ejecutar un editor de texto en una tarea cron, pero es posible ejecutar un
script que manipule automáticamente los archivos de texto.
donde:
m corresponde al minuto en que se va a ejecutar el script, el valor va de 0
a 59.
dom hace referencia al día del mes, por ejemplo se puede especificar 15 si
se quiere ejecutar cada dia 15.
mon hace referencia al mes del año en el que se desea ejecutar, puede ser
un valor numérico (1-12) o los tres primeros caracteres en inglés (Jan-Dec).
user define el usuario que va a ejecutar el comando, puede ser root, u otro
usuario diferente siempre y cuando tenga permisos de ejecución del script.
Ejemplos:
15 10 * * * usuario /home/usuario/scripts/actualizar.sh
Usuario root ejecutará una actualización todos los domingos (sunday) a las 10:45
de la mañana.
30 7 15 12 * usuario /home/usuario/scripts/actualizar.sh
Si se utiliza sin el parámetro -u, crontab modifica la tarea cron asociada con el
usuario actual. La utilidad crontab puede llegar a ser confusa por el uso del
comando su para cambiar la identidad del usuario, por lo que es recomendable
usarla con el parámetro -u.
Si se desea trabajar directamente con una tarea cron, se debe usar la opción -l, -r
o -e.
La opción -l causa que crontab muestre la tarea de cron actual.
La opción -e abre un editor (el editor vi por defecto) para que se pueda
editar la tarea cron actual.
Permisos ejecutables
El acceso a la utilidad cron puede ser restringido de varias maneras.
Los permisos de los programas de cron y crontab pueden ser restringidos usando
mecanismos estándar en Linux. No todas las distribuciones se configuran de esta
forma, pero en aquellas que lo hacen, los usuarios deben ser capaces de
programar los trabajos concron y añadirse al grupo apropiado.
Este grupo normalmente se le llama cron, pero se debe verificar el propietario del
grupo y los permisos en el directorio /usr/sbin/cron y /usr/bin/crontab para
estar seguro. El archivo /etc/cron.allow contiene una lista de usuarios a los que
se le permite el acceso a cron.
Si este archivo está presente, solo los usuarios cuyos nombres aparecen en la
lista pueden usar cron y al resto se les deniega el acceso. Si el archivo no está
presente cualquiera podrá usar cron asumiendo que el acceso no está restringido
por permisos ejecutables o lista de usuarios no permitidos.
La lista a los que no se les permite el acceso está en el archivo /etc/cron.deny. Si
este fichero está presente a cualquier usuario cuyo nombre aparezca en la lista
tendrá el acceso denegado a cron, pero el resto podrá utilizarlo, asumiendo que
los permisos ejecutables y los usuarios de la lista permitida no tienen el acceso
restringido.
Gestión de usuarios
Los usuarios del sistema es uno de los aspectos fundamentales de GNU/Linux.
Debido a que GNU/Linux es multiusuario, la gestión de estos en el sistema se
torna sumamente importante en el aspecto tanto de la propia gestión como de la
seguridad del sistema. Podemos identificar 3 perfiles de usuarios en un sistema
Linux:
Usuarios normales: Estas son las cuentas de los usuarios personales. Cada
usuario dispone de un directorio de trabajo que se ubica generalmente
en /home. Estas cuentas de usuario tienen todos los privilegios solo en su
espacio de trabajo, por tanto pueden personalizar su entorno modificando
ficheros relacionados con el inicio de sesión.
# su - usuario2
Enter password:
# See the man page for details on how to write a sudoers file.
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
#includedir /etc/sudoers.d
Este fichero sólo puede ser editado como root con el comando “visudo”. Para
utilizar el comando sudo, la sintaxis es similar a su:
# sudo usuario2
Instalación de Software
La gestión de software de Linux es una de las bazas más importante de las que
usar software libre. Como su propio indica, al ser libre los sistemas Linux utilizan
los llamados repositorios de paquetería para nutrirse de aplicaciones. Estos
repositorios son servidores web esparcidos por internet donde cuentan con el
almacenamiento de todos los paquetes de las distribuciones. De este modo,
cualquier usuario de Linux se podrá descargar de una forma cómoda y sencilla
cualquier aplicación, sin tener que buscar por páginas web dicho software.
El sistema cuenta con varias formas de poder obtener este software. A nivel
gráfico en Ubuntu contamos con la herramienta centro de software, y en otros
sistemas está la famosa aplicación Synaptics para la gestión. Nosotros para este
curso vamos a ver la herramienta utilizada en sistemas Debian para la gestión de
paquetería llamada apt.
El comando apt posee las siguientes características:
Facilita la actualización del sistema de una forma sencilla.
Lo sentimos, pero no ha conseguido sobrepasar el porcentaje necesario para aprobar el examen (80%).
Recuerda que hasta mañana no podrás volver a intentarlo.
Estas son las preguntas y tus resultados
Pregunta Resultado
¿Que secuencias de caracteres permite salir y salvar un fichero dentro de Vim? Correcto
¿Cual de los siguientes es el directorio donde se almacenan los datos de los usuarios
Correcto
normales del sistema?
¿Con cual de los comandos apt podemos actualizar las cabeceras de repositorios en
Incorrecto
nuestra máquina?
Estoy ejecutando "sudo apt-get install vim" y en la consola me pide una contraseña,
Incorrecto
¿Que contraseña debo poner?
Cada vez que se elimina un fichero del sistema con el comando rm siempre pide
Incorrecto
confirmación antes de borrarlo, ¿que puede estar pasando?
Tenemos un fichero de texto con una lista de nombres llamada usuarios.txt que
queremos ordenar. ¿Con cual de los siguientes comandos podemos acometer dicha Correcto
tarea?
En el editor de textos Vim, ¿en que modo nos encontramos nada mas ejecutar la
Incorrecto
aplicación?
Pregunta Resultado
¿Que comando se utiliza para visualizar los trabajos (jobs) en Linux? Correcto
Para ver las últimas diez líneas de un fichero se emplea el comando.... Incorrecto
¿Que parámetro del comando ls nos permite ver los ficheros ocultos del sistema? Incorrecto
Según el estándar FHS, el directorio que contiene los ficheros de configuración del
Incorrecto
sistema así como de los servicios instalados es....
Indica de los siguientes comandos cuales son los que se utilizan para buscar ficheros
Correcto
en el sistema
Queremos sacar dos ficheros de log del script foobar.sh, un fichero con el log normal
Incorrecto
y otro fichero con el log de errores, ¿cual de estas opciones es la mas acertada?