[Tutorial] La consola de Linux paso a paso

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

[Tutorial] La consola de Linux paso a paso

Mensaje por m0skit0 »

Utilizar la consola de Linux es como la consola de Windows, pero existen dos diferencias a mi parecer fundamentales:

1) Los comandos no son los mismos :lol:
2) La consola de Linux (como la de cualquier UNIX) le da mil y una vueltas a la de Windows (ahora veremos por qué)

Personalmente soy un gran fan de la consola. Hay muchas situaciones en las que teclear un par de comandos en la consola, o crearse un script bash nos soluciona más de un quebradero de cabeza con la interfaz gráfica. Os doy unas pautas para que vayáis entendiendo el asunto y luego ya si quieréis profundizar hay bastantes (muchos) tutoriales por la red ;)

Antes comentar que eso de archivo y carpeta lo dejamos para Mierdasoft. De toda la vida es fichero y directorio y es precisamente la nomenclatura que voy a usar.

Primer vistazo

Al abrir una consola en Linux, veréis algo como esto (obviando el tema de la apariencia):

Screenshot-1.png


Veréis que pone m0skit0@sobiet:~$. Vamos a desglosar esto:

m0skit0 -> nombre del usuario
sobiet -> nombre del equipo
~ -> directorio de trabajo actual, en este caso el directorio propio del usuario m0skit0
$ -> usuario normal

Esta forma de visualización es totalmente configurable (como todo en Linux). Con el comando pwd (print working directory, imprimir directorio de trabajo) podemos ver el directorio actual en que nos encontramos (muestra la ruta completa). En mi caso el resultado es:

Código: Seleccionar todo

/home/m0skit0

Ahora podemos ver que en Linux los directorios se separan por barra (/) contrariamente a Windows que usa la barra invertida (\). Ojo con los líos en este tema xD

Para cambiar de directorio de trabajo usamos el comando cd (change directory). Por ejemplo cd Pictures en mi caso cambia al directorio Pictures que se encuentra en el directorio actual de trabajo (/home/m0skit0). Ojo con las mayúsculas y las minúsculas, que en Linux se diferencian para los nombres de ficheros y directorios, contrariamente a Windows (tanto en FAT como en NTFS no se distingue entre mayúsculas y minúsculas). Después de ejecutar el citado comando, el "prompt" queda tal que

Código: Seleccionar todo

m0skit0@sobiet:~/Pictures$

Y si ejecutamos pwd veremos que estamos realmente en

Código: Seleccionar todo

/home/m0skit0/Pictures

Si usamos cd a secas (sin ninguna ruta) nos lleva al directorio del usuario (~) ;)

Manejo de ficheros/directorios en consola

Con ls (list) podemos ver los ficheros y directorios que haya en el directorio de trabajo. Ejecuto pues ls y el resultado es

Código: Seleccionar todo

Screenshot-1.png  Wallpapers

La mayoría de las consolas Linux actuales colorean los nombres para que entendamos qué es cada cosa. Por defecto: azul es un directorio, verde es un enlace blando (esto si os interesa ya buscáis sobre ello :D ) y otros colores para ficheros normales.

Podemos ver una lista más detallada si usamos la opción -l con ls, esto es, ls -l:

Código: Seleccionar todo

total 316
-rw-r--r-- 1 m0skit0 m0skit0 312544 2009-11-20 10:09 Screenshot-1.png
drwxr-xr-x 2 m0skit0 m0skit0   4096 2009-11-20 10:08 Wallpapers

