BETA

10 Χρήσιμες Ερωτήσεις και Απαντήσεις σχετικά με τα Scripts στο Linux Shell [μέρος 2ο]

Εικόνα Maria

I love bash

Αφού μιλήσαμε -στο 1ο μέρος- για τις εντολές στο Linux, ας προχωρήσουμε και στο Scripting. Τα scripts, στην ουσία, είναι οι συλλογές εντολών που βρίσκονται αποθηκευμένες σε ένα αρχείο. Το τερματικό/κονσόλα σας μπορεί να διαβάσει αυτό το αρχείο και να ενεργήσει με βάση τις εν λόγω εντολές, σαν να τις πληκτρολογήσατε (και φυσικά, θα τις εκτελέσει˙ αυτή είναι άλλωστε η μαγεία αυτού του πανίσχυρου εργαλείου που έχετε στην διάθεσή σας).

1. Πώς μπορώ να διακόψω/ακυρώσω ένα σενάριο εργασιών (ένα script), στο τερματικό, πριν προλάβει να εκτελεστεί επιτυχώς;
Θα πρέπει να χρησιμοποιήσετε την εντολή exit (έξοδος). Η εντολή exit όταν εξάγει οποιαδήποτε τιμή διαφορετική από το 0 (μηδέν), τότε το script θα «πετάξει»/δημιουργήσει σφάλμα και η ενέργεια θα ματαιωθεί.
Η τιμή 0 (του shell scripting) στο περιβάλλον UNIX αντιπροσωπεύει την επιτυχή εκτέλεση.
Ως εκ τούτου, βάζοντας το exit -1 (προτού ολοκληρωθεί η ενέργεια εντολών που δίνουμε στο τερματικό μας), θα επιφέρετε το επιθυμητό αποτέλεσμα που είναι η ακύρωση της δέσμης ενεργειών που έχει ήδη ξεκινήσει.
Για παράδειγμα, δημιουργήστε ένα shell script ως anything.sh.

!/bin/bash
 echo "Hello"
 exit -1
 echo "bye"

Αποθηκεύστε το αρχείο και εκτελέστε το.

sh anything.sh
Hello
exit.sh: 3: exit: Illegal number: -1

  Από το παραπάνω script, είναι σαφές ότι η εκτέλεση πήγαινε μια χαρά μέχρι που δόθηκε η εντολή exit -1.

2. Πώς μπορώ να αφαιρέσω τις επικεφαλίδες από ένα αρχείο;
Δεν έχετε παρά να δώσετε την εντολή sed. Έτσι, θα έχετε την δυνατότητα να διαγράψετε συγκεκριμένες γραμμές ενός αρχείου˙ όχι μόνον την επικεφαλίδα, μα και την πρώτη γραμμή ενός αρχείου.

sed '1 d' file.txt

Το μόνο πρόβλημα με την παραπάνω εντολή είναι ότι εξάγει το αρχείο στο standard output (στην πρότυπη έξοδο), χωρίς την πρώτη γραμμή.

Για να το αποθηκεύσετε σε φάκελο, θα πρέπει να χρησιμοποιήσετε κάποιον διαχειριστή ανακατεύθυνσης (redirect operator) που θα ανακατευθύνει το αρχείο σε νέο φάκελο. Εύκολο και αυτό αφού δεν έχετε παρά να δώσετε την εντολή:

sed '1 d' file.txt > new_file.txt

Από την άλλη, αν ενσωματώσετε το -i, μπορείτε να εκτελέσετε αυτήν την λειτουργία χωρίς διαχειριστή ανακατεύθυνσης. Έτσι δηλαδή:

sed -i '1 d' file.txt

3. Πώς μπορώ να ελέγξω το μήκος της γραμμής σε ένα αρχείο κειμένου;
Η εντολή που θα σας σώσει είναι και πάλι η sed. Καταρχάς, να πούμε ότι στην εντολή sed –n ‘n p’ file.txt το n αντιπροσωπεύει τον αριθμό της γραμμής και το p την εκτύπωση του χώρου υποδείγματος (στην κανονική έξοδο). Αυτή η εντολή συνήθως χρησιμοποιείται μόνον σε συνδυασμό με την επιλογή -n της γραμμής εντολών.
Πάμε όμως τώρα να δούμε και πώς ελέγχουμε το μήκος της γραμμής. Χρειαζόμαστε ένα κανάλι πληροφόρησης και αυτό το έχουμε με την εντολή wc. Άρα, το τελικό script που θα δώσουμε είναι:

