Si te dices a ti mismo web developer y no sabes usar la consola, entonces no eres un web developer.
- Introducción
- Ayuda
- Sistema de archivos - Rutas relativas y absolutas - Comandos básicos - Listar directorios - Búsqueda - Permisos - Enlaces simbólicos
- Compresión y descompresión de archivos
- Editando archivos
- Introducción a SSH: Olvídate del FTP
- Recursos
El ser desarrollador web el día de hoy requiere dominar herramientas básicas como la consola o terminal para ser más productivo.
Los sistemas UNIX proveen navitamente terminales con los cuales podemos hacer muchas de las operaciones que hacemos desde una GUI.
Esta pequeña guía está enfocada a los comandos más usados por los desarrolladores web y también tiene la intención de ayudar a novatos a su uso.
Podemos obtener ayuda sobre un comando de las siguientes maneras:
# Muestra el manual del comando
$ man <comando>
# Muestra la ayuda del comando
$ <comando> --help
Explain Shell, un sitio que permite explicar específicamente la mayoría de comandos.
Olvidémonos de C:, D:, E:, etc :)
En Linux, si existe el usuario braulio
, entonces también existe una carpeta en la ruta /home/braulio
.
Crearemos una carpeta dentro de braulio
llamada images
.
Entonces podemos acceder a estas carpetas mediante:
# Para acceder a la carpeta images
$ cd /home/braulio/images
# Para acceder a la carpeta braulio
$ cd /home/braulio
# Para acceder a la carpeta home
$ cd /home
Donde el /
inicial se refiere a la raiz del sistema de archivos.
# Si estuviera en la carpeta /home/braulio, accedo a images con:
$ cd images
$ cd ~/images
$ cd ./images
# Si estoy en la carpeta /home/braulio/images regreso a la carpeta padre con:
$ cd .. # /home/braulio
# Y a la carpeta padre del padre con:
$ cd ../.. # /home
Donde:
- El
~
significa la carpeta del usuario, es decir, /home/braulio. - El
.
se refiere a la carpeta en sí misma. - El
..
se refiere a la carpeta padre.
# Creamos el archivo index.html
$ touch index.html
# Creamos el directorio logs
$ mkdir logs
# Creamos varios directorios
$ mkdir media templates
# Creamos directorios dentro de directorios, aunque no existan
$ mkdir -p public/{images,css,js} # Crea el archivo public y dentro de este la carpeta images, css y js
# Cambiar a cierto directorio
$ cd <directorio>
# Ir al directorio padre
$ cd ..
# Ir al directorio /home/braulio desde cualquier lugar
$ cd ~
$ cd
# Ir al directorio raiz
$ cd /
# Copiar directorio
$ cp braulio braulito
# Ahora tengo dos directorios, uno llamado braulio y otro braulito
# Copiar archivos
$ cp index.html inicio.html
# Ahora tengo dos archivos, uno llamado index.html y otro inicio.html
# Copiar archivos dentro de un directorio a otro
$ cp braulio/* otrodirectorio
# Copiar sólo los archivos html
$ cp braulio/*.html otrodirectorio
# Renombra la carpeta braulito a brau
$ mv braulito brau
# Mueve la carpeta brau al directorio padre
$ mv brau ..
# Mueve la carpeta index que está en la carpeta padre a mi directorio actual
$ mv ~/brau .
# Si no funciona podemos usar el parámetro -f (Force)
$ mv -f ~/brau .
# Borra un archivo
$ rm inicio.html
# Borra los archivos .html
$ rm *.html
# Borra una carpeta
$ rm -rf braulio
# Descargar un archivo usando wget
$ wget http://nodejs.org/dist/v0.10.22/node-v0.10.22.tar.gz
# Descargar un archivo usando curl
$ curl http://nodejs.org/dist/v0.10.22/node-v0.10.22.tar.gz
# Ver el espacio ocupado en la carpeta actual
$ du
# Lo mismo pero para humanos
$ du -hs
# Ver el tamaño de cierto archivo
$ du -hs index.html
# Ver de cierta carpeta
$ du -hs braulio
# Ver mi directorio actual
$ pwd
# Ver el contenido de un archivo página por página
$ less archivo.html
# Después de verlo podemos salir presionando q
# Concatenar el contenido de varios archivos y mostrarlos
$ cat archivo.html estilo.css
# Ver desde donde se ejecuta un comando
$ which cat
# /bin/cat
# Ver como funciona cierto comando
$ type ls
# ls es un alias de 'ls --color=auto' (en Ubuntu)
# Ver todos los comandos que he escrito desde el inicio de los tiempos
$ less ~/.bash_history
# Muestra carpetas y archivos en el directorio actual
$ ls
# Muestra carpetas y archivos en un directorio
$ ls <directorio>
# Muestra las carpetas y archivos incluyendo los ocultos, y los muestra en forma de columnas.
$ ls -la
# Similar al anterior en Ubuntu
$ ll
# Puedes crear tu propio comando con
$ alias myll='ls -la'
# Y lo usas con
$ myll
# Ver la salida anterior mostrando cierto patrón
$ ll | grep html
# Muestra la lista resaltando todos los que contienen el string html en su nombre
# Guardar la salida a un archivo
$ ll > listado1.txt
# Se crea un archivo listado1.txt con la salida de ll
# Muestra todos los archivos y carpetas recursivamente dentro del directorio actual
$ find
# Lo mismo pero más complicado
$ find .
# Muestra recursivamente solo los archivos que tengan .html en la carpeta actual
$ find . -name \*.html
# Lo mismo
$ find . -name '*.html'
# Lo mismo pero con grep
$ find . | grep .html
# Lo mismo pero en otra carpeta
$ find <otracarpeta> | grep .html
# El comando locate guarda una base de datos de todos los archivos y carpetas que tenemos, actualiza estos cada cierto tiempo
# Para actualizarlo ahora mismo
$ updatedb
# Para encontrar cierto archivo o carpeta con el nombre brau
$ locate brau
Si usamos el listado en esta carpeta lo que encontremos es:
drwxr-xr-x 3 brau brau 4096 nov 22 09:35 ./
drwxrwxr-x 33 brau brau 4096 nov 21 23:13 ../
drwxrwxr-x 8 brau brau 4096 nov 22 10:18 .git/
-rw-rw-r-- 1 brau brau 11325 nov 21 23:13 LICENSE
-rw-rw-r-- 1 brau brau 6920 nov 22 10:18 README.md
Vemos 7 columnas las cuales indican:
- Permisos
- Directorios
- Usuario
- Grupo
- Tamaño en bytes
- Fecha de modificación
- Archivo o directorio
Tomando la primera columna la dividimos en cuatro subcolumnas y las separamos por |
para explicarlo mejor, en el caso del archivo README.md
-|rw-|rw-|r--
-
La primera columna muestra
-
y nos indica queREADME.md
es un archivo, caso contrario sería un directorio y mostraríad
. -
La segunda columna muestra
rw-
y nos indica que este archivo tiene permisos de lectura (r), de escritura (w), mas no de ejecución(x) por parte del usuario. -
La tercera columna muestra
rw-
y nos indica que este archivo tiene permisos de lectura (r), de escritura (w), mas no de ejecución(x) por parte del grupo. -
La tercera columna muestra
r-
y nos indica que este archivo tiene permisos de lectura (r), mas no de escritura (w) ni de ejecución(x) por parte de otros.
Cada permiso está representado por un número de la siguiente manera:
- Read (r) vale 4
- Write (w) vale 2
- Execute (x) vale 1
Sabiendo esto puedo cambiar los permisos del archivo index.html:
# Cambiando los permisos de index.html
$ chmod 775 index.html
Donde:
- El primer 7 viene de
4+2+1
, es decir, queindex.html
tiene permisos derwx
para el usuario. - Igual que el anterior pero para el grupo.
- El 5 viene de
4+1
, es decir, queindex.html
tiene permisos der-x
para otros.
Para los directorios:
# Cambiando los permisos de la carpeta braulio
$ chmod 444 braulio
# Ahora la carpeta braulio es de sólo lectura.
# Cambiando los permisos de la carpeta Braulio y de todo su contenido recursivamente
$ chmod -R 444 braulio
# index.html pertenecía al usuario brau, ahora pertenecerá al usuario deicy
$ chown deicy index.html
# index.html pertenecía al grupo brau, ahora pertenecerá al grupo deicy
$ chgrp deicy index.html
# Juntando ambos comandos
$ chown deicy:deicy index.html
# Estoy con el usuario braulio, y quiero usar el usuario deicy
$ su deicy
# Quiero ejecutar los comandos como root
$ sudo mkdir carpeta
# Crea una carpeta como superman
Los enlaces simbólicos sirven para tener una referencia a un archivo o carpeta y acceder a esta sin tener que ir a la ruta.
El ejemplo más básico lo vemos en los hostings que usan CPanel, donde encontramos la carpeta public_html
y el enlace simbólico www
, si entramos a ambos, veremos el mismo contenido.
# Creamos el enlace simbólico www para public_html
$ ln -ls ~/public_html ~/www
# Archivos tar.gz
$ tar -zxf archivo.tar.gz
# Archivos gz
$ gzip -d archivo.gz
# Archivos zip
$ unzip archivo.zip
# Empaqueto y comprimo la carpeta braulio y la llamo archivo.tar.gz
$ tar -czf archivo.tar.gz braulio
# Comprimo la carpeta braulio y la llamo archivo.gz
$ gzip -q archivo.gz
# Comprimo la carpeta braulio y la llamo archivo.zip
$ zip archivo.zip archivo
# Usando nano
$ nano index.html
# Usando vi
$ vi index.html
# Usando vim
$ vim index.html
- En nano editamos el archivo y lo guardamos presionando Ctrl + O, salimos con Ctrl + X.
- En vi o vim, para editar presionamos la tecla i, editamos lo que necesitamos, presionamos la tecla Esc y guardamos y salimos presionando :wq.
Más información en los Recursos.
SSH (Secure Shell) es la manera rápida de acceder a equipos remotos y manejarlos mediante la consola.
# Genero una llave SSH
$ ssh-keygen -t rsa -C "braulio@soncco.com"
- Primero nos pide un lugar donde estará guardado nuestra llave, generalmente está en el directorio
~/.ssh
- Luego nos pide una contraseña, ponemos la que nos guste.
- Se han creado dos archivos:
~/.ssh/id_rsa
(La clave privada)~/.ssh/id_rsa.pub
(La clave pública)
Pronto
- Linux Command - Aprender la consola
- The Linux Cookbook - Tips y técnicas para uso diario
- Linux in a Nutshell - Directorio de comandos Linux
- Explain Shell - Guía detallada de cada comando Linux
- Open VIM - Tutorial interactivo para aprender VIM
17 Y si hay errores, son errores del hombre. Mas he aquí, no sabemos que haya errores; no obstante, Dios sabe todas las cosas; por tanto, cuídese aquel que condene, no sea que corra peligro del fuego del infierno. Mormon 8:17