# [Mi home = RIP]  Evitar que suceda de nuevo

## ekz

 :Evil or Very Mad:   :Evil or Very Mad:   :Evil or Very Mad:   :Evil or Very Mad:   :Evil or Very Mad:   :Evil or Very Mad: 

Por culpa de expat me cargué mi home!  :Evil or Very Mad:  !!

Al compilar tantas cosas se me lleno /var/tmp/portage que estaba en una partición, al verificar que esa era la causa del fallo de la compilación, procedo a cargarme el contenido con el mágico comando

```
 rm -rf *  /var/tmp/portage/
```

DE DONDE SALIÓ ESE ASTERISCO??!!!!!!

Me di cuenta al notar que demoraba demasiado,  y hice ls /  ..la impresión  del momento me hizo pensar que me había cargado /  

Justo estaba en medio de un proyecto de la universidad, menos mal que lo tenía en el pendrive y en gmail..

Por suerte los ficheros/directorios ocultos aun están ahí..

Mi colección de imágenes hace un par de semanas las pasé al pendrive tb UFF..

Música, en el pen tenía cerca del 20%..  

Documentos, scripts, y muchas cosas las hecho de menos   :Crying or Very sad: 

MANTENGAN UN RESPALDO DE SU SISTEMA O AL MENOS DE SU HOME !

se los dice alguien que poco se preocupó del tema..

[/fin desahogo]

Ya un poco mas .. tranquilo.. tengo 2 dudas acerca de los alias:

1. Como se puede implementar un alias que lleve espacios?

por ejemplo  si hago 

```
alias rm -rf='rm -rfi'
```

No me funciona para nada (y desde que descubrí los alias que traté   :Evil or Very Mad:  )

2. Como puedo lograr que al ejecutar su, despues de pedir la contraseña, ejecutar cd (para cambiar a /root) ?

```
su && cd
```

no sirve ni como alias ni como script.

Bueno eso, gracias por leer hasta aquí

SAludos

EDITO: La culpa no es de expat.. ES MIA

----------

## Cereza

 *ekz wrote:*   

> Por culpa de expat me cargué mi home! :evil: !! 
> 
>  Al compilar tantas cosas se me lleno /var/tmp/portage que estaba en una partición, al verificar que esa era la causa del fallo de la compilación, procedo a cargarme el contenido con el mágico comando 
> 
> Código:
> ...

 

Jeje cuando yo hago cosas como esa (que las he hecho), no le echo la culpa a expat, ha sido mía.

 *ekz wrote:*   

> 1. Como se puede implementar un alias que lleve espacios? 
> 
> por ejemplo si hago 
> 
> Código:
> ...

 

Prueba a usar apostrofe, como en el comando de despues de =, por ejemplo alias 'rm -rf'='rm -rfi' Esto es una suposición solo, no lo sé con certeza, ni lo he probado nunca.

EDITO: Ya lo he probado, y no, así no vale :P 

 *ekz wrote:*   

> 2. Como puedo lograr que al ejecutar su, despues de pedir la contraseña, ejecutar cd (para cambiar a /root) ? 

 

Al final del .bashrc de root, añade:

```
cd ~
```

Será suficiente. Cuando haces su, al pasar a root lee su ~/.bashrc y hace lo que allí le pidas (como los alias)Last edited by Cereza on Thu Aug 23, 2007 11:53 pm; edited 1 time in total

----------

## jgascon

 *ekz wrote:*   

> 
> 
> Como puedo lograr que al ejecutar su, despues de pedir la contraseña, ejecutar cd (para cambiar a /root) ?
> 
> ```
> ...

 

Fácil:

```

su -

```

Del man de su:

 *Quote:*   

> 
> 
> -, -l, --login
> 
>               Provoca  que  la  shell  a ejecutar sea una shell de login. Lo cual significa que se eliminan del entorno todas las variables excepto `TERM',
> ...

 

----------