sed –n 'n p' file.txt | wc –c

Και ένα απτό παράδειγμα για να γίνουν πιο κατανοητά αυτά περί γραμμών και αρχείων. Ας πούμε ότι θέλουμε να δούμε το μήκος της γραμμής 5 στο αρχείο κειμένου tecmint.txt. Η εντολή που θα πρέπει να δώσουμε είναι:

sed -n '5 p' tecmint.txt | wc -c

4. Στο σύστημα Linux, μπορώ να δω όλους τους μη εκτυπώσιμους χαρακτήρες (ό,τι δηλαδή δεν θα βγει στην εκτύπωση) που υπάρχουν σε ένα αρχείο κειμένου;
Μα, εννοείται πως ναι! Θα σας βοηθήσει βέβαια και ο επεξεργαστής vi που θα σας δείξει τους μη εκτυπώσιμους χαρακτήρες. Άρα,

  • Ανοίξτε τον επεξεργαστή vi.
  • Μεταβείτε στην λειτουργία εντολών του editor vi πατώντας esc ακολουθούμενο από ‘:’.
  • Τέλος, από το περιβάλλον εντολών του vi editor, τρέξτε την εντολή
set-list

Με αυτόν τον τρόπο μπορούμε να δούμε όλους τους μη εκτυπώσιμους χαρακτήρες ενός αρχείου κειμένου, συμπεριλαμβανομένου και του ctrl + m (^ Μ).

5. Εργάζομαι για μία εταιρεία, ας την αποκαλέσουμε xyz, και είμαι ο επικεφαλής του επιτελείου. Η εταιρεία μου ζήτησε να δημιουργήσω έναν κατάλογο dir_xyz, έτσι ώστε κάθε μέλος της ομάδας να μπορεί -μέσω αυτού του καταλόγου- και να δημιουργήσει ένα αρχείο αλλά και να έχει πρόσβαση στο αρχείο. Σημειωτέον, δεν πρέπει κανείς να έχει την δυνατότητα να διαγράψει το αρχείο. Το ζητούμενό μας είναι μόνον η δημιουργία και η δυνατότητα πρόσβασης. Τι πρέπει να κάνω; Απλούστατο˙ ακολουθήστε τα παρακάτω βήματα που είναι, κυριολεκτικά, παιχνιδάκι. Δεν έχετε παρά να δώσετε το script:

mkdir dir_xyz
chmod g+wx dir_xyz
chmod +t dir_xyz

Η πρώτη γραμμή της εντολής θα δημιουργήσει έναν κατάλογο (τον dir_xyz). Η δεύτερη γραμμή (της παραπάνω εντολής) δίνει την άδεια στην ομάδα (g) να γράφει και να εκτελεί και στην τελευταία γραμμή, εκείνο το +t (είναι το λεγόμενο sticky bit που) αντικαθιστά το x και δείχνει ότι τα αρχεία, που συμπεριλαμβάνονται σε αυτόν τον κατάλογο, μπορούν να τα διαγράψουν μόνον οι ιδιοκτήτες τους. Κοινώς, δυνατότητας διαγραφής έχει μόνον ο ιδιοκτήτης του καταλόγου ή ο υπερχρήστης root. 6. Ποια είναι τα στάδια επεξεργασίας από τα οποία περνά η εκάστοτε διαδικασία στο Linux; Μια διαδικασία στο Linux, συνήθως, περνά μέσα από τέσσερα κύρια στάδια επεξεργασίας:

  • Αναμονή (Waiting): πρόκειται για την αναμονή κάποιου πόρου.
  • Τρέξιμο (Running): σε αυτό το στάδιο η διαδικασία είναι υπό εκτέλεση.
  • Διακοπή διεργασίας (Stopped): που σημαίνει ότι η διαδικασία σταμάτησε είτε μετά το πέρας της εκτέλεσης που στέφθηκε με απόλυτη επιτυχία είτε επειδή πήρε το μήνυμα kill.
  • Ζόμπι (Zombie): μια διαδικασία αποκαλείται Zombie στην περίπτωση που ναι μεν έχει σταματήσει, μα συνεχίζει να είναι ενεργή στον πίνακα της διαδικασίας.

7. Σε τι χρησιμεύει η εντολή

cut

