Comandos Linux

49
1 COMANDOS LINUX 1. INTRODUCCION Un intérprete de comandos es un programa que toma la entrada del usuario, por ejemplo las órdenes que teclea, y la traduce a instrucciones. Podemos compararlo con el COMMAND.COM de MS-DOS, que realiza exactamente la misma tarea. El intérprete de comandos (Shell) será una de las interfaces con Linux, y el X Window será otra interfaz que nos permite ejecutar órdenes usando el ratón y el teclado. Cuando accedemos al sistema entramos por defecto en el entorno gráfico de X Windows, el KDE. Para pasar al modo texto (intérprete de comandos) desde el modo gráfico hemos de pulsar las combinaciones: ctrl+alt+f1 o bien con: f2 f3 f4 f5 f6 Esto hace que el sistema salga del modo gráfico y acceda a alguna de las seis consolas virtuales de Linux, a las cuales también se puede acceder cuando se arranca en modo de texto. Para volver al modo gráfico hay que presionar ctrl+alt+f7 o ctrl+alt+f8 (Según la sesión en modo gráfico a la que deseemos regresar). La segunda forma es más cómoda y menos radical, permitiendo acceder al shell desde el mismo entorno gráfico. Para esto hay que abrir un programa llamado terminal o consola, el kconsole (en el entorno KDE), o los xterm o gnome-terminal (en GNOME). Si estamos usando el entorno por defecto (GNOME), bastará con obtener el menú contextual del escritorio y escoger la opción correspondiente. Además de ser un intérprete interactivo de los comandos que tecleamos, el Shell es también un lenguaje de programación, el cual nos permite escribir guiones que permiten juntar varias órdenes en un fichero. Similar a los

Transcript of Comandos Linux

Page 1: Comandos Linux

1

COMANDOS LINUX

1. INTRODUCCION

Un intérprete de comandos es un programa que toma la entrada del

usuario, por ejemplo las órdenes que teclea, y la traduce a instrucciones.

Podemos compararlo con el COMMAND.COM de MS-DOS, que realiza

exactamente la misma tarea.

El intérprete de comandos (Shell) será una de las interfaces con Linux, y el

X Window será otra interfaz que nos permite ejecutar órdenes usando el

ratón y el teclado. Cuando accedemos al sistema entramos por defecto en

el entorno gráfico de X Windows, el KDE. Para pasar al modo texto

(intérprete de comandos) desde el modo gráfico hemos de pulsar las

combinaciones:

ctrl+alt+f1 o bien con: f2 f3 f4 f5 f6

Esto hace que el sistema salga del modo gráfico y acceda a alguna de las

seis consolas virtuales de Linux, a las cuales también se puede acceder

cuando se arranca en modo de texto.

Para volver al modo gráfico hay que presionar ctrl+alt+f7 o ctrl+alt+f8

(Según la sesión en modo gráfico a la que deseemos regresar).

La segunda forma es más cómoda y menos radical, permitiendo acceder al

shell desde el mismo entorno gráfico. Para esto hay que abrir un programa

llamado terminal o consola, el kconsole (en el entorno KDE), o los xterm o

gnome-terminal (en GNOME). Si estamos usando el entorno por defecto

(GNOME), bastará con obtener el menú contextual del escritorio y escoger

la opción correspondiente.

Además de ser un intérprete interactivo de los comandos que tecleamos, el

Shell es también un lenguaje de programación, el cual nos permite escribir

guiones que permiten juntar varias órdenes en un fichero. Similar a los

Page 2: Comandos Linux

2

ficheros batch de MS-DOS.

En Unix existen varios tipos de intérpretes de comandos. Los dos más

importantes son:

Sh o Bourne shell: utiliza una sintaxis similar a la usada en los

primeros sistemas Unix.

Csh o C shell: utiliza una sintaxis diferente a la de sh, similar al

lenguaje de programación C.

En Linux también disponemos de varios intérpretes de comandos,

con algunas diferencias respecto a los de Unix. Los más usados son:

Bash o Bourne Again Shell: es equivalente a Bourne shell, pero con

muchas características avanzadas de la C shell. Cualquier guión

(script) escrito para Bourne funcionará en bash.

Tsch (exTended C shell): es una versión extendida del C original.

Sólo aparecerán diferencias entre unos y otros a la hora de escribir

guiones. Es decir, en lo que respecta a los comandos usuales es indiferente

el tipo de intérprete de comandos usado.

2. NOCIONES BASICAS

En una terminal:

Las aplicaciones con nombres compuestos se escriben con guión

entre las palabras (ej.compizconfig-settings-manager).

Para los espacios en blanco se pone un guión inferior (ej.

nombre_archivo).

Cuando queremos poner varios comandos seguidos, para ejecutarlos

a la vez, dejamos un espacio entre ellos, nunca una coma (ej.

avidemux k3b kde-i18n-es k3b-i18n).

Cuando tecleamos una orden, el intérprete de comandos sigue una serie de

Page 3: Comandos Linux

3

pasos:

Busca el nombre de la orden y comprueba si es una orden interna.

Comprueba si la orden es un alias, es decir, un nombre sustitutorio

de otra orden.

Si no se cumple ninguno de los casos anteriores, busca el programa

correspondiente y lo ejecuta.

Si el intérprete de comandos no puede encontrar la orden que hemos

tecleado, muestra un mensaje de error.

El formato general de una orden en Linux es:

comando [-opciones] [argumentos]

A la hora de introducir los comandos hay que tener en cuenta las

siguientes características:

Los comandos hay que teclearlos exactamente.

Las letras mayúsculas y minúsculas se consideran como diferentes

(Case Sensitive).

En su forma más habitual (los shells de Bourne o de Korn), el

sistema operativo utiliza un signo de $ como prompt para indicar

que está preparado para aceptar comandos, aunque este carácter

puede ser fácilmente sustituido por otro u otros elegidos por el

usuario. En el caso de que el usuario acceda como administrador

este signo se sustituye por #.

Cuando sea necesario introducir el nombre de un fichero o

directorio como argumento a un comando, Linux, permite escribir

las primeras letras del mismo y realiza un autorrellenado al

presionar la tecla del tabulador. Si no puede distinguir entre

diversos casos rellenará hasta el punto en el que se diferencien. Por

ejemplo, supongamos una carpeta con los siguientes directorios:

Page 4: Comandos Linux

4

Programas

Documentos_proyecto

Documentos_privados

Al escribir “cd Pr” Linux rellenará el resto del contenido hasta

escribir cd Programas. Por el contrario al escribir “cd D” escribirá

“cd Documentos_”

3. COMANDOS BASICOS

$ ls (List) Nos muestra el contenido de la carpeta que le indiquemos después.

Es el primer comando que todo linuxero debe aprender. Por ejemplo. Si

queremos que nos muestre lo que contiene /etc:

$ ls /etc

Si no ponemos nada interpretará que lo que queremos ver es el contenido

de la carpeta donde estamos actualmente:

$ ls

Además acepta ciertos argumentos que pueden ser interesantes. Para

mostrar todos los archivos y carpetas, incluyendo los ocultos:

$ ls –a

Para mostrar los archivos y carpetas junto con los derechos que tiene, lo

que ocupa, etc:

$ ls -l

Además se pueden solapar los argumentos. Si quisiéramos mostrar los

archivos de la misma forma que antes, pero que muestre también los

Page 5: Comandos Linux

5

ocultos:

$ ls -la

$ cd (change directory)

Podemos usarlo con rutas absolutas o relativas. En las absolutas le

indicamos toda la ruta desde la raíz (/). Por ejemplo, estemos donde

estemos, si escribimos en consola…

$ cd /etc/apt

…nos llevará a esa carpeta directamente. Del mismo modo si escribimos…

$ cd /

…nos mandará a la raíz del sistema de ficheros.

Las rutas relativas son relativas a algo, y ese algo es la carpeta donde

estemos actualmente. Imaginad que estamos en /home y queremos ir a una

carpeta que se llama temporal dentro de vuestra carpeta personal. Con

escribir…

$ cd tu_carpeta/temporal

