{"id":1022,"date":"2024-09-13T19:52:09","date_gmt":"2024-09-13T22:52:09","guid":{"rendered":"https:\/\/www.marianoacciardi.com.ar\/?page_id=1022"},"modified":"2024-09-15T19:42:44","modified_gmt":"2024-09-15T22:42:44","slug":"customizando-mi-entorno-bash","status":"publish","type":"page","link":"https:\/\/www.marianoacciardi.com.ar\/?page_id=1022","title":{"rendered":"Configurando el entorno de comandos a nuestro gusto (bash profile)"},"content":{"rendered":"\n<h3><b><span>El uso de alias<\/span><\/b><\/h3><p>Los alias son una herramienta \u00fatil si queremos modificar los par\u00e1metros que le enviamos a un comando sin escribirlos por ejemplo, o si quisi\u00e9semos ejecutar una versi\u00f3n especial customizada cono otro nombre como apareci\u00f3 a propuesta de uno de ustedes en la clase. <br \/><\/p><p>Su utilizaci\u00f3n es muy sencilla, vimos dos ejemplos en clase: <br \/><\/p><pre>alias ls='ls --color=auto'<\/pre><p>Este es un alias que debian genera por defecto en la instalaci\u00f3n para el usuario \u00abnormal\u00bb, es decir el que no tiene privilegios. Esta es la raz\u00f3n por qu\u00e9 cuando ejecutamos ls desde root o desde un usuario sin privilegios funciona de otra forma (Mostrando los diferentes tipos de archivos en diferentes colores por ejemplo).<\/p><p>Otra opci\u00f3n que dijimos es conveniente configurar por seguridad es:<\/p><pre>alias rm='rm -i' <br \/><\/pre><p>Esto nos permit\u00eda ser precavidos respecto de un comando muy peligroso, debido a que el borrado de un archivo en unix desde la consola no puede deshacerse tan f\u00e1cilmente como en Windows. Algunas distribuciones tambi\u00e9n configuran este alias por defecto para requerir la confirmaci\u00f3n de borrado de un archivo antes de proceder. <br \/><\/p><p>Pero vimos que estos alias solo viven en la sesi\u00f3n en que los configuramos. Lo mismo ocurre con otras optimizaciones que quisi\u00e9semos hacer en nuestro entorno. <br \/><\/p><h3>HISTSIZE y HISTFILESIZE <br \/><\/h3><p>A veces suele ser conveniente tener un stock bastante grande de comandos anteriores, no solo para poder volver a ejetutarlos con la tecla [up] o flechita hacia arriba, ya que a medida que avancemos en el conocimiento de los comandos estaremos utilizando cada vez m\u00e1s comandos y con m\u00e1s par\u00e1metros. De esa manera podemos accederlos nuevamente sin tener que tipearlos nuevamente. <br \/><\/p><p>Hay varios modos de volver a ejecutar comandos anteriores en bash (importante que no todos los shells presentan esta posibilidad) <br \/><\/p><p>1) Utilizando la flecha hacia arriba del teclado. Con esta tecla vamos subiendo uno a uno en el orden inverso en que fueron ejecutados. <br \/><\/p><p>2) Utilizando el comando \u00abhistory\u00bb y usando el signo de exclamaci\u00f3n \u00ab! seguido del n\u00famero de orden del comando<\/p><p>Por eso es importante que nos sintamos c\u00f3modos con la cantidad de comandos que se guardan seg\u00fan nuestra operaci\u00f3n cotidiana. <br \/><\/p><p><b>NOTA SEGURIDAD:<\/b> Es importante tener en cuenta que en algunos casos algunos comandos permiten incluir contrase\u00f1as como par\u00e1metros en su ejecuci\u00f3n. La mayor\u00eda de los comandos como por ej \u00abmariadb\u00bb permiten tambi\u00e9n hacerlo interactivamente. Toda vez que un comando permita ingresar una contrase\u00f1a de manera interactiva es conveniente utilizarlo as\u00ed para no guardar registros de history con contrase\u00f1as tipeadas en texto claro que podr\u00edan en otro momento ser accedidas mediante el comando history. <br \/><\/p><p><br \/><\/p><p><\/p><p><code>HISTSIZE<\/code> y <code>HISTFILESIZE<\/code> son dos variables de entorno relacionadas con el historial de comandos en <code>bash<\/code>, pero tienen prop\u00f3sitos ligeramente diferentes:<\/p><ol><li><p><strong><code>HISTSIZE<\/code><\/strong>:<\/p><ul><li><code>HISTSIZE<\/code> controla el n\u00famero m\u00e1ximo de comandos que se mantienen en la memoria del historial durante una sesi\u00f3n de <code>bash<\/code>. Es decir, determina cu\u00e1ntos comandos pasados se pueden recordar y recuperar mediante la navegaci\u00f3n del historial mientras la sesi\u00f3n est\u00e1 en curso.<\/li><li>Si <code>HISTSIZE<\/code> se establece en 100, por ejemplo, solo se recordar\u00e1n los \u00faltimos 100 comandos ejecutados en la sesi\u00f3n actual de <code>bash<\/code>.<\/li><\/ul><\/li><li><p><strong><code>HISTFILESIZE<\/code><\/strong>:<\/p><ul><li><code>HISTFILESIZE<\/code> controla el tama\u00f1o m\u00e1ximo del archivo de historial (<code>~\/.bash_history<\/code> por defecto) en el que se guardan los comandos ejecutados en sesiones anteriores de <code>bash<\/code>. Es decir, determina cu\u00e1ntos comandos pasados se guardan en el archivo de historial despu\u00e9s de que finaliza la sesi\u00f3n.<\/li><li>Si <code>HISTFILESIZE<\/code> se establece en 1000, por ejemplo, solo se guardar\u00e1n los \u00faltimos 1000 comandos ejecutados en todas las sesiones de <code>bash<\/code> y los comandos m\u00e1s antiguos se descartar\u00e1n para mantener el tama\u00f1o del historial dentro de ese l\u00edmite.<\/li><\/ul><\/li><\/ol><p>En resumen, <code>HISTSIZE<\/code> controla el tama\u00f1o del historial en la memoria durante la sesi\u00f3n actual, mientras que <code>HISTFILESIZE<\/code> controla el tama\u00f1o del archivo de historial en disco despu\u00e9s de que la sesi\u00f3n ha finalizado.<\/p>Si quisi\u00e9semos modificar definitivamente la cantidad de comandos que se guardan en la sesi\u00f3n o en el archivo podemos hacerlo de manera muy sencilla ejecutando por ejemplo<p><\/p><pre>export HISTSIZE=5000<\/pre><pre>export HISTFILESIZE=5000<br \/><\/pre><p>Cuando veamos shell scripting y variables explicaremos por qu\u00e9 es necesario para setear una variable de entorno que quiero tener disponible en todos mis comandos sucesivos con el comando \u00abexport\u00bb. En general las variables de entorno se suelen escribir por convenci\u00f3n completamente en may\u00fasculas. Esto ayuda a tener una coherencia entre todos los operadores\/administradores del mundo respecto de qu\u00e9 son.<\/p><p><br \/><\/p><h3><b>Los archivos \/etc\/profile \/etc\/bash_rc .profile .bashrc .bash_login<\/b><\/h3><p><span><\/span><\/p><p>Hablamos en la clase que para \nhacer todos estos cambios persistentes sin tener que volver a \nejecutarlos cada vez que iniciamos sesi\u00f3n ten\u00edamos que incluirlos en los archivos que se ejecutan autom\u00e1ticamente cada vez que ingresamos en una consola<br \/><\/p><h3><b><\/b><\/h3><span>Trabajamos en la clase que estos archivos no son m\u00e1s que una secuencia de comandos propios del shell que vamos a abrir que nos ayudan con la configuraci\u00f3n inicial de nuestro entorno a nuestro gusto cuando abrimos una consola. <br \/><\/span><p><\/p><p><span>Es importante tener en cuenta algunas particularidades seg\u00fan cu\u00e1ndo y c\u00f3mo se ejecutan cada uno de estos archivos seg\u00fan el tipo de shell al que ingresemos (\/dev\/tty&lt;n&gt; o \/dev\/pts\/&lt;n&gt;) y si hubo o no login en ese ingreso<\/span><\/p><p><span><br \/><\/span><\/p><p><span><\/span><\/p><ol><li><p><strong>Shell de Inicio de Sesi\u00f3n Interactivo (Login Shell)<\/strong>:<\/p><ul><li>Si <code>bash<\/code> se inicia como un shell de inicio de sesi\u00f3n (por ejemplo, cuando nos conectamos a trav\u00e9s de una consola de texto remota por ssh o TTY), se ejecutan los siguientes archivos en este orden:<ol><li><code>\/etc\/profile<\/code> (si existe y es legible)<\/li><li>El primer archivo legible del home del usuario entre <code>~\/.bash_profile<\/code>, <code>~\/.bash_login<\/code> y <code>~\/.profile<\/code> (se usa solo uno, en ese orden de prioridad. El caracter \u00ab~\u00bb remite a la home del usuario).<\/li><\/ol><\/li><\/ul><\/li><li><p><strong>Shell Interactivo No de Inicio de Sesi\u00f3n (Non-login Shell)<\/strong>:<\/p><ul><li>Si <code>bash<\/code> se inicia como un shell interactivo que no es de inicio de sesi\u00f3n (por ejemplo, cuando abrimos una nueva terminal desde el entorno gr\u00e1fico), se ejecuta:<ul><li><code>~\/.bashrc<\/code><\/li><\/ul><\/li><\/ul><\/li><li><p><strong>Shell No Interactivo (Non-interactive Shell)<\/strong>:<\/p><ul><li>Si <code>bash<\/code> se inicia como un shell no interactivo (por ejemplo, al ejecutar un script), se ejecuta:<ul><li>Ninguno de los archivos de configuraci\u00f3n mencionados arriba, a menos que expl\u00edcitamente se invoquen. Este punto es muy importante, debido a que cuando lanzamos un script, salvo que invoquemos explicitamente con un comando por ejemplo <br \/><\/li><\/ul><pre>source \/etc\/profile<\/pre><\/li><\/ul><h3><span style=\"white-space: normal\"><\/span><span style=\"white-space: normal\">EJEMPLO DE COMPORTAMIENTO<\/span><\/h3><\/li><\/ol><ul><li><p><strong>Al iniciar sesi\u00f3n desde una consola de texto (TTY)<\/strong>:<\/p><ol><li><code>bash<\/code> se considera un shell de inicio de sesi\u00f3n.<\/li><li>Primero intentar\u00e1 ejecutar <code>\/etc\/profile<\/code>.<\/li><li>Luego, buscar\u00e1 y ejecutar\u00e1 el primer archivo legible entre <code>~\/.bash_profile<\/code>, <code>~\/.bash_login<\/code> y <code>~\/.profile<\/code> (en ese orden).<\/li><\/ol><\/li><li><p><strong>Al abrir una terminal desde el entorno gr\u00e1fico<\/strong>:<\/p><ol><li><code>bash<\/code> se considera un shell no de inicio de sesi\u00f3n.<\/li><li>Ejecutar\u00e1 <code>~\/.bashrc<\/code>.<\/li><\/ol><\/li><\/ul><h3>Configuraci\u00f3n Consistente en Todos los Shells<\/h3><p>Para asegurar que ciertas configuraciones se apliquen tanto a shells de inicio de sesi\u00f3n como a shells no de inicio de sesi\u00f3n, puedes configurar tu <code>~\/.bash_profile<\/code> para que tambi\u00e9n ejecute <code>~\/.bashrc<\/code> si existe.<\/p><br \/><p><\/p><p><span><br \/><\/span><\/p><p><b><br \/><\/b><\/p><p><br \/><\/p><p><br \/><\/p><p><br \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El uso de alias Los alias son una herramienta \u00fatil si queremos modificar los par\u00e1metros que le enviamos a un comando sin escribirlos por ejemplo, o si quisi\u00e9semos ejecutar una versi\u00f3n especial customizada cono otro nombre como apareci\u00f3 a propuesta de uno de ustedes en la clase. Su utilizaci\u00f3n es\u2026<\/p>\n<p> <a class=\"continue-reading-link\" href=\"https:\/\/www.marianoacciardi.com.ar\/?page_id=1022\"><span>Continue reading<\/span><i class=\"crycon-right-dir\"><\/i><\/a> <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_eb_attr":"","footnotes":""},"class_list":["post-1022","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=\/wp\/v2\/pages\/1022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1022"}],"version-history":[{"count":0,"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=\/wp\/v2\/pages\/1022\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.marianoacciardi.com.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}