View on GitHub

learn

Εκπαιδευτικό υλικό αρχαρίων στα Ελληνικά για εκμάθηση βασικών εννοιών σχετικά με τον προγραμματισμό

Εκμάθηση Bash

Μετά την ολοκλήρωση του “μαθήματος” θα έχετε αποκτήσει μια στοιχειώδη γνώση σχετικά με την χρήση εντολών Bash στο terminal. Δεν θα ασχοληθούμε καθόλου με την δημιουργία Bash scripts.

Περιεχόμενα

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

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

Πρίν το $

tut-01

  1. Όνομα χρήστη (user name)
  2. Όνομα υπολογιστή (host name)
  3. Όνομα του φακέλου που βρισκόμαστε αυτή τη στιγμή.

Σημείωση: Το ~ αποτελεί συντόμευση του κεντρικού φακέλου (Home folder) του κάθε χρήστη. Για τόν χρήστη george ισοδυναμεί με το φάκελο /home/george/.

Μετά το $

image

  1. Η εντολή που τρέξαμε
  2. Το αποτέλεσμα που μας επέστρεψε

Σημείωση: Η εντολή whoami μας επιστρέφει το όνομα χρήστη μας.

:heavy_exclamation_mark: Προσοχή: Για να τρέξουμε τις εντολές που θα δούμε στη συνέχεια, πρέπει να πληκτρολογούμε μόνο το δεύτερο μέρος (μετά το $) στη γραμμή εντολών μας!

:heavy_exclamation_mark: Προσοχή: Οτιδήποτε γράφουμε μετά απο το σύμβολο # είναι σχόλια. Αυτό σημαίνει ότι δεν θα τρέξει στην γραμμή εντολών, αλλά έχει απλά βοηθητικό χαρακτήρα.

Περιήγηση στο σύστημα αρχείων (filesystem)

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

Σύστημα αρχείων στο Ubuntu

Το σύστημα αρχείων στο λειτουργικό σύστημα Ubuntu (και όχι μόνο), συνήθως έχει την δομή που φαίνεται παρακάτω. Ο κάθε φάκελος (directory) περιέχει συγκεκριμένα αρχεία, βάσει του συνολικού σχεδιασμού του λειτουργικού συστήματος. Παραδείγματος χάρη, στο φάκελο tmp αποθηκεύονται προσωρινά (temporary) αρχεία, στο φάκελο home αποθηκεύονται τα αρχεία των χρηστών και ούτω καθεξής. Δεν χρειάζεται να εμβαθύνουμε ακόμη σε αυτό, απλά να γνωρίζουμε ότι η θέση του κάθε αρχείου έχει σημασία.

Θα μπορούσαμε να φανταστούμε το σύστημα αρχείων σαν ένα αναποδογυρισμένο δέντρο. Ο πρώτος ή κεντρικός φάκελος / είναι η ρίζα (root directory). Οι “από κάτω” φάκελοι είναι τα κλαδιά του. Το κάθε κλαδί μπορεί να έχει πολλά παρακλάδια, μέχρις ότου φτάσουμε στα “φύλλα”, που είναι τα αρχεία.

Κάθε φάκελος εκτός από το / (το φάκελο-ρίζα), έχει έναν φάκελο “γονέα” (parent directory). Και κάθε φάκελος που περιέχει υποφακέλους (παρακλάδια), έχει παιδιά αυτούς τους υποφακέλους. Το σχήμα που ακολουθεί, θα σας βοηθήσει να το κατανοήσετε ευκολότερα.

/  <- Ο κεντρικός φάκελος του συστήματος (root directory)
├── boot
├── build
├── cdrom
├── dev
├── etc
├── home <- Ο φάκελος home έχει γονέα το root directory και παιδιά τους φακέλους george και peter.
│   ├── george <- Ο φάκελος george έχει γονέα το φάκελο home
│   ├── peter  <- Ο κεντρικός φάκελος του χρήστη peter
│   ├── ...
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── snap
├── srv
├── sys
├── tmp
├── usr
└── var

Ειδικά σύμβολα για το filesystem

Υπάρχουν ορισμένα σύμβολα-συντομεύεσεις που μας βοηθούν να περιγράφουμε κάποιες συχνά χρησιμοποιούμενες τοποθεσίες στο filesystem με συντομία.

Τα παραπάνω σύμβολα μπορούμε να τα χρησιμοποιούμε σχεδόν σε όλες εντολές μας.

Έυρεση τρέχουσας τοποθεσίας

Για να βρούμε το πλήρες “μονοπάτι” (path) της τρέχουσας τοποθεσίας χρησιμοποιούμε την εντολή pwd.

george@ktb:~$ pwd
/home/george

Αλλαγή τρέχουσας τοποθεσίας

Για να περιγιηθούμε στο filesystem, χρησιμοποιούμαι την εντολή cd. Η εντολή δεν επιστρέφει κάποιο αποτέλεσμα, αλλά αλλάζει την τρέχουσα τοποθεσία μας.

Αν γράψουμε την εντολή cd χωρίς κάποια παράμετρο, μας μεταφέρει στο home directory του χρήστη μας.

george@ktb:~/Documents/tutorials$ cd
george@ktb:~$

