Ακόμη λίγα - Μέρος τρίτο

...ασύγχρονα μαθήματα Τερματικού

Ακόμη λίγα - Μέρος τρίτο

Δημοσίευσηαπό lucinos » 31 Αύγ 2011, 00:36

Μέρος πρώτο
Spoiler: show
0. Εισαγωγή
* Γιατί να χρησιμοποιήσετε γραμμή εντολών
1. Πρώτα βήματα
* Μπείτε στην γραμμή εντολών και μάθετε τα πραγματικά βασικά.
2. RTFM
* Περισσότερη εξοικείωση, μάθετε να διαβάζετε το εγχειρίδιο.
3. Το τερματικό στο γραφικό περιβάλλον
* Χρησιμοποιήστε γραμμή εντολών μέσα στο γραφικό περιβάλλον.
4. Αυτοσυμπλήρωση
* Πρώτα βήματα στο σύστημα αρχείων, χρησιμοποιήστε αυτοσυμπλήρωση
5. Το ιστορικό
* Πλοηγηθείτε στο ιστορικό, ολίγα για τις ονομασίες αρχείων

Μέρος δεύτερο
Spoiler: show
1. Το δέντρο από την ρίζα
* Περισσότερες διαδρομές και ο ριζικός φάκελος
2. sudo φτιάξε έναν καφέ
* Η sudo και η gksudo
3.Σωλήνες και λίγες χρήσιμες εντολές
* "Διασωληνώστε" εντολές, διαχειριστείτε αρχεία και διαβάστε απλά κείμενα.
4.Μπαλαντέρ
* Ολίγα για τούς μεταχαρακτήρες.
5.Hχώ και τρόποι διαφυγής
* Δείτε την ηχώ σας και ξεπεράστε τούς χαρακτήρες-εμπόδια
6.Ψάξε-ψάξε κάτι θα βρεις
* Περισσότερα εγχειρίδια και εντοπισμός εντολών.

Μέρος τρίτο
Spoiler: show
1. Σημαντικά προγράμματα σε γραμμή εντολών
* Μερικά διαμάντια τής γραμμής εντολών.
2. Ανακατευθύνσεις
* Περισσότερα για την είσοδο και την έξοδο
3. Ψευδώνυμα
* Δημιουργείστε δικές σας εντολές
4.Λεξιγνωσία
* Γιατί το λέμε τερματικό;
5.Σκριπτάκια
* Δημιουργήστε το πρώτο σας εκτελέσιμο σε bash
6.Άδειες αρχείων
* Λίγο περισσότερα για τις άδειες
7.Διαχείριση εργασιών
* kill bill

********************************************************************

Τα προηγούμενα δύο μέρη έχουν κατά κάποιον τρόπο μια αυτοτέλεια. Ο πρωταρχικός στόχος που ήταν μια πρώτη εξοικείωση με την γραμμή εντολών έχει πιστεύω εκπληρωθεί. Αν υπάρχει στοιχειώδης αυτοπεποίθηση μπορεί κάποιος να λύσει τα περισσότερα προβλήματα με τις επιταγές RTFM και STFW. Δεν απέφυγα σε καμμία περίπτωση την αναφορά σε εντολές αλλά η ιδέα μου είναι η παρουσίαση αυτή να μην μοιάζει με λεξικό, να παρουσιάσω όσο γίνεται τις έννοιες και όχι τις λέξεις. Τα λεξικά έχουν την δική τους χρησιμότητα, αυτή η παρουσίαση την δική της. Έδειξα και μερικά τεράστιας σημασίας "κολπάκια" όπως η αυτοσυμπλήρωση και η χρήση τού ιστορικού αλλά εδώ αναφέρω ότι ο φλοιός έχει και άλλα κολπάκια. Ενδεικτικά, με τον συνδυασμό <Ctrl>+<l> καθαρίζεις την οθόνη, με <Ctrl>+<t> αντιμεταθέτεις δύο γράμματα (διορθώνεις έτσι ένα συνηθισμένο λάθος στην πληκτρολόγηση). Ακόμα με <Shift>+<PageUP> ανεβαίνεις στο κείμενο. Αλλά φυσικά δεν θα κάτσω να παρουσιάσω κολπάκια στην γραμμή εντολών. Δεν είναι αυτό το θέμα.