στο Linux;
Πρόκειται για μία ιδιαιτέρως χρήσιμη εντολή του Linux κάθε φορά που θέλουμε να αποκόψουμε ένα συγκεκριμένο κομμάτι κάποιου αρχείου και να το τυπώσουμε/αντιγράψουμε στην standard output (στην συνήθη έξοδο), έτσι ώστε να μπορούμε να το διαχειριστούμε καλύτερα. Αυτό συνήθως μας χρειάζεται όταν είναι πολύ βαρύ είτε το συγκεκριμένο πεδίο του αρχείου είτε το ίδιο αρχείο.
Έστω ότι θέλουμε να απομακρύνουμε τις πρώτες 10 στήλες ενός αρχείου κειμένου, ονόματι txt_tecmint. Δίνουμε την εντολή:

cut -c1-10 txt_tecmint

Ας υποθέσουμε τώρα ότι θέλουμε να εξαγάγουμε παραπάνω από μία στήλες, για παράδειγμα την 2η, 5η και 7η στήλη του ίδιου αρχείου κειμένου. Η εντολή που θα πρέπει να δώσουμε είναι:

# cut -d;-f2 -f5 -f7 txt_tecmint

8. Ποια είναι η διαφορά ανάμεσα στις εντολές

cmp

και

diff

Με τις εντολές cmp και diff έχουμε το ίδιο αποτέλεσμα˙ η λογική τους απλά είναι διαφορετική.
Δηλαδή, η εντολή diff αναφέρει τις αλλαγές που θα πρέπει να γίνουν έτσι ώστε τα αρχεία να έχουν την ίδια εμφάνιση.
Ενώ η εντολή cmp συγκρίνει τα δύο αρχεία byte-by-byte και αναφέρει την πρώτη αναντιστοιχία.

9. Η εντολή

ls

μπορεί να αντικατασταθεί από την εντολή

echo

Ναι! Η εντολή ls μπορεί να αντικατασταθεί από την echo. Αυτό που κάνει η εντολή ls είναι να παραθέτει το περιεχόμενο του αρχείου και, αντ’ αυτής, μπορούμε κάλλιστα να χρησιμοποιήσουμε την echo. Το αποτέλεσμα θα είναι ακριβώς το ίδιο.

10. Έχω ακούσει για inodes. Μπορείτε, με δυο λόγια να περιγράψετε τι είναι;
Ένα inode είναι μια δομή δεδομένων η οποία χρησιμοποιείται για τον προσδιορισμό αρχείων στο Linux.
Σε ένα σύστημα Unix, κάθε αρχείο έχει ένα ξεχωριστό inode και έναν αριθμό inode που είναι μοναδικός.

►►► Δείτε το πρώτο μέρος.

[Πηγή]

  • Σχόλια

5 Comments:

  1. Εικόνα skylik8
    skylik8 (χωρίς επαλήθευση)Ιουλ 23, 2014 16:07 ΜΜ

    Το Ζεν και η τέχνη της χρήσης του terminall...
    Ωραία πράγματα

  2. Εικόνα Anastasis
    Anastasis (χωρίς επαλήθευση)Ιουλ 23, 2014 18:50 ΜΜ

    Γεια σας, θα μπορούσατε να δώσετε ένα παράδειγμα για την ερώτηση 9;

  3. Εικόνα kkk
    kkk (χωρίς επαλήθευση)Ιουλ 23, 2014 20:25 ΜΜ

    αντί του ls μπορείς να χρησιμοποιήσεις " echo * "

  4. Εικόνα DarkGoth
    DarkGothΙουλ 23, 2014 23:46 ΜΜ

    η ls δεν ειναι για να εμφανιζει τα περιεχομενα καποιου φακελου σε λιστα? μπορει να εμφανισει και περιεχομενα αρχειου? για εμφανιση περιεχομενων αρχειου ηξερα οτι υπαρχει η cat. και για την echo, ηξερα οτι χρησιμευει για να προσθετει περιεχομενο σε αρχεια. αν δηλαδη εγω δωσω "echo "this is a dog" >> //home/linuks/dumpfile" αυτο θα προσθεσει τη φραση "this is a dog" στο επιλεγμενο αρχειο. αν τη δωσω με ενα > θα αντικαταστησει το περιεχομενο του αρχειου με τη φραση αυτη. αν απλα δωσω "echo "this is a dog"" αυτο απλα θα εμφανισει τη φραση αυτη στο terminal.

  5. Εικόνα constantinos
    constantinosΙουλ 24, 2014 00:26 ΠΜ

    Για το ls, δείτε εδώ: ls: Οι παραλλαγές του και οι χρήσεις του. Αυτό με το echo, δεν το ήξερα.

Scroll to Top