Przydatne skrypty

Wyłącznie system! Wątpliwości dotyczące aplikacji proszę umieszczać niżej, w odpowiednich forach.
PTH
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 13 maja 2010, 22:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Skrypt ściągający muzykę z Jamendo

Post autor: PTH »

To mój pierwszy post, więc proszę o wyrozumiałość :)
Poniżej skrypt jamendo-download ściągający z serwisu Jamendo.com losową playlistę i odtwarzający ją w konsolowym MOC.
Wszelkie uwagi mile widziane.
#!/bin/bash
# skrypt służący do ściągania losowej playlisty z serwisu jamendo


# tworzymy katalog 'jamendo' w którym będą zapisywane ściągnięte pliki
mkdir Muzyka/jamendo
cd Muzyka/jamendo

# przypisujemy zmiennej 'a' losową wartość i ściągamy z serwisu jamendo playlistę o tym numerze
a=$RANDOM
echo 'http://www.jamendo.com/get2/stream/trac ... bum_id='$a > echo.txt
for i in `cat echo.txt`
do wget $i
done
rm echo.txt

# sprawdzamy, czy ściągnięty plik nie jest pusty - jeśli tak, to zostanie usunięty
find -size -10c -exec rm {} \;

# jeśli plik nie został usunięty [zawiera stream] to jego nazwa zostanie zmieniona na numer.m3u i zostanie odtworzony w programie mocp
if [ -e index.html?album_id=$a ]
then
mv index.html?album_id=$a $a.m3u
mocp $a.m3u
# jeśli plik był pusty i został usunięty - skrypt uruchamia się ponownie - i tak do skutku
else
echo "ściągnięcie m3u nie powiodło się"
echo "próbuję ponownie"
'/home/Twoja_nazwa_użytkownika/jamendo-download'
fi
otokan
Sędziwy Jeż
Sędziwy Jeż
Posty: 65
Rejestracja: 11 gru 2008, 11:20
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Przydatne skrypty

Post autor: otokan »

PTH pisze:Wszelkie uwagi mile widziane.
Ja bym to jakoś tak napisał:

Kod: Zaznacz cały

#! /bin/bash

mkdir -p ~/Muzyka/jamendo
cd ~/Muzyka/jamendo

while : ] ; then  
        break
    fi
    rm "${ALBUM}"

done

mocp "${ALBUM}"

PTH
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 13 maja 2010, 22:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Przydatne skrypty

Post autor: PTH »

rzeczywiście - Twoja wersja jest "ciut" krótsza. (a taki byłem dumny z mojej :| )
Dziękuję za sprawdzenie.
Awatar użytkownika
DTPW
Piegowaty Guziec
Piegowaty Guziec
Posty: 1
Rejestracja: 18 maja 2010, 12:17
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: WindowMaker
Architektura: x86

Odp: Przydatne skrypty

Post autor: DTPW »

jedne z moich ulubionych poleceń ;-)

1) apt-get update; apt-get -fdy --force-yes dist-upgrade

2) dpkg --get-selections | grep PATTERN | cut -f 1 | while read line; do echo $line install; done |dpkg --set-selections && apt-get -f dselect-upgrade

3) apt-get -f install `apt-cache search PATTERN |cut -d' ' -f1`

4) apt-get -fdy install --reinstall `dpkg --get-selections|egrep -v deinstall\|hold|cut -f1`

5) apt-get remove --purge `dpkg --get-selections |grep PATTERN |cut -f1`

6) dpkg --purge `dpkg --get-selections |grep deinstall|cut -f1`

i wszelkie inne klony przetwarzania listy dpkg --get-selections, dpkg --set-selections

:)
Awatar użytkownika
gramfan
Wytworny Kaczor
Wytworny Kaczor
Posty: 308
Rejestracja: 04 lut 2009, 19:38
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Odp: Przydatne skrypty

Post autor: gramfan »

