Η γραμμή εντολών

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

Re: Η γραμμή εντολών

Δημοσίευσηαπό lucinos » 07 Ιουν 2011, 03:46

@Star_Light
Το συγκεκιμένο κόλπο για να πω την αλήθεια δεν μού πολυαρέσει, προτιμώ τα βελάκια καθώς και το ctrl+r. Αλλά αυτό είναι και θέμα γούστου. Δεν αποφεύγω να ανεφέρω εντολές και χρήσιμα κόλπα αλλά πιστεύω ότι αν αρχίσω να αναφέρω οττιδήποτε, αυτό θα λειτουργήσει αρνητικά σε αυτήν την παρουσίαση.

ΥΓ Μην το πάρεις στραβά, θέλω και τέτοια σχόλια. Αλλά θα προτιμούσα να γράφετε στο νήμα viewtopic.php?f=7&t=18619 αν θέλει κάποιος διαχειριστής, να μετακινήσει το ποστ τού Star_Light εκεί.
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Ψευδώνυμα

Δημοσίευσηαπό lucinos » 07 Ιουν 2011, 03:49

Έχουμε δει ότι υπάρχουν διαφόρων λογιών τύποι εντολών. Πχ εντολές εντοιχισμένες στον φλοιό (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
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Λεξιγνωσία

Δημοσίευσηαπό lucinos » 10 Ιουν 2011, 10: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
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Σκριπτάκια

Δημοσίευσηαπό lucinos » 13 Ιούλ 2011, 09:15

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

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


Μπορείτε να το δημιουργήσετε με όποιον τρόπο θέλετε, μέσω ενός κειμενογράφου όπως τού gedit ή τού nano αλλά λόγω τού μικρού μεγέθους ίσως ο ταχύτερος τρόπος είναι η cat όπως είδαμε στην ενότητα 2.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
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

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

Δημοσίευσηαπό lucinos » 27 Ιούλ 2011, 00:57

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

Βρισκόμαστε στον φάκελο ~/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 σημαίνει ---

Γενικά η ιδιοκτησία αλλάζει με το 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
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

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

Δημοσίευσηαπό lucinos » 27 Αύγ 2011, 12:17

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

Ανοίξτε ένα τερματικό και τρέξτε:
Κώδικας: Επιλογή όλων
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.
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Επίλογος

Δημοσίευσηαπό lucinos » 29 Αύγ 2011, 09:18

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

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

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

Υπάρχουν λίγες περιπτώσεις όπου μπορεί να μην ισχύει η πρώτη ιδέα που έρχεται στο μυαλό κάποιου. Θα αναφέρω εδώ μια περίπτωση.
Υπάρχουν κάποιοι ειδικοί χαρακτήρες όπως το Tab και η νέα γραμμή. Τι γίνεται αν θέλουμε να τα αναπαράγουμε μέσω τής echo; Συνήθως η νέα γραμμή συμβολίζεται με \n και αυτό ισχύει και στην echo όπως μπορείτε να δείτε στο εγχειρίδιο. Κατ αρχήν είναι προεπιλεγμένο η echo να τα αγνοεί. Όμως ούτε το παρακάτω θα δουλέψει:
Κώδικας: Επιλογή όλων
echo -e dyo\nseires

αυτό φαίνεται να το κάνει γιατί πρώτα διαβάζει την συμβολοσειρά απομακρύνοντας το μπακσλας και μετά πάει να εφαρμόσει το -e. Αντιθέτως τα παρακάτω θα δουλέψουν:
Κώδικας: Επιλογή όλων
echo -e dyo\\nseires
echo -e "dyo\nseires"
echo -e 'dyo\nseires'

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

Μια ενδιαφέρουσα περίπτωση. Η παρακάτω "ακατανόητη" εντολή είναι μια "fork bomb". Μην την τρέξετε!
Κώδικας: Επιλογή όλων
:(){ :|:& };:

Για περισσότερες εξηγήσεις πηγαίνετε στο άρθρο τής Βικιπαίδειας.

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

Το κείμενο αυτό δεν προσφέρει πλήρη γνώση, δεν θα μπορούσε να την προσφέρει και ούτε θέλει να την προσφέρει. Δίνει απλώς μια αρχή για τούς αρχάριους ή όσα θα ήθελε να ξέρει κάποιος που δεν θέλει να ασχοληθεί περισσότερο. Δυο βιβλία που είχα υπόψιν μου είναι το "The Linux Command Line" και το "Linux CookBook" (δεν ισχυρίζομαι ότι τα έχω διαβάσει ολόκληρα). Το πρώτο είναι ίσως όττι πιο κοντινό σε αυτό που κάνω αλλά εγώ ήθελα κάτι σαφώς πιο σύντομο καθώς και να βάλω την δική μου λογική, και όχι να μεταφράσω ένα αγγλικό βιβλίο.

Υπάρχουν αρκετά πολύ ενδιαφέροντα θέματα τα οποία δεν ανέπτυξα. Για παράδειγμα δεν ανέφερα καθόλου τούς άλλους φλοιούς (πχ csh, zsh) πέρα από το bash. Ή για παράδειγμα δεν έχω αναπτύξει επαρκώς σχεδόν οττιδήποτε. Εγώ μπορεί να θεωρώ ότι ολοκλήρωσα και πιθανότατα δεν πρόκειται να επιστρέψω για να γράψω τρίτο κεφάλαιο αλλά όποιος θέλει μπορεί να συνεχίσει από εκεί που σταμάτησα σαν τρίτο κεφάλαιο. Μόνο που πιστεύω ότι θα είναι μάλλον καλύτερα να ανοίξει νέο θέμα. Το κυριότερο που εγώ θα ήθελα να προσθέσω είναι βιβλιογραφία και συνδέσμους. Προτείνετέ μου να βάλω! (Δεν θέλω να χαλάσω την ροή με συνδέσμους αλλά πχ καλοί οδηγοί για τα προγράμματα στην ενότητα 2.1 ή γενικότεροι σύνδεσμοι στο τέλος μαζί με την βιβλιογραφία θα ήταν ωραίο).

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

Θα ήθελα να ακούσω κάθε είδους γνώμες και κριτικές από αρχαρίους και μη. Αλλά ειδικά οι αρχάριοι αν μπορούν να μού απαντήσουν:
α) τούς βοήθησε καθόλου;
β) τούς δυσκόλεψε κάπου;
γ) τούς κούρασε;
δ) πόσο χρόνο τούς πήρε;
ε) τούς έμεινε κάποια ιδιαίτερη απορία;
Τελευταία επεξεργασία από lucinos και 29 Αύγ 2011, 17:44, έχει επεξεργασθεί 1 φορά/ες συνολικά
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

