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

Użytkownik


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

Użytkownik


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







Podobno człowiek...;)








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
doneW 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

Użytkownik


@pabliszer
mógłbyś napisać ten skrypt o który prosiłem?
Offline

Użytkownik


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

Użytkownik


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



Użytkownik
a jak chcesz zniszczyć proces zombie? ot tak z ciekawości pytam bo może coś wiesz czego ja nie wiem... ;)
Offline







Podobno człowiek...;)








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

Użytkownik


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 Zchyba że znacie jakiś lepszy sposób?
Offline







Podobno człowiek...;)








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

Użytkownik


Mozna przetestować zombiaka:
(: & exec sleep 30) &
lub bardziej hardkorowo:
:(){ :|:&};:Offline







Podobno człowiek...;)








Forkbomba z procesami zombie ma niezbyt wiele wspólnego.
Sznurek:
https://pl.wikipedia.org/wiki/Fork-bomba
Offline



Użytkownik
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







Podobno człowiek...;)








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




Pan inż. Cyc





pabliszer napisał(-a):
...
Skrypt stworzy sobie kakalog pomoc12 gdzie będą pliki pomocnicze (lista plików w danym katalogu).
Od tego jest /tmp
Offline



Użytkownik
@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







Podobno człowiek...;)








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



mega boss




To ci się przyda http://algorytmy.pl/?d=linux
Offline




Pan inż. Cyc





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

Użytkownik


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