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
macios4x napisał(-a):
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ć?
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
Bitels napisał(-a):
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
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
macios4x napisał(-a):
@pabliszer
mógłbyś napisać ten skrypt o który prosiłem?
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
pabliszer napisał(-a):
macios4x napisał(-a):
@pabliszer
mógłbyś napisać ten skrypt o który prosiłem?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%?
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
macios4x napisał(-a):
Z tego można coś "skręcić":
Kod:
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 Zchyba że znacie jakiś lepszy sposób?
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 nie istnieje 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
pabliszer napisał(-a):
...
Skrypt stworzy sobie kakalog pomoc12 gdzie będą pliki pomocnicze (lista plików w danym katalogu).
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 powinien 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
ethanak napisał(-a):
@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 powinien 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ć.
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
qluk napisał(-a):
pabliszer napisał(-a):
...
Skrypt stworzy sobie kakalog pomoc12 gdzie będą pliki pomocnicze (lista plików w danym katalogu).Od tego jest /tmp
Ścieżkę zawsze można zmienić ( przy pisaniu wygodniej mi było tu gdzie stworzyłem :-) )
Offline
To ci się przyda http://algorytmy.pl/?d=linux
Offline
pabliszer napisał(-a):
qluk napisał(-a):
pabliszer napisał(-a):
...
Skrypt stworzy sobie kakalog pomoc12 gdzie będą pliki pomocnicze (lista plików w danym katalogu).Od tego jest /tmp
Ścieżkę zawsze można zmienić ( przy pisaniu wygodniej mi było tu gdzie stworzyłem :-) )
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