…nos situará allí. Como veis hemos obviado el /home inicial ya que si no lo

introducimos toma como referencia el directorio donde estamos, que es

ese.

¿Y qué sucede si escribimos tan sólo…

$ cd

Sí, sólo “cd”. Esto lo que hace es que te lleva a tu carpeta personal

directamente y estemos donde estemos. Es algo realmente muy práctico,

muy simple y que no todos conocen.

$ mkdir (make directory)

Page 6: Comandos Linux

6

Crea una carpeta con el nombre que le indiquemos.

Nuevamente podemos usar rutas absolutas y relativas. Podemos indicarle

toda la ruta que le precede al directorio que queremos crear, o si estamos

ya en la carpeta que lo va a contener basta con poner tan sólo el nombre:

$ mkdir /home/tu_cuenta/pepino

Si ya estamos en /home/tu_cuenta…

$ mkdir pepino

$ rm (remove)

Borra el archivo o la carpeta que le indiquemos.

Como antes se puede indicar la ruta completa o el nombre del archivo.

Esto a partir de ahora lo vamos a obviar, creo que ya ha quedado claro con

los dos comandos anteriores.

Para borrar un archivo:

$ rm nombre_archivo

Para borrar una carpeta vacía:

$ rm nombre_carpeta

Para borrar una carpeta que contiene archivos y/o otras carpetas que

pueden incluso contener más:

$ rm -r nombre_carpeta

Otras opciones: “-f” no te pide una confirmación para eliminar o “-v” va

mostrando lo que va borrando.

$ cp (copy)

Page 7: Comandos Linux

7

Copia el archivo indicado donde le digamos.

Aquí podemos también jugar con las rutas, tanto para el fichero origen,

como en el del destino. También podéis poner el nombre que le queréis

poner a la copia. Por ejemplo, si estuviéramos en /etc/X11 y quisiéramos

hacer una copia de seguridad de xorg.conf en nuestra carpeta personal:

$ cp xorg.conf /home/tu_carpeta/xorg.conf.backup

$ mv (move)

Es igual que el anterior, sólo que en lugar de hacer una copia, mueve

directamente el archivo con el nombre que le indiquemos, puede ser otro

distinto al original:

$ mv /etc/pepino.html /home/tu_carpeta/ese_pepino.html

Otro uso muy práctico que se le puede dar es para renombrar un archivo.

Basta con indicar el nuevo nombre en el segundo argumento con la misma

ruta del primero. En este ejemplo suponemos que ya estamos en la carpeta

que lo contiene:

$ mv pepino.html ese_pepino.html

$ find

Busca el archivo o carpeta que le indiques.

$ find / -name pepino

El comando anterior buscaría en todos los sitios las carpetas y archivos

que se llamen pepino. Si tuviéramos la seguridad de que se encuentra en

/var por ejemplo, se lo indicaríamos:

$ find /var -name pepino

Si no estamos muy seguros del nombre podemos indicárselo con

comodines. Supongamos que el nombre de lo que buscamos contiene

Page 8: Comandos Linux

8

“pepi”, en la misma carpeta de antes:

$ find /var -name *pepi*

Tiene otras opciones. Por ejemplo podemos decirle que encuentre los

archivos/carpetas de más de 1500 KB:

$ find / -size +1500

O los archivos/carpetas contienen el nombre “pepi” y tienen menos de

1000 KB:

$ find / -name *pepi* -size -1000

$ clear

Limpia la pantalla/consola quedándola como si acabáramos de abrirla.

$ clear

$ ps (process status)

Nos muestra lo que queramos saber de los procesos que están corriendo en

nuestro sistema. Cada proceso está identificado con un número llamado

PID. Si hacemos…

$ ps -A

…nos mostrará un listado de todos los procesos, su PID a la izquierda y su

nombre a la derecha. Si queremos más información:

$ ps aux

$ kill (matar)

Elimina el proceso que le indiquemos con su PID.

$ kill

Page 9: Comandos Linux

9

En ocasiones el proceso no “muere” del todo, pero se le puede forzar al

sistema para que lo mate con seguridad del siguiente modo:

$ kill -9

$ sudo (super-user do)

La cuenta de usuario en Ubuntu es relativamente normal. Tiene derechos

de administrador a medias. Me explico, los tiene, pero cada vez que se

haga algo importante y de riesgo para el sistema, hay que hacerlo

mediante el prefijo “sudo” y escribiendo después la contraseña.

Por ejemplo, algo que hemos hecho muchas veces en los tutoriales es hacer

una copia de seguridad del fichero xorg.conf. Éste está localizado en la

carpeta /etc/X11 y ahí ningún usuario puede hacer modificaciones o

borrar nada si no es el administrador o tiene derechos como tal, gracias a

sudo. Por eso hacíamos siempre:

$ sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf

Siempre que necesitemos hacer un apt-get/aptitude update o install y

acciones de este tipo, tendremos que poner antes el “sudo”.

$ passwd (password)

Con este comando podremos cambiar la contraseña de nuestra cuenta.

Primero nos pedirá la contraseña actual como medida de seguridad.

Después nos pedirá que introduzcamos dos veces seguidas la nueva

contraseña.

$ passwd

$ su (super-user)

Aunque el comando suele relacionarse con "super user" realmente parece

ser que viene de "switch user" o "substitute user".

Page 10: Comandos Linux

10

Mediante su podremos loguearnos como superusuario. Tras escribirlo nos

pedirá la contraseña de root y estaremos como administrador. Podremos

hacer todo lo que queramos.

$ su

Este comando también nos permite hacer login con otra cuenta distinta.

Por ejemplo, imaginemos que tenemos otra cuenta, además de root y la

nuestra, llamada “invitado”. Para hacer login como tal bastaría con

poner:

$ su invitado

y después escribir la contraseña de esa cuenta.

$ sudo passwd Podréis cambiar la contraseña de root (la del super-usuario).

No es un comando propiamente dicho (es la unión de 2) pero es interesante

que lo conozcáis.

$ sudo passwd

$ apt (advanced packets tool)

Es uno de los comandos más útiles que se han desarrollado en los sistemas

GNU/Linux debian o basados en esta distro. Nos permite comprobar

actualizaciones, actualizar todo el sistema. También nos ofrece

funcionalidad para buscar, descargar e instalar paquetes con una sola

orden.

Tenemos variantes, las más usadas son las siguientes:

$ apt-cache search nombre_paquete

Busca nombre_paquete para ver si existe literal o aproximadamente

ofreciéndonos los paquetes que pudieran ser en caso de que hayamos

Page 11: Comandos Linux

11

puesto un nombre aproximado.

$ apt-get update

Actualiza los repositorios que son los que contienen los paquetes. Los

repositorios son como las direcciones que contienen nuestros paquetes.

apt-get update lo que hace es actualizar el listado de todos esos paquetes,

con la dirección de dónde obtenerlos para que a la hora de hacer la

búsqueda y su posterior descarga sea más rápida haciéndolo en nuestro

ordenador.

$ apt-get upgrade

Actualiza nuestro sistema con todas las posibles actualizaciones que

pudiera haber. La actualización no se realiza sólo sobre el propio sistema

operativo, sino también sobre las aplicaciones que estén contenidas en los

repositorios. Una útil forma de estar siempre al día.

$ apt-get install nombre_paquete

Localizado el nombre del paquete que queremos descargar e instalar, este

comando se encargará del proceso. Buscará en nuestro índice (el que se

crea con update) de dónde tiene que descargarse el paquete, lo hace y

posteriormente lo instala.

$ apt-get remove [--purge] nombre_paquete

Elimina el paquete especificado del sistema. Damite el argumento

“–purge” (corchetes = opcional) para que borre también los ficheros de

configuración.

$ apt-get autoremove

Elimina paquetes que han quedado inservibles tras realizar algún apt-get

remove, los llamados huérfanos. Normalmente tras hacer este último te

avisa en un mensaje que lo realices.

Todos estos comandos necesitan tener privilegios de administración, así

que si no los usáis como root, debéis agregar primero el conocido “sudo”.

