Administra tu Blog

¡Crea tu Blog Ya! Fácil y Gratis


Aprende UNIX en diez minutos

Aunque algo antiguo mucha gente me pregunta si no está en castellano, así que aquí va mi traducción del artículo "Learn UNIX in 10 minutes" Aprenda UNIX en 10 minutos. Versión 1.3

Prefacio

Esto es algo que os habré dado a los estudiantes en años anteriores (formación en CAD). El propósito era tener en una página los comandos básicos para empezar a usar el shell de UNIX (para que no me llamaran preguntándome qué hacer la primera vez que alguien les diera un caset) Este documento tiene copyright pero es de libre distribución bajo los términos de GFDL .

¿Tienes alguna idea para esta página? Mándame parches, comentarios, correcciones, sobre cualquier cosa creas está equivocado o debería estar incluído. Siempre me alegrará saber de tí. Por favor incluye la palabra "UNIX" en el asunto.

Secciones:

Directorios:

Moviendose por el sistema de ficheros:

Listando directorios:

Cambiando permisos y atributos de ficheros

Moviendo, renombrando y copiando ficheros:

Visualizando y editando ficheros:

Shells

Variables de entorno

Historial interactivo

Completar nombreFichero

Bash es un buen ejemplo de shell.

Redireccion:

Pipes:

Substitución de comandos

Buscando cadenas en ficheros: el comando grep

Buscando ficheros : el comando find

Leyendo y escribiendo tapes, backups, y archivos: el comando tar

Compresión de ficheros: compress, gzip, y bzip2

Buscando ayuda: los comandos man y apropos

Básicos del editor vi FAQs

****************************************************************************************** Basic UNIX Command Line (shell) navigation : última revisión Mayo 17 2001 ****************************************************************************************** Directorios:

Los ficheros y directorios en UNIX usan "/" para separar los directorios en un path.

ejemplos:

/ directorio root

/usr directorio usr (sub-directorio del directorio / "root" )

/usr/STRIM100 STRIM100 es un subdirectorio de /usr

Moviendose por el sistema de ficheros:

pwd Muestra el "directorio de trabajo presente", o directorio actual.

cd Cambia del directorio actual al directorio HOME .

cd /usr/STRIM100 Cambia el directorio actual al /usr/STRIM100.

cd INIT Cambia el directorio actual a INIT que es un subdirectorio del actual.

cd .. Cambia del directorio actual al directorio superior.

cd $STRMWORK Cambia del directorio actual al directorio definido en la variable 'STRMWORK'.

cd ~bob Cambia del directorio actual al directorio home del usuario bob (si tienes permisos).

Listando directorios:

ls lista un directorio

ls -l lista un directorio en formato largo ( detallado) por ejemplo:


$ ls -l                        
dr wxr -xr -x   4 cliff   user   1024 Juny 18 09:40:00 WAITRON_EARNINGS
-r w-r --r --   1 cliff   user   767392 Juny 6 14:28:00 scanlib.tar.gz
^ ^ ^ ^   ^ ^   ^   ^ ^ ^ ^
| | | |   | |   |   | | | |
| | | |   | propietario   grupo   tamaño fecha hora nombre
| | | |   número de enlaces al contenido del fichero o directorio
| | | permisos para todos los usuarios
| | permisos para los miembros del grupo
| | permisos para el propietario del fichero: r = lectura, w = escritura, x = ejecutable -=no tiene permiso
tipo de fichero: - = fichero normal, d=directorio, l = enlace simbólico, y otros…

ls -a Lista el directorio actual incluyendo ficheros ocultos. Los ficheros ocultos comienzan con un "."

ls -ld * Lista todos los nombres de ficheros y directorios en el directorio actual usando el formato largo. Sin la opción "d" , ls lista el contenido de cualquier subdirectorio del actual. Con la opción "d" , ls los lista como ficheros normales.

Cambiando permisos y atributos de ficheros

chmod 755 fichero Cambia los permisos del fichero a rwx para el propietario, y rx para el grupo y el resto de usuarios. (7 = rwx = 111 binario. 5 = r-x = 101 binario)

chgrp user fichero Hace que el fichero pertenezca al grupo user.

chown cliff fichero Hace que cliff sea el propietario del fichero.

chown -R cliff dir Hace que cliff sea el propietario del directorio y de todo lo que esté en ese directorio.

Para hacer cualquiera de esos cambios debes ser el propietario del fichero/directorio o ser root.

Moviendo, renombrando y copiando ficheros:

cp file1 file2 copia un fichero

mv file1 nuevonombre mueve o renombra un fichero