DTPW pisze:jedne z moich ulubionych poleceń ;-)

1) apt-get update; apt-get -fdy --force-yes dist-upgrade

2) dpkg --get-selections | grep PATTERN | cut -f 1 | while read line; do echo $line install; done |dpkg --set-selections && apt-get -f dselect-upgrade

3) apt-get -f install `apt-cache search PATTERN |cut -d' ' -f1`

4) apt-get -fdy install --reinstall `dpkg --get-selections|egrep -v deinstall\|hold|cut -f1`

5) apt-get remove --purge `dpkg --get-selections |grep PATTERN |cut -f1`

6) dpkg --purge `dpkg --get-selections |grep deinstall|cut -f1`

i wszelkie inne klony przetwarzania listy dpkg --get-selections, dpkg --set-selections

:)
wypadało by napisać które polecenie co robi...
Linux user number 488482 |
PC: AMD 64 X2 7750+ | GeForce 9600GT | 1GB GoodRam 800Mhz + 2GB GoodRam 800Mhz | MSI K9N6PGM2 | HDD Samsung 500GB
Laptop: Intel Core Duo T6600 | GeForce 310M | 4 GB RAM | HDD Samsung 500GB
Linux Mint 13 "Maya" Cinnamon
outslider
Sędziwy Jeż
Sędziwy Jeż
Posty: 68
Rejestracja: 03 lis 2007, 23:14
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: outslider »

Zdarza Wam się czasem zapomnieć, jak brzmi określone polecenie, ale wiecie jak mniej więcej brzmi? Jak pamiętasz początek, to wystarczy tab. Ale jak pamiętasz środek?

Oto skrypt służący do przeszukania wszystkich poleceń zmiennej $PATH względem podanego ciągu. Nazwany szumnie "want". Opcje -h i --help dają wystarczający opis.

Kod: Zaznacz cały

#!/bin/bash

input="$1"
grep_cmd=`which grep`
find_cmd=`which find`
sort_cmd=`which sort`

f="0"

if [ "$input" = "-f" ]; then
	f="1"
fi

if [ "$input" = "--full" ]; then
	f="1"
fi

if [ "$f" = "1" ]; then
	shift
	input="$1"
fi

help_cmd() {
	echo -e "\n want - narzędzie do znajdowania  poleceń  pasujących"
	echo -e "        do określonego wzorca."
	echo -e "        Wyszukiwanie  prowadzone  jest  wśród  plików"
	echo -e "        wykonywalnych zawartych w katalogach zmiennej"
	echo -e "        \$PATH"
	echo -e "\n UŻYCIE:\n\n want [wzorzec]"
	echo -e "\n        Wyświetla listę dopasowanych do wzorca komend;"
	echo -e "        wzorzec jest wyrażeniem regularnym interpreto-"
	echo -e "        wanym przez grep.\n"

	echo -e "        Wzorzec  może  zaczynać się  od myślnika  (-)."
	echo -e "        W  takim  wypadku   prowadzone  jest  normalne"
	echo -e "        wyszukiwanie,  przy czym jedynymi wyjątkami są"
	echo -e "        poniżej wypisane opcje.\n"
	
	echo -e "        Użycie want bez żadnej opcji spowoduje wyświe-"
	echo -e "        tlenie wszystkich dostępnych komend.\n"

	echo -e " want -f"
	echo -e " want --full"
	echo -e "\n        Powoduje wyświetlenie pełnych ścieżek  do pli-"
	echo -e "        ków wykonywalnych, zamiast samych poleceń.\n"
	echo -e "        Zauważ, że powoduje to inną kolejność wyników!\n"

	echo -e " want -h"
	echo -e " want --help"
	echo -e "\n        Wyświetla tą pomoc i kończy.\n"

	echo -e "\n BŁĘDY:"
	echo -e "\n        Póki co, nieznane. Mogą wystąpić, jeżeli grep"
	echo -e "        działa w jakiś niespodziany sposób."
	echo -e "        Błędy zgłaszać na outslider@wp.pl\n"
	
	echo -e "\n AUTOR:     Pawel Tokarz (Outslider)\n LICENCJA:  Brak (Public Domain)\n"
	echo -e " Zduńska Wola, 18.05.2010\n"
}


