{"id":18244682,"url":"https://github.com/devdevi/manejo-terminal","last_synced_at":"2025-04-08T18:48:09.573Z","repository":{"id":106116324,"uuid":"299721400","full_name":"devdevi/manejo-terminal","owner":"devdevi","description":null,"archived":false,"fork":false,"pushed_at":"2020-10-05T13:59:29.000Z","size":11,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-14T14:53:29.916Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devdevi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-09-29T19:44:27.000Z","updated_at":"2020-10-05T13:59:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"f36280ea-cb5f-40e1-bc22-1d251214a5ba","html_url":"https://github.com/devdevi/manejo-terminal","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devdevi%2Fmanejo-terminal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devdevi%2Fmanejo-terminal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devdevi%2Fmanejo-terminal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devdevi%2Fmanejo-terminal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devdevi","download_url":"https://codeload.github.com/devdevi/manejo-terminal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247909105,"owners_count":21016475,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-05T09:17:19.952Z","updated_at":"2025-04-08T18:48:09.561Z","avatar_url":"https://github.com/devdevi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# manejo-terminal\n\n## Qué es la terminal y por qué la usarías\n\nNecesitamos un intermediario que recibe las ordenes nuestras para traducirlas a algo que la compu pueda comprender.\nInterfaz de texto, no hay nada gráfico, esto es mas eficiente y rapido y sobretodo, puedes automatizar tareas muy repetitivas.\n\nLa forma de ingresar a una terminal depende de tu sistema operativo.\n\n### Comandos\nNombre programa, Párametros, Modificadores\n\nModificadores: Alteran lo que el programa esta haciendo\n\nPárametos: Información para la ejecución del programa.\n\n```\ncomando -flag1 -flag2 arg1 arg2\n\n```\n```\ndate\necho \"Visaka\"\n```\nComodines, Combinaciones de teclas, Sustitución de comandos.\n\n```\nma  tab\nhistory\n!numero de comando\n```\nPara acceder a los archivos del windows desde linux\n```\ncd /mnt/c/Users/myuser\n```\n### ¿Qué es y cómo funciona el sistema de archivos? - Organización de archivos\n\nComandos utilizados en la clase:\nListar archivos ```ls```\n\nListar archivos ocultos: ```ls -a```\n\nIdentificar el directorio: ```pwd```\nPrint working directory\n\nCambiar de directorio: ```cd```\nchange directory /home\n```cd ~``` Home, Root\n``` cd - ``` Ultimo directorio visitado\n\nCrear un directorio: ```mkdir```\n\nCopiar un archivo: ```cp```\n```\ntouch test.py\ncp test.py terminal/\n```\n\nBorrar un archivo: ```rm```\n\nMover un archivo: ```mv```\n``` mv test.py ..  ```\n\nBorrar un directorio: ```rmdir```\n\n\nComandos para trabajar desde nuestra ubicación\nLista los archivos que se encuentran en el directorio sobre el que estamos trabajando:\n\n\u003e ls\nLista todos los archivos incluyendo aquellos que se han definido como ocultos:\n\n\u003e ls -a\nTodos los directorios contienen los archivos . y .., estos son punteros a directorios.\n\n.. --\u003e directorio padre\n. --\u003e directorio actual\nOtros parámetros que puedes usar con el comando ls:\n\nOrdena los archivos por fecha de modificación:\n\n\u003e ls -t\nOrdena elementos primero por nombre y después por extensión:\n\n\u003e ls -x\nOrdena los elementos primero por extensión y luego por nombre:\n\n\u003e ls -X\nMuestra toda la información: usuario, grupo, permisos, tamaño, fecha y hora de creación.\n\n\u003e ls -l\nMuestra la misma información que ls -l pero con las unidades de tamaño en KB, MB:\n\n\u003e ls -lh\nMuestra el contenido de todos los subdirectorios de forma recursiva:\n\n\u003e ls -R\nOrdena los resultados por tamaño de archivo:\n\n\u003e ls -S\nComandos para cambiar de ubicación\nPrint Working Directory: se usa para mostrar el directorio actual en el que nos encontramos trabajando.\n\n\u003e pwd\ncd: se utiliza para cambiar de directorio. Luego del comando se debe especificar la ruta del directorio al que nos queremos mover. Por ejemplo:\n\n\u003e cd /home/mi_usuario\nComandos para mover, copiar o borrar\ncp: copiar un archivo hacia un directorio.\n\n\u003e cp [archivo que se va a copiar] [directorio hacia el que se va a mover]\nrm: eliminar un archivo.\n\n\u003e rm archivo.txt\n`mv``: mover un archivo, cambiar su ubicación. La sintaxis es así:\n\n\u003emv [ruta del archivo] [directorio hacia el que se va a mover]\nrmdir: eliminar un directorio. En este caso es importante resaltar que, para que el directorio pueda ser eliminado, no puede contener archivos u otros directorios en su interior.\n\n\u003e rmdir [ruta / nombre del directorio a eliminar]\n\n### Manejo de archivos de texto y utilidades interactivas\nArchivo Binario: PARA QUE SEA INTERPRETADO POR UNA COMPUTADORA VISTO.\n\nArchivos de texto: Binarios que se puede leer en editores de texto comprensibles para los humanos.\n\n### Utilidades Interactivas\nProgramas que procesan en tiempo real\n```vim nano```\n\n### VIM\n______\n```vim text.txt```\n``` :wq ```\n``` nano text.txt ```\n\n\n### Utilidades Batch\n```cat```: Nos muestra el contenido completo de un archivo\nejemplo: cat tables.txt\n\n```head```: Nos muestra las primeras lineas (También podemos escoger cuantas lineas queremos utilizando el modificador [-n #]).\nEjemplos:\n\n```\nhead tables.txt\nhead -n 1 tables.txt\n```\n```tail```: Muestras las ultimas lineas del final (Inverso a head, también le funciona modificadores)\nEjemplos:\n\n```\ntail tables.txt\ntail -n 5 tables.txt\n```\n\n### Utilidades Batch Avanzadas:\n```grep```: Permite trabajar con expresiones regulares, funciona como un buscador dentro del archivo.\n\nEjemplos:\n```\ngrep hanks dump1.sql = [comando][expresión regular][archivo]\n\n```\n\nPara buscar sin importar si esta en mayúscula o minúscula:\n```grep -i hanks dump1.sql```\n```grep -r \"salir\" text.txt ```\n``:x guardar y salir de una sola vez``\n\nTambién podemos buscar una expresión de una frase que termine con la misma palabra que estemos buscando:\ngrep -i “hanks’),$” .\n\n```sed```: Screen Editor, tratamiento de flujos de caracteres. Este comando nos permite reemplazar una expresión por otra.\nejemplos:\n\nsed ‘s/hanks/selleck/g’ dump1.sql = [comando][subcomando- sustitución][expresión original][nueva expresión][modificador-(/g de global, indica que tiene que hacerse a lo largo de todo el flujo)][Indicar cual es el flujo a utilizar (Archivo de texto)]\nSED no modifica el archivo, lo que hace es crear un nuevo flujo con la modificación\n\nPara eliminar la ultima linea podemos utilizar:\n2. sed ‘$d’ nuevasPelis.csv = [Comando][’$sub-comando’][archivo]\n\nawk: Tratamiento de texto delimitado, este comando sirve para trabajar con archivos de textos delimitados por comas.\nEjemplos:\n\n```\nawk -F ‘;’ ‘{ print $1}’ nuevasPelis.csv\n```\n\n### Trabajo fundamental con archivos de texto\nEn clases anteriores estudiamos cómo crear y organizar nuestras carpetas. Ahora vamos a trabajar archivos que, por supuesto, debemos guardar en estos directorios que previamente creamos.\n\ntouch: nos permite crear archivos.\n\n```\n\u003e touch archivo.txt\n```\ncat: nos permite visualizar todo el contenido de nuestros archivos.\n\n```\n\u003e cat archivo.txt\n```\nhead: es muy parecido al comando cat. También nos permite visualizar el contenido de nuestros archivos, pero debemos indicarle cuántas líneas nos debe mostrar. Por defecto nos mostrará las primeras 10.\n\n#### primeras 10 líneas\n```\n\u003e head archivo.txt\n```\n\n#### primeras 20 líneas\n```\n\u003e head -n 20 archivo.txt\n```\ntail: funciona igual que el comando head, pero al revés. También debemos indicarle cuántas líneas nos debe mostrar, la diferencia es que no las mostrará de abajo hacia arriba. Por defecto nos mostrará las últimas 10.\n\n#### últimas 10 líneas\n```\n\u003e tail archivo.txt\n```\n\n#### últimas 5 líneas\n```\n\u003e tail -n 5 archivo.txt\n```\nBúsqueda y tratamiento de texto\nNo solo podemos visualizar nuestros archivos (o parte de nuestros archivos) tal cual como escribimos, también podemos filtrar y cambiar el contenido que podemos ver en los archivos.\n\nPor ejemplo: imagina que tenemos un archivo gigante, con cientos o incluso miles de líneas. Si imprimieramos el contenido de todo el archivo sería muy difícil encontrar el nombre de una persona o elemento específico.\n\nY se vuelve aún más complicado si necesitamos que las palabras que buscamos cumplan ciertas condiciones, como solo mayúsculas o minúsculas, que la siguiente o anterior palabra cumpla ciertas condiciones, etc.\n\nEn estos casos podemos utilizar el comando grep para filtrar las líneas que queremos visualizar utilizando (o no) expresiones regulares:\n\ngrep “palabra-clave” archivo_gigante.txt\nSi nos da igual si la palabra clave incluye mayúsculas o minúsculas podemos utilizar el flag -i:\n\n```\ngrep -i “pAlaBra-cLAvE” archivo_gigante.txt\n```\n\nTambién podemos verificar si la línea incluye esta palabra clave al final:\n\ngrep “palabra-clave$” archivo_gigante.txt\nO si la incluye al principio:\n\n```\ngrep “^palabra-clave” archivo_gigante.txt\n```\nTambién hay situaciones donde necesitamos modificar un poco la información que obtenemos de un archivo de texto.\n\nPor ejemplo, imagina que nuestro archivo contiene un poema, frase o saludo para responderle a los usuarios de nuestra aplicación. El problema es que cada usuario tiene un nombre diferente.\n\n¡Hola, NOMBRE_USUARIO! Felicitaciones por completar tu desafío con PUNTOS_USUARIO puntos.\nNo queremos editar este archivo. Solo necesitamos cambiar los caracteres NOMBRE_USUARIO por el verdadero nombre del usuario.\n\nPara esto podemos utilizar el comando sed. Solo debemos indicarle que queremos realizar una sustitución (s/), la palabra que vamos a cambiar (NOMBRE_USUARIO), la nueva palabra que vamos a incluir (Ana) y cerrar con el símbolo /.\n\n```\n\u003e sed ‘s/NOMBRE_USUARIO/Ana/’ archivo-saludo.txt\n```\nAhora imagina que, además del nombre, debemos cambiar también la puntuación que obtuvo el usuario:\n\n```\n\u003e sed ‘s/NOMBRE_USUARIO/Ana/; s/PUNTOS_USUARIO/35/’ archivo-saludo.txt\n```\n\nPuedes ver muchos más usos del comando sed en este tutorial: https://likegeeks.com/es/sed-de-linux/.\n\n## Comunicación entre procesos: Qué son y cómo se utilizan los flujos estándar\n\n\n```\nls \u003e archivos.txt\nls -l \u003e\u003e archivos.txt\nls -l | more\ncat archivos.txt | wc\n     11      52     350\n```\n\n```\ncat archivos.txt | wc\nNos permite contar cuantos caracteres tiene un archivo\n```\n### Administración de procesos en background y foreground\n\n```\nmysql -h 127.0.0.1 -u root -p1234 \u003c archivos.txt \u0026\n```\nprocesos que están corriendo\n```\nps\n```\n```\nkill killall\n```\n```kill```Enviá señales para que se detenga el proceso\n```top``` Procesos de la compu, se cierra con ```q```\n#### Permisos sobre archivos: El sistema de permisos octal\nUsuario, Tiene un Dueño asociado, un Grupo, Otros\n### Permisos\nPara alterar los permisos que tiene\nun archivo asociado tenemos 3 comandos\n```\nchmod\nchown\nchgrp\n```\n```chmod```: Cambia individualmente los permisos.\n\n````chown```: Cambia quien es el dueño del archivo.\n``\n```chmod o-w archivos.txt```: Quitar el permiso de escritura de el archivo ```0```\n\nExiste notaciones textuales y notaciones binarias.\n¿Cuáles acciones y permisos pueden tener un usuario sobre un archivo?\n\nLectura, Escritura y Ejecución\n¿Todos los usuarios tienen los mismos permisos sobre todos los archivos?\nNo\n¿Quiénes pueden o no trabajar con estos documentos?\nDepende de los permisos que tenga configurado cada usuario\n¿Cómo se dividen los permisos de un archivo o carpeta?\nDueño / Grupo / Otros\nAl hablar de usuarios y permisos en el sistema operativo, ¿qué significa un 777? ¿Deberíamos preocuparnos?\nEl 777 significa que todos los usuarios tienen permisos para Leer/Escribir/Ejecutar un archivo o carpeta. ¡Y claro que nos debemos preocupar! Todos tienen accesos y control total sobre los archivos.\n¿Qué permisos debes tener para poder editar un archivo que creo otro usuario de tu sistema operativo?\nrw\n¿Con qué comando cambiamos los permisos que tienen los usuarios para trabajar con un archivo?\n```\nls\nchmod\n```\nNo quieres que nadie pueda editar ni mucho menos ejecutar un script muy peligroso que estás creando. ¿Qué permisos debe tener este script para conseguir este resultado?\nr ó 766\n¿Quién es sudo? ¿Es peligroso?\nSimula ser el usuario supermaster (Dios). Por consiguiente, sudo es un comando que nos permite tener los usuarios root. No es peligroso, pero si no se usa correctamente si podría ser peligroso.\n\n### Paquetes binarios\napt, sypper, rpm\n```pip```: Python\n```composer```: php\n```npm ```: Node\n```conda```:\n\n### Compresión de archivos\n\n#### Archivos .gz:\nComprimir: gzip archivo.txt\nDescomprimir: gzip -d archivo.txt.gz\n\n\n#### Archivos .tar:\nEmpaquetar: ``` tar cf paquete.tar /carpeta/a/empaquetar/```\nVer contenido del paquete:\n```tar tf paquete.tar ```\nEmpaquetar y ver contenido empaquetado:\n\n```tar -cvf paquete.tar /carpeta/a/empaquetar/```\nDesempaquetar: ```tar xf paquete.tar```\n\n\n##### Archivos .tar.gz:\nEmpaquetar y Comprimir:\n```tar czf empaquetado.tar.gz /carpeta/a/empaquetar/y/comprimir```\nDescomprimir:\n```tar xzf archivo.tar.gz```\n\n\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD\n### Tareas Programadas\nPara realizar tareas programadas, se puede hacer de dos formas:\n\nat: permite realizar la programación de tareas únicas en un momento especifico. Ejemplo:\nat now +2 minutes (instrucción para ejecución de tarea en 2 min)\necho “hola mundo!” \u003e /home/user/hola.txt (se ingresa la tarea a ejecutar)\nse oprime Ctrl + D para finalizar el ingreso de tareas en at.\ncron: el comando cron permite a demás de programar tareas, también que estás se puedan hacer de forma periódica. Este comando se apoya en un archivo “crontab” donde se guardar las tareas que se programan en el sistema.\npara modificar el archivo mencionado, se ingresa: crontab -e. al principio saldrá un texto con instrucciones; las tareas a programar deben ir al final de este texto.\nLas tareas a realizar se deben ingresar de la siguiente manera:\nMinuto Hora DiaDelMes Mes DiaDeLaSemana Usuario Comando\n=======\n### Herramientas de búsqueda de archivos\nAlgunos apuntes de la clase:\n\nLOCATE: ```locate```\nBusqueda en todo el sistema de archivos\nOjo: Para ello debe tener la BD actualizada\ntienes que usar: sudo updatedb\n*se demorara bastante la primera vez, ojo con ese detalle.\n\nEjemplo: locate prueba.txt\nlocate -c \u003carchivo\u003e [Mostrara el conteo de los archivos]\n\nWHEREIS: ```whereis```\nPara buscar archivos binarios (Osea Comandos)\n\nEj: whereis echo\necho: /bin/echo /usr/share/man/man1/echo.1.gz\n\n/bin/echo -\u003e la primera ruta encontrada\n/usr/share/man/man1/echo.1.gz -\u003ela segunda ruta encontrada\n\nFIND:```find```\nBusqueda compleja según una serie de criterios\n\nfind /ruta -name “archivo*”\n[buscara todos los archivos que comiencen con el nombre archivo]\n\nfind . -user \u003cnombreusuario\u003e -perm XXX\n[. el punto es directorio actual]\n[-user nombre del usuario a que pertenece]\n[-perm = Permisos XXX puede ser 777 644 etc]\n\nfind . -name \u003carchivo\u003e -delete\n[. el punto es directorio actual]\n[-delete -\u003eEliminara el archivo encontrado]\n\n#### Herramientas para interactuar a través de HTTP\nIntercambios de texto\n\u003ecurl: Pedidos crudos\n\u003ewget: realiza descargas desde servidores http\n\n#### Acceso seguro a otras computadoras\n```ssh```: Secure Shell\n\n##### Envío de datos seguro\nssh: Secure shell (Terminal segura),Con este comando ingresamos a un servidor de manera segura.\nejemplo: ``` ssh leeway -prod```\n.\n```mail```: Nos permite enviar un email desde el servidor. Para que este comando funcione hay que tener algunas cosas configuradas\n.\nEjemplo: echo “Probando” | mail -s(-s: es el asunto del correo) “Probando para platzi” mchojrin1@hotmail.com\"\n\n#### Qué son y cómo se utilizan las variables de entorno\n\nVariable de entorno a la que todo el sistema tiene acceso\n\n```\n\necho $PATH\n```\nCon el ```$```, me muestra el contenido de la variable, y esto sucede con  todas las variables de entorno, todos los procesos tienen acceso a estas variables\n##### Asignación globales\n```export MY_VAR=userVisidevi```Esto quedara asi durante la sesion,\n\n#### Variables de Entorno\nEs un definición global a la que todos los procesos tienen acceso. esta toma mas información de lo que se este typeando.\nEjemplo: ```echo $PATH``` = se encuentran todos los comandos ejecutables\n.\n#### Asignación de las variables de entorno\n```export:``` Este comando se utiliza para asignar a toda la sesión\nEjemplo: export MI_VAR = mauro, si luego escribimos echo $MI_VAR se mostrará mauro en la terminal. (Este permanecerá miestras dure mi sesión)\n.\nvar: Este comando solo asigna el valor para el proximo proceso que se va a ejecutar. este no es muy usual.\nEjemplo: MI_VAR=/home php env.php\n\n#### Las funciones Bash pueden:\n\n-Eliminar tareas repetitivas\n\n-Ahorrar tiempo\n\n-Proporciona una secuencia de actividades bien estructurada, modular y formateada\n\n-Con scripts, podemos proporcionar valores dinámicos a comandos usando argumentos de línea de comando\n\n-Puede simplificar comandos complejos en una sola unidad en ejecución\n\n-Una vez creado, se puede ejecutar cualquier cantidad de veces por cualquier persona. Construye una vez y ejecuta muchas veces.\n\n-Los flujos lógicos se pueden construir utilizando funciones bash\n\n-Las funciones Bash se pueden ejecutar al inicio del servidor o agregando un cron job programado\n\n-Los comandos pueden ser depurados\n\n-Puede tener comandos de shell interactivos\n\nBash es definitivamente una gran herramienta para facilitar tu trabajo y mejorar tus proyectos.\n\u003e\u003e\u003e\u003e\u003e\u003e\u003e 3e3adac503df90beb5fd878281a2a6ab337cf6e4\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevdevi%2Fmanejo-terminal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevdevi%2Fmanejo-terminal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevdevi%2Fmanejo-terminal/lists"}