## i92guboj

 *ekz wrote:*   

>      
> 
> Por culpa de expat me cargué mi home!  !!
> 
> 

 

Lo siento. Nunca es agradable perder datos, y menos si son importantes. Pero aún así:

1.- No es culpa de expat, dicho comando lo podrías haber hecho cualquier otro día por cualquier otro motivo.

2.- Esto ya lo sabes jeje, pero cuando algo es importante hay que hacer backups  :Wink: 

3.- Cuando se trabaja con root, hay que revisar las líneas que comiencen con rm al milímetro.

Comprendo la desesperación jeje, a mí también me ha pasado alguna vez, y eso que hago backups regularmente de las cosas realmente importantes.

 *Quote:*   

> 1. Como se puede implementar un alias que lleve espacios?
> 
> por ejemplo  si hago 
> 
> ```
> ...

 

No se puede. Pero tampoco hace falta. Simplemente define esto:

```

alias rm='rm -i'

```

Luego si haces "rm -rf" será sustituído por "rm -i -rf".

 *Quote:*   

> 
> 
> 2. Como puedo lograr que al ejecutar su, despues de pedir la contraseña, ejecutar cd (para cambiar a /root) ?
> 
> 

 

Al entrar en un shell se ejecutan varios archivos, según el modo en que se entre. Aquí escribo sobre el tema:

https://forums.gentoo.org/viewtopic-p-2400029.html#2400029

Básicamente, tanto los alias como el "cd" que dices, los puedes poner en ~/.bashrc, eso hará que se ejecute en los shells interactivos de login. Luego añade esto a ~/.bash_profile (crea el archivo):

```

# This file is sourced by bash for login shells.  The following line

# runs your .bashrc and is recommended by the bash info pages.

[[ -f ~/.bashrc ]] && . ~/.bashrc

```

Eso hará que también se cargue en shells interactivos que no sean de login (por ejemplo los terminales en X).

Luego simplemente añade el cd, los alias y lo que quieras en ~/.bashrc

```
su && cd
```

Eso no anda, porque el comando cd solo se ejecutará cuando haya terminado "su", es decir, cuando hagas exit y vuelvas a ser tu usuario normal. Y aunque se ejecutara, por ejemplo haciendo "su& cd" (que lanza su en segundo plano e inmediatamente cd), solo lo haría en el shell actual. Es decir, en tu usuario, no en root, por lo cual es inútil. El cd que tu quieres lo tienes que añadir en el ~/.bashrc de root, tras hacer lo que ya te he contado arriba.

Además, yo cambiaría el título a algo más descriptivo. Realmente esto no tiene nada que ver con expat. Aunque comprendo por qué lo pusiste así en primera instancia jeje, estas cosas desesperan al más santo.

----------

## ekz

Hola a todos. 

SI admito que la culpa es mía, solo que si hoy no hubiera tenido la tarde libre no hubiera pasado nada   :Sad: 

Lo del cd despues de su lo implementé mediante el bashrc y bash_profile. gracias a todos.

```

alias rm='rm -i' 
```

este alias lo tenía en mis 2 .bashrc (root y usuario), pero aun asi  se salta el -i cuando hago rm -rf

```
ekz@localhost ~ $ nano dad

ekz@localhost ~ $ rm dad

rm: ¿borrar el fichero regular «dad»? (s/n) n

ekz@localhost ~ $ rm -rf dad

ekz@localhost ~ $ 

```

SAludos. gracias

----------

## i92guboj

 *ekz wrote:*   

> Hola a todos. 
> 
> SI admito que la culpa es mía, solo que si hoy no hubiera tenido la tarde libre no hubiera pasado nada  
> 
> Lo del cd despues de su lo implementé mediante el bashrc y bash_profile. gracias a todos.
> ...

 

Pues nunca lo he mirado (no uso -i en los alias tampoco), pero mira esto:

```

$ unalias rm

$ touch crap

$ rm -rfi crap

