Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
mam do napisania skrypt
otoz skrypt ten ma wyszukac wszystkich uzytkownikow,ktorzy przekroczyli soft quote nastepnie przeszukac katalog domowy w poszukiwaniu plikow wiekszych niz 1 mb i stworzyc liste z 10 najwiekszymi plikami i przeslac ja mailem do administratora
zadanie mnie frustruje, a zaliczenie we wtorek... poratuje ktoś ?
Offline
Nawet nie musisz używać głowy, google pomoże. Na wtorek, kupę czasu. Bierze się do roboty leniu! ;] W godzinę byś to zrobił, może dwie, trochę na google pogrzebać, wiele przykładów znajdziesz, to tego man bash, find, ls, quota itp. Może powinniśmy zrobić na forum dział zlecenia ;]
Offline
to jest banalne, quotacheck, du -sh | sort z odpowiednimi parametrami | head -10 i przekierowac do mail
to nie problem, tylko ze on chciał zeby każdy miał inną wersję i koledzy padają. Niczego ich nie nauczył, bo sam tego nie umie dobrze a ich męczy. Ja nie mam pomysłów na inne wersje :/
Offline
bardziej na piechote:
1. uzyskujemy liste uzytkownikow
2. dla kazdego uzytkownika z listy wyszukujemy najwiekszy plik -> przechowujemy saobie jako tablice
3. tablice mozemy sortowac na bierzaco (przy wstawianiu) albo na koniec np. sortem ...
kolejna mutacja - zamioast tablicy robimy plik ktory mozemy przetorzyc sortem lub awk
Offline
Jak kto lubi sobie komplikować życie, to można jeszcze:
1. findem wyszukać pliki większe niż podany rozmiar.
2. Zapisać wynik do pliku tymczasowego.
3. W awk-u napisać algorytm do sortowania, który posortowałby pliki malejąco.
4. Znów w awk-u kazać drukować tylko pierwsze 10 linii wyniku powyższego.
5. Wysłać mailem.
Hm, generalnie to to samo co podał [b]bercik[/b], ale w bardziej szczególnej postaci :) .
Tylko ja się pytam: po co? Ja rozumiem, że panowie studenci mają od siebie nie ściągać, ale zamiast kazać im wymyślać koło na nowo, może lepiej byłoby zweryfikować czego się nauczyli? A nawet jeżeli ściągali, ale jakąś wiedzę zdobyli — czy to źle?
Offline
dążysz do tego żeby zrobił im kolosa, a tego żaden student nie lubi.
Offline
szczerze? wolelibyśmy kolosa...
napisalem 4 wersje, ale problem polega na tym, że nie wiem jakie dane wypluwa nam quotacheck. Mógłby ktoś pokazać listing jak wygląda użytkownik który przekracza softquotę ?
Offline
Nie mam uprawnień do używania quotacheck na serwie studenckim ;-), ale po przekroczeniu miękkiej quoty efekt polecenia quota jest taki:
przyboro@fatcat:~/var$ quota
Ograniczenia dyskowe user przyboro (uid 2482):
System plików bloki miękki twardy pobł. pliki miękki twardy pobł.
/dev/mapper/iscsi2vg-home
341884* 300000 350000 7 dni 5415 0 0[/quote]
Pojawia się gwiazdka przy zajętości.
Offline
jak to jak? sprawdzasz czy w wyniku [tt]quota[/tt] dostaniesz gwiazdkę w stosownym miejscu :)
PS. apeluję o żądanie "human-readable" wartości ([tt]free -m[/tt], [tt]quota -s[/tt], etc.), bo od tych bitów to oczopląsu można dostać ;)
Offline
[quote=TBH]jak ja mam z tego wyciąć te dane? Oo[/quote]
Np. tak:
quota |tail -1 |awk '$2 ~ /\*/ {print "ZOMFG, Juser przekroczył softkłotę!!!11"}'
Ale na niewiele Ci się to zda, gdyż jedną z pierwszych rzeczy, jaką musisz zrobić, jest sprawdzenie którzy użytkownicy przekroczyli quotę. To by się ograniczyło do czegoś w stylu:
let i=0 for user in $(awk -F : '{print $1}' < /etc/passwd) ; do KLOTA=$(sudo -u $user 'quota|tail -1') if echo $KLOTA |grep -e '*' &>/dev/null; then luserzy_z_klota[$i]=$KLOTA let i=$i+1 fi done
Bezsęsu.
Zamiast się wygłupiać, idź do najbliższego znanego administratora i poproś go o przykładowy wynik polecenia [i]quotacheck[/i]. Czy tam innego, odpowiedniejszego, ja się na quocie zupełnie nie znam.
Offline
Time (s) | Query |
---|---|
0.00015 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00117 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.15.211.41' WHERE u.id=1 |
0.00060 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.15.211.41', 1732228485) |
0.00047 | SELECT * FROM punbb_online WHERE logged<1732228185 |
0.00077 | DELETE FROM punbb_online WHERE ident='18.119.19.205' |
0.00086 | DELETE FROM punbb_online WHERE ident='185.191.171.4' |
0.00069 | DELETE FROM punbb_online WHERE ident='57.141.0.5' |
0.00061 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=11562 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00110 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=11562 ORDER BY p.id LIMIT 0,25 |
0.00069 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=11562 |
Total query time: 0.0072 s |