miércoles, 28 de noviembre de 2012

Agilizar uso de la terminal con comodines Unix

Hace poco vimos una entrada de como trabajar con archivos o carpetas con espacios,esto pienso que ayudo y ayuda a muchas personas a usar la terminal de los descendientes de Unix,de los sistemas tipo Unix con una shell, sea bash,sh,zsh,tcsh,etc

Usado en Darwin(iOS,OS X),Linux(Distribucines),FreeBSD,etc

Yo en lo personal me gusta mucho esto,algunas personas me dicen(aquí en la vida real) que estudio informática de "cavernicolas",que mejor estudie desarrollo de software con Java o un lenguaje mas actual para usarlo en sistemas actuales,en vez de estudiar Unix,perl,shell scripting,lisp,etc y la verdad me quedo así:

:(

Pero la verdad es que me gusta mucho los sistemas tipo Unix y mas que nada lo que es la shell(terminal) de nuestros sistemas ya que OS X es muy moderno,pero tiene la terminal prácticamente oculta.

Así que vamos a ver algo de lo mas básico de Unix que nos puede ayudar bastante,y para que vean la velocidad con la cual podemos hacer algo con un sistema "cavernicola" |:(


Nota:No dudo que en sistemas actuales hay programas que hagan esto,y incluso con GUI,pero esto mas que nada esta hecho para usar mas rapido la terminal de nuestro sistema tipo Unix.


Comodines Unix

En Unix existen los comodines también llamados (Wildcards) estos Wildcards son símbolos especiales que interpreta la shell que estemos usando.

Existen distintos tipos de wilcards,la wilcard o símbolo mas conocido (puede que lo conozcas)  es

~
Este wilcard indica nuestro home o el home de un usuario,por ejemplo si hacemos

cd ~

estamos diciendole a la shell que queremos cambiarnos a nuestro home.

Por ejemplo root

Si hace

cd ~

Va a su Home,pero si hace

cd ~usuario

va al home del usuario indicado

Esta imagen lo ilustra

Si entraron a root,salgan de el

ctrl+d
El *

Esta wildcard es estupenda,ya que se usa de varias maneras, aquí los ejemplos:

Normalmente se usa con ls,pero se puede usar con mas comandos ,como chmod,mv,con un pipe para que sea mas practico,etc pero veremos el ejemplo con ls.

ls *palabra

Identifica cualquier nombre que termine con palabra(palabra es un ejemplo),en este caso lo lista,por ejemplo si queremos listar nuestras canciones .mp3 lo que tenemos que hacer es pasarle el final del titulo del archivo,que seria .mp3 o simplemente mp3

ls *mp3
Esto lo podemos usar no solo para listar sino para muchas cosas,por ejemplo

Mover todos los .mp3 de mi Home a la carpeta Musica,solo hacemos esto :

Para fácil

cd ~


mv *mp3 Musica

A lo Unixero

mv ~/*.mp3 Musica
Y así de fácil moveremos todos nuestros archivos de audio a otra :)

en cambio con un explorador tendríamos que copiar uno por uno con ctrl y luego cortar y pegar en la carpeta :S

Otro ejemplo es,que por ejemplo yo tengo un servidor en mi localhost corriendo con LAMP en Archlinux y con un CMS escrito en Perl y necesita que todos los .cgi tengan permisos 755.

Como hacerlo?

Como darle permisos 755 a todos mis cgi?

Puedo abrir uno por uno dando permisos,o incluso uno por uno haciendo chmod

Pero con una Wildcard solo hacemos esto, en mi caso hice esto:


chmod 755 /srv/http/blog/*cgi

Y listo,tenemos todos los cgi con permisos 755 :D

Igual para copiar,digamos que quiero todos mis cgi en mi home

Podemos copiarlos:
cp /srv/http/blog/*cgi ~
Podemos moverlos


cp /srv/http/blog/*cgi ~
O podemos borrarlos si nos estorban el el home

rm ~/*cgi
Esto lo ilustra



Eso solo es una parte del poder de las wildcards o comodines de Unix,ya que nuestro símbolo *

También se puede usar así

Nota:Ya no voy a hacer tantos ejemplos,solo implementen los de arriba (uso de comandos de administración de ficheros,rm
ls,dir,vdir,lpr,cp,mv,cmp,find,etc) con la información que sigue :)

Podemos listar el principio de un archivo en vez del final:

Supongamos que tenemos un archivo que se llama musica,pero tiene extensiones diferentes (mp3,wav,ogg,etc) aqui no podriamos usar 

ls *mp3

Ya que no lo incluiríamos en la orden

Entonces como se hacer al revez?

Solo se usa esta sintaxis

ls musica*
Y ahora lista todo lo que coincida,pero al principio :D

Pero aquí no acaba esto :D

supongamos que incluye en medio el parámetro que necesitamos,por ejemplo tenemos 10,000 archivos en una carpeta y solo necesitamos listar los que lleven perl como nombre,no importa donde lo lleve

Sea

ejemploperl.pl

perlsite.pl

aimperlprogramer.txt

perlwallpaperl.jpg

Lo único que hacemos es usar esta sintaxis :

ls *perl*
Y nos lista todo lo que lleve perl,como dije no solo listar,lo puedes mover,abrir,borrar,etc

Por ejemplo si quieren abrir todos sus .txt de un directorio con gedit(si gedit,no importa que sea un programa con interfaz gráfica)

Hacemos esto

gedit *txt

Nota:Si tienes 10,000 txt en un directorio,se te va a caer sistema

O para correr todos los mp3 de un directorio,por ejemplo con totem


totem *mp3

El ?

Otro wildcard es el simbolo ?,este tiene menos poder que *,pero tambien puede que te sea util

Lo que hace es buscar todo lo que tenga un caracter simple,por ejemplo en una carpeta tenemos dos muchos scripts y archivos, y nos acordamos que teniamos dos archivos que se llamaban(script) uno en perl y otro en python,que seria .py y .pl,para encontrarlos solo basta con hacer esto

ls script.p?

Esto también listara los archivos que se llamen por ejemplo

script.pu

script.pt

etc

También puede ser usado 

ls ?palabra

ls pala?bra

etc

Los []

Los corchetes son los comodines mas avanzados de usar ya que lo que hace es definir clases de caracteres simples que identifican a cualquier carácter perteneciente a la clase

Por ejemplo

ls [LPM]ua
Identifica

Lua,Pua,Mua

Otro ejemplo

ls [VL]ela

Identifica

Vela,Tela

Eso es todo,existe también - y {} pero el uso es muy avanzado y de momento no voy a mencionarlo.

Espero que les sea útil y agilicen el uso de la terminal :D



6 comentarios:

  1. Respuestas
    1. Me entendiste mal ;_;

      dije : deberias estudiar Objective-C en vez de estudiar
      un sistema antiguo como unix(ya que andas consigiendo libros de
      hace 20 años xD) ademas no dicen que GNU no es Unix
      y estos comandos que mencionas son de GNU Core Utilities y los estas implementando en unix-like asi que no necesias esos libros.

      Y tambien no sueltas el iphone y si aprendes Objective-C puedes hacer algo mas util que jugar angry birds XXXD

      Borrar
    2. De todas formas va, por donde comente y ya no es :( sino -.-

      Creí que eras mas Unixera :-m

      Borrar
    3. Es difícil tratarte....

      Si te refieres a Sistemas Unix-like ^^

      Mira mi lindo escritorio de gentoo

      https://lh4.googleusercontent.com/-nwLN9bmK65Q/ULexBt0zDUI/AAAAAAAAAFk/Vv4HrmVwdLE/s647/mi+escritorio+gentoo.png

      n_n

      "Creí que eras mas Unixera"

      Esto va de

      Creí que eras mas merol XDDDD

      Borrar

Los comentarios serán revisados antes de ser publicados.