Advertisement
  1. Code
  2. Cloud & Hosting
  3. Hosting

Útiles Comandos de *NIX Shell para desarrolladores web

Entonces, ¿por qué *NIX y por qué necesitas ir a la consola?
Scroll to top

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Entonces, ¿por qué *NIX y por qué necesitas ir a la consola?

Según las estadísticas de W3Techs, Unix es utilizado por el 68% de todos los sitios web cuyo sistema operativo conocen. Esto significa que si usted es desarrollador web, su código probablemente se esté ejecutando en un servidor Linux. Y al menos necesita saber cómo configurar y depurar su código en los sistemas Unix y Linux. Descubramos lo que necesita saber para sentirse cómodo en la línea de comando.

Los basicos

El comando básico * NIX consta de tres componentes:    

  • comando o programa para ejecutar
  • opciones para alterar o especificar el comportamiento del comando
  • argumentos o datos de entrada que se necesitan para ejecutar el comando

Por ejemplo, si necesita obtener una lista de archivos en el directorio /var/www, debe ejecutar el comando ls con el argumento /var/www. Para agregar el tamaño de los archivos a la salida, debe agregar la opción -s, y el comando final se verá así:

1
ls -s /var/www 

Redirecciones de E/S y tuberías

Muchos comandos *NIX usan entrada y salida de texto con los que puede operar, y la gran característica de esto es que puede enviar los resultados de salida del comando a un archivo mediante redirección, o incluso pasar la salida de un comando a la entrada de otro comando usando las tuberías. Por ejemplo, podemos enviar el comando del ejemplo anterior a un archivo:

1
ls -s /var/www > /var/www/files.txt 

Este comando creará o borrará el archivo /var/www/files.txt y generará una lista de archivos en el directorio /var/www. Aquí hay una lista de redirecciones y canalizaciones de E / S estándar:

  • > Redirigir la salida de un comando a un archivo en el disco. El archivo será borrado y sobrescrito.
  • >> El mismo redireccionamiento, pero anexando el archivo de salida.
  • < Obtener entrada al comando desde un archivo.
  • | Pase la salida de un comando a la entrada de otro comando.
  • tee Ambos redirigen la salida a un archivo y la pasan al siguiente comando en la tubería.

Los comandos principales

Para obtener páginas de manual para un comando, ejecuta man. Las páginas de manual siguen un diseño común y pueden incluir nombre, sinopsis, descripción y ejemplos de uso. Esto mostrará la documentación del comando chmod:

1
man chmod 

Para ejecutar algunos comandos, como guardar configuraciones o reiniciar procesos, debe ejecutarlos como superusuario. Para hacer esto, debe anteponer sudo a su comando:

1
user@server:/var/www$ chmod 777 log  
2
chmod: changing permissions of log: Operation not permitted  
3
user@server:/var/www$ sudo chmod 777 log  
4
sudo chmod 777 log 

Si necesita ejecutar un conjunto de comandos como superusuario, puede usar su o cambiar el comando del usuario.

1
user@server:/var/www$ su  
2
Password:  
3
root@server:/var/www# 

Nota: Para guardar la capa de seguridad y evitar la ejecución accidental de comandos objetables, no use sudo y su sin ningún propósito.

En el mundo real

Navegación básica

Hay tres comandos principales para navegar en el árbol de archivos:

  • pwd para imprimir el nombre del directorio de trabajo actual    
  • cd para cambiar el directorio
  • ls para enumerar los contenidos del directorio

Aquí hay un ejemplo del uso de estos comandos con la salida de la terminal:

1
user@server:~$ pwd  
2
/home/user  
3
user@server:~$ cd /var/www  
4
user@server:/var/www$ ls -alF  
5
total 16  
6
drwxr-xr-x 5 root root 4096 Jan 22 09:45 ./  
7
drwxr-xr-x 14 root root 4096 Jan 22 09:38 ../  
8
drwxr-xr-x 2 root root 4096 Jan 22 09:45 html/  
9
drwxr-xr-x 3 root root 4096 Jan 22 09:45 log/  
10
drwxrwxrwx 1 user user 442 Mar 24 12:22 testing/ 

Buscando archivos

Existe el comando find para buscar archivos en una jerarquía de directorios. Este comando es muy poderoso y puede buscar archivos y directorios por nombre, permisos de acceso, fecha y tamaño.

Encuentre todos los directorios con el nombre "logs" en el directorio /var/www usando la opción -type

1
find /var/www -type d -name logs 

Para buscar archivos PHP en el directorio actual, agregue la opción -name:

1
find . -type f -name "*.php" 

Encuentre archivos con permisos definidos usando la opción -perm:

1
find . -type f -perm 0777 -print 

Encuentra todos los archivos que son mayores que 500MB:

1
find / -size +500M 

Por supuesto, puede combinar todas esas opciones en un comando, y esto es solo lo básico del comando find, que es una herramienta muy poderosa para buscar archivos. Use las páginas del manual para obtener más información.

Manipulación de archivos y carpetas