Page 12: Comandos Linux

12

$ aptitude (aptitude)

En el fondo juega con las siglas de apt para crear aptitude

Es una versión mejorada de apt. Si os habéis fijado en todos los manuales y

entradas donde había un proceso de instalación he usado aptitude en lugar

de apt. El segundo es quizá el más extendido al ser el que vio la luz

primero.

Aptitude nació como un front-end de apt, es decir, como una especie de

aplicación gráfica y en modo texto para realizar todo lo que hace apt. Pero

lo cierto es que sus características son mejores.

Apt cuando instala algo te puede realizar una sugerencia para que

instales algo más que te podría venir bien, pero no lo hace. Hay programas

que a la vez usan otros para algunas de sus funciones u opciones. apt no

instalaría los segundos, como mucho te avisaría. Sin embargo aptitude sí

que lo instalará porque sabe que de alguna forma es indispensable para el

que has pedido.

De la misma forma, si con apt instalas luego ese programa que es usado

por otro, cuando desinstalas el principal, no se desinstalará el secundario,

aunque éste ya no tenga mucho sentido que esté instalado, y lo mismo

sucede con librerías. aptitude está capacitado para desinstalar lo que él

mismo ha instalado como recomendación. Te deja el sistema más limpio

tras las desinstalaciones.

Para abrir el interfaz gráfico de aptitude, tan sólo hay que teclearlo:

$ aptitude

Sin embargo, también se puede usar exactamente igual que apt, pero con

las características que he comentado de aptitude:

$ aptitude search nombre_paquete

$ aptitude install nombre_paquete

$ aptitude remove nombre_paquete

Page 13: Comandos Linux

13

$ aptitude purge nombre_paquete

$ aptitude update

$ aptitude upgrade

Y al igual que antes, necesitaréis usarlo con el sudo delante si no estáis

como administrador.

$ dpkg (depackage)

Los paquetes cuando se instalan sufren un proceso de despaquetaje. En el

fondo un paquete .deb contiene una serie de scripts de pre-instalación,

post-instalación y los archivos en cuestión del paquete.

Este comando lo usaremos para instalar un paquete .deb que ya tengamos

descargados en nuestro sistema. En muchas ocasiones hay una aplicación

que no está en los repositorios y nos hemos bajado el .deb para instalarlo

con el interfaz gráfico que corresponda (GDebi en el caso de GNOME).

En el fondo estas interfaces gráficas están basadas en dpkg. Si queremos

instalar un paquete ya descargado mediante consola usaremos el

argumento „-i‟ (i=install):

$ dpkg -i nombre_paquete

Para desinstalarlo „-r‟ (r=remove):

$ dpkg -r nombre_paquete

Para desinstalar el paquete y los ficheros de configuración “–purge”

(purgar):

$ dpkg -r –purge nombre_paquete

$ Alien (Alien)

Aunque Debian -y por extensión Ubuntu- dispone de una ingente cantidad

Page 14: Comandos Linux

14

de paquetes en sus repositorios, puede que alguien tenga algún problema

en encontrar una aplicación específica empaquetada como le interesa

aunque ha visto el paquete que quiere para otras distros.

Alien es bastante práctico para estas situaciones ya que nos permite

transformar un paquete de un gestor de paquetes determinado en otro.

Por ejemplo podemos pasar de un .deb (Debian) a un .rpm (Red Hat) y

viceversa. Las extensiones soportadas son:

* deb (Debian)

* rpm (Red Hat)

* slm (Stampede)

* tgz (Slackware)

* pkg (Solaris)

Su uso es sencillo. Lo que debemos saber es el argumento que

transformará el paquete original en la extensión objetivo:

* “–to-deb” o “-d” para transformar a .deb

* “–to-rpm” o “-r” para transformar a .rpm

* “–to-tgz” o “-t” para transformar a .tgz

* “–to-pkg” o “-p” para transformar a .pkg

* “–to-slp” para transformar a .slp

Como ejemplo, pasaremos un supuesto paquete de Red Hat llamado

“pepino.rpm” a “pepino.deb”:

$ alien -d pepino.rpm

$ man (manual)

Page 15: Comandos Linux

15

Es otro de los comandos de gran potencia en Linux.

Normalmente queda programa o comando viene con un archivo de ayuda

muy completo sobre su uso y sus argumentos. Cuando desconozcáis cómo

se usa y qué argumentos tiene un comando o aplicación tan sólo tenéis que

escribir en consola:

$ man nombre

En ocasiones la información que nos ofrece man puede llegar a ser

excesiva. Casi todos los comandos y aplicaicones aceptan el argumento

“–help” para que muestre cierta ayuda más resumida. Por ejemplo con

aptitude:

$ aptitude –help

Todos los comandos que os he mostrado tienen muchos más argumentos.

Os he puesto los más usados o necesarios, así que si hay alguno que os

interesa particularmente conocer más de él, tenéis “man” o “–help” para

obtener más detalles.

$ passwd (password)

Podemos cambiar la contraseña empleando la orden passwd.

Nos pedirá la contraseña anterior (current) y la nueva. Volverá a pedir

una segunda vez la nueva para validarla. El usuario root podrá cambiar la

contraseña de cualquier otro usuario. Sin embargo, los usuarios no

privilegiados solamente podrán cambiar su propia clave. Sintaxis:

$ passwd

$ date Muestra por pantalla el día y la hora, permitiendo, además, el cambio de la

misma). Sintaxis:

$ date [opcion][formato]

Page 16: Comandos Linux

16

$ cal

Muestra el calendario del mes o año actual actual. Sintaxis:

$ cal [mes][año]

Ejemplos:

$ cal

Muestra el calendario del mes actual.

$ cal 1949

Muestra el calendario del año 1949.

$ cal 05 1949

Muestra el calendario de Mayo de 1949.

$ who Indica qué usuarios tiene el ordenador en ese momento, en qué terminal

están y a qué hora iniciaron la sesión. Sintaxis:

$ who

$ whoami Indica el usuario que está trabajando en la terminal actual. Sintaxis:

$ whoami

$ finger

Page 17: Comandos Linux

17

Presenta una información completa de los usuarios conectados a la red.

Sintaxis:

$ finger [-bfilpqsw][login1 login2]

$ uname Proporciona el nombre del sistema en el que se está trabajando. Sintaxis:

$ uname [-opciones]

Como opciones principales tenemos:

-a indica, además, la versión, fecha y tipo de procesador.

-m indica, además, el tipo de de procesador.

-r indica, además, la versión.

-v indica, además, la fecha.

$ logname Indica el nombre del usuario conectado al sistema (el que ha hecho login).

Sintaxis:

$ logname

$ info Proporciona ayuda resumida acerca de un comando en cuestión. Sintaxis:

$ info [comando]

$ clear

Page 18: Comandos Linux

18

Este comando se utiliza para limpiar la pantalla. Sintaxis:

$ clear

$ echo

Muestra por pantalla los argumentos que le pasamos. Sintaxis:

$ echo [argumento1] [argumento2] ... [argumentoN]

$ alias Asigna un nombre o etiqueta a la ejecución de un comando con sus

opciones. Sintaxis:

$ alias etiqueta=‟orden‟

La orden alias solamente, muestra todos los alias que hay creados. La

orden unalias elimina el alias especificado.

4. COMANDOS ESPECIFICOS

Para reconfigurar las X (gráfica):

$ sudo dpkg-reconfigure xserver-xorg

reiniciamos las X con:

$ sudo reboot

Para saber que tarjeta gráfica tengo instalada:

$ lspci | grep -i vga

Para saber qué modelo de tarjeta de sonido tengo:

$ lspci | grep -i audio

Page 19: Comandos Linux

19

ó

$ aplay -l

Para saber que modelo de chip tiene la tarjeta de sonido:

$ cat /proc/asound/card0/codec#* | grep Codec

Para saber todo el hardware y los controladores que tenemos instalados:

$ lspci -vv

Para saber el listado de módulos cargados de sonido:

$ lsmod | grep snd

5. CARACTERES COMODIN(WILDCARDS)