Αν μετά την εντολή περάσουμε σαν παράμετρο την τοποθεσία στο filesystem που θέλουμε να περιηγηθούμε, μας μεταφέρει εκεί.

george@ktb:~$ cd Documents/tutorials
george@ktb:~/Documents/tutorials$

Σε αυτό το σημείο, είναι απαραίτητο να επισημάνουμε τις δύο διαφορετικές μορφές που μπορεί να έχει το “όνομα” της τοποθεσίας (path). Συγκεκριμένα, μπορούμε να περιγράψουμε μια τοποθεσία με το πλήρες ή πιο σωστά απόλυτο μόνοπάτι (absolute path) και με το σχετικό μονοπάτι (relative path).

Το προηγούμενο παράδειγμα με τη χρήση absolute path:

george@ktb:~$ cd /home/george/Documents/tutorials
george@ktb:~/Documents/tutorials$

Ακόμα, μπορούμε να χρησιμοποιήσουμε σαν παράμετρο τοποθεσίας τη συντόμευση .. που μας πηγαίνει στον “επάνω” φάκελο από αυτόν που βρισκόμαστε (parent folder).

george@ktb:~/Documents/tutorials$ cd ..
george@ktb:~/Documents$

Δημιουργία φακέλων και αρχείων

Φάκελοι

Γινα να δημιουργήσουμε νέους φακέλους, χρησιμοποιούμε την εντολή mkdir και δίνουμε σας παράμετρο το path (απόλυτο ή σχετικό) του φακέλου που θέλουμε να δημιουργήσουμε.

# relative path
george@ktb:~$ mkdir new-folder
george@ktb:~$ 

# absolute path
george@ktb:~$ mkdir /home/george/new-folder2
george@ktb:~$ 

:heavy_exclamation_mark: Προσοχή: Αν ο φάκελος που θέλουμε να δημιουργήσουμε, είναι παιδί φακέλου που δεν υπάρχει ήδη, πρέπει να χρησιμοποιήσουμε και το flag -p στην εντολή μας, αλλιώς θα μας επιστρέψει error.

Παραδείγματος χάρη, αν θελώ να δημιουργήσω το φάκελο mp3 ως παιδί του φακέλου songs, αν δεν υπάρχει ο φάκελος songs θα πάρω το παρακάτω error.

george@ktb:~$ mkdir songs/mp3
mkdir: cannot create directory ‘songs/mp3’: No such file or directory

Αν προσθέσω το -p, η εντολή mkdir θα δημιουργησει κατ τους δύο φακέλους.

george@ktb:~$ mkdir -p songs/mp3
george@ktb:~$ 

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

george@ktb:~$ ls songs
mp3/
george@ktb:~$ 

Αρχεία

Όπως καταλαβαίνουμε, υπάρχουν πάρα πολλά είδη αρχείων και αντιστοίχως πάρα πολλοί τρόποι να τα δημιουργήσουμε. Οι περισσότεροι χρήστες συνήθως χρησιμοποιουν προγράμματα με γραφικό περιβάλλον (πχ κάποιο Word editor) για να δημιουργήσουν αρχεία ή κατεβάζουν διάφορα αρχεία από το internet. Παρόλα αυτά, υπάρχουν πολλές φορές που είναι χρήσιμο για κάποιον προχωρημένο χρήστη ή κάποιον προγραμματιστή να δημιουργεί αρχεία μέσω της γραμμής εντολών. Μπορεί για παράδειγμα να θέλει να αποθηκεύσει το αποτέλεσμα μιάς εντολής σε ενα αρχείο, να εργάζεται απομακρυσμένα σε κάποιον server που δε διαθέτει γραφικό περιβάλλον ή να πρέπει να δημιουργήσει ένα αρχείο ρυθμίσεων με δικαιώματα διαχειριστή. Προς το παρόν, θα μάθουμε έναν πολύ απλό τρόπο να δημιουργούμε αρχεία κειμένου και στη συνέχεια θα δούμε κάποιους πιο προχωρημένους τρόπους.

Η εντολή για να δημιουργήσουμε ένα νέο αρχείο ονομάζεται touch και λαμβάνει σαν όρισμα το absolute ή relative path του αρχείου που θα δημιουργήσουμε

# relative path
george@ktb:~$ touch Documents/new_file.txt
george@ktb:~$ 

# absolute path
george@ktb:~$ touch /home/george/Documents/new_file2.txt 
george@ktb:~$ 

Μπορούμε να επιβεβαιώσουμε ότι τα αρχεία έχουν δημιουργηθεί με τη χρήση της ls:

george@ktb:~$ ls Documents
george@ktb:~$ ls Documents/
new_file2.txt  new_file.txt
george@ktb:~$ 

Ανάγνωση αρχείων

Η γραμμή εντολών είναι μια text-based διεπαφή με τον υπολογιστή. Αυτό σημαίνει ότι αλληλεπιδρούμε χρησιμοποιώντας κείμενο, οπότε τα αρχεία που μπορούμε να διαβάσουμε μέσω της γραμμής εντολών είναι αρχεία κειμένου. Δεν είναι απαραίτητο να είναι .txt αρχεία, αλλά είναι απαραίτητο να περιέχουν κείμενο. Σε διαφορετική περίπτωση, εκτός αν έχουμ εγκαταστήσει κάποιο ειδικό πρόγραμμα, αυτό που θα διαβάσουμε θα είναι μια ατέλειωτη σειρά απο ακαταλαβίστικους χαρακτήρες.

