Esta publicación está inspirada en un amigo que nunca antes había oído hablar de la línea de comandos. Esto tampoco es sorprendente porque solo empecé hace unos dos años. Ahora, lo uso todos los días.
Una de las herramientas más importantes en la ciencia de los datos es la línea de comandos (las frases incluyen terminal, shell, consola, símbolo del sistema, Bash).
Especialmente cuando se trabaja con Amazon Web Services (AWS) y Elastic Compute Cloud (EC2), la familiaridad con la línea de comandos es un must .
Puede preguntar: “¿Por qué no puedo usar mi propia ¿Computadora? ”Bueno, la respuesta es simple: a medida que aumenta el volumen de datos, resulta imposible procesar terabytes de datos con solo 8 o 16 GB de RAM.
El uso de AWS EC2 permite la escalabilidad cuando se trabaja con Big Data. Ya no está utilizando una computadora local, sino quizás 40 computadoras en la nube, un concepto conocido como procesamiento paralelo.
En pocas palabras (se destina al juego de palabras), le está pagando a Amazon para que le preste sus computadoras.
El propósito de la línea de comando es interactuar con la computadora (local o remota) y su sistema de archivos. Proporciona una interfaz solo texto (sí, no más puntos y clics) para proporcionar comandos para que su sistema operativo se ejecute.
Algunos casos de uso:
- Lea, escriba, edite, buscar, mover, copiar, eliminar, descargar archivos
- Git / Github
- Exploración / manipulación de datos básicos
- Iniciar sesión en una computadora remota, también conocida como SSH-ing (Secure Shell)
- Ver Star Wars (Abre tu terminal y escriba telnet towel.blinkenlights.nl)
Algunos casos de uso peligrosos :
- Ataques de denegación de servicio
- Hacking y robo de información de personas
Este tutorial está destinado a dar una breve introducción, primero al comenzar con AWS EC2 (trabajaremos con especificaciones de nivel libre) y luego una importante sintaxis para usar en la línea de comandos.
Comenzando con AWS EC2
Lo primero que debe hacer es ir a https://aws.amazon.com/ y crear una cuenta. Luego, siga este breve GIF.
Tome un café, espere un minuto o dos para que se inicie la instancia de AWS EC2. Una vez listo, debe decir ejecutando:
Tome nota del DNS público (IPv4) en la esquina inferior derecha.
Abra su terminal y escriba los siguientes comandos:
chmod 400 <<name_of_pem_file>> ssh -i <name_of_pem_file> ubuntu@<<Public DNS (IPv4)>>
Por ejemplo, escribiría:
chmod 400 chris_medium.pem ssh -i "chris_medium.pem" ubuntu@ec2-54-213-153-185.us-west-2.compute.amazonaws.com
¡Felicitaciones! Ahora está listo para comenzar la computación en la nube en AWS.
Introducción a la línea de comandos
Ahora que está dentro de una instancia de AWS EC2, necesita saber cómo proporcionar instrucciones a través del terminal escribiendo comandos de texto.
Comencemos por tomar un texto (Pride and Prejudice, por Jane Austen) del Proyecto Gutenberg: http://www.gutenberg.org/files/1342/1342-0.txt
wget: descargue un archivo de un sitio web
wget http://www.gutenberg.org/files/1342/1342-0.txt
ls: enumera los archivos en su directorio de trabajo actual:
Su terminal debería mostrar un archivo llamado 1342-0.txt
al escribir ls.
Archivos con el prefijo . Son archivos ocultos . El argumento -a
los mostrará. Algunos argumentos son obligatorios mientras que otros -a
son opcionales.
man: vea la página del manual para un comando
Escribir man ls
(o ayuda precedida por dos guiones, por alguna razón sigue convirtiendo dos guiones en guiones largos) le proporcionará información sobre cada argumento.
Se pueden crear múltiples argumentos escribiéndolos consecutivamente, es decir, ls -ltr
se mostrarán los archivos en un formato de lista larga y se ordenarán por hora de modificación, apareciendo primero las entradas más antiguas.
Se pueden hacer múltiples argumentos al escribirlos consecutivamente, es decir, ls -ltr mostrará sus archivos en un formato de lista larga, y se ordenará por tiempo de modificación, con las entradas más antiguas primero.
head: imprime las primeras 10 líneas.
tail: imprime las últimas 10 líneas.
Lo que ve en la pantalla se conoce como salida estándar . Combinemos tres comandos en uno.
cat: imprimimos el contenido del archivo (s)
|: operador de tubería que pasa la salida de un comando como entrada a otro
wc: recuento de palabras
Primero, el contenido del texto se imprimirá en la salida estándar. Luego, la salida estándar pasará al comando wc, que proporcionará el recuento de líneas, el recuento de palabras y el recuento de caracteres del archivo.
- mv: mueve un archivo (se puede usar para cambiar el nombre)
- mkdir: cree un directorio / carpeta
- cp : copie un archivo
- rm : elimine un archivo
- cd: cambie el directorio
Cambiemos el nombre del archivo de texto a pride_and_prejudice
, creemos un directorio llamado books
, copiemos el pride_and_prejudice
archivo a books
.
mv 1342-0.txt pride_and_prejudice mkdir books cp pride_and_prejudice books/
grep: filtro basado en un patrón
>: escribe la salida estándar en un archivo (sobrescribe si existe un archivo con el mismo nombre)
>>: agregar salida estándar al final de un archivo
touch: crear un archivo vacío
echo: imprime un mensaje en la salida estándar
- almacenemos todas las líneas contenidas ng la palabra “happy” en un archivo llamado happy.txt.
- A continuación, almacenemos todas las líneas que contienen la palabra “sad” en un archivo llamado sad.txt
- Luego, cree un archivo vacío llamado subconjunto y combine el dos archivos juntos.
- Agregue un mensaje al final del subconjunto que dice “¡Terminado!”
cat pride_and_prejudice | grep happy > happy.txt cat pride_and_prejudice | grep -sw sad > sad.txt touch subset cat *.txt >> subset echo "Finished" >> subset
En la segunda línea, se utiliza el argumento opcional -sw
para que palabras como desventaja no se capturen también. Puede utilizar el asterisco *
para realizar operaciones en todos los archivos que terminan con la extensión .txt
.
Digamos que le encargaron descargar 100 archivos (Libros 1000–1099) del sitio web del Proyecto Gutenberg Y cambiar el nombre del archivo al título del libro. Puede parecer una tarea muy monótona, pero al usar la línea de comandos, ¡se puede hacer en unas pocas líneas!
Necesitamos aprender a hacer loops.
for i in 1 2 3 4 5 do echo "Hi Person $i" done
La salida sería:
Hi Person 1 Hi Person 2 Hi Person 3 Hi Person 4 Hi Person 5
Un ejemplo un poco más complicado:
for i in $( ls ) do echo file: $i done
La salida sería:
file: books file: happy.txt file: pride_and_prejudice file: sad.txt file: subset
El $ le permite usar un comando dentro de OTRO comando.
Desde el sitio web de Gutenberg, los archivos serán http://www.gutenberg.org/files/ 1 / 1-0.txt o http://www.gutenberg.org/files/1/1.txt (es inconsistente w Ya sea que tengan un -0 en el nombre del archivo.
Para tener en cuenta ambos escenarios, podemos usar el || comando que solo activará el segundo comando si el primero falla.
tr: traduce un carácter (usando -d eliminará los caracteres)
El código será el siguiente (detalles paso a paso se puede ver a continuación):
mkdir gutenberg cd gutenbergfor i in {1000..1099} do wget -O file "http://www.gutenberg.org/files/$i/$i.txt" || wget -O file "http://www.gutenberg.org/files/$i/$i-0.txt" name=$(cat file | head -n 1 | tr -cd "[:alnum:][:space:]") name="${name/$'\r'/}" mkdir "$i" mv file "$i/$name" done
Escribiendo ls debería darte esto:
Para ver los archivos dentro de las carpetas, puedes usar ls -R:
Para crear una carpeta llamada gutenberg y cambiarle el directorio:
mkdir gutenberg cd gutenberg
Comenzando el bucle for donde será un número entre 1000 y 1099 (inclusive)
for i in {1000..1099} do
El argumento -O
cambiará el nombre del archivo por el nombre file
. Primero intentará descargar <number>.txt
y, si falla, lo intentará <number>-0.txt
.
wget -O file "http://www.gutenberg.org/files/$i/$i.txt" || wget -O file "http://www.gutenberg.org/files/$i/$i-0.txt"
Esto tomará el archivo de texto, recuperará la primera línea (donde se encuentra el título), mantendrá solo espacios alfanuméricos y en blanco y almacenará la cadena como una variable llamada name
. [:alnum:]
y [:space:]
son conjuntos de caracteres para espacios alfanuméricos y en blanco respectivamente.
La siguiente línea eliminará los caracteres extraños específicos de bash que queden, por ejemplo, al convertir 'The Project Gutenberg EBook of the Riverman by Stewart Edward White'$'\r'
a 'The Project Gutenberg EBook of the Riverman by Stewart Edward White'
.
Esto utiliza el concepto de sustitución de variables y utiliza esta sintaxis: ${parameter//patern/string}
. En esta parte, el /string
componente está vacío por lo que se reemplaza \r
por nada.
name=$(cat file | head -n 1 | tr -cd "[:alnum:][:space:]") name="${name/$'\r'/}"
Esta última parte finalizará el bucle for creando una carpeta con el número apropiado y moviendo el archivo dentro.
mkdir "$i" mv file "$i/$name" done
Conclusión
Hay muchas herramientas que no cubrí (todavía) en este tutorial que también son ampliamente utilizadas. Algunos incluyen:
- Git / Github
- Vim
- Bash scripts
- Perfil de Bash
¡Gracias por leer! Esta es mi primera publicación de blog: siéntase libre de proporcionar cualquier comentario constructivo dejando un comentario. También puede sugerirme temas para que escriba en el futuro. Intentaré publicar una vez por semana.