Una característica importante de la mayoría de los intérpretes de

comandos en Linux es la capacidad para referirse a más de un fichero.

Una forma de hacerlo es utilizando caracteres especiales llamados

comodines.

Al igual que en MS-DOS, el comodín * hace referencia a cualquier

carácter o cadena de caracteres en el nombre del fichero. El intérprete de

comandos sustituirá el asterisco por todas las combinaciones posibles

provenientes de los ficheros en el directorio al cual nos estamos refiriendo.

Se dice que está realizando una expansión de comodines.

El carácter ? es también comodín, aunque solamente expande un carácter.

Con ambos caracteres existe una excepción. No afectarán a aquellos

ficheros que comienzan por un punto, y que son ocultos para órdenes como

ls.

Además, podemos utilizar los corchetes para referirnos a un conjunto de

caracteres o bien un rango de caracteres ASCII. Ejemplos:

$ ls *n*

Page 20: Comandos Linux

20

Muestra todos los archivos y directorios, del directorio actual, que

contienen el carácter n

$ ls *

Muestra todos los archivos y directorios del directorio actual

$ ls tm?

Muestra todos los archivos y directorios del directorio actual que

comienzan por tm y contienen tres caracteres

$ ls tabla[123]a

Muestra todos los archivos y directorios del directorio actual que

comienzan por tabla, seguidos del carácter 1, 2 ó 3, y terminan en a

$ ls ??base[A-Z][5-9]*

Muestra todos los archivos y directorios del directorio actual que

comienzan con dos caracteres cualesquiera, seguidos de la cadena base, a

continuación una letra mayúscula, seguida de un número del 5 al 9 y por

último una cadena de caracteres (uno, varios o ninguno)

6. COMANDOS sobre directorios

Directorio Personal

Como se ha visto anteriormente el directorio personal es un directorio con

un determinado nombre asignado a un usuario. Los directorios personales

habitualmente son subdirectorios de /home (en algunos casos se utiliza

mnt, u otro subdirectorio de orden inferior).

Generalmente el nombre coincide con el del nombre de usuario, aunque

puede no ser así, y varios usuarios pueden estar trabajando en el mismo

directorio. Cada usuario de Linux puede crear una estructura en árbol de

Page 21: Comandos Linux

21

subdirectorios y archivos tan compleja como desee bajo su directorio

personal pero normalmente nunca fuera de él.

$ ls

Permite mostrar el contenido de un directorio. ls Muestra los nombres de

los ficheros y subdirectorios contenidos en el directorio en el que se está.

Sólo se obtienen los nombres de los ficheros, sin ninguna otra información.

Sintaxis:

$ ls [-opciones][fichero]

Parámetros:

-a Muestra todos los ficheros incluyendo algunos que ordinariamente

están ocultos para el usuario (aquellos que comienzan por un punto).

Recordemos que el fichero punto . indica el directorio actual y el

doble punto .. el directorio padre, que contiene, al actual.

-l Esta es la opción de lista larga: muestra toda la información de cada

fichero incluyendo: protecciones, tamaño y fecha de creación o del

último ambio introducido,...

-c Muestra ordenando por día y hora de creación.

-t Muestra ordenando por día y hora de modificación.

-r Muestra el directorio y lo ordena en orden inverso.

-R Lista también subdirectorios.

ls subdir Muestra el contenido del subdirectorio subdir.

-l filename Muestra toda la información sobre el fichero filename.

--color Muestra el contenido del directorio coloreado.

Las opciones anteriores pueden combinarse. Por ejemplo:

Page 22: Comandos Linux

22

ls -cr Muestra el directorio ordenando inversamente por fechas. El

comando ls admite los caracteres de sustitución o * y ?. Por ejemplo:

ls *.gif Muestra todos los nombres de ficheros que acaben en .gif, por

ejemplo, dib1.gif, a.gif, etc.

ls file? Muestra todos los ficheros cuyos nombres empiecen por file y

tengan un nombre de cinco caracteres, por ejemplo: file1, file2, filea,

etc.

$ mkdir

El comando mkdir (make directory) permite a cada usuario crear un

nuevo subdirectorio. Sintaxis:

$ mkdir subdirectorio

Donde subdirectorio es el nombre del directorio que se va a crear.

$ rmdir

Este comando borra uno o más directorios del sistema (remove directory),

siempre que estos subdirectorios estén vacíos. Sintaxis:

$ rmdir subdirectorio

Por ejemplo, rmdir subdir1, donde subdir es el nombre del directorio que

se va a eliminar.

$ cd

Este comando permite cambiar de directorio a partir del directorio actual

de trabajo. Sintaxis:

$ cd [directorio]

Veamos algunas opciones:

Page 23: Comandos Linux

23

$ cd – cambia al último directorio en el que estuvimos antes del actual.

$ cd.. cambia al directorio padre.

$ cd. nos deja donde estamos.

$ cd Nos sitúa nuevamente en el directorio personal del usuario.

$ cd / cambia al directorio raíz

Nota: al contrario que en MS-DOS en Linux no existe la forma cd.. sin

espacio entre cd y los dos puntos.

$ pwd

El comando pwd (print working directory) visualiza o imprime la ruta del

directorio en el que nos encontramos en este momento. Este comando es

uno de los pocos que no tiene opciones y se utiliza escribiendo

simplemente:

$ pwd

7. ACCESO A UNIDADES DE DISCO: MONTAJE Y DESMONTAJE

Linux a diferencia de Windows no utiliza letras ("a:", "c:", "d:", ...) para

acceder a las distintas unidades de disco de un ordenador. En Linux para

acceder al contenido de una unidad de disco o de un CD-ROM este tiene

que haber sido previamente "montado". El montado se realiza mediante el

comando mount, con lo que el contenido de la unidad se pone a disposición

del usuario en el directorio de Linux que se elija. La sintaxis de este

comando es la siguiente:

$ mount [-t SistemaDeFichero] [Dispositivo] DirectorioDeMontaje

Por ejemplo para acceder al CD-ROM se teclearía el siguiente comando:

Page 24: Comandos Linux

24

$ Mount -t iso9660 /dev/cdrom /mnt/cdrom

donde -t iso9660 indica el tipo de sistema que usa la unidad de disco para

guardar los ficheros (las más usuales son: iso9660 en el caso de un

CD-ROM, vfat en el caso de Windows, y ext2 (3 o 4) en el caso de Linux),

/dev/cdrom indica el dispositivo que se va a montar. Todos los dispositivos

están representados por un fichero del directorio /dev; por ejemplo, en el

caso de un disquete será seguramente /dev/fd0, por último /mnt/cdrom es

el directorio en el que se pondrá a disposición del usuario el contenido del

CD-ROM. Para montar disquetes se suele utilizar el directorio /mnt/floppy

(aunque esto depende de la versión de Linux que utilicemos).

En el caso de Ubuntu, el comando mount admite directamente los

directorios /cdrom, /cdrom1, /floppy, ... para el montaje de nuestras

unidades, por lo que lo único que habría que escribir, para montar por

ejempo la disquetera, sería:

$ mount /floppy

Si omitimos el tipo de sistema de ficheros y/o el dispositivo, Ubuntu toma la

información correspondiente del fichero /etc/fstab, el cual contiene

información de los distintos sistemas de ficheros del equipo.

De todas formas el usuario siempre puede crear un directorio vacío con el

nombre que el elija para montar las unidades de disco que desee donde

desee.

Cuando el usuario haya dejado de usar ese disco deberá "desmontarlo"

mediante el comando umount antes de sacar el disquete o el CD-ROM.

Siguiendo con el ejemplo de la disquetera en Ubuntu, debería escribir:

$ umount /floppy

En principio, para utilizar el comando mount especificando todos los

parámetros hace falta ser administrador o root. Para que un usuario

común pueda utilizar disquetes, CD-ROM, etc. hay que editar el fichero

/etc/fstab. Por ejemplo para que cualquier usuario pueda acceder a un

disquete habrá que indicar la siguiente línea:

/dev/fd0 /mnt/floppy vfat user,noauto 0 0

