Kirjoittaja Aihe: Pikku kikkoja  (Luettu 40647 kertaa)

Postimies

  • Käyttäjä
  • Viestejä: 2619
    • Profiili
Vs: Pikku kikkoja
« Vastaus #20 : 20.08.12 - klo:21.34 »

Koodia: [Valitse]
ls | while read upName; do loName=`echo "${upName}" | tr '[A-Z ÄÖÅ]' '[a-z äöå]'`; mv "$upName" "$loName"; done
Tämä toimi melkein. Jos tiedostoa ei muutetta eli loName=upName tulee herjaa....
Ei se vaan ole helppoa... Taas yksi esimerkki, miten näennäisesti oikeassa lauseessa on vika. Näin niitä bugeja syntyy ja korjataan. Kernelissä tosin vähän enempi rivejä.

Miksi tr '[A-Ö]' '[a-ö]'  ei käy? Eikös noi ole peräkkäin?

kamara

  • Käyttäjä
  • Viestejä: 2944
    • Profiili
Vs: Pikku kikkoja
« Vastaus #21 : 20.08.12 - klo:21.38 »
Miksi tr '[A-Ö]' '[a-ö]'  ei käy? Eikös noi ole peräkkäin?

Eivät ole ASCIIssa tai UTF8:ssa.

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Pikku kikkoja
« Vastaus #22 : 21.08.12 - klo:17.33 »
Lainaus
Tämä toimi melkein. Jos tiedostoa ei muutetta eli loName=upName tulee herjaa...

No siihen voi lisätä testin että muutosta ei tehdä ellei ole mitään muutettavaa:

Koodia: [Valitse]
ls | while read upName; do loName=`echo "${upName}" | tr '[A-Z ÄÖÅ]' '[a-z äöå]'`; if [ "$loName" != "$upName" ]; then mv "$upName" "$loName"; fi; done
Kaikkeen on ratkaisunsa ?   :)   Tuon voi ilmaista myös näin:

Koodia: [Valitse]
ls | while read upName; do loName=`echo "${upName}" | tr '[A-Z ÄÖÅ]' '[a-z äöå]'`; [ "$loName" = "$upName" ] || mv "$upName" "$loName"; done
eli käyttäen loogista || -ilmaisua if...then -testin tilalla.
« Viimeksi muokattu: 21.08.12 - klo:17.51 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

Postimies

  • Käyttäjä
  • Viestejä: 2619
    • Profiili
Vs: Pikku kikkoja
« Vastaus #23 : 21.08.12 - klo:21.34 »

No siihen voi lisätä testin että muutosta ei tehdä ellei ole mitään muutettavaa:

Koodia: [Valitse]
ls | while read upName; do loName=`echo "${upName}" | tr '[A-Z ÄÖÅ]' '[a-z äöå]'`; if [ "$loName" != "$upName" ]; then mv "$upName" "$loName"; fi; done
Kaikkeen on ratkaisunsa ?   :)   Tuon voi ilmaista myös näin:

Koodia: [Valitse]
ls | while read upName; do loName=`echo "${upName}" | tr '[A-Z ÄÖÅ]' '[a-z äöå]'`; [ "$loName" = "$upName" ] || mv "$upName" "$loName"; done
eli käyttäen loogista || -ilmaisua if...then -testin tilalla.

Vaikuttaa toimivalta. Enää en keksinyt mitään vikaa. Ainakaan nykyisellä lokaalilla.

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Pikku kikkoja
« Vastaus #24 : 25.08.12 - klo:15.44 »
Kaikkien tiedostotyyppien poistaminen kaikista tiedonimistä nykyisessä hakemistossa "mv" -komennolla voi olla visainen tehtävä.  

Asia käy lyhyesti jos kyseisessä hakemistossa on vain tiedostoja (eikä toisia hakemistoja):

Koodia: [Valitse]
for file in *.* ; do mv $file ${file%.*}; done
leikkaa kaiken pois nimen viimeisen pisteen jälkeen:     kissa.koira.hevonen  ---> kissa.koira      