Η εντολή με την οποία διαβάζουμε αρχεία κειμένα στη γραμμή εντολών είναι η cat και παίρνει σαν παράμετρο το absolute ή το relative path του αρχείου που θέλουμε να διαβάσουμε.

# absolute path
george@ktb:~$ cat /home/george/Documents/readme.txt 
Hello. This is an example test file!
george@ktb:~$ 

# relative path
george@ktb:~$ cat Documents/readme.txt 
Hello. This is an example test file!
george@ktb:~$ 

# absolute path using the ~ symbol to indicate our "home" folder
george@ktb:~$ cat ~/Documents/readme.txt 
Hello. This is an example test file!
george@ktb:~$ 

Αν προσπαθήσουμε να διαβάσουμε κάποιο αρχείο που δεν υπάρχει, παίρνουμε το παρακάτω error:

george@ktb:~$ cat readme.txt
cat: readme.txt: No such file or directory
george@ktb:~$ 

:heavy_exclamation_mark: Προσοχή: Από αυτό το σημείο και μετά, όλες οι εντολές που θα βλέπουμε θα αποτελούνται αποκλειστικά από το μέρος που θα πρέπει να πληκτρολογήσουμε εμείς, δηλαδή μετά το $. Αυτό γίνεται για λόγους ευκολίας και για να μπορείτε να κάνετε πιο εύκολα copy paste τις εντολές στο δικό σας τερματικό.

Αντιγραφή και μετακίνηση αρχείων και φακέλων

Αντιγραφή (copy)

Η αντιγραφή και επικόλληση αρχείων και φακέλων στο Ubuntu μπορεί να γίνει μέσω της γραμμής εντολών χρησιμοποιώντας την εντολή cp. Για να αντιγράψετε ένα αρχείο ή έναν φάκελο από μια θέση σε μια άλλη, χρησιμοποιήστε τις παρακάτω εντολές:

cp /path/to/source /path/to/destination

Για παράδειγμα, για να αντιγράψετε ένα αρχείο με όνομα example.txt από την επιφάνεια εργασίας σε έναν φάκελο με όνομα backup, θα πληκτρολογήσετε:

cp ~/Desktop/example.txt /backup/

Για να αντιγράψετε έναν φάκελο και τα περιεχόμενά του, προσθέστε την επιλογή -r, που σημαίνει αναδρομική (recursive):

cp -r /path/to/source /path/to/destination

Για παράδειγμα, για να αντιγράψετε έναν φάκελο με όνομα myproject και όλα τα περιεχόμενά του σε έναν φάκελο με όνομα backup, θα πληκτρολογήσετε:

cp -r ~/Documents/myproject /backup/

Μετακίνηση (move)

Η μετακίνηση αρχείων και φακέλων στο Ubuntu μπορεί να γίνει μέσω της γραμμής εντολών χρησιμοποιώντας την εντολή mv. Για να μετακινήσετε ένα αρχείο ή έναν κατάλογο από μια θέση σε μια άλλη, χρησιμοποιήστε τις παρακάτω εντολές:

mv /path/to/source /path/to/destination

Για παράδειγμα, για να μετακινήσετε ένα αρχείο με όνομα example.txt από την επιφάνεια εργασίας σε έναν φάκελο με όνομα backup, θα πληκτρολογήσετε:

mv ~/Desktop/example.txt ~/backup/

Για να μετακινήσετε έναν φάκελο και όλα τα περιεχόμενά του, χρησιμοποιούμε ακριβώς την ίδια σύνταξη:

mv -r /path/to/source /path/to/destination

Για παράδειγμα, για να μετακινήσετε έναν κατάλογο με όνομα myproject και όλα τα περιεχόμενά του σε έναν κατάλογο με όνομα backup, θα πληκτρολογήσετε:

mv ~/Documents/myproject ~/backup/

Εάν ο φάκελος προορισμού (source folder/directory) υπάρχει ήδη, ο φάκελος προέλευσης (source folder/directory) και τα περιεχόμενά του θα μεταφερθούν σε αυτόν. Εάν ο φάκελος προορισμού δεν υπάρχει ήδη,τότε θα δημιουργηθεί και ο φάκελος προέλευσης και τα περιεχόμενά του θα μεταφερθούν σε αυτόν.

Μετονομασία (rename)

Για να μετονομάσετε ένα αρχείο ή έναν φάκελο, χρησιμοποιήστε την εντολή mv και καθορίστε το νέο όνομα του αρχείου ή του φακέλου:

mv /path/to/source /path/to/newname

Για παράδειγμα, για να μετονομάσετε ένα αρχείο με όνομα oldname.txt σε newname.txt στον φάκελο Desktop, θα πληκτρολογήσετε:

mv ~/Desktop/oldname.txt ~/Desktop/newname.txt

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

Διαγραφή αρχείων και φακέλων

Η διαγραφή αρχείων και φακέλων στο Ubuntu μπορεί να γίνει μέσω της γραμμής εντολών χρησιμοποιώντας την εντολή rm.