Explico la salida de este comando, tomando como ejemplo la segunda línea:

  • drwxr-xr-x

    El primer carácter nos indica si es un fichero o un directorio. - indica fichero, d indica directorio (directorio en este caso).

    Los caracteres restantes indican los permisos del fichero/directorio. Van agrupados de tres en tres: los tres primeros indican los permisos que tiene el propietario del fichero, los tres segundos los permisos de los usuarios del grupo del propietario y los tres últimos aplican al resto de usuarios. Esto puede resultar confuso en un principio, ya que Windows no maneja estos asuntos, pero veréis que esto añade un plus de seguridad realmente tremendo. Cada grupo de tres consta de 3 letras rwx, esto es, read write execute (leer escribir ejecutar) (es posible que alguna vez veáis s en vez de x, pero eso está fuera del alcance de esta introducción). Para ficheros, estos permisos indican qué puede hacer el grupo de usuarios en cuestión (como he explicado anteriormente). Para directorios, estos permisos se traducen en poder listar el directorio (r), poder modificar el directorio (crear ficheros, etc...) (w) y poder utilizar el directorio como directorio de trabajo (x) (poder hacer cd a ese directorio, pa resumir xD). Por ejemplo, si el directorio foo no tiene permiso x, veremos que no podemos acceder a él:

    Código: Seleccionar todo

    m0skit0@sobiet:~$ ls -dl foo
    drw-r--r-- 2 m0skit0 m0skit0 4096 2009-11-20 12:01 foo
    m0skit0@sobiet:~$ cd foo
    bash: cd: foo: Permission denied

    Podéis ver como hemos usado un nombre de directorio junto con ls -l, para que sólo nos muestre la información de ese directorio y aparte hemos usado la opción -d para que nos muestra la información del directorio y no su contenido ;)

  • 2

    Éste es el número de inodos que apuntan a esta entrada. Tampoco voy a profundizar sobre los inodos, pero por lo menos que os suene.

  • m0skit0 m0skit0

    Nombre del propietario y del grupo del propietario activo cuando se creó el fichero. Por defecto Linux crea un grupo por cada usuario.

  • 4096

    Tamaño del fichero en bytes. En caso de los directorios, se muestra siempre 4 KB (debido al tema de los inodos ;))

  • 2009-11-20 10:08

    Fecha y hora de creación.

  • Wallpapers

    Nombre del fichero/directorio

Para modificar los permisos se usa el comando chmod (change mode). Para modificar el propietario se usa chown (change owner). Para modificar el grupo se usa chgrp (change group). Consultad la ayuda (ver último párrafo ;)).

Con el comando cat (concatenate) podemos vomitar xD el cotnenido de un fichero en la consola. Os aconsejo que lo hagáis sólo con ficheros de texto planos (no creados con procesadores de texto). Éste es el uso que se le da a usualmente a cat, aunque en realidad fue diseñado (y sigue sirviendo) para concatenar ficheros, es decir, pegar un fichero tras otro.

Código: Seleccionar todo

cat fichero


Con rm (remove) eliminamos un fichero (ojo que no hay confirmaciones).

Código: Seleccionar todo

rm fichero


Es importante destacar que Linux sigue la filosofía de UNIX de "si no digo nada, todo ha ido bien". Es decir, si no recibimos ningún mensaje es que la operación ha sido completada con éxito.

Con mkdir (make directory) creamos un directorio, con rmdir (remove directory) borramos un directorio vacío.

Código: Seleccionar todo

mkdir directorio
rmdir directorio


Con cp (copy) se copia un fichero.

Código: Seleccionar todo

cp fichero destino

destino puede ser o bien un directorio, en cuyo caso el fichero mantiene el mismo nombre, o bien una ruta de fichero completa, con lo que el fichero se cambia de nombre al copiarlo en dicha ruta.

Con mv (move) se mueve un fichero (se quita de su origen y se crea en el destino). También se usa para renombrar un fichero :lol:

Código: Seleccionar todo

mv fichero destino
mv fichero nuevo_nombre_fichero


Con more (más) y less (menos) podemos ver el contenido de un fichero pero usando scroll, esto es, cuando se llena la pantalla se para de volcar el fichero hasta que usuario pulse una tecla (se muestra una nueva línea) o pulse la barra de espacio (se avanza una pantalla). Con less se puede retroceder, con more no :roll: . Así que es obvio que usar less es mejor. Como dicen los linuxeros less is more than more (menos es más que más) :lol:

