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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2015-07-30 11:54:56

  pabliszer - Użytkownik

pabliszer
Użytkownik
Zarejestrowany: 2009-11-05

Trening skrypty BASH

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

 

#2  2015-07-30 20:01:17

  Bitels - Użytkownik

Bitels
Użytkownik
Zarejestrowany: 2012-10-31

Re: Trening skrypty BASH

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

 

#3  2015-07-31 07:09:39

  pabliszer - Użytkownik

pabliszer
Użytkownik
Zarejestrowany: 2009-11-05

Re: Trening skrypty BASH

Możesz podrzucić ls z przykładowego folderu?

Offline

 

#4  2015-08-01 10:51:41

  macios4x - Użytkownik

macios4x
Użytkownik
Zarejestrowany: 2012-12-10

Re: Trening skrypty BASH

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ć?


Zwolennik Open Source, użytkownik Arch, Debian

Offline

 

#5  2015-08-01 12:02:13

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Trening skrypty BASH

[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)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#6  2015-08-01 14:49:50

  pabliszer - Użytkownik

pabliszer
Użytkownik
Zarejestrowany: 2009-11-05

Re: Trening skrypty BASH

[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.

Kod:

#/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

 

#7  2015-08-01 17:17:58

  macios4x - Użytkownik

macios4x
Użytkownik
Zarejestrowany: 2012-12-10

Re: Trening skrypty BASH

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


Zwolennik Open Source, użytkownik Arch, Debian

Offline

 

#8  2015-08-02 02:26:21

  Bitels - Użytkownik

Bitels
Użytkownik
Zarejestrowany: 2012-10-31

Re: Trening skrypty BASH

dzięki sprawdzę jak złapię chwilę wolnego

Offline

 

#9  2015-08-02 06:25:06

  pabliszer - Użytkownik

pabliszer
Użytkownik
Zarejestrowany: 2009-11-05

Re: Trening skrypty BASH

[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

 

#10  2015-08-02 09:45:33

  macios4x - Użytkownik

macios4x
Użytkownik
Zarejestrowany: 2012-12-10

Re: Trening skrypty BASH

[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"


Zwolennik Open Source, użytkownik Arch, Debian

Offline

 

#11  2015-08-02 11:55:03

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Trening skrypty BASH

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


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#12  2015-08-02 14:11:34

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Trening skrypty BASH

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)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#13  2015-08-02 15:51:26

  macios4x - Użytkownik

macios4x
Użytkownik
Zarejestrowany: 2012-12-10

Re: Trening skrypty BASH

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 Z

chyba że znacie jakiś lepszy sposób?


Zwolennik Open Source, użytkownik Arch, Debian

Offline

 

#14  2015-08-02 16:20:15

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Trening skrypty BASH

[quote=macios4x]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 Z

chyba że znacie jakiś lepszy sposób?[/quote]

Kod:

ps -eo pcpu,cmd | sort -k 1 -nr | head -n 1

Cgroup::Cpu i też trochę Cgroup::Cpuset

Kod:

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


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#15  2015-08-02 16:33:39

  macios4x - Użytkownik

macios4x
Użytkownik
Zarejestrowany: 2012-12-10

Re: Trening skrypty BASH

Mozna przetestować zombiaka:

Kod:

(: & exec sleep 30) &

lub bardziej hardkorowo:

Kod:

:(){ :|:&};:

Zwolennik Open Source, użytkownik Arch, Debian

Offline

 

#16  2015-08-02 16:55:09

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Trening skrypty BASH

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


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#17  2015-08-02 16:57:38

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Trening skrypty BASH

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ę...


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#18  2015-08-02 17:53:17

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Trening skrypty BASH

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


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#19  2015-08-03 11:54:12

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Trening skrypty BASH

[quote=pabliszer]...
Skrypt stworzy sobie kakalog pomoc12 gdzie będą pliki pomocnicze (lista plików w danym katalogu).[/quote]
Od tego jest /tmp

Offline

 

#20  2015-08-03 12:41:43

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Trening skrypty BASH

@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ć.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#21  2015-08-03 20:28:42

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Trening skrypty BASH

[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)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#22  2015-08-06 19:01:18

  pabliszer - Użytkownik

pabliszer
Użytkownik
Zarejestrowany: 2009-11-05

Re: Trening skrypty BASH

[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

 

#23  2015-08-07 16:46:39

  tajwan - boss

tajwan
boss
Skąd: Śląsk
Zarejestrowany: 2010-03-30

Re: Trening skrypty BASH

To ci się przyda [url]http://algorytmy.pl/?d=linux[/url]


NIGDY WIĘCEJ TESTING Z KTÓRYM SĄ SAME PROBLEMY !!!

Offline

 

#24  2015-08-07 18:49:58

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: Trening skrypty BASH

[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

 

#25  2015-08-07 19:07:43

  macios4x - Użytkownik

macios4x
Użytkownik
Zarejestrowany: 2012-12-10

Re: Trening skrypty BASH

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).


Zwolennik Open Source, użytkownik Arch, Debian

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.013 seconds, 13 queries executed ]

Informacje debugowania

Time (s) Query
0.00011 SET CHARSET latin2
0.00007 SET NAMES latin2
0.00090 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='13.58.188.166' WHERE u.id=1
0.00122 UPDATE punbb_online SET logged=1732233248 WHERE ident='13.58.188.166'
0.00025 SELECT * FROM punbb_online WHERE logged<1732232948
0.00088 DELETE FROM punbb_online WHERE ident='18.219.18.238'
0.00049 DELETE FROM punbb_online WHERE ident='18.224.55.63'
0.00048 SELECT topic_id FROM punbb_posts WHERE id=289396
0.00005 SELECT id FROM punbb_posts WHERE topic_id=27604 ORDER BY posted
0.00029 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.00025 SELECT search_for, replace_with FROM punbb_censoring
0.00318 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.00098 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=27604
Total query time: 0.00915 s