Μια βασική υπόθεση που κάνω είναι ότι ο αναγνώστης έχει ubuntu (ξέρω μια τραβηγμένη υπόθεση :) ). Το bash φυσικά είναι το ίδιο παντού (στην χειρότερη διαφέρει η έκδοση) και τα βασικά προγράμματα επίσης δεν αλλάζουν. Η πιθανότητα κάποιο πρόγραμμα να λείπει σε κάποια άλλη διανομή είναι ελάχιστη (την μεγαλύτερη πιθανότητα την έχει ίσως το dir. Σε μια άλλη διανομή αν έχετε μπει σε CLI με Ctrl+Alt+F1 ενδεχομένως να μην επιστρέφετε σε γραφικό περιβάλλον με Alt+F7 αλλά με Alt+F8 (ή κάποιο άλλο F). Η πιθανότερη έλλειψη είναι αν δεν υπάρχει το gedit κάτι που ανέφερα. Με την ευκαιρία αν έχουν συνδεθεί πολλοί χρήστες με γραφικό περιβάλλον μπορείτε να αλλάζετε από τον έναν στον άλλο με τις συντομεύσεις Ctrl+Alt+F7, Ctrl+Alt+F8, κλπ. Επίσης αυτά που γράφονται πριν τον προτροπέα δεν είναι τα ίδια για όλες τις διανομές (μπορείτε μάλιστα και να τα αλλάξετε όποτε θέλετε).

Κάτι σχετικά με τα "χαμηλής προτεραιότητας bugs" τού gksudo. Το πρόβλημα είναι ότι βγάζει μηνύματα σφάλματος όταν το τρέχετε. Αυτά τα μηνύματα μπορείτε να τα αγνοήσετε. Δεν ενοχλούν καθόλου. Ο κύριος λόγος που βγαίνουν είναι επειδή κάποια πανέξυπνη διανομή (ονόματα δεν λέμε) αποφάσισε να καταργήσει τον λογαριασμό υπερχρήστη. Η gksudo ακόμα και έτσι λειτουργεί χωρίς πρόβλημα και ανοίγουν κανονικά τα προγράμματα με μόνη παρενέργεια τα μηνύματα σφάλματος.
Τελευταία επεξεργασία από lucinos και 08 Σεπ 2011, 15:05, έχει επεξεργασθεί 6 φορά/ες συνολικά
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Σημαντικά προγράμματα σε γραμμή εντολών

Δημοσίευσηαπό lucinos » 31 Αύγ 2011, 00:37

Αναφέρω μερικά σημαντικά προγράμματα που τρέχουν σε γραμμή εντολών. Γράφω αυτά που μού έρχονται πρώτα στο μυαλό, ευχαρίστως θα συμπληρώσω, όποιος θέλει να προτείνει και άλλα ελεύθερα. Το να τρέχει ένα πρόγραμμα σε γραμμή εντολών το θεωρώ τεράστιο πλεονέκτημα. Από την άλλη είναι και εύκολο και χρήσιμο να προσφέρει κάποιος ένα γραφικό κέλυφος για ένα τέτοιο πρόγραμμα.

gcc
Αρχικά συμπιλιστής (compiler) τής C. Τώρα συλλογή συμπιλιστών. Αν με βάλετε να διαλέξω το σημαντικότερο πακέτο τού GNU αυτό θα έλεγα χωρίς δεύτερη σκέψη.

rsync
Εξαιρετικό πρόγραμμα δημιουργίας buckup. Σε αυτό έχει βασιστεί ο Λουκάς Αυγερίου για το πρόγραμμα γραφικού περιβάλλοντος LuckyBuckup (Το rsync το είχα ακούσει από παλιά, το luckybuckup πρόσφατα το άκουσα)

vi
Πανίσχυρος κειμενογράφος, που ομολογώ δεν έχω χρησιμοποιήσει ποτέ. Δείτε και viewtopic.php?f=9&t=3418 Πάντως δεν τον έχω ακουστά μόνο από εκεί. Οι αδαείς βέβαια μπορούν να χρησιμοποιούν τούς ικανοποιητικούς GUI κειμενογράφους και αν αναγκαστούν για λίγο να χρησιμοποιήσουν γραμμή εντολών υπάρχει ο απλός αλλά πολύ κατώτερος nano

gnuplot
Εκπληκτικό πρόγραμμα για διαγράμματα. Για ένα διάστημα που το χρησιμοποίησα με έβγαλε ασπροπρόσωπο. Είναι πολύ ισχυρότερο από όσο περίμενα και για πολλές δουλειές το καλύτερο πρόγραμμα που υπάρχει.

octave
συμβατό με το Matlab, δεν έχω δουλέψει ούτε αυτό ούτε το matlab αλλά μια ματιά που έριξα φαίνεται πολύ δυνατό

tar
εργαλείο για την αρχειοθέτηση τύπου tar. Επίσης υπάρχει το zip για τα zip και άλλα.

rTorrent
εργαλείο για torrent

mount
εργαλείο για προσάρτηση συστημάτων αρχείων (και αρχεία όπως τα .iso)

dd
εργαλείο για χαμηλού επιπέδου εργασίες στούς δίσκους.

GNU Parted
Διαχειριστής κατατμήσεων. Το γνωστό gparted είναι γραφικό κέλυφος τού parted. Το γνωστό fdisk είναι παλιότερο εργαλείο για την ίδια δουλειά.

dpkg
το λογισμικό στην βάση τής διαχείρισης πακέτων τού Debian (στο οποίο βασίζεται το ubuntu), συνηθέστερα χρησιμοποιείται το υψηλότερου επιπέδου APT (apt-get) και φυσικά καθώς δεν είναι όλες οι διανομές βασισμένες στο Debian υπάρχουν πολλά εναλλακτικά με ποιο σημαντικό εναλλακτικό σύστημα το RPM.
Τελευταία επεξεργασία από lucinos και 27 Οκτ 2011, 13:04, έχει επεξεργασθεί 4 φορά/ες συνολικά
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Ανακατευθύνσεις

Δημοσίευσηαπό lucinos » 31 Αύγ 2011, 00:37

Ήδη ξέρετε τα βασικότερα σχετικά με την είσοδο και την έξοδο. Ότι δηλαδή η κανονική έξοδος είναι αυτό που τυπώνει το πρόγραμμα. Και επίσης είδαμε και την περίπτωση τών σωλήνων όπου δίνουμε την έξοδο μιας εντολής ως είσοδο σε μια άλλη, ένα πολύ σημαντικό χαρακτηριστικό.

Ένα ενδιαφέρον προγραμματάκι που δεν έτυχε να δούμε είναι το cat
Στον προτροπέα τρέξτε:
Κώδικας: Επιλογή όλων
cat

Σε αυτό το σημείο ίσως νομίζετε ότι έχει κρεμάσει. Για να δείτε ότι δεν είναι καθόλου έτσι αρχίστε να γράφετε όττι θέλετε. Κάθε φορά που θα πατάτε Enter το πρόγραμμα θα επιστρέφει την είσοδο (αυτά που γράφετε) στην έξοδο (δηλαδή θα επαναλαμβάνει όττι γράφετε) και θα σάς αφήνει να συνεχίσετε. Θα μπορούσατε να διακόψετε βίαια το πρόγραμμα με Ctrl+c όπως έχουμε δει αλλά μπορείτε να πείτε ότι το "αρχείο" τελείωσε με τον συνδυασμό Ctrl+d. Με την ευκαιρία θυμηθείτε ότι για τα unix-οειδή τα πάντα είναι αρχεία και επομένως όταν πληκτρολογείτε αυτό δεν διαφέρει από την ανάγνωση ενός αρχείου από τον υπολογιστή. Αν δώσετε Ctrl+d στον προτροπέα αυτό είναι ισοδύναμο με την εντολή exit (είναι σαν να λέτε ότι τερματίζετε την είσοδο προς το bash)

Αντί για να δώσουμε το cat μόνο του και να περιμένει είσοδο από το πληκτρολόγιο μπορούμε να τού δώσουμε σαν είσοδο το αποτέλεσμα μιας άλλης εντολής με τον σωλήνα ή μπορούμε να δώσουμε ένα αρχείο με το <
Πάτε στο ~/playground εκεί από τα προηγούμενα έχουμε αντιγράψει το fstab και δώστε στον προτροπέα:
Κώδικας: Επιλογή όλων
cat < fstab

Θα διαβάσει το αρχείο fstab και θα σάς επιστρέψει στον προτροπέα.
Συνήθως τα προγράμματα στα οποία θα θέλαμε να κάνουν κάτι τέτοιο μάς δίνουν την δυνατότητα να το κάνουμε από τα ορίσματα. Θα το θυμάστε αυτό από την less, το ίδιο ισχύει και με την cat, δηλαδή:
Κώδικας: Επιλογή όλων
cat fstab

λειτουργεί εξίσου καλά. Αυτό κάνει το < κάπως αχρείαστο. Το αντίθετό του όμως > είναι πιο χρήσιμο. Με:
Κώδικας: Επιλογή όλων
cat > dog

Γράφουμε στο αρχείο dog. Έχουμε πρακτικά έναν από τούς απλούστερους κειμενογράφους που μπορούν να υπάρξουν.

Ένα ακόμα παράδειγμα χρήσης τής ανακατεύθυνσης > είναι το:
Κώδικας: Επιλογή όλων
ls -lahF ~ > ls-my_home

σώζετε το αποτέλεσμα στο αρχείο ls-my_home
Επίσης το:
Κώδικας: Επιλογή όλων
> keno

δημιουργεί ένα κενό αρχείο keno (ένα ωραίο κολπάκι)

Μπορεί την έξοδο να θέλουμε να την πετάξουμε. Αυτό γίνεται αν δώσουμε σαν αρχείο εξόδου το /dev/null (δείτε και το σχετικό αρθράκι τής Βικιπαίδειας)

Αν το αρχείο υπάρχει ήδη, το > σβήνει όττι υπάρχει προηγουμένως. Αν δεν θέλουμε σβήσουμε τα προηγούμενα αλλά να προσθέσουμε την έξοδο στο αρχείο τότε υπάρχει το >> για αυτήν την δουλειά.

Κάτι ακόμα πολύ σημαντικό. Το > δίνει την κανονική έξοδο στο αρχείο. Τα σφάλματα περνάνε από διαφορετική έξοδο. Αν λοιπόν δώσετε (δεν υπάρχει αρχείο/φάκελος krom):
Κώδικας: Επιλογή όλων
ls krom > ls-krom

θα δημιουργηθεί ένα κενό αρχείο ls-krom και το μήνυμα σφάλματος θα τυπωθεί κανονικά στην οθόνη. Αν θέλουμε να ανακατευθύνουμε το μήνυμα σφάλματος αντί για την κανονική έξοδο χρησιμοποιούμε το 2> και αν θέλουμε να ανακατευθύνουμε και τα δυο (κανονική έξοδο και σφάλματα) υπάρχει το &> (για τις νεώτερες σχετικά εκδόσεις τού bash, στις παλιότερες είναι ελαφρώς πιο παράξενο)

Σχετικά με τις ανακατευθύνσεις υπάρχει αυτό το άρθρο τής Βικιπαίδειας
Τελευταία επεξεργασία από lucinos και 31 Αύγ 2011, 00:54, έχει επεξεργασθεί 1 φορά/ες συνολικά
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Ψευδώνυμα

Δημοσίευσηαπό lucinos » 31 Αύγ 2011, 00:37

Έχουμε δει ότι υπάρχουν διαφόρων λογιών τύποι εντολών. Πχ εντολές εντοιχισμένες στον φλοιό (bash), δυαδικά προγράμματα (binaries) και τώρα θα δούμε για λίγο και τα ψευδώνυμα (alias). Για τα ψευδώνυμα έγινε μια αναφορά όταν είπαμε ότι τέτοιος είναι ο τύπος τής ls (εκτός αν την τρέχουμε απευθείας ως /bin/ls )

Στον προτροπέα δώστε:
Κώδικας: Επιλογή όλων
alias

Αυτό δείχνει τα ψευδώνυμα που έχουν οριστεί. Η ls για παράδειγμα καλείται ως ψευδώνυμο εντολής που περιλαμβάνει τα χρωματάκια που βλέπουμε.

Ας δημιουργήσουμε ένα ψευδώνυμο. Κατ αρχήν πρέπει να αποφασίσουμε για το όνομα.
Καλό είναι να επιλέξουμε ένα όνομα που δεν είναι πιασμένο. Τρέξτε στον προτροπέα:
Κώδικας: Επιλογή όλων
type test

Αυτό θα μάς πει ότι το test είναι εντοιχισμένη εντολή στον φλοιό. Πρέπει να διαλέξουμε άλλο όνομα. Ας δοκιμάσουμε την τύχη μας με το foo
Κώδικας: Επιλογή όλων
type foo

Λογικά το foo θα δείτε ότι δεν είναι πιασμένο.

Ας φτιάξουμε τώρα ένα ψευδώνυμο. Τρέξτε:
Κώδικας: Επιλογή όλων
alias foo='clear;echo "Hello World!"'

Με αυτό θα δημιουργήσετε ένα ψευδώνυμο foo που θα τρέχει καθαρίζει την οθόνη και θα βγάζει σαν έξοδο το αρχαίο μήνυμα Hello World!. Με την ευκαιρία με την αγγλική ημιπερίοδο (ελληνικό ερωτηματικό) διαχωρίζονται οι εντολές.

Το foo είναι πλέον μια νέα εντολή που μπορείτε τώρα να τρέχετε στο τερματικό σας.

Αν ανοίξετε νέο τερματικό θα διαπιστώσετε ότι ο υπολογιστής δεν θυμάται την foo. Ισχύει μόνο για το συγκεκριμένη σύνδεση στο bash. Αν φτιάξετε μια εντολή που θέλετε να θυμάται ο υπολογιστής κάθε φορά που ανοίγετε το bash θα πρέπει να την αποθηκεύσετε στο αρχείο ~/.bashrc

Σε περίπτωση που αποφασίσετε να πειράξετε το .bashrc αν και δεν είναι και τόσο βασικό αρχείο για να πάθετε κάτι σοβαρό (στο κάτω κάτω είναι μόνο για τον προσωπικό σας λογαριασμό), προτείνω να δημιουργήσετε ένα αντίγραφο ασφαλείας πρώτα, πχ:
Κώδικας: Επιλογή όλων
cp ~/.bashrc ~/.bashrc.buckup

Επίσης μην αμελήσετε να προσθέσετε και σχόλια. Κάθε γραμμή που ξεκινάει από το κάγκελο # είναι γραμμή σχολίων. Μπορείτε να γράψετε όττι θέλετε χωρίς να το τρέχει ο υπολογιστής. Είναι σημαντικό να βάζετε σχόλια σε όττι κάνετε!
Τελευταία επεξεργασία από lucinos και 31 Αύγ 2011, 00:57, έχει επεξεργασθεί 2 φορά/ες συνολικά
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Λεξιγνωσία

Δημοσίευσηαπό lucinos » 31 Αύγ 2011, 00:38

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

διεπαφή/interface
Αναφέρεται στον τρόπο αλληλεπίδρασης μέσα σε ένα σύστημα. Αναφέρεται τόσο σε σχέση με το υλικό όσο και με το λογισμικό. Από την σκοπιά τού χρήστη (user interface) ξεχωρίζουμε δύο κυρίαρχους τύπους. GUI και CLI

GUI
Graphical user interface. Το γραφικό περιβάλλον. Ο συνηθισμένος τρόπος χρήσης τών υπολογιστών σήμερα. Βαριέμαι να το εξηγήσω.

CLI
Command-line interface. Η γραμμή εντολών, τρόπος χρήσης τού υπολογιστή πληκτρολογώντας εντολές. Ουσιαστικά το αντικείμενο αυτής τής παρουσίασης.

Πυρήνας/Kernel
Το πρόγραμμα που κάνει την πραγματική δουλειά αλλά ως χρήστες δεν έχουμε και δεν θέλουμε να έχουμε καμμία σχέση. Το Linux είναι ο πυρήνας τού λειτουργικού καθώς αυτό ελέγχει πραγματικά τον υπολογιστή ως υλικό.

Φλοιός/Κέλυφος/Shell
Το πρόγραμμα που χρησιμοποιούμε (σε αντιδιαστολή με τον πυρήνα). Με την στενότερη έννοια το bash (το κυρίαρχο πρόγραμμα για χρήση γραμμής εντολών στο λίνουξ). Περιλαμβάνουμε αν θέλουμε όμως και τα υπόλοιπα βασικά προγράμματα ή ακόμα γενικότερα, τα πάντα. Πολύς κόσμος χρησιμοποιεί την λέξη σαν συνώνυμο τής γραμμής εντολών αλλά στην πραγματικότητα ένα γραφικό κέλυφος είναι επίσης κέλυφος.

Κονσόλα/Console
Η συσκευή χειρισμού τού υπολογιστή. Παραδοσιακά το πληκτρολόγιο και η οθόνη.

Τερματικό/Terminal
Το ίδιο ακριβώς με την κονσόλα. Συνώνυμο. Η διαφορά είναι ότι ως λέξη προέρχεται από την ιδέα τής τηλεπικοινωνίας. Η ιδέα τού τερματικού είναι η ιδέα τής συσκευής με την οποία χειρίζεσαι τον υπολογιστή ο οποίος μπορεί να είναι μακρυά και μπορούν να τον χρησιμοποιούν ταυτοχρόνως και άλλοι χρήστες. Οι τηλεπικοινωνίες είναι μέσα στο DNA τού UNIX το οποίο ας μην ξεχνάμε ότι γεννήθηκε από ομάδα τής AT&T (American Telephone & Telegraph Company). Για το πρόγραμμα "τερματικό" θα πούμε σε λίγο.

Εικονικό τερματικό/Εικονική κονσόλα/Virtual termilal/Virtual console
Τα πάντα όπως είπαμε στα unix-οειδή, όπως το λίνουξ, είναι αρχεία. Το τερματικό ως συσκευή εκφράζεται από αρχείο. Όταν λέμε εικονικό τερματικό πρακτικά εννοούμε τις "συσκευές" tty. Για να πάρετε μια ιδέα τρέξτε στον προτροπέα:
Κώδικας: Επιλογή όλων
ls /dev/tty*

Σχεδόν σε όλα τα λίνουξ τα πρώτα έξι tty είναι σε γραμμή εντολών και από το έβδομο και έπειτα έχουμε γραφικό περιβάλλον. Όταν είστε σε γραφικό περιβάλλον μπορείτε να αλλάζετε tty πατώντας ταυτοχρόνως ctrl+alt+(το αντίστοιχο F). Για παράδειγμα με ctrl+alt+F1 πάμε στο tty1 το οποίο είναι CLI. Ο πρώτος χρήστης που κάνετε λογκίν (GUI) συνήθως είναι στο tty7. Αν αλλάξετε χρήστη χωρίς να αποσυνδεθείτε από τον πρώτο τότε μπαίνετε στο tty8 και μπορείτε εναλλακτικά να επιστρέψετε στον πρώτο με ctrl+alt+F7 και ξανά πίσω με ctrl+alt+F8.
Όταν είστε σε γραμμή εντολών (tty1-6) το ctrl δεν χρειάζεται.

Με την ευκαιρία tty βγαίνει από την λέξη τηλέτυπος. Μπορείτε να δείτε ποια "συσκευή" χρησιμοποιείται τρέχοντας:
Κώδικας: Επιλογή όλων
tty


Εξομοιωτής τερματικού/terminal emulator
Εφαρμογή που επιτρέπει την χρήση γραμμής εντολών μέσα στο γραφικό περιβάλλον. Το γνωστό μας "τερματικό" είναι εξομοιωτής τερματικού. Κάθε φορά που ανοίγετε ένα τερματικό δημιουργείται ένα ψευδοτερματικό (επίσης ψευδοκονσόλα). Τα ψευδοτερματικά μπορείτε να τα βρείτε στον φάκελο /dev/pts/ και έτσι πχ η tty δεν επιστρέφει /dev/tty7 αλλά /dev/pts/0
Ανοίξτε μερικά τερματικά και δώστε:
Κώδικας: Επιλογή όλων
ls /dev/pts

για να δείτε ότι κάθε τερματικό έχει την δική του "συσκευή".

Επίσης μπορείτε να δείτε όλες τις συνδέσεις με:
Κώδικας: Επιλογή όλων
w
Τελευταία επεξεργασία από lucinos και 31 Αύγ 2011, 00:57, έχει επεξεργασθεί 1 φορά/ες συνολικά
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Σκριπτάκια

Δημοσίευσηαπό lucinos » 31 Αύγ 2011, 00:38

Σκριπτάκια ή σενάρια γενικά λέγονται τα προγράμματα σε διερμηνευόμενες γλώσσες. Ο φλοιός μπορεί να λειτουργήσει ως διερμηνευόμενη γλώσσα προγραμματισμού και έτσι έχουμε τα σκριπτάκια φλοιού (shell script).

Στον φάκελο ~/playground δημιουργήστε ένα απλό αρχείο κειμένου με όνομα sktriptaki.sh και το ακόλουθο περιεχόμενο:
Κώδικας: Επιλογή όλων
#!/bin/bash
echo "Hello World!"


Μπορείτε να το δημιουργήσετε με όποιον τρόπο θέλετε, μέσω ενός κειμενογράφου όπως τού gedit ή τού nano αλλά λόγω τού μικρού μεγέθους ίσως ο ταχύτερος τρόπος είναι η cat όπως είδαμε στην ενότητα 3.2

Όπως έχουμε αναφέρει οι καταλήξεις στο λίνουξ δεν είναι καθόλου απαραίτητες. Η κατάληξη .sh δεν είναι πραγματικά απαραίτητη με την έννοια ότι δεν ενδιαφέρει το λίνουξ. Θυμίζει σε εμάς ότι είναι σκριπτάκι φλοιού και όχι στο λίνουξ.

Η πρώτη γραμμή #!/bin/bash είναι υποχρεωτική και εξηγεί (στον υπολογιστή) ότι θα χρησιμοποιηθεί το bash. Κάθε άλλη γραμμή που ξεκινάει με κάγκελο # είναι σχόλιο δηλαδή ο υπολογιστής απλά την αγνοεί (είναι όμως γενικά σημαντικό να σχολιάζουμε τα προγράμματά μας). Στο πρώτο μας σκριπτάκι έχουμε την γνώριμη εντολή echo "Hello World!"

Το bash φυσικά δεν είναι κατάλληλο για προγράμματα που κάνουμε με άλλες γλώσσες προγραμματισμού όπως πχ η c++ αλλά μην νομίσετε ότι δεν είναι δυνατό εργαλείο και ως γλώσσα προγραμματισμού. Θα ήταν καλό ίσως να επιστρέψουμε στα σκριπτάκια για περισσότερα σε αυτά τα θέματα.

Ωραία το δημιουργήσαμε. Πώς το τρέχουμε;
Κατ αρχήν το ~/playground δεν περιλαμβάνεται στην ατραπό, οπότε ένα σκέτο skriptaki.sh απλά δεν θα λειτουργήσει. Λεπτομέρεια: συχνά στο λίνουξ δημιουργούμε έναν φάκελο ~/bin που τον περιλαμβάνουμε στην ατραπό και ρίχνουμε μέσα εκτελέσιμα που θέλουμε να τα βλέπει μόνο ο χρήστης. Το ubuntu για να μάς διευκολύνει αν βρει τον φάκελο αυτό να υπάρχει, τον περιλαμβάνει αυτομάτως στην ατραπό οπότε αν τον δημιουργήσουμε την επόμενη φορά που θα μπούμε σε τερματικό έχει περιληφθεί χωρίς να χρειάζεται να κάνουμε τίποτα.

Αυτό που κανονικά πρέπει να τρέξουμε (βρισκόμαστε στον φάκελο ~/playground ) είναι:
Κώδικας: Επιλογή όλων
./skriptaki.sh

Αλλά έτσι απλά αυτό θα αποτύχει!
Θα μάς πει "άρνηση πρόσβασης". Ελπίζω να παρατηρήσατε ότι η αυτόματη συμπλήρωση δεν λειτουργεί, αυτό ίσως είναι μια ένδειξη.

θα θυμάστε ελπίζω ότι γενικά ξεπερνάμε την άρνηση πρόσβασης με το sudo. Δοκιμάστε λοιπόν:
Κώδικας: Επιλογή όλων
sudo ./skriptaki.sh

Ούτε αυτό θα λειτουργήσει. Δεν θα βρίσκει την εντολή. Το πρόβλημα δεν είναι ιδιοκτησίας. Είναι δημιουργημένο από εμάς, σε εμάς ανήκει, εμείς έχουμε κάθε δικαίωμα πάνω του. Δεν αναγνωρίζεται όμως ως εκτελέσιμο. Η κατάληξη .sh φυσικά δεν λέει τίποτα στο λίνουξ. Το αρχείο δεν έχει δικαιώματα εκτελέσιμου γενικότερα. Το θέμα τών δικαιωμάτων είναι σημαντικότατο και θα πρέπει να επιστρέψουμε. Προς το παρόν όμως ας αρκεστούμε να δώσουμε δικαιώματα εκτέλεσης στο συγκεκριμένο αρχείο. Τρέξτε:
Κώδικας: Επιλογή όλων
chmod +x skriptaki.sh


Τώρα μπορείτε να τρέξετε το σκριπτάκι απλά με:
Κώδικας: Επιλογή όλων
./skriptaki.sh
Τελευταία επεξεργασία από lucinos και 19 Σεπ 2012, 09:18, έχει επεξεργασθεί 3 φορά/ες συνολικά
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Άδειες αρχείων

Δημοσίευσηαπό lucinos » 31 Αύγ 2011, 00:38

Ας πούμε και δυο λογάκια για τις άδειες τών αρχείων.

Βρισκόμαστε στον φάκελο ~/playground
Τρέξτε:
Κώδικας: Επιλογή όλων
ls -l sktriptaki.sh

Αυτό δίνει αναλυτικότερες πληροφορίες για το αρχείο skriptaki.sh
Στην αρχή ξεκινάει από την σειρά συμβόλων: -rwxr-xr-x
Το πρώτο σύμβολο εκφράζει το είδος τού αρχείου.
Η απλή παύλα - σημαίνει "κανονικό" αρχείο
Το γράμμα d σημαίνει φάκελος (directory)
Το γράμμα l σημαίνει σύνδεσμος (link), ένα ενδιαφέρον είδος αρχείων που δεν έτυχε να δούμε
Τα γράμματα c και b σημαίνουν συσκευή (character, block). Η μεταξύ τους διαφορά αφορά τον πυρήνα και όχι επομένως εσάς (τον χρήστη)

Τα επόμενα τρία γράμματα αφορούν τα δικαιώματα τού ιδιοκτήτη. r σημαίνει ότι υπάρχει δικαίωμα ανάγνωσης. Σε περίπτωση που δεν το έχει το δικαίωμα θα είχαμε παύλα. w σημαίνει δικαίωμα εγγραφής. Πάλι αν δεν υπάρχει το δικαίωμα θα είχαμε παύλα. Τέλος το x σημαίνει δικαίωμα εκτέλεσης. Τα x προστέθηκαν όταν δώσαμε δικαιώματα εκτελέσιμου στο skriptaki.sh στην προηγούμενη ενότητα, πριν αυτό αντί για x υπήρχαν παύλες. Ο ιδιοκτήτης λοιπόν έχει δικαιώματα ανάγνωσης, εγγραφής και εκτέλεσης. Τα επόμενα τρία γράμματα λειτουργούν με τον ίδιο ακριβώς τρόπο αλλά αφορούν τα δικαιώματα τής ομάδας χρηστών στην οποία ανήκει το αρχείο. Αυτοί έχουν δικαίωμα ανάγνωσης και εκτέλεσης αλλά όχι εγγραφής (δηλαδή δεν μπορούν να σβήσουν ή να πειράξουν το skriptaki.sh). Τέλος τα επόμενα τρία γράμματα αφορούν όλους τούς υπολοίπους χρήστες. Επίσης βλέπουμε δικαιώματα ανάγνωσης και εκτέλεσης αλλά όχι εγγραφής. Ακολουθεί ένας άσσος που σημαίνει το πλήθος τών αρχείων και μετά δυο φορές το όνομα τού χρήστη σας. Το πρώτο αναφέρεται στον ιδιοκτήτη τού αρχείου, ενώ το δεύτερο στην ομάδα τού αρχείου. Έτσι οι χρήστες που ανήκουν στην ομάδα σας έχουν τα δικαιώματα τής μεσαίας τριάδας συμβόλων όπως αναφέραμε, ενώ όσοι δεν ανήκουν στην ομάδα σας έχουν τα δικαιώματα τής τελευταίας τριάδας.

Ακολουθεί ένας αριθμός που εκφράζει το μέγεθος τού αρχείου, η ημερομηνία και ώρα δημιουργίας/τροποποίησης τού αρχείου και τέλος το όνομα τού αρχείου.
Κώδικας: Επιλογή όλων
chmod 750 skriptaki.sh

Το παραπάνω είναι παράδειγμα τού γενικού τρόπου καθορισμού τών δικαιωμάτων στο αρχείο. Το 750 είναι ένας οκταδικός αριθμός (octal) που καθωρίζει όλες τις άδειες. Αυτό μεταφράζεται με τον ακόλουθο τρόπο. Το πρώτο ψηφίο αφορά τον ιδιοκτήτη, το δεύτερο την ομάδα και το τρίτο τούς λοιπούς και κάθε ψηφίο εκφράζεται σας άθροισμα όπου r=4, w=2, χ=1 και -=0. Έτσι 7=4+2+1 δηλαδή rwx, 5=4+1 δηλαδή r-x και το 0 σημαίνει ---

Πειραματιστείτε με τις άδειες (μέσα σε αρχεία και φακέλους που θα φτιάξετε στο ~/playground ) για να ξεκαθαρίσετε απορείες τού στυλ: μπορώ να μετακινήσω/σβήσω ένα αρχείο που έχω δικαίωμα εγγραφής μέσα σε φάκελο που δεν έχω δικαίωμα εγγραφής; μπορώ να τού αλλάξω περιεχόμενο; κλπ. (υπόδειξη: οι φάκελοι συμπεριφέρονται σαν αρχεία με περιεχόμενο τούς τίτλους τών φακέλων/αρχείων που περιέχουν)

Γενικά η ιδιοκτησία αλλάζει με το chown ενώ ειδικά για την ομάδα υπάρχει και η chgrp (ίσως χρειάζονται δικαιώματα υπερχρήστη για τέτοιες αλλαγές). Με την εντολή groups βλέπετε σε ποιες ομάδες ανήκετε.

Κάθε αρχείο ανήκει σε έναν χρήστη και μία ομάδα. Κάθε χρήστης μπορεί να ανήκει σε οποιονδήποτε αριθμό ομάδων. Μπορούμε να δημιουργήσουμε όσες ομάδες θέλουμε ώστε να δίνουμε δικαιώματα κατά βούληση. (Αν το σκεφτείτε καλά θα δείτε ότι το γεγονός ότι τα αρχεία ανήκουν σε μία ομάδα δεν είναι περιοριστικό)

Κάντε και το ακόλουθο: Προσθέστε στο skriptaki.sh την γραμμή
Κώδικας: Επιλογή όλων
ls /root

Θα διαπιστώσετε όπως αναμένετε ότι υπάρχει άρνηση πρόσβασης. Πρέπει να το τρέξετε με δικαιώματα υπερχρήστη (sudo).

Με την ευκαιρία διαβάστε και το ενδιαφέρον κομιξάκι που έχει βγάλει η google για τον chrome.
http://www.google.com/googlebooks/chrome/med_26.html
Όλο έχει ενδιαφέρον αλλά συγκεκριμένα αναφέρομαι στις σελίδες 27 ως 29

Ίσως τώρα έχετε μια ιδέα τών δυσκολιών που έχει να αντιμετωπίσει ένας ιός στο λίνουξ. Ένα εκτελέσιμο αν δεν έχει και δικαιώματα υπερχρήστη κανονικά δεν μπορεί να πειράξει το σύστημα. Αυτό αμέσως περιορίζει το πεδίο δράσης του ιού μόνο στα όρια τού χρήστη. Καθώς στο λίνουξ ποτέ δεν ανταλλάσσουμε εκτελέσιμα συστήματος με τον τρόπο που το κάναμε στην DOS ή στα windows πρακτικά δεν μπορούν να διαδοθούν ποτέ ιοί με ανάλογο τρόπο. Υπάρχουν πολλοί που αναφέρουν ότι το λίνουξ δεν υποφέρει από ιούς γιατί δεν το χρησιμοποιεί ανάλογα πολύς κόσμος και επομένως δεν υπάρχει αντίστοιχο ενδιαφέρον να βρεθούν κενά στην άμυνα. Λίνουξ χρησιμοποιούν σήμερα πολλά εκατομμύρια σε όλον τον κόσμο. Κάποτε η DOS δεν είχε τόσους χρήστες, είχε όμως ένα κάρο ιούς. Ακόμα καλύτερα το λίνουξ κανονικά θα έπρεπε να το υπολογίζουμε σαν υψηλής προτεραιότητας στόχο αφού έχει υψηλότατο ποσοστό στούς σέρβερ. Παραμένει όμως ιδιαίτερα ασφαλές. Υπάρχει απόλυτη ασφάλεια; Όχι. Δύο κυρίως είναι οι βασικές τρύπες. Η μία είναι η ανοησία τού ίδιου τού χρήστη και η άλλη είναι οι πιθανές τρύπες στα ίδια τα εγκατεστημένα προγράμματα. Όπως λέει και το ρητό, το λίνουξ είναι τόσο σταθερό όσο είναι τα αποθετήριά του.
Τελευταία επεξεργασία από lucinos και 24 Οκτ 2011, 10:12, έχει επεξεργασθεί 2 φορά/ες συνολικά
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Διαχείριση εργασιών

Δημοσίευσηαπό lucinos » 31 Αύγ 2011, 00:39

Και ερχόμαστε στο τελευταίο θέμα που προσωπικά βρίσκω πολύ βασικό.

Ανοίξτε ένα τερματικό και τρέξτε:
Κώδικας: Επιλογή όλων
gedit


Όπως θα θυμάστε από την προηγούμενη φορά αυτό θα ανοίξει ωραιότατα τον επεξεργαστή gedit αλλά το τερματικό θα κάθεται και θα τον περιμένει. Τώρα όμως θέλουμε να ξαναγυρίσουμε στο τερματικό αλλά χωρίς να κλείσουμε το gedit. Θα μπορούσαμε απλά να ανοίξουμε ένα νέο τερματικό και αυτό να το αφήσουμε για να τρέχει το gedit αλλά αυτό δεν είναι ωραία πρακτική γιατί δεν θέλουμε να γεμίσουμε παράθυρα τερματικών.

Ο τρόπος να διακόψουμε το gedit χωρίς να το κλείσουμε είναι με τον συνδυασμό ctrl+z από το τερματικό.
Το παράθυρο τού gedit τώρα παραμένει ανοικτό. Το gedit δεν έχει κλείσει, το έχουμε όμως διακόψει.
Επιπλέον μάς έχει βγάλει κάτι σαν αυτό:
Κώδικας: Επιλογή όλων
^Z
[1]+  Stopped                 gedit

Το ^Z συμβολίζει το ctrl+z.
Την δεύτερη γραμμή μπορούμε να την δούμε ξανά όποτε θέλουμε τρέχοντας:
Κώδικας: Επιλογή όλων
jobs


Όμως προφανώς το gedit δεν θέλουμε μόνο να το βλέπουμε, θέλουμε να ξαναξεκινήσει να τρέχει. Θέλουμε δηλαδή να τρέχει στο υπόβαθρο (background) ενώ το τερματικό να είναι ελεύθερο για άλλες δουλειές. Αυτό μπορούμε να το πετύχουμε τρέχοντας:
Κώδικας: Επιλογή όλων
bg

H έξοδος θα είναι κάτι σαν αυτό:
Κώδικας: Επιλογή όλων
[1]+ gedit &

και τώρα το gedit τρέχει στο υπόβαθρο. Με την ευκαιρία το αντίθετο τής bg είναι η fg. Δοκιμάστε να τρέξετε πάλι την jobs. Τώρα θα βγάλει κάτι σαν αυτό:
Κώδικας: Επιλογή όλων
[1]+  Running                 gedit &


Μία πολύ σημαντική εντολή είναι η kill. Το gedit σύμφωνα με την jobs όπως βλέπουμε είναι η εργασία 1. Πιθανότατα θα σάς βγάζει το ίδιο αλλά αν τυχών σάς βγάζει άλλον αριθμό χρησιμοποιήστε εκείνον. Ζητήστε να τερματήσει με:
Κώδικας: Επιλογή όλων
kill %1

Αυτό στέλνει σήμα στην εργασία 1 να κλείσει.

Έχετε κλείσει το gedit. Μπορείτε να αποφύγετε όλην την παραπάνω φασαρία λέγοντας εξαρχής ότι το gedit το θέλουμε στο υπόβαθρο. Αυτό το λέμε με το σύμβολο &

Τρέξτε:
Κώδικας: Επιλογή όλων
gedit &

Τώρα το έχουμε στείλει κατευθείαν να τρέχει στο υπόβαθρο.
Σαν έξοδο μάς έχει βγάλει εκτός από το [1] και έναν μυστήριο αριθμό. Αυτός είναι το PID. Μπορούμε να δούμε τις εργασίες με τα PID τους τρέχοντας:
Κώδικας: Επιλογή όλων
ps

Αυτό πιθανότατα θα βγάλει τον ίδιο τον φλοιό (bash), το gedit που τρέχει στο υπόβαθρο καθώς και το ίδιο το ps.

Τις εργασίες μπορούμε να τις σκοτώσουμε και με το PID. πχ:
Κώδικας: Επιλογή όλων
kill 10967

τερματίζει την εργασία με PID 10967.

Το απλό kill δεν σκοτώνει εντελώς άμεσα μια εργασία. Τής στέλνει σήμα να τερματίσει και αναλαμβάνει η ίδια να το κάνει. Συνήθως αυτό είναι αρκετό. Υπάρχουν όμως περιπτώσεις που μια εργασία μπορεί να έχει κρεμάσει τόσο άσχημα που να μην αντιδρά καθόλου ούτε καν σε αυτό το σήμα. Με την επιλογή -9 το σήμα δεν στέλνεται στην εργασία αλλά στον ίδιο τον πυρήνα που αναλαμβάνει να την σκοτώσει.

Για την περίπτωση που θέλουμε να μπορούμε να κλείσουμε το τερματικό χωρίς να κλείνει και το gedit υπάρχει η εντολή nohup. Για παράδειγμα:
Κώδικας: Επιλογή όλων
nohup gedit &

τώρα μπορούμε να κλείσουμε το τερματικό αν το θέλουμε χωρίς να κλείνει το gedit. Για την περίπτωση που δεν χρησιμοποιήσατε την nohup δείτε αυτό
Τελευταία επεξεργασία από lucinos και 16 Ιούλ 2012, 05:14, έχει επεξεργασθεί 3 φορά/ες συνολικά
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Ακόμη λίγα - Μέρος τρίτο

Δημοσίευσηαπό lucinos » 31 Αύγ 2011, 00:39

σύνοψη
προτάσεις βιβλίων

Απαντάτε ελεύθερα στο νήμα! Τώρα που συμμάζεψα τα ποστ ώστε να εμφανίζονται μόνος στην πρώτη σελίδα οι απαντήσεις δεν παρεμβάλλονται!
Τελευταία επεξεργασία από lucinos και 13 Σεπ 2012, 18:54, έχει επεξεργασθεί 5 φορά/ες συνολικά
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Re: Ακόμη λίγα - Μέρος τρίτο

Δημοσίευσηαπό lucinos » 31 Αύγ 2011, 00:39

...
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση


Επιστροφή στο Μαθήματα Τερματικού