more fichero
less fichero


Con echo imprimimos un mensaje en pantalla.

Código: Seleccionar todo

echo blablabla


Etc, etc los miles de comandos que hay en Linux (o en UNIX). Dejemos los comandos para ver algunas características como la multitarea y el redireccionamiento en consola, uno de los aspectos más importantes de la consola en Linux.

Multitarea

Linux, como su padre UNIX, es un sistema operativo pensado y diseñado desde un primer momento para la multitarea y el multiproceso. Y siendo la consola el alma de Linux, cómo no iba a soportar la multitarea :oki:

Por ejemplo, abrimos GEdit (el bloc de notas de GNOME) desde la consola para editar un fichero de ejemplo:

Screenshot.png


Como veréis, la consola se ha quedado en espera (no nos vuelve a salir el "prompt"). Está esperando a que el proceso del GEdit termine. Si cerramos GEdit (o ponemos el enfoque en la consola y pulsamos Ctrl-C) veréis que la consola vuelve al "prompt". ¿Y qué tiene esto de multitarea? Ninguna :lol:

Pero si hacemos

Screenshot-2.png


Veremos que al añadir el carácter &, el proceso se ejecuta pero el "prompt" nos vuelve a salir. Aquí ya estamos hablando de multitarea. Por tanto el carácter & hace que el comando en cuestión sea procesado en segundo plano mientras nosotros seguimos trabajando. Pero ¿qué es eso que muestra en la consola?

Código: Seleccionar todo

[1] 8989

Esto nos indica que el comando que hemos ejecutado en segundo plano es la tarea número 1 con el ID de proceso 8989. Ahora si ejecutamos por ejemplo

Código: Seleccionar todo

xmms &

Veremos que nos vuelve a salir algo como

Código: Seleccionar todo

[2] 9319

Es decir, este comando es la tarea en segundo plano número 2 asociada al proceso con ID 9161.

Para ver las tareas en segundo plano, usamos el comando jobs (tareas, curros):

Código: Seleccionar todo

[1]-  Running                 gedit foo &
[2]+  Running                 xmms &

Para ver los procesos activos en la consola usamos ps (processes):

Código: Seleccionar todo

  PID TTY          TIME CMD
 5001 pts/1    00:00:00 bash
 8989 pts/1    00:00:00 gedit
 9319 pts/1    00:00:02 xmms
 9345 pts/1    00:00:00 ps

Para manipular las tareas podemos usar los comandos fg (foreground, primer plano) para mover la tarea seleccionada al primer plano y bg (background, segundo plano) para mover la tarea seleccionada al segundo plano:

Código: Seleccionar todo

fg numero_tarea
bg numero_tarea


Por ejemplo:

Código: Seleccionar todo

m0skit0@sobiet:~$ fg 2
xmms
^C

Pongo el XMMS como primer plano, por tanto ya no tengo "prompt" porque estoy controlando la tarea, y la cierro con Ctrl-C. También podría volver a mandarla al segundo plano sin "prompt" (sin poder escribir ningún comando porque estoy con la tarea) usando la combinación Ctrl-Z.

Si por ejemplo el proceso/tarea se cierra por otro métodos estando en segundo plano, observaremos un mensaje de aviso en la consola. Por ejemplo si cierro la ventana del GEdit y pulso enter en la consola, me muestra:

Código: Seleccionar todo

[1]+  Done                    gedit foo

Para controlar los procesos, podemos usar el comando kill. Este comando le manda mensajes a los procesos. Por ejemplo:

Código: Seleccionar todo

m0skit0@sobiet:~$ gedit foo &
[1] 9615
m0skit0@sobiet:~$ kill -TERM 9615
[1]+  Terminated              gedit foo

