Αλλαγή γραμματοσειράς
Ημερομηνία Τετ Οκτ 23, 2019 6:16 am
foss.aueb.gr

Προγραμματισμός

Τα δικά μας script !

Σχετικά με τον προγραμματισμό

Re: Τα δικά μας script !

Δημοσίευσηαπό HdkiLLeR » Δευτ Ιούλ 06, 2009 5:15 pm

arpl έγραψε:Και δυο κουβέντες για το ./ τι στο καλό τρέχει μ'αυτά τα σύμβολά;;; Απλά λέω στο bash shell ότι θέλω να τρέξει το αρχείο από τον τρέχοντα φάκελο που συντομευεται ως η τελεία(.) και μετά όπως και για οποιοδήποτε φάκελο αν θέλω να αναφερθώ στα αρχεία του βάζω ένα slash / και πλέον έχω το όνομα του προγράμματος που ζητάς από το shell να τρέξει. Αν δεν καταλάβατε τότε δοκιμάστε να τρέξετε ένα πρόγραμμα με το όνομά του και μετά με το πλήρες όνομά του. Για παράδειγμα η εντολή $ls έχει όνομα $/bin/ls. Άρα με την τελεία και το slash προσδιορίζω μονοσήμαντα σε πιο αρχείο αναφέρομαι ως προς τον τρέχων φάκελο.
Με άλλα λόγια το bash ξέρει ακριβώς που αναφέρομαι.


Δύο πράγματα παραπάνω για το command execution. Το ./ είναι security feature. Κάθε executable τρέχει απλά με το όνομα του (πχ δοκιμάστε /bin/ls -- τρέχει απλά γράφοντας το full path, χωρίς . χωρίς τπτ). Απο εκεί και πέρα όταν πληκτρολογούμε μια εντολή (όπως το ls) αυτή τρέχει κατευθείαν χωρίς να γράψουμε το πλήρες path. Για να γίνει αυτό το shell κοιτάει ένα environment variable που λέγεται PATH και στο οποίο έχουμε αποθηκεύσει μερικά directories (πχ opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin). Οπότε το shell παίρνει ένα, ένα όλα τα dirs απο εκει μέσα και δοκιμάζει να κάνει exec το command που δώσαμε (εάν δώσουμε δηλαδή ls, θα δοκιμάσει /opt/local/bin/ls, εάν αποτύχει θα δοκιμάσει /opt/local/sbin/ls κοκ). Τα πρώτα shells κοιτάγανε απο μόνα τους αρχικά το local directory. Oπότε εάν δίναμε ls θα κοίταγε να το βρεί πρώτα locally και εάν δεν το έβρισκε τότε θα έκανε όλο το παραπάνω. Αυτό ήταν και το πρόβλημα γιατί πολύ απλά κάποιος (συνήθως απλός user) μπορούσε να κάνει το εξής: πήγαινε σε κάποιο dir που είχε write permissions (πχ /home/user/dir1) και έβαζε μέσα ένα executable δικό του που το ονόμαζε ls, cat, κλπ. Στην συνέχεια έστελνε ένα email στον administrator και του έλεγε ότι μάλλον υπάρχει κάποιο πρόβλημα με ένα file/dir μέσα στο dir1. O admin (μάλλον σαν root) τι θα έκανε; θα πήγαινε εκεί να δει το file, τι perms έχει, να το κάνει cat κλπ κλπ. Ε μόλις έμπαινε μέσα στο /home/user/dir1 και έγραφε ls θα εκτελούσε το ls που έβαλε ο user μέσα εκεί και όχι το command ls*. Αυτό το trapped command συνήθως εκτελούσε malcode (πχ install a backdoor, add a dummy user as root, etc) και στην συνέχεια καλούσε το /bin/ls για να μην καταλάβει ο admin τπτ.

