jueves, 3 de marzo de 2011

Corta y pega en bash

En bash tenemos algunos comandos que nos pueden servir de utilidad a la hora de copiar y pegar comandos.

  • C^a : Va al principio de la linea
  • C^e : Va al final de la linea
  • C^k : corta lo que hay en la linea a partir de la posición actual y lo guarda en un buffer.
  • C^y : pega el contenido del buffer a partir de la posición actual.
Nota: C^ significa pulsar la tecla Ctrl y la que indiquemos a continuación.

miércoles, 2 de febrero de 2011

GIT: Ver la rama en la que estas en el promp

Si trabajamos con terminales y git nos puede venir bien este pequeño truco para no despistarnos.

De una forma sencilla podemos ver en el promp la rama en la que estamos, quedaría de la siguiente manera:

|rama_actual|jou-tu@r2d2:$

Para verlo así tenemos que editar la variable PS1 dentro del fichero .bashrc (en linux mint es el fichero /etc/bash.bashrc), y añadirle esto al principio de la variable:
$(__git_ps1 "|%s|")

justo despues del primer ' (o donde querramos ponerlo)

Yo lo tengo así, pase de tener esto:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '

a esto:
PS1='$(__git_ps1 "|%s|")${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
Si aparte queremos tener más información de la rama (si hay cambios sin subir, etc) podemos añadir la siguiente linea al ~/.bashrc:
export GIT_PS1_SHOWDIRTYSTATE=1


Con esto nos saldra al final del nombre de la rama:
  • * - si tenemos cambios pendientes que no han sido añadido para hacer el commit.
  • + - si tenemos cambios para hacer el commit, pero este aun no se ha realizado.

viernes, 28 de enero de 2011

Terminal: buscar un comando ejecutado antes

Hay muchas veces en las que queremos ejecutar un comando que hemos puesto previamente, pero por vaguería, por ser muy largo o porque no nos acordamos exactamente de como era, no queremos volver a escribir.

Lo tipico que hacía era mostrar el contenido del ~/.bash_history:
cat .bash_history

o buscar en ese fichero algo del comando que nos suene (ej: checkout):
$ cat .bash_history | grep checkout
git checkout new_domain
$

Pero se puede hacer de manera más fácil. Dentro del terminal pulsamos ^r (Ctrl + r), nos aparecerá lo siguiente:
(reverse-i-search)`':

Ahora solo tenemos que escribir lo que buscamos. Nos aparecerá el último comando ejecutado que contenga esos caracteres. Si queremos alguno anterior a ese solo tenemos que volver a dar a ^r.
Por ejemplo, buscando check:
(reverse-i-search)`check': git checkout integration

Si queremos ejecutar el comando pulsamos enter, y si queremos movernos por él con las teclas de dirección.

P.D: Ya no se ni como pongo los formatos.

jueves, 27 de enero de 2011

GIT: Crear un proyecto y subirlo a un servidor

El proceso inicial es bastante raro, aviso.
Se supone que hemos estado trabajando con nuestro repositorio local, pero ahora queremos subirlo a nuestro repositorio central para compartirlo con mas gente.

Para ello vamos a crear la carpeta en el servidor, vamos a configurarla y después uniremos el trabajo realizado en local con la carpeta en el servidor.

Se supone que ya tenemos nuestra carpeta creada localmente (git init, git add, git commit, etc), pero para que no haya lios vamos a mostrar el proceso entero.
En local creamos la carpeta ejemplo, e inicializamos el proyecto ahí:
LOCAL
mkdir ejemplo
cd ejemplo
git init

Si intentamos sincronizar el proyecto vacío nos devolverá error (No refs in common and none specified; doing nothing.), así que añadimos nuestros archivos del proyecto y realizamos un commit (pondré algo a modo de ejemplo, pero podéis poner el vuestro proyecto directamente).
LOCAL
echo ejemplo > ejemplo.txt
git add .
git commit

Ahora vamos a crear la carpeta en el servidor, donde vamos a guardar el proyecto.

El directorio raíz de todos los proyectos lo vamos a situar en /var/git (se puede cambiar).
No hay ningún problema en ponerlo en otro sitio.

Por estándar el nombre de la carpeta del proyecto es el mismo que el del proyecto local, pero terminado en .git, si nuestro proyecto se llama ejemplo, pues usaremos “ejemplo.git”.