Hay cinco comandos principales para manipular archivos y carpetas en el sistema *NIX:

  • touch se usa para cambiar las marcas de tiempo en los archivos y directorios existentes, pero también esta es la forma más fácil de crear un archivo nuevo
  • mkdir para hacer directorios
  • cp para copiar archivos y directorios
  • mv para mover o renombrar archivos y directorios
  • rm para eliminar archivos y carpetas

El siguiente ejemplo creará un archivo index.html, copiará este archivo en el nuevo directorio en /var/www y eliminará el archivo fuente.

1
root@localserver:~# touch index.html  
2
root@localserver:~# mkdir /var/www/newdir  
3
root@localserver:~# cp index.html /var/www/newdir/  
4
root@localserver:~# rm index.html 

Otro gran comando es ln, que está diseñado para hacer enlaces entre archivos. El comando ln a menudo se usa para crear un enlace simbólico para habilitar un host virtual:

1
sudo ln -s /etc/apache2/sites-available/newvirtualhost.com.conf /etc/apache/sites-enabled/ newvirtualhost.com.conf 

Cambiar permisos de acceso

Para cambiar el propietario y el grupo del archivo, use chown. No olvide otorgarle la propiedad al usuario de apache cuando esté creando un nuevo host virtual de su aplicación web:

1
sudo chown -R www-data:www-data /var/www/newvirtualhost.com 

A veces, los directorios de caché o de registro de la aplicación deben poder escribirse para todos los usuarios, por lo que debe cambiar los modos de acceso a 777 con el comando chmod. Agregue la opción -R para agregar permisos a todos los archivos y carpetas anidados.

1
sudo chmod -R 777 /var/www/private/cache 

Si solo quiere hacer un archivo ejecutable, use chmod con la opción +x.

1
sudo chmod +x /var/www/private/backup.sh 

Lectura de archivo

Para ver archivos en la consola, puede usar el comando cat. Con cat, puede concatenar el contenido de los archivos usando parámetros adicionales, y también puede usar mask en los nombres de archivo.

1
cat /etc/apache2/apache2.conf  
2
cat /etc/apache2/apache2.conf /etc/apache2/ports.conf  
3
cat /etc/apache2/mods-enabled/* 

Pero el comando cat te confundirá muy rápido, ya que muestra la salida en formato sin escaneado sin ninguna paginación, por lo que es inconveniente utilizarlo con la salida de registro. Para obtener un filtro para paginar a través del texto una pantalla por vez, debe usar more o less comandos, que son mucho más que una gran cantidad.

1
less /etc/apache2/apache2.conf  
2
cat /etc/apache2/mods-enabled/* | less 

Otro comando útil es tail, que se crea para generar la última parte de los archivos. Este comando es perfecto para revisar historiales de registro. De forma predeterminada, este comando de cola imprime las últimas 10 líneas, y puede cambiar este número utilizando el parámetro -n.

1
tail /var/log/apache2/error.log  
2
tail -n 25 /var/log/apache2/error.log 

Pero si tiene, por ejemplo, un montón de archivos de registro, necesita algo más poderoso para realizar una búsqueda adecuada. Algo así como grep: un programa que lee de la entrada estándar, prueba cada línea con un patrón y escribe en la salida estándar las líneas que coinciden con este patrón. Al usarlo en combinación con cat y tuberías, obtendrá lo que desea.

Si desea filtrar líneas de texto de salida, puede usar el comando grep:

1
grep notice /var/log/apache2/error.log  
2
cat /var/log/apache2/*.log | grep "shutting down" 

Como puede ver, grep es bueno para usar en tuberías. En este ejemplo, el último comando generará todas las líneas que contengan la cadena de "cierre" de los archivos de registro.

Edición de archivos

Si desea editar archivos de texto en modo consola, puede usar uno de los tres editores de texto más populares:

  • GNU nano, un editor de texto predeterminado pequeño y amigable, que es una elección perfecta para tareas básicas    
  • Vim, un editor de texto de programadores mejorado, que es más poderoso, pero complejo para principiantes
  • mcedit, un editor de ventana con todas las funciones de Midnight Commander, que es fácil de usar pero no está instalado por defecto en los sistemas *NIX

Comparelos y haga su elección:

1
nano /var/log/apache2/error.log  
2
vim /var/log/apache2/error.log  
3
mcedit /var/log/apache2/error.log 

Archivar

Algunas veces necesita hacer una copia de seguridad o comprimir algunos datos en su servidor.

Las utilidades de archivo más comunes son tar y zip. Tenga en cuenta que el comando zip no puede instalarse en su servidor de forma predeterminada.

Puede crear un archivo con los siguientes comandos:

1
tar -zcvf archive-name.tar.gz directory-or-file-name  
2
tar -jcvf archive-name.tbz2 directory-or-file-name  
3
zip archive-name.zip directory-or-file-name 

Si solo desea ver una lista de archivos en el archivo, puede usar la opción -l tanto para tar como unzip para descomprimir:

1
tar -ztvf archive-name.tar.gz  
2
tar -jtvf archive-name.tbz2  
3
unzip -l archive-name.zip 

O extraiga algunos archivos fuente:

1
tar -zxvf archive-name.tar.gz  
2
tar -jxvf archive-name.tbz2  
3
zip archive-name.zip 

Programar tareas

Si desea programar las secuencias de comandos para que se ejecuten periódicamente, debe usar la utilidad Cron, que está impulsada por una tabla cron, un archivo de configuración que especifica los comandos de la shell que se ejecutarán periódicamente en un programa determinado. Y el comando para mantener las tablas cron es crontab.

Llamar a crontab con la opción -l mostrará su tabla cron.

Además, se proporciona la opción -u para especificar el nombre del usuario cuyo crontab se está utilizando. Si va a ejecutar tareas de su aplicación web, es mejor editar crontab para el usuario www-data.

1
user@server:~$ sudo crontab -lu www-data  
2
# m h dom mon dow command  
3
*/5 * * * * php5 /var/www/yii do/tasks >> /var/www/tasks.log  
4
00 15 * * 1-5 /var/www/backuper.sh 

