¿Cómo puedo cambiar el tamaño/restringir una carpeta para usuarios como Escritorio/Descargas en Ubuntu?

¿Cómo puedo cambiar el tamaño/restringir una carpeta para usuarios como Escritorio/Descargas en Ubuntu?

Quiero habilitar restricciones de tamaño, lo que significa que quiero cambiar el tamaño de algunas carpetas para usuarios como las carpetas Escritorio, Descargas o Música. Si un usuario excedió la memoria, no debería sobrescribirla y recibirá el mensaje de advertencia.

¿Cómo cambiar el tamaño de las carpetas a través de Ansible? Es para muchos hosts y directamente en el sistema con permiso de root. Quiero hacer esto en la edición de escritorio Ubuntu 14.04.

Respuesta1

Basado en la respuesta aceptada en¿Cómo establecer un límite en el tamaño del directorio en Linux?porSerguéi Nikulovy eltutoriales originales, He creado un script que puede crear un directorio con cuota limitada a pedido.

El script opera bajo la premisa de crear un dispositivo de bucle con un tamaño y sistema de archivos específicos, y montar el dispositivo de bucle en el directorio definido por el usuario.

Guion

También disponible enGitHub. Allí se realizarán más desarrollos.

#!/usr/bin/env bash
# Author: Serg Kolo
# Date: June 1, 2018
# Written for: https://askubuntu.com/q/1043035/295286
# Based on: https://www.linuxquestions.org/questions/linux-server-73/directory-quota-601140/

set -e

print_usage(){

cat <<EOF
Usage: sudo mklimdir.sh -m <Mountpoint Directory> -f <Filesystem> -s <INT>

-m directory
-f filesystem type (one of supported by mke2fs)
-s size in bytes
-h this message

Exit statuses:
0:
1: Invalid option
2: Missing argument
3: No args
4: root privillege required
EOF
} > /dev/stderr

parse_args(){
    #set -x

    option_handler(){

        case ${opt} in
            m) mountpoint=$( realpath -e "${OPTARG}" );;
            s) size=${OPTARG} ;;
            h) print_usage; exit 0 ;;
            f) mkfs_cmd=mkfs."${OPTARG}" ;;
            \?) echo ">>>Invalid option: -$OPTARG" > /dev/stderr; exit 1;;
            \:) echo ">>>Missing argument to -${OPTARG}" > /dev/stderr; exit 2;;
        esac
    }

    local OPTIND opt
    getopts "m:s:f:h" opt || { echo "No args passed">/dev/stderr;print_usage;exit 3;}
    option_handler 
    while getopts "m:s:f:h" opt; do
         option_handler
    done
    shift $((OPTIND-1))

}


main(){

    if [ $EUID -ne 0 ]; then
        echo ">>> Please run the script with sudo/as root" > /dev/stderr
        exit 4
    fi

    local mountpoint=""
    local size=0
    local mkfs_cmd

    parse_args "$@"
    quota_fs=/"${mountpoint//\//_}"_"$(date +%s)".quota
    dd if=/dev/zero of="$quota_fs" count=1 bs="$size"
    "$mkfs_cmd" "$quota_fs"
    mount -o loop,rw,usrquota,grpquota "$quota_fs" "$mountpoint"

    chown $SUDO_USER:$SUDO_USER "$mountpoint"

}

main "$@"

Uso

Hay 3 banderas requeridas:

  • -mpara el punto de montaje, también conocido como el directorio que desea limitar
  • -sel tamaño al que desea limitar en bytes
  • -fsistema de archivos. Si no estás seguro de cuál debería ser, quédate con ext4 o ext3.

Aquí hay un ejemplo de cómo utilicé este script para crear ./quoted_dirun límite de 1 MiB (es decir, 1024 2 enPrefijo binario)

sudo ./mklimdir.sh -m ./quoted_dir/ -s $((1024*1024)) -f ext4

Probé el script con while true; do cat /etc/passwd >> ./quoted_dir/passwd; sleep 1; doneun tipo de bucle, que agregaría el contenido /etc/passwdal archivo dentro del directorio limitado por comillas. Finalmente se catprodujo un error con:

cat: write error: No space left on device

y la escritura del archivo se detuvo en 909 KiB, que es un poco menos de 1 MiB y evitaría exceder los límites dentro del directorio.

Mayor desarrollo

Para un efecto permanente, el dispositivo de bucle creado por el guióndebe agregarse a/etc/fstab. Esto se puede agregar más adelante en GitHub. El script opera en un único directorio; sin embargo, este script se puede usar dentro de otro script para crear múltiples directorios limitados, por lo que es lo suficientemente flexible.

información relacionada