Soy de los que usa gran parte del tiempo la terminal (consola, bash, shell, como quieran llamarle), por X o Y motivos tengo que estar constantemente cambiando de directorio, trabajando en ella 🙂
En la gran mayoría de los casos, cambio de directorio (Por ejemplo: cd /opt/) y además deseo saber qué se encuentra en ese directorio, para saber esto segundo hago uso de ls.
O sea, sería así:
kzkggaara@geass:~$ cd /opt/
kzkggaara@geass:/opt/$
kzkggaara@geass:/opt/$ ls
nessus
Muchas veces lo he dicho… soy bastante vago, me gusta hacer la menor cantidad de pasos en terminal, por eso es que luego de bastante experimentar, he logrado justo lo que quería.
Vean lo siguiente, que no es más que yo entrando a /opt/ con el simple comando cd /opt/:
Como pueden ver, en un solo paso (cd /opt/) entro al directorio y ADEMÁS me lista el contenido de ese directorio, y… por si fuera poco, me lo muestra con colores 😀
Aquí el ejemplo de yo accediendo a /etc/ con cd /etc/ :
Los colores son simples de entender:
Sin color = Archivos
Color azul = Carpetas
Color verde = Archivos con permisos de ejecución
Pero, pasemos a lo principal… ¿cómo demonios usando solamente cd puedo además automáticamente listar el directorio al que accedo?
Nuestro archivo .bashrc (ubicado en nuestro home o carpeta personal) nos ayudará a hacer esto, primero debemos declarar una función, a la que llamaremos cdls:
function cdls { cd «$1»; ls –color;}
Esta línea la ponemos en cualquier lado de nuestro .bashrc … aquí les dejo el comando para hacerlo:
echo "" >> $HOME/.bashrc && echo "function cdls { cd "$1"; ls --color;}" >> $HOME/.bashrc
NO necesariamente tienen que hacerlo con este comando, el objetivo es que el archivo .bashrc contenga esta línea, así que simplemente editen este archivo con su editor de texto preferido (mousepad, kate, gedit, nano, vi, etc) y la agregan.
Guardan el cambio, cierran la terminal que tengan abierta y abren una nueva.
En ella escribiremos lo siguiente y presionamos [Enter]:
cdls $HOME
Esto deberá bastar para acceder a nuestra carpeta personal en esa terminal, y además nos listará el contenido de ella (con colores y todo).
O sea, que cdls ya hace lo que queremos… ahora solo nos queda lograr lo mismo pero con cd
Para esto, agregamos en el archivo .bashrc la siguiente línea:
alias cd='cdls'
Esto hará que cuando escribamos cd … en realidad se ejecutará la acción que definimos para cdls
Les dejo el comando que pondrá automáticamente esta línea anterior:
echo "" >> $HOME/.bashrc && echo "alias cd='cdls'" >> $HOME/.bashrc
Pero igual como les dije antes, el objetivo es agregar esta otra línea el mismo archivo, pueden usar el editor de texto de su preferencia para ello.
Una vez hecho esto, cierren la terminal y abran una nueva… en ella escriban lo siguiente y presionen [Enter]:
cd /etc/
Y bingo, entrarán a /etc/ y además se les listará el contenido de esta carpeta, y con colores 😉 (justo como en una foto anterior)
¿A que es útil? 😀
Para los curiosos que se preguntan ¿qué significa esa función? … les dejo la simple explicación:
function cdls = Aquí definimos que estamos creando una nueva función, y se llamará cdls
cd «$1» = Y esta función lo que hará (hará cada vez que la llamemos, usemos o ejecutemos) será hacer un cd (entrar) hacia el 1er parámetro, o sea… -» «cd /home/», el «$1» significa «lo que escribamos luego de cd», en este ejemplo el 1er parámetro es «/home/».
; = Esto significa que ahí termina esa orden, o acción a ejecutar… pero una función puede tener más acciones a hacer, y le definiremos una segunda ahora.
ls –color; = Significa que además de cualquier acción declarada antes, también hará un «ls» en donde estemos ubicados, y el «ls» lo hará con color (–color).
Ultima cosa… los más listos, se darán cuenta que esta lógica (tomar una función y configurarla para que ejecute varias acciones) tiene mucho pero mucho potencial, por ejemplo… si quiero entrar a una carpeta, y además borrar otra, o sea, quiero entrar a /home/ y además borrar /opt/temp/ la función para ello sería:
function asdasd { cd "$1"; rm -Rv "$2"; }
Y escribiendo en una terminal asdasd /home/ /opt/test/ lo haría, porque entrará al 1er parámetro (/home/) y borrará el segundo (/opt/temp/).
En fin, de veras esto tiene MUCHO potencial jeje, queda por parte de ustedes aprovecharlo lo más que puedan.
Si tienen alguna duda o pregunta, queja o sugerencia con mucho gusto les echo una mano, no soy ni de lejos un experto pero al menos me gusta ayudar 😀
Saludos
54 comentarios, deja el tuyo
Y todo esto por no usar Zsh.
En realidad no lo conocía 😉
Gracias por el dato, le echaré un ojo.
No obstante, el conocimiento no ocupa lugar… mientras más tips y conocimientos uno logre adquirir, será mejor ¿no lo crees? 🙂
Zsh es de maricas, los hombres usan sh!!! >:D
En realida
HAHAHA no no no… no lo creo, y tampoco lo digas así, porque se podrían sentir algunos ofendidos.
Cada cual usa lo que más le conviene, lo que más le gusta 😀
😉
Una app que uso mucho para navegar por mi sistema es Autojump:
https://github.com/joelthelion/autojump/blob/master/README.md
Los hombres son prácticos, las mujeres y los maricas son a quienes les gusta complicarse la vida. No hace falta dar más aclaraciones.
Por favor, intentar no hacer comentarios sobre preferencias sexuales si? … han habido situaciones incómodas por este tipo de cosas.
Espero se entienda.
Esa aclaración debería ser para @msx. las ideas se construyen con aseveraciones verídicas, objetivas y racionales, no con insultos o groserías.
En el comentario mío de más arriba le dije que no dijera esas cosas (valga la redundancia).
Y ahora lo vuelvo a decir sí, pero no dirigido a tí solamente en específico, es válido para todos y todas.
No te lo tomes a mal, la intención no era hacer sentir a nadie incómodo o mal, solo intento evitar malentendido 🙂
Hahaha, recién veo este comentario!
«Esa aclaración debería ser para @msx. las ideas se construyen con aseveraciones verídicas, objetivas y racionales, no con insultos o groserías.»
Dejá de desayunarte con limones man que ya estás igualito a Franklin en el billete de u$s100: http://www.watchingamerica.com/frankfurterallgemeine000009.shtml
😀
¿zsh es de maricas?, bueno creo que me gusta ser marica entonces por que desde que aprendi a usarlo no lo he dejado ni pienso hacerlo. o_____o
¿Los hombres usan sh?, es raro ese comentario viniendo de alguien que tiene el bashrc lleno de cosas, asi que supondre que eres mujer. xP
A esto es a lo que no quería llegar. Por favor, dejemos acá la pelea si? 🙂
Cada cual usa lo que quiera… sh, zsh, o lo que quiera, y además… cada cual tiene las preferencias sexuales que desee tener, ya han habido peleas acá por cosas así 🙁
hahaha xD
Ultimamente evolucionó mucho zsh, ni bien tenga tiempo -ja, que iluso!- voy a leer lo más que pueda de su documentación para sacarle provecho y hago el cambiazo 🙂
Ahora hablando en serio: lo único que me jode un poquitín de zsh es que no es 100% compatible con Bash, entonces si usamos zsh en nuestro scripts sacándole todo su potencial, es muy pero muy posible que dicho script falle en bash, por otro lado, si aunque usemos zsh escribimos nuestros shell scripts en bash es un desperdicio estar usando zsh… o_O
Así y todo creo que zsh vale la pena. Hablando de shell, conocen Fish? El proyecto resurgió de sus cenizas, ahora se llama fishfish y lo estan desarrollando muy rápido.
Yo pienso que se debe escribir zsh ya que la terminal es muy sensible con las minusculas y mayusculas
Aunque también se vale cd && ls /ruta
Aunque es mas largo de escribir
Saludos 😀
Me equivoque se me fue el dedo
Puse que con esto se lista y se accede a un directorio
cd && ls /ruta
pero solo se lista
aunque para solo listar se usa
ls /ruta
el comando que es el equivalente es
cd /ruta && ls
Saludos
En efecto, usando && se logra lo mismo 😀
La única diferencia es que «cd /opt/ && ls» tiene 6 caracteres más que simplemente «cd /opt/», o sea, tendría que presionar 6 teclas más ^-^U … soy algo vago para cosas así de simple jeje.
Es por eso que uní el cd + ls … LOL!!
Lo que también uso es que filtro los resultados por extensiones.
Ejemplo
Tengo muchos archivos en ~/Descargas mas de 100 y solo quiero ver los .png para hacer esto hago
cd Descargas && ls *png
¿Que tendría que añadir o hacer para filtrar los resultados en un código mas simple?
Saludos
Simple 😉
Creas una función que sea por ejemplo, cdlsf:
function cdlsf { cd "$1"; ls *.$2; }
Para usarla sería:
cdlsf /opt/ png
Y esto te listará solo los archivos .png en /opt/
O sea, el 1er parámetro (en el ejemplo /opt/) sería el directorio al que quieres acceder, y el 2do parámetro (en el ejemplo png) sería la extensión que deseas filtrar cuando listas el directorio.
Otro ejemplo, si quieres entrar a /home/usuario/Pictures y ver solamente los archivos que sean .JPG, sería:
cdlsf /home/usuario/Pictures jpg
😀
Esto era lo que querías no?
PD: Pongo cdlsf por cd(entrar)ls(listar)f(filtrar) … pero la función obviamente la puedes llamar como quieras.
zsh no es POSIX, y para colmo tarda mas en iniciar, así que prefiero ser marica, pero mas eficiente
Primero, en zsh se puede activar compatibilidad con POSIX. Segundo, tarda en iniciar de acuerdo a cuantas funciones cargue al inicio, entonces puede ser tan ligero como uno quiera. Tercero, con zsh uno es más práctico y eficiente que con cualquier otro shell. Cuarto, úselo antes de criticar.
5to. Cuando activás la compatibilidad POSIX deja de tener sentido usar ZSH.
Lo estuve usando un rato, no vale la pena, sh se corto y Bash es perfecto, no hay nada que no puedas hacer en Bash con los alias y funciones adecuadas.
me gusta mucho el tema. de hecho, deberían crear algún artículo más extenso sobre los comandos que se pueden utilizar en general en la terminal, y en distros específicas, como Chakra.
Mira este post 😉
https://blog.desdelinux.net/mas-de-400-comandos-para-gnulinux-que-deberias-conocer/
Me ha parecido muy interesante ya que aparte de enseñar este truquillo, has explicado como funciona cada comando.
Os llevo siguiendo desde que empece en el mundillo linux (no hace mucho…) y me he animado a comentar solo para felicitarte por el articulo 😉
Gracias a tí por pasarte y dejarnos el comentario 😀
Siempre que me aventuro a explicar algo, me gusta dejarlo tan claro como sea posible… pues, yo sé muy bien lo que es leer tutoriales en internet y no entender nada de nada jajaja.
Bienvenido doblemente… bienvenido al mundillo del Tux jaja, y además bienvenido al blog 🙂
Si tienes alguna duda ya sabes, nos dejas saber jeje.
Saludo y gracias por el comentario ^⁻^
Acabo de leer tu entrada desde otro sitio web, y no he podido resistirme:
No seria mas fácilmente, simplemente crear dentro del .bashrc un alias?
alias cd=’ls’
En realidad lo que intento lograr es entrar a un directorio X (/opt/ … /home/usuario/ … el que sea) y además cuando entre en él, automáticamente me liste el contenido de ese directorio.
Que sea todo con 1 solo paso o comando.
Haciendo un alias como indicas, entonces me listaría el directorio sí, pero no entraría en él.
Por lo que entiendo, el objetivo de realizar todo esto, es que si quieres por ejemplo entrar a «/etc» por medio del comando «cd», al entrar, automáticamente te muestre el contenido de dicho directorio, ¿cierto?
Si es así, puedes simplificar la función en un «alias», donde dentro del .bashrc colocas:
alias cd=»ls»
Con esto, cuando en una terminal utilices:
cd /etc
Entraras al directorio «/etc» y ademas automáticamente te listara todos los archivos y directorios que estén ahí dentro.
Si entendí mal el objetivo, una disculpa 😛
En efecto, quiero entrar a un directorio y una vez dentro que liste lo que contenga.
Intenté lo que dices, declarando que cd = ls mediante un alias, pero no me resultó.
Lo configuro así mismo, y luego hago:
cd /etc/
Pero me lista /etc/ … mas no entra a ese directorio.
Dejo un screenshot para que veas: http://img204.imageshack.us/img204/5272/cdlserror.png
Mi error 😀
Era obvio que no iba a funcionar de esa manera, y aun cuando intente con un:
alias cdls=’cd $1;ls’
Por alguna extraña razón no funciona, simplemente lista el directorio pero no entra en el D:
Bash error? xD
Una disculpa por los comentarios sin sentido! 😀 Y me llevo la función para mi bashrc 😛
Es que un alias no es lo mismo que una función, un alias si quieres que sea igual a varios comandos, tienes que obligatoriamente usar && … no es como en las funciones, que usando ; y escribiendo más instrucciones te resultará.
HAHA nah para nada amigo, nada que disculpar 😀
Saludos
PD: … joder… que nostalgia me entra cuando veo el logo de Arch …. T_T …
Se que no es lo mismo pero me imagine que funcionaria (Error :P)
Solo que a mi si me funciona el utilizar «;» en lugar de «&&» dentro de un alias D: (Tengo dos alias así, lo que no entiendo es por que no funciona con el alias que quise crear para este caso)
Gracias y por cierto, creo que me quedare en el blog bajo el titulo de «lector frecuente» 😀 Me gusto mucho el contenido del blog 😛
oooh si lo se, yo me separo a veces de mi querido Arch pero, no se porque, siempre me es imposible no regresar a el xD
Saludos!
Bueno… Tux es misterioso, hace las cosas y muchas veces no le entendemos, pero tiene un plan o propósito para todos… JAJA 😀
Un placer leer lo que dices, otro usuario más de Arch que se suma al blog jajajaja… todo un placer 😀
Yo lo tuve que dejar de usar por problemas rarísimos que me daba el kernel… pero aún ocupa un lugar en mi corazón 🙁
jajajaja
No he conocido usuario de Arch que no le tome un gran cariño a la distribución, tiene un «no se que, que que se yo» :P, igual y si los problemas que te daba fueron hace tiempo podrías pensar en volver a Arch 😀
Por cierto, yo sabia que en alguno otro lugar ya había leído tu nombre (bueno, nick, seudónimo, apodo, whatever), eres parte de los redactores de arteescritorio, no? 🙂
Solía leerles 🙂
En realidad para listar el contenido de un directorio no es necesario entrar en el, de modo que no creo que el ejemplo que has escogido sea el más feliz, jeje. Dicho esto, las funciones sí se pueden usar para muchas cosas útiles.
Por ejemplo, yo uso esta función para crear un directorio y entrar en el inmediatamente (validando que se utilice solo un parámetro):
function mkcd () {
FNERR="Parametros incorrectos.\nUso: mkcd "
if [ $# -eq 1 ] ; then
mkdir -p "$1" && cd "$1"
else
echo -e $FNERR
fi
}
Hmmm… el blog se comió parte del comando, intentaré poner la línea incompleta con etiquetas HTML:
FNERR="Parametros incorrectos.\nUso: mkcd <nombre del directorio a crear>"
Lo que quería lograr era ahorrarme un paso.
O sea, supongamos que quiero entrar a un directorio (/etc/squid/) para entonces editar un archivo en ese directorio, y no recuerdo el nombre del archivo.
Los pasos normalmente serían:
cd /etc/squid/
ls
nano archivo.conf
Pero, con este tip que propongo, me convierte los 2 primeros pasos en 1 solo, de modo que simplemente haciendo:
cd /etc/squid/
Automáticamente me listará también el contenido del directorio.
Se trata simplemente de ahorrarnos un paso 😀
¿Me entiendes?
… es que me cuesta explicarme jaja.
No, la explicación no tenía ningún problema, me refería a que quizás el ejemplo que escogiste para ilustrar el tip no fue el ideal, dado que uno puede hacer un simple «ls directorio».
En realidad en cuanto vi la función entendí el propósito. Yo también uso varias funciones en mi .bash_aliases, por ejemplo, esta es una que uso bastante para gestionar el historial:
h () {
if [ $# -eq 0 ] ; then
history | tail -n 25 | less
elif [ $# -eq 1 ] ; then
history | egrep -i "$1" | less
else
echo -e "Parametros incorrectos."
fi
}
(Con esta función, si solo pongo h me salen los últimos 25 comandos, pero si por ejemplo pongo h mount me salen los últimos comandos relacionados con montajes).
Me llevo tu función jejeje… merece estudiarla 😀
genial tu funcion ! gracias
+1
KZKG^Gaara
Muy buena respuesta me sirvió muy bien, ya no pude responder aya arriba
Ahora usare cdlsf para aumentar mi productividad,muy buen nombre para un comando 😀
Saludos
Como le haces para ponerle la hora a la terminal, ya lo había hecho yo antes era un bashrc que descargue pero no recuerdo como se llamaba.
Buena entrada, no conocia el truco, lo pondre en practica a ver que tal. xP
Saludos.
Seria bueno que mi navegador fuera agregado. xD
Saludos, de nuevo. xD
Qué navegador usas?
Pues en otro comentario ví que usabas Firefox 🙂
Si, uso Firefox pero cada vez es menos y esta dejando de ser mi navegador principal, estoy usando dwb y seria bueno que pudiera ser agregado. xP
Saludos.
Y hacer este alias no dara problemas en scripts al intentar hacer cd simplemente y dar adeams la salida de ls? yo particularmente prefiero hacer alias con nombres que no usen otros ejecutables, porque no es la primera vez que me da problemas…
¿Cómo logras las lineas discontinuas y la hora después de cada comando?
Mira acá -» https://blog.desdelinux.net/con-el-terminal-mejorando-la-apariencia-de-la-consola-actualizado/
Mi aporte:
alias ldir=’ls | grep -v \\.’ ## lista solamente los directorios (ojo, no lo renombre a ld ya que hay comando de GNU/Linux con ese nombre)
–
alias ll=’ls -lah –color | awk ‘\»{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'\'''
Lo interesante de este alias es el awk que parsea la salida del ls, resultado? Muestra los permisos de archivos en formato octal al lado de rwx, para mi infinitamente más práctico y rápido que las letras.
–
alias lg='ls -lah –color | awk '\''{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'\''|grep -i'
Variante del alias de arriba. Le agregué un grep al final para que de esta forma cuando haga por ejemplo:
$ lg zip
Me muestre solamente los archivos que contenga zip en cualquiera de sus formas (noten el -i del final) además de los permisos octales, etc.
–
alias grep='grep –color=auto' ## colorea el matcheo de grep
–
Tengo muchos más para compartir pero se me hace apretado este lugarcito xD
@KZKG, Staff: les parece abrir un post en el blog o en el foro (al que linkeemos cada vez que se publica algún tip relacionado a la consola) para ir juntando todas estas perlitas?
Saludos!
Con lo de link te refieres a este? -» https://blog.desdelinux.net/tag/bash
No dije nada, no hace falta nada de lo demás, está todo perfectamente taggeado!
Que chilero, muy buena función esa!