Le mandamos un mensaje de terminar al proceso. Esto le indica al proceso que debe terminar. Lo más lógico es que el proceso obedezca y se cierre. Pero en algunos casos, como por ejemplo que el proceso esté colgado, no procesa su cola de mensajes y por tanto no se cierra. Con la opción -KILL (kill -KILL numero_proceso) forzamos su cierre tanto si el proceso se dé cuenta como si no. Siempre es aconsejable usar primero -TERM para que el proceso se termine limpiamente, y en caso de que no responda ya usar métodos más agresivos como -KILL.

Que quede constancia que, a pesar del nombre, kill no sólo se usa para matar (cerrar) procesos, sino para mandar cualquier mensaje. Os dejo una lista de los posibles mensajes que se pueden usar como opción de kill (muchos obsoletos, no tiene sentido que sean mandados por un usuario, tienen otra utilidad o simplemente son ignorados):

Código: Seleccionar todo

SIGHUP   1   Hangup (POSIX)
SIGINT   2   Terminal interrupt (ANSI)
SIGQUIT   3   Terminal quit (POSIX)
SIGILL   4   Illegal instruction (ANSI)
SIGTRAP   5   Trace trap (POSIX)
SIGIOT   6   IOT Trap (4.2 BSD)
SIGBUS   7   BUS error (4.2 BSD)
SIGFPE   8   Floating point exception (ANSI)
SIGKILL   9   Kill (can't be caught or ignored) (POSIX)
SIGUSR1   10   User defined signal 1 (POSIX)
SIGSEGV   11   Invalid memory segment access (ANSI)
SIGUSR2   12   User defined signal 2 (POSIX)
SIGPIPE   13   Write on a pipe with no reader, Broken pipe (POSIX)
SIGALRM   14   Alarm clock (POSIX)
SIGTERM   15   Termination (ANSI)
SIGSTKFLT   16   Stack fault
SIGCHLD   17   Child process has stopped or exited, changed (POSIX)
SIGCONT   18   Continue executing, if stopped (POSIX)
SIGSTOP   19   Stop executing(can't be caught or ignored) (POSIX)
SIGTSTP   20   Terminal stop signal (POSIX)
SIGTTIN   21   Background process trying to read, from TTY (POSIX)
SIGTTOU   22   Background process trying to write, to TTY (POSIX)
SIGURG   23   Urgent condition on socket (4.2 BSD)
SIGXCPU   24   CPU limit exceeded (4.2 BSD)
SIGXFSZ   25   File size limit exceeded (4.2 BSD)
SIGVTALRM   26   Virtual alarm clock (4.2 BSD)
SIGPROF   27   Profiling alarm clock (4.2 BSD)
SIGWINCH   28   Window size change (4.3 BSD, Sun)
SIGIO   29   I/O now possible (4.2 BSD)
SIGPWR   30   Power failure restart (System V)


Una opción para ver TODOS los procesos que corren en el sistema es ps -A (ojo otra vez con las mayúsculas y las minúsculas ;))

Redireccionamiento a ficheros

Los que ayáis usado MS-DOS o más recientemente la consola de comandos de Windows posiblemente estéis más familiarizados con esta redirección. Pongo directamente un ejemplo:

Código: Seleccionar todo

echo "Hola" > foo

El carácter > indica que la salida estándar del comando anterior se redirecciona a un fichero en vez de hacerlo a la pantalla (que sería la salida por defecto). Por tanto después de ejecutar este comando tendríamos un fichero con el texto "Hola":

Código: Seleccionar todo

m0skit0@sobiet:~$ cat foo
Hola

Si volvemos a redirigir otro comando el contenido del fichero es borrado y sustituído por el nuevo contenido:

Código: Seleccionar todo

m0skit0@sobiet:~$ ls -l > foo
m0skit0@sobiet:~$ cat foo
total 32
drwxr-xr-x 2 m0skit0 m0skit0 4096 2009-11-20 10:09 Desktop
drwxr-xr-x 2 m0skit0 m0skit0 4096 2009-11-18 20:45 Documents
-rw-r--r-- 1 m0skit0 m0skit0  357 2009-11-18 20:41 examples.desktop
-rw-r--r-- 1 m0skit0 m0skit0    0 2009-11-20 13:32 foo
drwxr-xr-x 3 m0skit0 m0skit0 4096 2009-11-20 09:57 Incoming
lrwxrwxrwx 1 m0skit0 m0skit0   23 2009-11-18 20:51 Musica -> /media/HoChiMinh/Musica
drwxr-xr-x 3 m0skit0 m0skit0 4096 2009-11-20 12:47 Pictures
drwxr-xr-x 2 m0skit0 m0skit0 4096 2009-11-18 20:45 Public
drwxr-xr-x 2 m0skit0 m0skit0 4096 2009-11-18 20:45 Templates
drwxr-xr-x 2 m0skit0 m0skit0 4096 2009-11-18 20:45 Videos

Si no queremos borrar el contenido del fichero podemos usar la redirección de concatenado >>, que escribe al final del fichero ;)