Για να διαγράψετε ένα αρχείο, χρησιμοποιήστε τις ακόλουθες εντολές:

rm /path/to/file

Για παράδειγμα, για να διαγράψετε ένα αρχείο με όνομα example.txt στον φάκελο Desktop, θα πληκτρολογήσετε:

rm ~/Desktop/example.txt

Για να διαγράψετε έναν φάκελο και τα περιεχόμενά του, προσθέστε την επιλογή -r, που σημαίνει αναδρομική (recursive):

rm -r /path/to/directory

Για παράδειγμα, για να διαγράψετε έναν φάκελο με όνομα myproject που βρίσκεται μέσα στον φάκελο Documents και όλα τα περιεχόμενά του, θα πληκτρολογήσετε:

rm -r ~/Documents/myproject

Να είστε προσεκτικοί όταν χρησιμοποιείτε την εντολή rm με την επιλογή -r, καθώς θα διαγράψει τον φάκελο και όλα τα περιεχόμενά του χωρίς επιβεβαίωση. Συνιστάται να χρησιμοποιείτε αυτή την επιλογή με προσοχή και να βεβαιώνεστε ότι διαγράφετε τον σωστό φάκελο.

Μπορείτε επίσης να χρησιμοποιήσετε την εντολή rm με την επιλογή -i για να ζητήσετε επιβεβαίωση πριν από τη διαγραφή κάθε αρχείου ή φακέλου:

rm -i /path/to/file
rm -ri /path/to/directory

Αν πρέπει να διαγράψετε ένα αρχείο ή φάκελο κατάλογο που ανήκει σε άλλον χρήστη ή απαιτεί πρόσβαση root, μπορείτε να χρησιμοποιήσετε την εντολή sudo για να εκτελέσετε την εντολή rm με δικαιώματα root:

sudo rm /path/to/file
sudo rm -r /path/to/directory

Όταν χρησιμοποιείτε το sudo, θα πρέπει να εισαγάγετε τον κωδικό πρόσβασής σας για να επιβεβαιώσετε ότι έχετε πρόσβαση διαχειριστή. Να είστε πολύ προσεκτικοί όταν χρησιμοποιείτε την εντολή rm, καθώς τα διαγραμμένα αρχεία και φάκελοι δεν μπορούν να ανακτηθούν. Βεβαιωθείτε ότι έχετε δημιουργήσει αντίγραφο ασφαλείας των σημαντικών αρχείων πριν τα διαγράψετε.

Redirects

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

Υπάρχουν δύο κύριοι τύποι ανακατευθύνσεων: ανακατευθύνσεις εξόδου (output redirects) και ανακατευθύνσεις εισόδου (input redirects).

Output Redirects

Οι ανακατευθύνσεις εξόδου σας επιτρέπουν να ανακατευθύνετε την έξοδο μιας εντολής σε ένα αρχείο αντί για το τερματικό. Τα πιο συνηθισμένα σύμβολα ανακατεύθυνσης εξόδου είναι τα εξής:

Ακολουθεί ένα παράδειγμα χρήσης μιας ανακατεύθυνσης εξόδου για να γράψετε την έξοδο μιας εντολής σε ένα αρχείο:

ls > filelist.txt

Αυτή η εντολή θα δημιουργήσει ένα αρχείο με όνομα filelist.txt και θα γράψει την έξοδο της εντολής ls στο αρχείο αυτό.

Input Redirects

Οι ανακατευθύνσεις εισόδου σας επιτρέπουν να διαβάζετε την είσοδο από ένα αρχείο αντί για το πληκτρολόγιο. Το πιο συνηθισμένο σύμβολο ανακατεύθυνσης εισόδου είναι το <.

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

sort < filelist.txt

Αυτή η εντολή θα διαβάσει τα περιεχόμενα του αρχείου filelist.txt και θα ταξινομήσει την έξοδο.

Combining Redirects

Μπορείτε επίσης να συνδυάσετε ανακατευθύνσεις για να ανακατευθύνετε τόσο την είσοδο όσο και την έξοδο. Για παράδειγμα:

sort < filelist.txt > sortedlist.txt

Αυτή η εντολή θα διαβάσει τα περιεχόμενα του αρχείου filelist.txt, θα ταξινομήσει την έξοδο και θα γράψει την ταξινομημένη έξοδο σε ένα νέο αρχείο με όνομα sortedlist.txt.

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

Δικαιώματα αρχείων

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

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

Ακολουθεί μια ανάλυση του τι σημαίνει κάθε επίπεδο δικαιωμάτων:

Υπάρχουν επίσης τρεις τύποι χρηστών στους οποίους μπορεί να χορηγηθεί πρόσβαση σε ένα αρχείο ή έναν φάκελο:

Owner: Ο χρήστης στον οποίο ανήκει το αρχείο ή ο φάκελος. Group: Μια ομάδα χρηστών στους οποίους έχει χορηγηθεί πρόσβαση στο αρχείο ή τον φάκελο. Other: Κάθε χρήστης που δεν είναι ο ιδιοκτήτης (owner) ή μέλος της ομάδας (group).

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

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