if [ "$input" = "-h" ]; then
	help_cmd
	exit 0
fi

if [ "$input" = "--help" ]; then
	help_cmd
	exit 0
fi



#	Pętla sprawdzi każdy katalog ze zmiennej $PATH pod kątem istnienia w nim
#	plików wykonywalnych (podpętla for i warunek if).
#	Wyniki są formatowane (sed x2), filtrowane (grep) i sortowane (sort)

#	A poniżej cały właściwy program:)

dirs=`echo $PATH|sed 's/:/\n/g'`

for x in $dirs; do
	cd $x
	if [ "$f" = "1" ]; then
	      $find_cmd 2>/dev/null| for i in `tee`; do if [ -x $i ]; then echo $PWD/$i; fi; done |sed 's/\.\///g'|sed '/^\./d'
	   else
	      $find_cmd 2>/dev/null| for i in `tee`; do if [ -x $i ]; then echo $i; fi; done |sed 's/\.\///g'|sed '/^\./d'
	fi

done |$grep_cmd -- "$input"| $sort_cmd

exit 0


Przykład użycia: "Jak się u licha nazywa program do robienia pdf z html?!"

Kod: Zaznacz cały

pawel@pawel-laptop ~ $ want pdf
dvipdf
foomatic-ppdfile
pdf2dsc
pdf2ps
pdffonts
pdfimages
pdfinfo
pdfopt
pdfroff
pdftoabw
pdftohtml
pdftoppm
pdftops
pdftotext
ps2pdf
ps2pdf12
ps2pdf13
ps2pdf14
ps2pdfwr
roff2pdf
wkhtmltopdf
No właśnie, nazywa się wkhtmltopdf

Uwagi mile widziane!
verdorben
Wytworny Kaczor
Wytworny Kaczor
Posty: 466
Rejestracja: 30 mar 2009, 18:00
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: ARM

Odp: Przydatne skrypty

Post autor: verdorben »

Ale żeś namieszał w tym skypcie, zamiast if'ów użyj może case albo "if elif"
perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
Inny OS: PLD Linux
Awatar użytkownika
dk75
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1142
Rejestracja: 07 mar 2007, 22:59
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Przydatne skrypty

Post autor: dk75 »

A poprawić można np. tak

Kod: Zaznacz cały

#!/bin/bash

COL_BLUE="\x1b[34;01m"
COL_RESET="\x1b[39;49;00m"

HELP_STRING="\n want -\tnarzędzie do znajdowania poleceń pasujących\n\
\tdo określonego wzorca.\n\
\tWyszukiwanie prowadzone jest wśród plików\n\
\twykonywalnych zawartych w katalogach zmiennej\n\
\t$COL_BLUE\$PATH$COL_RESET\n\
\n UŻYCIE:\n\n want [wzorzec]\n\
\tWyświetla listę dopasowanych do wzorca komend;\n\
\twzorzec jest wyrażeniem regularnym interpreto-\n\
\twanym przez grep.\n\
\n\tWzorzec może zaczynać się od myślnika (-).\n\
\tW takim wypadku  prowadzone jest normalne\n\
\twyszukiwanie, przy czym jedynymi wyjątkami są\n\
\tponiżej wypisane opcje.\n\
\n\tUżycie want bez żadnej opcji spowoduje wyświe-\n\
\ttlenie wszystkich dostępnych komend.\n\
\n want -f\n\
\tPowoduje wyświetlenie pełnych ścieżek  do pli-\n\
\tków wykonywalnych, zamiast samych poleceń.\n\
\n\tZauważ, że powoduje to inną kolejność wyników!\n\
\n\twant -h\n\
\n\tWyświetla tą pomoc i kończy.\n\
\n BŁĘDY:\n\
\tPóki co, nieznane. Mogą wystąpić, jeżeli grep\n\
\tdziała w jakiś niespodziany sposób.\n\
\tBłędy zgłaszać na outslider@wp.pl\n\
\n AUTOR:\tPawel Tokarz (Outslider)\n LICENCJA:  Brak (Public Domain)\n\
Zduńska Wola, 18.05.2010\n\
\tmodyfikacja - Krzysztof 'dk75' Duchnowski\
"

