2.1 Μάθημα 1
Πιστοποιητικό: |
Linux Essentials |
---|---|
Έκδοση: |
1.6 |
Θέμα: |
2 Βρίσκοντας το Δρόμο σας σε ένα Σύστημα Linux |
Σκοπός: |
2.1 Βασικά Στοιχεία Γραμμής Εντολών |
Μάθημα: |
1 απο 2 |
Εισαγωγή
Οι σύγχρονες διανομές Linux έχουν ένα ευρύ φάσμα γραφικών διεπαφών χρήστη, αλλά ένας διαχειριστής θα πρέπει πάντα να ξέρει πώς να λειτουργεί με τη γραμμή εντολών ή shell όπως ονομάζεται. Το shell είναι ένα πρόγραμμα που επιτρέπει την επικοινωνία βασισμένη σε κείμενο μεταξύ του λειτουργικού συστήματος και του χρήστη. Είναι συνήθως ένα πρόγραμμα λειτουργίας κειμένου που διαβάζει την είσοδο του χρήστη και το ερμηνεύει ως εντολές στο σύστημα.
Υπάρχουν πολλά διαφορετικά shells στο Linux, αυτά είναι μόνο μερικά:
-
Κέλυφος Bourne-again (Bash)
-
Κέλυφος C (csh ή tcsh, το ενισχυμένο csh)
-
Κέλυφος Korn (ksh)
-
Κέλυφος Z (zsh)
Στο Linux, το πιο συνηθισμένο είναι το Bash shell. Αυτό είναι επίσης αυτό που θα χρησιμοποιηθεί σε παραδείγματα ή ασκήσεις εδώ.
Όταν χρησιμοποιείτε ένα διαδραστικό shell, ο χρήστης εισάγει εντολές σε ένα λεγόμενο prompt. Για κάθε διανομή Linux, το προεπιλεγμένο prompt μπορεί να φαίνεται λίγο διαφορετικό, αλλά συνήθως ακολουθεί αυτήν τη δομή:
username@hostname current_directory shell_type
Στο Ubuntu ή στο Debian GNU/Linux, το prompt για έναν κανονικό χρήστη πιθανότατα θα μοιάζει με αυτό:
carol@mycomputer:~$
Το prompt του superuser θα μοιάζει με αυτό:
root@mycomputer:~#
Στο CentOS ή στο Red Hat Linux, το prompt για έναν κανονικό χρήστη θα μοιάζει με αυτό:
[dave@mycomputer ~]$
Και το prompt του superuser θα μοιάζει με αυτό:
[root@mycomputer ~]#
Ας εξηγήσουμε κάθε στοιχείο της δομής:
username
-
Όνομα του χρήστη που εκτελεί το shell
hostname
-
Όνομα του host στον οποίο εκτελείται το shell. Υπάρχει επίσης μια εντολή
hostname
, με την οποία μπορείτε να εμφανίσετε ή να ορίσετε το όνομα host του συστήματος. current_directory
-
Ο τρέχων κατάλογος στον οποίο βρίσκεται το shell. Ένα
~
σημαίνει ότι το shell βρίσκεται στον κατάλογο αφετηρίας του τρέχοντος χρήστη. shell_type
-
Το
$
δείχνει ότι το shell εκτελείται από έναν κανονικό χρήστη.Το
#
υποδεικνύει ότι το shell εκτελείται από τον superuserroot
.
Δεδομένου ότι δεν χρειαζόμαστε ειδικά προνόμια, θα χρησιμοποιήσουμε ένα μη προνομιακό prompt στα ακόλουθα παραδείγματα. Για λόγους συντομίας, θα χρησιμοποιήσουμε απλώς το $
ως prompt.
Δομή Γραμμής Εντολών
Οι περισσότερες εντολές στη γραμμή εντολών ακολουθούν την ίδια βασική δομή:
εντολή [επιλογή(ες)/παράμετρος(οι)...] [όρισμα(τα)...]
Πάρτε την ακόλουθη εντολή ως παράδειγμα:
$ ls -l /home
Ας εξηγήσουμε τον σκοπό κάθε στοιχείου:
- Εντολή
-
Πρόγραμμα που θα εκτελέσει ο χρήστης -
ls
στο παραπάνω παράδειγμα. - Επιλογή(ες)/Παράμετρος(οι)
-
Ένας “διακόπτης” που τροποποιεί τη συμπεριφορά της εντολής με κάποιο τρόπο, όπως
-l
στο παραπάνω παράδειγμα. Μπορείτε να έχετε πρόσβαση στις επιλογές σε σύντομη και μακρά μορφή. Για παράδειγμα, το-l
είναι πανομοιότυπο με το--format=long
.Μπορούν επίσης να συνδυαστούν πολλές επιλογές και για τη σύντομη μορφή, τα γράμματα μπορούν συνήθως να πληκτρολογηθούν μαζί. Για παράδειγμα, οι ακόλουθες εντολές κάνουν το ίδιο:
$ ls -al $ ls -a -l $ ls --all --format=long
- Όρισμα(τα)
-
Πρόσθετα δεδομένα που απαιτούνται από το πρόγραμμα, όπως το όνομα αρχείου ή path, όπως
/home
στο παραπάνω παράδειγμα.
Το μόνο υποχρεωτικό μέρος αυτής της δομής είναι η ίδια η εντολή. Σε γενικές γραμμές, όλα τα άλλα στοιχεία είναι προαιρετικά, αλλά ένα πρόγραμμα μπορεί να απαιτεί ορισμένες επιλογές, παραμέτρους ή ορίσματα.
Note
|
Οι περισσότερες εντολές εμφανίζουν μια σύντομη επισκόπηση των διαθέσιμων επιλογών όταν εκτελούνται με την παράμετρο |
Τύποι Συμπεριφοράς Εντολών
Το shell υποστηρίζει δύο τύπους εντολών:
- Εσωτερικές
-
Αυτές οι εντολές είναι μέρος του ίδιου του shell και δεν είναι ξεχωριστά προγράμματα. Υπάρχουν περίπου 30 τέτοιες εντολές. Ο κύριος σκοπός τους είναι η εκτέλεση εργασιών μέσα στο shell (π.χ.
cd
,set
,export
). - Εξωτερικές
-
Αυτές οι εντολές βρίσκονται σε μεμονωμένα αρχεία. Αυτά τα αρχεία είναι συνήθως δυαδικά προγράμματα ή scripts. Όταν εκτελείται μια εντολή που δεν είναι ενσωματωμένη στο shell, το shell χρησιμοποιεί τη μεταβλητή
PATH
για να αναζητήσει ένα εκτελέσιμο αρχείο με το ίδιο όνομα με την εντολή. Επιπρόσθετα με τα προγράμματα που είναι εγκατεστημένα με το package manager της διανομής, οι χρήστες μπορούν επίσης να δημιουργήσουν τις δικές τους εξωτερικές εντολές.
Η εντολή type
δείχνει τι τύπος είναι μια συγκεκριμένη εντολή:
$ type echo echo is a shell builtin $ type man man is /usr/bin/man
Quoting
Ως χρήστης Linux, θα πρέπει να δημιουργήσετε ή να χειριστείτε αρχεία ή μεταβλητές με διάφορους τρόπους. Αυτό είναι εύκολο όταν εργάζεστε με σύντομα ονόματα αρχείων και μεμονωμένες τιμές, αλλά γίνεται πιο περίπλοκο όταν, για παράδειγμα, εμπλέκονται κενά διαστήματα, ειδικοί χαρακτήρες και μεταβλητές. Τα shells παρέχουν μια δυνατότητα που ονομάζεται quoting [γραφή εντός εισαγωγικών] η οποία περικλείει τέτοια δεδομένα χρησιμοποιώντας διάφορα είδη εισαγωγικών (" ",' '). Στο Bash, υπάρχουν τρεις τύποι εισαγωγικών:
-
Διπλά εισαγωγικά
-
Μονά εισαγωγικά
-
Χαρακτήρες διαφυγής
Για παράδειγμα, οι ακόλουθες εντολές δεν λειτουργούν με τον ίδιο τρόπο λόγω quoting:
$ TWOWORDS="two words" $ touch $TWOWORDS $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch "$TWOWORDS" $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch '$TWOWORDS' $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 15:00 '$TWOWORDS' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words
Note
|
Η γραμμή με το |
Διπλά Εισαγωγικά
Τα διπλά εισαγωγικά λένε στο shell να πάρει το κείμενο ανάμεσα στα εισαγωγικά ("...") ως κανονικούς χαρακτήρες. Όλοι οι ειδικοί χαρακτήρες χάνουν το νόημά τους, εκτός από το $
(σύμβολο δολαρίου), \
(ανάστροφη κάθετο [backslash]) και `
(ανάστροφο μονό εισαγωγικό [backquote]). Αυτό σημαίνει ότι οι μεταβλητές, η υποκατάσταση εντολών και οι αριθμητικές συναρτήσεις, εξακολουθούν να μπορούν να χρησιμοποιηθούν.
Για παράδειγμα, η υποκατάσταση της μεταβλητής $USER
δεν επηρεάζεται από τα διπλά εισαγωγικά:
$ echo I am $USER I am tom $ echo "I am $USER" I am tom
Ένας χαρακτήρας κενού διαστήματος, από την άλλη πλευρά, χάνει τη σημασία του ως διαχωριστής ορισμάτων:
$ touch new file $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:18 file -rw-rw-r-- 1 tom students 0 Oct 8 15:18 new $ touch "new file" $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:19 new file
Όπως μπορείτε να δείτε, στο πρώτο παράδειγμα, η εντολή touch
δημιουργεί δύο μεμονωμένα αρχεία, η εντολή ερμηνεύει τις δύο συμβολοσειρές [strings] ως μεμονωμένα ορίσματα. Στο δεύτερο παράδειγμα, η εντολή ερμηνεύει και τις δύο συμβολοσειρές ως ένα όρισμα, επομένως δημιουργεί μόνο ένα αρχείο. Ωστόσο, η καλύτερη πρακτική είναι να αποφεύγεται ο χαρακτήρας κενού διαστήματος στα ονόματα αρχείων. Αντ 'αυτού, θα μπορούσε να χρησιμοποιηθεί η κάτω παύλα (_
) η ή τελεία (.
).
Μονά Εισαγωγικά
Τα μονά εισαγωγικά δεν έχουν τις εξαιρέσεις των διπλών εισαγωγικών. Αναιρούν κάθε ιδιαίτερο νόημα από κάθε χαρακτήρα. Ας πάρουμε ένα από τα πρώτα παραδείγματα από πάνω:
$ echo I am $USER I am tom
Κατά την εφαρμογή των μονών εισαγωγικών βλέπετε ένα διαφορετικό αποτέλεσμα:
$ echo 'I am $USER' I am $USER
Η εντολή εμφανίζει τώρα την ακριβή συμβολοσειρά χωρίς να υποκαταστήσει τη μεταβλητή.
Χαρακτήρες Διαφυγής
Μπορούμε να χρησιμοποιήσουμε χαρακτήρες διαφυγής για να αφαιρέσουμε ειδικές έννοιες χαρακτήρων από το Bash. Ας επιστρέψουμε στη μεταβλητή περιβάλλοντος $USER
:
$ echo $USER carol
Βλέπουμε ότι από προεπιλογή, τα περιεχόμενα της μεταβλητής εμφανίζονται στο τερματικό. Ωστόσο, αν προηγηθούμε το σύμβολο του δολαρίου με τον χαρακτήρα της ανάστροφης καθέτου (\
), τότε η ειδική έννοια του συμβόλου του δολαρίου θα αναιρεθεί. Αυτό με τη σειρά του δεν θα επιτρέψει στον Bash να επεκτείνει την τιμή της μεταβλητής στο όνομα χρήστη του ατόμου που εκτελεί την εντολή, αλλά θα ερμηνεύσει κυριολεκτικά το όνομα της μεταβλητής:
$ echo \$USER $USER
Εάν θυμάστε, μπορούμε να έχουμε παρόμοια αποτελέσματα με αυτό χρησιμοποιώντας τα μονά εισαγωγικά, τα οποία εκτυπώνουν τα κυριολεκτικά περιεχόμενα απο οτιδήποτε υπάρχει ανάμεσά τους. Ωστόσο, ο χαρακτήρας διαφυγής λειτουργεί διαφορετικά, δίνοντας εντολή στο Bash να αγνοήσει το όποιο ιδιαίτερο νόημα μπορεί να έχει ο χαρακτήρας του οποίου προηγείται.
Καθοδηγούμενες Ασκήσεις
-
Χωρίστε τις παρακάτω γραμμές στα συστατικά της εντολής, επιλογής(ες)/παράμετρος(οι) και ορίσματος(ων):
-
Παράδειγμα:
cat -n /etc/passwd
Εντολή:
cat
Επιλογή:
-n
Όρισμα:
/etc/passwd
-
ls -l /etc
Εντολή:
Επιλογή:
Όρισμα:
-
ls -l -a
Εντολή:
Επιλογή:
Όρισμα:
-
cd /home/user
Εντολή:
Επιλογή:
Όρισμα:
-
-
Βρείτε τι τύπου είναι οι ακόλουθες εντολές:
Παράδειγμα:
pwd
Ενσωματωμένη στο shell
mv
Εξωτερική εντολή
cd
cat
exit
-
Επιλύστε τις ακόλουθες εντολές που χρησιμοποιούν εισαγωγικά:
Παράδειγμα:
echo "$HOME is my home directory"
echo /home/user is my home directory
touch "$USER"
touch 'touch'
Ασκήσεις Εξερεύνησης
-
Με μία εντολή και χρησιμοποιώντας επέκταση άγκιστρων ({}) στο Bash (ελέγξτε τη σελίδα του εγχειριδίου χρήσης για το Bash), δημιουργήστε 5 αρχεία αριθμημένα από 1 έως 5 με το πρόθεμα
game
(game1
,game2
, …). -
Διαγράψτε και τα 5 αρχεία που μόλις δημιουργήσατε με μία μόνο εντολή, χρησιμοποιώντας έναν διαφορετικό ειδικό χαρακτήρα (ελέγξτε το Pathname Expansion στις σελίδες του εγχειριδίου χρήσης του Bash).
-
Υπάρχει κάποιος άλλος τρόπος για να αλληλεπιδράσουν δύο εντολές μεταξύ τους; Ποιοί είναι αυτοί;
Σύνοψη
Σε αυτό το εργαστήριο μάθατε:
-
Έννοιες του Linux shell
-
Τι είναι το Bash shell
-
Τη δομή της γραμμής εντολών
-
Μια εισαγωγή στο quoting
Εντολές που χρησιμοποιήθηκαν στις ασκήσεις:
bash
-
Το πιο δημοφιλές shell σε υπολογιστές Linux.
echo
-
Έξοδος κειμένου στο τερματικό.
ls
-
Παραθέτει τα περιεχόμενα ενός καταλόγου.
type
-
Δείχνει πως εκτελείται μια συγκεκριμένη εντολή.
touch
-
Δημιουργεί ενα άδειο αρχείο ή ενημερώνει την ημερομηνία τροποποίησης ενος υπάρχοντος αρχείου.
hostname
-
Εμφανίζει ή αλλάζει το όνομα του host ενός συστήματος .
Απαντήσεις στις Καθοδηγούμενες Ασκήσεις
-
Χωρίστε τις παρακάτω γραμμές στα συστατικά της εντολής, επιλογής(ες)/παράμετρος(οι) και ορίσματος(ων):
-
ls -l /etc
Εντολή:
ls
Επιλογή:
-l
Όρισμα:
/etc
-
ls -l -a
Εντολή:
ls
Επιλογή:
-l -a
Όρισμα:
-
cd /home/user
Εντολή:
cd
Επιλογή:
Όρισμα:
/home/user
-
-
Βρείτε τι τύπου είναι οι ακόλουθες εντολές:
cd
Ενσωματωμένη στο shell
cat
Εξωτερική εντολή
exit
Ενσωματωμένη στο shell
-
Επιλύστε τις ακόλουθες εντολές που χρησιμοποιούν εισαγωγικά:
touch "$USER"
tom
touch 'touch'
Δημιουργεί ένα αρχείο με όνομα
touch
Απαντήσεις στις Ασκήσεις Εξερεύνησης
-
Με μία εντολή και χρησιμοποιώντας επέκταση άγκιστρων ({}) στο Bash (ελέγξτε τη σελίδα του εγχειριδίου χρήσης για το Bash), δημιουργήστε 5 αρχεία αριθμημένα από 1 έως 5 με το πρόθεμα
game
(game1
,game2
, …).Eύρη τιμών μπορούν να χρησιμοποιηθούν για να εκφράσουν τους αριθμούς από το 1 έως το 5 μέσα σε μία εντολή:
$ touch game{1..5} $ ls game1 game2 game3 game4 game5
-
Διαγράψτε και τα 5 αρχεία που μόλις δημιουργήσατε με μία μόνο εντολή, χρησιμοποιώντας έναν διαφορετικό ειδικό χαρακτήρα (ελέγξτε την Pathname Expansion στις σελίδες του εγχειριδίου χρήσης του Bash).
Δεδομένου ότι όλα τα αρχεία ξεκινούν με
game
και τελειώνουν σε έναν μόνο χαρακτήρα (ένας αριθμός από 1 έως 5 σε αυτήν την περίπτωση), το?
μπορεί να χρησιμοποιηθεί ως ειδικός χαρακτήρας για τον τελευταίο χαρακτήρα στο όνομα αρχείου:$ rm game?
-
Υπάρχει κάποιος άλλος τρόπος για να αλληλεπιδράσουν δύο εντολές μεταξύ τους; Ποιοί είναι αυτοί;
Ναι, μια εντολή θα μπορούσε, για παράδειγμα, να γράψει δεδομένα σε ένα αρχείο το οποίο στη συνέχεια υποβάλλεται σε επεξεργασία από άλλη εντολή. Το Linux μπορεί επίσης να συλλέξει την έξοδο μιας εντολής και να την χρησιμοποιήσει ως είσοδο για μια άλλη εντολή. Αυτό ονομάζεται piping και θα μάθουμε περισσότερα για αυτό σε ένα μελλοντικό μάθημα.