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

Προβληματισμός, προτάσεις και λύσεις για "αναβάθμιση" του Η/Υ σε εργαλείο παραγωγικότητας!
Λειτουργικά συστήματα, Backup/Recovery, χρήση του hardware I/O.
Post Reply
User avatar
GeorgeVita
Διαχειριστής
Posts: 629
Joined: 04 Sep 2013, 21:51
Ονομα: Γιώργος
Contact:

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

Post by GeorgeVita »

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

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

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

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

Code: Select all

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)

Code: Select all

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)

Code: Select all

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

Code: Select all

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

Code: Select all

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
User avatar
GeorgeVita
Διαχειριστής
Posts: 629
Joined: 04 Sep 2013, 21:51
Ονομα: Γιώργος
Contact:

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

Post by GeorgeVita »

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

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

Code: Select all

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:

Code: Select all

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

Code: Select all

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:

Code: Select all

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" με το δικό μας και δεχόμαστε αυτή την "μειωμένη ασφάλεια" στο σύστημά μας λόγω της καταγραφής του στο ιστορικό εντολών του τερματικού.
User avatar
GeorgeVita
Διαχειριστής
Posts: 629
Joined: 04 Sep 2013, 21:51
Ονομα: Γιώργος
Contact:

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

Post by GeorgeVita »

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

Code: Select all

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
Αναλυτικότερα για να το εξηγήσω:

Code: Select all

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
Post Reply

Return to “Ο Η/Υ ως εργαλείο παραγωγικότητας!”