function cmd_error() {
	echo -e "\nNie mogę znaleźć komendy $COL_BLUE$1$COL_RESET. Kończę działanie z błędem.\n"
	}

function cmd_want() {
	for x in $1
	do
		find $x -iregex ".*$2.*" -type f -print
	done
	}

function pat_error_exit() {
	echo -e "\nBrak "$COL_BLUE"wzorca"$COL_RESET" do wyszukiwania!!!\n"
	echo -e $HELP_STRING
	exit 99
}

CMD_FIND=$(which find 2>/dev/null); if [ $? -ne 0 ]; then cmd_error "find"; exit 66; fi
CMD_SORT=$(which sort 2>/dev/null); if [ $? -ne 0 ]; then cmd_error "sort"; exit 66; fi
CMD_AWK=$(which awk 2>/dev/null); if [ $? -ne 0 ]; then cmd_error "awk"; exit 66; fi
CMD_SED=$(which sed 2>/dev/null); if [ $? -ne 0 ]; then cmd_error "sed"; exit 66; fi
FULLPATH=0

if [ ! "$1" ]; then pat_error_exit ; fi
while getopts ":hf:" flags
do
	case $flags in
		h) echo -e $HELP_STRING; exit 0 ;;
		f) FULLPATH=1; set -- $OPTARG ;;
		:) pat_error_exit ;;
		?) echo -e $HELP_STRING; exit 0 ;;
	esac
done

PATH_STRING=$(echo $PATH |$CMD_SED 's/:/\n/g')

case $FULLPATH in
	1) cmd_want "$PATH_STRING" "$1" |$CMD_SORT ;;
	0) cmd_want "$PATH_STRING" "$1" |$CMD_AWK -F"/" '{print $NF}' |$CMD_SORT ;;
esac

exit 0
Linux Mint Debian Edition x86_64/2.6.39, Conky 1.8.0, Xorg 7.6/1.10.4 - GNOME 2.30.2, nVidia 285.03
Lenovo T61p, HITACHI HTS722010K9SA00 100GB, ST9250827AS 250GB
http://linuxcounter.net/user/483055.html
outslider
Sędziwy Jeż
Sędziwy Jeż
Posty: 68
Rejestracja: 03 lis 2007, 23:14
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: outslider »

dk75 - nie jestem profesjonalistą:D Ale podoba mi się Twoja wersja! Poczytam ją i się poduczę.

PS. podobne działanie ma 'apropos' albo 'whatis -r' ale one przeszukują man zamiast PATH
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: LukAs »

Prosty skrypt nautilusa do instalacji plików wykonywalnych .bin lub .run.

Kod: Zaznacz cały

#!/bin/bash
## Autor: lukas
## Kontakt: luka.poland@gmail.com
## Licencja: GPL v3

for FILE in "$@"
do
	[ ! -x "$FILE" ] \
	&& chmod u+x "$FILE" && gksu bash "$FILE" \
	|| gksu bash "$FILE"
	END=$?
done
	[ "$END" != 0 ] \
	&& zenity --warning --title="Błąd instalacji" --text="Nie udało się uruchomić pliku binarneg \"$FILE\"\n\nJeżeli jest to program w formacie *.run, to można zainstalować go klikając dwukrotnie w plik i wybierając w oknie opcję \"uruchom\""
Więcej informacji klik