mv file1 ~/AAA/ mueve file1 al sub-directorio AAA en tu directorio home.

rm file1 [file2 ...] elimina o borra un fichero

rm -r dir1 [dir2...] elimina recursivamente un directorio y su contenido. TEN CUIDADO!

mkdir dir1 [dir2...] crea directorios

mkdir -p dirpath crea el dirpath de un directorio, incluyendo todos los directorios implicados en el path.

rmdir dir1 [dir2...] elimina un directorio vacio

Visualizando y editando ficheros:

cat nombrefichero       Vuelca un fichero por pantalla en ascii.
more nombrefichero    Vuelca progresivamente un fichero en la pantalla: ENTER = baja una línea BARRAESPACIO = baja una página  q=quit
less nombrefichero      Igual que more, pero también puedes usar Av-Pág. No en todos los sistemas.
vi nombrefichero        Edita un fichero usando el editor vi. Todos los sistemas UNIX tienen el editor vi de una u otra manera.
emacs nombrefichero   Edita un fichero usando el editor emacs. No todos los sistemas tienen emacs.
head nombrefichero    Muestra las primeras líneas de un fichero.
head -n  nombrefichero  Muestra las primeras n líneas de un fichero.
tail nombrefichero      Muestra las últimas líneas de un fichero.
tail -n nombrefichero  Muestra las últimas n líneas de un fichero.

Shells

El comportamiento de la interfaz de la línea de comandos diferirá ligeramente dependiendo del programa shell que se esté usando.

Dependiendo del shell usado, algunos extras serán más rápidos.

Para saber que shell estás usando puedes utilizar el comando:

echo $SHELL

Por supuesto que puedes crear un fichero con una lista de los comandos shell y ejecutarlo como un programa para efectuar una tarea.

A esto se le llama un shell script.

Es de hecho el propósito primario de la mayoría de shells, no el funcionamiento interactivo de la línea de comandos.

Variables de entorno

Puedes enseñar a tu shell a recordar cosas para usar más adelante variables de entorno.

Por ejemplo bajo el shell bash:

export CASROOT=/usr/local/CAS3.0

Define la variable CASROOT con el valor /usr/local/CAS3.0.

export LD_LIBRARY_PATH=$CASROOT/Linux/lib

Define la variable LD_LIBRARY_PATH con el valor de CASROOT con with /Linux/lib añadido, o /usr/local/CAS3.0/Linux/lib

Poniendo $ al nombre de variable, podemos evaluarlo en cualquier comando:

cd $CASROOT

Cambia el directorio de trabajo actual a el valor de CASROOT

echo $CASROOT Saca el valor de CASROOT,

o /usr/local/CAS3.0 printenv CASROOT

Hace lo mismo en bash y algunos otros shells.

Historial interactivo

Un rasgo de bash y tcsh (y en algunas ocasiones de otros) puedes usar la flecha hacia arriba para acceder a los comandos previos, editarlos y volverlos a ejecutar.

Completar nombreFichero

Una característica de bash y tcsh (y posiblemente otros) es que puedes usar la tecla TAB para completar un fichero parcialmente escrito. Por ejemplo si tienes un fichero denominado

constantine-monks-and-willy-wonka.txt

en tu directorio y quieres editarlo puedes escribir 'vi const', pulsar la tecla TAB, y el shell rellenará el resto del nombre por tí (siempre que el término sea único).

Bash es un buen ejemplo de shell.

Bash completará también el nombre de los comandos y variables de entorno. Y si hay múltiples posibilidades para completarlo, si pulsas TAB dos veces te las mostrará todas. Bash es el shell de usuario por defecto en la mayoría de sistemas Linux.

Redirección:

grep string nombrefichero > nuevofichero Redirecciona la salida del grep superior a un fichero "nuevofichero".

grep string nombrefichero >> ficheroExistente Agrega la salida del comando grep al final de un fichero ya existente.

Las directivas de redirección, > y >> se pueden usar en la salida de la mayoría de comandos para dirigir dicha salida a un fichero.

Pipes:

El símbolo pipe "|" se usa para dirigir la salida de un comando a la entrada de otro.

Por ejemplo:

ls -l | more Estos comandos cogen la salida del comando para listar de formato largo "ls -l" y lo dirige al comando more (conocido también como un filtro). En este caso una lista muy larga de ficheros se pueden ver en una página.

du -sc * | sort -n | tail El comando "du -sc" lista el tamaño de todos los ficheros y directorios en el directorio de trabajo actual. Esto se consigue a través de "sort -n" que ordena la salida del tamaño más pequeño al más grande. Finalmente, esta salida se transporta a través de "tail" que muestra sólo los últimos resultados (que resultan ser los más grandes).

