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/.
Hej
Potrzebuje poćwiczyć pisanie skryptów w bashu i jeśli macie jakieś do napisanie to chętnie się podejmę. Proszę o wrzucanie w tym wątku.
Offline
To ja mam coś dla Ciebie. Zbieram i archiwizuje zdjęcia cyfrowe w zasadzie od ... 2003 roku. Poumieszczałem to wszystko ładnie w katalogach które opisałem najczęściej tak:
rrrr-mm-dd + jakiś tam opis.
Niestety samych zdjęć było sporo i nie zmieniałem nazw plików. Zależy mi na tym aby zrobić skrypt który po odpaleniu w danym katalogu pozmieniał by mi nazwy wszystkich plików znajdujących się w tym katalogu i jego podkatalogach na nazwę nadrzędnego folderu + nr (najlepiej 4 cyfrowy np. 0001,0002 itd. ).
Jak byś to ogarnął był bym wdzięczny :D
Offline
Możesz podrzucić ls z przykładowego folderu?
Offline
Mógłbyś napisać skrypt który wyszukiwałby program który najbardziej obciąża procesor, na podstawie podanych zmiennych- wartości zużycia CPU od na przykład 80 - do 100% (czasami jakis program się zawiesi i zużywa cały procesor) i pytałby się użytkownika czy ma go automatycznie zakończyć?
Offline
[quote=macios4x]Mógłbyś napisać skrypt który wyszukiwałby program który najbardziej obciąża procesor, na podstawie podanych zmiennych- wartości zużycia CPU od na przykład 80 - do 100% (czasami jakis program się zawiesi i zużywa cały procesor) i pytałby się użytkownika czy ma go automatycznie zakończyć?[/quote]
Cgroup do ograniczania procesów, TOP/HTOP do wyświetlania danych o procesach, wszystko jest, trzeba tylko skonfigurować conieco.
SOA#1
Ostatnio edytowany przez Jacekalex (2015-08-01 13:09:46)
Offline
[quote=Bitels]To ja mam coś dla Ciebie. Zbieram i archiwizuje zdjęcia cyfrowe w zasadzie od ... 2003 roku. Poumieszczałem to wszystko ładnie w katalogach które opisałem najczęściej tak:
rrrr-mm-dd + jakiś tam opis.
Niestety samych zdjęć było sporo i nie zmieniałem nazw plików. Zależy mi na tym aby zrobić skrypt który po odpaleniu w danym katalogu pozmieniał by mi nazwy wszystkich plików znajdujących się w tym katalogu i jego podkatalogach na nazwę nadrzędnego folderu + nr (najlepiej 4 cyfrowy np. 0001,0002 itd. ).
Jak byś to ogarnął był bym wdzięczny :D[/quote]
Hej
Poniżej wersja testowa zmienia tak jak chciałeś tylko brak jeszcze numeru 4 cyfrowego ( obecnie wstawia tylko numerek). Proszę o przetestowanie na jakiejś kopi danych.
#/bin/bash aa=`pwd` bb=0 mkdir $aa"/pomoc12" for i in `find ./ -type d ! -path ./pomoc12`; do ((bb++)) if [ $i != "./" ]; then find $i -maxdepth 1 -type f>$aa"/pomoc12/a"$bb b=`find $i -maxdepth 1 -type f|wc -l` for ((g=1; $g<=$b ;g++)); do ww=`cat $aa"/pomoc12/a"$bb |tail -n $g| head -n 1` na=`echo $i |awk -F "/" '{print $NF}'` mv $ww $i"/"$na$g done fi done
W razie pytań pisz.
Skrypt stworzy sobie kakalog pomoc12 gdzie będą pliki pomocnicze (lista plików w danym katalogu).
Ostatnio edytowany przez pabliszer (2015-08-01 14:53:04)
Offline
@pabliszer
mógłbyś napisać ten skrypt o który prosiłem?
Offline
dzięki sprawdzę jak złapię chwilę wolnego
Offline
[quote=macios4x]@pabliszer
mógłbyś napisać ten skrypt o który prosiłem?[/quote]
Mogę napisać tylko z czego chcesz pobierać obciążenie oraz jaki ma być czas w którym to obciążenie jest w granicach 80-100%?
Offline
[quote=pabliszer][quote=macios4x]@pabliszer
mógłbyś napisać ten skrypt o który prosiłem?[/quote]
Mogę napisać tylko z czego chcesz pobierać obciążenie oraz jaki ma być czas w którym to obciążenie jest w granicach 80-100%?[/quote]
Chodzi mi o skrypt który wyświetlałby menu do wyboru zniszczć proces który:
- najbardziej obciąża procesor (na przykład obciążenie utrzymuje się przez conajmniej 60 sekund)
- zabiera najwięcej pamięci RAM
- wyszukuje i niszczy procesy "zombie"
Offline
a jak chcesz zniszczyć proces zombie? ot tak z ciekawości pytam bo może coś wiesz czego ja nie wiem... ;)
Offline
Zombie generalnie się niszczy przez zabicie rodzica procesu, innej drogi nie ma na razie, a ta też jest zależna od systemu i nie zawsze działa.
Trzeba by chyba jakąś łatkę na kernel, żeby automatycznie ubijał sam proces zombie, ale to dosyć złożony problem, i raczej nie w Bashu.
To już by była zabawa na poziomie podobnym do Grsec&Pax.
Skryptologicznie to można się bawić tak (głównie komentarze):
http://www.cyberciti.biz/tips/killing-zombie-process.html
ale skuteczność takich zabaw jest dosyć umiarkowana. :P
Ostatnio edytowany przez Jacekalex (2015-08-02 14:31:07)
Offline
Z tego można coś "skręcić":
ps -eo pcpu,cmd | sort -k 1 -nr | head -n 1 ps -eo pmem,cmd | sort -k 1 -nr | head -n 1 ps aux | awk '{ print $8 " " $2 }' | grep -w Z
chyba że znacie jakiś lepszy sposób?
Offline
[quote=macios4x]Z tego można coś "skręcić":
ps -eo pcpu,cmd | sort -k 1 -nr | head -n 1 ps -eo pmem,cmd | sort -k 1 -nr | head -n 1 ps aux | awk '{ print $8 " " $2 }' | grep -w Z
chyba że znacie jakiś lepszy sposób?[/quote]
ps -eo pcpu,cmd | sort -k 1 -nr | head -n 1
Cgroup::Cpu i też trochę Cgroup::Cpuset
ps -eo pmem,cmd | sort -k 1 -nr | head -n 1
Cgroup::Memory
To są te "lepsze sposoby".
Sznurek: https://wiki.archlinux.org/index.php/Cgroups
Offline
Mozna przetestować zombiaka:
(: & exec sleep 30) &
lub bardziej hardkorowo:
:(){ :|:&};:
Offline
Forkbomba z procesami zombie ma niezbyt wiele wspólnego.
Sznurek:
https://pl.wikipedia.org/wiki/Fork-bomba
Offline
chwila moment... zombiak to proces który [b]nie istnieje[/b] i raczej trudno zastrzelić nieboszczyka. i nie ma sensu jego ubijanie, jeśli jest to tylko wpis do tablicy procesów.
btw. zombiaki się ubija przez wait czy waitpid na parencie, a nie przez ubicie patenta. mam parę aplikacji, które pozostawiają zombie na parę sekund (max. dwie minuty) bo akurat robią coś ważniejszego niż wait...
zresztą - od młodych wiele nie wymagam, ale kol. @jacekalex mógłby uprzejmie przestać pieprzyć - wiele osób na tym forum uważa, że coś wiesz, i przykro by było uświadomić im prawdę...
Offline
Jak już chcesz personalnie, to sam widziałem parę zombiaków, których nie dało się ubić w żaden sposób, nie mniej kiedyś skutkowało ubicie parenta.
Ostatnio dawno takiego dziadostwa nie widziałem, i zastanawiam się, cóż to za system, w którym są takie problemy z zombiakami, radziłbym go zaorać, i postawić jakiś normalny, np Debiana.
A jak umiesz wysłać sygnał wait lub waitpid na parencie, który już nie działa, to weź to szybko opatentuj, bo Developerzy Kernela jeszcze tego sposobu nie wdrożyli.
Pozdro
Offline
[quote=pabliszer]...
Skrypt stworzy sobie kakalog pomoc12 gdzie będą pliki pomocnicze (lista plików w danym katalogu).[/quote]
Od tego jest /tmp
Offline
@jacekalex - nie zrozumieliśmy się trochę.
chodzi o to, że ubicie parenta to coś jak amputacja ręki w przypadku złamanego paznokcia. owszem - rodzic [b]powinien[/b] wywołać wait jeśli zrobił forka, ale czasem ma coś innego do zrobienia i wait wywoła w przerwie na kawę. poza tym ubicie parenta wcale nie powoduje ubicia zombiaka - po prostu w takiej sytuacji rolę parenta przejmuje init, a ten faktycznie nie ma nic lepszego do roboty oprócz wajtowania :)
A i tak zombiaka ubić się nie da bo kill działa wyłącznie na żywe procesy.
stąd pomysł usuwania zombie jest mocno chybiony i to trzeba by było pomysłodawcy wyjaśnić.
Offline
[quote=ethanak]@jacekalex - nie zrozumieliśmy się trochę.
chodzi o to, że ubicie parenta to coś jak amputacja ręki w przypadku złamanego paznokcia. owszem - rodzic [b]powinien[/b] wywołać wait jeśli zrobił forka, ale czasem ma coś innego do zrobienia i wait wywoła w przerwie na kawę. poza tym ubicie parenta wcale nie powoduje ubicia zombiaka - po prostu w takiej sytuacji rolę parenta przejmuje init, a ten faktycznie nie ma nic lepszego do roboty oprócz wajtowania :)
A i tak zombiaka ubić się nie da bo kill działa wyłącznie na żywe procesy.
stąd pomysł usuwania zombie jest mocno chybiony i to trzeba by było pomysłodawcy wyjaśnić.[/quote]
Pewnie, żeśmy się nie zrozumieli.
Czasem zombiak powstaje z powodu kłopotu w komunikacji z parentem albo jego chwilowym działaniem, i po chwili znika.
To może jest z 85% wszystkich zombiaków, może nawet więcej, ale nie wszystkie.
Ja raz na Gentusiu kompilowanym gcc-4.5 miałem jazdę z programikiem gnome-sesion, który po jakiejś aktualizacji po uruchomieniu stawał się sam czymś podobnym do zombiaka, tylko ze potrzebował cały wolny ram i cały rdzeń procka, a ubić go się nie dało niczym.
Podejrzewam, że trochę kolizji z bibliotekami systemowymi i podobnych baboli też się określa i kwalifikuje jako zombie, choć geneza powstania takiego potwora jest diametralnie różna.
Jak zwykle w takiej sytuacji jest kolizja miedzy określeniem potocznym a definicją i to tutaj widzę, nić innego.
Co prawda rekord świata na Gentusiu, to był kernel panic po włączeniu Xorga przez 'startx|xinit' podczas, gdy KDM go podnosił prawidłowo,
do dzisiaj nie wiem, dlaczego, w każdym razie ten problem występował u mnie na systemie z włączonym SELINUXEM w trybie targeted i standardowo Grsec&Pax.
W każdym razie podejrzewam, że widziałem trochę więcej "cudacznych" przyczyn anomalii w działaniu programów (czasem powodujących status zombie programu, ale przy różnorakich innych okolicznościach), których w standardowym Ubuntu czy Debianie nie da się zobaczyć, bo takich spraw pilnują Developerzy.
Nie ma jednej możliwej przyczyny anomalii w działaniu programów, i tor postępowania też może być różny w zależności od przyczyny anomalii, nawet, jak jej ktoś nie dał rady zdiagnozować przez debugger.
Pozdro
Ostatnio edytowany przez Jacekalex (2015-08-03 20:30:15)
Offline
[quote=qluk][quote=pabliszer]...
Skrypt stworzy sobie kakalog pomoc12 gdzie będą pliki pomocnicze (lista plików w danym katalogu).[/quote]
Od tego jest /tmp[/quote]
Ścieżkę zawsze można zmienić ( przy pisaniu wygodniej mi było tu gdzie stworzyłem :-) )
Offline
To ci się przyda [url]http://algorytmy.pl/?d=linux[/url]
Offline
[quote=pabliszer][quote=qluk][quote=pabliszer]...
Skrypt stworzy sobie kakalog pomoc12 gdzie będą pliki pomocnicze (lista plików w danym katalogu).[/quote]
Od tego jest /tmp[/quote]
Ścieżkę zawsze można zmienić ( przy pisaniu wygodniej mi było tu gdzie stworzyłem :-) )[/quote]
Uczysz się złych nawyków w ten sposób, rób od razu tak jak powinno, a wejdzie samo w krew i nie trzeba będzie potem dwa dni czyscić kodu. ;)
Offline
Jest jakiś sposób aby w BASHu zrobić tzw. "podfunkcję"? Na przykład daję jakiś warunek if coś tam..., i jakikolwiek byłby wynik (czy warunek by się spełnił lub nie) to żeby skrypt wykonał kolejną czynność (też funkcję if - jeśli warunek tak- to funkcja if coś tam 1; a jeśli nie- to funkcja if coś tam 2).
Offline
Time (s) | Query |
---|---|
0.00012 | SET CHARSET latin2 |
0.00008 | SET NAMES latin2 |
0.00101 | 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.186.56' WHERE u.id=1 |
0.00069 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.15.186.56', 1732220046) |
0.00047 | SELECT * FROM punbb_online WHERE logged<1732219746 |
0.00072 | 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=27604 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00262 | 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=27604 ORDER BY p.id LIMIT 0,25 |
0.00078 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=27604 |
Total query time: 0.00654 s |