Código: Seleccionar todo

m0skit0@sobiet:~$ echo "Linea 1" > foo
m0skit0@sobiet:~$ echo "Linea 2" >> foo
m0skit0@sobiet:~$ cat foo
Linea 1
Linea 2


También se puede redireccionar la salida de un comando a la entrada de otro mediante el uso de pipes (tuberías) con el carácter | . Pero esto ya lo dejo como un tema más avanzado.

Últimos consejos

Una ayuda interesante a tener en cuenta en la consola de Linux es la compleción de comandos y nombres. Con escribir unas pocas letras del comando o fichero/directorio y pulsar Tabulación, veremos que la consola automáticamente nos completa el nombre en caso de ser único, o nos muestra las posibles compleciones en caso de no serlo.

Resulta también altamente interesante también la posibilidad de navegar por el histórico de los anteriores comandos usando las flechas arriba y abajo del teclado. Esta memoria de comandos permanece incluso cuando se ha apagado el sistema (cómo molan las cosas bien hechas en un sistema operativo de verdad, ¿no? xD).

Finalmente, pero posiblemente una de las herramientas más importantes: man (manual). Teclear man comando nos muestra la ayuda sobre el comando ;) Es una de las herramientas más potentas y usadas en Linux. También podéis ponerlo en Google, para un aspecto menos... textual :D :oki: Un buen acompañante de man es apropos, que busca una palabra en las descripciones de los manuales.

Código: Seleccionar todo

m0skit0@sobiet:~$ apropos copy
bf_copy (1)          - shell script to copy a bogofilter working directory
cp (1)               - copy files and directories
cpgr (8)             - copy with locking the given file to the password or gr...
cpio (1)             - copy files to and from archives
cppw (8)             - copy with locking the given file to the password or gr...
dd (1)               - convert and copy a file
debconf-copydb (1)   - copy a debconf database
install (1)          - copy files and set attributes
mcopy (1)            - copy MSDOS files to/from Unix
objcopy (1)          - copy and translate object files
rcp (1)              - secure copy (remote file copy program)
rsync (1)            - a fast, versatile, remote (and local) file-copying tool
scp (1)              - secure copy (remote file copy program)
ssh-copy-id (1)      - install your public key in a remote machine's authoriz...
xfs_copy (8)         - copy the contents of an XFS filesystem
xfs_metadump (8)     - copy XFS filesystem metadata to a file
xfs_rtcp (8)         - XFS realtime copy command
xt-customize-image (8) - Customize a freshly installed copy of GNU/Linux
xt-install-image (8) - Install a fresh copy of GNU/Linux into a directory