Page 25: Comandos Linux

25

También habrá que asegurarse de que el directorio /mnt/floppy sea

accesible por todos los usuarios.

Una vez seguidos los pasos anteriores cualquier usuario podrá "montar"

un disquete escribiendo el siguiente comando:

$ mount /mnt/floppy

Al igual que antes, el usuario deberá ejecutar el comando umount

/mnt/floppy antes de sacar el disquete.

Nota: Existen en la actualidad distribuciones (por ejemplo, SuSE Linux)

que realizan este proceso de forma automática, por lo que las unidades de

disquete y CD-ROM quedan accesibles a todos los usuarios de una forma

sencilla, empleando los comandos:

$ mount /mnt/floppy

$ umount /mnt/floppy

siempre que /mnt/floppy sea la ruta adecuada.

Para desmontar una partición empleamos el comando "umount":

$ sudo umount /dev/sdxX

Donde "xX" es la partición que queremos desmontar. Por ej. "sda5" que

es la partición "5" del disco duro "a".

8. ORDENES RELACIONADAS CON FICHEROS

$ cp

Copia un fichero o ficheros en otro fichero o directorio. Sintaxis:

$ cp fichero1 [fichero2] ... [ficheroN] destino

Page 26: Comandos Linux

26

donde [ficheroX] es el fichero a copiar y [destino] es el fichero o directorio

de destino.

Podemos utilizar . y .. para referirnos al directorio actual y al directorio

padre respectivamente.

Así pues, la orden cp file1 file2, hace una copia de file1 y le llama file2. Si

file2 no existía, lo crea con los mismos atributos de file1. Si file2 existía

antes, su contenido queda destruido y es sustituido por el de file1. El

fichero file2 estará en el mismo directorio que file1. Tanto file1 como file2

indican el nombre de un archivo, que puede incluir el la ruta al mismo si

alguno de ellos no se encuentra en el directorio actual. Otra posibilidad es:

$ cp file1 file2 namedir

que hace copias de file1 y file2 en el directorio namedir.

$ mv

Se utiliza para el traslado y cambio de nombre de ficheros. Sintaxis:

$ mv fichero1 [fichero2] ... [ficheroN] destino

Como vemos, este comando tiene una forma similar al anterior. El

comando mv realiza la misma función que el cp pero además destruye el

fichero original.

Así, si ejecutamos la orden

$ mv file1 file2

en definitiva se traslada el contenido de file1 a file2; a efectos del usuario lo

que ha hecho es cambiar el nombre a file1, llamándole file2. De igual

forma…

$ mv file1 file2 namedir

traslada uno o más ficheros (file1, file2,...) al directorio namedir

conservándoles el nombre. El comando…

Page 27: Comandos Linux

27

$ mv namedir1 namedir2

cambia el nombre del subdirectorio namedir1 por namedir2.

Hay que recalcar que el comando mv sirve así mismo para cambiar el

nombre de los ficheros.

$ rm

Se utiliza para borrado de ficheros. Este comando elimina uno o más

ficheros de un directorio en el cual tengamos permiso de escritura.

Sintaxis:

$ rm file1 [file2]

Con este comando resulta facilísimo borrar ficheros inútiles, y

desgraciadamente, también los útiles. Por eso es conveniente y casi

imprescindible emplear lo opción -i, de la forma siguiente:

$ rm -i file1 file2

Con esta opción, Linux pedirá confirmación para borrar cada fichero de la

lista, de si realmente se desea su destrucción o no. Se recomienda usar

siempre este comando con esta opción para evitar el borrado de ficheros

útiles. Por ejemplo, si se teclea, rm -i superfluo aparecerá en pantalla el

aviso siguiente: remove superfluo? y habrá que contestar y (yes) o n (not).

En este comando se pueden utilizar los caracteres comodines (* y ?), como

por ejemplo, rm fich* que borraría todos los ficheros del directorio actual

que comiencen por fich. El comando rm * borrará todos los ficheros del

directorio actual.

Otra opción es –r, que borra directorios recursivamente (borran el

directorio y todo su contenido).

$ file

Este comando realiza una serie de comprobaciones en un fichero para

Page 28: Comandos Linux

28

tratar de clasificarlo, mostrando sus características. Sintaxis:

$ file fichero

Tras su ejecución este comando muestra el tipo del fichero e información

al respecto del mismo. Este comando se puede aplicar también a

directorios.

$ cat

Visualización sin formato de un fichero. Este comando permite visualizar

el contenido de uno o más ficheros de forma no formateada. También

permite copiar uno o más ficheros como apéndice de otro ya existente.

Algunas formas de utilizar este comando son las siguientes:

$ cat filename

Saca por pantalla el contenido del fichero filename.

$ cat file1 file2

Saca por pantalla, secuencialmente y según el orden especificado, el

contenido de los ficheros indicados.

$ cat >file1

Acepta lo que se introduce por el teclado y lo almacena en file1 (se crea

file1). Para terminar se emplea d.

$ pr

Visualización de ficheros con formato. Este comando, a diferencia de cat,

imprime por consola el contenido de los ficheros de una manera

formateada, por columnas, controlando el tamaño de página y poniendo

cabeceras al comienzo de las mismas. Está muy en relación con el comando

lp de salida por impresora. Las formas más importantes que admite son

las siguientes:

Page 29: Comandos Linux

29

$ pr file

Produce una salida estándar de 66 líneas por página, con un

encabezamiento de 5 líneas (2 en blanco, una de identificación y otras 2

líneas en blanco).

$ pr -ln file

Produce una salida de n líneas por página (cuando el tamaño de papel de

impresora, por ejemplo, tiene un número de líneas distinto de 66).

$ pr -p file

Hace una pausa para presentar la página, hasta que se pulsa para

continuar.

$ pr -t file

Suprime las 5 líneas del encabezamiento y las del final de página.

$ pr -wn file

Ajusta la anchura de la línea a n posiciones.

$ pr -d file

Lista el fichero con espaciado doble.

$ pr -h `caracteres` file

El argumento o cadena de caracteres `caracteres` se convertirán en la

cabecera del listado.

$ pr +n file

Imprime el fichero a partir de la página n.

Además de los ejemplos anteriores, se pueden combinar varias opciones en

un mismo comando, como por ejemplo en:

Page 30: Comandos Linux

30

$ pr -dt file.

La salida de este comando es por la consola, pero puede redireccionarse a

otro fichero, por ejemplo, si ejecutamos el comando:

$ pr file1 > file2

se crea un fichero nuevo llamado file2 que es idéntico a file1, pero con

formato por páginas y columnas.

$ more

$ less

Estos comandos permiten visualizar un fichero pantalla a pantalla. El

número de líneas por pantalla es de 23 líneas de texto y una última línea de

mensajes, donde aparecerá la palabra more. Cuando se pulsa la barra

espaciadora (el espacio en blanco), se visualizará la siguiente pantalla.

Para salir de este comando (terminar la visualización) se pulsa d o q.

El comando more muestra el contenido de los ficheros indicados, una

pantalla cada vez. Sintaxis:

$ more fichero1 [fichero2] ... [ficheroN]

La teclas que nos permiten movernos por el fichero son: b va a la página

anterior, barra espaciadora va a la página siguiente, flechas de cursor

arriba y abajo, q finaliza la ejecución de more.

El comando less es muy similar al anterior pero, además, permite el

desplazamiento a lo largo del texto empleando las teclas de cursores

pudiendo desplazarse, además, hacia la izquierda o la derecha.Sintaxis:

$ less fichero1 [fichero2] ... [ficheroN]

$ grep

El comando grep localiza una palabra, clave o frase en un conjunto de

Page 31: Comandos Linux

31

directorios, indicando en cuáles de ellos la ha encontrado. Este comando

rastrea fichero por fichero, por turno, imprimiendo aquellas líneas que

contienen el conjunto de caracteres buscado. Si el conjunto de caracteres a

buscar está compuesto por dos o más palabras separadas por un espacio,