Οπότε για να αποφεύγεται αυτό τα shells πλέον δεν ψάχνουν πρώτα στο local dir αλλά πάντα στο path. Για να εκτελέσεις κάτι χωρίς να δίνεις το full path (να κάνεις override δηλαδή το security feature αυτό) πρέπει να γράψεις ./. Με αυτόν τον τρόπο είσαι aware ότι εκτελείς κάτι local και όχι κάποιο trap που σου έχει βάλει κάποιος κάπου.

*: Αν και στις μέρες μας είναι πλέον σπάνιο, οι παλιότεροι admins πάντα τρέχαν όλα τα commands με τα full paths τους (πχ /bin/ls, /sbin/ifconfig...). Στην ουσιά αυτό είναι κατάλοιπο απο πολύ παλιότερα όπου προσπαθούσαν να αποφεύγουν τέτοια attacks.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d-->--- s+:+ a- C++(+++) BILS++++$ P--- L++++>+++++ E--- W+++ N+ o+ K w--
O M+ V-- PS++>+++ PE- Y++ PGP++ t+ 5+ X+ R* tv b++ DI- D+ G+++ e+++>++++ h r++ y++
------END GEEK CODE BLOCK------
Άβαταρ μέλους
HdkiLLeR
Open Member
 
Δημοσ.: 36
Εγγραφη: Παρ Μάιος 15, 2009 2:57 am
Τοποθεσια: Manhattan - New York

Re: Τα δικά μας script !

Δημοσίευσηαπό para » Σάβ Αύγ 29, 2009 1:01 am

Πάνω στην ιδέα και τον τρόπο υλοποίησης του Ιβάν,
greek to english translator!

Κώδικας: Επιλογή όλων
# translate a word from greek to english
translateg() {
    # ISO-8859-7 -> hex για να μπορεί να δεχτεί στο url τις ελληνικές λέξεις
    wordtotransl=`echo $1 | sed -e 's/Έ/%B8/g' | sed -e 's/Ή/%B9/g' | sed -e 's/Ί/%BA/g' | sed -e 's/Ό/%BC/g' | sed -e 's/Ύ/%BE/g' | sed -e 's/Ώ/%BF/g' | sed -e 's/ΐ/%C0/g' | sed -e 's/Α/%C1/g' | sed -e 's/Β/%C2/g' | sed -e 's/Γ/%C3/g' | sed -e 's/Δ/%C4/g' | sed -e 's/Ε/%C5/g' | sed -e 's/Ζ/%C6/g' | sed -e 's/Η/%C7/g' | sed -e 's/Θ/%C8/g' | sed -e 's/Ι/%C9/g' | sed -e 's/Κ/%CA/g' | sed -e 's/Λ/%CB/g' | sed -e 's/Μ/%CC/g' | sed -e 's/Ν/%CD/g' | sed -e 's/Ξ/%CE/g' | sed -e 's/Ο/%CF/g' | sed -e 's/Π/%D0/g' | sed -e 's/Ρ/%D1/g' | sed -e 's/Σ/%D3/g' | sed -e 's/Τ/%D4/g' | sed -e 's/Υ/%D5/g' | sed -e 's/Φ/%D6/g' | sed -e 's/Χ/%D7/g' | sed -e 's/Ψ/%D8/g' | sed -e 's/Ω/%D9/g' | sed -e 's/Ϊ/%DA/g' | sed -e 's/Ϋ/%DB/g'`
    wordtotransl=`echo $wordtotransl | sed -e 's/ά/%DC/g' | sed -e 's/έ/%DD/g' | sed -e 's/ή/%DE/g' | sed -e 's/ί/%DF/g' | sed -e 's/ΰ/%E0/g' | sed -e 's/α/%E1/g' | sed -e 's/β/%E2/g' | sed -e 's/γ/%E3/g' | sed -e 's/δ/%E4/g' | sed -e 's/ε/%E5/g' | sed -e 's/ζ/%E6/g' | sed -e 's/η/%E7/g' | sed -e 's/θ/%E8/g' | sed -e 's/ι/%E9/g' | sed -e 's/κ/%EA/g' | sed -e 's/λ/%EB/g' | sed -e 's/μ/%EC/g' | sed -e 's/ν/%ED/g' | sed -e 's/ξ/%EE/g' | sed -e 's/ο/%EF/g' | sed -e 's/π/%F0/g' | sed -e 's/ρ/%F1/g' | sed -e 's/ς/%F2/g' | sed -e 's/σ/%F3/g' | sed -e 's/τ/%F4/g' | sed -e 's/υ/%F5/g' | sed -e 's/φ/%F6/g' | sed -e 's/χ/%F7/g' | sed -e 's/ψ/%F8/g' | sed -e 's/ω/%F9/g' | sed -e 's/ϊ/%FA/g' | sed -e 's/ϋ/%FB/g' | sed -e 's/ό/%FC/g' | sed -e 's/ύ/%FD/g' | sed -e 's/ώ/%FE/g'`
    curl -s http://www.in.gr/dictionary/lookup.asp?word=$wordtotransl | grep -i explanation | iconv -f=ISO-8859-7 -t=UTF-8 | sed -e 's/Δείτε επίσης: /\n/g' | sed -n '2p' | sed -e 's-</[^>]*>--g' | sed -e 's/<a[^>]*>//g'
    unset wordtotransl
}
(εδώ θα χρειαζόταν ένα [spoiler][/spoiler]!)