En esta salida, puede echar un vistazo a un ejemplo de una tabla cron. Como puede ver, cada línea está programada por minuto, hora, día del mes, mes y día de la semana. Cada campo puede ser un asterisco, lo que significa que cada valor del campo. También puede usar conjuntos y rangos usando comas y guiones. Seguir un rango con una barra inclinada especifica saltos del valor del número a través del rango. En este ejemplo, el primer comando se ejecutará cada cinco minutos, y el segundo comando se ejecutará de lunes a viernes a las 15:00.

Para editar esta lista, ejecute crontab con la tecla -e en lugar de -l. La lista cron se abrirá en su editor predeterminado. Use la opción -r para borrar la lista cron.

Supervisión del rendimiento

La parte superior del comando muestra información de resumen del sistema y proporciona una vista dinámica en tiempo real de los procesos del sistema en ejecución. Presione Shift-M para ordenar los procesos por uso de memoria, o Shift-P para ordenar por uso de CPU.

1
top - 21:33:02 up 308 days, 21:24, 1 user, load average: 0.00, 0.01, 0.05  
2
Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie  
3
%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st  
4
KiB Mem: 501800 total, 471348 used, 30452 free, 49672 buffers  
5
KiB Swap: 4194300 total, 56192 used, 4138108 free. 149488 cached Mem  
6
  
7
 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  
8
16269 www-data 20 0 348592 38884 12044 S 0.0 7.7 0:02.42 php5  
9
26533 www-data 20 0 409516 38488 24312 S 0.0 7.7 1:00.04 php5-fpm  
10
 1076 mysql 20 0 887824 32748 1616 S 0.0 6.5 276:46.59 mysqld  
11
 862 syslog 20 0 256612 31428 368 S 0.0 6.3 32:45.88 rsyslogd  
12
18901 root 20 0 105632 4316 3248 S 0.0 0.9 0:00.04 sshd  
13
25393 www-data 20 0 87356 4312 1564 S 0.0 0.9 4:46.92 nginx  
14
27846 memcache 20 0 328464 3828 252 S 0.0 0.8 1:04.30 memcached  

Para mostrar la cantidad de memoria libre y usada en el sistema, use el comando free. Agregue la opción -h para mostrar los campos de salida en formato legible para las personas.

1
user@server:~$ free -h  
2
 total used free shared buffers cached  
3
Mem: 490M 453M 36M 23M 46M 140M  
4
-/+ buffers/cache: 265M 224M  
5
Swap: 4.0G 54M 3.9G 

Otro comando útil es df, que es un comando para informar el uso del espacio de disco del sistema de archivos. Puede llamarlo con la opción -a para mostrar todos los sistemas de archivos de su servidor. Además, no olvide agregar la opción -h para el formato legible para humanos.

1
user@server:~$ df -ah  
2
Filesystem Size Used Avail Use% Mounted on  
3
/dev/vda1 20G 6.3G 13G 34% /  
4
udev 235M 4.0K 235M 1% /dev  
5
tmpfs 50M 344K 49M 1% /run 

Historial de línea de comando

Puedes usar el !! comando para repetir el comando anterior, o use sudo !! si olvidó ejecutar un comando con sudo.

1
user@server:/var/www$ chmod 777 log  
2
chmod: changing permissions of log: Operation not permitted  
3
user@server:/var/www$ sudo !!  
4
sudo chmod 777 log 

Si olvidó la sintaxis de los comandos o se siente flojo al escribir una consulta de comando grande, puede usar history para mostrar su historial de comandos. Es bueno combinar este comando con comandos de filtro de cadenas como grep, tail y otros para encontrar exactamente lo que desea.

1
history | tail  
2
history | grep crontab  
3
history | egrep -i 'ssh|ftp' 

Conclusión

Usar la consola no es ciencia de cohetes. Los sistemas Unix y Linux son fáciles de entender y usar debido a su diseño simple y buena documentación. Espero que este artículo te haga sentir bastante cómodo con la línea de comandos y te lleve al próximo nivel de administración de tus aplicaciones web con la línea de comando.

Si tiene alguna pregunta o desea compartir sus comandos de consola favoritos, no dude en dejar un comentario debajo del artículo.

Otras lecturas

Advertisement
Advertisement