One-liners εντολών τερματικού linux

Προβληματισμός, προτάσεις και λύσεις για "αναβάθμιση" του Η/Υ σε εργαλείο παραγωγικότητας!
Λειτουργικά συστήματα, Backup/Recovery, χρήση του hardware I/O.
Απάντηση
Άβαταρ μέλους
GeorgeVita
Διαχειριστής
Δημοσιεύσεις: 637
Εγγραφή: 04 Σεπ 2013, 21:51
Ονομα: Γιώργος
Επικοινωνία:

One-liners εντολών τερματικού linux

Δημοσίευση από GeorgeVita »

One-liners εντολών τερματικού linux

Αρκετές φορές χρειάζομαι ένα "πρόγραμμα" για να κάνω μια μικρή δουλειά στον Η/Υ μου και ενώ ψάχνω βρίσκω το ισοδύναμο "oneliner" (μακρυά εντολή μιας γραμμής) για τερματικό linux. Σκέφτηκα ότι είναι χρήσιμο να παραθέτω αυτές τις μικρές λύσεις ή παραδείγματα εδώ για να τις βρίσκω/ουμε αργότερα.

Σύνδεση σε δίκτυο 3G μέσω GSM modem:

Παράδειγμα για Cosmote:

Κώδικας: Επιλογή όλων

pppd ttyUSB0 nodetach defaultroute noipdefault lock usepeerdns connect 'chat "" "at" "" "at" "OK" "at&f" "OK" "atz" "OK" "at+cgdcont=1,'IP','internet'" OK "atdt*99#" CONNECT' user user password pass
Παράμετροι προς έλεγχο/αλλαγή:
Σύνδεση modem στο: /dev/ttyUSB0
APN=internet
username=user
password=pass

Λίγα σχόλια για τοπικές ρυθμίσεις μερικών 3G modems στο: http://www.acomelectronics.com/GeorgeVita/


Αυτόματο, χρονικά επαναλαμβανόμενο download ενός αρχείου (ή και ολόκληρου site)

Κώδικας: Επιλογή όλων

while true; do wget -N http://stratus.meteo.noa.gr/data/metarmaps/noa_Attica_thumb_latest.png; sleep 60; done
Κάθε λεπτό (60 sec) γίνεται download το αρχείο του link που περιέχει μια φωτογραφία θερμοκρασιών της Αττικής. Το download θα πραγματοποιηθεί εφόσον έχει αλλάξει το περιεχόμενο του αρχείου και θα τοποθετηθεί στη θέση του παλαιότερου.
Περισσότερα για το wget: https://www.gnu.org/software/wget/manual/wget.html


Αυτόματο, χρονικά επαναλαμβανόμενο upload ενός αρχείου (ή και ολόκληρου site)

Κώδικας: Επιλογή όλων

while true; do wput myfile.txt ftp://abcde:fghi@example.com/dir1/mydir/; sleep 60; done
Υποθετικό παράδειγμα αντίστοιχο με την εντολή wput για να κάνουμε upload.
Περισσότερα για το wput: http://wput.sourceforge.net/wput.1.html

Δείτε και το cURL ως εναλλακτική εντολή των wget/wput: https://curl.haxx.se/docs/manpage.html


Σύνδεση (login) σε forum phpbb με χρήση cookies

Κώδικας: Επιλογή όλων

curl --data "username=acom_IoT&password=password&login=Login" http://acomelectronics/forum/ucp.php?mode=login -c cookies.txt
Αποσύνδεση (logout) από forum phpbb με χρήση cookies και SID

Κώδικας: Επιλογή όλων

curl -b cookies.txt "http://acomelectronics/forum/ucp.php?mode=logout&sid=$(cat cookies.txt | awk '$6 ~ /.*sid.*/ {print $7}')"
Το αρχείο cookies.txt δημιουργήθηκε στο login και περιέχει το Session ID (SID). Με χρήση των εντολών cat και awk απομονώνουμε το SID και το χρησιμοποιούμε για επιτυχή αποσύνδεση.

Περισσότερα για διαχείριση κειμένου στο: Introduction to text manipulation on UNIX-based systems
Άβαταρ μέλους
GeorgeVita
Διαχειριστής
Δημοσιεύσεις: 637
Εγγραφή: 04 Σεπ 2013, 21:51
Ονομα: Γιώργος
Επικοινωνία:

Re: One-liners εντολών τερματικού linux

Δημοσίευση από GeorgeVita »

GeorgeVita έγραψε:Σύνδεση σε δίκτυο 3G μέσω GSM modem:

Παράδειγμα για Cosmote:

Κώδικας: Επιλογή όλων