Παράδειγμα:
Εικόνα
Μία αρνητικότητα διακρίνω :mrgreen:

Ίιισως κάποια στιγμή προσπαθήσω να ενώσω και τα δύο scripts ώστε να έχουμε και english to greek και greek to english με μία εντολή.
Άβαταρ μέλους
para
Open Member
 
Δημοσ.: 65
Εγγραφη: Τρί Ιουν 30, 2009 2:08 am
Operating System: #! Statler, Pinguy OS 11.04

Re: Τα δικά μας script !

Δημοσίευσηαπό c00kiemon5ter » Σάβ Αύγ 29, 2009 3:54 pm

Είσαι τρελός.. check this :P

Κώδικας: Επιλογή όλων
gr2en(){
    curl -s http://www.in.gr/dictionary/lookup.asp?word=$(perl -MURI::Escape -e "print uri_escape('$(echo $@ | iconv -f=UTF-8 -t=ISO-8859-7)')") | grep -i explanation | iconv -f=ISO-8859-7 -t=UTF-8 | sed -e 's/Δείτε επίσης: /\n/g' | sed -n '2p' | sed -e 's-</[^>]*>--g' | sed -e 's/<a[^>]*>//g'
}



και μαζί με switches
Κώδικας: Επιλογή όλων
# translate a word
translate(){
    en2gr(){
        curl -s http://www.in.gr/dictionary/lookup.asp?Word=$(echo $@ | sed -e 's/ /+/') | grep -i explanation | tr [\</?\>] '\n' | grep : | sed -n '2p' | sed -e 's/^\.\?[[:space:]]\|[:.]//g' | iconv -f=ISO-8859-7 -t=UTF-8
    }

    gr2en(){
        curl -s http://www.in.gr/dictionary/lookup.asp?word=$(perl -MURI::Escape -e "print uri_escape('$(echo $@ | iconv -f=UTF-8 -t=ISO-8859-7)')") | grep -i explanation | iconv -f=ISO-8859-7 -t=UTF-8 | sed -e 's/Δείτε επίσης: /\n/g' | sed -n '2p' | sed -e 's-</[^>]*>--g' | sed -e 's/<a[^>]*>//g'
    }

    usage(){
        echo "usage is: translate [option] word"
        echo "Supported options are:"
        echo "  -e :    english to greek translation"
        echo "  -g :    greek to english translation"
    }

    if [ $# -ne 2 ]; then
        usage
    elif [ $1 = "-e" ]; then
        en2gr $2
    elif [ $1 = "-g" ]; then
        gr2en $2
    else
        usage
    fi;
}



Θα μπορούσαμε να χρησιμοποιήσουμε και getopts κάπως έτσι πχ
Κώδικας: Επιλογή όλων
    while getopts "e:g:h" OPT;
    do
        case $OPT in
            h) usage;;
            e) en2gr $OPTARG;;
            g) gr2en $OPTARG;;
            ?) usage;;    # and getopts's error message
        esac
    done