-rw-r--r--  1 user  group  12345 Jan 1 00:00 example.txt
drwxr-xr-x  2 user  group  4096  Jan 1 00:00 example_dir

Η πρώτη στήλη υποδεικνύει τον τύπο αρχείου και τα δικαιώματα. Στο πρώτο παράδειγμα, τα δικαιώματα του αρχείου είναι -rw-r–r–, που σημαίνει ότι ο ιδιοκτήτης έχει πρόσβαση ανάγνωσης και εγγραφής και η ομάδα και οι άλλοι χρήστες έχουν πρόσβαση ανάγνωσης. Στο δεύτερο παράδειγμα, τα δικαιώματα φακέλου είναι drwxr-xr-x, που σημαίνει ότι ο ιδιοκτήτης έχει πρόσβαση ανάγνωσης, εγγραφής και εκτέλεσης και η ομάδα και οι άλλοι χρήστες έχουν πρόσβαση ανάγνωσης και εκτέλεσης.

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

Ακολουθεί ένα παράδειγμα χρήσης της εντολής chmod για να ορίσετε δικαιώματα αρχείων και φακέλων:

chmod 644 example.txt
chmod 755 example_dir

Η πρώτη εντολή θέτει τα δικαιώματα του αρχείου example.txt σε -rw-r--r--, που σημαίνει ότι ο ιδιοκτήτης έχει πρόσβαση ανάγνωσης και εγγραφής και η ομάδα και οι άλλοι χρήστες έχουν πρόσβαση ανάγνωσης. Η δεύτερη εντολή θέτει τα δικαιώματα φακέλου για το example_dir σε drwxr-xr-x, που σημαίνει ότι ο ιδιοκτήτης έχει πρόσβαση ανάγνωσης, εγγραφής και εκτέλεσης και η ομάδα και οι άλλοι χρήστες έχουν πρόσβαση ανάγνωσης και εκτέλεσης.

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

Η εντολή sudo

Στο Linux, ο χρήστης root είναι ένας ειδικός χρήστης με προνόμια διαχείρισης. Ο χρήστης root έχει τη δυνατότητα να εκτελεί οποιαδήποτε ενέργεια στο σύστημα, συμπεριλαμβανομένης της τροποποίησης αρχείων συστήματος και της εγκατάστασης λογισμικού. Ωστόσο, η χρήση του χρήστη root για καθημερινές εργασίες μπορεί να είναι επικίνδυνη, καθώς ακόμη και ένα μικρό λάθος μπορεί να προκαλέσει σοβαρή ζημιά στο σύστημα.

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

Η εντολή sudo σημαίνει “superuser do” και χρησιμοποιείται για την εκτέλεση εντολών με αυξημένα προνόμια. Για να χρησιμοποιήσετε την εντολή sudo, απλά προθέστε την εντολή που θέλετε να εκτελέσετε με το “sudo”, όπως παρακάτω:

sudo command

Για παράδειγμα, για να εγκαταστήσετε ένα πακέτο χρησιμοποιώντας τον διαχειριστή πακέτων apt, θα εκτελέσετε:

sudo apt install package-name

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

Διαχείριση πακέτων

Ένα από τα βασικά χαρακτηριστικά του Ubuntu είναι το σύστημα διαχείρισης πακέτων. Ο διαχειριστής πακέτων είναι ένα εργαλείο που απλοποιεί την εγκατάσταση, την ενημέρωση και την αφαίρεση πακέτων λογισμικού σε ένα σύστημα. Στο Ubuntu, ο προεπιλεγμένος διαχειριστής πακέτων είναι το apt (Advanced Package Tool), το οποίο είναι ένα εργαλείο γραμμής εντολών που παρέχει έναν εύκολο και αποτελεσματικό τρόπο διαχείρισης πακέτων λογισμικού.

Εγκατάσταση πακέτων

Για να εγκαταστήσετε ένα πακέτο χρησιμοποιώντας το apt, πρέπει να ανοίξετε τη γραμμή εντολών και να πληκτρολογήσετε την ακόλουθη εντολή:

sudo apt install package_name
# για παραδειγμα για να εγκαταστήσουμε το GIMP Image Editor
sudo apt install gimp

Όταν πατήσετε Enter, το apt θα κατεβάσει και θα εγκαταστήσει αυτόματα το πακέτο και όλες τις εξαρτήσεις (dependencies) του. Η εντολή sudo χρησιμοποιείται για την εκτέλεση της εντολής apt με δικαιώματα διαχειριστή, τα οποία απαιτούνται για την εγκατάσταση πακέτων στο Ubuntu.

Απεγκατάσταση πακέτων

Για να απεγκαταστήσετε ένα πακέτο χρησιμοποιώντας το apt, πρέπει να ανοίξετε τη γραμμή εντολών και να πληκτρολογήσετε την ακόλουθη εντολή:

sudo apt remove package_name
# για παραδειγμα για να εγκαταστήσουμε το GIMP Image Editor
sudo apt remove gimp

Αυτή η εντολή θα αφαιρέσει το πακέτο και όλες τις εξαρτήσεις του που δεν απαιτούνται πλέον από οποιοδήποτε άλλο εγκατεστημένο πακέτο.

Ενημέρωση πακέτων

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

sudo apt update

