{"id":538,"date":"2026-01-17T10:01:45","date_gmt":"2026-01-17T09:01:45","guid":{"rendered":"https:\/\/cienciaytecnology.com\/wordpress\/?p=538"},"modified":"2026-01-17T10:56:42","modified_gmt":"2026-01-17T09:56:42","slug":"comandos-bash","status":"publish","type":"post","link":"https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/","title":{"rendered":"Comandos Bash"},"content":{"rendered":"\n<p>Puedo darte <strong>una lista muy amplia y bien organizada de los comandos Bash m\u00e1s importantes<\/strong>, con explicaciones t\u00e9cnicas claras. Pero hay un detalle importante: <strong>no existe una \u201clista completa\u201d absoluta<\/strong>, porque Bash puede ejecutar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Comandos internos (<em>builtins<\/em>)<\/li>\n\n\n\n<li>Comandos externos del sistema (GNU coreutils, utilidades POSIX, etc.)<\/li>\n\n\n\n<li>Comandos instalados por paquetes adicionales<\/li>\n\n\n\n<li>Alias y funciones definidas por el usuario<\/li>\n<\/ul>\n\n\n\n<p>Aun as\u00ed, puedo darte <strong>la lista m\u00e1s exhaustiva y \u00fatil<\/strong>, cubriendo:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Builtins de Bash<\/strong><\/li>\n\n\n\n<li><strong>Comandos esenciales de GNU\/Linux<\/strong><\/li>\n\n\n\n<li><strong>Utilidades POSIX est\u00e1ndar<\/strong><\/li>\n\n\n\n<li><strong>Comandos avanzados de administraci\u00f3n del sistema<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Voy a estructurarlo para que sea t\u00e9cnico, claro y pr\u00e1ctico.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>1. Builtins de Bash (comandos internos)<\/strong><\/h1>\n\n\n\n<p>Estos comandos los ejecuta el propio int\u00e9rprete Bash, sin llamar a programas externos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>Gesti\u00f3n del entorno y shell<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Explicaci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>cd<\/code><\/td><td>Cambia&nbsp;el&nbsp;directorio&nbsp;actual&nbsp;modificando&nbsp;la&nbsp;variable&nbsp;interna&nbsp;<code>PWD<\/code>.<\/td><\/tr><tr><td><code>pwd<\/code><\/td><td>Muestra&nbsp;el&nbsp;directorio&nbsp;actual&nbsp;leyendo&nbsp;<code>PWD<\/code>&nbsp;o&nbsp;consultando&nbsp;el&nbsp;sistema&nbsp;de&nbsp;archivos.<\/td><\/tr><tr><td><code>echo<\/code><\/td><td>Imprime&nbsp;texto&nbsp;en&nbsp;stdout;&nbsp;interpreta&nbsp;escapes&nbsp;si&nbsp;se&nbsp;usa&nbsp;<code>-e<\/code>.<\/td><\/tr><tr><td><code>export<\/code><\/td><td>Marca&nbsp;variables&nbsp;para&nbsp;ser&nbsp;heredadas&nbsp;por&nbsp;procesos&nbsp;hijos&nbsp;mediante&nbsp;el&nbsp;entorno.<\/td><\/tr><tr><td><code>set<\/code><\/td><td>Configura&nbsp;flags&nbsp;del&nbsp;shell&nbsp;y&nbsp;lista&nbsp;variables&nbsp;internas.<\/td><\/tr><tr><td><code>unset<\/code><\/td><td>Elimina&nbsp;variables&nbsp;o&nbsp;funciones&nbsp;del&nbsp;entorno&nbsp;del&nbsp;shell.<\/td><\/tr><tr><td><code>alias<\/code><\/td><td>Crea&nbsp;alias&nbsp;que&nbsp;se&nbsp;expanden&nbsp;antes&nbsp;de&nbsp;ejecutar&nbsp;el&nbsp;comando.<\/td><\/tr><tr><td><code>unalias<\/code><\/td><td>Elimina&nbsp;alias&nbsp;definidos.<\/td><\/tr><tr><td><code>type<\/code><\/td><td>Indica&nbsp;si&nbsp;un&nbsp;comando&nbsp;es&nbsp;builtin,&nbsp;alias,&nbsp;funci\u00f3n&nbsp;o&nbsp;binario.<\/td><\/tr><tr><td><code>source<\/code>&nbsp;\/&nbsp;<code>.<\/code><\/td><td>Ejecuta&nbsp;un&nbsp;script&nbsp;en&nbsp;el&nbsp;contexto&nbsp;del&nbsp;shell&nbsp;actual&nbsp;sin&nbsp;crear&nbsp;subshell.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddf5&nbsp;<strong>Control de procesos<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Explicaci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>jobs<\/code><\/td><td>Lista&nbsp;procesos&nbsp;en&nbsp;background&nbsp;gestionados&nbsp;por&nbsp;el&nbsp;shell.<\/td><\/tr><tr><td><code>fg<\/code><\/td><td>Trae&nbsp;un&nbsp;job&nbsp;al&nbsp;foreground.<\/td><\/tr><tr><td><code>bg<\/code><\/td><td>Reanuda&nbsp;un&nbsp;job&nbsp;en&nbsp;background.<\/td><\/tr><tr><td><code>kill<\/code><\/td><td>Env\u00eda&nbsp;se\u00f1ales&nbsp;POSIX&nbsp;a&nbsp;procesos&nbsp;(<code>SIGTERM<\/code>,&nbsp;<code>SIGKILL<\/code>,&nbsp;etc.).<\/td><\/tr><tr><td><code>wait<\/code><\/td><td>Espera&nbsp;a&nbsp;que&nbsp;un&nbsp;proceso&nbsp;hijo&nbsp;termine&nbsp;y&nbsp;devuelve&nbsp;su&nbsp;exit&nbsp;code.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcda&nbsp;<strong>Estructuras de control<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Explicaci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>if<\/code>,&nbsp;<code>then<\/code>,&nbsp;<code>else<\/code>,&nbsp;<code>elif<\/code><\/td><td>Estructuras&nbsp;condicionales&nbsp;basadas&nbsp;en&nbsp;exit&nbsp;codes.<\/td><\/tr><tr><td><code>for<\/code>,&nbsp;<code>while<\/code>,&nbsp;<code>until<\/code><\/td><td>Bucles&nbsp;iterativos.<\/td><\/tr><tr><td><code>case<\/code><\/td><td>Selecci\u00f3n&nbsp;m\u00faltiple&nbsp;basada&nbsp;en&nbsp;patrones.<\/td><\/tr><tr><td><code>function<\/code><\/td><td>Define&nbsp;funciones&nbsp;internas&nbsp;del&nbsp;shell.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcc1&nbsp;<strong>Manipulaci\u00f3n de archivos (interno)<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Explicaci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>test<\/code>&nbsp;\/&nbsp;<code>[<\/code><\/td><td>Eval\u00faa&nbsp;expresiones&nbsp;l\u00f3gicas&nbsp;y&nbsp;de&nbsp;archivos.<\/td><\/tr><tr><td><code>read<\/code><\/td><td>Lee&nbsp;entrada&nbsp;desde&nbsp;stdin&nbsp;y&nbsp;asigna&nbsp;a&nbsp;variables.<\/td><\/tr><tr><td><code>printf<\/code><\/td><td>Imprime&nbsp;texto&nbsp;con&nbsp;formato&nbsp;POSIX.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6&nbsp;<strong>2. Comandos esenciales del sistema (GNU coreutils)<\/strong><\/h1>\n\n\n\n<p>Estos son binarios externos ubicados normalmente en <code>\/bin<\/code> o <code>\/usr\/bin<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcc1&nbsp;<strong>Gesti\u00f3n de archivos y directorios<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Explicaci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>ls<\/code><\/td><td>Lista&nbsp;entradas&nbsp;de&nbsp;un&nbsp;directorio&nbsp;leyendo&nbsp;inodos.<\/td><\/tr><tr><td><code>cp<\/code><\/td><td>Copia&nbsp;archivos&nbsp;usando&nbsp;syscalls&nbsp;<code>read()<\/code>&nbsp;y&nbsp;<code>write()<\/code>.<\/td><\/tr><tr><td><code>mv<\/code><\/td><td>Mueve&nbsp;archivos;&nbsp;si&nbsp;es&nbsp;en&nbsp;el&nbsp;mismo&nbsp;FS&nbsp;usa&nbsp;<code>rename()<\/code>.<\/td><\/tr><tr><td><code>rm<\/code><\/td><td>Elimina&nbsp;entradas&nbsp;del&nbsp;directorio;&nbsp;no&nbsp;borra&nbsp;datos,&nbsp;solo&nbsp;inodos.<\/td><\/tr><tr><td><code>mkdir<\/code><\/td><td>Crea&nbsp;directorios&nbsp;usando&nbsp;<code>mkdir()<\/code>&nbsp;syscall.<\/td><\/tr><tr><td><code>rmdir<\/code><\/td><td>Elimina&nbsp;directorios&nbsp;vac\u00edos.<\/td><\/tr><tr><td><code>touch<\/code><\/td><td>Actualiza&nbsp;timestamps&nbsp;o&nbsp;crea&nbsp;archivos&nbsp;vac\u00edos.<\/td><\/tr><tr><td><code>ln<\/code><\/td><td>Crea&nbsp;enlaces&nbsp;duros&nbsp;o&nbsp;simb\u00f3licos.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcc4&nbsp;<strong>Visualizaci\u00f3n de contenido<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Explicaci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>cat<\/code><\/td><td>Concatena&nbsp;archivos&nbsp;a&nbsp;stdout.<\/td><\/tr><tr><td><code>less<\/code><\/td><td>Paginador&nbsp;interactivo&nbsp;eficiente.<\/td><\/tr><tr><td><code>head<\/code><\/td><td>Muestra&nbsp;primeras&nbsp;l\u00edneas.<\/td><\/tr><tr><td><code>tail<\/code><\/td><td>Muestra&nbsp;\u00faltimas&nbsp;l\u00edneas;&nbsp;con&nbsp;<code>-f<\/code>&nbsp;sigue&nbsp;cambios&nbsp;en&nbsp;tiempo&nbsp;real.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd0d&nbsp;<strong>B\u00fasqueda<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Explicaci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>grep<\/code><\/td><td>Filtra&nbsp;texto&nbsp;usando&nbsp;expresiones&nbsp;regulares.<\/td><\/tr><tr><td><code>find<\/code><\/td><td>Recorrido&nbsp;recursivo&nbsp;del&nbsp;FS&nbsp;evaluando&nbsp;predicados.<\/td><\/tr><tr><td><code>locate<\/code><\/td><td>Busca&nbsp;en&nbsp;una&nbsp;base&nbsp;de&nbsp;datos&nbsp;indexada&nbsp;(<code>mlocate.db<\/code>).<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddee&nbsp;<strong>Procesamiento de texto<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Explicaci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>awk<\/code><\/td><td>Lenguaje&nbsp;de&nbsp;procesamiento&nbsp;de&nbsp;texto&nbsp;basado&nbsp;en&nbsp;patrones&nbsp;y&nbsp;acciones.<\/td><\/tr><tr><td><code>sed<\/code><\/td><td>Editor&nbsp;de&nbsp;flujo&nbsp;para&nbsp;sustituciones&nbsp;y&nbsp;transformaciones.<\/td><\/tr><tr><td><code>cut<\/code><\/td><td>Extrae&nbsp;columnas&nbsp;por&nbsp;delimitador.<\/td><\/tr><tr><td><code>sort<\/code><\/td><td>Ordena&nbsp;l\u00edneas&nbsp;usando&nbsp;algoritmos&nbsp;eficientes&nbsp;(merge&nbsp;sort).<\/td><\/tr><tr><td><code>uniq<\/code><\/td><td>Elimina&nbsp;duplicados&nbsp;consecutivos.<\/td><\/tr><tr><td><code>tr<\/code><\/td><td>Traduce&nbsp;o&nbsp;elimina&nbsp;caracteres.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">\u2699\ufe0f&nbsp;<strong>3. Administraci\u00f3n del sistema<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Explicaci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>ps<\/code><\/td><td>Lista&nbsp;procesos&nbsp;leyendo&nbsp;<code>\/proc<\/code>.<\/td><\/tr><tr><td><code>top<\/code>&nbsp;\/&nbsp;<code>htop<\/code><\/td><td>Monitor&nbsp;interactivo&nbsp;de&nbsp;procesos.<\/td><\/tr><tr><td><code>df<\/code><\/td><td>Muestra&nbsp;uso&nbsp;de&nbsp;discos&nbsp;leyendo&nbsp;superblocks.<\/td><\/tr><tr><td><code>du<\/code><\/td><td>Calcula&nbsp;tama\u00f1o&nbsp;de&nbsp;directorios&nbsp;recursivamente.<\/td><\/tr><tr><td><code>free<\/code><\/td><td>Muestra&nbsp;memoria&nbsp;del&nbsp;sistema.<\/td><\/tr><tr><td><code>uname<\/code><\/td><td>Informaci\u00f3n&nbsp;del&nbsp;kernel.<\/td><\/tr><tr><td><code>systemctl<\/code><\/td><td>Controla&nbsp;servicios&nbsp;systemd.<\/td><\/tr><tr><td><code>journalctl<\/code><\/td><td>Lee&nbsp;logs&nbsp;binarios&nbsp;de&nbsp;systemd.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udf10&nbsp;<strong>4. Red y comunicaciones<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Explicaci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>ping<\/code><\/td><td>Env\u00eda&nbsp;ICMP&nbsp;echo&nbsp;requests.<\/td><\/tr><tr><td><code>curl<\/code><\/td><td>Cliente&nbsp;HTTP\/FTP;&nbsp;usa&nbsp;libcurl.<\/td><\/tr><tr><td><code>wget<\/code><\/td><td>Descarga&nbsp;archivos&nbsp;v\u00eda&nbsp;HTTP\/HTTPS\/FTP.<\/td><\/tr><tr><td><code>ssh<\/code><\/td><td>Conexi\u00f3n&nbsp;remota&nbsp;cifrada&nbsp;usando&nbsp;OpenSSH.<\/td><\/tr><tr><td><code>scp<\/code><\/td><td>Copia&nbsp;archivos&nbsp;sobre&nbsp;SSH.<\/td><\/tr><tr><td><code>netstat<\/code>&nbsp;\/&nbsp;<code>ss<\/code><\/td><td>Muestra&nbsp;sockets&nbsp;y&nbsp;conexiones.<\/td><\/tr><tr><td><code>ip<\/code><\/td><td>Configura&nbsp;interfaces,&nbsp;rutas&nbsp;y&nbsp;reglas&nbsp;de&nbsp;red.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>5. Compresi\u00f3n y empaquetado<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><th>Explicaci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>tar<\/code><\/td><td>Empaqueta&nbsp;archivos&nbsp;sin&nbsp;comprimir.<\/td><\/tr><tr><td><code>gzip<\/code>&nbsp;\/&nbsp;<code>gunzip<\/code><\/td><td>Compresi\u00f3n&nbsp;DEFLATE.<\/td><\/tr><tr><td><code>zip<\/code>&nbsp;\/&nbsp;<code>unzip<\/code><\/td><td>Formato&nbsp;ZIP.<\/td><\/tr><tr><td><code>xz<\/code><\/td><td>Compresi\u00f3n&nbsp;LZMA2.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Versi\u00f3n extendida de builtins y tabla completa de coreutils<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>Vamos a construir <strong>la referencia m\u00e1s completa y \u00fatil<\/strong> que puedes tener en una sola pieza:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Todos los builtins de Bash<\/strong>, con una descripci\u00f3n t\u00e9cnica clara.<\/li>\n\n\n\n<li><strong>La tabla completa de GNU coreutils<\/strong>, organizada por categor\u00edas.<\/li>\n<\/ol>\n\n\n\n<p>Todo en formato limpio, consultable y sin ruido.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>1. Builtins de Bash (lista extendida y completa)<\/strong><\/h1>\n\n\n\n<p>Esta es la lista oficial de builtins que Bash incorpora internamente. Incluye <em>todos<\/em> los builtins POSIX + los espec\u00edficos de Bash.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>Gesti\u00f3n del entorno y variables<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Builtin<\/th><th>Descripci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>alias<\/code><\/td><td>Define&nbsp;alias&nbsp;que&nbsp;se&nbsp;expanden&nbsp;antes&nbsp;del&nbsp;an\u00e1lisis&nbsp;sint\u00e1ctico.<\/td><\/tr><tr><td><code>unalias<\/code><\/td><td>Elimina&nbsp;alias&nbsp;del&nbsp;entorno&nbsp;del&nbsp;shell.<\/td><\/tr><tr><td><code>bind<\/code><\/td><td>Gestiona&nbsp;bindings&nbsp;de&nbsp;teclado&nbsp;de&nbsp;readline.<\/td><\/tr><tr><td><code>declare<\/code>&nbsp;\/&nbsp;<code>typeset<\/code><\/td><td>Declara&nbsp;variables&nbsp;con&nbsp;atributos&nbsp;(integer,&nbsp;array,&nbsp;readonly\u2026).<\/td><\/tr><tr><td><code>export<\/code><\/td><td>Marca&nbsp;variables&nbsp;para&nbsp;ser&nbsp;heredadas&nbsp;por&nbsp;procesos&nbsp;hijos.<\/td><\/tr><tr><td><code>readonly<\/code><\/td><td>Marca&nbsp;variables&nbsp;como&nbsp;inmutables.<\/td><\/tr><tr><td><code>set<\/code><\/td><td>Configura&nbsp;flags&nbsp;del&nbsp;shell&nbsp;y&nbsp;lista&nbsp;variables.<\/td><\/tr><tr><td><code>unset<\/code><\/td><td>Elimina&nbsp;variables&nbsp;o&nbsp;funciones&nbsp;del&nbsp;entorno.<\/td><\/tr><tr><td><code>local<\/code><\/td><td>Declara&nbsp;variables&nbsp;locales&nbsp;dentro&nbsp;de&nbsp;funciones.<\/td><\/tr><tr><td><code>let<\/code><\/td><td>Eval\u00faa&nbsp;expresiones&nbsp;aritm\u00e9ticas&nbsp;en&nbsp;el&nbsp;contexto&nbsp;del&nbsp;shell.<\/td><\/tr><tr><td><code>printf<\/code><\/td><td>Imprime&nbsp;texto&nbsp;con&nbsp;formato&nbsp;POSIX.<\/td><\/tr><tr><td><code>eval<\/code><\/td><td>Ejecuta&nbsp;una&nbsp;cadena&nbsp;tras&nbsp;expandirla&nbsp;completamente.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcc1&nbsp;<strong>Navegaci\u00f3n y manipulaci\u00f3n del entorno<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Builtin<\/th><th>Descripci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>cd<\/code><\/td><td>Cambia&nbsp;el&nbsp;directorio&nbsp;actual&nbsp;modificando&nbsp;<code>PWD<\/code>&nbsp;y&nbsp;<code>OLDPWD<\/code>.<\/td><\/tr><tr><td><code>pwd<\/code><\/td><td>Muestra&nbsp;el&nbsp;directorio&nbsp;actual&nbsp;(interno&nbsp;o&nbsp;consultando&nbsp;el&nbsp;FS).<\/td><\/tr><tr><td><code>dirs<\/code><\/td><td>Muestra&nbsp;el&nbsp;stack&nbsp;de&nbsp;directorios.<\/td><\/tr><tr><td><code>pushd<\/code><\/td><td>A\u00f1ade&nbsp;un&nbsp;directorio&nbsp;al&nbsp;stack&nbsp;y&nbsp;cambia&nbsp;a&nbsp;\u00e9l.<\/td><\/tr><tr><td><code>popd<\/code><\/td><td>Extrae&nbsp;un&nbsp;directorio&nbsp;del&nbsp;stack&nbsp;y&nbsp;cambia&nbsp;a&nbsp;\u00e9l.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddf5&nbsp;<strong>Control de procesos y jobs<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Builtin<\/th><th>Descripci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>jobs<\/code><\/td><td>Lista&nbsp;procesos&nbsp;gestionados&nbsp;por&nbsp;el&nbsp;shell.<\/td><\/tr><tr><td><code>fg<\/code><\/td><td>Trae&nbsp;un&nbsp;job&nbsp;al&nbsp;foreground.<\/td><\/tr><tr><td><code>bg<\/code><\/td><td>Reanuda&nbsp;un&nbsp;job&nbsp;en&nbsp;background.<\/td><\/tr><tr><td><code>kill<\/code><\/td><td>Env\u00eda&nbsp;se\u00f1ales&nbsp;POSIX&nbsp;a&nbsp;procesos.<\/td><\/tr><tr><td><code>wait<\/code><\/td><td>Espera&nbsp;a&nbsp;que&nbsp;un&nbsp;proceso&nbsp;hijo&nbsp;termine.<\/td><\/tr><tr><td><code>disown<\/code><\/td><td>Elimina&nbsp;un&nbsp;job&nbsp;del&nbsp;control&nbsp;del&nbsp;shell.<\/td><\/tr><tr><td><code>suspend<\/code><\/td><td>Suspende&nbsp;el&nbsp;shell&nbsp;enviando&nbsp;<code>SIGSTOP<\/code>.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>Ejecuci\u00f3n y control del flujo<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Builtin<\/th><th>Descripci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>.<\/code>&nbsp;\/&nbsp;<code>source<\/code><\/td><td>Ejecuta&nbsp;un&nbsp;script&nbsp;en&nbsp;el&nbsp;contexto&nbsp;del&nbsp;shell&nbsp;actual.<\/td><\/tr><tr><td><code>exec<\/code><\/td><td>Reemplaza&nbsp;el&nbsp;proceso&nbsp;actual&nbsp;por&nbsp;otro&nbsp;(sin&nbsp;fork).<\/td><\/tr><tr><td><code>exit<\/code><\/td><td>Termina&nbsp;el&nbsp;shell&nbsp;con&nbsp;un&nbsp;exit&nbsp;code.<\/td><\/tr><tr><td><code>return<\/code><\/td><td>Devuelve&nbsp;un&nbsp;exit&nbsp;code&nbsp;desde&nbsp;una&nbsp;funci\u00f3n.<\/td><\/tr><tr><td><code>shift<\/code><\/td><td>Desplaza&nbsp;los&nbsp;par\u00e1metros&nbsp;posicionales.<\/td><\/tr><tr><td><code>getopts<\/code><\/td><td>Analiza&nbsp;opciones&nbsp;estilo&nbsp;POSIX.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcda&nbsp;<strong>Entrada y salida<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Builtin<\/th><th>Descripci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>echo<\/code><\/td><td>Imprime&nbsp;texto&nbsp;en&nbsp;stdout.<\/td><\/tr><tr><td><code>read<\/code><\/td><td>Lee&nbsp;entrada&nbsp;desde&nbsp;stdin&nbsp;y&nbsp;asigna&nbsp;a&nbsp;variables.<\/td><\/tr><tr><td><code>mapfile<\/code>&nbsp;\/&nbsp;<code>readarray<\/code><\/td><td>Lee&nbsp;l\u00edneas&nbsp;en&nbsp;un&nbsp;array.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddee&nbsp;<strong>Aritm\u00e9tica<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Builtin<\/th><th>Descripci\u00f3n&nbsp;t\u00e9cnica<\/th><\/tr><\/thead><tbody><tr><td><code>((&nbsp;))<\/code><\/td><td>Evaluaci\u00f3n&nbsp;aritm\u00e9tica&nbsp;nativa&nbsp;del&nbsp;shell.<\/td><\/tr><tr><td><code>let<\/code><\/td><td>Evaluaci\u00f3n&nbsp;aritm\u00e9tica&nbsp;tradicional.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddf1&nbsp;<strong>Estructuras de control (palabras reservadas)<\/strong><\/h2>\n\n\n\n<p>Estas no son builtins, pero forman parte del lenguaje Bash:<\/p>\n\n\n\n<p><code>if<\/code>, <code>then<\/code>, <code>else<\/code>, <code>elif<\/code>, <code>fi<\/code>, <code>for<\/code>, <code>while<\/code>, <code>until<\/code>, <code>do<\/code>, <code>done<\/code>, <code>case<\/code>, <code>esac<\/code>, <code>select<\/code>, <code>function<\/code>, <code>time<\/code>, <code>coproc<\/code>, <code>!<\/code>, <code>{}<\/code>, <code>[[ ]]<\/code>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6&nbsp;<strong>2. Tabla completa de GNU coreutils<\/strong><\/h1>\n\n\n\n<p>GNU coreutils contiene <strong>106 comandos<\/strong>. Los organizo por categor\u00eda para que sea realmente \u00fatil.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcc1&nbsp;<strong>A. Gesti\u00f3n de archivos y directorios<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><\/tr><\/thead><tbody><tr><td><code>basename<\/code><\/td><\/tr><tr><td><code>chcon<\/code><\/td><\/tr><tr><td><code>chgrp<\/code><\/td><\/tr><tr><td><code>chmod<\/code><\/td><\/tr><tr><td><code>chown<\/code><\/td><\/tr><tr><td><code>cp<\/code><\/td><\/tr><tr><td><code>dd<\/code><\/td><\/tr><tr><td><code>df<\/code><\/td><\/tr><tr><td><code>dir<\/code><\/td><\/tr><tr><td><code>dircolors<\/code><\/td><\/tr><tr><td><code>install<\/code><\/td><\/tr><tr><td><code>ln<\/code><\/td><\/tr><tr><td><code>ls<\/code><\/td><\/tr><tr><td><code>mkdir<\/code><\/td><\/tr><tr><td><code>mkfifo<\/code><\/td><\/tr><tr><td><code>mknod<\/code><\/td><\/tr><tr><td><code>mktemp<\/code><\/td><\/tr><tr><td><code>mv<\/code><\/td><\/tr><tr><td><code>readlink<\/code><\/td><\/tr><tr><td><code>realpath<\/code><\/td><\/tr><tr><td><code>rm<\/code><\/td><\/tr><tr><td><code>rmdir<\/code><\/td><\/tr><tr><td><code>shred<\/code><\/td><\/tr><tr><td><code>sync<\/code><\/td><\/tr><tr><td><code>touch<\/code><\/td><\/tr><tr><td><code>truncate<\/code><\/td><\/tr><tr><td><code>vdir<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcc4&nbsp;<strong>B. Visualizaci\u00f3n y lectura de archivos<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><\/tr><\/thead><tbody><tr><td><code>cat<\/code><\/td><\/tr><tr><td><code>tac<\/code><\/td><\/tr><tr><td><code>nl<\/code><\/td><\/tr><tr><td><code>od<\/code><\/td><\/tr><tr><td><code>base32<\/code><\/td><\/tr><tr><td><code>base64<\/code><\/td><\/tr><tr><td><code>fmt<\/code><\/td><\/tr><tr><td><code>fold<\/code><\/td><\/tr><tr><td><code>head<\/code><\/td><\/tr><tr><td><code>tail<\/code><\/td><\/tr><tr><td><code>split<\/code><\/td><\/tr><tr><td><code>csplit<\/code><\/td><\/tr><tr><td><code>sum<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd0d&nbsp;<strong>C. B\u00fasqueda y comparaci\u00f3n<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><\/tr><\/thead><tbody><tr><td><code>cmp<\/code><\/td><\/tr><tr><td><code>comm<\/code><\/td><\/tr><tr><td><code>diff<\/code><\/td><\/tr><tr><td><code>dircmp<\/code><\/td><\/tr><tr><td><code>md5sum<\/code><\/td><\/tr><tr><td><code>sha1sum<\/code><\/td><\/tr><tr><td><code>sha224sum<\/code><\/td><\/tr><tr><td><code>sha256sum<\/code><\/td><\/tr><tr><td><code>sha384sum<\/code><\/td><\/tr><tr><td><code>sha512sum<\/code><\/td><\/tr><tr><td><code>cksum<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddee&nbsp;<strong>D. Procesamiento de texto<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><\/tr><\/thead><tbody><tr><td><code>cut<\/code><\/td><\/tr><tr><td><code>expand<\/code><\/td><\/tr><tr><td><code>unexpand<\/code><\/td><\/tr><tr><td><code>join<\/code><\/td><\/tr><tr><td><code>paste<\/code><\/td><\/tr><tr><td><code>sort<\/code><\/td><\/tr><tr><td><code>uniq<\/code><\/td><\/tr><tr><td><code>tr<\/code><\/td><\/tr><tr><td><code>wc<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>E. Utilidades del sistema<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><\/tr><\/thead><tbody><tr><td><code>arch<\/code><\/td><\/tr><tr><td><code>date<\/code><\/td><\/tr><tr><td><code>df<\/code><\/td><\/tr><tr><td><code>env<\/code><\/td><\/tr><tr><td><code>expr<\/code><\/td><\/tr><tr><td><code>factor<\/code><\/td><\/tr><tr><td><code>groups<\/code><\/td><\/tr><tr><td><code>hostid<\/code><\/td><\/tr><tr><td><code>id<\/code><\/td><\/tr><tr><td><code>logname<\/code><\/td><\/tr><tr><td><code>nice<\/code><\/td><\/tr><tr><td><code>nohup<\/code><\/td><\/tr><tr><td><code>nproc<\/code><\/td><\/tr><tr><td><code>pathchk<\/code><\/td><\/tr><tr><td><code>pinky<\/code><\/td><\/tr><tr><td><code>printenv<\/code><\/td><\/tr><tr><td><code>printf<\/code><\/td><\/tr><tr><td><code>pwd<\/code><\/td><\/tr><tr><td><code>seq<\/code><\/td><\/tr><tr><td><code>sleep<\/code><\/td><\/tr><tr><td><code>stat<\/code><\/td><\/tr><tr><td><code>stdbuf<\/code><\/td><\/tr><tr><td><code>stty<\/code><\/td><\/tr><tr><td><code>tee<\/code><\/td><\/tr><tr><td><code>test<\/code><\/td><\/tr><tr><td><code>timeout<\/code><\/td><\/tr><tr><td><code>tty<\/code><\/td><\/tr><tr><td><code>uname<\/code><\/td><\/tr><tr><td><code>uptime<\/code><\/td><\/tr><tr><td><code>users<\/code><\/td><\/tr><tr><td><code>who<\/code><\/td><\/tr><tr><td><code>whoami<\/code><\/td><\/tr><tr><td><code>yes<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd10&nbsp;<strong>F. Permisos y atributos<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><\/tr><\/thead><tbody><tr><td><code>chcon<\/code><\/td><\/tr><tr><td><code>chgrp<\/code><\/td><\/tr><tr><td><code>chmod<\/code><\/td><\/tr><tr><td><code>chown<\/code><\/td><\/tr><tr><td><code>runcon<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddf1&nbsp;<strong>G. Utilidades de shell<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comando<\/th><\/tr><\/thead><tbody><tr><td><code>false<\/code><\/td><\/tr><tr><td><code>true<\/code><\/td><\/tr><tr><td><code>echo<\/code><\/td><\/tr><tr><td><code>printf<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comandos menos conocidos<\/h2>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>1. Gesti\u00f3n de entorno y variables<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>1.1.&nbsp;<\/strong><code>bind<\/code><strong>&nbsp;\u2014 gestionar atajos de teclado de Readline<\/strong><\/h2>\n\n\n\n<p>Bash usa <strong>Readline<\/strong> para leer lo que escribes en el prompt. Readline permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Atajos tipo Emacs (Ctrl+A, Ctrl+E\u2026)<\/li>\n\n\n\n<li>Atajos tipo Vi<\/li>\n\n\n\n<li>Macros de teclado<\/li>\n\n\n\n<li>Reasignar teclas<\/li>\n<\/ul>\n\n\n\n<p><code>bind<\/code> sirve para <strong>ver, modificar o crear atajos<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ver todos los atajos actuales<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bind -P\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Asignar un atajo nuevo<\/h3>\n\n\n\n<p>Ejemplo: que F2 inserte la palabra \u201chola\u201d:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bind '\"\\eOQ\": \"hola\"'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Cambiar a modo vi<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>set -o vi\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>1.2.&nbsp;<\/strong><code>declare<\/code><strong>&nbsp;\/&nbsp;<\/strong><code>typeset<\/code><strong>&nbsp;\u2014 variables con atributos<\/strong><\/h2>\n\n\n\n<p>Son equivalentes en Bash. Sirven para declarar variables con <strong>tipos o atributos especiales<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Atributos importantes<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Atributo<\/th><th>Significado<\/th><\/tr><\/thead><tbody><tr><td><code>-i<\/code><\/td><td>Variable&nbsp;entera&nbsp;(eval\u00faa&nbsp;expresiones)<\/td><\/tr><tr><td><code>-a<\/code><\/td><td>Array&nbsp;indexado<\/td><\/tr><tr><td><code>-A<\/code><\/td><td>Array&nbsp;asociativo<\/td><\/tr><tr><td><code>-r<\/code><\/td><td>Solo&nbsp;lectura<\/td><\/tr><tr><td><code>-x<\/code><\/td><td>Exportar&nbsp;al&nbsp;entorno<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplos<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Variable entera<\/h4>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>declare -i x=5+3\necho $x   # 8\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Array<\/h4>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>declare -a nums=(1 2 3)\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Array asociativo<\/h4>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>declare -A persona=(&#91;nombre]=David &#91;edad]=40)\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Solo lectura<\/h4>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>declare -r PI=3.14159\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>1.3.&nbsp;<\/strong><code>eval<\/code><strong>&nbsp;\u2014 ejecutar c\u00f3digo generado din\u00e1micamente<\/strong><\/h2>\n\n\n\n<p><code>eval<\/code> <strong>vuelve a interpretar<\/strong> una cadena como c\u00f3digo Bash.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo b\u00e1sico<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cmd=\"ls -l\"\neval $cmd\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo potente: variables din\u00e1micas<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var=\"nombre\"\neval $var=\"David\"\necho $nombre\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Riesgo<\/h3>\n\n\n\n<p>Si eval\u00faas texto no controlado \u2192 <strong>inyecci\u00f3n de comandos<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udded&nbsp;<strong>2. Navegaci\u00f3n y manipulaci\u00f3n del entorno<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>2.1.&nbsp;<\/strong><code>pushd<\/code><strong>&nbsp;y&nbsp;<\/strong><code>popd<\/code><strong>&nbsp;\u2014 pila de directorios<\/strong><\/h2>\n\n\n\n<p>Bash mantiene una <strong>pila de directorios<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><code>pushd<\/code>&nbsp;\u2014 cambia de directorio y lo mete en la pila<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pushd \/etc\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><code>popd<\/code>&nbsp;\u2014 vuelve al directorio anterior<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>popd\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ver la pila<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dirs -v\n<\/code><\/pre>\n\n\n\n<p>Esto es oro para navegar r\u00e1pido entre 2\u20133 rutas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf5&nbsp;<strong>3. Control de procesos y jobs<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>3.1.&nbsp;<\/strong><code>jobs<\/code><strong>&nbsp;\u2014 lista procesos en background<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sleep 100 &amp;\njobs\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>3.2.&nbsp;<\/strong><code>fg<\/code><strong>&nbsp;\u2014 trae un job al foreground<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fg %1\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>3.3.&nbsp;<\/strong><code>bg<\/code><strong>&nbsp;\u2014 reanuda un job en background<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bg %1\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>3.4.&nbsp;<\/strong><code>kill<\/code><strong>&nbsp;\u2014 env\u00eda se\u00f1ales<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kill -9 1234\nkill -TERM %1\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>3.5.&nbsp;<\/strong><code>wait<\/code><strong>&nbsp;\u2014 espera a que un proceso termine<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wait %1\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>3.6.&nbsp;<\/strong><code>disown<\/code><strong>&nbsp;\u2014 elimina un job del control del shell<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>disown %1\n<\/code><\/pre>\n\n\n\n<p>El proceso sigue, pero el shell ya no lo controla.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>3.7.&nbsp;<\/strong><code>suspend<\/code><strong>&nbsp;\u2014 suspende el shell<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>suspend\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u2699\ufe0f&nbsp;<strong>4. Ejecuci\u00f3n y control de flujo<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>4.1.&nbsp;<\/strong><code>exec<\/code><strong>&nbsp;\u2014 reemplaza el proceso actual<\/strong><\/h2>\n\n\n\n<p>Ejemplo: redirigir todo el shell a un archivo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>exec &gt; salida.log\n<\/code><\/pre>\n\n\n\n<p>Ejemplo: reemplazar el shell por otro programa:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>exec ls\n<\/code><\/pre>\n\n\n\n<p>El shell desaparece.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>4.2.&nbsp;<\/strong><code>shift<\/code><strong>&nbsp;\u2014 desplaza par\u00e1metros posicionales<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>set -- a b c d\necho $1  # a\nshift\necho $1  # b\n<\/code><\/pre>\n\n\n\n<p>Muy \u00fatil en scripts con argumentos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>4.3.&nbsp;<\/strong><code>getopts<\/code><strong>&nbsp;\u2014 parseo POSIX de opciones<\/strong><\/h2>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while getopts \"ab:c\" opt; do\n  case $opt in\n    a) echo \"Opci\u00f3n -a\" ;;\n    b) echo \"Opci\u00f3n -b con valor $OPTARG\" ;;\n    c) echo \"Opci\u00f3n -c\" ;;\n  esac\ndone\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce5&nbsp;<strong>5. Entrada y salida<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>5.1.&nbsp;<\/strong><code>mapfile<\/code><strong>&nbsp;\/&nbsp;<\/strong><code>readarray<\/code><strong>&nbsp;\u2014 leer l\u00edneas en un array<\/strong><\/h2>\n\n\n\n<p>Son id\u00e9nticos.<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mapfile arr &lt; archivo.txt\necho \"${arr&#91;0]}\"\n<\/code><\/pre>\n\n\n\n<p>Con numeraci\u00f3n autom\u00e1tica.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u2797&nbsp;<strong>6. Aritm\u00e9tica<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>6.1.&nbsp;<\/strong><code>(( ))<\/code><strong>&nbsp;\u2014 aritm\u00e9tica nativa del shell<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>((x = 5 + 3))\necho $x\n<\/code><\/pre>\n\n\n\n<p>Permite comparaciones:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (( x &gt; 10 )); then ...\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>6.2.&nbsp;<\/strong><code>let<\/code><strong>&nbsp;\u2014 versi\u00f3n antigua<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let x=5+3\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>6.3.&nbsp;<\/strong><code>bc<\/code><strong>&nbsp;\u2014 calculadora arbitraria de precisi\u00f3n<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"scale=5; 10\/3\" | bc\n<\/code><\/pre>\n\n\n\n<p>Funciones, bucles, variables\u2026 Es un mini lenguaje matem\u00e1tico.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf1&nbsp;<strong>7. Estructuras de control<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>7.1.&nbsp;<\/strong><code>coproc<\/code><strong>&nbsp;\u2014 ejecutar un proceso con pipes autom\u00e1ticos<\/strong><\/h2>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>coproc DATE { date; }\nread linea &lt;&amp;\"${DATE&#91;0]}\"\necho \"La fecha es: $linea\"\n<\/code><\/pre>\n\n\n\n<p>Crea un proceso con dos pipes listos para usar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>7.2.&nbsp;<\/strong><code>!<\/code><strong>&nbsp;\u2014 negaci\u00f3n l\u00f3gica<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if ! grep -q error log.txt; then\n  echo \"No hay errores\"\nfi\n<\/code><\/pre>\n\n\n\n<p>Nada que ver con el history.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcc1&nbsp;<strong>8. Gesti\u00f3n de archivos y directorios<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>8.1.&nbsp;<\/strong><code>basename<\/code><strong>&nbsp;\u2014 extraer nombre de archivo<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>basename \/usr\/local\/bin\/python\n# python\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>8.2.&nbsp;<\/strong><code>chgrp<\/code><strong>&nbsp;\u2014 cambiar grupo<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chgrp staff archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>8.3.&nbsp;<\/strong><code>chown<\/code><strong>&nbsp;\u2014 cambiar propietario<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chown david archivo\nchown david:staff archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>8.4.&nbsp;<\/strong><code>dd<\/code><strong>&nbsp;\u2014 copiar datos a bajo nivel<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dd if=\/dev\/zero of=archivo bs=1M count=10\n<\/code><\/pre>\n\n\n\n<p>Sirve para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Crear im\u00e1genes<\/li>\n\n\n\n<li>Copiar discos<\/li>\n\n\n\n<li>Convertir formatos<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>8.5.&nbsp;<\/strong><code>mkfifo<\/code><strong>&nbsp;\u2014 crear FIFO (named pipe)<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkfifo canal\necho hola &gt; canal\ncat canal\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>8.6.&nbsp;<\/strong><code>mknod<\/code><strong>&nbsp;\u2014 crear nodos de dispositivo<\/strong><\/h2>\n\n\n\n<p>Solo para administradores avanzados.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>8.7.&nbsp;<\/strong><code>mktemp<\/code><strong>&nbsp;\u2014 crear archivo temporal seguro<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mktemp\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>8.8.&nbsp;<\/strong><code>readlink<\/code><strong>&nbsp;\u2014 resolver enlaces simb\u00f3licos<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>readlink -f \/usr\/bin\/python\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>8.9.&nbsp;<\/strong><code>shred<\/code><strong>&nbsp;\u2014 sobrescribir archivo para borrado seguro<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shred -u archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>8.10.&nbsp;<\/strong><code>truncate<\/code><strong>&nbsp;\u2014 cambiar tama\u00f1o de archivo<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>truncate -s 0 archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>8.11.&nbsp;<\/strong><code>vdir<\/code><strong>&nbsp;\u2014 como&nbsp;<\/strong><code>ls -l<\/code><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vdir\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcc4&nbsp;<strong>9. Visualizaci\u00f3n<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>9.1.&nbsp;<\/strong><code>tac<\/code><strong>&nbsp;\u2014 cat al rev\u00e9s<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tac archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>9.2.&nbsp;<\/strong><code>nl<\/code><strong>&nbsp;\u2014 numerar l\u00edneas<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nl archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>9.3.&nbsp;<\/strong><code>od<\/code><strong>&nbsp;\u2014 volcado hexadecimal<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>od -x archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>9.4.&nbsp;<\/strong><code>base32<\/code><strong>&nbsp;\/&nbsp;<\/strong><code>base64<\/code><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo hola | base64\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>9.5.&nbsp;<\/strong><code>fmt<\/code><strong>&nbsp;\u2014 formatear p\u00e1rrafos<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fmt -w 40 archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>9.6.&nbsp;<\/strong><code>fold<\/code><strong>&nbsp;\u2014 cortar l\u00edneas largas<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fold -w 20 archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>9.7.&nbsp;<\/strong><code>split<\/code><strong>&nbsp;\u2014 dividir archivos<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>split -b 1M archivo parte_\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>9.8.&nbsp;<\/strong><code>csplit<\/code><strong>&nbsp;\u2014 dividir por patrones<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>csplit archivo '\/ERROR\/' '{*}'\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>9.9.&nbsp;<\/strong><code>sum<\/code><strong>&nbsp;\u2014 checksum antiguo<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sum archivo\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd0d&nbsp;<strong>10. B\u00fasqueda y comparaci\u00f3n<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>10.1.&nbsp;<\/strong><code>cmp<\/code><strong>&nbsp;\u2014 comparar binarios<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cmp a.bin b.bin\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>10.2.&nbsp;<\/strong><code>comm<\/code><strong>&nbsp;\u2014 comparar listas ordenadas<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>comm lista1 lista2\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>10.3.&nbsp;<\/strong><code>dircmp<\/code><strong>&nbsp;\u2014 comparar directorios<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dircmp dir1 dir2\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>10.4.&nbsp;<\/strong><code>md5sum<\/code><strong>&nbsp;\u2014 hash MD5<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>md5sum archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>10.5.&nbsp;<\/strong><code>cksum<\/code><strong>&nbsp;\u2014 checksum CRC32<\/strong><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cksum archivo\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u2699\ufe0f&nbsp;<strong>11. Utilidades del sistema<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><code>arch<\/code>&nbsp;\u2014 arquitectura<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>arch\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>expr<\/code>&nbsp;\u2014 expresiones aritm\u00e9ticas<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>expr 5 + 3\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>factor<\/code>&nbsp;\u2014 descomposici\u00f3n en factores<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>factor 360\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>hostid<\/code>&nbsp;\u2014 ID del host<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>hostid\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>nice<\/code>&nbsp;\u2014 cambiar prioridad<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nice -n 10 comando\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>nproc<\/code>&nbsp;\u2014 n\u00facleos disponibles<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nproc\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>pathchk<\/code>&nbsp;\u2014 comprobar validez de rutas<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pathchk \/ruta\/larga\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>pinky<\/code>&nbsp;\u2014 versi\u00f3n reducida de&nbsp;<code>finger<\/code><\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pinky\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>stdbuf<\/code>&nbsp;\u2014 cambiar buffers de E\/S<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>stdbuf -oL comando\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>stty<\/code>&nbsp;\u2014 configurar terminal<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>stty -a\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>tty<\/code>&nbsp;\u2014 mostrar terminal actual<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tty\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>yes<\/code>&nbsp;\u2014 repetir una cadena infinitamente<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yes hola\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udd10&nbsp;<strong>12. Permisos y atributos<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><code>chcon<\/code>&nbsp;\u2014 cambiar contexto SELinux<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chcon -t httpd_sys_content_t archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><code>runcon<\/code>&nbsp;\u2014 ejecutar con contexto SELinux<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>runcon -t httpd_t comando<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Procesamiento de texto: awk, sed, cut, sort, uniq y tr<\/h2>\n\n\n\n<p>Vamos a hacer <strong>la gu\u00eda definitiva<\/strong>, t\u00e9cnica y profunda, de los seis comandos de procesamiento de texto m\u00e1s importantes en Unix: <strong>awk, sed, cut, sort, uniq y tr<\/strong>. Cada uno con:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Qu\u00e9 hace realmente a nivel t\u00e9cnico<\/li>\n\n\n\n<li>C\u00f3mo funciona internamente<\/li>\n\n\n\n<li>Sintaxis esencial<\/li>\n\n\n\n<li>Ejemplos pr\u00e1cticos<\/li>\n\n\n\n<li>Casos avanzados<\/li>\n\n\n\n<li>Errores t\u00edpicos y c\u00f3mo evitarlos<\/li>\n<\/ul>\n\n\n\n<p>Todo pensado para alguien con tu perfil t\u00e9cnico.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 1.&nbsp;<strong>AWK<\/strong>&nbsp;\u2014&nbsp;<em>El lenguaje de procesamiento de texto m\u00e1s potente en Unix<\/em><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9 \u00bfQu\u00e9 es AWK realmente?<\/h2>\n\n\n\n<p>AWK <strong>no es un comando<\/strong>, sino <strong>un lenguaje de programaci\u00f3n completo<\/strong> dise\u00f1ado para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Procesar texto l\u00ednea a l\u00ednea<\/li>\n\n\n\n<li>Dividir en campos autom\u00e1ticamente<\/li>\n\n\n\n<li>Aplicar patrones y acciones<\/li>\n\n\n\n<li>Trabajar con expresiones regulares<\/li>\n\n\n\n<li>Generar informes y transformaciones complejas<\/li>\n<\/ul>\n\n\n\n<p>Internamente, AWK:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lee una l\u00ednea<\/li>\n\n\n\n<li>La divide en campos usando el separador <code>FS<\/code><\/li>\n\n\n\n<li>Eval\u00faa patrones<\/li>\n\n\n\n<li>Ejecuta acciones <code>{ ... }<\/code><\/li>\n\n\n\n<li>Imprime si procede<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddec Sintaxis general<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>awk 'patr\u00f3n { acci\u00f3n }' archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Ejemplos esenciales<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Imprimir la primera columna<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>awk '{print $1}' datos.txt\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2) Filtrar l\u00edneas que contengan \u201cerror\u201d<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>awk '\/error\/'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3) Sumar la tercera columna<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>awk '{s += $3} END {print s}'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4) Cambiar separador de campos<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>awk -F',' '{print $2}'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5) Reemplazar texto (m\u00e1s potente que sed)<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>awk '{gsub(\"foo\",\"bar\"); print}'\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Ejemplo avanzado: procesar logs<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>awk '$9 == 404 {count&#91;$1]++} END {for (ip in count) print ip, count&#91;ip]}'\n<\/code><\/pre>\n\n\n\n<p>Cuenta cu\u00e1ntos errores 404 genera cada IP.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 2.&nbsp;<strong>SED<\/strong>&nbsp;\u2014&nbsp;<em>Editor de flujo (stream editor)<\/em><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9 \u00bfQu\u00e9 hace realmente sed?<\/h2>\n\n\n\n<p>SED procesa texto <strong>sin cargarlo entero en memoria<\/strong>. Funciona l\u00ednea a l\u00ednea, aplicando transformaciones declarativas.<\/p>\n\n\n\n<p>Internamente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lee una l\u00ednea<\/li>\n\n\n\n<li>La coloca en el <em>pattern space<\/em><\/li>\n\n\n\n<li>Aplica comandos<\/li>\n\n\n\n<li>Imprime (a menos que uses <code>-n<\/code>)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Sintaxis b\u00e1sica<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sed 'comando' archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Ejemplos esenciales<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Sustituci\u00f3n simple<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sed 's\/foo\/bar\/' archivo\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2) Sustituci\u00f3n global<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sed 's\/foo\/bar\/g'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3) Eliminar l\u00edneas que coincidan<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sed '\/error\/d'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4) Reemplazar solo en l\u00edneas que cumplan un patr\u00f3n<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sed '\/^#\/{s\/todo\/nada\/}'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5) Editar un archivo en sitio<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sed -i 's\/foo\/bar\/g' archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Ejemplo avanzado: eliminar l\u00edneas entre dos patrones<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sed '\/BEGIN\/,\/END\/d'\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 3.&nbsp;<strong>CUT<\/strong>&nbsp;\u2014&nbsp;<em>Extracci\u00f3n de columnas o rangos<\/em><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9 \u00bfQu\u00e9 hace realmente cut?<\/h2>\n\n\n\n<p>CUT <strong>no interpreta expresiones regulares<\/strong>. Es extremadamente r\u00e1pido porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Trabaja por posiciones o delimitadores<\/li>\n\n\n\n<li>No analiza sintaxis compleja<\/li>\n\n\n\n<li>No reordena datos<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Sintaxis<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cut -d',' -f2 archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Ejemplos esenciales<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Extraer la segunda columna<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cut -f2\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2) Usar delimitador personalizado<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cut -d':' -f1 \/etc\/passwd\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3) Extraer rangos de caracteres<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cut -c1-10 archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Ejemplo avanzado: extraer m\u00faltiples columnas<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cut -d',' -f1,4,7 datos.csv\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 4.&nbsp;<strong>SORT<\/strong>&nbsp;\u2014&nbsp;<em>Ordenaci\u00f3n eficiente de texto<\/em><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9 \u00bfQu\u00e9 hace realmente sort?<\/h2>\n\n\n\n<p>SORT usa algoritmos de ordenaci\u00f3n externos (merge sort) optimizados para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Archivos enormes<\/li>\n\n\n\n<li>Ordenaci\u00f3n por claves<\/li>\n\n\n\n<li>Ordenaci\u00f3n num\u00e9rica<\/li>\n\n\n\n<li>Ordenaci\u00f3n por campos<\/li>\n<\/ul>\n\n\n\n<p>Internamente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Divide en bloques<\/li>\n\n\n\n<li>Ordena cada bloque<\/li>\n\n\n\n<li>Hace merge de los bloques<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Sintaxis<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sort &#91;opciones] archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Ejemplos esenciales<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Ordenar alfab\u00e9ticamente<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sort archivo\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2) Ordenar num\u00e9ricamente<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sort -n archivo\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3) Ordenar por la tercera columna<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sort -k3 archivo\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4) Ordenar por columna num\u00e9rica<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sort -k2,2n archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Ejemplo avanzado: ordenar por fecha (ISO 8601)<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sort -k1,1 archivo.log\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 5.&nbsp;<strong>UNIQ<\/strong>&nbsp;\u2014&nbsp;<em>Elimina duplicados consecutivos<\/em><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9 \u00bfQu\u00e9 hace realmente uniq?<\/h2>\n\n\n\n<p>UNIQ <strong>no detecta duplicados globales<\/strong>, solo <strong>consecutivos<\/strong>. Por eso suele usarse con <code>sort<\/code>.<\/p>\n\n\n\n<p>Internamente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Compara l\u00ednea actual con la anterior<\/li>\n\n\n\n<li>Si son iguales \u2192 descarta<\/li>\n\n\n\n<li>Si cambian \u2192 imprime<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Sintaxis<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>uniq archivo\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Ejemplos esenciales<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Eliminar duplicados consecutivos<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>uniq\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2) Contar ocurrencias<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>uniq -c\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3) Mostrar solo duplicados<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>uniq -d\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Ejemplo avanzado: top de palabras repetidas<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sort palabras.txt | uniq -c | sort -nr | head\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 6.&nbsp;<strong>TR<\/strong>&nbsp;\u2014&nbsp;<em>Traducci\u00f3n y eliminaci\u00f3n de caracteres<\/em><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9 \u00bfQu\u00e9 hace realmente tr?<\/h2>\n\n\n\n<p>TR trabaja <strong>car\u00e1cter a car\u00e1cter<\/strong>, no por l\u00edneas. Es extremadamente r\u00e1pido porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No usa expresiones regulares<\/li>\n\n\n\n<li>No entiende campos<\/li>\n\n\n\n<li>Solo transforma bytes<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Sintaxis<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tr SET1 SET2\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Ejemplos esenciales<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Convertir min\u00fasculas a may\u00fasculas<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tr 'a-z' 'A-Z'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2) Eliminar caracteres<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tr -d 'aeiou'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3) Comprimir repeticiones<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tr -s ' '\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4) Sustituir separadores<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tr ':' '\\t'\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Ejemplo avanzado: normalizar texto<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tr -cd '&#91;:alnum:]\\n'\n<\/code><\/pre>\n\n\n\n<p>Elimina todo excepto letras, n\u00fameros y saltos de l\u00ednea.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conceptos en bash: builtins, gnu coreutils, stat, posix o estandar posix, fork<\/h2>\n\n\n\n<p>Vamos a desmenuzar estos conceptos con precisi\u00f3n t\u00e9cnica, pero de forma clara y \u00fatil para tu nivel. Son piezas fundamentales para entender c\u00f3mo funciona realmente un sistema Unix\/Linux por dentro.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>1. Builtins (comandos internos del shell)<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 \u00bfQu\u00e9 son?<\/h2>\n\n\n\n<p>Un <strong>builtin<\/strong> es un comando que <strong>no es un programa externo<\/strong>, sino una <strong>funci\u00f3n interna del propio int\u00e9rprete de comandos<\/strong> (Bash, Zsh, etc.).<\/p>\n\n\n\n<p>Ejemplos: <code>cd<\/code>, <code>echo<\/code>, <code>export<\/code>, <code>alias<\/code>, <code>read<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 \u00bfPor qu\u00e9 existen?<\/h2>\n\n\n\n<p>Porque hay operaciones que <strong>no pueden ejecutarse en un proceso hijo<\/strong>. Ejemplo cl\u00e1sico:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/tmp\n<\/code><\/pre>\n\n\n\n<p>Si <code>cd<\/code> fuera un programa externo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El shell lanzar\u00eda un proceso hijo<\/li>\n\n\n\n<li>El hijo cambiar\u00eda de directorio<\/li>\n\n\n\n<li>El hijo terminar\u00eda<\/li>\n\n\n\n<li>El shell seguir\u00eda en el mismo directorio de antes<\/li>\n<\/ul>\n\n\n\n<p>Por eso <code>cd<\/code> <strong>debe ejecutarse dentro del proceso del shell<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f Caracter\u00edsticas t\u00e9cnicas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se ejecutan sin <code>fork()<\/code><\/li>\n\n\n\n<li>Son m\u00e1s r\u00e1pidos que los binarios externos<\/li>\n\n\n\n<li>Tienen acceso directo al estado interno del shell (variables, entorno, directorio actual)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce6&nbsp;<strong>2. GNU coreutils<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 \u00bfQu\u00e9 son?<\/h2>\n\n\n\n<p>Es un <strong>conjunto de programas esenciales<\/strong> para cualquier sistema GNU\/Linux. Incluye comandos como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>ls<\/code>, <code>cp<\/code>, <code>mv<\/code>, <code>rm<\/code><\/li>\n\n\n\n<li><code>cat<\/code>, <code>head<\/code>, <code>tail<\/code><\/li>\n\n\n\n<li><code>sort<\/code>, <code>uniq<\/code>, <code>cut<\/code><\/li>\n\n\n\n<li><code>chmod<\/code>, <code>chown<\/code>, <code>stat<\/code><\/li>\n<\/ul>\n\n\n\n<p>Son <strong>binarios externos<\/strong>, normalmente ubicados en:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/usr\/bin\n\/bin\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 \u00bfPor qu\u00e9 existen?<\/h2>\n\n\n\n<p>Porque implementan las herramientas b\u00e1sicas del sistema operativo siguiendo est\u00e1ndares POSIX, pero con extensiones GNU.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f Caracter\u00edsticas t\u00e9cnicas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se ejecutan como procesos independientes<\/li>\n\n\n\n<li>Requieren <code>fork()<\/code> + <code>execve()<\/code><\/li>\n\n\n\n<li>Son portables entre distribuciones Linux<\/li>\n\n\n\n<li>Suelen ser m\u00e1s potentes que las versiones POSIX puras<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccf&nbsp;<strong>3. POSIX (o est\u00e1ndar POSIX)<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 \u00bfQu\u00e9 es POSIX?<\/h2>\n\n\n\n<p>POSIX = <strong>Portable Operating System Interface<\/strong> Es un <strong>est\u00e1ndar internacional<\/strong> que define:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\u00f3mo deben comportarse los comandos b\u00e1sicos<\/li>\n\n\n\n<li>C\u00f3mo deben funcionar las llamadas al sistema<\/li>\n\n\n\n<li>C\u00f3mo debe ser la API de procesos, se\u00f1ales, archivos, etc.<\/li>\n\n\n\n<li>C\u00f3mo debe comportarse un shell compatible<\/li>\n<\/ul>\n\n\n\n<p>POSIX no es software. Es <strong>un conjunto de reglas<\/strong> que los sistemas Unix-like deben cumplir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 \u00bfPor qu\u00e9 existe?<\/h2>\n\n\n\n<p>Para que un script o programa funcione igual en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Linux<\/li>\n\n\n\n<li>macOS<\/li>\n\n\n\n<li>BSD<\/li>\n\n\n\n<li>Solaris<\/li>\n\n\n\n<li>AIX<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f Ejemplo pr\u00e1ctico<\/h2>\n\n\n\n<p>POSIX define que:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls\n<\/code><\/pre>\n\n\n\n<p>debe listar archivos, pero <strong>no define colores<\/strong>. Por eso:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>ls<\/code> en GNU tiene colores<\/li>\n\n\n\n<li><code>ls<\/code> en macOS no<\/li>\n\n\n\n<li>Ambos siguen siendo POSIX<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcca&nbsp;<strong>4. stat (concepto general y comando)<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 \u00bfQu\u00e9 es&nbsp;<code>stat<\/code>?<\/h2>\n\n\n\n<p>Hay dos cosas distintas:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1)&nbsp;<strong>La syscall&nbsp;<\/strong><code>stat()<\/code><strong>&nbsp;del kernel<\/strong><\/h3>\n\n\n\n<p>Es una llamada al sistema que devuelve <strong>metadatos de un archivo<\/strong>, como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tama\u00f1o<\/li>\n\n\n\n<li>permisos<\/li>\n\n\n\n<li>inodo<\/li>\n\n\n\n<li>timestamps<\/li>\n\n\n\n<li>propietario<\/li>\n\n\n\n<li>tipo de archivo<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo en C:<\/p>\n\n\n\n<p>c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>struct stat info;\nstat(\"archivo.txt\", &amp;info);\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2)&nbsp;<strong>El comando&nbsp;<\/strong><code>stat<\/code><strong>&nbsp;de coreutils<\/strong><\/h3>\n\n\n\n<p>Es un binario que <strong>muestra la informaci\u00f3n de la syscall <\/strong><code>stat()<\/code> de forma legible.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>stat archivo.txt\n<\/code><\/pre>\n\n\n\n<p>Salida t\u00edpica:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Size: 2048    Blocks: 8    IO Block: 4096 regular file\nDevice: 803h\/2051d    Inode: 1234567    Links: 1\nAccess: (0644\/-rw-r--r--)  Uid: 1000  Gid: 1000\nAccess: 2024-01-01 12:00:00\nModify: 2024-01-01 12:00:00\nChange: 2024-01-01 12:00:00\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec&nbsp;<strong>5. fork() \u2014 La base de la multitarea en Unix<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 \u00bfQu\u00e9 es&nbsp;<code>fork()<\/code>?<\/h2>\n\n\n\n<p><code>fork()<\/code> es una <strong>llamada al sistema<\/strong> que crea un <strong>nuevo proceso<\/strong> duplicando el proceso actual.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El proceso original = <strong>padre<\/strong><\/li>\n\n\n\n<li>El proceso duplicado = <strong>hijo<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Ambos contin\u00faan ejecut\u00e1ndose desde el mismo punto del c\u00f3digo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 \u00bfPor qu\u00e9 es tan importante?<\/h2>\n\n\n\n<p>Porque <strong>todos los comandos externos<\/strong> se ejecutan as\u00ed:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>El shell llama a <code>fork()<\/code><\/li>\n\n\n\n<li>El hijo ejecuta <code>execve()<\/code> para cargar el binario<\/li>\n\n\n\n<li>El padre espera o sigue ejecutando<\/li>\n<\/ol>\n\n\n\n<p>Ejemplo conceptual:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash\n \u2514\u2500\u2500 fork()\n       \u2514\u2500\u2500 execve(\"\/usr\/bin\/ls\")\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f Caracter\u00edsticas t\u00e9cnicas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copia el espacio de memoria del proceso (copy-on-write)<\/li>\n\n\n\n<li>Copia descriptores de archivo<\/li>\n\n\n\n<li>Copia variables de entorno<\/li>\n\n\n\n<li>El hijo tiene un PID distinto<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Ejemplo en C<\/h2>\n\n\n\n<p>c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pid_t pid = fork();\n\nif (pid == 0) {\n    printf(\"Soy el hijo\\n\");\n} else {\n    printf(\"Soy el padre\\n\");\n}\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83c\udfaf Resumen r\u00e1pido<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Concepto<\/th><th>Qu\u00e9&nbsp;es<\/th><th>Nivel<\/th><\/tr><\/thead><tbody><tr><td><strong>Builtins<\/strong><\/td><td>Comandos&nbsp;internos&nbsp;del&nbsp;shell<\/td><td>Shell<\/td><\/tr><tr><td><strong>GNU&nbsp;coreutils<\/strong><\/td><td>Conjunto&nbsp;de&nbsp;binarios&nbsp;esenciales<\/td><td>Sistema<\/td><\/tr><tr><td><strong>POSIX<\/strong><\/td><td>Est\u00e1ndar&nbsp;que&nbsp;define&nbsp;c\u00f3mo&nbsp;deben&nbsp;comportarse&nbsp;los&nbsp;sistemas&nbsp;Unix<\/td><td>Norma<\/td><\/tr><tr><td><strong>stat<\/strong><\/td><td>Syscall&nbsp;para&nbsp;obtener&nbsp;metadatos&nbsp;de&nbsp;archivos&nbsp;(y&nbsp;comando&nbsp;que&nbsp;la&nbsp;muestra)<\/td><td>Kernel&nbsp;\/&nbsp;Usuario<\/td><\/tr><tr><td><strong>fork()<\/strong><\/td><td>Syscall&nbsp;que&nbsp;crea&nbsp;procesos<\/td><td>Kernel<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Este es uno de esos temas donde entender <strong>c\u00f3mo funciona Unix por dentro<\/strong> te cambia la forma de ver cualquier shell o proceso. Te lo explico con rigor t\u00e9cnico, pero de forma clara.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 1.&nbsp;<strong>\u00bfPor qu\u00e9 escribimos&nbsp;<\/strong><code>fork()<\/code><strong>,&nbsp;<\/strong><code>execve()<\/code><strong>,&nbsp;<\/strong><code>wait()<\/code><strong>&nbsp;con par\u00e9ntesis?<\/strong><\/h1>\n\n\n\n<p>Porque <strong>son funciones reales del sistema<\/strong>, no comandos del shell.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>fork()<\/code><\/li>\n\n\n\n<li><code>execve()<\/code><\/li>\n\n\n\n<li><code>wait()<\/code><\/li>\n\n\n\n<li><code>kill()<\/code><\/li>\n\n\n\n<li><code>signal()<\/code><\/li>\n<\/ul>\n\n\n\n<p>Todas ellas son <strong>llamadas al sistema<\/strong> (<em>syscalls<\/em>) expuestas a trav\u00e9s de la biblioteca est\u00e1ndar de C (glibc en Linux).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 \u00bfQu\u00e9 significa esto?<\/h3>\n\n\n\n<p>En C, las syscalls se invocan como funciones:<\/p>\n\n\n\n<p>c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pid_t pid = fork();\nexecve(\"\/bin\/ls\", args, envp);\nwait(&amp;status);\n<\/code><\/pre>\n\n\n\n<p>Por eso se escriben con par\u00e9ntesis: <strong>son funciones que reciben par\u00e1metros y devuelven valores<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd2c \u00bfQu\u00e9 ocurre realmente?<\/h3>\n\n\n\n<p>Aunque parecen funciones normales, en realidad:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La funci\u00f3n de C prepara los argumentos<\/li>\n\n\n\n<li>Ejecuta la instrucci\u00f3n <code>syscall<\/code> (o <code>int 0x80<\/code> en sistemas antiguos)<\/li>\n\n\n\n<li>El kernel toma el control<\/li>\n\n\n\n<li>Realiza la operaci\u00f3n<\/li>\n\n\n\n<li>Devuelve al proceso<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddec 2.&nbsp;<strong>C\u00f3mo se relacionan fork(), execve(), wait() y signals<\/strong><\/h1>\n\n\n\n<p>Este es el <strong>ciclo vital de cualquier comando externo<\/strong> que ejecutas en Bash, Zsh, etc.<\/p>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>2.1 fork() \u2014 Crear un proceso hijo<\/strong><\/h2>\n\n\n\n<p><code>fork()<\/code> duplica el proceso actual:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El padre sigue ejecut\u00e1ndose<\/li>\n\n\n\n<li>El hijo es una copia casi id\u00e9ntica (copy-on-write)<\/li>\n\n\n\n<li>Ambos contin\u00faan desde la misma l\u00ednea de c\u00f3digo<\/li>\n<\/ul>\n\n\n\n<p>El hijo recibe <code>pid = 0<\/code> El padre recibe <code>pid = &lt;PID del hijo&gt;<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>2.2 execve() \u2014 Reemplazar el proceso por un programa<\/strong><\/h2>\n\n\n\n<p>Despu\u00e9s de <code>fork()<\/code>, el hijo llama a <code>execve()<\/code>:<\/p>\n\n\n\n<p>c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>execve(\"\/usr\/bin\/ls\", args, envp);\n<\/code><\/pre>\n\n\n\n<p>Esto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Descarta<\/strong> el c\u00f3digo del proceso hijo<\/li>\n\n\n\n<li><strong>Carga<\/strong> el binario solicitado<\/li>\n\n\n\n<li><strong>Comienza a ejecutarlo desde su <\/strong><code>main()<\/code><\/li>\n<\/ul>\n\n\n\n<p>El PID no cambia. Solo cambia el contenido del proceso.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>2.3 wait() \u2014 El padre espera al hijo<\/strong><\/h2>\n\n\n\n<p>El shell (padre) ejecuta:<\/p>\n\n\n\n<p>c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wait(&amp;status);\n<\/code><\/pre>\n\n\n\n<p>Esto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Suspende al padre hasta que el hijo termine<\/li>\n\n\n\n<li>Recoge el exit code<\/li>\n\n\n\n<li>Evita procesos zombis<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde9&nbsp;<strong>2.4 signals \u2014 Comunicaci\u00f3n as\u00edncrona<\/strong><\/h2>\n\n\n\n<p>Las se\u00f1ales son interrupciones software:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>SIGINT<\/code> (Ctrl+C)<\/li>\n\n\n\n<li><code>SIGTERM<\/code><\/li>\n\n\n\n<li><code>SIGKILL<\/code><\/li>\n\n\n\n<li><code>SIGCHLD<\/code> (cuando un hijo termina)<\/li>\n\n\n\n<li><code>SIGHUP<\/code><\/li>\n<\/ul>\n\n\n\n<p>El shell usa se\u00f1ales para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cancelar procesos<\/li>\n\n\n\n<li>Notificar terminaci\u00f3n<\/li>\n\n\n\n<li>Controlar jobs en background<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>Resumen visual del ciclo<\/strong><\/h1>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shell\n \u251c\u2500\u2500 fork() \u2192 crea hijo\n \u2502\n \u251c\u2500\u2500 hijo \u2192 execve(\"\/bin\/ls\")\n \u2502\n \u2514\u2500\u2500 padre \u2192 wait() hasta que hijo termine\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udc1a 3.&nbsp;<strong>Diferencias entre POSIX sh, Bash, Zsh, Dash y Fish<\/strong><\/h1>\n\n\n\n<p>Aqu\u00ed viene lo bueno. Cada shell tiene su filosof\u00eda, su velocidad y su compatibilidad.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udccf&nbsp;<strong>3.1 POSIX sh (Bourne Shell est\u00e1ndar)<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Caracter\u00edsticas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Especificado por POSIX<\/li>\n\n\n\n<li>Sintaxis m\u00ednima y estable<\/li>\n\n\n\n<li>M\u00e1xima portabilidad<\/li>\n\n\n\n<li>Sin arrays, sin funciones avanzadas, sin extensiones<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f \u00bfCu\u00e1ndo usarlo?<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scripts que deben funcionar en cualquier Unix<\/li>\n\n\n\n<li>Entornos embebidos<\/li>\n\n\n\n<li>Init scripts<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u274c Limitaciones<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Muy limitado comparado con Bash o Zsh<\/li>\n\n\n\n<li>No tiene sintaxis moderna<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6&nbsp;<strong>3.2 Bash \u2014 Bourne Again Shell<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Caracter\u00edsticas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El shell m\u00e1s usado en Linux<\/li>\n\n\n\n<li>Compatible con POSIX sh<\/li>\n\n\n\n<li>Arrays, diccionarios, brace expansion, process substitution<\/li>\n\n\n\n<li>Funciones avanzadas<\/li>\n\n\n\n<li><code>[[ ]]<\/code> test mejorado<\/li>\n\n\n\n<li><code>coproc<\/code>, <code>mapfile<\/code>, <code>readarray<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Potente y muy documentado<\/li>\n\n\n\n<li>Ideal para scripting serio<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u274c Desventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e1s lento que Dash<\/li>\n\n\n\n<li>No es POSIX puro (tiene extensiones)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u2b50&nbsp;<strong>3.3 Zsh \u2014 El shell m\u00e1s avanzado para usuarios<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Caracter\u00edsticas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Autocompletado espectacular<\/li>\n\n\n\n<li>Globbing avanzado<\/li>\n\n\n\n<li>Arrays potentes<\/li>\n\n\n\n<li>Plugins (Oh My Zsh)<\/li>\n\n\n\n<li>Prompt extremadamente configurable<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El mejor shell interactivo<\/li>\n\n\n\n<li>Muy r\u00e1pido en autocompletado<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u274c Desventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No es POSIX<\/li>\n\n\n\n<li>Scripts Zsh no son portables<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u26a1&nbsp;<strong>3.4 Dash \u2014 Debian Almquist Shell<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Caracter\u00edsticas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Implementaci\u00f3n minimalista de POSIX sh<\/li>\n\n\n\n<li>Ultra r\u00e1pido<\/li>\n\n\n\n<li>Usado como <code>\/bin\/sh<\/code> en Debian\/Ubuntu<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ideal para scripts del sistema<\/li>\n\n\n\n<li>Arranca muy r\u00e1pido<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u274c Desventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No tiene extensiones de Bash<\/li>\n\n\n\n<li>No sirve para scripting avanzado<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udc1f&nbsp;<strong>3.5 Fish \u2014 Friendly Interactive Shell<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Caracter\u00edsticas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No es POSIX<\/li>\n\n\n\n<li>Sintaxis propia<\/li>\n\n\n\n<li>Autocompletado inteligente<\/li>\n\n\n\n<li>Colores y sugerencias tipo IDE<\/li>\n\n\n\n<li>Arrays nativos<\/li>\n\n\n\n<li>Configuraci\u00f3n web<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2714\ufe0f Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El mejor shell para principiantes<\/li>\n\n\n\n<li>Interactivo, moderno, c\u00f3modo<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u274c Desventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No sirve para scripting POSIX<\/li>\n\n\n\n<li>Sintaxis incompatible con Bash\/Zsh<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0&nbsp;<strong>Resumen comparativo<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Shell<\/th><th>POSIX<\/th><th>Velocidad<\/th><th>Interactivo<\/th><th>Scripting<\/th><th>Extensiones<\/th><\/tr><\/thead><tbody><tr><td><strong>sh<\/strong><\/td><td>\u2714\ufe0f<\/td><td>\u26a1\u26a1\u26a1<\/td><td>\u274c<\/td><td>\u2714\ufe0f<\/td><td>\u274c<\/td><\/tr><tr><td><strong>bash<\/strong><\/td><td>\u2714\ufe0f&nbsp;(parcial)<\/td><td>\u26a1<\/td><td>\u2714\ufe0f<\/td><td>\u2714\ufe0f\u2714\ufe0f\u2714\ufe0f<\/td><td>\u2714\ufe0f<\/td><\/tr><tr><td><strong>zsh<\/strong><\/td><td>\u274c<\/td><td>\u26a1<\/td><td>\u2b50\u2b50\u2b50\u2b50\u2b50<\/td><td>\u2714\ufe0f\u2714\ufe0f<\/td><td>\u2b50\u2b50\u2b50\u2b50\u2b50<\/td><\/tr><tr><td><strong>dash<\/strong><\/td><td>\u2714\ufe0f<\/td><td>\u26a1\u26a1\u26a1\u26a1\u26a1<\/td><td>\u274c<\/td><td>\u2714\ufe0f<\/td><td>\u274c<\/td><\/tr><tr><td><strong>fish<\/strong><\/td><td>\u274c<\/td><td>\u26a1<\/td><td>\u2b50\u2b50\u2b50\u2b50\u2b50<\/td><td>\u274c<\/td><td>\u2b50\u2b50\u2b50\u2b50<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Vale, ahora entramos ya en \u201canatom\u00eda interna de un shell\u201d. Te lo organizo por bloques para que todo encaje mentalmente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Pipelines: qu\u00e9 son realmente&nbsp;<code>cmd1 | cmd2 | cmd3<\/code><\/h2>\n\n\n\n<p>Un <em>pipeline<\/em> no es magia, es solo <strong>procesos conectados por pipes del kernel<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.1. Qu\u00e9 hace el shell al ver&nbsp;<code>A | B | C<\/code><\/h3>\n\n\n\n<p>Cuando escribes:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A | B | C\n<\/code><\/pre>\n\n\n\n<p>El shell hace, conceptualmente:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Crea dos pipes<\/strong>:\n<ul class=\"wp-block-list\">\n<li>pipe1: conecta <code>A<\/code> \u2192 <code>B<\/code><\/li>\n\n\n\n<li>pipe2: conecta <code>B<\/code> \u2192 <code>C<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>forkea<\/strong> un proceso para cada comando:\n<ul class=\"wp-block-list\">\n<li>hijo1 para <code>A<\/code><\/li>\n\n\n\n<li>hijo2 para <code>B<\/code><\/li>\n\n\n\n<li>hijo3 para <code>C<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>En cada hijo:\n<ul class=\"wp-block-list\">\n<li>Redirige <code>stdin<\/code>\/<code>stdout<\/code> a los extremos correctos de los pipes<\/li>\n\n\n\n<li>Cierra los extremos que no usa<\/li>\n\n\n\n<li>Llama a <code>execve()<\/code> con el comando correspondiente<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>El shell padre:\n<ul class=\"wp-block-list\">\n<li>Cierra todos los extremos de los pipes<\/li>\n\n\n\n<li>Hace <code>wait()<\/code> a los hijos (o los registra como jobs)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">1.2. A nivel de descriptores de archivo<\/h3>\n\n\n\n<p>Un pipe es un par de FDs:<\/p>\n\n\n\n<p>c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int fds&#91;2];\npipe(fds);   \/\/ fds&#91;0] = lectura, fds&#91;1] = escritura\n<\/code><\/pre>\n\n\n\n<p>Para <code>A | B<\/code>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Proceso A:\n<ul class=\"wp-block-list\">\n<li><code>dup2(fds[1], STDOUT_FILENO);<\/code> \/\/ su stdout va al pipe<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Proceso B:\n<ul class=\"wp-block-list\">\n<li><code>dup2(fds[0], STDIN_FILENO);<\/code> \/\/ su stdin viene del pipe<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Luego cierran los FDs originales y ejecutan <code>execve()<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. File descriptors y redirecciones<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1. Qu\u00e9 es un file descriptor (FD)<\/h3>\n\n\n\n<p>Un <strong>file descriptor<\/strong> es simplemente un entero que representa un recurso abierto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>0<\/code> \u2192 stdin<\/li>\n\n\n\n<li><code>1<\/code> \u2192 stdout<\/li>\n\n\n\n<li><code>2<\/code> \u2192 stderr<\/li>\n<\/ul>\n\n\n\n<p>El kernel mantiene una tabla de FDs por proceso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.2. Redirecciones t\u00edpicas<\/h3>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cmd &gt; out.txt        # redirige stdout (1) a archivo\ncmd 2&gt; err.txt       # redirige stderr (2)\ncmd &gt; out.txt 2&gt;&amp;1   # stderr \u2192 stdout \u2192 archivo\ncmd &lt; in.txt         # stdin desde archivo\n<\/code><\/pre>\n\n\n\n<p>Internamente, el shell hace cosas como:<\/p>\n\n\n\n<p>c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int fd = open(\"out.txt\", O_WRONLY|O_CREAT|O_TRUNC, 0644);\ndup2(fd, STDOUT_FILENO);\nclose(fd);\nexecve(...);\n<\/code><\/pre>\n\n\n\n<p><code>dup2(oldfd, newfd)<\/code> hace que <code>newfd<\/code> apunte al mismo recurso que <code>oldfd<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.3. Combinando pipes y redirecciones<\/h3>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A 2&gt;err.log | B &gt;&gt;out.log\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>A<\/code>:\n<ul class=\"wp-block-list\">\n<li><code>stderr<\/code> (2) \u2192 <code>err.log<\/code><\/li>\n\n\n\n<li><code>stdout<\/code> (1) \u2192 pipe<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><code>B<\/code>:\n<ul class=\"wp-block-list\">\n<li><code>stdin<\/code> (0) \u2190 pipe<\/li>\n\n\n\n<li><code>stdout<\/code> (1) \u2192 <code>out.log<\/code> en modo append<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">3. Mini-shell en C con fork\/exec\/wait (versi\u00f3n conceptual)<\/h2>\n\n\n\n<p>Te hago una versi\u00f3n simplificada, sin pipes ni redirecciones, solo para ver el esqueleto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.1. Bucle principal de un shell<\/h3>\n\n\n\n<p>Pseudoc\u00f3digo:<\/p>\n\n\n\n<p>c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while (1) {\n    mostrar_prompt();\n    leer_linea(buf);\n    parsear_linea(buf, argv);   \/\/ separar en tokens\n    pid = fork();\n    if (pid == 0) {\n        \/\/ Hijo\n        execvp(argv&#91;0], argv);\n        perror(\"execvp\");\n        exit(1);\n    } else {\n        \/\/ Padre\n        waitpid(pid, &amp;status, 0);\n    }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.2. A\u00f1adiendo redirecciones y pipes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Antes de <code>execvp()<\/code> en el hijo:\n<ul class=\"wp-block-list\">\n<li>Detectas <code>><\/code> <code>&lt;<\/code> <code>2><\/code> <code>|<\/code> en los tokens<\/li>\n\n\n\n<li>Configuras <code>open()<\/code>, <code>dup2()<\/code>, <code>pipe()<\/code><\/li>\n\n\n\n<li>Ajustas <code>argv<\/code> para que solo contenga el comando y sus argumentos<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Para pipelines:\n<ul class=\"wp-block-list\">\n<li>Creas varios hijos<\/li>\n\n\n\n<li>Conectas sus FDs con <code>pipe()<\/code> y <code>dup2()<\/code><\/li>\n\n\n\n<li>El padre hace <code>wait()<\/code> a todos<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>La l\u00f3gica real de Bash\/Zsh es mucho m\u00e1s compleja, pero la base es esta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Diferencias profundas entre&nbsp;<code>[[ ]]<\/code>,&nbsp;<code>[ ]<\/code>&nbsp;y&nbsp;<code>test<\/code><\/h2>\n\n\n\n<p>Estos tres se usan para condiciones, pero <strong>no son equivalentes<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.1.&nbsp;<code>test<\/code>&nbsp;y&nbsp;<code>[ ]<\/code>&nbsp;(POSIX)<\/h3>\n\n\n\n<p><code>test<\/code> es un comando (builtin o externo):<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>test \"$x\" = \"hola\"\n<\/code><\/pre>\n\n\n\n<p><code>[ ]<\/code> es simplemente una <strong>forma alternativa<\/strong> de escribir <code>test<\/code>:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91; \"$x\" = \"hola\" ]\n<\/code><\/pre>\n\n\n\n<p>Detalles:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>[<\/code> es el comando<\/li>\n\n\n\n<li><code>]<\/code> es solo el \u00faltimo argumento<\/li>\n\n\n\n<li>Es POSIX, existe en sh, bash, zsh, dash\u2026<\/li>\n<\/ul>\n\n\n\n<p>Problemas t\u00edpicos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Expansiones vac\u00edas pueden romper la sintaxis:bash<code>[ $x = hola ] # si x est\u00e1 vac\u00edo \u2192 [ = hola ] \u2192 error<\/code><\/li>\n<\/ul>\n\n\n\n<p>Por eso siempre se recomienda:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91; \"$x\" = \"hola\" ]\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4.2.&nbsp;<code>[[ ]]<\/code>&nbsp;(extensi\u00f3n de Bash\/Zsh)<\/h3>\n\n\n\n<p><code>[[ ]]<\/code> <strong>no es un comando<\/strong>, es una <strong>construcci\u00f3n del lenguaje<\/strong> (keyword-like).<\/p>\n\n\n\n<p>Ventajas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No hace expansi\u00f3n de pathname (globbing)<\/li>\n\n\n\n<li>Maneja mejor variables vac\u00edas<\/li>\n\n\n\n<li>Permite operadores extra:\n<ul class=\"wp-block-list\">\n<li><code>[[ $x == patr\u00f3n ]]<\/code><\/li>\n\n\n\n<li><code>[[ $x =~ regex ]]<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>No requiere comillas en muchos casos:<\/li>\n<\/ul>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;&#91; $x = hola ]]\n&#91;&#91; $x == *.txt ]]\n&#91;&#91; $x =~ ^&#91;0-9]+$ ]]\n<\/code><\/pre>\n\n\n\n<p>Esto en <code>[ ]<\/code> ser\u00eda peligroso o imposible sin escapes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.3. Resumen pr\u00e1ctico<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Para scripts <strong>POSIX portables<\/strong>: usa <code>[ ]<\/code> o <code>test<\/code>.<\/li>\n\n\n\n<li>Para scripts <strong>Bash\/Zsh modernos<\/strong>: usa <code>[[ ]]<\/code> siempre que puedas.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">5. Job control y process groups<\/h2>\n\n\n\n<p>Aqu\u00ed entramos en c\u00f3mo el shell controla procesos en foreground\/background.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.1. Process groups<\/h3>\n\n\n\n<p>Un <strong>process group<\/strong> es un conjunto de procesos que el kernel trata como una unidad para se\u00f1ales de terminal.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A | B | C\n<\/code><\/pre>\n\n\n\n<p>Los tres procesos suelen pertenecer al <strong>mismo process group<\/strong>.<\/p>\n\n\n\n<p>\u00bfPor qu\u00e9?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si pulsas <code>Ctrl+C<\/code> (SIGINT), la se\u00f1al se env\u00eda al <strong>grupo<\/strong>, no solo a uno.<\/li>\n\n\n\n<li>El shell puede parar\/reanudar el grupo entero.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5.2. Foreground vs background<\/h3>\n\n\n\n<p>Cuando haces:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sleep 100 &amp;\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El shell crea un job en <strong>background<\/strong><\/li>\n\n\n\n<li>No bloquea el prompt<\/li>\n\n\n\n<li>El proceso (o grupo) sigue ejecut\u00e1ndose<\/li>\n<\/ul>\n\n\n\n<p>Cuando haces:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sleep 100\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El job est\u00e1 en <strong>foreground<\/strong><\/li>\n\n\n\n<li>El shell hace <code>wait()<\/code> hasta que termine<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5.3. Se\u00f1ales y job control<\/h3>\n\n\n\n<p>Se\u00f1ales relevantes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>SIGINT<\/code> \u2192 Ctrl+C<\/li>\n\n\n\n<li><code>SIGTSTP<\/code> \u2192 Ctrl+Z (suspender)<\/li>\n\n\n\n<li><code>SIGCONT<\/code> \u2192 reanudar<\/li>\n\n\n\n<li><code>SIGCHLD<\/code> \u2192 el hijo ha terminado o cambiado de estado<\/li>\n<\/ul>\n\n\n\n<p>El shell:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Recibe <code>SIGCHLD<\/code> cuando un hijo termina<\/li>\n\n\n\n<li>Actualiza la tabla de jobs<\/li>\n\n\n\n<li>Muestra mensajes tipo <code>[1]+ Done<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5.4. Comandos de job control en el shell<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>jobs<\/code> \u2192 lista jobs<\/li>\n\n\n\n<li><code>fg %1<\/code> \u2192 trae job 1 al foreground<\/li>\n\n\n\n<li><code>bg %1<\/code> \u2192 reanuda job 1 en background<\/li>\n\n\n\n<li><code>kill %1<\/code> \u2192 env\u00eda se\u00f1al al job 1<\/li>\n<\/ul>\n\n\n\n<p>Internamente, el shell usa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>setpgid()<\/code> \/ <code>getpgid()<\/code> para gestionar grupos<\/li>\n\n\n\n<li><code>tcsetpgrp()<\/code> para asignar el terminal al grupo en foreground<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">6. C\u00f3mo encaja todo junto<\/h2>\n\n\n\n<p>Cuando ejecutas:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>A | B | C &gt;out.txt 2&gt;err.txt &amp;\n<\/code><\/pre>\n\n\n\n<p>El shell hace algo as\u00ed:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Crea pipes para conectar A\u2192B\u2192C.<\/li>\n\n\n\n<li>Crea un <strong>process group<\/strong> para A, B y C.<\/li>\n\n\n\n<li>Para cada comando:\n<ul class=\"wp-block-list\">\n<li><code>fork()<\/code><\/li>\n\n\n\n<li>En el hijo:\n<ul class=\"wp-block-list\">\n<li><code>setpgid()<\/code> para unirlo al grupo<\/li>\n\n\n\n<li><code>dup2()<\/code> para redirecciones y pipes<\/li>\n\n\n\n<li><code>execve()<\/code> del binario<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Marca el job como <strong>background<\/strong> (no hace <code>wait()<\/code> bloqueante).<\/li>\n\n\n\n<li>Sigue aceptando comandos.<\/li>\n\n\n\n<li>Cuando los procesos terminan:\n<ul class=\"wp-block-list\">\n<li>El kernel env\u00eda <code>SIGCHLD<\/code> al shell<\/li>\n\n\n\n<li>El shell actualiza el estado del job<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Puedo darte una lista muy amplia y bien organizada de los comandos Bash m\u00e1s importantes, con explicaciones t\u00e9cnicas claras. Pero hay un detalle importante: no existe una \u201clista completa\u201d absoluta, porque Bash puede ejecutar: Aun as\u00ed, puedo darte la lista m\u00e1s exhaustiva y \u00fatil, cubriendo: Voy a estructurarlo para que sea t\u00e9cnico, claro y pr\u00e1ctico&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[61,60],"tags":[413,171,418,169,411,416,415,412,414,417],"class_list":["post-538","post","type-post","status-publish","format-standard","hentry","category-https-cienciaytecnology-com-wordpress-categoria-linux","category-programacion","tag-amplia","tag-bash","tag-claras","tag-comandos","tag-darte","tag-explicaciones","tag-importantes","tag-lista","tag-organizada","tag-tcnicas"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Comandos Bash - Ciencia y Tecnologia<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comandos Bash - Ciencia y Tecnologia\" \/>\n<meta property=\"og:description\" content=\"Puedo darte una lista muy amplia y bien organizada de los comandos Bash m\u00e1s importantes, con explicaciones t\u00e9cnicas claras. Pero hay un detalle importante: no existe una \u201clista completa\u201d absoluta, porque Bash puede ejecutar: Aun as\u00ed, puedo darte la lista m\u00e1s exhaustiva y \u00fatil, cubriendo: Voy a estructurarlo para que sea t\u00e9cnico, claro y pr\u00e1ctico....\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/\" \/>\n<meta property=\"og:site_name\" content=\"Ciencia y Tecnologia\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-17T09:01:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-17T09:56:42+00:00\" \/>\n<meta name=\"author\" content=\"david\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"david\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/comandos-bash\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/comandos-bash\\\/\"},\"author\":{\"name\":\"david\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"headline\":\"Comandos Bash\",\"datePublished\":\"2026-01-17T09:01:45+00:00\",\"dateModified\":\"2026-01-17T09:56:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/comandos-bash\\\/\"},\"wordCount\":4995,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"keywords\":[\"amplia\",\"bash\",\"claras\",\"comandos\",\"darte\",\"explicaciones\",\"importantes\",\"lista\",\"organizada\",\"t\u00e9cnicas\"],\"articleSection\":[\"Linux\",\"Programacion\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/comandos-bash\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/comandos-bash\\\/\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/comandos-bash\\\/\",\"name\":\"Comandos Bash - Ciencia y Tecnologia\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#website\"},\"datePublished\":\"2026-01-17T09:01:45+00:00\",\"dateModified\":\"2026-01-17T09:56:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/comandos-bash\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/comandos-bash\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/comandos-bash\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Comandos Bash\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/\",\"name\":\"Ciencia y Tecnologia\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\",\"name\":\"david\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"contentUrl\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"width\":1024,\"height\":1024,\"caption\":\"david\"},\"logo\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\"},\"sameAs\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\"],\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/author\\\/david\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Comandos Bash - Ciencia y Tecnologia","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"es_ES","og_type":"article","og_title":"Comandos Bash - Ciencia y Tecnologia","og_description":"Puedo darte una lista muy amplia y bien organizada de los comandos Bash m\u00e1s importantes, con explicaciones t\u00e9cnicas claras. Pero hay un detalle importante: no existe una \u201clista completa\u201d absoluta, porque Bash puede ejecutar: Aun as\u00ed, puedo darte la lista m\u00e1s exhaustiva y \u00fatil, cubriendo: Voy a estructurarlo para que sea t\u00e9cnico, claro y pr\u00e1ctico....","og_url":"https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/","og_site_name":"Ciencia y Tecnologia","article_published_time":"2026-01-17T09:01:45+00:00","article_modified_time":"2026-01-17T09:56:42+00:00","author":"david","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"david","Tiempo de lectura":"19 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/#article","isPartOf":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/"},"author":{"name":"david","@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"headline":"Comandos Bash","datePublished":"2026-01-17T09:01:45+00:00","dateModified":"2026-01-17T09:56:42+00:00","mainEntityOfPage":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/"},"wordCount":4995,"commentCount":0,"publisher":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"keywords":["amplia","bash","claras","comandos","darte","explicaciones","importantes","lista","organizada","t\u00e9cnicas"],"articleSection":["Linux","Programacion"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/","url":"https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/","name":"Comandos Bash - Ciencia y Tecnologia","isPartOf":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#website"},"datePublished":"2026-01-17T09:01:45+00:00","dateModified":"2026-01-17T09:56:42+00:00","breadcrumb":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cienciaytecnology.com\/wordpress\/comandos-bash\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/cienciaytecnology.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Comandos Bash"}]},{"@type":"WebSite","@id":"https:\/\/cienciaytecnology.com\/wordpress\/#website","url":"https:\/\/cienciaytecnology.com\/wordpress\/","name":"Ciencia y Tecnologia","description":"","publisher":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cienciaytecnology.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b","name":"david","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","url":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","contentUrl":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","width":1024,"height":1024,"caption":"david"},"logo":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg"},"sameAs":["https:\/\/cienciaytecnology.com\/wordpress"],"url":"https:\/\/cienciaytecnology.com\/wordpress\/author\/david\/"}]}},"_links":{"self":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/comments?post=538"}],"version-history":[{"count":2,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/538\/revisions"}],"predecessor-version":[{"id":541,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/538\/revisions\/541"}],"wp:attachment":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/media?parent=538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/categories?post=538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/tags?post=538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}