se colocará el conjunto de caracteres entre apóstrofes ('). Su sintaxis es la

siguiente:

$ grep [-opcion] 'conjuntocaracteres' file1 file2 file3

siendo 'conjuntocaracteres' la secuencia de caracteres a buscar, y file1,

file2, y file3 los ficheros donde se debe buscar. Veamos un nuevo ejemplo:

$ grep 'TRIANGULARIZACION MATRIZ' matrix.f scaling.f

Este comando buscará TRIANGULARIZACION MATRIZ entre las

líneas de los ficheros matrix.f y scaling.f.

Las opciones principales del comando son:

c lo único que se hace es escribir el número de las líneas que

satisfacen la condición.

i no se distinguen mayúsculas y minúsculas.

l se escriben los nombres de los ficheros que contienen líneas

buscadas.

n cada línea es precedida por su número en el fichero.

s no se vuelcan los mensajes que indican que un fichero no se

puede abrir.

v se muestran sólo las líneas que no satisfacen el criterio de

selección.

A continuación se muestra una serie de ejemplos:

$ grep „ˆd‟ text líneas que comienzan por d.

$ grep „ˆ[ˆd]‟ text líneas que no comienzan por d.

Page 32: Comandos Linux

32

$ grep -v „ˆC‟ file1 > file2 quita las líneas de file1 que comienzan por C

y lo copia en file2.

$ head

Muestra las primeras líneas del contenido de los archivos especificados;

por defecto muestra las 10 primeras líneas. Sintaxis:

$ head [-número] ...

Por ejemplo, head -7 texto, escribe por pantalla las 7 primeras líneas del

fichero texto.

$ tail

Muestra las primeras líneas del contenido de los archivos especificados;

por defecto muestra las 10 primeras líneas. Sintaxis:

$ tail [-número] ...

9. OTROS COMANDOS BASICOS

9.1. Espacio en disco: Comandos du y df

El comando du permite conocer el espacio ocupado en el disco por un

determinado directorio y todos los subdirectorios que cuelgan de él. Para

usarlo basta simplemente colocarse en el directorio adecuado y teclear du.

Este comando da el espacio de disco utilizado en bloques. Para obtener la

información en bytes se debe emplear el comando con la opción –h:

$ du -h

El comando df por el contrario informa del espacio usado por las

particiones del sistema que se encuentren montadas.

Page 33: Comandos Linux

33

9.2. Impresión: Comando lpr El comando lpr se emplea para imprimir una serie de ficheros. Si se

emplea sin argumentos imprime el texto que se introduzca a continuación

en la impresora por defecto. Por el contrario, lpr nombre_fichero imprime

en la impresora por defecto el fichero indicado.

9.3. Búsqueda de ficheros. Comando find

Con find podemos encontrar archivos (y, por tanto, directorios) basando

su búsqueda en distintas características de los mismos. Sintaxis:

$ find [camino...] [expresión]

El número de opciones de find es muy elevado, por lo que se aconseja

acudir al manual para mayor información (man find).

9.4. Enlaces a ficheros. Comando ln

Los enlaces nos van a permitir realizar copias de los ficheros con otro

nombre, para poder acceder a ellos desde lugares distintos a su ubicación

original, con un ahorro de espacio muy importante con respecto al

comando cp.

Nuestro sistema identifica a los ficheros mediante un número denominado

inodo, que les asigna en el momento de su creación.

Es decir, un directorio lo que contiene realmente es una lista de números

de inodo con sus correspondientes nombres de fichero. De esta forma, cada

nombre de fichero es un enlace a un inodo particular; por ello, cada inodo

está asociado a un conjunto de información guardada en el disco, que

puede tener asignados distintos nombres, y a la que podremos acceder

desde distintos lugares del árbol de directorios si así lo deseamos.

En este sentido, podremos crear dos tipos distintos de enlaces a ficheros:

enlaces duros y enlaces simbólicos.

El comando ln nos servirá para crear ambos tipos de enlaces.

Page 34: Comandos Linux

34

ENLACES DUROS (HARD LINKS)

Si utilizamos el comando ln sin especificar ninguna opción, por defecto

crearemos un enlace duro. La sintaxis es la siguiente:

$ ln [nombre del enlace]

$ ln ...

Obviamente, el fichero o ficheros para los que deseamos crear un enlace

duro deberán existir. Así mismo, si el último argumento es el nombre de un

directorio que existe, crearemos un enlace duro a cada fichero, dentro del

directorio, y con el mismo nombre de fichero.

Si solamente especificamos el fichero que queremos enlazar, y no

indicamos ningún nombre para el enlace, éste se creará con el mismo

nombre que el fichero a enlazar.

Los cambios que realicemos en el fichero enlazado o en el enlace, se

reflejarán en el resto, ya que todos tendrán el mismo número de inodo, y

por lo tanto hacen referencia al mismo conjunto de información.

La ventaja de utilizar enlaces duros radica en que el comando rm

únicamente borrará aquel fichero que le indiquemos. La información

solamente se borrará por completo cuando borremos todos los enlaces a

un inodo.

La desventaja con respecto a los enlaces simbólicos es que sólo permite

crear enlaces dentro del mismo sistema de ficheros.

Los directorios . y .. son enlaces duros al directorio actual y a su directorio

padre respectivamente. Ejemplo:

1 – Creamos el fichero pruebaln con la orden cat.

$ cat > pruebaln

hola

Page 35: Comandos Linux

35

CTRL+ D

2 – Creamos un enlace a pruebaln que se llame penlace.

$ ln pruebaln penlace

3 – Veamos las características de estos ficheros con la orden ls.

Utilizamos la opción –i para ver el número de inodo. Ambos tendrán

el mismo número de inodo con dos enlaces.

$ ls –i pruebaln penlace

4 – Modificamos pruebaln y comprobamos si también se modifica

penlace.

$ cat >>pruebaln

adios

CTRL+ D

$ cat pruebaln

$ cat penlace

5 – Modificamos penlace y comprobamos si también se modifica

pruebaln.

$ cat >>penlace

otra vez hola

CTRL+ D

$ cat penlace

$ cat pruebaln

6 – Eliminamos pruebaln y comprobamos si penlace permanece y

Page 36: Comandos Linux

36

contiene la información correspondiente.

$ rm pruebaln

$ cat penlace

7 – Si utilizamos la orden ls –i, vemos que penlace sigue con el mismo

número de inodo, que ahora solamente tendrá un enlace.

ENLACES SIMBÓLICOS

Si utilizamos la opción –s con el comando ln, es decir ln –s, crearemos un

enlace simbólico. La sintaxis en este caso es la misma que utilizamos para

crear enlaces duros.

Podemos encontrar una similitud entre este tipo de enlaces y los accesos

directos que estamos acostumbrados a crear con los sistemas Windows.

En el caso de los enlaces simbólicos, cada fichero tendrá un número de

inodo distinto. Sin embargo, al igual que con los enlaces duros, todos los

cambios que se realicen en uno de los ficheros se verán reflejados en el

resto.

Si borramos el fichero enlazado, el enlace simbólico perderá toda la

información, puesto que su inodo apunta a un número de inodo que ya no

existe. Sin embargo, podremos crear enlaces simbólicos a ficheros de otros

sistemas de archivos. Ejemplo:

1 – Aún tenemos el fichero penlace. Creamos un enlace duro a penlace

que se llame pruebaln.

$ ln penlace pruebaln

2 – Con la orden ls –li vemos que ambos tienen el mismo inodo, y que

este inodo tiene dos enlaces.

$ ls -li pruebaln penlace

3 – Creamos un enlace simbólico a penlace que se llame penlacesim.

Page 37: Comandos Linux

37

$ ln –s penlace penlacesim

4 – Con la orden ls –li vemos que tienen distinto número de inodo.

Además, el inodo de penlacesim sólo tiene un enlace, y el inodo de

penlace sigue teniendo dos. En la línea correspondiente a penlacesim

vemos que aparece el fichero al que apunta, y la letra l (“ele”) al

inicio.

$ ls -li pruebaln penlace penlacesim

5 – Cambiamos penlace y comprobamos si cambia penalcesim.

$ cat >>penlace

otra vez adios

CTRL+ D

$ cat penlacesim

6 – Por último borramos penlace. Comprobamos que pruebaln

permanece y que no podemos ver el contenido de penlacesim, el

sistema nos dirá que no existe. Para que desaparezca totalmente

tenemos que borrarlo.

$ rm penlace

$ cat pruebaln

$ cat penlacesim

$ rm penlacesim

$ rm pruebaln

9.5. Agrupación y compresión de ficheros Comandos tar y gzip/gunzip

Page 38: Comandos Linux

38

Tanto el comando tar como gzip son ampliamente empleados para la

difusión de programas y ficheros en Linux.

$ tar

Este comando agrupa varios ficheros en uno solo o “archivo”, mientras

que el segundo los comprime. En conjunto estos dos programas actúan de

forma muy similar a programas como Winzip. Su sintaxis es:

$ tar [opciones][ficheros]

El modo en el que se escriben las opciones de tar es un poco especial. El

guión inicial, por ejemplo, no es necesario.

Las opciones más comunes para tar son:

-c creación de archivadores nuevos.

-x extracción de archivos de un archivador existente.

-v muestra los archivos mientras se agregan o se extraen.

-t muestra el contenido de un archivo tar.

-f el siguiente argumento es el archivador a crear, del que

queremos extraer archivos o mostrar un listado.

Para crear un nuevo archivo se emplea:

$ tar –cvf nombre_archivo.tar fichero1 fichero2 ...

donde fichero1, fichero2 etc. son los ficheros que se van a añadir al archivo

tar. Si se desea extraer los ficheros se emplea:

$ tar –xpvf nombre_archivo.tar fichero1 ...

Veamos algunos ejemplos:

Page 39: Comandos Linux

39

$ tar cvf escritorio.tar Desktop

empaqueta el contenido de Desktop en un archivador nuevo escritorio.tar

$ tar xvf escritorio.tar Desktop/Floppy.desktop

extrae del archivo escritorio.tar el fichero indicado

$ tar xvf escritorio.tar

extrae todo el contenido del archivo escritorio.tar

$ tar tvf escritorio.tar

muestra un listado largo del contenido del archivo escritorio.tar

Hay que tener en cuenta, a la hora de extraer el contenido de un

archivador (al fichero tar resultante se le suele llamar así), si el archivador

se creó conservando el nombre del directorio de origen. Es posible que se

sobrescriba el contenido de los ficheros originales.

Ejemplo: Nos situamos en el directorio raíz como root. Si archivamos los

ficheros / etc/group y /etc/passwd:

$ tar cvf backup.tar /etc/group /etc/passwd

estamos conservando los nombres del directorio al que pertenecen. Por lo

tanto, para extraer estos ficheros nos tendremos que situar en el directorio

raíz:

$ cd /

$ tar xvf backup.tar /etc/group /etc/passwd

Sin embargo, si archivamos los ficheros group y passwd estando en /etc:

$ tar cvf /backup.tar group passwd

no guardamos la ruta, por lo que para extraer los ficheros tendremos que

situarnos en ella:

Page 40: Comandos Linux

40

$ cd /

$ cd /etc

$ tar xvf /backup.tar group passwd

$ gzip

$ gunzip

Al contrario que tar que agrupa varios ficheros en uno, gzip comprime un

único fichero con lo que la información se mantiene pero se reduce el

tamaño del mismo. El uso de gzip es muy sencillo:

$ gzip [opciones] fichero

con lo que se comprime fichero (que es borrado) y se crea un fichero con

nombre fichero.gz.

La opción más común es:

-1 a -9 grado de compresión, mínimo y máximo respectivamente.

-d descomprimir el fichero .gz

Si lo que se desea es descomprimir un fichero se emplea entonces:

$ gzip –d fichero.gz

recuperando el fichero inicial.

Otra posibilidad sería utilizar el comando gunzip para la descompresión,

de la siguiente forma:

$ gunzip fichero.gz

Como se ha comentado al principio es típico emplear tar y gzip de forma

consecutiva, para obtener ficheros con extensión tar.gz o tgz que contienen

varios ficheros de forma comprimida (similar a un fichero zip). El

Page 41: Comandos Linux

41

comando tar incluye la opción z para estos ficheros de forma que para

extraer los ficheros que contiene:

tar –zxf fichero.tar.gz

9.6. Cambio de modo de los ficheros:

$ chmod

$ chown

$ chgrp

Cada usuario es dueño de su directorio personal y será dueño también de

los archivos que incluya en él.

Un usuario en Linux podrá configurar permisos en sus archivos. Por ello,

distinguiremos por un lado tres categorías de usuarios, y por otro los tipos

de permisos que cada uno de ellos puede tener sobre un archivo y/o

directorio.

Categorías de usuarios:

Dueño del archivo (u).

Grupo dueño (g), formado por todos los usuarios que son miembros

de un grupo asociado al archivo.

Resto de usuarios (o), todos los usuarios que no son ni el dueño ni

miembros del grupo dueño.

Tipos de permisos:

Lectura (r de Read, leer): para un archivo permite leer su contenido,

para un directorio permite que se muestren los archivos que

contiene.

Escritura (w de Write, escribir): para un archivo permite que se

modifique su contenido, para un directorio permite agregar y quitar

archivos.

Page 42: Comandos Linux

42

Ejecución (x de eXecute, ejecutar): para un archivo permite su

ejecución, para un directorio permite que el usuario lo recorra (que

entre y pase por él) – si no tiene permiso de lectura, aunque pueda

entrar no podrá ver el contenido.

Cuando ejecutamos el comando ls –l, podemos ver la configuración de

permisos de los archivos:

El primer carácter indica el tipo de archivo: “d” si es directorio, “-“

si es un archivo regular, “l” si es un enlace simbólico.

Los siguientes nueve caracteres indican los permisos para el dueño,

el grupo dueño y otros (rwxrwxrwx); si aparece un guión, indica que

el permiso correspondiente no está habilitado.

El siguiente número indica el número de vínculos.

Nombre del dueño y nombre del grupo dueño.

Tamaño en bytes.

Fecha de la última modificación.

Nombre del archivo.

$ chmod

Para cambiar los permisos de un fichero se emplea el comando chmod, que

tiene el formato siguiente:

$ chmod [quien] oper permiso files

Donde quien indica a quien afecta el permiso que se desea cambiar. Es una

combinación cualquiera de las letras u para el usuario, g para el grupo del

usuario, o para los otros usuarios, y a para todos los anteriores. Si no se da

el quien, el sistema supone a.

oper Indica la operación que se desea hacer con el permiso. Para dar un

permiso se pondrá un +, y para quitarlo se pondrá un -. Si quiero dar

Page 43: Comandos Linux

43

exactamente unos permisos, pondremos =.

permiso Indica el permiso que se quiere dar o quitar. Será una

combinación cualquiera de las letras anteriores : r,w,x,s.

files Nombres de los ficheros cuyos modos de acceso se quieren cambiar.

Por ejemplo, para quitar el permiso de lectura a los usuarios de un fichero

llamado fichero.txt el comando a utilizar es:

$ chmod a -r fichero.txt

Los permisos de lectura, escritura y ejecución tienen un significado

diferente cuando se aplican a directorios y no a ficheros normales. En el

caso de los directorios el permiso r significa la posibilidad de ver el

contenido del directorio con el comando ls; el permiso w da la posibilidad

de crear y borrar ficheros en ese directorio, y el permiso x autoriza a

buscar y utilizar un fichero concreto.

$ chown

Por otra parte, el comando chown se emplea para cambiar de propietario

(“change owner”) a un determinado conjunto de ficheros. Este comando

sólo lo puede emplear el actual propietario de los mismos. Los nombres de

propietario que admite Linux son los nombres de usuario, que están

almacenados en el fichero /etc/passwd. La forma general del comando

chown es la siguiente:

$ chown newowner file1 file2 ...

$ chgrp

Análogamente, el grupo al que pertenece un fichero puede ser cambiado

con el comando chgrp, que tiene una forma general similar a la de

chown…

chgrp newgroup file1 file2...

Los grupos de usuarios están almacenados en el fichero /etc/group.

Page 44: Comandos Linux

44

10. GESTION DE USUARIOS Y GRUPOS

10.1. INTRODUCCION

Ya sabemos que Linux es un sistema multiusuario y por lo tanto distingue

diferentes usuarios. Cada usuario recibe una cuenta que incluirá toda la

información necesaria (nombre de usuario, directorio inicial, etc.).

Además de las cuentas dadas a personas, existen cuentas especiales

definidas por el sistema que tienen privilegios especiales. La más

importante es la cuenta raíz (administrador), con el nombre de usuario

root.

Normalmente, los usuarios normales están restringidos, de forma que los

permisos de los ficheros en el sistema están preparados para que no

puedan borrar o modificar ficheros en directorios compartidos por todos

los usuarios.

Estas restricciones desaparecen para root. El usuario root puede leer,

modificar o borrar cualquier fichero en el sistema, cambiar permisos y

pertenencias, etc. Por lo tanto, podemos deducir que la gestión de los

usuarios solamente puede realizarla el usuario root.

10.2. CONCEPTOS DE GESTION DE USUARIOS La información que el sistema mantiene acerca de cada usuario es la

siguiente:

Nombre de usuario: es un identificador único dado a cada usuario

del sistema. Es la cadena de caracteres con la que el usuario se

identifica al entrar en el sistema. Se pueden utilizar letras, dígitos y

los caracteres _ (guión bajo) y . (punto). Ejemplo: simmd.

User ID o UID: es un número único dado a cada usuario del sistema.

Su número debe ser mayor que el del último usuario creado en el

sistema.

Page 45: Comandos Linux

45

Group ID o GID: número identifica el grupo al que pertenece el

usuario. El número ha de ser el mismo para todos los usuarios que

formen el grupo. Cada usuario puede pertenecer a uno o más grupos

definidos por el administrador del sistema. Aunque la importancia

real de las relaciones de grupo es la relativa a los permisos de

ficheros.

Clave: el sistema almacena la contraseña del usuario encriptada. El

comando passwd nos permitirá asignar y cambiar las claves de los

usuarios.

Nombre completo: puede ser el nombre real del usuario, su número

de teléfono, su dirección, etc. Es decir, guarda información real

sobre el sistema.

Directorio inicial: es el directorio al que accede el usuario al entrar

en el sistema. Cada usuario debe tener su propio directorio inicial,

normalmente situado bajo /home. En principio será el único

directorio en el que el usuario podrá guardar su información

personal, programas, etc. Ejemplo: /home/simmd.

Intérprete de inicio: es el intérprete de comandos que arranca para

el usuario cuando se conecta al sistema. Ejemplos: /bin/bash,

/bin/tcsh.

El fichero que contiene toda esta información relativa a los usuarios es el

fichero / etc/passwd. Este fichero contiene una línea por cada usuario del

sistema, y su estructura es la siguiente:

nombre:clave encriptada:UID:GID:nombre completo:directorio de

inicio:intérprete

Ejemplo:

simmd:x:501:501:simmd:/home/simmd:/bin/bash

En el caso de los grupos, la información sobre ellos se encuentra en el

fichero /etc/group. Hay varios grupos definidos en el sistema (root, bin,

sys, mail, etc) que se utilizan para permisos de ficheros del sistema. Los

usuarios no deben pertenecer a ninguno de estos grupos.

Page 46: Comandos Linux

46

El formato de cada línea del fichero /etc/group es el siguiente:

nombre del grupo:clave:GID:otros miembros

La clave del grupo no suele utilizarse.

En /etc/passwd cada usuario tiene un GID. Sin embargo, como los usuarios

pueden pertenecer a otros grupos, podemos añadir su nombre de usuario

en el campo otros miembros (separados unos usuarios de otros por comas)

de todos aquellos grupos no definidos por el sistema a los que queremos

que pertenezca.

Podemos conocer a qué grupos pertenece un usuario utilizando la orden

groups. (El grupo con GID 100 suele ser el grupo users).

10.3. AÑADIR Y ELIMINAR USUARIOS

Podemos añadir usuarios al sistema de varias formas. La más engorrosa

de todas es hacerlo a mano. Es decir, añadimos al fichero /etc/passwd la

línea correspondiente al usuario. Seguidamente le asignamos una clave con

la orden passwd y finalmente establecemos el dueño, grupo dueño y

permisos para el directorio /home/usuario que deberemos crear. Además,

debemos actualizar /etc/shadow con pwconv.

Sin embargo, existen varias utilidades que nos permiten crear usuarios de

una forma mucho más cómoda e intuitiva:

a) Servidor Xwindow. Entorno KDE

