1. Comandos básicos de GNU/LINUX
ls – Listado de archivos
Sintaxis: ls [-opciones][directorio/archivos]
ls es el comando que permite listar los archivos de un directorio determinado. La opción por defecto (sin
modificadores ni opciones) simplemente da una lista de los archivos del directorio actual, en formato corto:
solo el nombre del archivo, sin dar detalles del tamaño, permisos, dueños, fechas de creación, modificación,
etc.
Si el parámetro incluye nombre de directorio pero no de archivos, se mostrarán todos los archivos del
directorio solicitado, tomando en cuenta que sea una ruta absoluta o relativa1
. Por el contrario, si se
incluye un nombre de archivo, este se tomará como un patrón y se listarán todos los archivos que
coincidan con ese patrón (que puede incluir comodines2
o no):
ls /homelista todos los archivos del directorio /home (exceptuando los archivos ocultos)
ls /home/mg* lista todos los archivos del directorio /home que comiencen
con la cadena “mg” y continúen con cualquier otro carácter
(incluso el carácter nulo)
ls Descargas lista los archivos del directorio Descargas, que está dentro
de nuestro directorio actual
Opciones:
-a Muestra todos los archivos, incluyendo los ocultos.
-l Lista en formato largo la información de un archivo o directorio.
-m Lista archivos transversalmente, separados por comas.
-r Lista los archivos en orden inverso.
-T Lista información de archivos ordenados según el tiempo desde el más reciente al más
antiguo.
-R Lista los archivos del directorio y de todos los directorios dentro de él.
-h Muestra el tamaño de archivos o directorios en un formato más legible
-i Muestra información del i-nodo
Ejemplo:
ls –l Nos mostrará todos los archivos del directorio actual con mucha información sobre cada archivo.
En particular la salida del comando tiene la siguiente forma:
# ls -l
total 176
-rw-r--r-- 1 root root 683 Aug 19 09:59 0001.pcap
1
Ruta absoluta: aquella ruta que comienza siempre desde la raíz “/” Ruta relativa: comienza por cualquier
otro punto del árbol de directorios de Linux. Ejemplos: ruta absoluta al archivo que ejecuta Mozilla Firefox:
/usr/bin/firefox ruta relativa al mismo archivo estando parado en /usr: bin/firefox
2
Los metacaracteres son los caracteres especiales utilizados para crear determinados patrones de búsqueda.
Serán tratados más adelante.
2. -rw------- 1 root root 1586 Jul 31 02:17 anaconda-ks.cfg
drwxr-xr-x 2 root root 4096 Jul 31 02:48 Desktop
drwxr-xr-x 2 root root 4096 Jul 31 02:48 Documents
drwxr-xr-x 4 root root 4096 Aug 16 02:55 Downloads
-rw-r--r-- 1 root root 21262 Aug 12 12:42 fbcmd_update.php
-rw-r--r-- 1 root root 46701 Jul 31 09:58 index.html
-rw-r--r-- 1 root root 48867 Jul 31 02:17 install.log
-rw-r--r-- 1 root root 11439 Jul 31 02:13 install.log.syslog
drwxr-xr-x 2 root root 4096 Jul 31 02:48 Music
drwxr-xr-x 2 root root 4096 Jul 31 02:48 Pictures
drwxr-xr-x 2 root root 4096 Jul 31 02:48 Public
drwxr-xr-x 2 root root 4096 Jul 31 02:48 Templates
drwxr-xr-x 2 root root 4096 Jul 31 02:48 Videos
El primer carácter de cada línea indica el tipo de archivo, que puede estar dentro de estas categorías:
Identificador Tipo de Archivo
- Archivos sencillos
d Directorios
l Vínculos simbólicos(flexible, blandos)
c Dispositivos de caracteres
b Dispositivos de bloques
p Tuberías (pipe) con nombre (FIFO)
s Socket (conector para comunicaciones (TCP/IP)
Luego le siguen 9 caracteres que indican los permisos de acuerdo a dueño, grupo y otros, siendo los
permisos de tres tipos para cada grupo: r (read – lectura), w (write – escritura), x (execution – ejecución)
Luego viene un número con la cantidad de enlaces que contiene el archivo o directorio
Después aparecen los nombres del propietario del archivo y el grupo primario del propietario, cuestiones
relacionadas con los permisos de las columnas anteriores.
Seguido nos encontramos con el tamaño del archivo (los directorios tienen todos el mismo tamaño, si se
toman como archivos independientes, no es el tamaño del contenido total del directorio en cuestión)
Fecha y hora de la última modificación
Nombre del archivo/directorio
Dependiendo de la terminal que utilicemos y de algunas opciones de configuración, la terminal nos puede
devolver esta lista con colores o no.
Metacarateres o Comodines:
Permiten buscar más de un archivo al mismo tiempo. Se pueden utilizar con varios comandos, incluyendo
listar, mover, copiar, borrar, etc.
En Linux podemos utilizar los siguientes comodines: * ? [ ]
* Hace referencia a cualquier cadena de caracteres, incluyendo una cadena nula (sin ningún carácter)
en algún lugar del nombre del archivo
Por ejemplo, si queremos listar los archivos que contengan una letra ‘g’ en cualquier parte del
nombre, utilizaríamos:
ls *g*
esto nos devolvería mgomez, gomez, ciego, Puig.
? Hace referencia a un solo carácter, que puede ser cualquiera, pero solo uno
Por ejemplo, si quiero ver todos los archivos que tengan un nombre de solo 3 letras (o números)
ls ???
Si tengo varios archivos llamados carta1, carta2, etc. Y quiero listarlos todos (excluyendo los
3. carta23 y carta)
ls carta?
[ ] Se buscarán todos los archivos que contengan un carácter que esté dentro de la lista de caracteres
especificados entre los corchetes
Por ejemplo, si quiero encontrar todos los archivos cuyo primer carácter sea un número:
ls [0-9]*
Puedo también negar el contenido de la lista interna:
ls [!0-9]* lista todos los archivos que no comienzan con un número
cd – Cambio de Directorio
sintaxis: cd <Directorio>
El comando cd nos permite cambiar el directorio actual de trabajo. Se puede ingresar la ruta absoluta del
directorio al que se quiere ir, o bien ingresar una ruta relativa a partir del directorio actual de trabajo.
cd / Nos lleva hasta la raíz del sistema
cd /home Nos lleva al directorio home que depende de la raíz del sistema
cd Descargas Nos lleva al directorio Descargas que debe estar dentro del directorio actual
de trabajo
cd .. Nos lleva al directorio padre del actual
cd . Nos deja en el directorio actual
cd Nos lleva hasta nuestro directorio home
cd ../directorio Sube al directorio padre y nos lleva al directorio que está dentro del
directorio padre
cd ../../directorio sube al directorio padre del directorio padre y de allí nos lleva al directorio
que está dentro3
cd - Nos lleva al directorio en que estábamos trabajando antes
Árbol de Directorios de Linux
Todo es un archivo: En Sistemas Operativos tipo UNIX todo es un archivo. El sistema de archivos de
Linux se organiza en una estructura jerárquica, en forma de árbol, donde el nivel más alto del sistema de
archivos es la / o directorio raíz. Todos los demás archivos y directorios cuelgan de la raíz. Es por esta
razón que debemos instalar aquí el sistema operativo indicando como directorio raíz de la partición
seleccionada la /.
La estructura de archivos y directorios de Linux se organiza según el “Estándar de Jerarquía de Ficheros”
(FHS – File System Hierarchy Standard) . El FHS intenta definir unas bases para que tanto los
programadores, como los usuarios y administradores del sistema, sepan dónde encontrar lo que buscan.
Éste estándar es mantenido por la “Free Standards Group”, una organización sin fines de lucro constituida
por compañías de hardware y software.
Es posible distinguir el contenido de un directorio según sea: estático o dinámico y compartible o no
compartible.
Estáticos: Contiene binarios, bibliotecas, documentación y otros ficheros que no cambian sin
intervención del administrador. Pueden tener permisos de solo lectura (read-only) y no necesitan que
se hagan copias de seguridad tan a menudo como con ficheros dinámicos
3
.. y . cumplen una función similar cuando trabajan con ls, de modo que ‘ls ..’ listará los archivos del directorio
padre, y ‘ls ../..’ los archivos del directorio padre del directorio padre
4. Dinámicos: Contiene ficheros que no son estáticos. Deben tener permisos de lectura-escritura (read-
write). Necesitan que se hagan copias de seguridad a menudo
Compartibles: Contiene archivos que se pueden encontrar en una computadora y utilizarse en otra
No compartibles: Contiene archivos que no son compartibles.
Ejemplos:
Estáticos: /bin, /sbin, /opt, /boot, /usr/bin
Dinámicos: /var/mail, /var/spool, /var/run, /var/lock, /home
Compartibles: /usr/bin, /opt
No compartibles: /etc, /boot, /var/run, /var/lock
/ (raíz): Es el nivel más alto dentro de la jerarquía de directorios. De aquí cuelgan el resto de
carpetas, particiones y otros dispositivos. Es por esto que donde se instala el sistema, se selecciona
la partición deseada y se le indica que el punto de montaje es justamente /.
/bin (binarios): Los binarios son los ejecutables de Linux. Aquí tendremos los ejecutables de los
programas propios del sistema operativo, entre ellos comandos como cp, mv, cat, chown, etc. No
es el único directorio que contiene ejecutables como veremos más adelante.
/boot (arranque): Aquí nos encontramos los archivos necesarios para el inicio del sistema, desde
los archivos de configuración de Grub Lilo, hasta el propio kernel del sistema.
/dev (dispositivos): Linux se basa en la simpleza y en el tratamiento homogéneo de la información.
Linux trata los dispositivos como si fueran un fichero más para facilitar el flujo de la información. En
esta carpeta tenéis los dispositivos del sistema, por ejemplo los usb, sda (o hda) con sus respectivos
números que indican las particiones, etc.
/etc (etcétera): Aquí se guardan los ficheros de configuración de los programas instalados, así
como ciertos scripts que se ejecutan en el inicio del sistema. Los valores de estos ficheros de
configuración pueden ser complementados o sustituidos por los ficheros de configuración de
usuario que cada uno tiene en su respectivo “home” (carpeta personal).
/home (hogar): Este hogar no es más que un directorio que a su vez contiene otros, uno por cada
usuario dado de alta en el sistema. Dentro de dichos directorios es donde el usuario tiene su
carpeta personal, donde están los ficheros de configuración de usuario, así como los archivos
personales del mismo que puede crear, modificar y eliminar bajo su propio criterio.
/lib (bibliotecas): Contiene las bibliotecas (también mal conocidas como librerías) del sistema, así
como módulos y controladores (drivers).
/lost+found (perdido y encontrado): Es una carpeta que nos podemos encontrar en todas las
particiones. Cuando por cualquier circunstancia se cierra mal el sistema (un apagón por ejemplo),
cuando éste se reinicie comprobaréis que se llamará al programa fsck para restaurar la integridad
del sistema de ficheros. En esta carpeta encontraremos la información que se mal-guardó debido a
la incidencia.
/media (media/medios): Es donde se montan las unidades extraíbles como los dispositivos USB,
disqueteras, unidades de CD/DVD y en algunas distros, como Ubuntu, las particiones adicionales.
/mnt (montajes): Es un directorio que se suele usar para montajes temporales de unidades.
/opt (opcionales): Destinado para guardar paquetes adicionales de aplicaciones.
/proc: Información para la virtualización del sistema de ficheros de Linux.
/root: Es el /home del administrador. Es el único /home que no está incluido -por defecto- en el
directorio anteriormente mencionado.
/sbin (binarios de sistema): Son los ejecutables de administración, tales como mount, umount,
shutdown…
/srv (servicios): Información del sistema sobre ciertos servicios que ofrece (FTP, HTTP…).
/sys (sistema): Información sobre los dispositivos tal y como los ve el kernel Linux.
/tmp (temporales): Es un directorio donde se almacenan ficheros temporales. Cada vez que se
inicia el sistema este directorio se limpia.
/usr: Es el directorio padre de otros subdirectorios de importancia:
o /usr/bin: Conjunto de ejecutables de la mayoría de aplicaciones de escritorio entre otras
(por ejemplo firefox).
5. o /usr/include: Los ficheros cabeceras para C y C++.
o /usr/lib: Las bibliotecas para C y C++.
o /usr/local: Es otro nivel dentro que ofrece una jerarquía parecida al propio diretorio /usr.
o /usr/sbin: Otra serie de comandos administrativos para el sistema.
o /usr/share: Archivos compartidos como ficheros de configuración, imágenes, iconos, etc.
o /usr/src: Tiene en su interior el código fuente para el kernel LInux.
var: Ficheros de sistema como el buffer de impresión, logs…
o /var/cache: Se almacenan datos cacheados para las aplicaciones.
o /var/lib: Información sobre el estado actual de las aplicaciones, modificable por las propias
aplicaciones.
o /var/lock: Ficheros que se encargan de que un recurso sólo sea usado por una aplicación
determinada que ha pedido su exclusividad, hasta que ésta lo libere.
o /var/log: Es uno de los subdirectorios más importantes ya que aquí se guardan todo tipo de
logs del sistema.
o /var/mail: Los correos de los usuarios.
o /var/opt: Datos usados por los paquetes almacenados en /opt.
o /var/run: Información sobre el sistema desde que se inició.
o /var/spool: Datos esperando a que sean tratados por algún tipo de proceso.
o /var/tmp: Otro fichero temporal.
mkdir - Creación de directorios
Sintaxis: mkdir <directorio> .. <directorio>
mkdir nos va a permitir crear nuevos directorios. Para crear un nuevo directorio, tenemos que tener
permiso de escritura en el directorio de trabajo. Como usuario común, yo puedo crear todos los directorio
que quiera en mi directorio /home/usuario, pero tengo restringida la creación en otros directorios, por
ejemplo no puedo crear un directorio nuevo (ni tampoco poner un archivo) en la raíz, ni en el directorio
/home, ni tampoco en los directorios de mis compañeros de grupo, salvo que se habiliten los permisos
necesarios.
Opciones:
-pPermite crear una estructura de directorios y subdirectorios con una sola entrada
Ejemplo: Quiero crear en mi directorio la siguiente estructura: dos directorios que dependan de mi
directorio hogar y dentro de cada uno de ellos 2 directorios. Para ello puedo hacer los siguientes caminos:
1) cd
mkdir dir1
mkdir dir2
cd dir1
mkdir dir3
mkdir dir4
cd ..
cd dir2
mkdir dir5
mkdir dir6
2) cd
mkdir -p dir1/dir3 dir2/dir5
mkdir dir1/dir4 dir2/dir6
6. 3) cd
mkdir -p dir1/dir3 dir2/dir5 dir1/dir4 dir2/dir5
Para lograr esta última síntesis debemos pensar antes de actuar, tener la estructura creada en la mente o
en papel.
rmdir – Borrar directorios
Sintaxis: rmdir <directorio/s> [-opciones]
Borra el o los directorios, siempre y cuando estén vacíos. Si no están vacíos nos da un error e
imprime un mensaje en pantalla.
Opciones:
-p Permite borrar una estructura de directorios, directorios padres e hijos, siempre y cuando
el directorio padre solo contenga al hijo, sin ningún otro archivos
Ejemplos:
Teniendo la estructura anterior creada
cd
cd dir1
rmdir dir3
cd ..
rmdir –p dir1/dir4
rmdir dir2
Comando touch
Sintaxis:
touch [-opciones] nombre_de_archivo
Este es un comando un tanto curioso, que lo que realmente hace es cambiar o actualizar la
fecha y hora de modificación de un archivo o un directorio. Pero tiene la funcionalidad de que si el
archivo al que le queremos modificar esos atributos no existe, lo crea con la fecha y hora actuales,
salvo que le indiquemos lo contrario con una de las opciones.
Entonces si tenemos un archivo llamado “hola” y escribimos en la consola:
touch hola
veríamos como la fecha y hora del archivo cambian a las actuales. Si el archivo no existía, lo
habrá creado con esa fecha y esa hora.
Antes, hagamos un ls –l en la pantalla que estamos, tomemos nota de cuantos archivos
aparecen en pantalla, luego crearemos un archivo llamado nuevo tal como lo vimos recién y
hagamos otra vez ls –l.
Listo, tenemos un archivo vacío, que vamos a poder copiar, mover, renombrar y borrar.
Pero vamos a ver cómo funciona touch cuando el archivo existe con sus opciones:
7. - cambie la hora de acceso
-
-
-
la fecha y hora que queremos
Ejemplos:
touch hola
touch –am –t1212121212 hola (esto pondría el tanto la fecha de modificación como la de
último acceso al 12/12/12 12:12)
Formato de fecha es AAMMDDhhmm.ss
Comando cp
Ahora queremos copiar el archivo que creamos en otro directorio, para eso vamos a crear la
siguiente estructura con los comandos que ya vimos:
Nuestro hogar es donde estamos parados cuando iniciamos la terminal, entonces creamos 2
directorios llamados nuevo1 y nuevo2 ahí dentro. ¿Cómo creamos directorios nuevos?
Accedemos al directorio nuevo1 (¿con qué comando?) y queremos copiar el archivo “hola”
que está en el directorio anterior en este nuevo directorio. Para ello vamos a necesitar un nuevo
comando cuyo nombre es cp, de copy (copiar)
Sintaxis:
cp [-opciones] ruta/archivo_fuente destino
Es decir, que cp va a copiar el archivo_fuente en el archivo destino
Cuando lo copiamos ya podemos renombrarlo y para las rutas podemos usar lo que
aprendimos la semana pasada acerca de rutas absolutas y/o relativas
En nuestro caso, estamos parados en nuestro home, el archivo que queremos copiar está en
el mismo directorio en el que estamos parados y queremos copiarlo en un directorio que está
inmediatamente debajo del directorio en el que estamos. ¿Cuál de estas sería la correcta?:
cp hola /nuevo1
cp /hola ~/nuevo1
cp hola ~/nuevo1
si accedemos al directorio nuevo1 y hacemos un listado de archivos vamos a verlo
bueno, ahora estamos en nuevo1, vayamos a nuevo2, ¿cómo lo hacemos con un solo
comando? (con cd ../nuevo2)
Estando en nuevo2 queremos copiar el archivo hola que está en nuevo1 a este nuevo
directorio. ¿cuál de estas será la correcta?
cp ../nuevo1/hola .
cp hola ../nuevo1/hola
cp ~/nuevo1/hola ~/nuevo2/
Nuestro
Hogar
nuevo1
nuevo2
8. Hay dos formas correctas, porque hay varias maneras de utilizar las rutas relativas
El punto solo hace referencia al directorio actual, por eso es que en la primera opción
estando parados en nuevo2 si le ponemos como destino el . le estamos diciendo que copie el
archivo hola que está en el directorio hermano (porque está en el mismo nivel) en el directorio en
el que estamos.
El símbolo ~ (puede salir con la combinación de teclas alt+126 o con Alt Gr + +) es toda la
ruta hasta nuestro home, por eso podemos usarlo, si queremos hacer referencia a algún directorio
o archivo que esté dentro de nuestro home, como es el caso de los directorios nuevo1 y nuevo2.
También podemos usar la ruta absoluta que empezaba con qué signo? (/) que indica la raíz.
Entonces la primera opción sería igual a
cp /home/usuario/nuevo1/hola /home/usuario/nuevo2/
opciones:
-i consulta antes de sobre-escribir un archivo que ya existe. Esto es importante,
porque cp sin esta opción sobre-escribe cualquier archivo de destino que ya exista y
que tenga el mismo nombre que el archivo fuente
-p copia el archivo con los mismos atributos de permisos y fechas que tenía archivo
fuente
-r copia todos los contenidos de un directorio_fuente en el directorio destino,
incluyendo todos los sub-directorios
Comando mv
Mueve los archivos de un directorio a otro
Sintaxis:
mv [-opciones] ruta/archivo_fuente destino
Funciona borrando los archivos de fuente y los crea nuevamente en destino. Si el directorio
destino no existe nos da un mensaje de error.
Opciones:
-f mueve los archivos sin pedir confirmación (si existe un archivo con el mismo
nombre lo sobre-escribe)
-i con esta opción sí nos pide confirmación antes de sobre-escribir.
Comando rm
El otro día vimos el comando rmdir que nos permitía borrar un directorio vacío, ahora con el
comando rm vamos a poder borrar archivos que no sean directorios
Sintaxis:
rm [-opciones] ruta/archivo
opciones:
-f elimina todos los archivos que queremos sin pedir confirmación
-i pide confirmación para cada archivo que vamos a borrar
-r borra todos los archivos incluyendo subdirectorios
rm –r * borra todos los archivos del presente directorio, incluyendo los directorios debajo,
tengan o no tengan archivos dentro
9. Comando pwd
Sintaxis:
pwd
No tiene opciones ni parámetros. Lo único que hace (y a veces es muy útil) es decirnos en
qué directorio estamos trabajando, porque el prompt de Linux no nos incluye esa información a
simple vista.
Como casi todo en Linux, el prompt se puede configurar, existe una variable del sistema que
se denomina PS1 y que contiene el formato en que debe mostrarse la información del prompt.
Normalmente el prompt de Linux tiene la forma:
usuario@máquina directorio_actual y un signo al final que nos indica si somos usuarios
comunes o root
$ para usuarios comunes
# para root