Diferencia entre revisiones de «Página principal»
Línea 130: | Línea 130: | ||
Finalmente, si tenemos archivos muy grandes, podemos añadir la opciónh que nos muestra el tamaño en Kb | Finalmente, si tenemos archivos muy grandes, podemos añadir la opciónh que nos muestra el tamaño en Kb | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ''Resultado de usar la instrucción ls con las opciones l, a y h'' | ||
+ | Hay muchas más opciones disponibles que se pueden consultar haciendo ls –help | ||
+ | |||
+ | |||
+ | |||
+ | === Que alguien me eche una MANo === | ||
+ | Las opciones que hemos visto del comando ls son sólo algunas de las muchas disponibles para este comando. Esto es habitual en muchos otros comandos, por lo que a menudo se hace difícil recordar todas las opciones. Además de la opción –help en Linux es posible obtener ayuda acerca del uso de un comando a través del manual al que se puede acceder a través del comando man seguido del nombre del comando. Así, man ls mostraría el manual de uso de ls, más completo que ls –help | ||
+ | Para abandonar la visualización de las páginas del manual, pulsa la tecla ‘q’. | ||
+ | |||
+ | === ¿Dónde estoy? === | ||
+ | Dada la complejidad de la estructura del sistema de ficheros de Linux, siempre cabe la posibilidad de que en algún momento, después de navegar por él, no sepamos exactamente cuál es nuestro directorio actual. Siempre podemos conocerlo a través del comando pwd (print working directory). | ||
+ | |||
+ | === Limpiando la pantalla === | ||
+ | Para limpiar la pantalla utilizaremos el comando clear. | ||
+ | |||
+ | === Finalizar la sesión === | ||
+ | Para finalizar la sesión de Linux usaremos la instrucción logout. | ||
+ | |||
+ | === ¿Da pereza teclear tanto? === | ||
+ | Uno de los inconvenientes de la línea de comandos es la necesidad de especificarlo todo con mucho más detalle que, por ejemplo, en una interfaz gráfica. Pueden resultar especialmente complicados la especificación de rutas o ciertos nombres de fichero. Para facilitar la escritura de órdenes, bash ofrece un mecanismo automático de completado de texto mediante el tabulador. | ||
+ | |||
+ | El intérprete intenta completar dependiendo de lo que se haya tecleado, aunque lo más habitual es que primero intente buscar un comando y luego un fichero o directorio. Por ejemplo, supongamos que queremos listar el contenido del directorio /usr/local/bin aprovechando esta característica. | ||
+ | 1. Escribimos ‘ls /u’ y pulsamos el tabulador. Automáticamente se completa la ruta como /usr/. | ||
+ | 2. Añadimos a la ruta una ‘l’ (/usr/l) y pulsamos el tabulador. Bash hace sonar una señal de aviso para indicar que hay más de una forma posible de completar el texto. Pulsando de nuevo el tabulador nos muestra las tres posibilidades, que son tres directorios que comienzan por ‘l’ debajo de /usr. | ||
+ | 3. Tecleamos una ‘o’ haciendo que la ruta quede como /usr/lo y pulsamos el tabulador. Como la ambigüedad ha quedado resuelta, el texto se completa como /usr/local/. | ||
+ | 4. Finalmente, escribimos una ‘b’ y pulsamos de nuevo el tabulador. La ruta se vuelve a completar quedando como /usr/local/bin. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | = Gestión de archivos y directorios = | ||
+ | |||
+ | == Directorios == | ||
+ | |||
+ | Como hemos visto, la estructura del sistema de ficheros de Linux permite ordenar la información en directorios que pueden contener ficheros u otros directorios a su vez. Para poder manipular esta estructura, es necesario disponer de comandos que permitan crear, borrar directorios y moverse a través de ellos. | ||
+ | |||
+ | === Cambiar de directorio === | ||
+ | Uno de los comandos más utilizados es cd (change directory) que permite cambiar el directorio actual y, de este modo, navegar por el sistema de ficheros. Este comando se usa de la siguiente manera: | ||
+ | cd [camino][directorio] | ||
+ | El camino nos indica la manera de llegar al directorio al que queremos ir. Si está en el directorio donde nos encontrarnos, entonces no hará falta especificar el camino. Antes de verlo con un ejemplo, vamos a ver algunos “directorios” especiales. | ||
+ | Si queremos ir al directorio inmediato superior pondremos .. (dos puntos seguidos) | ||
+ | Si queremos ir al directorio raíz, pondremos / (barra) | ||
+ | Y ahora vemos algunos ejemplos. Cuando accedemos al sistema, por defecto aparecemos en nuestro directorio, situado en /home/user Si queremos ir al directorio superior (/home) escribiremos cd .. | ||
+ | Con el comando pwd podemos comprobar en todo momento donde nos encontramos. | ||
+ | Ahora, si hacemos cd user volveremos de nuevo a nuestro directorio y, desde ahí, si escribimos cd /usr/bin iremos al directorio bin que se encuentra dentro del directorio usr que está en el directorio raíz. | ||
+ | Finalmente, para volver a nuestro directorio, podemos escribir cd sin nada más y nos llevará directamente. La siguiente imagen es una captura de pantalla de un terminal Linux donde hemos realizado las operaciones que acabamos de ver. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ''Captura de pantalla de los ejercicios de práctica con el comando cd'' | ||
+ | |||
+ | Prueba a navegar por el sistema de ficheros utilizando diferentes métodos para indicar el destino. Si te pierdes, puedes utilizar el comando cd sin parámetros y te devolverá a tu directorio de trabajo. | ||
+ | |||
+ | |||
+ | === Crear directorios === | ||
+ | El comando mkdir permite crear nuevos directorios. | ||
+ | |||
+ | === Eliminar directorios === | ||
+ | Se realiza mediante el comando rmdir. Los directorios deben estar vacíos para poder ser eliminados. | ||
+ | |||
+ | === Mover y renombrar directorios === | ||
+ | Podemos mover un directorio de sitio usando el comando mv de la siguiente manera: | ||
+ | mv [camino]directorioOrigen [camino][directorioDestino] | ||
+ | Es obligatorio poner un origen y un destino. Si se especifica un nombre de directorio de destino, entonces no sólo se mueve, también se le cambia el nombre. Esa característica hace que cambiar el nombre de un directorio sea tan sencillo como hacer: | ||
+ | mv nombreActual nombreNuevo | ||
+ | Los directorios se mueven con todo su contenido. | ||
+ | |||
+ | === Los directorios . y .. === | ||
+ | Cuando listamos el contenido de un directorio usando la opción a vemos dos directorios (aparecen en azul) con los nombres . y .. Como ya vimos, estos dos directorios son enlaces al directorio actual . y al directorio superior .. (por eso, para ir al directorio superior ponemos cd ..) | ||
+ | El directorio actual (.) es útil, por ejemplo, cuando queremos mover un directorio de un sitio determinado al directorio actual. También cuando copiamos o movemos archivos puede ser útil. Lo vemos cuando hablemos de ficheros. | ||
+ | |||
+ | |||
+ | == Ficheros == | ||
+ | |||
+ | === Copiar ficheros === | ||
+ | Para copiar ficheros utilizaremos el comando cp especificando el fichero que deseamos copiar y el lugar donde queremos hacerlo. Se usa de la siguiente manera: | ||
+ | cp [camino]Origen [camino][destino] | ||
+ | Como en el caso de mover directorios, el copiar ficheros necesita obligatoriamente que especifiquemos un destino, sea un camino (si queremos copiar el archivo en otro directorio) sea un nuevo nombre de archivo (si queremos tener una copia del archivo con otro nombre). | ||
+ | Vamos a ver un sencillo ejemplo: Nos encontramos en nuestro directorio y queremos copiar en él un archivo llamado cpuinfo que se encuentra en el directorio /proc Escribiremos: | ||
+ | cp /proc/cpuinfo . | ||
+ | Donde /prog/ es el camino, cpuinfo el nombre del archivo y . el camino del destino. Es importante usar el punto del final que indica nuestro directorio actual, ya que, como hemos dicho, el comando cp necesita obligatoriamente que le indiquemos el destino del fichero, a diferencia de lo que ocurre otros sistemas como por ejemplo MSDOS. | ||
+ | Hay que tener en cuenta que si el nombre de destino ya existe (porque hay un archivo con ese nombre), se sustituirá el existente por la copia que estamos haciendo sin que haya ningún aviso de que vaya a ser así. | ||
+ | |||
+ | === Mover y renombrar ficheros === | ||
+ | Igual que podíamos mover y renombrar directorios, podemos hacerlo con los ficheros. La instrucción es la misma, funciona de la misma manera. | ||
+ | |||
+ | === Nombres de ficheros === | ||
+ | Los nombres de archivo en Linux diferencian mayúsculas y minúsculas, pueden contener hasta 255 caracteres y no deberían contener espacios ni caracteres especiales. En realidad pueden contener esos caracteres si el nombre se pone entre comillas, pero no es recomendable. De hecho se aconseja usar tan solo letras (A-Z y a-z), dígitos (0-9), el carácter de subrayado o guión bajo (_) y el punto. No es recomendable usar caracteres acentuados, la eñe ni la ce cedilla (ç) | ||
+ | |||
+ | === Ficheros ocultos === | ||
+ | Si queremos que un archivo no se liste cuando usamos el comando ls podemos ocultarlo poniendo un punto al principio del nombre. Sin embargo, el archivo se listará si se usa la opción “a”: ls -a | ||
+ | |||
+ | === Eliminar ficheros === | ||
+ | Finalmente, la eliminación de un fichero se realiza con el comando rm, funciona de la siguiente manera: | ||
+ | rm [camino]archivo | ||
+ | El nombre de archivo es obligatorio. | ||
+ | |||
+ | === ¡Tocado! === | ||
+ | En ocasiones puede ser interesante actualizar la hora de un fichero sin editarlo. Para hacerlo se usa el comando touch poniendo a continuación el nombre del archivo. Este comando también es una manera fácil de crear un nuevo archivo ya que si no existe se crea (vacío, por supuesto). | ||
+ | |||
+ | === El comodín * === | ||
+ | El asterisco (*) se usa como comodín para indicar un conjunto de archivos. Un solo asterisco indica “todos los archivos” o “todos los directorios”. Así, si escribimos rm * se borraran todos los archivos del directorio actual. Si escribimos rmdir * se borrarán todos los subdirectorios del directorio actual (siempre que estén vacíos). Hay que tener en cuenta que el borrado no pide confirmación y que, por tanto es peligroso usar este comodín de esta manera. | ||
+ | También podemos usar el comodín para indicar “todos los archirvos que empiezan por” poniendo, por ejemplo h* o ho* | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | = Entrada y salida = | ||
+ | |||
+ | == Entrada y salida estándar == | ||
+ | |||
+ | === Dispositivos de entrada/salida === | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
Revisión del 13:23 23 feb 2015
Contenido
Introducción
Wiki de la asignatura Seguridad y Calidad en Servidores Web del Grado de Multimedia de la Universitat Oberta de Catalunya
En este wiki encontraréis las instrucciones básicas de Linux que necesitaréis para poder hacer la práctica de la asignatura.
GNU/Linux
GNU/Linux (aunque habitualmente suele conocerse como Linux) es un sistema operativo (SO) libre. Nació a partir del núcleo Linux creado en 1991 por Linus Torvalds. El núcleo (Linux) junto con el resto de aplicaciones que componen un sistema operativo (creadas en el proyecto GNU) es lo que habitualmente conocemos como GNU/Linux o, simplemente, Linux. Actualmente es ampliamente utilizado como servidor web, entre otras cosas por que puede instalarse en diferentes máquinas, es estable y libre. Así, Facebook, Gmail, LinkedIn o Yahoo utilizan servidores GNU/Linux, lo cual puede dar una idea de la importancia de este SO. Prácticamente todas las empresas de alojamiento web (hosting en inglés) ofrecen planes de alojamiento basados en Linux. También para grandes empresas pueden crearse redes de servidores funcionando con GNU/Linux. Para simplificar, a partir de este momento, nos referiremos a GNU/Linux como Linux, aunque conviene no olvidar que Linux es tan solo el núcleo del sistema.
El sistema operativo
La función de cualquier sistema operativo (SO) es proporcionar una interfaz para utilizar las prestaciones del hardware de un ordenador. Los programadores acceden a estas prestaciones a través del SO y pueden diseñar aplicaciones de propósito específico para usuarios finales. Éstos, a su vez, utilizan el SO para poder ejecutar dichas aplicaciones. Linux pertenece a la familia de sistemas denominada Unix y su filosofía está heredada de este tipo de sistemas. En lo que sigue, cuando definamos muchas de las características, funcionamiento e incluso comandos de Linux, podemos asumir que se puede aplicar a prácticamente cualquier sistema Unix con mínimos cambios. Así por ejemplo, ya podemos decir que Linux es un sistema multiusuario y multitarea, es decir, permite a varios usuarios trabajar simultáneamente y ejecutar diversas aplicaciones a la vez. Estas características determinan de forma importante el funcionamiento del sistema, el cual debe garantizar que toda esta carga de trabajo simultánea se lleve a cabo de forma segura y eficiente. Linux está organizado por capas. La capa más profunda corresponde al hardware, que proporciona una serie de servicios (proceso, gestión de ficheros, impresión, etc.). La única capa que interactúa directamente con el hardware es el núcleo (kernel). De esta manera, los programas no necesitan saber nada sobre el hardware y sólo se comunican con el núcleo. Una de las ventajas de esta estructura es que la mayoría de programas son independientes del hardware y pueden portarse de un modelo de ordenador a otro. Las aplicaciones que funcionan sobre el núcleo constituyen el último nivel y el único visible para los usuarios. Algunas de estas aplicaciones son utilidades básicas para la gestión de la información y la ejecución de programas y ya vienen con el sistema operativo, por lo que es habitual hablar de Linux refiriéndonos no sólo al núcleo, sino también a dicho conjunto de utilidades, desarrolladas por el proyecto GNU.
¿Quién me escucha?
Una de las ideas fundamentales de Linux que deriva de la estructura de capas es que los usuarios no ‘hablan’ directamente con el sistema, sino que lo hacen a través de una aplicación denominada intérprete de comandos (shell). Esta aplicación está constantemente ‘escuchando’ todo lo que el usuario teclea e interpreta (a partir de unas ciertas reglas sintácticas) sus peticiones. El intérprete de comandos dispone de una serie de comandos internos que él mismo ejecuta, pero, asimismo, puede ejecutar otros comandos externos, pasándoles las opciones que el usuario ha especificado. En la imagen vemos el comando cat que permite visualizar el contenido de un fichero especificado por el usuario. Algunos comandos ejecutan aplicaciones que proporcionan sus propia interfaz y conjuntos de órdenes para interactúar con los usuarios, como el editor de textos vi.
El sistema de archivos
Un sistema multiusuario necesita una forma de permitir a los usuarios tener distintos ficheros con el mismo nombre. También debe permitirles organizar los ficheros en grupos lógicos. La mayoría de sistemas operativos resuelven estas cuestiones proporcionando un sistema de ficheros jerárquico. En un sistema de este tipo los ficheros se organizan en directorios, que no son otra cosa que un tipo especial de fichero que agrupa a otros. Puesto que un directorio puede contener también otros directorios, la estructura del sistema de ficheros se asemeja a un árbol.
Como se puede observar en la figura, hay un directorio en la parte superior del árbol con un nombre especial (‘/’) y llamado directorio raíz(root).
Organización del sistema de ficheros
Siguiendo las convenciones habituales en Unix, el sistema de ficheros de Linux se organiza en una serie de directorios estándar de propósito específico. Algunos de los más importantes son los siguientes: /dev Contiene ficheros representando los dispositivos físicos del ordenador. /etc Está reservado para ficheros de configuración del sistema. /lib Contiene las librerías necesarias para ejecutar los programas que residen en /bin. /proc Contiene ficheros especiales que reciben información del núcleo. /sbin Contiene programas que sólo son accesibles para el usuario ‘root’ /usr Contiene los programas de uso común para todos los usuarios y presenta una estructura con directorios /etc, /bin o /lib propios para dichos programas /var Contiene información temporal sobre la ejecución de algunos programas. /home Contiene los directorios personales de los usuarios del sistema.
El directorio personal
A diferencia de otros sistemas operativos donde tras inicializar el ordenador el usuario accede por defecto al directorio raíz, en Linux cada usuario lo hace a un directorio personal (home directory) ubicado en algún lugar de la jerarquía de directorios del sistema. A menudo los directorios personales están ubicados debajo del directorio /home.
Directorios especiales
Existe una notación especial para hacer referencia a dos directorios en particular, el directorio actual y el directorio inmediatamente superior al mismo. El primero, se representa mediante un punto(.), mientras que el segundo se indica mediante dos puntos (..)
Rutas absolutas y relativas
Una ruta es el “nombre completo” de un fichero que incluye no sólo su nombre, sino su situación en la jerarquía, separando cada directorio mediante una barra (/). Por defecto, el intérprete asume que los comandos introducidos y los nombres de ficheros y directorios a los que se hace referencia poseen una ruta relativa al directorio actual. Al conectarnos por primera vez, el directorio actual es el directorio personal. Supongamos que acabamos de hacerlo y que es /home/luis. Si escribimos una orden como lista-ficheros-graficos, el intérprete asumirá que la ruta completa del fichero es /home/luis/lista-ficheros-graficos. La idea es que no es necesario indicar toda la ruta, sino sólo el desplazamiento necesario teniendo en cuenta el punto del sistema de ficheros donde estamos situados. También podemos indicar ficheros situados más arriba en la jerarquía. Por ejemplo, si escribimos la orden anterior como ../../bin/lista-ficheros-gráficos, el intérprete buscará el comando dos niveles por encima y luego bajará a bin. En algunas ocasiones puede ser más conveniente o fácil indicar un nombre completo utilizando una ruta absoluta. Este tipo de rutas comienza siempre por una barra (/) para indicar que la ruta comienza a definirse desde el directorio raíz, independientemente de cuál sea nuestro directorio actual. En el último de los ejemplos anteriores, podríamos especificar la situación del comando como /bin/lista-ficheros-gráficos.
Montaje de unidades de disco
En Linux, a diferencia de otros sistemas, las unidades no se representan con letras (por ejemplo, ‘C:’) sino que se ubican en algún punto de la jerarquía de directorios. La acción de vincular un directorio de la jerarquía a una unidad de disco se denomina montar la unidad. Si añadimos unidades de disco a nuestro sistema, deberemos montarlas para poder usarlas. Sea un disco duro, un CD, o una unidad USB la instrucción a usar será siempre la misma: mount [dispositivo] [punto_de_montaje] Donde dispositivo es el disco que queremos montar y punto_de_montajeel directorio donde queremos montarlo. Los discos duros los encontraremos en /dev/sdXN dónde la X representa el disco (el primero será a, el segundo b, etc.) y N será el número de la partición (en caso de que el disco esté particionado). Así, para montar un segundo disco en el directorio /mnt/discoduro escribiremos: mount /dev/sdb /mnt/discoduro El directorio /mnt/discoduro debe existir y estar vacío. Si tiene datos, no estarán disponibles hasta que no se desmonte la unidad, aunque no se perderán. Para desmontar el disco usaremos la instrucción umount: umount [dispositivo] Evidentemente, el disco duro principal sda siempre estará montado, generalmente con varias particiones (sda1, sda2, sda3) . Por otra parte, cuando estemos trabajando con servidores remotos, normalmente no necesitaremos montar ni desmontar unidades.
El interprete de comandos
El intérprete de comandos es programable
Una característica esencial del intérprete de comandos es que no sólo lee e interpreta las órdenes del usuario, sino que también es un lenguaje de programación bastante sencillo de utilizar. Los programas pueden ser tan sencillos cómo un sólo comando con algunas opciones o contener conjuntos de comandos y sentencias de programación del intérprete.
Los programas están diseñados para colaborar
Una idea básica que distingue Linux de otros sistemas operativos es que los programas son herramientas, y como tales, deben tener una función específica pero han de poder usarse para diferentes propósitos. Tres características son necesarias para conseguir esto: • Los resultados de un programa deben poder usarse como datos de entrada para otros. • Los programas deben estar preparados para trabajar en modo no interactivo, de forma que todas las opciones y datos que necesitan les puedan venir a través de un fichero. • Por defecto, los programas deben leer la entrada estándar (el teclado) y mostrar los resultados en la salida estándar (la pantalla). Cuando los programas pueden usarse de esta forma, es posible indicarle al intérprete que deseamos encadenarlos secuencialmente de forma que la salida de cada uno de ellos constituye la entrada para el siguiente.
Complejidad a la carta
La filosofía de Linux es proporcionar una gran cantidad de utilidades que realizan tareas simples de forma que el usuario básico pueda desenvolverse con comodidad, Pero al mismo tiempo, a través de la combinación de comandos y las capacidades de programación del intérprete, proporciona la posibilidad de crear nuevos comandos más complejos para los usuarios que así lo requieran.
El modo consola
Originalmente la interacción con el intérprete de comandos se realizaba a través de lo que se denominaban consolas (conjunto de teclado y pantalla) introduciendo órdenes en un entorno sin visualización gráfica, únicamente de texto. El intérprete muestra un indicador (prompt) en lalínea de comandos para mostrar al usuario que puede introducir una orden. El formato del prompt es muy flexible, pudiendo mostrar información como el nombre del usuario conectado o el directorio actual, por ejemplo. Actualmente, entornos como XWindow proporcionan interfaces gráficas que evitan muchas de las complejidades de la interacción a través de la consola. Sin embargo, existen todavía comandos (sobre todo de administración del sistema) que no están completamente soportados por aplicaciones gráficas y se hace necesario la interacción a través de lo que denominaremos modo consola o texto en contraste con el modo gráfico. Sin embargo, en el mantenimiento remoto de servidores Linux, suele ser habitual usar el modo consola. Es conveniente, pues, estar familiarizado con su uso si vamos a tener que trabajar con servidores remotos. Cuando tengamos que introducir órdenes, debemos tener en cuenta que los intérpretes de comandos de Linux distinguen mayúsculas y minúsculas.
Variables de entorno
Muchas utilidades de Linux, incluyendo el intérprete de comandos, necesitan información sobre el usuario y sus preferencias. Este tipo de información se almacena en las variables de entorno, que son gestionadas por el intérprete de forma que son accesibles a los programas que las necesitan. Aunque es posible definirlas, existe una serie de variables de entorno predefinidas como por ejemplo las siguientes: • PATH: Contiene la lista de directorios donde el intérprete buscará los comandos que el usuario pida ejecutar. • HOME: Contiene la ruta absoluta hasta el directorio personal del usuario. • PS1: Contiene la definición del prompt principal que muestra el intérprete en modo texto.
La primera interacción
La entrada al sistema
Para poder entrar al sistema, Linux siempre requiere a los usuarios que se identifiquen mediante un nombre y una contraseña para verificar su identidad. Este procedimiento no sólo garantiza la seguridad de acceso al sistema, sino que además permite aplicar los permisos de acceso a la información y de ejecución de programas necesarios para cada usuario.
El usuario root
En Linux existe un usuario especial denominado ‘root’ que es eladministrador del sistema y, por tanto, tiene permisos para realizar cualquier acción. Así, puede acceder a los ficheros de todos los usuarios, ejecutar cualquier programa y tiene permisos para acceder a todos los ficheros de configuración del sistema. Por esta razón, no es conveniente trabajar como ‘root’ cuando no se van a realizar tareas de administración, ya que se corre el riesgo de borrar o modificar algo por accidente. A menudo el usuario root está deshabilitado de manera que no se puede acceder a él. Sin embargo, usuarios con privilegios pueden usar la ordensudo que les permite ejecutar comandos como si fueran el usuario root. Para ello, basta poner sudo delante de la instrucción que se quiera ejecutar. Por ejemplo: sudo mount /dev/sdb1 /mnt/discoduro
Crear un nuevo usuario
Si necesitamos crear un nuevo usuario la intrucción a usar es adduser. Dado que es una intrucción que necesita privilegios de administración para ejecutarse, usaremos: sudo adduser [usuario] El sistema nos pedirá algunos datos del usuario (entre otros su contraseña) y creará el usuario y un directorio para él en /home/usuario Se puede encontrar más información sobre esta instrucción en: enlace
Primeros comandos
Una vez el usuario ingresa correctamente en el sistema, Linux ejecuta el intérprete de comandos, el cual permanecerá aceptando e interpretando órdenes hasta que finalice la sesión. Algunos comandos que podemos usar en Linux están integrados en el propio intérprete y se denominancomandos internos. Para ejecutarlos, el intérprete no necesita transferir el control a ningún programa externo. El resto de comandos externos deben corresponder a algún programa ubicado en algún punto del sistema y que el intérprete sea capaz de localizar. Cuando tecleamos un comando, el intérprete mira primero si es interno, en cuyo caso lo ejecuta de inmediato. Si no, hay dos casos posibles: que especifiquemos el comando con una ruta absoluta o simplemente con el nombre. En el primer caso, tampoco hay problema, ya que el intérprete puede localizar con facilidad el programa y ejecutarlo. En el segundo, necesita buscarlo en alguno de los directorios especificados en la variable de entorno PATH.
El prompt
Como ya hemos comentado, el intérprete de comandos muestra el prompt para indicar al usuario que está listo para recibir comandos. El prompt puede tener formatos muy diversos. Habitualmente suele ser usuario@máquina:directorio$ con algunas particularidades. “máquina” puede ser el nombre que tenga la máquina o su IP si no tiene. “directorio” será el directorio actual o ~ si nos encontramos en el nuestro directorio.
Viendo el contenido de un directorio
Si queremos ver el contenido del directorio actual, podemos utilizar el comando ls. Sin embargo, si lo hacemos la primera vez que hemos entrado en la máquina y estamos en nuestro directorio, posiblemente no veamos nada. En realidad sí que hay archivos en nuestra cuenta, lo que pasa es que están ocultos. Si queremos verlos podemos usar la opción a de la siguiente manera: ls -a El resultado será algo parecido a esto:
Resultado de usar la instrucción ls con la opción a
El archivo en azul no es tal, es un directorio. En este listado tan solo vemos los nombres de los archivos, pero a menudo nos interesará tener más información. Con la opción l obtendremos un listado más completo con información sobre los permisos del archivo, el tamaño en bytes, el propietario del archivo, el grupo al que pertenece, el tamaño y la hora de creación:
Resultado de usar la instrucción ls con las opciones l y a
Finalmente, si tenemos archivos muy grandes, podemos añadir la opciónh que nos muestra el tamaño en Kb
Resultado de usar la instrucción ls con las opciones l, a y h Hay muchas más opciones disponibles que se pueden consultar haciendo ls –help
Que alguien me eche una MANo
Las opciones que hemos visto del comando ls son sólo algunas de las muchas disponibles para este comando. Esto es habitual en muchos otros comandos, por lo que a menudo se hace difícil recordar todas las opciones. Además de la opción –help en Linux es posible obtener ayuda acerca del uso de un comando a través del manual al que se puede acceder a través del comando man seguido del nombre del comando. Así, man ls mostraría el manual de uso de ls, más completo que ls –help Para abandonar la visualización de las páginas del manual, pulsa la tecla ‘q’.
¿Dónde estoy?
Dada la complejidad de la estructura del sistema de ficheros de Linux, siempre cabe la posibilidad de que en algún momento, después de navegar por él, no sepamos exactamente cuál es nuestro directorio actual. Siempre podemos conocerlo a través del comando pwd (print working directory).
Limpiando la pantalla
Para limpiar la pantalla utilizaremos el comando clear.
Finalizar la sesión
Para finalizar la sesión de Linux usaremos la instrucción logout.
¿Da pereza teclear tanto?
Uno de los inconvenientes de la línea de comandos es la necesidad de especificarlo todo con mucho más detalle que, por ejemplo, en una interfaz gráfica. Pueden resultar especialmente complicados la especificación de rutas o ciertos nombres de fichero. Para facilitar la escritura de órdenes, bash ofrece un mecanismo automático de completado de texto mediante el tabulador.
El intérprete intenta completar dependiendo de lo que se haya tecleado, aunque lo más habitual es que primero intente buscar un comando y luego un fichero o directorio. Por ejemplo, supongamos que queremos listar el contenido del directorio /usr/local/bin aprovechando esta característica. 1. Escribimos ‘ls /u’ y pulsamos el tabulador. Automáticamente se completa la ruta como /usr/. 2. Añadimos a la ruta una ‘l’ (/usr/l) y pulsamos el tabulador. Bash hace sonar una señal de aviso para indicar que hay más de una forma posible de completar el texto. Pulsando de nuevo el tabulador nos muestra las tres posibilidades, que son tres directorios que comienzan por ‘l’ debajo de /usr. 3. Tecleamos una ‘o’ haciendo que la ruta quede como /usr/lo y pulsamos el tabulador. Como la ambigüedad ha quedado resuelta, el texto se completa como /usr/local/. 4. Finalmente, escribimos una ‘b’ y pulsamos de nuevo el tabulador. La ruta se vuelve a completar quedando como /usr/local/bin.
Gestión de archivos y directorios
Directorios
Como hemos visto, la estructura del sistema de ficheros de Linux permite ordenar la información en directorios que pueden contener ficheros u otros directorios a su vez. Para poder manipular esta estructura, es necesario disponer de comandos que permitan crear, borrar directorios y moverse a través de ellos.
Cambiar de directorio
Uno de los comandos más utilizados es cd (change directory) que permite cambiar el directorio actual y, de este modo, navegar por el sistema de ficheros. Este comando se usa de la siguiente manera: cd [camino][directorio] El camino nos indica la manera de llegar al directorio al que queremos ir. Si está en el directorio donde nos encontrarnos, entonces no hará falta especificar el camino. Antes de verlo con un ejemplo, vamos a ver algunos “directorios” especiales. Si queremos ir al directorio inmediato superior pondremos .. (dos puntos seguidos) Si queremos ir al directorio raíz, pondremos / (barra) Y ahora vemos algunos ejemplos. Cuando accedemos al sistema, por defecto aparecemos en nuestro directorio, situado en /home/user Si queremos ir al directorio superior (/home) escribiremos cd .. Con el comando pwd podemos comprobar en todo momento donde nos encontramos. Ahora, si hacemos cd user volveremos de nuevo a nuestro directorio y, desde ahí, si escribimos cd /usr/bin iremos al directorio bin que se encuentra dentro del directorio usr que está en el directorio raíz. Finalmente, para volver a nuestro directorio, podemos escribir cd sin nada más y nos llevará directamente. La siguiente imagen es una captura de pantalla de un terminal Linux donde hemos realizado las operaciones que acabamos de ver.
Captura de pantalla de los ejercicios de práctica con el comando cd
Prueba a navegar por el sistema de ficheros utilizando diferentes métodos para indicar el destino. Si te pierdes, puedes utilizar el comando cd sin parámetros y te devolverá a tu directorio de trabajo.
Crear directorios
El comando mkdir permite crear nuevos directorios.
Eliminar directorios
Se realiza mediante el comando rmdir. Los directorios deben estar vacíos para poder ser eliminados.
Mover y renombrar directorios
Podemos mover un directorio de sitio usando el comando mv de la siguiente manera: mv [camino]directorioOrigen [camino][directorioDestino] Es obligatorio poner un origen y un destino. Si se especifica un nombre de directorio de destino, entonces no sólo se mueve, también se le cambia el nombre. Esa característica hace que cambiar el nombre de un directorio sea tan sencillo como hacer: mv nombreActual nombreNuevo Los directorios se mueven con todo su contenido.
Los directorios . y ..
Cuando listamos el contenido de un directorio usando la opción a vemos dos directorios (aparecen en azul) con los nombres . y .. Como ya vimos, estos dos directorios son enlaces al directorio actual . y al directorio superior .. (por eso, para ir al directorio superior ponemos cd ..) El directorio actual (.) es útil, por ejemplo, cuando queremos mover un directorio de un sitio determinado al directorio actual. También cuando copiamos o movemos archivos puede ser útil. Lo vemos cuando hablemos de ficheros.
Ficheros
Copiar ficheros
Para copiar ficheros utilizaremos el comando cp especificando el fichero que deseamos copiar y el lugar donde queremos hacerlo. Se usa de la siguiente manera: cp [camino]Origen [camino][destino] Como en el caso de mover directorios, el copiar ficheros necesita obligatoriamente que especifiquemos un destino, sea un camino (si queremos copiar el archivo en otro directorio) sea un nuevo nombre de archivo (si queremos tener una copia del archivo con otro nombre). Vamos a ver un sencillo ejemplo: Nos encontramos en nuestro directorio y queremos copiar en él un archivo llamado cpuinfo que se encuentra en el directorio /proc Escribiremos: cp /proc/cpuinfo . Donde /prog/ es el camino, cpuinfo el nombre del archivo y . el camino del destino. Es importante usar el punto del final que indica nuestro directorio actual, ya que, como hemos dicho, el comando cp necesita obligatoriamente que le indiquemos el destino del fichero, a diferencia de lo que ocurre otros sistemas como por ejemplo MSDOS. Hay que tener en cuenta que si el nombre de destino ya existe (porque hay un archivo con ese nombre), se sustituirá el existente por la copia que estamos haciendo sin que haya ningún aviso de que vaya a ser así.
Mover y renombrar ficheros
Igual que podíamos mover y renombrar directorios, podemos hacerlo con los ficheros. La instrucción es la misma, funciona de la misma manera.
Nombres de ficheros
Los nombres de archivo en Linux diferencian mayúsculas y minúsculas, pueden contener hasta 255 caracteres y no deberían contener espacios ni caracteres especiales. En realidad pueden contener esos caracteres si el nombre se pone entre comillas, pero no es recomendable. De hecho se aconseja usar tan solo letras (A-Z y a-z), dígitos (0-9), el carácter de subrayado o guión bajo (_) y el punto. No es recomendable usar caracteres acentuados, la eñe ni la ce cedilla (ç)
Ficheros ocultos
Si queremos que un archivo no se liste cuando usamos el comando ls podemos ocultarlo poniendo un punto al principio del nombre. Sin embargo, el archivo se listará si se usa la opción “a”: ls -a
Eliminar ficheros
Finalmente, la eliminación de un fichero se realiza con el comando rm, funciona de la siguiente manera: rm [camino]archivo El nombre de archivo es obligatorio.
¡Tocado!
En ocasiones puede ser interesante actualizar la hora de un fichero sin editarlo. Para hacerlo se usa el comando touch poniendo a continuación el nombre del archivo. Este comando también es una manera fácil de crear un nuevo archivo ya que si no existe se crea (vacío, por supuesto).
El comodín *
El asterisco (*) se usa como comodín para indicar un conjunto de archivos. Un solo asterisco indica “todos los archivos” o “todos los directorios”. Así, si escribimos rm * se borraran todos los archivos del directorio actual. Si escribimos rmdir * se borrarán todos los subdirectorios del directorio actual (siempre que estén vacíos). Hay que tener en cuenta que el borrado no pide confirmación y que, por tanto es peligroso usar este comodín de esta manera. También podemos usar el comodín para indicar “todos los archirvos que empiezan por” poniendo, por ejemplo h* o ho*
Entrada y salida
Entrada y salida estándar
Dispositivos de entrada/salida
La práctica de esta asignatura la vamos a hacer en máquinas virtuales del servicio ec2 de Amazon. Este servicio ofrece mucha flexibilidad a la hora de crear nuevos proyectos web, pues permite ampliar el número de máquinas conforme se van necesitando.
Como vamos a hacer un uso de las máquinas un poco especial (puesto que no las vamos a poner en producción), el funcionamiento será un poco especial, aunque nada complicado, el proceso será el siguiente:
- Antes de conectarnos a nuestra máquina deberemos ponerla en marcha a través del enlace correspondiente del aula. Es importante volver a pararla una vez dejemos de usarla.
- Una vez aparezca como funcionando copiaremos su dirección IP (cambia cada vez que se arranca) y ya podremos conectarnos a ella. Para hacerlos tenemos dos opciones dependiendo del sistema operativo que usemos.
- En Linux o Mac, basta con abrir una ventana del terminal y poner ssh user@xxx.xxx.xxx.xxx (Deberéis sustituir las x por los números que aparezcan en la IP).
- En Windows la opción mejor es bajarse la aplicación PuTTy. No necesita instalación y es muy fácil de usar.
- Se os pedirá una contraseña. La habréis recibido por correo. Es obligatorio cambiar esa contraseña la primera vez que se accede a la máquina.
Como veréis, vamos a trabajar con la línea de comandos, con lo que será necesario que conozcáis al menos los comandos que deberéis usar durante el desarrollo de la práctica.
Algunas ideas básicas
- Los archivos en Linux, igual que en otros sistemas operativos, se organizan en un árbol de directorios (o carpetas) a partir de una raíz. En Linux el directorio raíz es / (en Windows es \)
- El camino o ruta (path) es la dirección del directorio donde se encuentra un archivo. Así, un archivo (con nombre nombre_archivo) que esté en el directorio A, que a su vez está en el directorio B, que a su vez está en el directorio raíz, estará en la ruta /B/A/ y nos referiremos a él como /B/A/nombre_archivo
- En Linux mayúsculas y minúsculas se tratan como letras diferentes. Es importante usarlas correctamente.
- Si alguna vez listamos algo que no cabe en la pantalla, podemos redireccionarlo (con | ) hacia el comando less para que nos permita subir y bajar por el contenido. Por ejemplo: ls -la | less (la barra la encontraréis en vuestro teclado en la tecla 1)
Enlaces a materiales de referencia
- Administración de sistemas GNU/Linux - Guía de lectura
- Administración avanzada del sistema operativo GNU/Linux - Guía de lectura
Os pedirá el primer apellido y el DNI (20+DNI) para poder acceder. Es posible que la primera vez no os permita bajar correctamente el archivo que queráis, volver a atrás y volver a entrar soluciona el problema...
Comandos básicos de Linux
- Lista de archivos de un directorio ls
- Cambiar de directorio cd
- Crear un nuevo directorio mkdir
- Borrar un directorio rmdir
- Copiar achivos o directorios cp
- Borrar archivos rm
- Mover y renombrar archivos o directorios mv
- Visualizar archivos de texto less
- El editor vi
- Listado de comandos básicos de Linux
Instalando aplicaciones en CentOS
- Instalar MySQL+Apache+PHP5
- Configuración de Apache
- Configuración de MySQL
- Navegador modo texto links. Facilita el acceder a las páginas web desde las que tenemos que bajar archivos.