rm: ¿borrar el fichero regular vacío «crap»? (s/n) s

$ touch crap

$ rm -rif crap

```

La primera línea es para aseguraarme que voy sobre limpio.

Por lo visto, -i toma efecto si se pone después de -f, si no, pasa al contrario, lo cual es bastante lógico. Ya ha habido hilos discutiendo cual de las dos opciones debería tomar precedencia si ambas aparecen. Recuerdo haberlos visto en alguna ocasión.

----------

## ekz

HOLA!

Al ejecutar la orden rm -rf * , no se borraron los directorios ni ficheros ocultos, por lo que ayer pensé:

Puedo crear el directorio .videos y crear un enlace llamado videos, entonces trabajaría como siempre con mi directorio videos (que en realidad es un enlace)

Bien, si eso funciona lo haría en todo mi home, pero uno se vuelve ambicioso, y pensando mas drásticamente, uno podría aplicar esto mismo en / para resguardarse de un posible rm -rf / ?

p.ej: muevo el directorio bin a .bin y creo un enlace llamado bin que apunte a .bin

Funcionaría? (hacerlo desde un liveCD obviamente y conservando permisos)

SAludos!

----------

## Inodoro_Pereyra

```

localhost > mkdir prueba

localhost > cd prueba

localhost > mkdir .directorio

localhost > mkdir directorio

localhost > touch .archivo

localhost > touch archivo

localhost > rm -fr *

localhost > ls -la

total 12

drwxr-xr-x   3 escritorio escritorio 4096 ago 27 15:09 .

drwxr-xr-x 102 escritorio escritorio 4096 ago 27 15:08 ..

-rw-r--r--   1 escritorio escritorio    0 ago 27 15:08 .archivo

drwxr-xr-x   2 escritorio escritorio 4096 ago 27 15:08 .directorio
```

Y si, tendría que funcionar... Como ves en la prueba que hice mas arriba. Tiene lógica, digamos. Aun que no existe nada a prueba de el error humano.

Yo una vez borré todo /sbin por error también, por ejemplo   :Very Happy: 

**EDIT** Y la semana pasada borré la mitad de una partición NTFS montada localmente, me olvidé de desmontarla antes de eliminar...  :Embarassed: 

Salud!

----------

## i92guboj

 *Inodoro_Pereyra wrote:*   

> 
> 
> ```
> 
> localhost > mkdir prueba
> ...

 

En teoría todo está correcto. Aunque siempre puede haber algún programa que pueda fallar. De todas formas, si alguien quiere probar esto, que se asegure de que no tiene algo como esto en su ~//.bashrc, ~/.bash_profile o similar:

```

shopt -s dotglob

```

Yo que eso hace que se incluyan los ficheros dot en los comodines. En dicho caso, el método propuesto no funcionaría. Por lo demás, no hay problema en probar, siempre que se tenga un livecd por si algo va mal.

----------

## luispa

 *ekz wrote:*   

> 
> 
> Documentos, scripts, y muchas cosas las hecho de menos  
> 
> MANTENGAN UN RESPALDO DE SU SISTEMA O AL MENOS DE SU HOME !
> ...

 

Un truco, que aunque sale un poco (más) caro, me está dejando dormir muy tranquilo. Consiste en dedicar un disco duro extra a backups. En mi caso lo uso exclusivamente para /home pero la idea seguro te valdrá para cualquier otra cosa.

Tengo dos discos duros externos idénticos, USB de 500GB, se reconocen como /dev/sde y /dev/sdf, y sus puntos de montaje son:

/dev/sde -> /home

/dev/sdf -> /home.bak

Durante el arranque del sistema sólo monto /home, y el disco de backup se queda 'durmiendo' desmontado.

Todos los días, a las 5.15 am (en tu caso usa la hora que mejor te convenga) hago un backup NO DESTRUCTIVO desde el cron de root:

```

# crontab -l

:

15 5 * * * /root/bin/backup-home-no-delete.sh

:

```

