Terminal
NO SE DESESPEREN CON LA COMPUTADORA
El uso de una shell a través de una terminal es impresionante y muy poderosa, es realmente nuestro interprete con la computadora. Hablar el lenguaje de un procesador es mucho cosa de hábito pero también de entender un protocolo de instrucciones que deben evitar ambigüedad. Una vez que hemos conseguido entender su lenguaje debemos contar con un breve “diccionario traductor”, sobre todo hasta dominar por completo su forma de comunicación. UNIX en 10 minutos es un buen resumen que nos puede ser de utilidad.
Ejercicios para GNU/Linux
GNU/Linux Básicamente. Es un libro en fomato PDF que Antonio Perpiña ha realizado con una serie de ejercicios que nos vana adentrando al mundo de los comandos. No es un libro complicado, se puede seguir de forma autónoma sin problemas y es de Código Libre. Para descargarlo da un clic aquí o en la imagen.
.
Indice de comandos: An A-Z Index of the Linux BASH command line
l
l
l
EJERCICIO 0
Trabajando con cat y tux.
EJERCICIO I
Este post es el ejercicio que deben hacer. Es simplemente crear 4 carpetas y jugar con ellas de la manera sencilla para que nos vayamos adentrando a los comandos que nos permiten comunicarnos con linux ¡Mucha paciencia!
Objetivo 0: Crear una carpeta para trabajar.
$pwd /*primero le pregunto dónde estoy*/
/Users/art /*dice que estoy en el directorio “Home”*/
$mkdir arturo /*ahora creo una carpeta llamada “arturo” en el directorio “home”*/
$exit /*objetivo cumplido, salir*/
Objetivo 1: Crear una carpeta con un archivo de texto en la carpeta creada “arturo”.
$pwd /*primero le pregunto dónde estoy*/
/Users/art /*dice que estoy en el directorio “Home”*/
$cd arturo /*le digo que quiero ir a la carpeta “/Users/art/arturo”*/
$mkdir carpeta1 /*ahora creo una carpeta llamada “carpeta1″ en el directorio /Users/art/arturo */
$ls /*le pregunto qué hay en esta carpeta /Users/art/arturo */
carpeta1 /*dice que hay “algo” llamado “carpeta1″*/
$cd carpeta1 /*le digo que quiero ir a la “carpeta1″
$vi texto1.txt /*le digo al editor “vi” que cree un archivo llamado “texto1.txt” y al mismo tiempo entro al editor de la terminal*/
i /*le digo que quiero insertar texto*/Esta es mi opinión sobre la web 2.0, aunque el nombre no es original y todavía no queda muy claro el paradigma de esta nueva filosofía, podemos sentir un cambio y podemos sentirnos parte de esa metamorfosis. Dicen los viejos sabios que no hay viento favorable para quien no sabe hacia donde va, pero es que a veces no es sencillo ser un oráculo social!
Esc /*finalizo mi texto*/
:wq /*le digo que salve el texto y que se salga del editor “vi”*/
$ls /*le pregunto qué hay ahora en esta carpeta*/
texto1.txt /*dice que hay “algo” llamado “texto.txt”*/
$cat texto1.txt /*muestrame el archivo “texto1.txt”Esta es mi opinión sobre la web 2.0, aunque el nombre no es original y todavía no queda muy claro el paradigma de esta nueva filosofía, podemos sentir un cambio y podemos sentirnos parte de esa metamorfosis. Dicen los viejos sabios que no hay viento favorable para quien no sabe hacia donde va, pero es que a veces no es sencillo ser un oráculo social!
/*muestra el contenido del archivo “texto.txt”. Nota: También lo podemos ver por pantallas con “less*/
$exit /*objetivo cumplido, salir*/
Objetivo 2: crear 3 carpetas más en el directorio /Users/art/arturo
$pwd /*le pregunto dónde estoy*/
/Users/art /*dice que estoy en mi carpeta “Home”
$cd arturo /*le digo que vaya a la carpeta “/Users/art/arturo”
$mkdir carpeta2 carpeta3 carpeta4 /*le digo que cree las carpetas: “/Users/art/arturo/carpeta2″, “/Users/art/arturo/carpeta3″ y “/Users/art/arturo/carpeta4″*/
$exit /*objetivo cumplido, salir*/
Objetivo 3: compiar el archivo “texto1.txt” a la “carpeta2″
$pwd /*le pregunto dónde estoy*/
/Users/art /*dice que estoy en mi carpeta “Home”
$cd arturo/carpeta1 /*le digo que vaya a la carpeta “/Users/art/arturo/carpeta1″*/
$ls /*le pregunto qué hay en esta carpeta*/
texto1.txt /*dice que hay “algo” llamado “texto1.txt”*/
$cp texto1.txt /Users/art/arturo/carpeta2 /*le digo que copie el alrchivo “texto1.txt” a la “carpeta2″*/
$exit /*objetivo cumplido, salir*/
Objetivo 3 (segunda opción): compiar el archivo “texto1.txt” a la “carpeta2″
$locate texto1.txt /*le pregunto dónde está el archivo “texto1.txt”*/
/Users/art/arturo/carpeta1/texto1.txt /*dice que está en la “carpeta1″*/
$cp /Users/art/arturo/carpeta/texto1.txt /Users/art/arturo/carpeta2 /*le digo que copie el alrchivo “texto1.txt” a la “carpeta2″*/
$exit /*objetivo cumplido, salir*/
Objetivo 4: empaquetar la “carpeta1″ y moverla a la “carpeta4″
$pwd /*dónde estoy*/
/User/art /*me da la ubicación*/
$cd arturo /*me voy a la carpeta “arturo” donde se localiza la “carpeta1″ que contiene el erchivo “texto1.txt”*/
$tar -cvf paquete_carpeta1.tar carpeta1 /*le digo que empaquete “tar”, creando un contenedor “c”, que pueda ser enlistado (si alguien quiere ver qué empaquetó “v” y que le voy a especificar el nombre del contenedor “f”; le digo el nombre que va a llevar el paquete “paquete_carpeta1.tar y le digo a que archivo (s) (o carpetas) quiero que empaquete (notar que sólo estámos empaquetando y no lo hemos comprimido*/
$ls /*qué hay en esta carpeta “arturo”*/
carpeta1 carpeta2 carpeta3 carpeta4 paquete_carpeta1.tar /*me dice que hay cuartro carpetas y “algo” llamado “paquete_carpeta1.tar”*/
$mv paquete_carpeta1.tar /Users/art/arturo/carpeta4 /*mueve el archivo “paquete_carpeta1.tar” a la “carpeta4″*/
$exit /*Objetivo cumplido, salir*/
Objetivo 5: Mover la el archivo “texto1.txt” de la carpeta1 a la carpeta3 y renombrarlo como “texto2.txt”
$locate texto1.txt /*le pregunto dónde está el archivo “texto1.txt”*/
/Users/art/arturo/carpeta1/texto1.txt /*dice que está en la “carpeta1″*/
$cp /Users/art/arturo/carpeta/texto1.txt /Users/art/arturo/carpeta2 /*le digo que copie el alrchivo “texto1.txt” a la “carpeta3″*/
$cd /User/art/arturo/carpeta3 /*sin importar dónde estoy me voy a la “carpeta3″*/
$ls /*qué hay en esta “carpeta3″*/
texto1.txt /*existe “algo” llamado “texto1.txt”*/
$mv texto1.txt texto2.txt /*a “texto1.txt” nombralo “texto2.txt”*/
$ls /*qué hay, ahora, en esta “carpeta3″*/
texto2.txt /*existe “algo” llamado “texto2.txt”*/
$exit /*Objetivo cumplido, salir*/
Objetivo 6: Empaquetar y Comprimir la carpeta “arturo” y todos sus contenidos
$locate arturo /*encuentra todo lo llamado “arturo”*/
/Users/art/arturo /*Encontró “algo” llamado “arturo”*/
$pwd /*dónde estoy*/
/Users/art /*Estoy en mi “Home” y aquí está la carpeta “arturo”*/
$tar -cvfz t007.tar arturo /*le digo que empaquete “tar”, con la opción anterior -cvf; pero también quiero que lo comprima “z” con gzip. Después le digo el nombre que va a llevar el paquete “t007.tar y le digo a que archivo (s) (o carpetas) quiero que empaquete “arturo”*/
$exit /*Objetivo cumlpido, salir*/
EJERCICIO II
Esta vez vamos a realizar un ejercicio con dos archivos diferentes: texto.txt y documento.doc. Tendremos objetivos generales: ENLACES (ln), REDIRECCIONAR DE FORMA DESTRUCTIVA (>) Y NO DESTRUCTIVA (>>), EMPAQUETAR (tar) y COMPRIMIR (bzip2). Para mayor información de estos u otros comandos, recuerda que puedes usar el comando “man”, por ejemplo, “man ln” ó “man tar”. También puedes probar con los camandos “whatis” y “whereis” para obtener información más rápida, por ejemplo, “whereis ln” ó “whatis bzip2″.
Comandos Principales usados en este ejercicio:
Enlaces {enlace = link, se abrevia “ln”}
Sintaxis:
$ln (opción) [origen] [destino]
Redireccionar SALIDA Estándar “>”
” > ” Redireccionar SALIDA Estándar (al monitor), es destructivo (sobreescribe sobre el fichero destino). Las otras dos son entrada estándar-teclado, error estándar-monitor)
Redireccionar SALIDA Estádar No Destructivo “>>”
” >> ” Redireccionar SALIDA Estándar (monitor), no destructivo
Empaquetar
sintáxis:
$tar (opciones) (NombreRecipiente.tar) (Archivo …)
Opciones:
-c Crea
-v Muestra la Operación SALIDA
-f Especifica los archivos para leerlos
-t Muestra los archivos por comando
-x Desempaqueta los archivos
Comprimir
Sintaxis:
$bzip2 (opciones de compresión del 1-9) (Archivos ó Carpeta)
OBJETIVO I: ENLACES DUROS Y SUAVES
$mkdir Pruebas; cd Pruebas //Comentario: creo un directorio llamado “Pruebas” y me voy al directorio creado. Nota: Para un segundo comando se agrega el caracter “;”, esto se puede repetir las veces que sean necesarias
$mkdir Textos Documentos //Comentario: Se ha creado dos carpetas: “Textos” y “Documentos”.
$touch Textos/texto.txt Documentos/documento.doc //Comentario: Sin cambiar de directorio, “home”, creo dos archivos vacíos (touch): uno llamado “texto.txt” y otro llamado “documento.doc”. Nota que le doy la dirección “relativa” de la ubicación de la creación de estos ficheros.
$cd Textos/ //Comentario: Voy a la carpeta “Texto” para comenzar a crear los enlaces
$ln texto.txt enlace_duro.txt //Comentario: creo un enlace duro (ln, sin opciones) en la misma carpeta de “Textos”.
$ln -s texto.txt enlace_suave.txt //Comentario: creo un enlace suave (con la opción -s) en la misma carpeta de “Textos”.
$ls -li //Comentario: Observa lo que he pedido que enlisten en esta carpeta: la opción “l” muetra los detalles de derechos de escritura, lectura y creación; la opción “i” muestra los ínodos ( Cada fichero se identifica por un número de inodo.
734706 lrwxr-xr-x 1 art art 9B Oct 14 23:15 enlace_suave.txt -> texto.txt
734702 -rw-r–r– 2 art art 0B Oct 14 23:13 enlace_duro.txt
734702 -rw-r–r– 2 art art 0B Oct 14 23:13 texto.txt
//Comentario: La computadora arroja la siguiente lista (ls) con las opciones pedidas. Es importante que veas e identifiques al ínodo. Ve como el ínodo del archivo “original” y el enlace duro tienen el mismo ínodo (73702) pero el enlace suave tiene un ínodo diferente.$ls -R /
//Comentario: da esta orden y verás desplegarse el listado detallado de todo lo que contiene el directorio RAÍZ “/“
(“/”). La opción “-R” quiere decir que busca de forma recursiva, es decir, que no hay subdirectorio que olvide poner en pantalla.Cuando te canses de ver pasar tanto listado, o si piensas que esta lista nunca acaba puedes abortar la orden usando: Coltrol+C
$ls -R / > texto.txt //Comentario: Ahora esa lista que desplegamos le pedimos que no la muestre en la pantalla sino que la redireccione a el archivo “texto.txt”.
$ls -lh
lrwxr-xr-x 1 art art 9B Oct 14 23:15 enlace_suave.txt -> texto.txt
-rw-r–r– 2 art art 19M Oct 15 00:00 enlace_duro.txt
-rw-r–r– 2 art art 19M Oct 15 00:00 texto.txt//Comentario: Lo que ahora podemos observar es que los archivos han crecido de tamaño, excepto el enlace suave. El archivo original y earchivo enlazado duro ha crecido ambos. Nota que si la redirección hubiera sido aenlace duro, el archivo original también hubiera cecido. Por lo tanto, sin importar si es el enlace duro o el archivo original los que se modifiquen, el otro archivo se ha vuelto una copia fiel y actualizable. La opción “-lh” es la opción de listado largo “humana” sobre el “peso” en bytes, kilobytes, Megabytes, etc. que mejor describa al fichero.
$cd ../Documentos/
//Comentario: Me encontraba en el directorio con ruta relativa Prueba/Textos, así que ahora le digo que vayamos una carpeta arriva (“..”) y después se diriga a la carpeta Documentos. La nueva ubicación fue regresarse una carpeta (carpeta Pruebas) e ir a la Carpeta Documentos, alojanda en la Carpeta Pruebas.
$ln documentos.doc enlace_duro.doc; ln -s documentos.doc enlace_suave.doc
//Pedimos que se creen los dos enlaces (suave y duro)
$history //Comentario: Observa que se despliega en la pantalla todo lo que has escrito hasta ahora.
$history > documentos.doc //Ahora, estamos haciendo que la información que vimos en Pantalla hace un momento, la mande al fichero “documentos.doc”. Para comprobarlo puedes pedir “cat” “more” o con el “vi”.
$more documentos.doc //elegimos “more” para que muestre el contenido de “documentos.doc” por pantallas.
$ls -lh //podemos ver que el archivo original y el enlace duro son los que han aumentado su tamaño, mientras que el archivo de enlace suave sigue igual.
$history >> enlace_duro.doc //Usamos esta vez al enlace duro, como prueba. Pero le pedimos que sobre escriba y que no borre la información (redireccionar no destructivo) con el “doble mayor que” (>>)
$ls -lh //Observa como el tamaño de los archivos (original y enlace duro) se han duplicado. Puedes darle un “more” para que veas lo que ha crecido tu archivo.
$cat /etc/passwd > documentos.doc //Usamos el redireccionamiento destructivo (>) de lo que tiene el archivo “passwd” en nuestro archivo “documentos.doc”. Es decir, que lo que tenía el archivo “documentos.doc” y lo sobreescribimos.
$ls -lh //Observa que el tamaño de los archivos (original y enlace duro) han cambiado.
$tail -50 documentos.doc //Esto nos va a mostrar las últimas 50 líneas del archivo.
$head -20 documentos.doc //Con podemos ver las 20 primeras líneas. Observa que la información que tenga el enlace duro es la misma que la que tiene el archivo original. Y las modificaciones que hacemos al enlace duro dará los mismos cambios en el archivo original.
$history > enlace_duro.doc //Por último, sobre escribimos en el enlace duro el historial.
POR ÚLTIMO
Hemos terminado con las pruebas de enlaces, ahora veamos el poder del comprimido gzip2. Primero vamos empaquetar las dos carpetas por separado (Textos y Documentos) y después lo vamos a comprimir, también por separado.
$cd .. //Comentario: como estaba en la carpeta “Documentos” regreso a la carpeta de “Pruebas”
$tar -cvf textos.tar Textos //Comentarios: Empaquetamos todo lo que hay en la carpeta “Textos” y lo llamamos “textos.tar”. Las opciones que usamos las puedes consultar al inicio del post.
$tar -cvf documentos.tar Documentos //Ahora lo hacemos con la carpeta “Documentos” y la llamamos “documentos.tar”.
$ls -lh //Es importante que observes el “peso” de ambos empaquetados antes de que lo comprimamos.
$bzip2 textos.tar documentos.tar //Hacemos la compresión de ambos ficheros .tar “textos.tar” y “documentos.tar”
$ls -lh //Compara el tamaño de estos archivos que se han comprimido ahora.
EJERCICIO III
La última parte de estos ejercicios básicos de linux completarán el conjunto de comandos básicos que nos permitan crear y manejar archivos.
La TAREA t009 será reunir todos los comandos que hemos usado y hacer un listado de comandos linux describiendo lo que hacen. El titulo será “mi lista de comandos”
Comandos por usar:
Para EMPAQUETAR usamos el comando “TAR” con las opciones de:
-c Crear
-v Muestra la Operación SALIDA
-f Especifica los archivos para leerlos
-t Muestra los archivos por comando
-x Desempaqueta los archivos
Para COMPRIMIR usamos el comando “BZIP2″
Para DESCOMPRIMIR usamos el comando “BUNZIP2″
Ejemplo: Vamos a crear una carpeta que contenga dos archivos, los vamos a empaquetar y después a comprimir. Comparamos el tamaño del archivo antes y después de comprimirlo. Por último, lo vamos a descomprimir y desempaquetar.
OBJETIVO 1: Crear los archivos
$mkdir Prueba1
$cd Prueba3
$touch archivo.1 archivo.2 //se han creado los archivos con los que vamos a trabajar
$ls -lh
-rw-r–r– 1 art art 0 Oct 20 00:03 archivo.1
-rw-r–r– 1 art art 0 Oct 20 00:03 archivo.2
//Observa que su tamaño es de 0 bytes
OBJETIVO 2: “Llenar” los archivos creados, redireccionando algunos bytes.
$history //Esto es lo que vamos a meter en el archivo.1 (linux guarda todo lo que hacemos, nada se le escapa)
$ls -R / //Esto es lo que vamos a meter en el archivo.2 (observa que tan extenso es el listado recurrente que nos está mostrando, enlista TODO lo que tiene el disco)
$history > archivo.1
$ls -R / > archivo.2
$ls -l
-rw-r–r– 1 art art 3346 Oct 20 00:05 archivo.1
-rw-r–r– 1 art art 20685634 Oct 20 00:09 archivo.2
//Observa el tamaño que tienen ahora los archivos: archivo.1 (3346 bytes) y archivo.2 (20685634 bytes)
OBJETIVO 3: Empaquetar los archivos creados y llenados.
$tar -cvf paquete.tar archivo.1 archivo.2
-rw-r–r– 1 art art 3346 Oct 20 00:05 archivo.1
-rw-r–r– 1 art art 20685634 Oct 20 00:09 archivo.2
-rw-r–r– 1 art art 20695040 Oct 20 00:15 paquete.tar
//Observa que el archivo paquete.tar tiene un tamaño igual a la suma de su contenido (20695040 bytes)
OBJETIVO 4: Comprimir el archivo, usando “bzip2″
$bzip2 paquete.tar
$ls -l
-rw-r–r– 1 art art 3346 Oct 20 00:05 archivo.1
-rw-r–r– 1 art art 20685634 Oct 20 00:09 archivo.2
-rw-r–r– 1 art art 1296044 Oct 20 00:15 paquete.tar.bz2
//Observa como cambió el tamaño del paquete.tar que era de 20695040 bytes, ahora es de 1296044 bytes, se redujo de 20 millones de bytes a sólo 1 millón de bytes, aproximadamente.
OBJETIVO 5: Descomprimir
Primero cambiamos de carpeta el paquete.tar.bz2
$mkdir Prueba2
$mv paquete.tar.bz2 Prueba2
$cd Prueba2/
//Nos hemos cambiado de lugar y cambiamos el archivo
$bunzip2 paquete.tar.bz2OBJETIVO 6: Observar sin molestar
$tar -tf pequete.tar
archivo.1
archivo.2
//Nos muestra lo que tiene el paquete.tar pero no lo desempaqueta.
OBJETIVO 7: Desempaquetar
$tar -xvf paquete.tar
archivo.1
archivo.2
//Esta vez ha desempaquetado todo lo que tenía el paquete.tar
CHMOD Permisos a archivos.
SCRIPT PARA BASH
Una de las grandes ventajas del shell es que podemos crear archivos que contengan ORDENES que se ejecutarán cuando llamemos al archivo script. El archivo puede ser creado con cualquier editor de texto, tendrá la terminación “.sh” ypuede comenzar con un punto para denotarlo como”oculto”. Si creamos el “archivo_script.sh” podemos llamarlo ejecutando desde el bash
$ ./archivo_script.sh
EJEMPLO DE INFORMACION
Existe un editor llamado “ed” que tiene la ventaja de ejecutarse en la misma terminal que estámos usando, al estilo de “write”. Así que desde una terminal hay que escribir sin equivocarse:
$ ed
a
#! /bin/sh
echo “Usuario: `who am i`”
echo “Host: `hostname`, Sistema Operativo: `uname`”
finger `whoami`
exit 0
.
w datos.sh
q
$chmod +x datos.sh
$./datos.sh
“ed” es un editor de textos en terminal y su ejecución lleva esta secuencia: La línea “a” indica a bash que comienza el texto, la línea “.” indica al bash que termina el texto, la línea “w datos.sh” le indica al bash que guardamos el archivo nombrándolo “datos.sh” y la línea “q” le indica al bash que termina “ed”. Entonces todo lo que está entre la línea “a” y la línea “.” es el archivo: datos.sh.
asdasdasdasdasdasd
$ cat datos.sh
#! /bin/sh
echo “Usuario: `who am i`”
echo “Host: `hostname`, Sistema Operativo: `uname`”
finger `whoami`
exit 0
$
SCRIPT DE COMANDOS BÁSICOS DE BASH
echo “LA SHELL ES `$SHELL`”
echo “Bash: Bourne Again Shell”
echo “La fecha es `date`”
echo “El calendario del mes `cal`”
echo “Mi nombre de usuario es `whoami`”
echo “host es `hostname`”
echo “Sistema Operativo `uname`”echo “El sImbolo para Control = Ctrl = ^”
echo “Para cancelar algUn proceso ^d”
echo ” ^ Acento Circunflejo”
echo “TambiEn Presionar “q” para salir de programas como top, less, man”
echo “Este es el sImbolo de home: ~”
echo “Archivo de Rutas `$PATH`”
echo “Para saber la ruta:`whereis`”
echo “Ruta de gcc `whereis gcc`”
echo “Directorio actual `pwd`”echo “Listar con detalle “humano” `ls -lh ~`”
echo “Listar todo `ls *`”
echo “Listado recursivo `ls -R ~`”
echo “Los archivos ocultos `ls -la ~`”echo “Ir a “raIz” `cd /`
echo “Ir a “home” `cd ~`”# Crear direcotorios
mkdir carp1 carp2 carp3
# Crear ficheros
touch archivo1 archivo2#RedirecciOn de salidas
history > archivo1 # destruye
cat archivo1 >> archivo2 # suma# Enlaces
ln archivo2 carp1
ln -i archivo1 carp3
ls -li carp3grep `whoami` archivo1
# empacar
# -c crea
# -v muestra
# -f especifica
# -z comprime
tar -cvf archivo.tar carpeta7echo “Comprimir”
bzip2 fichero.bzip2 carp1echo “Contar fichero: Lineas Palabras Bytes”
wc Archivo1echo “Mostrar Ficheros”
cat archivo1 # Todo
more archivo1 # Por Pantalla
less archivo1 # AtrAs / Adelanteecho “Eliminar”
rm archivo1
rm -f archivo2 # forzado
rm -r carp2 # resursivo
rm -rf carp1 # recursivo+forzadoecho “QuiEn estA conectado”
who
echo “QuE estA haciendo”
wecho “QuiEn soy yo: `whoami`”
echo “MAs informaciOn: `who am i`”
echo “MAs detalles”
finger `whoami`
La opción: sudo, su poder es total!!!





zapoteska escribió
Soy nuevo en el mundo de Linux (Ubuntu) y tu blog me ha servido mucho.
La verdad que inmediatamente se ve la diferencia entre sistemas operativos.
Saludos y gracias.
Deregreso:) « Cpcls escribió
[...] Terminal [...]
Geschmacksverwirrung « Cpcls escribió
[...] Terminal [...]