Kirjoittaja Aihe: Ohjeita shell-skriptaukseen (bash)  (Luettu 377067 kertaa)

nm

  • Käyttäjä
  • Viestejä: 16429
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #100 : 09.10.11 - klo:13.32 »
Törmäsin kiusalliseen kuvioon ylen liveradion kanssa.
Ajoittain otan talteen jotain komennolla:
mplayer -dumpstream -cache 1024  -dumpfile $outfile &
ja kutsuvassa skiptissä on sleep joka ampuu homman alas annetun ajan jälkeen.

Mutta, liian usein eka yritys epäonnistuu ja outfileen tallentuu vain:
[Reference]
Ref1=http://mediak.yle.fi/liveradiosuomi?MSWMExt=.asf
Ref2=http://10.1.6.5:80/liveradiosuomi?MSWMExt=.asf

YLE on siitynyt nettilähetyksissään Flash/RTMP-tekniikkaan ja nuo vanhat ASF-streamit saattavat hävitä kokonaan jossain vaiheessa. Ylen nykyiset RTMP-nettiradiot saa talteen RTMPDump-YLEllä. Näiden lähetysten etuna on myös MP3-muotoinen ääni WMA:n sijaan, joskin ääniraita on FLV-säiliön sisällä.

Radio Suomi tallentuu komennolla:

Koodia: [Valitse]
yle-dl "http://areena.yle.fi/player/index.php?channel=3&language=fi"
Ajaaskel on julkaissut nämä asennuspaketit:

64-bittinen: http://www.homelinuxpc.com/download/rtmpdump-yle_20110714-0_amd64.deb
32-bittinen: http://www.homelinuxpc.com/download/rtmpdump-yle_20110714-0_i386.deb

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #101 : 09.10.11 - klo:20.32 »
Törmäsin kiusalliseen kuvioon ylen liveradion kanssa.
Ajoittain otan talteen jotain komennolla:
mplayer -dumpstream -cache 1024  -dumpfile $outfile &
ja kutsuvassa skiptissä on sleep joka ampuu homman alas annetun ajan jälkeen.

Mutta, liian usein eka yritys epäonnistuu ja outfileen tallentuu vain:
[Reference]
Ref1=http://mediak.yle.fi/liveradiosuomi?MSWMExt=.asf
Ref2=http://10.1.6.5:80/liveradiosuomi?MSWMExt=.asf

YLE on siitynyt nettilähetyksissään Flash/RTMP-tekniikkaan ja nuo vanhat ASF-streamit saattavat hävitä kokonaan jossain vaiheessa. Ylen nykyiset RTMP-nettiradiot saa talteen RTMPDump-YLEllä. Näiden lähetysten etuna on myös MP3-muotoinen ääni WMA:n sijaan, joskin ääniraita on FLV-säiliön sisällä.

Radio Suomi tallentuu komennolla:

Koodia: [Valitse]
yle-dl "http://areena.yle.fi/player/index.php?channel=3&language=fi"
Ajaaskel on julkaissut nämä asennuspaketit:

64-bittinen: http://www.homelinuxpc.com/download/rtmpdump-yle_20110714-0_amd64.deb
32-bittinen: http://www.homelinuxpc.com/download/rtmpdump-yle_20110714-0_i386.deb

Nojoo, tuo selittääkin jo tarpeeksi.
Ja jos oikein muistan niin olen jollain kuorinut tuon kääreen pois ja lopputulema kelpaa audacitylle :)

Joten muutan nyt ensi alkuun laturini käyttämään tuota yle-dl:ää.