Substitución de comandos

Podemos usar la salida de un comando como la entrada de otro comando de otra manera denominada substitución de comandos.

La substitución de comandos se invoca cuando se encierra el comando substituido entre comillas.

Por ejemplo:

cat `find . -name aaa.txt`

el cual sacará por la pantalla ( cat ) todos los ficheros que se llamen aaa.txt que existan en el directorio actual o en algún subdirectorio del árbol.

Buscando cadenas en ficheros: el comando grep

grep string nombrefichero imprime todas las líneas en un fichero que contenga la cadena

Buscando ficheros: el comando find

find search_path -name nombrefichero

find . -name aaa.txt Encuentra todos los ficheros con el nombre aaa.txt en el directorio actual o cualquier subdirectorio del mismo.

find / -name vimrc Encuentra todos los ficheros con el nombre 'vimrc' en cualquier parte del sistema.

find /usr/local/games -name "*xpilot*" Encuentra todos los ficheros cuyos nombres contenga la cadena 'xpilot' en el directorio '/usr/local/games'.

Leyendo y escribiendo tapes, backups, y archivos: el comando tar

El comando tar significa "grabar archivo".

Es la manera "standard" de leer y escribir archivos (colecciones de ficheros y directorios completos).

A menudo encontrarás archivos con nombres como stuff.tar o stuff.tar.gz. Son ficheros dentro de uno comprimido, usando el programa de compresión gzip respectivo.

Las posibilidades de que alguien te de un archivo grabado en un sistema UNIX, es que será en formato tar, y usarás tar para leerlo.

Asimismo, si quieres grabar un fichero para dárselo a alguien, usarás probablemente tar también.

Ejemplos de Tar:

tar xv Extrae (x) ficheros al mismo tiempo que los lista por pantalla (v = verbose).

tar tv Lista los ficheros sin extraerlos.

tar cv file1 file2 Escribe los ficheros 'file1' y 'file2' al dispositivo por defecto.

tar cvf archive.tar file1 [file2...] Crea un archivo tar con el nombre "archive.tar" conteniendo file1, file2...etc.

tar xvf archive.tar Extrae desde el fichero

tar cvfz archive.tar.gz dname Crea un archivo tar comprimido con gzip conteniendo todo lo del directorio 'dname'. No funciona con todas las versiones de tar.

tar xvfz archive.tar.gz Extrae un archivo tar comprimido con gzip. No funciona con todas las versiones de tar.

tar cvfI archive.tar.bz2 dname Crea un archivo tar comprimido con bz2. No funciona con todas las versiones de tar.

Comprimiendo ficheros: compress, gzip, y bzip2

Los comandos de compresión standard de UNIX son compress y uncompress. Los ficheros comprimidos tienen el sufijo .Z añadido al nombre. Por ejemplo:

compress part.igs Crea el fichero comprimido part.igs.

Z uncompress part.igs Descomprime part.igs del fichero comprimido part.igs.Z. Nota que no se requiere .Z.

Otra utilidad común de compresión es gzip (y gunzip). Son utilidades de compresión y descompresión de GNU. gzip comprime mejor que los compresores estándard, pero no está instalado en todos los sistemas.

El sufijo para los ficheros gzipped es .gz

gzip part.igs Crea un fichero comprimido part.igs.gz

gunzip part.igs Extrae el fichero original de part.igs.gz

La utilidad bzip2 tiene (en general) mejor compresión que gzip, pero al precio de más tiempo para comprimir y descomprimir los ficheros. No es una utilidad tan común como gzip, pero está generalmente más disponible.

bzip2 part.igs Crea un fichero part.igs.bz2 comprimido con Iges

bunzip2 part.igs.bz2 Descomprime el fichero comprimido con iges.

Buscando ayuda: los comandos man y apropos

La mayoría de los comandos tienen un manual a menudo muy útil, con frecuencia más o menos detallado, algunas veces críptico y con descripciones inconmesurables sobre su uso.

Algunos dicen que se les llama "man" porque son únicamente para hombres reales. Ejemplo:

man ls Muestra la página del manual para el comando ls

Puedes buscar por las páginas man usando apropos

Ejemplo: apropos build Muestra una lista de todas las páginas man cuyas descripciones contengan la palabra "build"

Haz un man apropos para una ayuda detallada sobre apropos.

Básicos del editor vi

