Útiles Comandos de *NIX Shell para desarrolladores web
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. -
teeAmbos 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:
-
pwdpara imprimir el nombre del directorio de trabajo actual -
cdpara cambiar el directorio -
lspara 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:
-
touchse 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 -
mkdirpara hacer directorios -
cppara copiar archivos y directorios -
mvpara mover o renombrar archivos y directorios -
rmpara 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.