Nos situamos en /var/git, creamos la carpeta ejemplo.git y entramos en ella:
SERVIDOR
mkdir ejemplo.git
cd ejemplo.git

Una vez creada la carpeta se inicializará el respositorio con este comando (desde la carpeta):
SERVIDOR
git init --bare --shared=group

Asignarle el bit s a la carpeta creada
SERVIDOR
cd ..
chmod -R g+s ‘ejemplo.git’

Tener cuidado de asignar la carpeta al grupo que queramos (en este caso utilizamos el grupo git):
SERVIDOR
chgrp -R git ejemplo.git

Ya hemos terminado el trabajo en el servidor, ahora solo quería sincronizar el proyecto desde donde tengamos nuestro repositorio local, si estamos en nuestra maquina en la carpeta ejemplo hacemos:
LOCAL
git push --all ssh://’user’@’server’/var/git/ejemplo.git

Una vez hecho esto ya esta en el servidor.

Para que queden bien todas las referencias dentro del proyecto lo mas sencillo es borrarlo del repositorio local, y clonarlo desde el servidor, así no habrá problemas:
LOCAL
rm -rf ejemplo
git clone ssh://’user’@’server’/var/git/ejemplo.git

Debemos asegurarnos que ‘user’ pertenece al mismo grupo al que pertenece la carpeta que queremos bajar(en este caso git).

Podemos editar el fichero /etc/group y añadirnos:
git:x:1005:user1,user2,user3,...

miércoles, 26 de enero de 2011

Screen manejador de ventanas en linux

Screen es un manejador de ventanas que multiplexa un terminal en varios procesos.

Con esto podemos tener un único terminal abierto en el que podemos tener varias sesiones.
También podemos dejar abiertas esas sesiones y cerrar el terminal original para despues recuperarlas más tarde. Y los procesos que se ejecutan en ellas no se quedan en background, sino que están en ejecución.

El control no es demasiado intuitivo, pero puede que quizás te valga la pena.

Para ejecutarlo solo tenemos que invocar el comando screen.

Parecerá que no hace nada pero ya tenemos una sesion screen abierta.
Para ver los comandos debemos hacer ^A (Ctrl + A) y después ?, veremos la siguiente ventana.


Tenemos algunos comandos útiles, y todos se invocan pulsando primero ^A y después las letras que salen en el menú.

^A A: renombramos el titulo de la sesion de screen actual.
^A c: multiplexa una nueva sesión dentro de screen.
^A ": muestra la lista de sesiones disponibles
^A ^A: cambia entre las ultimas sesiones de screen vistas.
^A ^D: "liberas" la sesion actual. Vuelves a tu terminal normal, pero la sesion de screen sigue activa, y puedes volver a abrirla.

Una vez "liberada" la sesión podemos volver a abrirla de la siguiente manera.
con screen -ls vemos las sesiones de screen abiertas, y con screen -x abrimos la última sesion abierta.
Para cerrar screen definitivamente sólo tenemos que salir de todas las sesiones abiertas dentro de screen con exit.

Configuración basica de ssh en linux

No es que vaya a salvar la vida a nadie esta ayuda, pero puede ser útil cuando trabajamos mucho con sesiones ssh, o cuando no nos apetece tener que aprendernos las direcciones ip, o simplemente queremos escribir menos.

Si accedemos de la siguiente manera:
  • ssh usuarioP@192.168.1.14
Podemos configurar el fichero ~/.ssh/config para no tener que escribir todo el tiempo el usuario con el que vamos a entrar y la dirección:
Host ejemplo
Hostname 192.168.1.14
User usuarioP

A partir de entonces nos bastará con:
  • ssh ejemplo

martes, 25 de enero de 2011

Varias sesiones por un mismo socket

Esto nos sirve para cuando tenemos que abrir varias sesiones hacia una maquina (por ssh).

En vez de tener que logearnos una vez por cada sesión sólo (con acento ¬¬) nos logearemos una vez para todas las sesiones, y estas sesiones compartiran el socket entre ellas.

Para conseguir esto tenemos que escribir lo siguiente en el fichero ~/.ssh/config :
Host *
ControlMaster auto
ControlPath ~/.ssh/socks/%r@%h:%p
Y ya esta listo.