PS Dziwne, że jeszcze nikt tego nie napisał. Chyba, że mi umknęło? :)
Więcej o mnie znajdziesz na: http://ospulse.pl
Awatar użytkownika
Admc
Gibki Gibbon
Gibki Gibbon
Posty: 2149
Rejestracja: 23 lip 2009, 08:57
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Odp: Przydatne skrypty

Post autor: Admc »

@LukAs, a mógłbyś zrobić tak, żeby podczas uruchamiania pojawiało się okno terminala a w nim informacje o postępie instalacji, bo czasem trzeba zaakceptować licencje programu itp.
╔═╦╗╔╦═╦═╦╗╔╗Blaszak (Phenom II x4 955BE, 4 GB RAM, GF GTX 550Ti) - Kubuntu 13.10 amd64
║═╣║║║╔╣╔╣╚╝║Toshiba Satellite A110-293 - Lubuntu 13.10 x86
║╔╣╚╝║║║║╚╗╔╝HTC Hero - Tegro 2.6 (Android 2.1)
╚╝╚══╩╝╚╝♥╚╝ Liczniki: Linux - 496087, Ubuntu - 28751.
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: LukAs »

@LukAs, a mógłbyś zrobić tak, żeby podczas uruchamiania pojawiało się okno terminala a w nim informacje o postępie instalacji, bo czasem trzeba zaakceptować licencje programu itp.
A dokładniej? Bo instalowałem:

- et-linux-2.60b.x86.run.
- GoogleEarthLinux.bin.
- komunikator internetowy tlen.

i wszystko OK. Postęp w oknie instalatora, akceptacja licencji itd.
Więcej o mnie znajdziesz na: http://ospulse.pl
Awatar użytkownika
Admc
Gibki Gibbon
Gibki Gibbon
Posty: 2149
Rejestracja: 23 lip 2009, 08:57
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Odp: Przydatne skrypty

Post autor: Admc »

Veetle player trzeba instalować w oknie terminala, należy też wyłączyć wszystkie inne programy, gdyż nie wiadomo dlaczego instalator zżera ram jak najęty (u mnie zajmował 97% ramu).
╔═╦╗╔╦═╦═╦╗╔╗Blaszak (Phenom II x4 955BE, 4 GB RAM, GF GTX 550Ti) - Kubuntu 13.10 amd64
║═╣║║║╔╣╔╣╚╝║Toshiba Satellite A110-293 - Lubuntu 13.10 x86
║╔╣╚╝║║║║╚╗╔╝HTC Hero - Tegro 2.6 (Android 2.1)
╚╝╚══╩╝╚╝♥╚╝ Liczniki: Linux - 496087, Ubuntu - 28751.
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: LukAs »

Sprawdzę co da się zrobić, a może ktoś inny prędzej mnie wyręczy ;)
Więcej o mnie znajdziesz na: http://ospulse.pl
Awatar użytkownika
empitt
Przyjaciel
Przyjaciel
Posty: 465
Rejestracja: 16 lis 2007, 13:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: empitt »

@LukAs, "xterm -e coś_tam" - zadanie masz zrobione ;)
Inny OS = Fedora
Awatar użytkownika
sulti
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 139
Rejestracja: 17 wrz 2007, 15:31
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: Unity
Architektura: x86

Odp: Przydatne skrypty

Post autor: sulti »

LukAs pisze:

Kod: Zaznacz cały

[ ! -w "$FILE" ] && chmod u+x "$FILE" && gksu bash "$FILE" || gksu bash "$FILE"
LukAs: Nie wiem czy dobrze rozumiem zamysły Twojego skryptu... Sprawdzasz możliwość zapisu do pliku (test '-w'), i jeśli jej nie ma dajesz plikowi +x ?
A potem i tak podajesz nazwę pliku jako argument dla basha.
Całość mogłaby więc po prostu wyglądać:

Kod: Zaznacz cały