pppd ttyUSB0 nodetach defaultroute noipdefault lock usepeerdns connect 'chat "" "at" "" "at" "OK" "at&f" "OK" "atz" "OK" "at+cgdcont=1,'IP','internet'" OK "atdt*99#" CONNECT' user user password pass
Παράμετροι προς έλεγχο/αλλαγή:
Σύνδεση modem στο: /dev/ttyUSB0
APN=internet
username=user
password=pass

Λίγα σχόλια για τοπικές ρυθμίσεις μερικών 3G modems στο: http://www.acomelectronics.com/GeorgeVita/
Επιπλέον σημείωση: για να λειτουργήσει το 3G modem με την παραπάνω εντολή "one liner" πρέπει να έχουμε σταματήσει άλλα προγράμματα που συνδέονται αυτομάτως με το modem όπως είναι το ModemManager:

Κώδικας: Επιλογή όλων

sudo killall ModemManager
Η αντίστοιχη εντολή "onliner" χωρίς έλεγχο ονόματος ("noauth") για σύνδεση με Wind είναι:

Κώδικας: Επιλογή όλων

sudo pppd ttyUSB0 noauth nodetach defaultroute noipdefault lock usepeerdns connect 'chat "" "at" "" "at" "OK" "at&f" "OK" "atz" "OK" "at+cgdcont=1,'IP','gint.b-online.gr'" OK "atdt*99#" CONNECT'
Για να γίνει πραγματικό "oneliner" μπορούμε να δώσουμε και το password για το sudo μέσω piping:

Κώδικας: Επιλογή όλων

echo password | sudo -S pppd ttyUSB0 noauth nodetach defaultroute noipdefault lock usepeerdns connect 'chat "" "at" "" "at" "OK" "at&f" "OK" "atz" "OK" "at+cgdcont=1,'IP','gint.b-online.gr'" OK "atdt*99#" CONNECT'
Εμφανίζουμε το password με το echo που το χρησιμοποιεί το sudo με την παράμετρο "-S". Αλλάζουμε τη λέξη "password" με το δικό μας και δεχόμαστε αυτή την "μειωμένη ασφάλεια" στο σύστημά μας λόγω της καταγραφής του στο ιστορικό εντολών του τερματικού.
Άβαταρ μέλους
GeorgeVita
Διαχειριστής
Δημοσιεύσεις: 637
Εγγραφή: 04 Σεπ 2013, 21:51
Ονομα: Γιώργος
Επικοινωνία:

Re: One-liners εντολών τερματικού linux

Δημοσίευση από GeorgeVita »

Αναζήτηση άλλων συσκευών εντός του δικτύου IP που έχουμε συνδεθεί

Κώδικας: Επιλογή όλων

IFS="." ip_byte=( $(hostname -I) ); IFS=" "; ip_sub="${ip_byte[0]}.${ip_byte[1]}.${ip_byte[2]}."; echo -e "\nNetwork device found at address:"; for i in {1..254}; do a=$( ping $ip_sub$i -c 1 -W 0.1 | grep ttl ) ; if [ -n "$a" ]; then echo $ip_sub$i ; fi ; done
Αναλυτικότερα για να το εξηγήσω:

Κώδικας: Επιλογή όλων

IFS="." ip_byte=( $(hostname -I) ); \
IFS=" "; ip_sub="${ip_byte[0]}.${ip_byte[1]}.${ip_byte[2]}."; \
echo -e "\nNetwork device found at address:"; \
for i in {1..254}; \
   do a=$( ping $ip_sub$i -c 1 -W 0.1 | grep ttl ); \
      if [ -n "$a" ]; then echo $ip_sub$i ; fi ; \
   done
- Θέτω ως IFS (Internal Field Separator) την τελεία, βρίσκω την διεύθυνση IPv4 που έχω συνδεθεί με την εντολή hostname -I και τοποθετώ τα bytes της στο array ip_byte[x].
- Δημιουργώ το string ip_sub της μορφής "xx.yy.zz." που αντιστοιχεί στο subnet μου, χρησιμοποιώντας τα bytes 0,1,2 (έβαλα ως IFS το κενό για να μπορέσω να χρησιμοποιήσω την τελεία εντός του νέου string).
- Τυπώνω τον τίτλο του αποτελέσματος.
- Κάνω ένα ping ("-c 1") στις διευθύνσεις από xx.yy.zz.1 έως xx.yy.zz.254 με αναμονή για απόκριση έως 0.1Sec ("-W 0.1").
- Ελέγχω με το grep αν υπάρχει απόκριση στο ping που περιέχει το λεκτικό "ttl" και τυπώνω την αντίστοιχη διεύθυνση IPv4.

Σημείωση: θα εμφανιστούν οι IP διευθύνσεις όσων συσκευών είναι συνδεδεμένες στο ίδιο subnet και αποκρίνονται στο ping
Απάντηση

Επιστροφή στο “Ο Η/Υ ως εργαλείο παραγωγικότητας!”