κενό

Δημοσίευσηαπό lucinos » 29 Αύγ 2011, 09:27

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

Re: Η γραμμή εντολών

Δημοσίευσηαπό linuxs » 13 Σεπ 2011, 01:05

Ωραία δουλειά! Μπράβο! ;)
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Η γραμμή εντολών

Δημοσίευσηαπό Qwertyn7 » 21 Σεπ 2011, 13:46

πολύ καλή δουλειά! μπράβο! :)
ο οδηγός σου με βοήθησε πολύ να κάνω τα πρώτα βήματα σε περιβάλλον CLI, ηταν ευχάριστος στην ανάγνωση, εύπεπτος και γρήγορος.

μια ιδέα που θα μου άρεσε είναι να ενώσεις όλο τον οδηγό στο αρχικό post!
μπράβο πάντως! :)
1 Γνώσεις → Linux: Αρχάριος με όρεξη ┃ Προγραμματισμός: Μέτριος++ ┃ Αγγλικά: Προχωρημένος
2 Λειτουργικά → Ubuntu 11.04 natty 64bit (en_US.UTF-8),
3 Προδιαγραφές → 4x AMD Phenom II X4 965 Processor ‖ RAM 3960 MiB ‖ ASUS INC. M4A89GTD-PRO/USB3
4 Κάρτες γραφικών: ATI Juniper [Radeon HD 5700 Series] [1002:68b8]
5 Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller [10ec:8168] (rev 06)
Qwertyn7
babeTUX
babeTUX
 
Δημοσιεύσεις: 5
Εγγραφή: 28 Ιουν 2011, 11:23
Τοποθεσία: Αθήνα
Εκτύπωση

ΠροηγούμενηΕπόμενο

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

cron