Iniciamos una sesión como root en el entorno gráfico.

Seleccionamos:

Menú K Configuración Usuarios Crear usuarios (variará según la

distribución)

Aparecerá un cuadro de diálogo con los usuarios normales que hay

creados en el sistema y toda la información correspondiente a cada

Page 47: Comandos Linux

47

uno de ellos. Desde aquí podremos añadir, borrar y modificar

usuarios y grupos. Una vez realizados los cambios oportunos

debemos guardarlos, como si de un documento se tratase.

b) Entorno linuxconf:

Desde una sesión en modo consola podemos escribir la orden

linuxconf para acceder a un entorno que nos permite gestionar todo

Linux, y por lo tanto la gestión de usuarios.

Entramos en Users, User accounts (cuentas de usuario), y podremos

ver todas las cuentas de usuario que están definidas en el sistema.

Para añadir una nueva cuenta, con el tabulador seleccionamos el

botón Add.

Escribiremos el Login, Full name, group, Home directory, User ID,

por ejemplo un cero en Must deep # days y siete en Warm # days

before expiration. Con el tabulador nos posicionamos en el botón

Accept.

Para salir de linuxconf pulsamos el botón Dismiss y Quit.

c) Useradd/Adduser

Las órdenes useradd y adduser también nos permiten añadir nuevas