Edit: ei ollutkaan ihan läpihuutojuttu ;(
Se aiempi laturini kutsui suoraan mplayeria ja sen sain pyydettyä lopettamaan kun oli aika täysi.
Tuo yle-dl onkin erillinen kuori ja sen pysäyttäminen ei näköjään lopeta tallennusta....
« Viimeksi muokattu: 10.10.11 - klo:05.02 kirjoittanut jekku »

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #102 : 10.10.11 - klo:10.45 »
Auttaisiko "pkill yle" tuohon ?
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #103 : 10.10.11 - klo:12.42 »
Auttaisiko "pkill yle" tuohon ?

En usko, koska ajossa oleva prosessi on eri nimellä.
Mutta tuollai sen noukin:
PID=`ps -ef |grep rtmpdump|head -n1|awk '{print $2}'`
ja sitten
kill $PID

Kokeilematta vielä jos on parikin laturia samaan aikaan ajossa, niin kumpi tapetaan ;(

Ryystän nuo radiolähetykset cronitettuna ja mahdolliset areenan videopätkät satunnaisesti - eli ihan mahdollista että useampi ajossa samanaikaisesti.

nm

  • Käyttäjä
  • Viestejä: 16429
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #104 : 10.10.11 - klo:13.48 »
Edit: ei ollutkaan ihan läpihuutojuttu ;(
Se aiempi laturini kutsui suoraan mplayeria ja sen sain pyydettyä lopettamaan kun oli aika täysi.
Tuo yle-dl onkin erillinen kuori ja sen pysäyttäminen ei näköjään lopeta tallennusta....

Pysäytä lataus, kun N sekuntia lähetettä on tallessa:

yle-dl --stop N "http://areena.yle.fi/player/index.php?channel=3&language=fi"

Huomaa myös parametri -o, jolla tallenteen voi nimetä haluamallaan tavalla, eli siihen voi liittää vaikkapa oikean päivämäärän ja ajan.

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #105 : 10.10.11 - klo:21.15 »
Edit: ei ollutkaan ihan läpihuutojuttu ;(
Se aiempi laturini kutsui suoraan mplayeria ja sen sain pyydettyä lopettamaan kun oli aika täysi.
Tuo yle-dl onkin erillinen kuori ja sen pysäyttäminen ei näköjään lopeta tallennusta....

Pysäytä lataus, kun N sekuntia lähetettä on tallessa:

yle-dl --stop N "http://areena.yle.fi/player/index.php?channel=3&language=fi"

Huomaa myös parametri -o, jolla tallenteen voi nimetä haluamallaan tavalla, eli siihen voi liittää vaikkapa oikean päivämäärän ja ajan.

Doddih!
Siinähän se - kuinkahan usein on tullut keksittyä pyörä uudelleen ;)

Näin jälkeenpäin ajatellen on ihan luontevaa että myös lopetuslaskuri moisessa palikassa.
Mutta kun tähän asti olen kiskonut vain areenasta niin siellähän tiedosto alkaa ja loppuu jossain kohtaa eikä tuota ole tarvinnut miettiä...


Rähmäkäpälä

  • Käyttäjä
  • Viestejä: 159
  • Xubuntu 11.10
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #106 : 20.10.11 - klo:09.50 »
Tarkoituksena on tekaista pieni skripti, jolla voi sammuttaa tai käynnistää kannettavan kosketushiiren. Käsittääkseni alla olevan koodin pitäisi toimia, mutta ei. Ohjelma suorittaa aina vain tuon käynnistämisfunktion, oli kosketushiiri sitten valmiiksi päällä tai ei.

Koodia: [Valitse]
#!/bin/bash

function start_function
{
xinput set-prop 12 "Device Enabled" 1
}
function stop_function
{
xinput set-prop 12 "Device Enabled" 0
}

if xinput set-prop 12 "Device Enabled" 0
then
echo "startataan touchpad"
start_function

elif xinput set-prop 12 "Device Enabled" 1
then
echo "stopataan touchpad"
stop_function
fi

nm

  • Käyttäjä
  • Viestejä: 16429
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #107 : 20.10.11 - klo:20.11 »
xinput palauttaa käyttämälläsi komennolla arvon 0 riippumatta hiiren tilasta ja siitä kytketäänkö se päälle vai pois päältä.

Joudut siis lukemaan "Device Enabled"-muuttujan arvon list-props-tulosteesta. Tämän artikkelin lopussa on valmis skripti: https://help.ubuntu.com/community/SynapticsTouchpad/ShortcutKey

Rähmäkäpälä

  • Käyttäjä
  • Viestejä: 159
  • Xubuntu 11.10
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #108 : 20.10.11 - klo:22.57 »
xinput palauttaa käyttämälläsi komennolla arvon 0 riippumatta hiiren tilasta ja siitä kytketäänkö se päälle vai pois päältä.

Joudut siis lukemaan "Device Enabled"-muuttujan arvon list-props-tulosteesta. Tämän artikkelin lopussa on valmis skripti: https://help.ubuntu.com/community/SynapticsTouchpad/ShortcutKey
Kiitti!  :)

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #109 : 07.03.12 - klo:20.22 »
"sed",  tiedoksi jotta et painisi saman asian kanssa:  

Ihmettelin tovin miksi "sed": ssä ei rivin lopun tunnistus taalan "$" avulla toiminut sitten millään.  Syyn arvasin vasta kun kurkistin hexaeditorilla mitä siellä kulkee datana: "od oa".  "sed" ei pidä ollenkaan tuosta CR+LF lopusta.  Korvasin nuo pelkällä LF: llä ja alkoi "sed" toimia dokumenttien mukaisesti.  

Jos ihmettelet mistä tuo CR+LF oli alkuaan tullut niin kirjoittelin bash-koodinpätkän joka muuntaa RSS-syötteestä napatun .xml tiedoston taulukkomuotoon. Tässäpä pieni näyte muunnettuna YLE Beta Areenan lasten ohjelmien rss-syötteestä:

|
title=Pikku Kakkosen posti
link=http://areena-beta.yle.fi/ng/areena/tv/1429041
guid=d9a50764b44c48528c8572ec31b01f2a
description=Lasten tarinoita Peikkovuoresta. Johanna esittelee lasten lähettämiä piirustuksia.
pubDate=Fri, 2 Mar 2012 07:48:00 +0200
|
title=Taikakaruselli
link=http://areena-beta.yle.fi/ng/areena/tv/1218
guid=c8f509e91e7b474899dda5f922a3d714
description=Olli vainukoirana. Uusinta.
pubDate=Fri, 2 Mar 2012 07:22:00 +0200
|

Putkimerkki erottaa tuossa tietueita jotka muodostettu "item" -kentistä xml-tiedostossa.
 
« Viimeksi muokattu: 07.03.12 - klo:20.35 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

petteriIII

  • Käyttäjä
  • Viestejä: 693
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #110 : 08.03.12 - klo:15.50 »
Tuntuu olevan kätevää tuo hexeditointi, sillä löytää todella vaikeita vikoja. Kerkiäisitkö neuvomaan mitä hexeditoria kannattaa käyttää ?
« Viimeksi muokattu: 08.03.12 - klo:17.34 kirjoittanut petteriIII »

kamara

  • Käyttäjä
  • Viestejä: 3031
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #111 : 08.03.12 - klo:19.10 »
Koodia: [Valitse]
cat tiedosto.txt|hexdump

- edit

Saattaa selvyyden vuoksi käyttää vipuja esim...
Koodia: [Valitse]
cat tiedosto.txt|hexdump -C
« Viimeksi muokattu: 08.03.12 - klo:20.13 kirjoittanut kamara »

petteriIII

  • Käyttäjä
  • Viestejä: 693
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #112 : 08.03.12 - klo:21.23 »
Tattista, enpä tullut ajatelleeksikaan. Kenties vielä pieni vahvistus: cat tiedosto.txt|hexdump -C|gedit

- noita Linuxin varus-ohjelmia minäkin pyrin yleensä käyttämään sillä ne pakottavat käyttämään omaakin päätä jolloin löytää vikoja ihan toisella tavalla.

Googlasin vähäsen ja löytyihän noita ohjelmallisiakin hexeditoreita: tässä on ihan sama riesa kuin Linuxeissa aina - uusia parempia löytää aina vaikka etsisi loppuelämänsä. Ilmeisesti mukavin käyttää on ghex mutta kyllä hexedit:kin käy. Sitten niitä vaikeakäyttöisiä: etupää xxd ja peräpää mc , emacs, vim, maksullinen UltraEdit ...

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #113 : 09.03.12 - klo:00.47 »
Noita on paljon mutta pakettivarastoista löytyi "bless" joka oli jäänyt käyttöön jo kauan sitten.

Koodia: [Valitse]
sudo apt-get install bless
Hyvää tuossa on ainakin se että on helpompi silmällä seurata kun klikkaa hiirellä jonnekin, näyttää punaisella molemmissa kentissä missä kohdassa mennään.

Ohjelmien editointiin on "geany" kätevänoloinen, osoittaa kirjoitusvirheen melkein sormella (tai ainakin värillä).


PS. Muunsin lopulta .xml tiedoston vielä hieman erilaiseeen .tsv muotoon, hyvin aukeaa nyt myös Libre Officeen tuo taulukko ja helppoa tehdä mielivaltaisia hakuja tietueisiin myös skriptissä.
« Viimeksi muokattu: 09.03.12 - klo:01.04 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #114 : 10.03.12 - klo:22.33 »
awk,  sarjassa pikku havaintoja ja omia virheitä

Awk: ssa on yksi "kierous" jota en ihan heti keksinyt:   Komentorivillä ajettuna kaikki toimi hyvin mutta kun siirsin saman koodin erilliseen funktioon skriptitiedostossa niin awk ei suostunut palauttamaan mitään.  Haarukointi ositti parametrien välityksen suuntaan, jostain syystä välitys ei taalan kautta toiminut mutta "kovakoodattuna" suoraan awk: lle alkoi awk toimia.    Selvisi että tuo johtui kovan lainauksen (yksinäiset ylä pilkut 'kissa') käytöstä, kun vaihdoin pehmeän lainauksen ("kissa") niin awk alkoi toimia odotetulla tavalla.   Tuo sattuu hyvin helposti jos on pitkään kirjoitellut sed: in kanssa.
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

petteriIII

  • Käyttäjä
  • Viestejä: 693
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #115 : 11.03.12 - klo:18.26 »
Noita on paljon mutta pakettivarastoista löytyi "bless" joka oli jäänyt käyttöön jo kauan sitten.

Bless vaikuttaa hyvältä hexeditorilta.

Linux on voittamaton. Tuli tarve saada lista niistä joilla on koneessa käyttöoikeus, enkä heti löytänyt sopivaa käskyä joten tein itse:

for n in {1000..1200}; do apu=$(cat /etc/passwd | grep ':'$n':' ); [[ ! $apu ]] && continue || echo ${apu%%\:*}; done

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #116 : 12.03.12 - klo:09.46 »
Lainaus
for n in {1000..1200}; do ....

Tuossa kokeillaan onko 1000, 1001, 1002,....  Löytyyhän se noinkin mutta tehdään aina 200 yritystä eli tämä on  "raa'an voiman ratkaisu".   
Usein tehokkain ratkaisu on keksiä seula joka mahdollisimman nopeasti poistaa ei-toivotun datan ilman että tarvitsee pyöriä silmukassa. Putkessa edettäessä työ nopeutuu putken loppua kohti datan vähetessä. Esitän tämän esimerkin teknisestä uteliaisuudesta ajatuksella oppia itse ja näyttää mullekin vaikka tuo ratkaisusi on riittävän tehokas mille hyvänsä koneelle ja tekee työnsä.

Koodia: [Valitse]
time for n in {1000..1200}; do apu=$(cat /etc/passwd | grep ':'$n':' ); [[ ! $apu ]] && continue || echo ${apu%%\:*}; done.
.
real   0m3.808s
user   0m1.132s
sys   0m0.680s

Koodia: [Valitse]
time cat /etc/passwd | grep "/home/" | awk -F':' '{ if ( $3 >= 500 ) print $1 }'.
.
real   0m0.042s
user   0m0.012s
sys   0m0.004s

Jälkimmäinen tapa on noin 91 kertaa tehokkaampi.  Selitän hieman mitä tuo tekee. Ensin listataan tuo "passwd" -tiedosto, poimitaan mukaan vain ne rivit joilla esiintyy "home". Tuossa vaiheessa datan määrä jo pieneni paljon.  Poimitaan niistä mukaan vain ne joissa kolmannessa kentässä lukee yli 500 ja tulostetaan (eli välitetään eteenpäin) näistä pelkästään kenttä numero yksi eli käyttäjätunnus.  "awk" on tuossa kätevä kun sille voi kertoa että kaksoispiste on välimerkki joka erottaa kentät. Tuohon voi tietysti valita minkä merkin kulloinkin tarvitsee kentän välimerkiksi, tässä tapauksessa tarvittiin kaksoispistettä.
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

petteriIII

  • Käyttäjä
  • Viestejä: 693
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #117 : 12.03.12 - klo:10.48 »
Tattista, toimii todella nopeasti. Ja ilmeisesti ylärajaa käyttäjien määrälle ei ole?

- nopein taitaa olla:
Koodia: [Valitse]
awk -F: '/home/&&/bash/ {print $1}' /etc/passwd
« Viimeksi muokattu: 25.09.15 - klo:15.30 kirjoittanut petteriIII »

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #118 : 12.03.12 - klo:11.01 »
Tattista, toimii todella nopeasti. Ja ilmeisesti ylärajaa käyttäjien määrälle ei ole?

Käytännössä ei rajaa tai en ainakaan pysty kuvittelemaan tilannetta että kohtaisit sen.
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

kuutio

  • Vieras
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #119 : 12.03.12 - klo:11.16 »
Koodia: [Valitse]
time cat /etc/passwd | grep "/home/" | awk -F':' '{ if ( $3 >= 500 ) print $1 }'
Ei tuohon cat:tia tai grep:piäkään tarvita, homma onnistuu myös suoraan awk:illa, esim:
Koodia: [Valitse]
awk -F':' '$6 ~ /home/ && $3 >= 500 { print $1 }' /etc/passwd