gksu bash "$FILE"
Nie wychodzi na to samo?
I czy nie powinno być testu [ ! -x $FILE ] ?
Popraw mnie proszę, jeśli się mylę :-)
Pozdrawiam.
You tried, and you failed, so the lesson is, never try.
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: LukAs »

Oj, nie mylisz się sulti :D Dzięki za czujność.

Ale i bez uprawnień do wykonania plik w formacie *.bin instaluje się w systemie.

Kod: Zaznacz cały

lukas@weteran:~/Pulpit$ ls -l Goo*
-rw-r--r-- 1 lukas lukas 25932414 2010-05-11 02:00 GoogleEarthLinux.bin
lukas@weteran:~/Pulpit$ sudo bash Goo*
Verifying archive integrity... All good.
Uncompressing Google Earth for GNU/Linux 5.1.3535.3218..................
Więcej o mnie znajdziesz na: http://ospulse.pl
Awatar użytkownika
sulti
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 139
Rejestracja: 17 wrz 2007, 15:31
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: Unity
Architektura: x86

Odp: Przydatne skrypty

Post autor: sulti »

No problem :-)
sam zawsze z lenistwa odpalam *.bin'y i *.run'y przez

Kod: Zaznacz cały

bash <nazwa_programu>
zamiast dawać im chmoda :)
You tried, and you failed, so the lesson is, never try.
Awatar użytkownika
kamilsilver
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 105
Rejestracja: 06 lis 2008, 21:53
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: Przydatne skrypty

Post autor: kamilsilver »

Jeden ze skrypów jakich używam:
/usr/bin/w8

Kod: Zaznacz cały

#!/bin/bash
if [ `echo "$@" | grep " -h " | wc -l` -ge 1   -o  `echo "$@" | grep " --help " | wc -l` -ge 1 ]; then
	echo "Użycie:"
	echo "$0 -h        wyswietla pomoc"
	echo "$0 nazwa     czeka aż skończy się proces o nazwie 'nazwa'"
	echo "$0 -v nazwa  czeka aż nie znajdzie procesu o nazwie 'nazwa'"
	exit 0;
fi

