Πως να αποθηκεύσουμε πληροφορίες από το τερματικό όταν δεν έχουμε γραφικό περιβάλλον

Hades | Παρ, 07/04/2014 - 20:00 | 6' | 9

Με αφορμή ένα πρόσφατο περιστατικό, είπα να φτιάξω αυτό το αρθράκι που μπορεί να φανεί χρήσιμο σε περίπτωση που μας ζητηθεί να δώσουμε τα αποτελέσματα κάποιων εντολών που τρέχουμε στο τερματικό και σημειωτέον, δεν έχουμε λειτουργήσιμο γραφικό περιβάλλον.

Σκοπός μας είναι να "αποτυπώσουμε" αυτά που βγάζει η εντολή σε ένα απλό text αρχείο.

Θα χρειαστούμε ένα Flash USB Drive (στικάκι) με διαθέσιμο χώρο.


Κάνουμε log in στην κονσόλα του συστήματος (ίσως χρειαστεί Ctrl + Alt + F1 πριν)


Αποσυνδέουμε οποιουσδήποτε εξωτερικούς δίσκους (αν έχουμε) και δίνουμε: ls /dev/sd*

Αυτή η εντολή θα μας ενημερώσει για την ύπαρξη σκληρών δίσκων και τα ονόματα συσκευών τους. Π.χ. Αν έχουμε 1 σκληρό δίσκο θα εμφανιστεί η συσκευή /dev/sda και οι τυχόν αριθμημένες κατατμήσεις της (/dev/sda1, dev/sda2... κλπ), αν έχουμε 2 σκληρούς δίσκους θα πάρουμε /dev/sda και /dev/sdb με τις όποιες αριθμημένες κατατμήσεις τους.


Βάζουμε το USB στικάκι στο computer και ξαναδίνουμε την εντολή: ls /dev/sd*

Τώρα λογικά, θα έχει εμφανιστεί 1 επιπλέον συσκευή με 1 κατάτμηση, δηλαδή είτε /dev/sdb, /dev/sdb1 είτε /dev/sdc, /dev/sdc1 ή τέλος πάντων η επόμενη διαθέσιμη (αλφαβητικά) συσκευή η οποία αντιπροσωπεύει το στικάκι μας. Για το παράδειγμα εδώ, θα υποθέσουμε ότι το στικάκι μας αντιπροσωπεύεται από τη συσκευή /dev/sdd και περιέχει 1 κατάτμηση, την /dev/sdd1


Τώρα θα προσαρτήσουμε το στικάκι στο σύστημα χειροκίνητα με την εξής εντολή: sudo mount /dev/sdd1 /mnt

Αν (και μόνο αν) εδώ μας βγάλει error, ίσως χρειαστεί να παραθέσουμε στο mount τον διακόπτη -t και το σύστημα αρχείων στο οποίο είναι φορμαρισμένο το στικάκι, δηλαδή, vfat, ext4, κλπ...


Πηγαίνουμε με το cd στο /mnt και με ls βλέπουμε τα περιεχόμενα του στικακιού για να βεβαιωθούμε ότι η προσάρτησή του έγινε κανονικά.

Τώρα εκτελούμε πάλι cd για να γυρίσουμε στον προσωπικό μας κατάλογο (home directory).


Τώρα, όσον αφορά την εντολή της οποίας θέλουμε να "παγιδεύσουμε" το output μπορεί να είναι οποιαδήποτε εντολή χρειάζεται κονσόλα για να τρέξει. Εδώ θα χρησιμοποιήσουμε την εντολή lscpu που μας δίνει κάποιες πληροφορίες σχετικά με την κεντρική μονάδα επεξεργασίας του υπολογιστή μας.

Εκτελούμε λοιπόν: lscpu και βλέπουμε ένα μικρό κατεβατό που κυλάει στην οθόνη μας.

Πως το αποθηκεύουμε όμως;

Εκτελούμε την εντολή ξανά, ως εξής: lscpu > lscpu.output 2>&1

(Με αυτόν τον τρόπο το output ανακατευθύνεται στο αρχείο lspci.output στον τρέχοντα κατάλογο, και ΔΕΝ εμφανίζεται στην οθόνη καθόλου. Ένα απλό ls μας δείχνει το αρχείο που δημιουργήθηκε)

Ο ρόλος του 2>&1 είναι να ανακατευθύνει το standard error (stream 2 για το shell) εκεί που ανακατευθύνει και το standard output (stream 1 για το shell) της εντολής, στο αρχείο lscpu.output

Με άλλα λόγια, η εντολή διαβάζεται "στείλε το output του lspcu στο αρχείο lscpu.output και επίσης ό,τι λάθος μύνημα προκύψει, στείλε το στο ίδιο μέρος με το output (στην προκειμένη περίπτωση στο αρχείο)"

