Получение параметра из конфигурационного файла в FreeBSD

Вычисление места на диске, занимаемого файлами, принадлежащими каждому пользователю

Этот bashшелл-скрипт использует

  • findнайти владельцев
  • цикл forс командной строкой findдля поиска всех файлов, принадлежащих каждому владельцу
    • и передать имена файлов вdu
  • после duрезультат подвергается пост--обработке, чтобы сделать его легко читаемым.

Шелл-скрипт довольно быстр при тестировании на разделах с большим количеством файлов.

#!/bin/bash

# store owners in variable

user=$(whoami)
if [ "$user" != "root" ]
then
 echo "Run with elevated permissions (as root or with sudo)"
 exit
elif ! test -d "$1"
then
 echo "Enter a target directory as parameter"
 exit
fi

owners=$(find "$1" -printf "%u\n"|sort | uniq)
#echo "$owners"

leng=0
for i in $owners
do
 if [ ${#i} -gt $leng ]
 then
  leng=${#i}
 fi
done

#echo "$leng"
skip=$((leng - 4))
spc=$(for ((i=0;i<skip;i++)); do printf " "; done)


printf "User $spc Size\n---- $spc ----\n"

for i in $owners
do
 skip=$((leng - ${#i}))
 spc=$(for ((i=0;i<skip;i++)); do printf " "; done)
 printf "$i $spc "
 find "$1" -type f -user "$i" -print0 | du --files0-from=- --total -sh |
  tail -n1 | cut -f 1
done

Демонстрационные примеры

Принятие имениdisk-usage-by-owner

ubuntu@ubuntu:~$./disk-usage-by-owner
Run with elevated permissions (as root or with sudo)
ubuntu@ubuntu:~$ sudo./disk-usage-by-owner
Enter a target directory as parameter

Диалог в постоянном живом диске

ubuntu@ubuntu:~/bin$ sudo./disk-usage-by-owner /cdrom
User  Size
----  ----
root  1.9G
ubuntu@ubuntu:~/bin$ sudo./disk-usage-by-owner /home
User    Size
----    ----
root    0
ubuntu  1.9G
ubuntu@ubuntu:~/bin$ sudo./disk-usage-by-owner /media/ubuntu/casper-rw
User              Size
----              ----
_apt              0
colord            44K
gdm               288K
man               628K
root              1007M
syslog            127M
systemd-timesync  0
ubuntu            1.9G

Жесткие ссылки учитываются только один раз

$ sudo find. -user root -ls
56492055 1024 -rw-r--r-- 3 root root 1048576 jan 16 23:41./owned\ by\ root\ hard-linked
56492055 1024 -rw-r--r-- 3 root root 1048576 jan 16 23:41./owned\ by\ root
56492055 1024 -rw-r--r-- 3 root root 1048576 jan 16 23:41./sub/owned\ by\ root

$ sudo./disk-usage-by-owner.
User     Size
----     ----
root     1,0M
sudodus  32K

$ du.
4  ./sub
1064   .
1
17.02.2021, 09:56
0 ответов

Теги

Похожие вопросы