Για να αναβαθμίσετε όλα τα εγκατεστημένα πακέτα στις πιο πρόσφατες εκδόσεις τους, γράψτε:

sudo apt upgrade

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

Τερματισμός και επανεκκίνηση

Για να τερματίσουμε τη λειτουργία του υπολογιστή μας από τη γραμμή εντολών, αρκεί να εισάγουμε:

poweroff

Αντίστοιχα για επανεκκίνηση χρησιμοποιούμε:

reboot

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

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

Για να καταγράψετε όλες τις διεργασίες που εκτελούνται στο σύστημα Ubuntu, ανοίξτε ένα τερματικό και πληκτρολογήστε την ακόλουθη εντολή:

ps aux

Αυτή η εντολή θα εμφανίσει μια λίστα με όλες τις εκτελούμενες διεργασίες μαζί με τους αντίστοιχους ID διεργασίας (PID), η οποία μπορεί να είναι χρήσιμη για τον εντοπισμό και τη διαχείριση μεμονωμένων διεργασιών.

Για να μάθετε πόσους πόρους του συστήματος χρησιμοποιεί μια συγκεκριμένη διεργασία, μπορείτε να χρησιμοποιήσετε την εντολή top. Ανοίξτε ένα τερματικό και πληκτρολογήστε την ακόλουθη εντολή:

top

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

Αν θέλετε να σταματήσετε μια συγκεκριμένη διεργασία, μπορείτε να χρησιμοποιήσετε την εντολή kill ακολουθούμενη από τον αριθμό PID της διεργασίας που θέλετε να τερματίσετε. Ανοίξτε ένα τερματικό και πληκτρολογήστε την ακόλουθη εντολή:

sudo kill PID

Αντικαταστήστε το PID με τον Process ID της διεργασίας που θέλετε να τερματίσετε. Για παράδειγμα, αν θέλετε να τερματίσετε μια διεργασία με PID 1234, θα πληκτρολογήσετε:

sudo kill 1234

Αυτό θα τερματίσει αμέσως την καθορισμένη διεργασία. Σημειώστε ότι η χρήση της εντολής kill μπορεί ενδεχομένως να προκαλέσει απώλεια δεδομένων ή άλλα προβλήματα, γι’ αυτό χρησιμοποιήστε την με προσοχή και μόνο όταν είναι απαραίτητο.

Pipes

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

Η σύνταξη για τη χρήση των pipes είναι απλή. Χρησιμοποιείτε τον χαρακτήρα | για να συνδέσετε δύο εντολές, όπως παρακάτω:

command1 | command2

Αυτό μεταφέρει την έξοδο της command1 στην είσοδο της command2.

Παράδειγμα 1: Καταμέτρηση αρχείων

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

ls | wc -l

Η εντολή ls απαριθμεί τα αρχεία στον φάκελο και η εντολή wc -l μετράει τον αριθμό των γραμμών στην έξοδο (που είναι ο αριθμός των αρχείων στον φάκελο).

Η εντολή grep

Το grep είναι ένα βοηθητικό πρόγραμμα γραμμής εντολών που χρησιμοποιείται για να αναζητούμε σε αρχεία κειμένου για γραμμές ή λέξεις που ταιριάζουν με ένα καθορισμένο μοτίβο. Τα αρχικά του σημαίνουν “global regular expression print”. Η σύνταξη της grep είναι η ακόλουθη:

grep pattern file

Όπου pattern είναι η έκφραση που θέλετε να αναζητήσετε και file είναι το αρχείο που θέλετε να αναζητήσετε.

Παράδειγμα 1: Αναζήτηση για μια συγκεκριμένη λέξη

Ας υποθέσουμε ότι έχετε ένα αρχείο κειμένου με όνομα sample.txt που περιέχει μια λίστα ονομάτων και θέλετε να αναζητήσετε όλες τις εμφανίσεις του ονόματος “Alice”. Μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή grep:

grep "Alice" sample.txt

Παράδειγμα 2: Αναζήτηση για PID

Ας υποθέσουμε ότι θέλετε να βρείτε το PID του Chrome για να το σκοτώσετε, καθώς τρώει μεγάλο κομμάτι των πόρων του υπολογιστή σας. Για να το πετύχουμε αυτό θα χρεαστεί να χρησιμοποιήσουμε την εντολή ps, την εντολή grep καθώς και ένα pipe για να συνδέσουμε την έξοδο της μίας στην είσοδο της άλλης:

ps aux | grep google-chrome

Αυτή η εντολή θα εμφανίσει όλες τις διεργασίες που εκτελούνται μαζί με τη χρήση των πόρων τους χρησιμοποιώντας την εντολή ps aux και στη συνέχεια θα “συνδέσει” την έξοδο στην grep, η οποία θα αναζητήσει όλες τις γραμμές που περιέχουν τη συμβολοσειρά “google-chrome”. Αυτό θα σας δώσει μια λίστα με όλες τις διεργασίες “google-chrome” που εκτελούνται.

Η έξοδος της εντολής θα περιλαμβάνει αρκετές στήλες πληροφοριών, συμπεριλαμβανομένου του PID κάθε διεργασίας. Αναζητήστε τη γραμμή που αντιστοιχεί στη διεργασία “google-chrome” που σας ενδιαφέρει και σημειώστε το PID που αναγράφεται στην πρώτη στήλη. Αυτό είναι το αναγνωριστικό διεργασίας για τη συγκεκριμένη διεργασία “google-chrome”.