Abriendo un fichero
vi nombrefichero
Creando texto
Modo edición: Estas teclas entran modos de edición y escriben texto en tu documento.
i     Inserta antes de la posición actual del cursor
I     Inserta al principio de la línea actual
a    Inserta (añade) después de la posición actual del cursor
A    Añade al final de línea
r    Sustituye 1 caracter
R   Modo sustituir
< esc > Termina modo de insertar o sobre-escribir

Borrado de texto

 x      Borra un caracter
dd    Borra la línea actual y la guarda en el buffer
ndd  Borra n líneas (n es un número) y las guarda en el buffer
J      Añade la siguiente línea al final de la actual (borra el final de línea).

Oops

 u     Deshace el último comando
copiar y pegar
yy    Tira la siguiente línea en el buffer
nyy  Tira las n líneas en el buffer
p      Coloca el contenido del buffer tras la línea actual
P      Coloca el contenido del buffer antes de la línea actual
posicionando el cursor
^d    Página hacia abajo
^u    Página hacia arriba
:n     Posiciona cursor en la línea n
:$     Posiciona el cursor al final del fichero
^g    Muestra el número de línea actual
h,j,k,l izquierda,abajo,arriba, y derecha respectivamente.
Las teclas de flechas deberían también funcionar si el teclado funciona.
substitución de cadenas 
:n1,n2:s/string1/string2/[g]       Substituye string2 por string1 en las líneas n1 a n2. Si se incluye g (significa global), se substituyen todas las instancias de string1 en cada línea. Si no se incluye g, sólo se substituye la primera instancia que coincida.

 ^ coincida con principio de línea    .  coincida con cualquier carácter   
$ coincida con final de línea

Estos y otros "caracteres especiales" (como la barra oblícua hacia adelante) se pueden "escapar" con \ por ejemplo para que coincida con la cadena "/usr/STRIM100/SOFT" poner "\/usr\/STRIM100\/SOFT"

Ejemplos: :1,$:s/dog/cat/g Substituye 'cat' por 'dog', cada caso por la línea entera - líneas 1 a $ (final de fichero)

:23,25:/frog/bird/ Substituye 'bird' por 'frog' en las líneas 23 a 25.

Sólo se substituye la primera coincidencia en cada línea.

Guardando y saliendo y otros comandos "ex"

Esos comandos llevan todos el prefijo de los dos puntos (:) y luego se sitúan en la esquina inferior izquierda de la ventana.

Se les llama comandos "ex" porque son comandos del editor de texto ex - el editor de líneas precursor al editor vi.

No se puede introducir un comando "ex" estando en modo edición (escribiendo texto en la pantalla)

Pulsando se sale del modo edición.

:w Graba el fichero actual.

:w new.file Graba el fichero con el nombre 'new.file'.

:w! existing.file Sobreescribe un fichero existente con el que actualmente se está editando.

:wq Graba el fichero y sale.

:q Salir.

:q! Salir sin cambios

:e nombrefichero Abre el fichero 'nombrefichero' para editarlo.

:set number Activa la numeración de líneas

:set nonumber Desactiva la numeración de líneas

FAQs

Las USENET FAQs debería ser el primer sitio donde buscar una respuesta a preguntas específicas.

Podeis encontrar la mayoría en RTFM

El contenido de este directorio incluye vi, bash, y comp.unix.questions FAQs.

Buscar archivos USENET es también muy útil.

google.com tiene un archivo USENET (antes Deja.com's) .

Normas Advanced Group Search

Este documento ha sido convertido de texto plano usando Vim.

Vim es la mejor versión del editor vi.

Copyright (c) 2000-2006 C R Johnson

Se permite copiar, distribuir y/o modificar este documento bajo los términos de la Licencia GNU Free Documentation License, Version 1.1 o cualquier versión posterior publicada por la Free Software Foundation; con la sección invariable Prefacio, textos de cubierta frontal, y sin textos de cubierta posterior.

Se puede encontrar una copia de la licencia aqui. (versión en castellano aqui)

nemrac @ 16:38

MeneameMeneame | del.icio.us

Comentarios(2) »

Our — 02-09-2009 - 19:34:41 GMT 2

He aprendido bastante, aunque la verdad es que me ha llevado bastante mas de 10 minutillos ;)

Un saludo.

Tormenta del desierto — 31-10-2009 - 01:47:41 GMT 2

Lo mismo digo... Creo que nunca terminaré de edominar este sistema, jejej Pero me encanta de veras.

Un saludo y ánimo a todos.

Dejar un Comentario


<a href> <em> <blockquote> <strong> <cite> <code> <ul> <li> <dl> <dt> <dd>