Foro de elhacker.net

Sistemas Operativos => GNU/Linux => Mensaje iniciado por: venadHD en 15 Agosto 2015, 16:12 pm



Título: [solucionado] Como puedo hacer este comando simple?
Publicado por: venadHD en 15 Agosto 2015, 16:12 pm
Bueno, hasta hace unos dias, estaba 'hosteando' unos servidores de juegos y decidí a crear un comando para que el servidor no exceda la cuota de espacio (porque el servidor no respeta el FTP)
.
Bien, tenia este comando que detectaba el tamaño de los archivos y los borraba

Código
  1. find /home/ftp -size +150M -exec rm {} \;

Pero... Como puedo hacer que coja el tamaño del directorio total, ysi excede.. Que elimine el ultimo archivo modificado?
PD: Existiria alguna forma de poner una "excepcion" de archivos y que pase al siguiente, por ejemplo: "archivo que no puede borrar: internal.db", y si el ultimo modificado es "internal.db" y el segundo despues es "texto.txt", que elimine "texto.txt" y no "internal.db", nose si me explique, es un poco complicado todo


Título: Re: Como puedo hacer este comando simple?
Publicado por: WIитX en 15 Agosto 2015, 16:40 pm
Porque no creas a cada FTP 1 usuario a el usuario le creas cuotas y le pones que le avise cuando valla a llenar el disco cuando le queden no 300MB o algo así


Título: Re: Como puedo hacer este comando simple?
Publicado por: venadHD en 15 Agosto 2015, 16:45 pm
Porque no creas a cada FTP 1 usuario a el usuario le creas cuotas y le pones que le avise cuando valla a llenar el disco cuando le queden no 300MB o algo así

Porque el servidor en sí puede crear archivos y escribirlos, por eso el metodo 'anti-llenado' de disco duro, al execeder X tamaño, eliminar el ultimo archivo


Título: Re: Como puedo hacer este comando simple?
Publicado por: MinusFour en 15 Agosto 2015, 18:34 pm
Creo que puedes hacer:

Código
  1. find /home/ftp -type d -size +150M -exec rm {} \;

Código:
-type c
              File is of type c:

              b      block (buffered) special

              c      character (unbuffered) special

              d      directory

              p      named pipe (FIFO)

              f      regular file

              l      symbolic link; this is never true if the -L option or
                     the -follow option is in effect, unless the symbolic
                     link is broken.  If you want to search for symbolic
                     links when -L is in effect, use -xtype.

              s      socket

              D      door (Solaris)


Título: Re: Como puedo hacer este comando simple?
Publicado por: venadHD en 15 Agosto 2015, 18:58 pm
Creo que puedes hacer:

Código
  1. find /home/ftp -type d -size +150M -exec rm {} \;

Código:
-type c
              File is of type c:

              b      block (buffered) special

              c      character (unbuffered) special

              d      directory

              p      named pipe (FIFO)

              f      regular file

              l      symbolic link; this is never true if the -L option or
                     the -follow option is in effect, unless the symbolic
                     link is broken.  If you want to search for symbolic
                     links when -L is in effect, use -xtype.

              s      socket

              D      door (Solaris)
Pero lo que tu dices elimina el directorio, la cosa es que eliminara un archivo, o al servidor le quitara el permiso de escritura, de esa forma no podria escribir en el directorio:

Estuve haciendo este script pero da mas errores.. No sé nada de linux, quizas sea por eso XD (ni cerrar la condicional)
Código
  1. root@venad1:~# bash rbf.sh
  2. ': not a valid identifier`limitdisk
  3. ': not a valid identifier`directdisk
  4. rbf.sh: line 10: syntax error near unexpected token `fi'
  5. rbf.sh: line 10: `      fi'
  6. root@venad1:~#

El script xD
Código
  1. #! /bin/bash
  2. typeset -i limitdisk
  3. typeset -i directdisk
  4. limitdisk=1610612736
  5. directdisk=$(du -bs /home/ftp/oqq77888)
  6. if [$directdisk -ge $limitdisk] then
  7. echo "Espacio libre excedido"
  8. else
  9. echo "espacio no excedido"
  10. fi

Aunque bueno, lo mismo que tu has dicho.. podria hacerlo asi:

Código
  1. find /home/ftp -type d -size +1500M -exec chmod 555 /home/ftp/oqq77888/mta-server \;
Funcionaria, no?

PD: Un poco cochino mi numero de mensajes no?


Título: Re: Como puedo hacer este comando simple?
Publicado por: MinusFour en 15 Agosto 2015, 19:11 pm
No habia visto que era solo para el ultimo achivo modificado   

Código
  1. find /home/ftp -type d -size +150M -exec rm $(ls -1t {} | head -n 1) \;

Pero hay que tener mucho cuidado con los directorios....


Título: Re: Como puedo hacer este comando simple?
Publicado por: venadHD en 15 Agosto 2015, 19:41 pm
No habia visto que era solo para el ultimo achivo modificado   

Código
  1. find /home/ftp -type d -size +150M -exec rm $(ls -1t {} | head -n 1) \;

Pero hay que tener mucho cuidado con los directorios....

Cuidado con los directorios? Ese script que pusiste puede borrar un directorio sin querer?, alternativamente, como podria hacer para que no borrara determinados archivos? tanto nombre como extension "internal.db", "mtaserver.conf", "acl.xml", etc etc


Título: Re: Como puedo hacer este comando simple?
Publicado por: MinusFour en 15 Agosto 2015, 20:00 pm
Cuidado con los directorios? Ese script que pusiste puede borrar un directorio sin querer?, alternativamente, como podria hacer para que no borrara determinados archivos? tanto nombre como extension "internal.db", "mtaserver.conf", "acl.xml", etc etc

Cuando tu haces:

Código
  1. ls -1t

Te devuelve el ultimo fichero modificado y estos pueden ser directorios tambien. Igual es mejor tener un script separado que busque dentro del directorio el ultimo archivo modificado y que excluya directorios.


Título: Re: Como puedo hacer este comando simple?
Publicado por: venadHD en 15 Agosto 2015, 20:32 pm
Cuando tu haces:

Código
  1. ls -1t

Te devuelve el ultimo fichero modificado y estos pueden ser directorios tambien. Igual es mejor tener un script separado que busque dentro del directorio el ultimo archivo modificado y que excluya directorios.

Hmm, me pondre a investigar sobre eso xD