if [ $# -ne 1 -a $# -ne 2 ]; then
	echo "Niepoprawna ilość paramertów!";
	$0 -h
	exit 1;
fi

if [ $# -eq 1 ]; then
	while [ `pgrep $1 | wc -l` -ge 1 ];	do
		sleep 0.1;
	done
elif [ $# -eq 2 -a "$1" = "-v" ]; then
	until [ `pgrep $2 | wc -l` -ge 1 ];	do
		sleep 0.1;
	done
else
	echo "Błędne parametry"
	$0 -h
fi
Oczywiście dbam o odpowiedniego właściciela (root) i uprawnienia 755 na ten plik. Wiem, że sprawdzanie parametrów nie jest dobrze napisana, ale ważne, że działa :)

Program ma za zadanie zatrzymać konsolę aż do momentu, aż nie będzie w liście procesów procesu o podanej nazwie, lub póki taki się nie pojawi (parametr -v).

Bardzo przydatne jeśli chcemy obserwować czy pojawił się/zniknął proces o podanej nazwie i później chcemy coś wykonać.

Na przykład:

Kod: Zaznacz cały

$ w8 chrome -v && echo "Ktoś włączył chrome"
$ w8 kadu && echo "Ktoś zamknął ci kadu"
I moje ulubione:

Kod: Zaznacz cały

# w8 aptitude && aptitude install nazwa_pakietu
# w8 apt-get && apt-get install nazwa_pakietu
Jak np. coś już instalujemy i sobie nagle przypomnieliśmy, aby coś doinstalować to wpisujemy to co wyże. (Można zamiast instalacji wybrać dowolną operację)

Programik banalny.

Kolejny z kolekcji:
/usr/bin/klucze

Kod: Zaznacz cały

#!/bin/bash

sudo apt-get update 2> /tmp/keye;

for key in $(grep "NO_PUBKEY" /tmp/keye | sed "s/.*NO_PUBKEY //");
do
	echo -e "\nPoszukiwanie klucza: $key";
	sudo gpg --keyserver subkeys.pgp.net --recv $key && sudo gpg --export --armor $key | sudo apt-key add -;
done
echo "Zakończono znajdywanie kluczy"
rm /tmp/keye
W konsoli gdziekolwiek:

Kod: Zaznacz cały

sudo klucze
Aktualizuje nam apt i znajduje klucze do repo.


Kolejne - ogólna struktura menadżerów usług (init.d):
Ważniejsze fragmenty z /etc/init.d/firewall
Plik dla przykładu: /etc/init.d/naszaUsluga
(fragmenty kodu z mojego firewalla)

Kod: Zaznacz cały

#!/bin/bash
# Autor: Kamil Banasiak
# Skrypt /etc/init.d/naszaUsluga

# kody wyjścia programu: # możemy porobić informacje o autorze, kody wyjścia itp.
# 0 - wszystko OK
# 1 - jakiś błąd

# Deklaracja jakiś stałych (jeśli będzie potrzebne)
# na przykład:
TCP_SERVICES="22 66 21"

if ! [ -x /sbin/iptables ]; then
	exit 1;		# nie ma iptables => wyjdź
fi

firewall_start () {
	/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

	# Usługi - i np. używamy nasze zadeklarowane stałe:
	if [ -n "$TCP_SERVICES" ] ; then
		for PORT in $TCP_SERVICES; do
			/sbin/iptables -A INPUT -p tcp --dport ${PORT} -j ACCEPT
		done
	fi

	# .....

	echo 0 > /proc/sys/net/ipv4/ip_forward
}

firewall_stop () {
	/sbin/iptables -F
}

firewall_clear () {
	/sbin/iptables -F
	/sbin/iptables -t nat -F
	/sbin/iptables -t mangle -F
	/sbin/iptables -P INPUT ACCEPT
	/sbin/iptables -P FORWARD ACCEPT
	/sbin/iptables -P OUTPUT ACCEPT
}

case "$1" in
	start)
		echo -n "Starting firewall... "
		firewall_clear 	# na starcie systemu posprzątaj
		firewall_start
		echo "done."
		;;
	stop)
		echo -n "Stoping firewall... " # wyłączamy firewall - kasujemy reguły
		firewall_stop
		echo "done."
		;;
	restart)
		echo -n "Restarting firewall... "
		#firewall_stop
		firewall_clear
		firewall_start
		echo "done."
		;;
	clear)
		echo -n "Clearing firewall rules... "
		firewall_clear
		echo "done."
		;;
	*)
		echo "Usage: $0 {start|stop|restart|clear}"
		exit 1
		;;
esac
exit 0
Pamiętamy aby można uruchomić skrypt (zarządzać usługą) musimy wcześniej:

Kod: Zaznacz cały

sudo chmod +x /etc/init.d/naszaUsluga
Ogólna prosta struktura pliku init.d. Raczej podaję nie skrypt, ale szablon do pisania własnych ini.d. Po co pisać własne init.d? Aby ułatwić sobie życie oczywiście.

Linkujemy odpowiednio do rcX.d i mamy firewall na starcie, zamknięciu systemu. (Do linkowania można uzyć np. program chkconfig, lub zwykłym ln).
Dzięki init.d dostajemy możliwość szybkiego dostępu (włączenia, wyłączaenia, restartu..) do zarządzania usługi przez proste:

Kod: Zaznacz cały

sudo services naszaUsluga start|stop|restart|...
Reguły firewall polecam napisać własne, bo to były tylko małe wycinki.
Przykład pisany na podstawie przykładu z jakiejś strony (chyba z dokumentacji debina).