cuentas de usuario desde el modo consola. Podemos crear un usuario

con las características por defecto:

$ useradd usuario

$ adduser usuario

Habremos creado un usuario sin contraseña. Para habilitar su

cuenta comprobamos si en el campo clave de los ficheros /etc/passwd

y /etc/shadow existen signos de admiración cerrada ( ! ), en ese caso

debemos borrarlos. Posteriormente establecemos una contraseña si

lo deseamos.

Si queremos crear un usuario a nuestra medida utilizaremos la

Page 48: Comandos Linux

48

siguiente sintaxis:

$ useradd/adduser –r -p -u -g -c -d -s

Lo único que nos quedará por hacer será crear el directorio /home

del usuario y establecer los permisos pertinentes.

Para borrar un usuario desde el modo consola:

$ userdel [-r] usuario

Si utilizamos la opción –r también eliminaremos el directorio home

del usuario o directorio inicial.

Una forma de deshabilitar una cuenta de usuario sin tener que

borrarla es escribir ! en el campo clave del usuario en el fichero

/etc/shadow o /etc/passwd.

10.4. OTRAS ORDENES PARA LA GESTION DE USUARIOS Y GRUPOS

chfn: permite cambiar el nombre completo del usuario. Sintaxis:

$ chfn –f

groups: muestra todos los grupos a los que pertenece el usuario.

groupadd: permite añadir un nuevo grupo. Sintaxis:

$ groupadd [-g GID] [-f]

-f obliga al sistema a informar si se producen errores (por ejemplo cuando

el grupo que queremos crear ya existe).

Si no especificamos un GID, el sistema asigna el menor GID que

corresponde a este.

GRUPOS:

Page 49: Comandos Linux

49

groupdel: borra el grupo cuyo nombre indiquemos junto a la orden.

groupmod: permite modificar el GID y el nombre del grupo. Sintaxis:

$ groupmod [-g ] [-n ]

id: muestra UID y GID del usuario y los grupos a los que pertenece el

usuario conectado al sistema. Sintaxis:

$ id

$ id usuario