Το όνομα του αρχείου (lscpu.output) είναι εντελώς αυθαίρετο, αλλά αρκετά αυτοεπεξηγούμενο.


Αντιγράφουμε το αρχείο lscpu.output στο στικάκι στο /mnt ως εξής: cp lscpu.output /mnt

Αν μας δώσει άρνηση πρόσβασης τότε τρέχουμε την ίδια εντολή, αυτή τη φορά με sudo, δηλαδή: sudo cp lspci.output lsmod.output /mnt


Εκτελούμε: sync (Για να γραφτούν ό,τι δεδομένα εκκρεμούν στο στικάκι)


Εκτελούμε: sudo umount /mnt και είμαστε έτοιμοι να διαβάσουμε το αρχείο lscpu.output από το στικάκι σε οποιοδήποτε άλλο υπολογιστή.


Δώσε αστέρια!

MO: 5 (ψήφοι: 2)

Σχόλια

Ωραίος οδηγός Hades.

Για να γράψουμε το αρχείο output είναι απαραίτητο το 2>&1>  ;

Με σκέτο lspcu > output δεν θα γίνει;

Την sync την δίνουμε μόνη της ή πρέπει να δσουμε και τους φακέλους-αρχεία;

 

Tο εργαλείο script είναι πιο χρήσιμο για αυτό το λόγο. Και όταν τελειώσεις την δουλειά σου αντιγράφεις το typescript στο usb.

***man script:*** (script makes a typescript of everything printed on your terminal.  It is useful for students who need a hardcopy record of an interactive session as proof of an assignment, as the typescript file can be printed out later with lpr(1)

@neos

Γίνεται και αυτό που λες, αλλά με τη διαφορά ότι αν το πρόγραμμα βγάλει κάποιο error message, δεν περιλαμβάνεται στο output file, αλλά απλά προβάλλεται στην οθόνη.

Απεναντίας, το 2>&1 λέει στο shell: "Στείλε το standard error (2) εκεί που στέλνεις και το standard output (1)"

Το sync το δίνεις σκέτο, χωρίς ορίσματα.

 

@Romanos

Σωστά περί script, αλλά για άλλες δουλειές πιο χρήσιμο. Για output εντολών, επέλεξα την απλούστερη μέθοδο της ανακατεύθυνσης λόγω του ότι δεν εξαρτάται από εξωτερικά προγράμματα. Συν τοις άλλοις, με την ανακατεύθυνση επιλέγει κανείς ακριβώς τι θέλει να αποτυπώσει, και χωρίς τα ^M, τα Esc και τα διάφορα άλλα που βάζει το script.

hades, θα συμφωνησω και θα διαφωνησω μαζι σου

το 2>&1> δεν παιζει παντου ειναι φορες που απλα γραφει ενα κενο αρχειο.

Αλλες φορες δουλευει σωστα το

1>

αλλες το

2>

αλλες το

2>&1>

εξαρταται την εντολη/προγραμμα και πως βγαζει την εξοδο

Φίλε Hades ο οδηγός ήταν για μένα, το κατάλαβα ! :)

Υπέροχος οδηγός !

@tom1972

Όντως ήταν λόγω της προχθεσινής σου περιπέτειας ;) Χαίρομαι που το βρήκες χρήσιμο, έκανα κάποιες αλλαγές (λόγω αρχικής μου γκάφας με τη σύνταξη της εντολής) και θα σε παρακαλούσα να ξαναμελετήσεις την παράγραφο με την (σωστή αυτή τη φορά) σύνταξη της ανακατευθύνσεως της εντολής.

 

@Slackware

Όπως το είχα γράψει δεν είχε το επιθυμητό αποτέλεσμα όσον αφορούσε στο standard error, το διόρθωσα όμως τώρα. Αν η εντολή χρησιμοποιηθεί σωστά, δουλεύει άψογα. Το κέλυφος πάντα ερμηνεύει με τον ίδιο τρόπο τους αριθμούς: 2 είναι πάντα standard error, το 1 είναι πάντα standard output και το 0 (αν και δεν το θίξαμε εδώ) είναι το standard input.

Σε περιπτώσεις που δεν μπαίνω στο σύστημα, πάντα βάζω live cd, και σώζω από εκεί τα πάντα, με το live gui του !

Πάντως τον οδηγό τον έχω κρατήσει και σε αρχείο του word, αλλά και σα σελιδοδείκτη !

Σωστά, το live cd μπορεί να αποδειχθεί "σωτήριο" για το σύστημα, απλά το παραπάνω είναι για "quick 'n' dirty" καταστάσεις, όπου θές να σώσεις το output "στο φτερό". Επίσης, κάποια βασικά κολπάκια ανακατεύθυνσης και διασωλήνωσης εντολών μέσω του κελύφους δεν πάνε ποτέ χαμένα.