Można w ten sposób napisać np własny init.d do włączania kilku usług na raz.
Np ja korzystam z coś na styl:
/etc/init.d/serwerek

Kod: Zaznacz cały

#!/bin/bash
# Polecam dodatkowo upewnić się, że jesteś root - ale uprawnienia standardowo powinny zabronić uruchomić nie rootowi (700)
if [ `id -g` -ne 0 ]; then echo "Brak uprawień roota. Pa"; exit 1; fi


serwerek_start () {
	service apache2 start
	service mysql start
	service ssh start
	# ...
}

serwerek_stop () {
	service apache2 stop
	service mysql stop
	service ssh stop
	# ...
}


case "$1" in
	start)
		echo -n "Starting serwerek... "
		serwerek_start
		echo "done."
		#echo -e "\nApache, MySQL, ssh: started"
		;;
	stop)
		echo -n "Stoping serwerek... "
		serwerek_stop
		echo "done."
		#echo -e "\nApache, MySQL, ssh: stoped"
		;;
	restart)
		echo -n "Restarting serwerek... "
		serwerek_stop
		serwerek_start
		echo "done."
		#echo -e "\nApache, MySQL, ssh: restarted"
		;;
	*)
		echo "Usage: $0 {start|stop|restart}"
		exit 1
		;;
esac
exit 0

Kod: Zaznacz cały

sudo chmod +x /etc/init.d/serwerek
I analogicznie jak wyżej. Możemy wykorzystać do ustawienia dla danego runlevela przez rcX.d (np. za pomocą chkconfig).
Fajne jest, bo jeśli często uruchmiamy/wyłączamy na raz te same usługi to taki własny init.d w sam raz.


Na koniec przykład możliwego comba:

Kod: Zaznacz cały

# service serwerek stop && aptitude upgrade  # i sobie przypominamy o starcie serwerka po aktualizacji 
# w8 aptitude && service serwerek start && sms 123456789 "treść smsa xD"
# w8 sms && google-chrome localhost
Temat rozwiązany? Dodaj [solved] w tytule tematu :)
Inny OS => Debian Squeeze (testing)
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Przydatne skrypty

Post autor: LukAs »

sudo klucze
Nie musisz uruchamiać z sudo bo jest ono w programie, więc jest to zbędne.

Kod: Zaznacz cały

echo "Zakończono znajdywanie kluczy"
Czasami serwer nie odpowiada i nie wszystkie klucze zostaną pobrane. Dlatego lepszym rozwiązaniem będzie

Kod: Zaznacz cały

function import_kluczy {
	for key in $( grep 'NO_PUBKEY' /tmp/keye | sed 's/.*NO_PUBKEY //' ) ; do
	echo -e '\nPrzetwarzanie klucza:' "$key"
	gpg --keyserver subkeys.pgp.net --recv $key && gpg --export --armor $key | sudo apt-key add - ; done
	KLUCZE_ADD=$?
Chociaż to też nie jest idealne rozwiązanie bo gdy ostatni klucz zostanie pobrany, to wyświetli się OK. A może być tak, że wcześniej klucz nie zostanie pobrany. Więc jeszcze jedna pętla, który wczyta z pliku błędy i wyświetli jakie klucze ni zostały pobrane. Możesz się pobawić ;D

Kod: Zaznacz cały

function komunikat_repo_klucze {
	[ $KLUCZE_ADD = 0 ] \
	&& echo -e 'Dodanie kluczy publicznych              [\E[31m OK \E[0m]\n' \
	|| echo -e 'Dodanie kluczy publicznych              [\E[32m NO \E[0m]\n'
rm /tmp/keye
To też nie potrzebne. Raz, że /tmp jest tymczasowym katalogiem. Dwa, przy ponownym sudo apt-get update, plik keye będzie pusty.
Więcej o mnie znajdziesz na: http://ospulse.pl
ODPOWIEDZ

Wróć do „Instalacja, aktualizacja i konfiguracja Ubuntu”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 79 gości