Computers are simple. You just write an instruction and they follow it.
Εικόνα
a cookie! ~ i.will.do.science.to.it! Εικόνα
Άβαταρ μέλους
c00kiemon5ter
cookie hunter
 
Δημοσ.: 554
Εγγραφη: Δευτ Μάιος 11, 2009 1:55 am
Τοποθεσια: (void *)NULL
Operating System: ~ Arch ~ .: Gentoo :.

Re: Τα δικά μας script !

Δημοσίευσηαπό arpl » Παρ Οκτ 16, 2009 2:04 am

και για όποιον έχει τον lynx(cli www browser) εγκατεστημένο...

O Jesus θα με "κάψει" για τον script αυτό!! Here goes nothing(translate.sh) the usefull stuff are stollen from Jesus :D
Κώδικας: Επιλογή όλων
#!/bin/bash

# translate a word
translate(){

WORD=UNDEF   
INGR="http://www.in.gr/dictionary/Lookup.asp?Word="
RESULT_PAGE=UNDEF
RESULT_FINAL=UNDEF

   lynx_get_page_() {
      lynx --dump --nonumbers --display_charset=windows-1253 $@ | iconv -f=windows-1253 -t=utf8 > /tmp/lynx.tmp
      START=$(grep -n "Αποτελέσματα" /tmp/lynx.tmp)
      if [ -z "$START" ]
      then
         echo "0 results"
         exit 0;
      fi
      # check to see if one ore two digit long number
      START=${START:0:2};
      if [ ${START:1:1} = ":" ]
      then
         START=${START:0:1}
      fi
      END=$(grep -n "Σελίδες" /tmp/lynx.tmp)
      # check to see if one ore two digit long number
      END=${END:0:2};
      if [ ${END:1:1} = ":" ]
      then
         END=${END:0:1}
      fi
      # now END is a number   # now END is a number
      AFTER=$(($END -$START))
      grep -A$AFTER "Αποτελέσματα" /tmp/lynx.tmp
      rm /tmp/lynx.tmp

   }

   en2gr(){
      curl -s $INGR$(echo $@ | sed -e 's/ /+/') | grep -i explanation | \
      tr [\</?\>] '\n' | grep : | sed -n '2p' | sed -e \
      's/^\.\?[[:space:]]\|[:.]//g' | iconv -f=ISO-8859-7 -t=UTF-8
   }
   
   show_what() {
      return 0;      
   }

   lynx_en2gr() {
      WORD=$(echo $1 | sed -e 's/ /+/')
      lynx_get_page_ $INGR$WORD
   }

   lynx_gr2en() {
      WORD=$(perl -MURI::Escape -e "print uri_escape('$(echo $@ | \
           iconv -f=UTF-8 -t=ISO-8859-7)')")
      lynx_get_page_ $INGR$WORD
   }

   gr2en(){
      curl -s $INGR$(perl -MURI::Escape -e "print uri_escape('$(echo $@ | \
      iconv -f=UTF-8 -t=ISO-8859-7)')") | grep -i explanation | \
      iconv -f=ISO-8859-7 -t=UTF-8 | sed -e 's/Δείτε επίσης: /\n/g'  | \
      sed -n '2p' | sed -e 's-</[^>]*>--g' | sed -e 's/<a[^>]*>//g'
   }

   usage(){
      echo "Usage is: translate [option] word"
      echo "Supported options are:"
      echo "  -e :    english to greek translation"
      echo "  -g :    greek to english translation"
   }
   # TODO add ?Page argument
   # Lookup.asp?Word=dog&Page=3
PAGE=UNDEF
   if [ $# -ne 2 ]; then
      usage
         elif [ $1 = "-e" ]; then
         lynx_en2gr "$2"
         elif [ $1 = "-g" ]; then
         lynx_gr2en "$2"
   else
      usage
         fi;
}


translate "$@";
exit 0;


Αυτά που έχω γράψει είναι αηδίες απλά σκεφτόμουν ότι η δουλειά που θέλω να κάνω
είναι να έχω το in.gr dic στο cli και να μη χρειάζεται που και που να ανοίγω σελίδα σε
firefox οπότε ένα argument η λέξη και browser o lynx προφανώς.
Άβαταρ μέλους
arpl
Open Member
 
Δημοσ.: 66
Εγγραφη: Πέμ Μάιος 07, 2009 5:34 pm
Τοποθεσια: /dev/null
Operating System: NONE

Re: Τα δικά μας script !

Δημοσίευσηαπό para » Παρ Οκτ 23, 2009 4:41 pm

Για να αποφύγουμε τα options μπορούμε να κάνουμε αυτό:

Κώδικας: Επιλογή όλων
temp=$(echo $1 | sed -e 's/[a-zA-Z]*//g')

if [ "$temp" == "$@" ]; then
    gr2en $@
else
    en2gr $@
fi

unset temp
Άβαταρ μέλους
para
Open Member
 
Δημοσ.: 65
Εγγραφη: Τρί Ιουν 30, 2009 2:08 am
Operating System: #! Statler, Pinguy OS 11.04

Re: Τα δικά μας script !

Δημοσίευσηαπό arpl » Δευτ Οκτ 26, 2009 2:24 pm

Για όσους τα παραπάνω δεν βγάζουν κανένα νόημα
Άβαταρ μέλους
arpl
Open Member
 
Δημοσ.: 66
Εγγραφη: Πέμ Μάιος 07, 2009 5:34 pm
Τοποθεσια: /dev/null
Operating System: NONE

Re: Τα δικά μας script !

Δημοσίευσηαπό AmmarkoV » Σάβ Νοέμ 07, 2009 1:31 am

Cool add-on για τα scripts μας!!

Πρώτα από όλα χρειάζεται apt-get install festival

και στην συνέχεια δοκιμάστε πχ


Κώδικας: Επιλογή όλων
#!/bin/sh
echo "Hello World" | esddsp festival --tts
exit 0


Πιο καλό παιδί ψήνεται να πάρει για πτυχιακή open-source εξελλινισμό του festival!! ??!??!!? Όχι σαν τον δημοσθένη.. ( http://demosthenes.di.uoa.gr/ ) :ugeek:
Ακόμα καλύτερα ποιός ψήνεται για Speech Recognition ? :P

:P http://www.voxforge.org/el/read :angel:
Εικόνα
I would love to change the world, but they won't give me the source code.
Άβαταρ μέλους
AmmarkoV
Open Member
 
Δημοσ.: 137
Εγγραφη: Δευτ Μάιος 11, 2009 2:18 pm

Re: Τα δικά μας script !

Δημοσίευσηαπό c00kiemon5ter » Σάβ Νοέμ 07, 2009 5:28 am

Check text2wave, redirect to dsp and listen. :P
Κώδικας: Επιλογή όλων
$ echo "The Harpoons, Man them!" | text2wave > /dev/dsp
Computers are simple. You just write an instruction and they follow it.
Εικόνα
a cookie! ~ i.will.do.science.to.it! Εικόνα
Άβαταρ μέλους
c00kiemon5ter
cookie hunter
 
Δημοσ.: 554
Εγγραφη: Δευτ Μάιος 11, 2009 1:55 am
Τοποθεσια: (void *)NULL
Operating System: ~ Arch ~ .: Gentoo :.

Re: Τα δικά μας script !

Δημοσίευσηαπό AmmarkoV » Κυρ Νοέμ 08, 2009 2:26 pm

Θέλω να βγώ πρώτος σε ένα παιχνιδάκι στο facebook το οποίο είναι κυρίως πόσο γρήγορα θα πατάς συνέχεια το mouse..
Auto Repeat Click Script v 1.0 by AmmarkoV :lol: ( Requires xautomation , sudo apt-get install xautomation ) :D :D

Κώδικας: Επιλογή όλων
#!/bin/bash
while true
 do
    xte 'mouseclick 1'
    sleep 0.027
done
exit 0;


Στην αρχή ήθελα να στέλνω κατευθείαν keystrokes sto /dev/input/mouse0 αλλά το παραπάνω είναι πιο κομψό..! :D
Εικόνα
I would love to change the world, but they won't give me the source code.
Άβαταρ μέλους
AmmarkoV
Open Member
 
Δημοσ.: 137
Εγγραφη: Δευτ Μάιος 11, 2009 2:18 pm

Re: Τα δικά μας script !

Δημοσίευσηαπό para » Πέμ Δεκ 03, 2009 3:23 am

Ένα scriptάκι που ελέγχει κάθε 15' αν έχει αλλάξει η IP του μηχανήματος στο οποίο τρέχει, κι αν έχει αλλάξει τη στέλνει σε κάποιο e-mail, αλλιώς δεν κάνει τπτ.

Κώδικας: Επιλογή όλων
#!/bin/bash
#MailIP.sh
oldIP=""
while true
do
   newIP=`w3m http://www.ip-adress.com | grep is: | cut -d" " -f 5`
   if [ "$oldIP" != "$newIP" ];
   then
        sendEmail -f from@this.email -t to@this.email -u "IP Changed" -m "Your new IP is $newIP " -s an.smtp.server
        oldIP=$newIP
   fi
   sleep 15m
done


Για να μην μπλέκετε με servers, μπορείτε να σηκώσετε ένα δικό σας και απλά να γράψετε -s localhost :p

Έχει βέβαια κι ένα bugάκι :ρ
Αν τρέξει ο w3m και ο υπολογιστής δεν είναι συνδεδεμένος στο Internet κολλάει :χ

Πώς μπορούμε να το αποφύγουμε:
  • Είτε βρίσκουμε κάποιο άλλο πρόγραμμα που κάνει την ίδια δουλειά και αντικαθιστούμε
  • Είτε βρίσκουμε ένα πρόγραμμα που να μπορεί να καταλαβαίνει με κάποιο τρόπο αν είμαστε συνδεδεμένοι στο Internet και το βάζουμε να κάνει loop ακριβώς πάνω απ' την εκτέλεση του w3m μέχρι να αποκατασταθεί η σύνδεση
Άβαταρ μέλους
para
Open Member
 
Δημοσ.: 65
Εγγραφη: Τρί Ιουν 30, 2009 2:08 am
Operating System: #! Statler, Pinguy OS 11.04

ΠροηγούμενηΕπόμενο

Επιστροφή στην Προγραμματισμός

cron
foss.aueb.gr

Μελη σε συνδεση

Συνολικά υπάρχουν 0 μέλη συνδεδεμένα: 0 εγγεγραμμένο, 0 κρυφοί και 0 επισκέπτης (με βάση τα μέλη που έχουν συνδεθεί τα τελευταία 5 λεπτά)
Περισσότερα μέλη σε σύνδεση 167 την Κυρ Οκτ 02, 2016 2:55 am

Μέλη σε αυτή την Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες

Γενέθλια

Κανένα μέλος δεν έχει γενέθλια σήμερα