Espero que os haya resultado de utilidad. Y recordad, esto no es más que la punta del iceberg. La potencia de la consola de Linux (UNIX) es realmente abrumadora.

Cualquier duda no dudéis en preguntar :mrgreen:
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Imagen

Gasolution
Enteradillo
Enteradillo
Mensajes: 44
Registrado: 16 Nov 2009, 19:12

Re: [Tutorial] La consola de Linux paso a paso

Mensaje por Gasolution »

Me vendrá muy bien para empezar con Linux.

Gracias :adora: :adora: :adora: :adora: :adora: :adora:

Avatar de Usuario
alex_elmejor
Habitual
Habitual
Mensajes: 259
Registrado: 08 Sep 2009, 16:14
PSN ID: alex1elmejor
Ubicación: BCN

Re: [Tutorial] La consola de Linux paso a paso

Mensaje por alex_elmejor »

Diox mioo xd ¡ vaya curro !
Ps3 slim 250 gb + 8 juegos


El juego es solo el principio

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Tutorial] La consola de Linux paso a paso

Mensaje por m0skit0 »

Tampoco es tanto curro. Simplemente es escribirlo. Contrariamente a otras personas, no voy por ahí copiando de otras fuentes :twisted:
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: [Tutorial] La consola de Linux paso a paso

Mensaje por arisma »

Perfecto!

Un saludo.

Avatar de Usuario
brujitosexy
Experto
Experto
Mensajes: 1097
Registrado: 03 Sep 2009, 19:30

Re: [Tutorial] La consola de Linux paso a paso

Mensaje por brujitosexy »

m0skit0 escribió:Simplemente es escribirlo. Contrariamente a otras personas, no voy por ahí copiando de otras fuentes :twisted:

Si te la sabes casi todas de linux, para que necesita hacer copiar y pegar :?:

:adora:
:adora: :adora:
:adora: :adora: :adora:
Última edición por brujitosexy el 20 Nov 2009, 15:21, editado 1 vez en total.
Linus Torvalds:
“El Software es como el sexo; es mejor cuando es gratis…”

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Tutorial] La consola de Linux paso a paso

Mensaje por m0skit0 »

Ojalá fuera verdad eso de "todas" :cry:

Gracias :mrgreen:
Imagen

Avatar de Usuario
brujitosexy
Experto
Experto
Mensajes: 1097
Registrado: 03 Sep 2009, 19:30

Re: [Tutorial] La consola de Linux paso a paso

Mensaje por brujitosexy »

m0skit0 escribió:Ojalá fuera verdad eso de "todas" :cry:

Gracias :mrgreen:

Entonces, corrijo :?:
No es todas, es casi todas.
:juasjuas: :laughing:
Linus Torvalds:
“El Software es como el sexo; es mejor cuando es gratis…”

Avatar de Usuario
dark_sasuke
Moderador Global
Moderador Global
Mensajes: 3379
Registrado: 03 Sep 2009, 02:13
Twitter: D4rkyt0

Re: [Tutorial] La consola de Linux paso a paso

Mensaje por dark_sasuke »

O_O excelente profe :adora: :adora:
Imagen

Avatar de Usuario
Daxx13
Enteradillo
Enteradillo
Mensajes: 106
Registrado: 03 Sep 2009, 16:07
Contactar:

Re: [Tutorial] La consola de Linux paso a paso

Mensaje por Daxx13 »

mira, el funcionamiento de cd me toco los cojones un largo tiempo (ya hace tiempo), pero lo domine, ese y vastantes mas por cierto, pero lo que no acabo de llegar es a compilar (*.tar.gz), ya se que es:

Código: Seleccionar todo

./configure
make
make install
make clean

Pero el el configure se me resisten casi todos, podrias explicarme como se haze porfa? :cry:
Alomejor me falta el sudo por algun lado?


PD: Y ya que estas puesto pasanos el nombre de el theme... xD
Imagen

Responder