Koodia: [Valitse]
for file in *.* ; do mv $file ${file%%.*}; done
leikkaa kaiken pois nimen ensimmäisen pisteen jälkeen:  kissa.koira.hevonen ---> kissa

Tuo ei kuitenkaan tee mitään eroa tiedoston ja hakemiston välillä, hakemistonimille käy aivan samalla tavalla.   Tuon asian voi kuitenkin korjata.

Pelkkä "find" ei yksinään tee aivan kaikkea mitä tarvitsemme mutta sen "-maxdepth 1" -vipu auttaa meitä pysymään vain siinä hakemistossa missä olemme --- ilman sitä kahlattaisiin kaikki alihakemistotkin tuosta alaspäin.
Enää tarvitsee seuloa vain ne tiedostonimet joissa on tyyppi.  Meitä siis kiinnostavat vain sellaiset tiedostonimet joissa on vähintään yksi piste.  Hieman tuli pidempi rimpsu:

Koodia: [Valitse]
find -maxdepth 1 -type f | sed 's/.\///g'| grep -E [.] | while read file; do mv $file ${file%.*}; done
poistaa tiedostonimistä kaiken viimeisen pisteen jälkeen koskematta hakemistoihin ja puolestaan

Koodia: [Valitse]
find -maxdepth 1 -type f | sed 's/.\///g'| grep -E [.] | while read file; do mv $file ${file%%.*}; done
poistaa tiedostonimistä kaiken ensimmäisestä pisteestä alkaen koskematta hakemistoihin.  Komento toimii siinä hakemistossa jossa olet eli haluttuun paikkaan pitää mennä ensin "cd": n avulla.

Tarkka lukija saattaa huomata että erona noissa rimpsuissa on vain yksi prosenttimerkki joka aiheuttaa valinnan mistä leikataan poikki.


« Viimeksi muokattu: 25.08.12 - klo:15.51 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: Pikku kikkoja
« Vastaus #25 : 21.10.12 - klo:16.36 »
Maailman yksinkertaisin webbipalvelin ?  Kokeilepa tätä:

Koodia: [Valitse]
python -m SimpleHTTPServer
Tuo jakaa nykyisen hakemiston verkkoosi. Kokeile webbiselaimella mitä näkyy kun otat yhteyden porttiin 8000 tuon koneen ip-osoitteessa, esimerkki jos koneesi osoite on 192.168.1.205:   

  http://192.168.1.205:8000

Joskus kätevä kun pitää siirtää pienehkö määrä jotain minimaalisin "virityksin".
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

Illu

  • Käyttäjä
  • Viestejä: 1058
    • Profiili
Vs: Pikku kikkoja
« Vastaus #26 : 21.10.12 - klo:17.30 »
Maailman yksinkertaisin webbipalvelin ?
Siis järjettömän näppärä konsti päästä nokialaisen wlan-yhteydellä käsiksi kotikansioon!

Kuinka turvallinen tuo on kotiseinien ulkopuolelta?

poiuyt

  • Käyttäjä
  • Viestejä: 106
    • Profiili
Vs: Pikku kikkoja
« Vastaus #27 : 21.10.12 - klo:18.21 »
Jep, tämä tulee käyttöön. Kiitokset.

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Pikku kikkoja
« Vastaus #28 : 21.10.12 - klo:21.54 »
Lainaus
Kuinka turvallinen tuo on kotiseinien ulkopuolelta?
Tuo on kätevä johonkin tilapäiseen tarpeeseen ja pääasiassa sisäverkossa. Ei tuon turvallisuutta ole varmaan kukaan tutkinut eikä testannut.  Apache käyntiin jos turva on tärkeä tai sitten ssh vain avaimilla toimivana --- saat olla rauhallisin mielin kunhan avain on turvassa.

Tuolle voi ilmoittaa jonkun keksityn vapaan portin tuon oletusarvon 8000 tilalle, pitäisi toimia kun antaa tuon komennon hännille muun portin numeron niin hieman hankalampi enää sattumalta osua sinne.

 
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

Kinnari

  • Käyttäjä
  • Viestejä: 407
    • Profiili
Vs: Pikku kikkoja
« Vastaus #29 : 23.10.12 - klo:10.59 »
Kiva vinkki, tuli todella tarpeeseen :)