Αφού έχετε το PID, μπορείτε να χρησιμοποιήσετε άλλες εντολές, όπως η kill, για να τερματίσετε τη διεργασία, αν χρειαστεί.

Λήψη αρχείων

Συχνά θα χρειαστεί να κάνουμε λήψη κάποιου αρχείου μέσω της γραμμής εντολών. Υπάρχουν αρκετοί τρόποι για να το πετύχουμε αλλά οι πιο διαδεδομένοι είναι η εντολή curl και η εντολή wget.

Για να κατεβάσετε ένα αρχείο χρησιμοποιώντας το wget, πρέπει να γνωρίζετε τη διεύθυνση URL του αρχείου που θέλετε να κατεβάσετε. Μόλις έχετε τη διεύθυνση URL, απλά χρησιμοποιήστε την εντολή wget ακολουθούμενη από τη διεύθυνση URL του αρχείου που θέλετε να κατεβάσετε. Για παράδειγμα, για να κατεβάσετε ένα αρχείο με όνομα example.txt από έναν ιστότοπο με τη διεύθυνση URL http://www.example.com/example.txt, θα χρησιμοποιήσετε την ακόλουθη εντολή:

wget http://www.example.com/example.txt

Αν δεν ορίσουμε εμείς κάποιο destination, το wget θα αποθηκεύσει το κατεβασμένο αρχείο στον τρέχοντα φάκελο.

Για να κατεβάσετε ένα αρχείο χρησιμοποιώντας το curl, πρέπει να γνωρίζετε τη διεύθυνση URL του αρχείου που θέλετε να κατεβάσετε. Μόλις έχετε τη διεύθυνση URL, απλά χρησιμοποιήστε την εντολή curl ακολουθούμενη από τη διεύθυνση URL του αρχείου που θέλετε να κατεβάσετε. Για παράδειγμα, για να κατεβάσετε ένα αρχείο με όνομα example.txt από έναν ιστότοπο με τη διεύθυνση URL http://www.example.com/example.txt, θα πρέπει να χρησιμοποιήσετε την ακόλουθη εντολή:

curl -O http://www.example.com/example.txt

Η παράμετρος -O στην εντολή curl σημαίνει “output” και λέει στην curl να χρησιμοποιήσει το ίδιο όνομα με το απομακρυσμένο αρχείο για το αρχείο που κατέβασε.

Συμπίεση και αποσυμπίεση

Στο Linux, ένα “archive” είναι μια συλλογή αρχείων που αποθηκεύονται μαζί σε ένα ενιαίο αρχείο. Η αρχειοθέτηση (archiving) αρχείων είναι μια συνηθισμένη εργασία στο Linux, καθώς σας επιτρέπει να συνδυάσετε πολλά αρχεία σε ένα ενιαίο αρχείο, διευκολύνοντας τη μεταφορά ή την αποθήκευσή τους.

Ένα από τα πιο δημοφιλή εργαλεία για την αρχειοθέτηση αρχείων στο Linux είναι το tar. Η εντολή tar σημαίνει “tape archive” και χρησιμοποιείται για τη δημιουργία, συμπίεση και αποσυμπίεση archives.

Δημιουργία archive

Για να δημιουργήσετε ένα archive με την εντολή tar, χρησιμοποιήστε τις επιλογές cvf ακολουθούμενες από το όνομα του archive και τα ονόματα των αρχείων ή των φακέλων που θέλετε να αρχειοθετήσετε. Για παράδειγμα, για να δημιουργήσετε ένα archive όλων των αρχείων στον κατάλογο Documents, θα εκτελέσετε την ακόλουθη εντολή:

tar cvf archive.tar Documents/

Αυτή η εντολή δημιουργεί ένα archive με όνομα archive.tar που περιέχει όλα τα αρχεία του φακέλου Documents.

Συμπίεση

Για να συμπιέσετε ένα archive, χρησιμοποιήστε την επιλογή z με το tar. Αυτή η επιλογή συμπιέζει το archive χρησιμοποιώντας συμπίεση gzip, η οποία μειώνει το μέγεθος του τελικού αρχείου. Για παράδειγμα, για να συμπιέσετε το αρχείο archive.tar που δημιουργήθηκε στο προηγούμενο παράδειγμα, θα εκτελέσετε την ακόλουθη εντολή:

tar xzvf archive.tar.gz

Αυτή η εντολή δημιουργεί ένα συμπιεσμένο αρχείο με όνομα archive.tar.gz που περιέχει όλα τα αρχεία του φακέλου Documents.

Αποσυμπίεση

Για να αποσυμπιέσετε ένα archive, χρησιμοποιήστε τις επιλογές xvf ακολουθούμενες από το όνομα του συμπιεσμένου archive. Για παράδειγμα, για να αποσυμπιέσετε το αρχείο archive.tar.gz που δημιουργήθηκε στο προηγούμενο παράδειγμα, θα εκτελέσετε την ακόλουθη εντολή:

tar xzvf archive.tar.gz