Y este script, que es muy sencillo, básicamente ejecuta el comando siguiente:

```

 :

 mount /home.bak

 :

 rsync -T /tmp -qua /home/* /home.bak

 :

 umount /home.bak

```

Un vez al trimestre igualo ambos, realizando un backup completo:

```

rsync -ua --progress --delete /home/* /home.bak

```

Espero que sea de ayuda

Luis

----------

## ekz

No había pensado en una utilidad así para rsync   :Smile: 

Pues junté un poco de valor y arranqué con mi livecd de gentoo 2006.0:

```
ekz@localhost ~ $ ls -al /

total 220900

drwxrwxrwx  23 root root       4096 sep  5 15:35 .

drwxrwxrwx  23 root root       4096 sep  5 15:35 ..

-rw-r--r--   1 ekz  users        23 jun 29 01:20 37a19d2911375ec1cf2.details

-rw-r--r--   1 ekz  users        26 jun 29 01:20 37a19d2911375ec1cf2.notes

-rw-r--r--   1 root root          0 abr 19 21:03 apkg-support-install

-rw-------   1 root root       3812 jun 24 10:22 .bash_history

lrwxrwxrwx   1 root root          4 sep  5 15:34 bin -> .bin

drwxr-xr-x   2 root root       4096 sep  2 20:48 .bin

drwxr-xr-x   2 root root       4096 ago 16 19:58 boot

drwx------   2 ekz  users      4096 sep  4 13:56 crashlogs

drwxr-xr-x  18 root root      13980 sep  5 19:37 dev

drwxr-xr-x   3 root root       4096 may 21  2006 emul

lrwxrwxrwx   1 root root          5 sep  5 19:05 etc -> /.etc

drwxr-xr-x  87 root root       4096 sep  5 19:37 .etc

-rw-r--r--   1 root root  225832960 sep  5 19:00 etc-05-sep.tar

drwxr-xr-x  87 root root       8192 sep  5 18:49 etc-bak

drwxr-xr-x   6 root root       4096 ago  6 19:26 home

-rw-r--r--   1 root root         35 may 20  2006 .lesshst

lrwxrwxrwx   1 root root          5 ago  1 16:25 lib -> lib64

drwxr-xr-x   4 root root       4096 sep  1 15:38 lib32

drwxr-xr-x   9 root root       4096 sep  2 20:41 lib64

drwx------   2 root root      16384 may 19  2006 lost+found

drwxr-xr-x  11 root root       4096 sep  5 19:37 media

drwxrwxrwx   7 root root       4096 dic 26  2006 mnt

drwxr-xr-x  15 root root       4096 sep  2 18:47 opt

dr-xr-xr-x  99 root root          0 sep  5 15:37 proc

-rw-r--r--   1 root root        162 abr 19 21:03 reporting

drwx------  53 root root       4096 sep  5 19:31 root

lrwxrwxrwx   1 root root          5 sep  5 15:35 sbin -> .sbin

drwxr-xr-x   2 root root       4096 sep  2 20:45 .sbin

drwxr-xr-x  11 root root          0 sep  5 15:37 sys

drwxrwxrwt 315 root root      28672 sep  5 19:37 tmp

drwxr-xr-x  20 root root       4096 may 25 14:45 usr

drwxr-xr-x  13 root root       4096 sep  2 18:47 var

-rw-------   1 root root          0 dic 27  2006 .Xauthority
```

Por ahora sólo lo hice con bin,  sbin y etc (tenía que ver si resultaba jeje)

 *man mv wrote:*   

> Cuando tanto origen como destino estan en el mismo sistema de ficheros,
> 
>        son el mismo fichero (solo el nombre se cambia;  el  propietario,  per-
> 
>        misos  y  marcas  de tiempo permanecen intactos). 

 

Eso me dió más seguridad antes de hacerlo  :Smile: 

SAludos!

----------