mutta lopetus ctrl-z:lla jättää jotain vielä koneelle käyntiin?
Yrittäessä uudelleen käynnistää
Koodia: [Valitse]
python -m SimpleHTTPServertulee pitkä selostus ja viimeiseksi virheilmoitus: socket.error: [Errno 98] Address already in use

buutin jälkeen toimii taas

edit: päätteen sulkeminen näköjään myös auttaa
« Viimeksi muokattu: 23.10.12 - klo:11.02 kirjoittanut Kinnari »

retu

  • Käyttäjä
  • Viestejä: 949
    • Profiili
Vs: Pikku kikkoja
« Vastaus #30 : 23.10.12 - klo:16.37 »
Eikös ctrl-z ole ennemminkin bg komentoa vastaava pysäytys, kun taas ctrl-c sulkee tavallisesti ohjelman?

Siis ctrl-z jälkeen saat palautettua taustalle jääneen ohjelman fg komennolla.

Kokeilin just, ctrl-z tosiaan pysäyttää eikä vain siirrä taustalle. Sen saa kuitenkin uudelleen käyntiin bg:llä (taustalle) tai fg:llä.
« Viimeksi muokattu: 23.10.12 - klo:16.55 kirjoittanut retu »

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Pikku kikkoja
« Vastaus #31 : 02.11.12 - klo:14.59 »
Julkinen ip-osoite:

Osui silmään helppo tapa tarkastaa julkinen ip-osoite "wget": in avulla kun olet NAT: in takana:

Koodia: [Valitse]
echo $(wget -qO- http://ipecho.net/plain)
« Viimeksi muokattu: 03.11.12 - klo:17.21 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

mrl586

  • Käyttäjä
  • Viestejä: 4638
    • Profiili
Vs: Pikku kikkoja
« Vastaus #32 : 03.11.12 - klo:00.38 »
Apache käyntiin jos turva on tärkeä
nginx on Apachea turvallisempi vaihtoehto.

_Pete_

  • Käyttäjä
  • Viestejä: 1836
  • Fufufuuffuuu
    • Profiili
Vs: Pikku kikkoja
« Vastaus #33 : 03.11.12 - klo:01.09 »
Apache käyntiin jos turva on tärkeä
nginx on Apachea turvallisempi vaihtoehto.

Ja miten/missä tämä on tutkittu?

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Pikku kikkoja
« Vastaus #34 : 03.11.12 - klo:18.09 »
Ohjelmoijan kikkoja --- laskin päätteessä:

Peruslaskutoimitukset kokonaisluvuilla käyvät aika yksinkertaisesti kirjoittamalla tuonne sulkujen väliin mitä haluat:

Koodia: [Valitse]
echo $(( 33+44))77

Koodia: [Valitse]
echo $(( 7*55 ))385

Koodia: [Valitse]
echo $((  387 / 55 ))7

Koodia: [Valitse]
echo $((  387 % 55 ))2     <-- tuo on siis jakojäännös jonka saa tuolla prosenttimerkillä

Pieni kompastuskivi joka kannattaa huomata:   Älä käytä numerossasi etunollaa tai lukusi tulkitaan oktaaliluvuksi (8-kantainen).  Tällöin käy näin (aivan oikein):

Koodia: [Valitse]
echo $(( 08 / 2 ))bash: 08: value too great for base (error token is "08")
  
Tietysti voit olla silloin kiero ja kertoa väkisin että kysessä on tavallinen kymmenkantainen luku vaikka alkaa nollalla:

Koodia: [Valitse]
echo $((10#08 / 2 ))4

ja taas toimii :)         Tuo kymppi tuolla risuaidan edessä kertoo minkä järjestelmän luku seuraa.

Tuo oli oikeastaan johdanto seuravaan asiaan, bash tekee "ilmaiseksi" lukumuunnoksen pyydetystä kantaluvusta kymmenjärjestelmään, tässä esimerkki binääristä (=2-kantainen) tavalliseksi kymmenjärjestelmän luvuksi:

echo $(( 2#10101010 ))         <-- tuon risuaidan eteen kirjoitetaan 2=binääri, 8=oktaali, jne.
170

Toiseen suuntaan (binääriksi päin) se onnistuu joko kirjoittamalla pienen funktion tai käyttämällä "bc" -laskinta:

Koodia: [Valitse]
echo "obase=2; 240" | bc11110000

Iloa näistä on enimmäkseen jos kirjoittelet jotain omia skriptejä.  

PS.  Noiden tuplasulkujen tilalla laskutoimituksissa voi käyttää yksinkertaisia hakasulkuja myös, makuasia.  
« Viimeksi muokattu: 03.11.12 - klo:18.15 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: Pikku kikkoja
« Vastaus #35 : 02.01.13 - klo:11.41 »
Sammutus päätteestä

Joskus voi olla tarpeellista sammuttaa kone päätteen kautta.  "shutdown" tarjoaa vaihtoehtoja sen mukaan minkä vivun (eli tuo "tavuviiva kirjain") sille antaa perään:

Koodia: [Valitse]
sudo shutdown -k  5
Tuo "viiva k" yllä sammuttaa leikisti:  Lähettää viestin ulos että kone sammuu 5 minuutin päästä mutta ei sammutakaan konetta.   Estää dokumentaation mukaan (man shutdown) kuitenkin uuden kirjautumisen.  

Koodia: [Valitse]
sudo shutdown -r 5
"Viiva pikku-R" aiheuttaa koneen uudelleen käynnistämisen tässä esimerkissä 5 minuutin päästä.  Tuo pitää jättää käyntiin, jos painat perään Ctrl-C niin tuo sammutus peruuntuu.

Toisessa päätteessä on hyvä kokeilla seuraavia:

Koodia: [Valitse]
sudo shutdown -c
Sammutus peruutetaan.   Hieman hilpeämpi tapa saada peruutus aikaan on tappaa "shutdown" ennen kuin se aktivoituu 5 minuutin kuluttua:

Koodia: [Valitse]
sudo killall shutdowneli näinkin sammutus peruutetaan. Tämä perustuu siihen että "shutdown" on yksi ajettava ohjelma kuten mikä hyvänsä käynnissä oleva ohjelma minkä voi myös pakottaa sammumaan.

Koodia: [Valitse]
sudo shutdown -P nowLähtee ajamaan alas heti ja sammuttaa sähkön lopuksi koneesta.

"shutdown" on se suositeltu tapa.  


Vain kokeilijoille ja tekniikan opiskelijoille:

Muillakin keinoin pääsee samaan tulokseen mutta tämä loppuosa on teknisesti uteliaille, ei "joka miehelle".  
Ubuntu toimii normaalisti tasolla "runlevel=2".  Tämän näkee yksinkertaisesti kirjoittamalla
Koodia: [Valitse]
runlevelN 2
Tuo vastaus joka tulee komentoon on  edellinen ja nykyinen "runlevel".  N tarkoittaa joko että edellistä tasoa ei ole tai sitä ei tunneta (dokumentaatio epätarkka tuossa).
Tason voi vaihtaa lennossa "telinit" komennolla.  Jos vaihdat nollaksi niin kone sammuu, jos vaihdat kuudeksi niin kone käynnistyy uudestaan:

Koodia: [Valitse]
sudo telinit 6
Tuo uudelleen käynnistää heti. "telinit" ei kysele, ei odota eikä viestitä vaan pistää toimeksi heti.  "telinit": llä saa koneen yhden käyttäjän tilaan ilman verkkoa (sulje yllätysten välttämiseksi tavanomaiset auki ollevat ohjelmasi normaalisti ennen tätä):

Koodia: [Valitse]
sudo telinit 1
Kyselee salasanan seuraavaksi. Pois pääsee varmimmin "shutdown -r", "reboot", ym. keinoilla tehtyäsi mitä sitten tarvitsitkin yhden käyttäjän tilassa. (jos yrität mennä takaisin "telinit: llä" tasolle 2 se kyllä onnistuu mutta sinulla ei ole toimivaa verkkoa alla.  Jos tuosta edelleen pompit "telinit": in avulla tasolle 1 ilman uudelleen käynnistystä niin saat todennäköisesti aikaan jumin, upstart ei osaa tuota.)
Tähän yhden käyttäjän tilaan voi tulla myös koneen alkukäynnistyksen kautta,  suoraan pääsee jos painaa "e"-kirjainta kun Grub-menu on edessä ja editoi hieman linux-käynnistysvalintaa, sana "single" näyttäisi tekevän osittain asian mutta verkko käynnistyy silti edelleen.

Ubuntu ei näytä reagoivan (tai ainakaan en huomannut) jos "runlevel": in nostaa 3,4,5 kun Ubuntu on käynnissä:

Koodia: [Valitse]
sudo telinit 32 3

eli noilla tasoilla 3, 4 ja 5 ei ole Ubuntussa mitään erityistä merkitystä.  Muissa jakeluissa näille voi olla keksitty vaihtelevasti käyttöä.  Vain nuo tasot 0 ja 6 ovat käyttötarkoitukseltaan samoja kaikissa tapauksissa, 0=sammuta ja 6=uudelleen käynnistä.   

« Viimeksi muokattu: 02.01.13 - klo:12.42 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

Heikki Ketoharju

  • Käyttäjä
  • Viestejä: 716
  • Tee enemmän, harmittaa vähemmän!
    • Profiili
    • heikki.ketoharju.info
Vs: Pikku kikkoja
« Vastaus #36 : 02.01.13 - klo:14.04 »
Wikipedian artikkeli runleveleistä on kiinnostava: http://en.wikipedia.org/wiki/Runlevel

Muistelinkin, että standardin mukaan kolmostasolla käynnistyy normaali monen käyttäjän tila ilman graafista käyttöliittymää, ja vitostasolla normaali graafinen käyttöliittymä!
-
Minä kirjoittelen suomenkielisiä ohjeita Linux-musiikintekoon:
http://linux.fi/wiki/Musiikinteko_Linuxilla
-
Kansainvälinen Linux-audio -wiki, sovellusluettelo ja äänikorttitietokanta:
http://wiki.linuxaudio.org

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Pikku kikkoja
« Vastaus #37 : 02.01.13 - klo:14.59 »
Lainaus
standardin mukaan kolmostasolla käynnistyy normaali monen käyttäjän tila ilman graafista käyttöliittymää, ja vitostasolla normaali graafinen käyttöliittymä!
Standardin ?  LSB mutta ei Debian, Ubuntu, ...
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

Vika/fiba

  • Käyttäjä
  • Viestejä: 652
    • Profiili
Vs: Pikku kikkoja
« Vastaus #38 : 02.01.13 - klo:15.16 »
Jotain tuntui muistuvan mieleen noista ajotasoista, ja kyllä, Raimo Kosken linux-kirjassa neuvotaan käynnistämään verkko uudelleen siirtymällä telinitillä tasolle 2 ja takaisin kolmostasolle. Näin siis RHEL-distroissa, toisin on Debianeissa: http://linux.fi/wiki/Ajotaso.

Postimies

  • Käyttäjä
  • Viestejä: 2619
    • Profiili
Vs: Pikku kikkoja
« Vastaus #39 : 02.01.13 - klo:15.51 »
Jotain tuntui muistuvan mieleen noista ajotasoista, ja kyllä, Raimo Kosken linux-kirjassa neuvotaan käynnistämään verkko uudelleen siirtymällä telinitillä tasolle 2 ja takaisin kolmostasolle. Näin siis RHEL-distroissa, toisin on Debianeissa: http://linux.fi/wiki/Ajotaso.

Ajotason vaihto on kätevä esim. näytönohjaimen ajuria päivitettäessä. Ajatasot tosin vaihtelevat eri jakeluissa.

shutdown -h now  (h=halt) on minulla nopea tapa sammuttaa kone. shutdown -h 1:30 sammuttaa koneen klo 1:30. Kätevää jos esim. myöhäinen TV-ohjelma tallentumassa. shutdown -h 30 sammuttaa koneen 30 min kuluttua. -k oli minulle uusi ja käyttämätön vipu. Shutdown käskyn voi ohjelmoida myös kauko-ohjaimeen. Mikä usein myös kätevää.