Αυτή η εντολή εξάγει όλα τα αρχεία από το συμπιεσμένο αρχείο στον τρέχοντα φάκελο.

Απομακρυσμένη πρόσβαση μέσω SSH

Το SSH ή Secure Shell είναι ένα πρωτόκολλο που χρησιμοποιείται για την ασφαλή πρόσβαση σε απομακρυσμένους διακομιστές (servers) ή μηχανήματα μέσω δικτύου. Παρέχει μια ασφαλή κρυπτογραφημένη σύνδεση που επιτρέπει στους χρήστες να συνδέονται με ασφάλεια και να εκτελούν εντολές από απόσταση.

Για να συνδεθείτε σε έναν απομακρυσμένο διακομιστή χρησιμοποιώντας SSH, ανοίξτε ένα τερματικό και πληκτρολογήστε την ακόλουθη εντολή, αντικαθιστώντας το “username” με το όνομα χρήστη σας και το “server_ip” με τη διεύθυνση IP του απομακρυσμένου διακομιστή:

ssh username@server_ip

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

pwd

Για να αποσυνδεθείτε από τον απομακρυσμένο διακομιστή, απλά πληκτρολογήστε:

exit

Και πατήστε enter. Αυτό θα τερματίσει τη σύνδεση SSH και θα σας επιστρέψει στη γραμμή εντολών του τοπικού σας υπολογιστή.

Cheatsheet

Καθώς υπάρχουν πολλές εντολές και με ιδιαίτερη σύνταξη, είναι απίθανο να μπορέσει κάποιος να τις θυμάται όλες. Για αυτό το λόγο, οι περισσότερες εντολές, αν τους προσθέσουμε την παράμετρο --help, μας εμφανίζουν τον τρόπο χρήσης τους. Παραδείγματος χάρη, αν θέλουμε να δούμε τον τρόπο λειτουργίας της εντολής curl αρκεί να πληκτρολογήσουμε:

curl --help

Usage: curl [options...] <url>
 -d, --data <data>          HTTP POST data
 -f, --fail                 Fail silently (no output at all) on HTTP errors
 -h, --help <category>      Get help for commands
 -i, --include              Include protocol response headers in the output
 -o, --output <file>        Write to file instead of stdout
 -O, --remote-name          Write output to a file named as the remote file
 -s, --silent               Silent mode
 -T, --upload-file <file>   Transfer local FILE to destination
 -u, --user <user:password> Server user and password
 -A, --user-agent <name>    Send User-Agent <name> to server
 -v, --verbose              Make the operation more talkative
 -V, --version              Show version number and quit

This is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.
For all options use the manual or "--help all".

Πολλές φορές οι ενσωματωμένες οδηγίες χρήσης των διαφόρων προγραμμάτων μπορεί να είναι πολύ περίπλοκες, να περιέχουν μεγάλο όγκο πληροφοριών ή να έιναι πολύ τεχνικές σε σημείο που να δυσκολέυεται ένας αρχάριος χρήστης. Για αυτό το λόγο έχει δημιουργηθεί η πλατφόρμα tldr, η οποία περιέχει απλές και σύντομες οδηγίες χρήσης για τις πιο συχνές λειτουργίες όλων των βασικών εντολών. Μπορούμε να χρησιμοποιήσουμε την πλατφόρμα, είτε μέσω της ιστοσελίδας της, είτε απευθείας μέσω του terminal μας με κάποιον client.

Ένας από τους ταχύτερους και πιο εύχρηστους clients είναι ο tealdeer. Για να τον εγκαταστήσουμε αρκεί να τρέξουμε τις παρακάτω εντολές:

wget -O tldr https://github.com/dbrgn/tealdeer/releases/download/v1.6.1/tealdeer-linux-$(uname -m)-musl
sudo install --mode +x tldr /usr/local/bin && rm -fr tldr

Έτσι μπορούμε να βλέπουμε τις πιο “user-friendly” οδηγίες χρήσης μιας εντολής απευθείας από τη γραμμή εντολών:

tldr curl

tldr curl

  Transfers data from or to a server.
  Supports most protocols, including HTTP, FTP, and POP3.
  More information: <https://curl.se>.

  Download the contents of a URL to a file:

      curl http://example.com --output path/to/file

  Download a file, saving the output under the filename indicated by the URL:

      curl --remote-name http://example.com/filename

  Download a file, following location redirects, and automatically continuing (resuming) a previous file transfer and return an error on server error:

      curl --fail --remote-name --location --continue-at - http://example.com/filename

  Send form-encoded data (POST request of type `application/x-www-form-urlencoded`). Use `--data @file_name` or `--data @'-'` to read from STDIN:

      curl --data 'name=bob' http://example.com/form

  Send a request with an extra header, using a custom HTTP method:

      curl --header 'X-My-Header: 123' --request PUT http://example.com

  Send data in JSON format, specifying the appropriate content-type header:

      curl --data '{"name":"bob"}' --header 'Content-Type: application/json' http://example.com/users/1234

  Pass a username and password for server authentication:

      curl --user myusername:mypassword http://example.com

  Pass client certificate and key for a resource, skipping certificate validation:

      curl --cert client.pem --key key.pem --insecure https://example.com