Βασικές εντολές Bash. εντολές bash στο linux

Αυτό το cheat φύλλο καλύπτει παρακάτω θέματα: Εισαγωγή στο κέλυφος, πλοήγηση, βασικές εντολές, μεταβλητές περιβάλλοντος, συνδέσεις, σωλήνες, ανακατεύθυνση I/O, δικαιώματα και συντομεύσεις πληκτρολογίου.

Bash Shell: Εισαγωγή

Ένα κέλυφος, ή κέλυφος, είναι ένα πρόγραμμα, στην περίπτωσή μας που ονομάζεται "bash", το οποίο είναι συντομογραφία του Bourne Again Shell. Το κέλυφος δέχεται τις εντολές σας και τις μεταδίδει λειτουργικό σύστημα. Για την αλληλεπίδραση με το σύστημα, χρησιμοποιούνται τερματικά, όπως gnome-terminal, eterm, nxterm κ.λπ.

Πλοήγηση

Στο Linux, τα αρχεία και οι κατάλογοι οργανώνονται ιεραρχικά, που σημαίνει ότι υπάρχει ένας αρχικός κατάλογος που ονομάζεται ριζικός κατάλογος. Περιέχει αρχεία και υποκαταλόγους, οι οποίοι με τη σειρά τους περιέχουν αρχεία και τους δικούς τους υποκαταλόγους.

pwd

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

CD

Η εντολή cd σας επιτρέπει να μεταβείτε στο νέος κατάλογος.

mkdir

Η εντολή mkdir δημιουργεί έναν νέο κατάλογο στον τρέχοντα κατάλογο.

Βασικές εντολές

άνθρωπος

Η εντολή man εμφανίζει εγχειρίδια εντολών. Για παράδειγμα, η ακόλουθη εντολή θα εμφανίσει όλες τις πληροφορίες σχετικά με την εντολή cat:

$ άνθρωπος γάτα

γάτα

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

ηχώ

Η εντολή echo εκτυπώνει τα ορίσματά της σε τυπική έξοδο.

$ echo Γεια Κόσμος Γεια σου Κόσμο

Εάν καλέσετε echo χωρίς ορίσματα, θα εκτυπωθεί μια κενή συμβολοσειρά.

κεφάλι

Η εντολή head διαβάζει τις πρώτες 10 γραμμές οποιουδήποτε κειμένου που έχει περάσει και τις εξάγει στον τυπικό σωλήνα. Ο αριθμός των γραμμών που εμφανίζονται μπορεί να αλλάξει:

$head -50 test.txt

ουρά

Η εντολή tail λειτουργεί παρόμοια με την εντολή head, αλλά διαβάζει γραμμές από το τέλος:

$ ουρά -50 test.txt

Μπορείτε επίσης να δείτε τις γραμμές που προστίθενται σε ένα αρχείο σε πραγματικό χρόνο χρησιμοποιώντας τη σημαία -f:

$ ουρά -f test.txt

μείον

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

$ λιγότερα test.txt $ ps aux | μείον

Μάθετε περισσότερα για το σκοπό του συμβόλου | θα καλυφθεί παρακάτω στην ενότητα ιστορικού της εντολής.

Κοινοί συνδυασμοίκλειδιάΠεριγραφή
σολΜετακινείται στο τέλος του αρχείου
σολΜετακινείται στην αρχή του αρχείου
:50 Μετακινείται στη γραμμή 50 του αρχείου
qΈξοδος λιγότερο
/searchtermΕύρεση συμβολοσειράς που ταιριάζει με τον όρο αναζήτησης κάτω από την τρέχουσα συμβολοσειρά
/
όρος αναζήτησηςΕύρεση γραμμής που ταιριάζει με τον όρο αναζήτησης πάνω από την τρέχουσα γραμμή
? Μετακινείται στο επόμενο αντίστοιχο αποτέλεσμα αναζήτησης
επάνωΜετακινείται μία γραμμή προς τα πάνω
κάτωΜετακινείται μία γραμμή προς τα κάτω
σελιδοποίησηΜετακινείται μία σελίδα πάνω
σελίδα κάτωΜετακινείται μία σελίδα προς τα κάτω

αληθής

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

ψευδής

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

$?

$; είναι μια μεταβλητή που περιέχει την κατάσταση εξόδου της τελευταίας εντολής που εκτελέστηκε. Η κατάσταση αναφέρεται συνήθως στον κωδικό επιστροφής του προγράμματος. Το 0 σημαίνει επιτυχής εκτέλεση του προγράμματος, οποιαδήποτε τιμή μεγαλύτερη από 0 αντικατοπτρίζει το γεγονός ότι παρουσιάστηκαν ορισμένα σφάλματα κατά την εκτέλεση. Παρεμπιπτόντως, αυτός είναι ο λόγος που στο bash 0 θεωρείται αληθές και ό,τι δεν είναι 0 είναι ψευδές:

$true$echo$?

0 $ ψευδές $ ηχώ $;

1

grep

Η εντολή grep αναζητά τη συμβολοσειρά που πέρασε στο καθορισμένο αρχείο:

$ cat users.txt χρήστη:μαθητής κωδικός πρόσβασης:123 χρήστης: κωδικός δασκάλου:321 $ grep "student` file1.txt χρήστης: κωδικός πρόσβασης μαθητή:123

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

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

. Συνήθως χρησιμοποιείται σε συνδυασμό με την εντολή grep για την αναζήτηση μιας συγκεκριμένης εντολής. Για παράδειγμα, ο παρακάτω κώδικας θα βρει όλες τις εντολές που περιέχουν τη συμβολοσειρά g++: $ιστορία | grep g++ 155 g++ file1.txt 159 g++ file2.txtΤο σύμβολο |. - αυτός είναι ο λεγόμενος μεταφορέας (σωλήνας). Χάρη σε αυτό, μπορείτε να ανακατευθύνετε την έξοδο μιας εντολής στην είσοδο μιας άλλης - έτσι, στο παραπάνω παράδειγμα, ολόκληρη η ιστορία, η οποία στο

κανονική λειτουργία

Η έξοδος από την εντολή ιστορικού απευθείας στην έξοδο τερματικού θα ανακατευθυνθεί στο grep ως είσοδο. Δεν θα δούμε την έξοδο της εντολής ιστορικού, αλλά θα δούμε την έξοδο της εντολής grep.

Αυτό μπορεί να είναι αρκετά δύσκολο να το κατανοήσετε χωρίς εξάσκηση, γι' αυτό πειραματιστείτε μόνοι σας, για παράδειγμα με τις εντολές ls , history , ps (που περιγράφονται παρακάτω), ανακατευθύνοντας την έξοδο τους σε grep , sed ή λιγότερο, για παράδειγμα.

εξαγωγή

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

$εξαγωγή όνομα=μαθητής

ps

Η εντολή ps εμφανίζει πληροφορίες σχετικά με τις διεργασίες που εκτελούνται.

  • $ ps PID TTY TIME CMD 35346 πόντοι/2 00:00:00 bash
  • Εξάγονται τέσσερα στοιχεία:
  • Αναγνωριστικό διαδικασίας (PID),
  • τύπος τερματικού (TTY),

χρόνος λειτουργίας διεργασίας (TIME),

Η εντολή awk βρίσκει και αντικαθιστά κείμενο σε αρχεία χρησιμοποιώντας ένα δεδομένο μοτίβο: awk "pattern (action)" test.txt

wget

Η εντολή wget κατεβάζει αρχεία από το Διαδίκτυο και τα τοποθετεί στον τρέχοντα κατάλογο.

$ wget https://github.com/mikeizbicki/ucr-cs100

nc

ping

Η εντολή ping δοκιμάζει σύνδεση δικτύου.

$ ping google.com PING google.com (74.125.224.34) 56(84) byte δεδομένων.

64 byte από lax17s01-in-f2.1e100.net (74.125.224.34): icmp_req=1 ttl=57 time=7,82 ms --- στατιστικά ping google.com --- 1 πακέτα μεταδόθηκε, 1 ελήφθη, 0% απώλεια πακέτων , χρόνος 8ms rtt min/avg/max/mdev = 7.794/8.422/10.792/0.699 ms

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

git

Μεταβλητές Περιβάλλοντος

Οι μεταβλητές περιβάλλοντος ονομάζονται μεταβλητές που περιέχουν τιμές που χρησιμοποιούνται από μία ή περισσότερες εφαρμογές.

Η μεταβλητή PATH περιέχει μια λίστα καταλόγων στους οποίους το σύστημα αναζητά εκτελέσιμα αρχεία.

Η μεταβλητή HOME περιέχει τη διαδρομή προς τον αρχικό κατάλογο του τρέχοντος χρήστη.

Συνδέσεις

Οι σύνδεσμοι σάς επιτρέπουν να εκτελείτε πολλές εντολές ταυτόχρονα.

$ true && echo Γεια Γεια Γεια $ false || echo Γεια Γεια σου $echo Γεια σου; ls Hello test.txt file1.txt file2.txt

Μεταφορείς

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

$ ls -l | κεφάλι

Ανακατεύθυνση I/O

Ανακατεύθυνση εξόδου

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

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

$ ls > files.txt $ cat files.txt file1.cpp sample.txt

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

Ανακατεύθυνση εισόδου< . В следующем примере sort берет входные данные из файла, а не с клавиатуры:

Για τυπική ανακατεύθυνση εξόδου, χρησιμοποιήστε το σύμβολο< files.txt b c

$ cat files.txt c b $ ταξινόμηση

Η εντολή sort εκτυπώνει τα περιεχόμενα του αρχείου στην οθόνη επειδή δεν έχουμε ανακατευθύνει την έξοδο. Αυτό μπορεί να γίνει ως εξής:< files.txt >$ταξινόμηση

files_sorted.txt

Προηγμένη ανακατεύθυνση

Η προσθήκη & στο > προκαλεί ανακατεύθυνση τόσο της τυπικής εξόδου όσο και του σφάλματος. Για παράδειγμα, το αρχείο test.cpp θα εξάγει τη γραμμή stdout σε cout και τη γραμμή stderr σε cerr .

$ g++ test.cpp $ ./a.out >& test.txt $ cat test.txt stdout stderr Αν θέλετε να βγάλετε ένα συγκεκριμένοπεριγραφέας αρχείου

, μπορείτε να αντιστοιχίσετε τον αριθμό του σε > .ΟνομαΠεριγραφή
Περιγραφέας0 stdin
Τυπική είσοδος1 Τυπική έξοδος
stderr2 Τυπική έξοδος σφάλματος

Για παράδειγμα, για να ανακατευθύνετε το stderr στο test.txt, θα κάνετε τα εξής:

$ g++ test.cpp $ ./a.out 2> test.txt stdout $ cat test.txt stderr

Δικαιώματα πρόσβασης

Η εντολή ls -l εμφανίζει πολλές πληροφορίες σχετικά με τα δικαιώματα κάθε αρχείου:

chmod

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

Μπορείτε να καλέσετε το chmod με μια περιγραφή του τι πρέπει να κάνετε συγκεκριμένο αρχείο. Το σύμβολο - σημαίνει αφαίρεση δικαιωμάτων, το σύμβολο + σημαίνει προσθήκη. Το ακόλουθο παράδειγμα θα κάνει το αρχείο αναγνώσιμο και εγγράψιμο από τον κάτοχο και την ομάδα:

$ chmod ug+rw test.txt $ ls -l test.txt -rw-rw---- 1 ομάδα χρηστών 1097374 26 Ιανουαρίου 2:48 test.txt

Επιπλέον, το chmod μπορεί να χρησιμοποιηθεί με οκταδικοί αριθμοί, όπου 1 είναι η παρουσία δικαιωμάτων και 0 είναι η απουσία:

Rwx = 111 = 7 rw- = 110 = 6 r-x = 101 = 5 r-- = 100 = 4

Η επόμενη εντολή θα λειτουργήσει όπως και η προηγούμενη.

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

Μην παρασυρθείτε από την ευκολία της γραφικής διεπαφής και υποτιμήστε τη γραμμή εντολών. Πρώτον, πολλές διοικητικές εργασίες μπορούν να ολοκληρωθούν μόνο από εκεί. Δεύτερον, η γραμμή εντολών είναι το πιο βολικό μέσο για την αυτοματοποίηση των διαδικασιών ρουτίνας. Μια εντολή στο Linux είναι οτιδήποτε μπορεί να εκτελεστεί: εκτελέσιμα αρχεία, ενσωματωμένες εντολές φλοιού, ψευδώνυμα εντολών, συναρτήσεις που καθορίζονται από τον χρήστη, αρχεία σεναρίων (σενάρια) - προπαρασκευασμένες ακολουθίες εντολών σε μορφή κειμένου.

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

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

Το Linux είναι ένα λειτουργικό σύστημα που μοιάζει με Unix. Το Linux αναπτύχθηκε αρχικά από τον Linus Torvalds στο Πανεπιστήμιο του Ελσίνκι (Φινλανδία) με βάση το Minix, ένα μικρό σύστημα UNIX που δημιουργήθηκε από τον Andry Tanenbaum.

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

Το κέλυφος εντολών υπήρχε ήδη στα συστήματα UNIX, ήταν το "κέλυφος Bourne" (κέλυφος Bourne ή απλά κέλυφος). Λίγο αργότερα, τα συστήματα UNIX ανέπτυξαν το κέλυφος C, το οποίο χρησιμοποιεί μια διαφορετική σύνταξη, που θυμίζει κάπως τη σύνταξη της γλώσσας προγραμματισμού C.

Πολλοί διερμηνείς εντολών έχουν αναπτυχθεί για Linux. Το κύριο που χρησιμοποιείται από προεπιλογή είναι το "Bash", που αναπτύχθηκε από ένα κέλυφος που ονομάζεται "Bourne Again Shell". Έτσι, το Bash είναι μια εξέλιξη του προηγούμενου φλοιού, προσθέτοντας πολλά χρήσιμα χαρακτηριστικά που περιέχονται εν μέρει στο κέλυφος C. Δεδομένου ότι το Bash μπορεί να θεωρηθεί υπερσύνολο της παλιάς σύνταξης του κελύφους, οποιοδήποτε πρόγραμμα γραμμένο στο παλιό καλό κέλυφος Bourne θα πρέπει να λειτουργεί στο Bash.

Ωστόσο, πρέπει να σημειωθεί ότι το λειτουργικό σύστημα Linux δεν είναι σύστημα UNIX, αφού ο κώδικάς του ξαναγράφτηκε πλήρως, αρχικά από τον Linus, αργότερα με τη βοήθεια πολλών προγραμματιστών UNIX και ενθουσιωδών από το Διαδίκτυο, όσων έχουν αρκετές δεξιότητες και ικανότητες για να αναπτύξουν το σύστημα. Ο πυρήνας του Linux δεν χρησιμοποιεί κώδικα από το UNIX ή οποιαδήποτε άλλη ιδιόκτητη πηγή, και τα περισσότεραΠρογράμματα Linux αναπτύχθηκε από το έργο GNU απόΕλεύθερο Λογισμικό

Ίδρυμα στο Κέιμπριτζ της Μασαχουσέτης. Αλλά σε αυτό συνέβαλαν και προγραμματιστές σε όλο τον κόσμο.

  • Εδώ είναι τα πιο κοινά κελύφη Linux:
  • Bourne shell - Bourne shell, στάνταρ για πολλά συστήματα παρόμοια με το UNIX.
  • bash - κέλυφος Bourne Again, "το νέο κέλυφος Bourne" (χρησιμοποιείται από προεπιλογή στο Linux). csh - C shell, C shell: η σύνταξή τουγλώσσα εντολής
  • παρόμοια με τη σύνταξη της γλώσσας C.
  • tcsh - μικροσκοπικό κέλυφος C, ελάχιστο κέλυφος C.
  • pdksh - δημόσιος τομέας Κέλυφος Korn, δημόσιος κέλυφος Korn.

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

Το αρχικό κέλυφος για κάθε χρήστη που ξεκινά για αυτόν όταν συνδέεται στο σύστημα καθορίζεται στο αρχείο /etc/passwd. Μπορεί να μην είναι απαραίτητα bash. Ο διαχειριστής μπορεί γενικά να απαγορεύσει σε συγκεκριμένους χρήστες τη σύνδεση στο σύστημα ορίζοντας το /sbin/nologin ως το "κέλυφος" που φορτώνεται μετά την εγγραφή. Ή ακόμη και να καθορίσετε ένα ειδικά σχεδιασμένο σενάριο που σας επιτρέπει να προβάλλετε αρχεία καταγραφής, για παράδειγμα.

Για να επεξεργαστείτε το αρχείο /etc/passwd στο Linux, υπάρχει μια ειδική εντολή vipw, η οποία ελέγχει την ορθότητα της επεξεργασίας (η εντολή είναι διαθέσιμη μόνο στον διαχειριστή).

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

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

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

2. Ανάλυση γραμμής εντολών, επιλεγμένες συναρτήσεις bash

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

  1. Επεκτείνει τα ψευδώνυμα για γρήγορη κλήσητις πιο συχνά χρησιμοποιούμενες εντολές.
  2. Επεκτείνει μεταχαρακτήρες ή χαρακτήρες μπαλαντέρ (*, ?, [, ], ~, (, )) για αναζήτηση αρχείων χρησιμοποιώντας μοτίβα ονομάτων.
  3. Αντικαθιστά μεταβλητές που μπορούν να χρησιμοποιηθούν από το κέλυφος.
  4. Ανακατευθύνει την έξοδο μιας εντολής ως είσοδο σε μια άλλη εντολή χρησιμοποιώντας έναν σωλήνα.
  5. Εκτελεί συγχώνευση εντολών.
  6. Εκτελεί την εντολή εάν είναι μια ενσωματωμένη εντολή διερμηνέα ή ξεκινά μια διαδικασία εάν η εντολή είναι εξωτερική.
  7. Ανακατευθύνει το τυπικό I/O.

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

2.1. Παρατσούκλια

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

Για παράδειγμα:

$export HELLO="Γεια σας από το περιβάλλον!" Πρέπει να διαφύγει # χώρο με εισαγωγικά

Μεταβλητές Περιβάλλοντος

Ένα περιβάλλον είναι ένα σύνολο μεταβλητών των οποίων οι τιμές μπορούν να αλλάξουν τη συμπεριφορά του κελύφους.

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

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

Αρχείο διαμόρφωσηςΠεριγραφή
/etc/profile

Καθορίζει μεταβλητές περιβάλλοντος για όλους τους χρήστες του συστήματος. Αυτό το αρχείο εκτελείται κατά την πρώτη σύνδεση και περιέχει βασικές μεταβλητές περιβάλλοντος, όπως τη μεταβλητή αναζήτησης θέσης εντολής PATH, τη μεταβλητή ονόματος κεντρικού υπολογιστή HOSTNAME και τη μεταβλητή μεγέθους ιστορικού εντολών HISTSIZE. Επιπλέον, αυτό το αρχείο δημιουργεί πρόσθετες μεταβλητές περιβάλλοντος από αρχεία διαμόρφωσης που βρίσκονται στον κατάλογο /etc/profile.d.

/etc/bashrc

Εκτελείται για όλους τους χρήστες, κάθε φορά που εκκινείται η εντολή διερμηνέας bash. ΣΕ αυτό το αρχείοΚαθορίζεται η τιμή της μεταβλητής PS1, καθώς και πρόσθετα ψευδώνυμα εντολών (ψευδώνυμο). Το ψευδώνυμο είναι ένα συντομευμένο, αυθαίρετα καθορισμένο όνομα μιας εντολής ή μιας ακολουθίας εντολών που σας επιτρέπει να εκτελείτε σύνθετες ακολουθίες εντολών χωρίς να τις εισάγετε από το πληκτρολόγιο, αλλά καλώντας τις καλώντας το αντίστοιχο ψευδώνυμο. Οι μεταβλητές που ορίζονται σε αυτό το αρχείο μπορούν να αντιστοιχιστούν ξανά από ένα παρόμοιο αρχείο που ορίζεται από το χρήστη -/.bashrc, το οποίο έχει υψηλότερη προτεραιότητα.

-/.bashprofile

Χρησιμοποιείται ως αρχείο που περιέχει μεμονωμένες ρυθμίσειςμεταχειριζόμενος. Εκτελείται μόνο μία φορά όταν ο χρήστης συνδεθεί. Επιπλέον, αυτό το αρχείο εκτελεί το αρχείο -/.bashrc

~/.bashrc

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

~/.bash_logout

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

/etc/inputrc

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

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

εξαγωγή AB=/usr/σκύλος/μεταδοτικός/ringbearer/grind

ΣΕ σε αυτό το παράδειγμαΣτην προσωρινή μεταβλητή περιβάλλοντος AB εκχωρείται η διαδρομή σε έναν κατάλογο που βρίσκεται αρκετά «βαθιά» στην ιεραρχία καταλόγου του συστήματος αρχείων. Η εντολή εξαγωγής υποδεικνύει την ανάγκη εξαγωγής της τιμής της μεταβλητής AB σε ένα κέλυφος προκειμένου να διατεθεί σε άλλα κελύφη που ενδέχεται να είναι ανοιχτά κατά την τρέχουσα περίοδο λειτουργίας με το σύστημα. Τώρα μπορείτε να φτάσετε στον παραπάνω κατάλογο εκτελώντας την εντολή cd $AB

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

Για να αλλάξετε τα αρχεία ρυθμίσεων /etc/profile και /etc/bashrc, πρέπει να είστε root.

Οι τακτικοί χρήστες μπορούν να τροποποιήσουν τα αρχεία διαμόρφωσης ~/.bash_profile, ~/.bashrc και ~/.bash_Iogout που βρίσκονται στους οικιακούς καταλόγους τους. Αυτά τα αρχεία διαμόρφωσης μπορούν να ρυθμιστούν ώστε να ορίζουν τις μεταβλητές περιβάλλοντος χρησιμοποιώντας την εντολή εξαγωγής και μπορούν να χρησιμοποιηθούν σε οποιαδήποτε περίοδο λειτουργίας.

Μία από τις πιο συχνά μεταβαλλόμενες μεταβλητές περιβάλλοντος είναι η μεταβλητή PATH. Μπορείτε επίσης να παρακάμψετε ή να συμπληρώσετε τη μεταβλητή περιβάλλοντος PATH αρχείο ρυθμίσεων~/.bashrc.

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

Για να εφαρμοστούν αυτές οι αλλαγές στο περιβάλλον του τρέχοντος κελύφους, πρέπει να εκτελέσετε την εντολή source .bashrc

Οι πιο συνηθισμένες μεταβλητές περιβάλλοντος κελύφους είναι:

  • BASH - Περιέχει την πλήρη διαδρομή προς την εντολή bash (συνήθως /bin/bash).
  • BASH_VERSION - Αριθμός έκδοσης Bash.
  • DIRSTACK - Ένας πίνακας που περιέχει την τρέχουσα τιμή στοίβας καταλόγου.
  • ΣΥΝΤΑΚΤΗΣ- πρόγραμμα επεξεργασίας κειμένουαθέτηση.
  • EUID - Αριθμητικό αποτελεσματικό αναγνωριστικό του τρέχοντος χρήστη.
  • FUNCNAME - όνομα της τρέχουσας συνάρτησης στο σενάριο.
  • ΟΜΑΔΕΣ - Ένας πίνακας που περιέχει μια λίστα ομάδων στις οποίες ανήκει ο τρέχων χρήστης.
  • HISTFILE - Η θέση του αρχείου ιστορικού εντολών. Συνήθως, το ιστορικό εντολών αποθηκεύεται στο αρχείο ~/.bash_history.
  • HISTFILESIZE - Ο αριθμός των γραμμών εντολών που μπορούν να αποθηκευτούν στο αρχείο ιστορικού. Αφού επιτευχθεί αυτός ο αριθμός, οι νέες γραμμές εντολών εισάγονται στο ιστορικό διαγράφοντας τις παλαιότερες γραμμές εντολών. Από προεπιλογή, το μέγεθος της λίστας των εντολών που χρησιμοποιήθηκαν πρόσφατα είναι 1000 γραμμές.
  • HOME - Αρχικός κατάλογος χρήστη.
  • HOSTNAME - Το όνομα αυτού του υπολογιστή (κόμβος).
  • HOSTTYPE - Τύπος υπολογιστή.
  • LANG - Τρέχουσα προεπιλεγμένη γλώσσα.
  • Το LC_CTYPE είναι μια εσωτερική μεταβλητή που καθορίζει την κωδικοποίηση χαρακτήρων.
  • MAIL - Τοποθεσίες αρχείων του γραμματοκιβωτίου email του χρήστη. Συνήθως, αυτό είναι ένα αρχείο που βρίσκεται στον κατάλογο /var/spool/mail του οποίου το όνομα είναι ίδιο με το όνομα σύνδεσης του χρήστη.
  • MAILCHECK - Μεσοδιάστημα σε λεπτά μεταξύ των ελέγχων αλληλογραφίας.
  • OLDPWD - Ο κατάλογος που ήταν ενημερωμένος μέχρι τελευταία αλλαγήκατάλογος.
  • OSTYPE - Τρέχον λειτουργικό σύστημα.
  • PATH - Μια λίστα καταλόγων διαχωρισμένη με άνω και κάτω τελεία για αναζήτηση εκτελέσιμων αρχείων. Η σειρά με την οποία αναζητούνται τα ονόματα των καταλόγων είναι εξαιρετικά σημαντική. Κατά την εκτέλεση εντολών, οι κατάλογοι που αναφέρονται σε αυτή τη μεταβλητή ελέγχονται διαδοχικά από αριστερά προς τα δεξιά. Έτσι, κατά την εκτέλεση της εντολής foo που βρίσκεται στους καταλόγους /bin και /usr/bin, θα εκτελεστεί η εντολή που βρίσκεται στον κατάλογο /bin. Για να εκτελέσετε την εντολή foo που βρίσκεται στον κατάλογο /usr/bin σε παρόμοια κατάσταση, πρέπει είτε να καθορίσετε την πλήρη διαδρομή προς αυτήν την εντολή είτε να αλλάξετε τη σειρά των ονομάτων των καταλόγων στη μεταβλητή περιβάλλοντος PATH. Ο τρέχων κατάλογος αναζήτησης πρέπει να προσδιορίζεται ρητά ("."), το κέλυφος δεν πραγματοποιεί αναζήτηση στον τρέχοντα κατάλογο από προεπιλογή. Η αναζήτηση για προγράμματα εκκίνησης στον τρέχοντα κατάλογο είναι δυνητικά επικίνδυνη λόγω της πιθανότητας ακούσιας εκτέλεσης ενός επικίνδυνου προγράμματος, επομένως η μεταβλητή PATH συνήθως αρχικοποιείται χωρίς το "." Για να προσθέσετε στη μεταβλητή PATH τη διαδρομή προς σας δικές τους ομάδεςή σενάρια κελύφους, θα πρέπει να τοποθετηθούν στον υποκατάλογο /bin του οικιακού σας καταλόγου, ο οποίος θα εμφανίζεται αυτόματα στη μεταβλητή PATH. Δεν βρίσκονται όλες οι εκτελέσιμες εντολές στους καταλόγους που παρατίθενται στη μεταβλητή περιβάλλοντος PATH. Ορισμένες εντολές είναι ενσωματωμένες απευθείας στο κέλυφος. Άλλες εντολές μπορούν να επανακαθοριστούν χρησιμοποιώντας ψευδώνυμα, επιτρέποντας σε εντολές με παραμέτρους σχεδόν οποιασδήποτε πολυπλοκότητας (από άποψη σύνταξης) να αντικατασταθούν με ένα απλό όνομα. Επιπλέον, είναι δυνατή η δημιουργία συναρτήσεων που αποθηκεύουν μια ολόκληρη σειρά εντολών.
  • PPID Αριθμός ταυτότηταςτη διαδικασία που αντιστοιχεί στην εντολή που εκτόξευσε το τρέχον κέλυφος (για παράδειγμα, η διαδικασία που δημιούργησε το κέλυφος).
  • PS1, PS2, PS3, PS4 - Μεταβλητές που καθορίζουν τον τύπο του μηνύματος κελύφους.

    Οι μεταβλητές PS1 και PS2 ορίζουν τα κύρια και δευτερεύοντα μηνύματα κελύφους.

    Μια δευτερεύουσα προτροπή (PS2) εμφανίζεται εάν πατήσετε το πλήκτρο Enter χωρίς να ολοκληρώσετε συντακτικά την εισαγωγή μιας εντολής.

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

    PS3. Αυτή η μεταβλητή περιέχει την προτροπή που υπάρχει στη δήλωση Select που χρησιμοποιείται για την οργάνωση διαδραστικών μενού κονσόλας. Από προεπιλογή, η προτροπή του PS3 στη δήλωση Select είναι #?.

    PS4. Αυτή η μεταβλητή χρησιμοποιείται κυρίως κατά τον εντοπισμό σφαλμάτων σε σενάρια φλοιού και από προεπιλογή περιέχει την τιμή συμβολοσειράς "++".

    Για παράδειγμα, εκτελώντας την εντολή get Πληροφορίες DNS:

    # nslookup >

  • PWD - Ο τρέχων κατάλογος εργασίας του χρήστη. Αυτή η τιμή αλλάζει κάθε φορά που αλλάζετε σε διαφορετικό κατάλογο χρησιμοποιώντας την εντολή cd.
  • ΔΕΥΤΕΡΟΛΕΠΤΑ - χρόνος εκτέλεσης σεναρίου (σε δευτερόλεπτα).
  • SHELL - Τρέχων διερμηνέας εντολών.
  • SHELLOPTS - Λίστα ενεργοποιημένων επιλογών διερμηνέα.
  • SHLVL - Πόσες φορές εκκινούνται νέα αντίγραφα του διερμηνέα εντολών.
  • UID - Αριθμητικό αναγνωριστικό του τρέχοντος χρήστη.
  • USER - Τρέχον όνομα χρήστη.
  • $# - Ο συνολικός αριθμός παραμέτρων που μεταβιβάστηκε στο σενάριο.
  • $* - Όλα τα ορίσματα δεν μεταβιβάζονται στο σενάριο (έξοδος σε μια γραμμή).
  • $@ - Ίδιο με το προηγούμενο, αλλά οι παράμετροι εμφανίζονται σε μια στήλη.
  • $! - PID της τελευταίας διεργασίας που εκτελείται στο παρασκήνιο.
  • $$ - PID του ίδιου του σεναρίου.

Για να δείτε τις τιμές όλων των μεταβλητών στην τρέχουσα περίοδο λειτουργίας, τόσο αυτών που ορίζετε όσο και εκείνων στο περιβάλλον, εκδώστε την εντολή set χωρίς παραμέτρους ή env printenv .

Μπορείτε να αφαιρέσετε μια μεταβλητή με την εντολή unset.

2.4. Αντικαταστάσεις και οργάνωση αλληλεπίδρασης μεταξύ εντολών

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

Αντικατάσταση του αποτελέσματος μιας αριθμητικής παράστασης

Υπάρχουν δύο συντακτικές μορφές για την αντικατάσταση του αποτελέσματος μιας αριθμητικής παράστασης: $[έκφραση] και $((έκφραση)). Για παράδειγμα,

echo "Είμαι $ χρονών."

Αντικατάσταση εντολών

Η αντικατάσταση εντολών σάς επιτρέπει να χρησιμοποιήσετε την έξοδο μιας εντολής σε μια γραμμή εντολών που περιέχει μια άλλη εντολή. Μπορούν να χρησιμοποιηθούν δύο εναλλακτικές μορφές αντικατάστασης: $(εντολή) ή `command` (μονά εισαγωγικά). Για παράδειγμα,

Επέκταση του χαρακτήρα tilde

Ο χαρακτήρας tilde (~) σάς επιτρέπει να εισάγετε γρήγορα ονόματα καταλόγου.

~ Το όνομα του αρχικού καταλόγου του χρήστη ~/υποκαταλόγου Το όνομα ενός από τους υποκαταλόγους στον κεντρικό κατάλογο του χρήστη ~+ Το όνομα του τρέχοντος καταλόγου ~- Το όνομα του προηγούμενου καταλόγου

Αποκάλυψη σγουρά τιράντες

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

Έξοδα mkdir/(Ιανουάριος, Φεβρουάριος, Μάρτιος) ισοδυναμεί με έξοδα mkdir/Έξοδα mkdir Ιανουαρίου/Έξοδα mkdir Φεβρουαρίου/Μάρτιο

Κανάλια

Ο μεταχαρακτήρας καναλιού (|) υποδεικνύει την ανάγκη οργάνωσης της αλληλεπίδρασης μεταξύ εντολών χρησιμοποιώντας το αποτέλεσμα της εκτέλεσης (έξοδος) μιας άλλης εντολής ως δεδομένα εισόδου (εισόδου) μιας εντολής. Με άλλα λόγια, χρησιμοποιώντας έναν σωλήνα (pipeline), τα αποτελέσματα της πρώτης εντολής μπορούν να περάσουν ως είσοδο στη δεύτερη εντολή. Για παράδειγμα,

cat /etc/passwd | ταξινόμηση | κεφάλι -3

Ακολουθίες και ομάδες εντολών

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

command1;command2 Εκτελέστε πρώτα την εντολή 1 και μετά την εντολή 2 (command1;command2) Εκτελέστε ξεχωριστό αντίγραφοδιερμηνέας στον οποίο θα εκτελεστούν οι εντολές 1 και 2 διαδοχικά ( command1;command2) Εκτελέστε τις εντολές 1 και 2 διαδοχικά στην τρέχουσα εντολή διερμηνέα1 && command2 Εκτελέστε την εντολή 2 μόνο εάν η εντολή 1 ολοκληρωθεί επιτυχώς εντολή1 || command2 Εκτελέστε την εντολή 2 μόνο εάν η εντολή 1 αποτύχει

Το αποτέλεσμα οποιασδήποτε εκτέλεσης εντολής (δηλαδή το αποτέλεσμα του τερματισμού της αντίστοιχης διαδικασίας) είναι ο κωδικός εξόδου. Η επιτυχής ολοκλήρωση έχει κωδικό 0, ο κωδικός ανεπιτυχούς ολοκλήρωσης 1. Η τιμή του κωδικού ολοκλήρωσης εκχωρείται σε μια προκαθορισμένη μεταβλητή; (ερωτηματικό). Για παράδειγμα, ηχώ $?

Επανεκτέλεση εντολών

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

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

Για να προβάλετε μια λίστα εντολών που χρησιμοποιήθηκαν στο παρελθόν, εκτελέστε την εντολή ιστορικού.

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

Σύνταξη επέκτασης ιστορικού: !n Εκτελέστε τον αριθμό εντολής που δίνεται!! Εκτέλεση προηγούμενης εντολής!string Εκτελέστε την πιο πρόσφατη εντολή ξεκινώντας με τη δεδομένη συμβολοσειρά!?string? Εκτελέστε την πιο πρόσφατη εντολή που περιέχει τη δεδομένη συμβολοσειρά Αντί να εκτελέσετε απευθείας τη γραμμή εντολών που περιέχεται στο ιστορικό εντολών, μπορείτε να την καλέσετε για μεταγενέστερη επεξεργασία. Χρησιμοποιήστε τα πλήκτρα του κέρσορα"πάνω βέλος" και "κάτω βέλος" Γιαβήμα προς βήμα προβολή

ιστορικό εντολών και επιλέγοντας την απαιτούμενη γραμμή εντολών.

3. Bash ενσωματωμένα

Μπορείτε να λάβετε μια λίστα με ενσωματωμένα κελύφη bash χρησιμοποιώντας την εντολή βοήθειας ή να βρείτε στη σελίδα man στην ενότητα ΕΝΤΟΛΕΣ SHELL BUILTIN.

  • Ακολουθούν μερικές χρήσιμες ενσωματωμένες εντολές:
  • echo [ορίσματα] - Εκτύπωση ορισμάτων στην οθόνη.
  • enable - Προκαλεί το κέλυφος να εκτελέσει ένα εκτελέσιμο αρχείο με το ίδιο όνομα αντί για μια ενσωματωμένη εντολή. Χρήσιμο εάν έχετε το δικό σας σενάριο με το όνομα echo.
  • eval [ορίσματα] - Κατασκευάζει μια εντολή on the fly από τα καθορισμένα ορίσματα και την στέλνει για εκτέλεση.
  • ας - Αξιολογήστε εκφράσεις.
  • - Διαβάστε και εκτελέστε εντολές που περιέχονται στο αρχείο. Χρησιμοποιείται για τον ορισμό μεταβλητών χρήστη. και λειτουργίες.
  • όνομα βάσης - Επισημάνετε ένα τοπικό όνομα.
  • expr - Αξιολόγηση έκφρασης.
  • read - Εισαγάγετε την τιμή μιας μεταβλητής.
  • shift - Μετατόπιση της λίστας παραμέτρων.
δοκιμή - Ελέγξτε την κατάσταση.

Άλλες ενσωματωμένες εντολές χρησιμεύουν ως οδηγίες στη γλώσσα εντολών bash.

  • Αυτή η ενότητα καλύπτει τα ακόλουθα θέματα:
  • Αλληλεπίδραση με κελύφη και εντολές
  • Εντολές και ακολουθίες εντολών
  • Ορισμός, χρήση και εξαγωγή μεταβλητών περιβάλλοντος
  • Ιστορικό εντολών και εργαλεία επεξεργασίας
  • Εκτέλεση εντολών εντός και εκτός της μεταβλητής περιβάλλοντος PATH
  • Χρήση αντικατάστασης εντολών
  • Εφαρμογή εντολών αναδρομικά σε ένα δέντρο καταλόγου

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

διερμηνέας εντολής bash

Διερμηνέας βίαιο χτύπημαένας από τους πολλούς διερμηνείς που είναι διαθέσιμοι στο Linux. Ονομάζεται επίσης σιδικό μας- ένακέρδος shκαι μετά τον Stephen Bourne, δημιουργό μιας πρώιμης έκδοσης του διερμηνέα ( /bin/sh).Το Bash είναι ουσιαστικά συμβατό με το sh, αλλά εισάγει πολλές βελτιώσεις, τόσο στη λειτουργικότητα όσο και στις δυνατότητες προγραμματισμού. Περιλαμβάνει τις δυνατότητες των διερμηνέων Korn (ksh) και C (csh) και έχει σχεδιαστεί για να είναι διερμηνέας συμβατός με το POSIX.

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

Οι διερμηνείς περιέχουν ενσωματωμένοεντολές όπως cd, break και exec. Άλλες εντολές είναι εξωτερικός.

Οι διερμηνείς χρησιμοποιούν επίσης τρία πρότυπα ροή I/O:

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

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

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

Λίστα 1. Παραδείγματα τυπικών προτροπών χρήστη

$
ian@lyrebird:~>
$

Εάν είστε συνδεδεμένοι ως root (ή υπερχρήστης), η προτροπή σας μπορεί να μοιάζει με τη Λίστα 2.

Λίστα 2. Παράδειγμα προτροπών για root ή superuser

#
lyrebird:~ #
#

Ο χρήστης root έχει σημαντική ισχύ, επομένως χρησιμοποιήστε τον με προσοχή. Εάν έχετε δικαιώματα root, τα περισσότερα μηνύματα ξεκινούν με ένα σύμβολο λίρας (#). Η προτροπή για έναν κανονικό χρήστη συνήθως ξεκινά με διαφορετικό χαρακτήρα, συνήθως ένα σύμβολο του δολαρίου ($). Η πρόσκλησή σας μπορεί να διαφέρει από τα παραδείγματα σε αυτόν τον οδηγό. Η προτροπή σας μπορεί να περιλαμβάνει το όνομα χρήστη, το όνομα του μηχανήματος, τον τρέχοντα κατάλογο, την ημερομηνία ή την ώρα εκτύπωσης του μηνύματος και ούτω καθεξής.

Ορισμένες συμβάσεις αυτού του εγχειριδίου

Οι οδηγοί εξετάσεων του developerWorks LPI 101 και 102 περιλαμβάνουν παράδειγμα κώδικα από πραγματικά συστήματα Linux, χρησιμοποιώντας τις προεπιλεγμένες προτροπές για αυτά τα συστήματα. Στην περίπτωσή μας, η προτροπή του χρήστη root ξεκινά με #, ώστε να μπορείτε να τη διακρίνετε από τις προτροπές του κανονικού χρήστη, που ξεκινούν με ένα σύμβολο $. Αυτή η σύμβαση είναι η ίδια με αυτή που χρησιμοποιείται σε βιβλία σχετικά με το θέμα. Κοιτάξτε προσεκτικά την προτροπή του κελύφους σε κάθε παράδειγμα.

Εντολές και Ακολουθίες

Είστε στον διερμηνέα εντολών, ας δούμε τι μπορείτε να κάνετε τώρα. Η κύρια λειτουργία των διερμηνέων εντολών είναι ότι εκτελεί τις εντολές σας μέσω των οποίων αλληλεπιδράτε με το σύστημα Linux. Στα συστήματα Linux (και UNIX), οι εντολές αποτελούνται από ένα όνομα εντολής, επιλογές και παραμέτρους. Ορισμένες εντολές δεν έχουν ούτε επιλογές ούτε παραμέτρους, άλλες έχουν επιλογές αλλά δεν έχουν παραμέτρους, ενώ άλλες δεν έχουν ούτε επιλογές ούτε παραμέτρους.

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

Team Echo

Η εντολή echo εκτυπώνει μια λίστα με τα ορίσματά της στο τερματικό όπως φαίνεται στην Λίστα 3.

Λίστα 3. Παραδείγματα της εντολής echo

$ echo Word
Λέξη
$ ηχώ Και πρόταση
Και μια πρόταση
$ echo Πού πήγαν τα κενά;
Πού πήγαν οι χώροι;
$ echo "Ορίστε τα κενά." # και σχολιάστε
Και εδώ είναι οι χώροι.

Στο τρίτο παράδειγμα της Λίστας 3, όλα τα κενά μεταξύ των λέξεων στην έξοδο εντολών έγιναν το ίδιο μέγεθος, ένα διάστημα. Για να αποφευχθεί αυτό, θα χρειαστεί να περικλείσετε τη συμβολοσειρά σε εισαγωγικά, χρησιμοποιώντας είτε διπλά εισαγωγικά (“) είτε μονά εισαγωγικά (‘). Το Bash χρησιμοποιεί οριοθέτες όπως κενά, καρτέλες και νέες γραμμές για να χωρίσει τη συμβολοσειρά εισόδου σε διακριτικά που στη συνέχεια μεταβιβάζονται στην εντολή σας. Το κλείσιμο μιας συμβολοσειράς σε εισαγωγικά καταστέλλει τη διάσπασή της και επομένως είναι ένα μοναδικό διακριτικό. Στο παραπάνω παράδειγμα, κάθε διακριτικό μετά το όνομα της εντολής είναι μια παράμετρος, άρα έχουμε 1, 2, 4 και 1 παραμέτρους αντίστοιχα.

Η εντολή echo έχει πολλές επιλογές. Συνήθως το echo προσθέτει έναν χαρακτήρα νέας γραμμής μετά την έξοδό του. Χρησιμοποιήστε την επιλογή -n για να μην προσθέσει χαρακτήρα νέας γραμμής. Χρησιμοποιήστε την επιλογή -e για να έχετε την εντολή να ερμηνεύει τις ακολουθίες διαφυγής.

Ακολουθίες διαφυγής και διακοπές γραμμής

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

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

Λίστα 4. Παραδείγματα χρήσης ηχούς

$ echo -n Δεν υπάρχει νέα γραμμή
Χωρίς νέα γραμμή$ echo -e "Χωρίς νέα γραμμή\c"
Δεν υπάρχει νέα γραμμή$ echo "Η γραμμή στην οποία κάνατε κλικ
> Enter key"
Η γραμμή στην οποία κάνατε κλικ
Εισαγωγή κλειδιού
$ echo -e "Γραμμή με χαρακτήρα διαφυγής νέας γραμμής"
Κορδόνι με χαρακτήρα διαφυγής
νέα γραμμή
$ echo "Γραμμή με χαρακτήρα διαφυγής νέας γραμμής, αλλά χωρίς επιλογή -e"
Μια συμβολοσειρά με χαρακτήρα διαφυγής νέας γραμμής, αλλά χωρίς την επιλογή -e
$ echo -e Μεταχαρακτήρες με διπλή\\n\\t κάθετο
Μεταχαρακτήρες με διπλό
ανάστροφη κάθετο
$ echo ανάστροφη κάθετο \
> ακολουθούμενο από Enter \
> χρησιμεύει ως αίτημα για συνέχιση της γραμμής.
Μια ανάστροφη κάθετο ακολουθούμενη από Enter χρησιμεύει ως αίτημα για να συνεχίσετε τη γραμμή.

Σημειώστε ότι το bash εμφανίζει μια ειδική προτροπή (>) όταν πληκτρολογείτε μια συμβολοσειρά με εισαγωγικά χωρίς τερματισμό. Η γραμμή εισαγωγής αναδιπλώνεται στη δεύτερη γραμμή και περιλαμβάνει έναν χαρακτήρα νέας γραμμής.

Bash μεταχαρακτήρες και δηλώσεις ελέγχου

Το Bash περιλαμβάνει αρκετούς χαρακτήρες που, όταν δεν αναφέρονται, χρησιμεύουν επίσης στο διαχωρισμό της συμβολοσειράς εισόδου σε λέξεις. Εκτός από το διάστημα, τέτοια σύμβολα είναι «|», «&», «;», «(», «)», «<’, и ‘>’. Θα συζητήσουμε μερικά από αυτά τα σύμβολα με περισσότερες λεπτομέρειες σε άλλες ενότητες αυτού του οδηγού. Προς το παρόν, σημειώστε ότι εάν θέλετε να συμπεριλάβετε έναν μεταχαρακτήρα ως μέρος του κειμένου σας, πρέπει να περικλείεται σε εισαγωγικά ή να προηγείται μια ανάστροφη κάθετο (\) όπως στη Λίστα 4.

Η νέα γραμμή και οι αντίστοιχοι μεταχαρακτήρες ή ζεύγη μεταχαρακτήρες χρησιμεύουν επίσης ως δηλώσεις ελέγχου. Τέτοια σύμβολα είναι «||», «&&», «&», «;», «;;», «|» '(', Και ')'. Μερικές από αυτές τις δηλώσεις ελέγχου σας επιτρέπουν να δημιουργήσετε ακολουθίες ή λίστες εντολών.

Η απλούστερη ακολουθία εντολών αποτελείται από δύο εντολές που χωρίζονται με ένα ερωτηματικό (;). Κάθε επόμενη εντολή εκτελείται μετά την προηγούμενη. Σε οποιοδήποτε περιβάλλον προγραμματισμού, οι εντολές επιστρέφουν έναν κωδικό που υποδεικνύει εάν το πρόγραμμα ολοκληρώθηκε κανονικά ή απέτυχε. Οι εντολές Linux συνήθως επιστρέφουν 0 εάν είναι επιτυχείς και μη μηδενικές εάν δεν είναι επιτυχείς. Μπορείτε να εκτελέσετε επεξεργασία υπό όρους χρησιμοποιώντας τους τελεστές ελέγχου && και ||. Εάν διαχωρίσετε δύο εντολές με τον τελεστή ελέγχου &&, η δεύτερη εντολή θα εκτελεστεί μόνο εάν η πρώτη επιστρέψει μηδέν. Εάν διαχωρίσετε εντολές με ||, τότε η δεύτερη εντολή θα εκτελεστεί μόνο εάν η πρώτη επιστρέψει μια μη μηδενική τιμή. Η λίστα 5 περιέχει ορισμένες ακολουθίες εντολών που χρησιμοποιούν την εντολή echo. Αυτά τα παραδείγματα δεν είναι πολύ ενδιαφέροντα αφού η echo επιστρέφει 0, αλλά θα δούμε περισσότερα παραδείγματα μόλις μάθουμε πώς να χρησιμοποιούμε περισσότερες εντολές.

Λίστα 5. Ακολουθίες εντολών

$ echo line 1;echo line 2; ηχώ γραμμή 3
γραμμή 1
γραμμή 2
γραμμή 3
$ echo line 1&&echo line 2&&echo line 3
γραμμή 1
γραμμή 2
γραμμή 3
$ echo line 1||echo line 2; ηχώ γραμμή 3
γραμμή 1
γραμμή 3

Μπορείτε να βγείτε από το κέλυφος χρησιμοποιώντας την εντολή exit. Επιπλέον, μπορείτε να καθορίσετε έναν κωδικό εξόδου ως παράμετρο. Εάν εργάζεστε με τον διερμηνέα εντολών σε ένα παράθυρο τερματικού σε γραφική λειτουργία, τότε σε αυτήν την περίπτωση απλά θα κλείσει. Ομοίως, εάν είστε συνδεδεμένοι σε ένα απομακρυσμένο σύστημα χρησιμοποιώντας ssh ή telnet (για παράδειγμα), η σύνδεση θα αποτύχει. Στον διερμηνέα bash, μπορείτε επίσης να πατήσετε Ctrl και d για έξοδο.

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

Λίστα 6. Κελύφη και ακολουθίες εντολών

$ (echo Σε ένα αντίγραφο του διερμηνέα, έξοδος 0) && echo OK || ηχώ Κακή έξοδος
Σε αντίγραφο του διερμηνέα
ΕΝΤΑΞΕΙ
$ (echo Σε ένα αντίγραφο του διερμηνέα, έξοδος 4) && echo OK || ηχώ Κακή έξοδος
Σε αντίγραφο του διερμηνέα
Κακή έξοδος

Μείνετε συντονισμένοι για περισσότερες εντολές σε αυτόν τον οδηγό.

Μεταβλητές Περιβάλλοντος

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

Τόσο οι μεταβλητές περιβάλλοντος όσο και οι μεταβλητές φλοιού έχουν ένα όνομα. Μπορείτε να ανατρέξετε στην τιμή μιας μεταβλητής τοποθετώντας ένα σύμβολο «$» μπροστά από το όνομα της μεταβλητής. Μερικές από τις πιο κοινές μεταβλητές περιβάλλοντος bash παρατίθενται στον Πίνακα 4.

  • ΜΕΤΑΧΕΙΡΙΖΟΜΕΝΟΣΣύνδεση όνομα χρήστη
  • UIDΨηφιακό αναγνωριστικό του συνδεδεμένου χρήστη
  • ΣΠΙΤΙΑρχικός κατάλογος χρήστη
  • P.W.D.Τρέχων κατάλογος εργασίας
  • ΚΕΛΥΦΟΣΌνομα κελύφους
  • $ Αναγνωριστικό διεργασίας (ή PID) μιας διεργασίας bash (ή άλλης).
  • PPIDΤο αναγνωριστικό της διαδικασίας που προκάλεσε αυτήν τη διαδικασία (δηλαδή, το αναγνωριστικό της γονικής διαδικασίας)
  • ? Κωδικός εξόδου τελευταίας εντολής

Στη Λίστα 7 μπορείτε να δείτε ορισμένες μεταβλητές bash.

Λίστα 7. Μεταβλητές περιβάλλοντος και κέλυφος

$ echo $USER $UID
ian 500
$ echo $SHELL $HOME $PWD
/bin/bash /home/ian /home/ian
$ (έξοδος 0);echo $?;(έξοδος 4);echo $?
0
4
$ echo $$ $PPID
30576 30575

Μπορείτε να δημιουργήσετε ή να ορίσετε μια μεταβλητή φλοιού πληκτρολογώντας ένα σύμβολο ίσου (=) αμέσως μετά το όνομα της μεταβλητής. Οι μεταβλητές κάνουν διάκριση πεζών-κεφαλαίων, επομένως το var1 και το VAR1 είναι δύο διαφορετικές μεταβλητές. Κατά σύμβαση, οι μεταβλητές, ειδικά οι εξαγόμενες μεταβλητές, γράφονται με κεφαλαία, αλλά αυτό δεν αποτελεί απαίτηση. Επίσημα, $$ και $; είναι παράμετροι φλοιού, όχι μεταβλητές. Μπορείτε να τους αναφέρετε, αλλά όχι να εκχωρήσετε τιμές.

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

Για να απεικονίσουμε την ανάθεση και την εξαγωγή, ας δημιουργήσουμε ένα άλλο bash από τον τρέχοντα διερμηνέα bash και, στη συνέχεια, εκκινούμε τον διερμηνέα Korn από το bash που δημιουργήθηκε (ksh). Θα χρησιμοποιήσουμε την εντολή ps για να εμφανίσουμε πληροφορίες σχετικά με τις διεργασίες που εκτελούνται. Θα μάθουμε περισσότερα για την εντολή ps όταν εξερευνήσουμε την έννοια της κατάστασης διεργασίας αργότερα σε αυτό το σεμινάριο.

Δεν χρησιμοποιείτε bash;

Το Bash είναι ο προεπιλεγμένος διερμηνέας σε πολλές διανομές Linux. Εάν δεν είστε χρήστης του bash, ίσως θελήσετε να εξετάσετε τους ακόλουθους τρόπους για να εξασκηθείτε στη χρήση του bash.

  • Χρησιμοποιήστε την εντολή
    chsh -s /bin/bash
    για να αλλάξετε τον προεπιλεγμένο διερμηνέα. Οι αλλαγές θα τεθούν σε ισχύ την επόμενη φορά που θα συνδεθείτε.
  • Ομάδα
    su – $USER -s /bin/bash
    θα δημιουργήσει μια άλλη διαδικασία που θα είναι παιδί του τρέχοντος διερμηνέα σας. Η νέα διαδικασία θα ξεκινήσει τη διαδικασία σύνδεσης με το κέλυφος bash.
  • Δημιουργήστε έναν χρήστη bash για να προετοιμαστείτε για την εξέταση LPI.

Λίστα 8. Μεταβλητές περιβάλλοντος και κέλυφος

$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
30576 30575 -bash
$bash

PID PPID CMD
16353 30576 bash
$ VAR1=var1
$ VAR2=var2
$εξαγωγή VAR2
$ εξαγωγή VAR3=var3
$VAR2 $VAR3
var1 var2 var3
$ echo $VAR1 $VAR2 $VAR3 $SHELL
var1 var2 var3 /bin/bash
$ksh
$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
16448 16353 ksh
$ εξαγωγή VAR4=var4
$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
var2 var3 var4 /bin/bash
$ έξοδο
$ $ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
var1 var2 var3 /bin/bash
$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
16353 30576 bash
$ έξοδο
$ ps -p $$ -o "pid ppid cmd"
PID PPID CMD
30576 30575 -bash
$ echo $VAR1 $VAR2 $VAR3 $VAR4 $SHELL
/bin/bash

Σημείωμα:

  1. Στην αρχή αυτής της ακολουθίας, ο διερμηνέας bash είχε PID 30576.
  2. Ο δεύτερος διερμηνέας bash έχει PID 16353 και το γονικό του PID είναι 30576, δηλαδή το αρχικό bash.
  3. Δημιουργήσαμε τις μεταβλητές VAR1, VAR2 και VAR3 στη δεύτερη παρουσία του bash, αλλά εξάγαμε μόνο VAR2 και VAR3.
  4. Στον διερμηνέα Korn, δημιουργήσαμε το VAR4. Η εντολή echo εμφανίζει μόνο τις τιμές των VAR2, VAR3 και VAR4 και επιβεβαίωσε ότι το VAR1 δεν εξήχθη. Δεν εκπλαγείτε όταν η τιμή της μεταβλητής SHELL δεν άλλαξε παρόλο που άλλαξε η προτροπή; Δεν μπορείτε πάντα να βασίζεστε στη SHELL για να σας πει σε ποιον διερμηνέα χρησιμοποιείτε, αλλά η εντολή ps θα σας ενημερώσει ακριβώς τι είναι τι. Σημειώστε ότι το ps βάζει μια παύλα (-) μπροστά από την πρώτη εμφάνιση του bash για να μας ενημερώσει τι είναι πηγαίο κέλυφος.
  5. Στη δεύτερη περίπτωση του bash μπορούμε να δούμε VAR1, VAR2 και VAR3.
  6. Τέλος, όταν επιστρέφουμε στον αρχικό διερμηνέα, δεν υπάρχει ούτε μία μεταβλητή σε αυτόν.

Νωρίτερα συζητήσαμε τη δυνατότητα χρήσης τόσο μονών όσο και διπλών εισαγωγικών. Υπάρχει μια σημαντική διαφορά μεταξύ τους. Ο διερμηνέας εκτελεί αντικατάσταση μεταβλητών φλοιού μεταξύ διπλών εισαγωγικών ($), αλλά δεν εκτελεί αντικατάσταση εάν χρησιμοποιούνται μονά εισαγωγικά ('). Στο προηγούμενο παράδειγμα, δημιουργήσαμε μια νέα παρουσία διερμηνέα από μια άλλη και λάβαμε ένα νέο αναγνωριστικό διεργασίας. Χρησιμοποιώντας την επιλογή -ντομπορείτε να περάσετε την εντολή σε έναν άλλο διερμηνέα, ο οποίος θα εκτελέσει την εντολή και θα επιστρέψει. Εάν περάσετε μια συμβολοσειρά ως εντολή σε μεμονωμένα εισαγωγικά, τότε η δεύτερη παρουσία του διερμηνέα θα τα αφαιρέσει και θα επεξεργαστεί τη γραμμή. Όταν χρησιμοποιείτε διπλά εισαγωγικά, πραγματοποιείται αντικατάσταση μεταβλητής πριν από αυτόπώς περνά η συμβολοσειρά, επομένως τα αποτελέσματα μπορεί να διαφέρουν από αυτό που περιμένετε. Ο διερμηνέας και η εντολή θα δημιουργήσουν μια διαδικασία που θα έχει το δικό της PID. Η λίστα 9 επεξηγεί αυτές τις έννοιες. Το PID του αρχικού διερμηνέα bash είναι με διαφορετική γραμματοσειρά.

Λίστα 9. Τιμές και μεταβλητές φλοιού

$ echo "$SHELL" "$SHELL" "$$" "$$"
/bin/bash $SHELL 19244 $$
$ bash -c "echo Ανάπτυξη στο γονικό $$ $PPID"
Ανάπτυξη στη μητρική 19244 19243
$ bash -c "echo Ανάπτυξη σε παιδί $$ $PPID"
Expand in child 19297 19244

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

Λίστα 10. Χρήση σγουρά τιράντες με ονόματα μεταβλητών

$ echo "-$HOME/abc-"
-/home/ian/abc-
$ echo "-$HOME_abc-"
--
$ echo "-$(HOME)_abc-"
-/home/ian_abc-

εντολή env

Η εντολή env, χωρίς επιλογές ή παραμέτρους, εμφανίζει τις τρέχουσες μεταβλητές περιβάλλοντος. Μπορείτε επίσης να το χρησιμοποιήσετε για να εκτελέσετε μια εντολή σε ένα προκαθορισμένο περιβάλλον. Η επιλογή -i (ή απλώς -) διαγράφει το τρέχον περιβάλλον πριν από την εκτέλεση της εντολής, ενώ η επιλογή -u διαγράφει μεταβλητές περιβάλλοντος που δεν θέλετε να περάσουν.

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

Λίστα 11. εντολή env

$env
HOSTNAME=έχιδνα
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=9.27.89.137 4339 22
SSH_TTY=/dev/pts/2
USER=ian
...
_=/bin/env
OLDPWD=/usr/src
$ env -i bash -c "echo $SHELL; env"
/bin/bash
PWD=/home/ian
SHLVL=1
_=/bin/env
$ env -i ksh -c "echo $SHELL; env"
_=/bin/env
PATH=/bin:/usr/bin
$ env -i tcsh -c "echo $SHELL; env"
SHELL: Απροσδιόριστη μεταβλητή.

Σημειώστε ότι το bash έθεσε τη μεταβλητή SHELL αλλά δεν την εξήγαγε στο περιβάλλον, παρόλο που το bash δημιούργησε τρεις άλλες μεταβλητές στο περιβάλλον. Στο παράδειγμα ksh, έχουμε δύο μεταβλητές περιβάλλοντος, αλλά η προσπάθειά μας να εμφανίσουμε την τιμή της μεταβλητής SHELL καταλήγει σε μια κενή γραμμή. Τέλος, το tcsh δεν δημιούργησε μεταβλητές περιβάλλοντος και παρουσίασε ένα σφάλμα όταν προσπαθήσαμε να πάρουμε την τιμή της μεταβλητής SHELL.

Ρύθμιση και εκκαθάριση μεταβλητών

Η λίστα 11 έδειξε πώς συμπεριφέρονται οι διερμηνείς όταν επεξεργάζονται μεταβλητές και περιβάλλοντα. Αν και αυτός ο οδηγός εστιάζει στο bash, θα πρέπει να γνωρίζετε ότι δεν συμπεριφέρονται όλοι οι διερμηνείς το ίδιο. Επιπλέον, οι διερμηνείς συμπεριφέρονται διαφορετικά ανάλογα με το αν είναι το αρχικό κέλυφος ή όχι. Προς το παρόν, θα πούμε απλώς ότι το αρχικό κέλυφος είναι το κέλυφος που λαμβάνετε όταν συνδέεστε. μπορείτε να εκτελέσετε άλλα κοχύλια έτσι ώστε να συμπεριφέρονται όπως το αρχικό αν θέλετε. Οι τρεις διερμηνείς στο παραπάνω παράδειγμα, που ξεκινούν με την εντολή env -i, δεν είναι οι αρχικοί διερμηνείς. Δοκιμάστε να περάσετε την επιλογή -l για να δείτε τη διαφορά κατά την εκτέλεση του αρχικού κελύφους.

Ας δούμε την προσπάθειά μας να εμφανίσουμε την τιμή της μεταβλητής SHELL σε αυτά τα κελύφη:

  • Όταν ξεκίνησε το bash, όρισε τη μεταβλητή SHELL, αλλά δεν την εξήγαγε αυτόματα στο περιβάλλον.
  • Όταν ξεκίνησε το ksh, δεν όρισε τη μεταβλητή SHELL. Ωστόσο, μια αναφορά σε μια απροσδιόριστη μεταβλητή περιβάλλοντος ισοδυναμεί με μια αναφορά σε μια κενή τιμή.
  • Όταν ξεκίνησε το tcsh, δεν όρισε την τιμή της μεταβλητής SHELL. Σε αυτήν την περίπτωση, η προεπιλεγμένη συμπεριφορά είναι διαφορετική από το ksh (και το bash) και είχε ως αποτέλεσμα να δημιουργηθεί ένα σφάλμα όταν προσπαθήσαμε να αποκτήσουμε πρόσβαση στη μεταβλητή.

Μπορείτε να χρησιμοποιήσετε την εντολή unset για να διαγράψετε μια μεταβλητή και να την αφαιρέσετε από τη λίστα των μεταβλητών φλοιού. Εάν μια μεταβλητή έχει εξαχθεί στο περιβάλλον, θα διαγραφεί επίσης από το περιβάλλον. Μπορείτε να χρησιμοποιήσετε την εντολή set για να ελέγξετε πώς συμπεριφέρεται το bash (ή άλλοι διερμηνείς). Το Set είναι μια ενσωματωμένη εντολή στον διερμηνέα, επομένως οι επιλογές εξαρτώνται από τον συγκεκριμένο διερμηνέα. Στο bash, η επιλογή -u λέει στο bash να μην δημιουργεί σφάλμα κατά την αναφορά σε μη καθορισμένες μεταβλητές, αλλά να τις αντιμετωπίζει σαν να ήταν κενές τιμές. Μπορείτε να προσθέσετε διάφορες επιλογέςγια να ορίσετε με – και να τα απενεργοποιήσετε με +. Μπορείτε να εμφανίσετε τρέχουσα λίσταορίστε επιλογές με echo $-.

Λίστα 12. Απενεργοποίηση και ρύθμιση

$echo$-
τονΒΗ
$ echo $VAR1
$set -u;echo$-
himuBH
$ echo $VAR1
bash: VAR1: μη δεσμευμένη μεταβλητή
$VAR1=v1
$VAR1=v1;echo $VAR1
v1
$unset VAR1;echo $VAR1
bash: VAR1: μη δεσμευμένη μεταβλητή
$ set +u;echo $VAR1;echo $-
τονΒΗ

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

εντολή exec

Η τελευταία εντολή που θα εξετάσουμε σε αυτήν την ενότητα είναι το exec. Μπορείτε να χρησιμοποιήσετε την εντολή exec για να εκτελέσετε μια άλλη εντολή που θα αντικαταστήσει τον τρέχοντα διερμηνέα. Η λίστα 13 δημιουργεί ένα στιγμιότυπο bash και στη συνέχεια χρησιμοποιεί το exec για να το αντικαταστήσει με τον διερμηνέα Korn. Μετά την έξοδο από τον διερμηνέα Korn, επιστρέφετε στον αρχικό διερμηνέα bash (PID 22985 σε αυτό το παράδειγμα).

Λίστα 13. Χρησιμοποιώντας το exec

$ ηχώ $$
22985
$bash
$ ηχώ $$
25063
$ exec ksh
$ ηχώ $$
25063
$ έξοδο
$ ηχώ $$
22985

Η ιστορία της ομάδας

Εάν πληκτρολογούσατε εντολές καθώς διαβάζατε το εγχειρίδιο, μπορεί να έχετε παρατηρήσει ότι σχεδόν οι ίδιες εντολές χρησιμοποιούνται συχνά. Τα καλά νέα είναι ότι το bash μπορεί να αποθηκεύσει ένα ιστορικό των εντολών σας. Από προεπιλογή, το ιστορικό είναι ενεργοποιημένο. Μπορείτε να το απενεργοποιήσετε με την εντολή set +o history και να το ενεργοποιήσετε με την εντολή set -o history. Η μεταβλητή περιβάλλοντος HISTSIZE λέει στο bash πόσες σειρές να αποθηκεύσει. Ένα σύνολο άλλων ιδιοτήτων καθορίζει τη συμπεριφορά και τη λειτουργία της ιστορίας. Δείτε τις σελίδες του bash man για λεπτομέρειες.

Εάν πληκτρολογήσατε εντολές καθώς διαβάζατε το εγχειρίδιο, μπορεί να έχετε παρατηρήσει ότι σχεδόν οι ίδιες εντολές χρησιμοποιούνται συχνά. Τα καλά νέα είναι ότι το bash μπορεί να αποθηκεύσει ένα ιστορικό των εντολών σας. Από προεπιλογή, το ιστορικό είναι ενεργοποιημένο. Μπορείτε να το απενεργοποιήσετε με την εντολή set +o history και να το ενεργοποιήσετε με την εντολή set -o history. Η μεταβλητή περιβάλλοντος HISTSIZE λέει στο bash πόσες σειρές να αποθηκεύσει. Ένα σύνολο άλλων ιδιοτήτων καθορίζει τη συμπεριφορά και τη λειτουργία της ιστορίας. Δείτε τις σελίδες του bash man για λεπτομέρειες.

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

ιστορία
Εμφανίζει ολόκληρο το ιστορικό
ιστορίαΝ
Εμφανίζει τις τελευταίες N γραμμές του ιστορικού σας
ιστορία -dN
Αφαιρεί τη γραμμή N από το ιστορικό σας. Αυτό μπορεί να χρησιμοποιηθεί εάν για παράδειγμα θέλετε να αφαιρέσετε μια γραμμή που περιέχει κωδικό πρόσβασης
!!
Η τελευταία σας εντολή εισήχθη

Ν η ομάδα ιστορίας
!-Ν
Μια εντολή που απέχει N βήματα από την τρέχουσα στο ιστορικό (!-1 ισοδύναμο!!)
!#
Τρέχουσα εντολή που πληκτρολογείτε
!σειρά
Η πιο πρόσφατη εντολή που ξεκινά με συμβολοσειρά
!;σειρά;
Η πιο πρόσφατη εντολή που περιέχει συμβολοσειρά

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

Λίστα 14. Διαχείριση ιστορικού

$ ηχώ $$
22985
$ env -i bash -c "echo $$"
1542
$ !!
env -i bash -c "echo $$"
1555
$!ec
ηχώ $$
22985
$ !en:s/$$/$PPID/
env -i bash -c "echo $PPID"
22985
$history 6
1097 ηχώ $$
1098 env -i bash -c "echo $$"
1099 env -i bash -c "echo $$"
1100 ηχώ $$
1101 env -i bash -c "echo $PPID"
1102 ιστορία 6
$history -d1100

Οι εντολές στη Λίστα 14 κάνουν τα εξής:

1. Έξοδος του PID του τρέχοντος διερμηνέα
2. Εκτελέστε την εντολή echo σε μια νέα παρουσία του διερμηνέα και εκτυπώστε το PID του
3. Εκτελέστε την τελευταία εντολή
4. Εκτελέστε ξανά την εντολή ξεκινώντας με 'ec'. θα εκτελεστεί η πρώτη εντολή σε αυτό το παράδειγμα
5. Εκτελέστε την τελευταία εντολή που ξεκινά με "en", αλλά αντικαταστήστε το "$PPID" με "$$", ώστε το γονικό PID να εμφανίζεται στην πραγματικότητα
6. Εμφάνιση των τελευταίων 6 εντολών ιστορικού
7. Διαγραφή εντολής αριθμός 1100, τελευταία εντολή echo

Μπορείτε να επεξεργαστείτε ιστορίες διαδραστικά. Ο διερμηνέας bash χρησιμοποιεί τη βιβλιοθήκη readline για να χειριστεί την επεξεργασία εντολών και ιστορικού. Από προεπιλογή, τα πλήκτρα και οι συνδυασμοί πλήκτρων που χρησιμοποιούνται για την πλοήγηση στο ιστορικό ή τις γραμμές επεξεργασίας είναι τα ίδια με αυτά που χρησιμοποιούνται στον επεξεργαστή GNU Emacs. Στο Emacs, οι συνδυασμοί πλήκτρων συνήθως γράφονται ως C-x ή M-x, όπου x είναι ένα κανονικό κλειδί και C και M είναι τα πλήκτρα Control και Meta, αντίστοιχα. Σε έναν τυπικό υπολογιστή, το πλήκτρο Ctrl αντιστοιχεί στο πλήκτρο Emacs Control και Πλήκτρο Altαντιστοιχεί στο κλειδί Meta. Πρόσθετες λειτουργίες, καθώς και η δυνατότητα διαμόρφωσης επιλογών χρησιμοποιώντας ένα αρχείο προετοιμασίας γραμμής ανάγνωσης (συνήθως inputrc στον αρχικό σας κατάλογο), μπορείτε να βρείτε στις σελίδες man.

Εάν προτιμάτε να ελέγχετε το ιστορικό σε λειτουργία vi, χρησιμοποιήστε την εντολή set -o vi για να μεταβείτε στη λειτουργία vi. Μπορείτε να επιστρέψετε στη λειτουργία emacs χρησιμοποιώντας την εντολή set -o emacs. Όταν εξάγετε μια εντολή σε λειτουργία vi, βρίσκεστε αρχικά σε λειτουργία εισαγωγής vi.

Μονοπάτια

Ορισμένες εντολές bash είναι ενσωματωμένες, ενώ άλλες είναι εξωτερικές. Ας δούμε τώρα τις εξωτερικές εντολές και τον τρόπο εκτέλεσης τους, καθώς και τον τρόπο διάκρισης μιας εσωτερικής εντολής.

Πού αναζητά εντολές ο διερμηνέας;

Οι εξωτερικές εντολές βρίσκονται μέσα στα αρχεία σύστημα αρχείων. Η ενότητα Easy File Management αυτού του σεμιναρίου και το πρόγραμμα εκμάθησης Θέμα 104 παρουσιάζονται με περισσότερες λεπτομέρειες. Στα συστήματα Linux και UNIX, όλα τα αρχεία αποτελούν μέρος ενός τεράστιου δέντρου του οποίου η ρίζα είναι /. Στα παραπάνω παραδείγματα, ο τρέχων κατάλογος μας ήταν ο αρχικός κατάλογος του χρήστη. Για τακτικούς χρήστες, οι οικείοι κατάλογοι τους βρίσκονται στο / οικιακό κατάλογο, δηλαδή /home/ian, στην περίπτωσή μου. Ο αρχικός κατάλογος του Root είναι /root. Αφού πληκτρολογήσετε μια εντολή, το bash την αναζητά στην προεπιλεγμένη λίστα καταλόγου αναζήτησης, η οποία είναι μια λίστα καταλόγων διαχωρισμένη με άνω και κάτω τελεία και είναι αποθηκευμένοι στη μεταβλητή περιβάλλοντος PATH.

Εάν θέλετε να μάθετε ποια εντολή θα εκτελεστεί εάν πληκτρολογήσετε μια συγκεκριμένη γραμμή, χρησιμοποιήστε την εντολή που ή πληκτρολογήστε. Η λίστα 15 δείχνει την προεπιλεγμένη διαδρομή μου καθώς και τη θέση πολλών εντολών.

Λίστα 15. Εύρεση τοποθεσιών εντολών

$ ηχώ $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/ian/bin
$ ποια bash env zip xclock echo set ls
ψευδώνυμο ls="ls --color=tty"
/bin/ls
/bin/bash
/bin/env
/usr/bin/zip
/usr/X11R6/bin/xclock
/bin/echo
/usr/bin/which: δεν έχει οριστεί (/usr/local/bin:/bin:/usr/bin:/usr/X11R6/b
in:/home/ian/bin)
$ type bash env zip xclock echo set ls
Το bash είναι /bin/bash
Το env είναι /bin/env
zip είναι /usr/bin/zip
Το xclock είναι /usr/X11R6/bin/xclock
Το echo είναι ένα ενσωματωμένο κέλυφος
το σετ είναι ενσωματωμένο κέλυφος
Το ls είναι ψευδώνυμο "ls --color=tty"

Σημειώστε ότι όλοι οι κατάλογοι στη διαδρομή τελειώνουν σε /bin. Αυτή είναι μια κοινή σύμβαση, αλλά όχι μια απαίτηση. Η εντολή που μας ανέφερε ότι η εντολή ls ήταν ψευδώνυμο και ότι δεν ήταν δυνατή η εύρεση της εντολής set. Σε αυτήν την περίπτωση, μπορεί να ερμηνευθεί ότι η εντολή είτε δεν υπάρχει είτε είναι ενσωματωμένη. Η εντολή type μάς είπε ότι η εντολή ls είναι στην πραγματικότητα ένα ψευδώνυμο και καθόρισε επίσης ότι η εντολή set είναι μια ενσωματωμένη εντολή διερμηνέα. Είπε επίσης ότι υπάρχει μια ενσωματωμένη εντολή echo και υπάρχει επίσης μια στο /bin, την οποία βρήκαμε χρησιμοποιώντας την εντολή που. Οι δύο εντολές παράγουν την έξοδο τους διαφορετικά.

Είδαμε ότι η εντολή ls που χρησιμοποιείται για την προβολή των περιεχομένων των καταλόγων είναι στην πραγματικότητα ένα ψευδώνυμο. Τα ψευδώνυμα παρέχουν έναν βολικό τρόπο χρήσης εντολών με διαφορετικά σύνολα επιλογών ή απλώς ως εναλλακτικό όνομα για μια εντολή. Στο παράδειγμά μας, η επιλογή –color=tty προκαλεί την επισήμανση της λίστας των αρχείων καταλόγου ανάλογα με τον τύπο των αρχείων και των καταλόγων. Δοκιμάστε να εκτελέσετε το dircolors –print-database για να δείτε τους χρωματικούς κωδικούς και επίσης για ποια χρώματα χρησιμοποιούνται συγκεκριμένου τύπουαρχείο.

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

Εκτέλεση άλλων εντολών

Στη Λίστα 15, είδαμε ότι η πλήρης διαδρομή των εκτελέσιμων αρχείων ξεκινά από τον ριζικό κατάλογο /. Για παράδειγμα, το πρόγραμμα xclock είναι στην πραγματικότητα /usr/X11R6/bin/xclock, ένα αρχείο που βρίσκεται στον κατάλογο /usr/X11R6/bin. Εάν το πρόγραμμα δεν βρίσκεται στη μεταβλητή PATH, τότε μπορείτε να το εκτελέσετε καθορίζοντας την πλήρη διαδρομή προς το πρόγραμμα και το ίδιο το πρόγραμμα. Υπάρχουν δύο είδη μονοπατιών που μπορείτε να χρησιμοποιήσετε:

  • Απόλυτες διαδρομές που ξεκινούν με /, όπως είδαμε στη Λίστα 15 (/bin/bash, /bin/env και ούτω καθεξής).
  • Οι σχετικές διαδρομές είναι διαδρομές που σχετίζονται με τον τρέχοντα κατάλογο εργασίας σας, το όνομα των οποίων μπορεί να ληφθεί χρησιμοποιώντας την εντολή pwd. Τέτοιες εντολές δεν ξεκινούν με /, αλλά περιέχουν τουλάχιστον έναν / χαρακτήρα.

Μπορείτε να χρησιμοποιήσετε απόλυτες διαδρομές ανεξάρτητα από τον τρέχοντα κατάλογο εργασίας σας, αλλά μπορεί να θέλετε να χρησιμοποιήσετε σχετικές διαδρομές όταν η εντολή είναι κοντά στον τρέχοντα κατάλογο. Ας υποθέσουμε ότι αναπτύσσετε μια νέα έκδοση του κλασικού προγράμματος "Hello World!". στον υποκατάλογο mytestbin του οικιακού σας καταλόγου. Μπορεί να θέλετε να χρησιμοποιήσετε μια σχετική διαδρομή και να εκτελέσετε την εντολή ως mytestbin/hello. Υπάρχουν δύο ειδικά ονόματα που μπορείτε να χρησιμοποιήσετε σε μια διαδρομή. μια μεμονωμένη τελεία (.) αναφέρεται στον τρέχοντα κατάλογο και ένα ζευγάρι κουκκίδες (..) που αναφέρονται στον γονικό κατάλογο του τρέχοντος καταλόγου. Δεδομένου ότι ο αρχικός σας κατάλογος δεν βρίσκεται στη μεταβλητή περιβάλλοντος PATH (και δεν θα έπρεπε να είναι), θα χρειαστεί να παρέχετε μια ρητή διαδρομή προς το αρχείο που θέλετε να εκτελέσετε από τον αρχικό σας κατάλογο. Για παράδειγμα, εάν έχετε ένα αντίγραφο του προγράμματος hello στον αρχικό σας κατάλογο, μπορείτε απλά να χρησιμοποιήσετε την εντολή ./hello για να το εκτελέσετε. Μπορείτε να χρησιμοποιήσετε και τα δύο. και.. ως μέρος μιας απόλυτης διαδρομής, αν και δεν είναι πολύ χρήσιμο σε αυτή την περίπτωση. Μπορείτε να χρησιμοποιήσετε το tilde (~) για να ανατρέξετε στον αρχικό σας κατάλογο και το ~username για να ανατρέξετε στον αρχικό κατάλογο του ονόματος χρήστη Δείτε την Λίστα 16 για ορισμένα παραδείγματα.

Λίστα 16. Απόλυτες και σχετικές διαδρομές

$ /bin/echo Χρησιμοποιήστε την εντολή echo αντί για την ενσωματωμένη
Χρησιμοποιήστε την εντολή echo αντί για την ενσωματωμένη
$ /usr/../bin/echo Συμπεριλάβετε τη γονική σκηνοθεσία στη διαδρομή
Συμπεριλάβετε τη γονική σκηνοθεσία στη διαδρομή
$ /bin/././echo Προσθέστε μερικά άχρηστα στοιχεία διαδρομής
Προσθέστε μερικά άχρηστα στοιχεία διαδρομής
$ pwd # Δείτε πού βρισκόμαστε
/home/ian
$ ../../bin/echo Χρησιμοποιήστε μια σχετική διαδρομή για την ηχώ
Χρησιμοποιήστε μια σχετική διαδρομή για ηχώ
$ myprogs/hello # Χρησιμοποιήστε μια σχετική διαδρομή χωρίς τελείες
-bash: myprogs/hello: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
$ mytestbin/hello # Χρησιμοποιήστε μια σχετική διαδρομή χωρίς τελείες
Γεια σου Κόσμο!
$ ./hello # Εκτέλεση προγράμματος στον τρέχοντα κατάλογο
Γεια σου Κόσμο!
$ ~/mytestbin/hello # run hello χρησιμοποιώντας ~
Γεια σου Κόσμο!
$ ../hello # Δοκιμάστε να εκτελέσετε το hello από τον γονέα
-bash: ../hello: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος

Αλλαγή του καταλόγου εργασίας

Ακριβώς όπως μπορείτε να εκτελέσετε προγράμματα από διαφορετικούς καταλόγους, μπορείτε να αλλάξετε τον τρέχοντα κατάλογο εργασίας σας χρησιμοποιώντας την εντολή cd. Το όρισμα για το cd πρέπει να είναι μια απόλυτη ή σχετική διαδρομή σε έναν κατάλογο. Σε μια εντολή, μπορείτε επίσης να χρησιμοποιήσετε ., .., ~ και ~όνομα χρήστη όταν καθορίζετε διαδρομές. Εάν πληκτρολογήσετε cd χωρίς παραμέτρους, θα μεταβείτε στον αρχικό σας κατάλογο. Η μετάδοση ενός μόνο (-) ως παραμέτρου σημαίνει μετάβαση στον προηγούμενο κατάλογο εργασίας. Ο αρχικός κατάλογος αποθηκεύεται στη μεταβλητή περιβάλλοντος HOME και ο προηγούμενος κατάλογος αποθηκεύεται στη μεταβλητή περιβάλλοντος OLDPWD, επομένως το cd είναι ισοδύναμο με το cd $HOME και το cd είναι ισοδύναμο με το cd $OLDPWD. Συνήθως μιλάμε εν συντομία για αλλαγή καταλόγου αντί για πλήρη αλλαγή του τρέχοντος καταλόγου εργασίας.

Όσον αφορά τις εντολές, υπάρχει μια μεταβλητή περιβάλλοντος CDPATH που περιέχει μια λίστα καταλόγων διαχωρισμένη με άνω και κάτω τελεία που πρέπει να αναζητηθούν (επιπλέον του τρέχοντος καταλόγου εργασίας), όταν επιτρέπεται σχετικές διαδρομές. Εάν η λύση χρησιμοποιεί μια διαδρομή από το CDPATH, τότε το cd θα εκτυπώσει την πλήρη διαδρομή του καταλόγου που βρέθηκε ως έξοδο. Συνήθως μια επιτυχημένη αλλαγή καταλόγου συνοδεύεται από την εμφάνιση μιας νέας πρόσκλησης ή μιας ελαφρώς τροποποιημένης πρόσκλησης. Μερικά παραδείγματα παρουσιάζονται στην Λίστα 17.

Καταχώριση 17. Αλλαγή καταλόγων

$ cd /;pwd
$ cd /usr/X11R6;pwd
/usr/X11R6
$cd ;pwd
/home/ian
$ cd -;pwd
/usr/X11R6
/usr/X11R6
$ cd ~ian/...;pwd
/σπίτι
$ cd ~;pwd
/home/ian
$ εξαγωγή CDPATH=~
$ cd /;pwd
$ cd mytestbin
/home/ian/mytestbin

Αναδρομική χρήση εντολών

Πολλές εντολές Linux μπορούν να εφαρμοστούν αναδρομικά σε όλα τα αρχεία σε ένα δέντρο καταλόγου. Για παράδειγμα, η εντολή ls έχει μια επιλογή -R για την αναδρομική λίστα καταλόγων και οι εντολές cp, mv, rm και diff έχουν μια επιλογή -r για την εφαρμογή της αναδρομικά.

Αντικατάσταση εντολών

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

Στο προηγούμενο σεμινάριο «LPI 101: Linux Installation and Package Management» είδαμε ότι η εντολή rpm μπορεί να πει σε ποιο πακέτο ανήκει ποια εντολή. Ήταν βολικό να χρησιμοποιήσετε την αντικατάσταση εντολών εδώ. Τώρα ξέρετε ότι το κάναμε πραγματικά.

Η αντικατάσταση εντολών είναι ένα ανεκτίμητο εργαλείο κατά τη σύνταξη σεναρίων καθώς και όταν χρησιμοποιείται στη γραμμή εντολών. Η λίστα 18 δείχνει ένα παράδειγμα για το πώς να λάβετε μια απόλυτη διαδρομή καταλόγου από μια σχετική, πώς να βρείτε ένα πακέτο που παρέχει την εντολή /bin/echo και πώς (ως root) να προβάλετε τις ετικέτες τριών κατατμήσεων στον σκληρό δίσκο. Το τελευταίο χρησιμοποιεί την εντολή seq για να δημιουργήσει μια ακολουθία ακεραίων αριθμών.

Λίστα 18. Αντικατάσταση εντολών

$ echo "../../usr/bin" dir είναι $(cd ../../usr/bin;pwd)
../../usr/bin dir είναι /usr/bin
$που ηχώ
/bin/echo
$ rpm -qf «που ηχώ».
sh-utils-2.0.12-3
$su -
Σύνθημα:
# για n σε $ (ακολουθία 7 9); do echo p$n `e2label /dev/hda$n`;ολοκληρώθηκε
p7 RH73
p8 SUSE81
σελ9 ΕΙΚΟΝΕΣ

Σελίδες Man

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

Σελίδες και ενότητες Man

Η κύρια (και παραδοσιακή) πηγή τεκμηρίωσης είναι οι σελίδες man, στις οποίες μπορείτε να προσπελάσετε χρησιμοποιώντας την εντολή man. Το σχήμα 1 δείχνει τη σελίδα man για την εντολή man. Χρησιμοποιήστε την εντολή man man για να λάβετε αυτές τις πληροφορίες.

Το Σχήμα 1 δείχνει μερικά τυπικά στοιχεία σελίδας ανθρώπου:

* Κεφαλίδα με το όνομα της εντολής ακολουθούμενο από τον αριθμό ενότητας σε παρένθεση
* Όνομα εντολής και άλλες παρόμοιες εντολές που αναφέρονται σε αυτήν τη σελίδα man
* Λίστα επιλογών και παραμέτρων που ισχύουν για την εντολή
* Σύντομη περιγραφή της ομάδας
* Αναλυτική περιγραφή κάθε επιλογής

Μπορείτε επίσης να βρείτε ενότητες σχετικά με τη χρήση, τον τρόπο αναφοράς σφαλμάτων, πληροφορίες συντάκτη και μια λίστα με άλλες εντολές. Για παράδειγμα, η σελίδα man for man αναφέρει ότι υπάρχουν πρόσθετες εντολές(και τα εγχειρίδια τους):

apropos(1), whatis(1), less(1), groff(1) και man.conf(5).

Συνήθως, οι σελίδες man έχουν 8 κοινές ενότητες. Οι περισσότερες σελίδες εγκαθίστανται συνήθως όταν εγκαθίσταται ένα πακέτο, επομένως αν δεν εγκατασταθεί ένα πακέτο, είναι σχεδόν βέβαιο ότι θα λείπουν οι σελίδες man του. Επιπλέον, ορισμένες ενότητες των σελίδων μπορεί να είναι κενές ή σχεδόν κενές. Οι πιο συνηθισμένες ενότητες των σελίδων man είναι:

1. Εντολές χρήστη (env, ls, echo, mkdir, tty)
2. Κλήσεις συστήματος ή λειτουργίες πυρήνα (σύνδεσμος, όνομα sethost, mkdir)
3. Λειτουργίες βιβλιοθήκης (acosh, asctime, btree, locale, XML::Parser)
4. Πληροφορίες εξοπλισμού (isdn_audio, ποντίκι, tty, zero)
5. Περιγραφή της μορφής αρχείου (keymaps, motd, wvdial.conf)
6. Παιχνίδια (σημειώστε ότι πολλά παιχνίδια τρέχουν τώρα σε λειτουργία γραφικών, κάτι που μπορεί να συμβαίνει δικό του σύστημαβοήθεια, όχι σελίδες man)
7. Διάφορα (arp, boot, regex, unix utf8)
8. Διαχείριση συστήματος(debugf, fdisk, fsck, mount, renice, rpm)

Άλλες ενότητες μπορεί να περιλαμβάνουν 9 για τεκμηρίωση πυρήνα Linux, n για νέα τεκμηρίωση, o για παλιά τεκμηρίωση και l για τοπική τεκμηρίωση.

Ορισμένες καταχωρήσεις ενδέχεται να εμφανίζονται σε πολλές ενότητες. Τα παραδείγματά μας έδειξαν ότι το mkdir περιέχεται στις ενότητες 1 και 2 και το tty στις ενότητες 1 και 4. Μπορείτε να ορίσετε μια συγκεκριμένη ενότητα, όπως man 4 tty ή man 2 mkdir, ή μπορείτε να χρησιμοποιήσετε την επιλογή -a για να παραθέσετε όλα τα άτομα ενότητες -σελίδες.

Θα παρατηρήσετε στην εικόνα ότι ο άντρας έχει πολλές επιλογές που μπορείτε να δείτε μόνοι σας. Προς το παρόν, ας ρίξουμε μια γρήγορη ματιά στην ενότητα «Δείτε επίσης» των εντολών που σχετίζονται με τον άνθρωπο.

Δείτε επίσης

Οι δύο πιο σημαντικές εντολές που σχετίζονται με τον άνθρωπο είναι το whatis και το apropos. Η εντολή whatis αναζητά στις σελίδες man για το όνομα που έχετε καθορίσει και εμφανίζει πληροφορίες σχετικά με το όνομα από τις αντίστοιχες σελίδες man. Η εντολή apropos αναζητά λέξεις-κλειδιά σε σελίδες man και επιστρέφει αυτές που περιέχουν τη λέξη σας. Η λίστα 19 δείχνει αυτές τις εντολές.

Λίστα 19. Παραδείγματα εντολών whatis και apropos

$whatis άνθρωπε
man (1) - μορφοποιήστε και εμφανίστε τις ηλεκτρονικές σελίδες του εγχειριδίου
man (7) - μακροεντολές για μορφοποίηση σελίδων man
man (1) - μορφοποιήστε και εμφανίστε τις ηλεκτρονικές σελίδες του εγχειριδίου
man.conf (5) - δεδομένα διαμόρφωσης για τον άνθρωπο
$whatis mkdir
mkdir (1) - δημιουργία καταλόγων

$ apropos mkdir
mkdir (1) - δημιουργία καταλόγων
mkdir(2) - δημιουργήστε έναν κατάλογο
mkdirhier (1x) - δημιουργεί μια ιεραρχία καταλόγου

Παρεμπιπτόντως, αν δεν μπορείτε να βρείτε τη σελίδα man για το man.conf, δοκιμάστε να εκτελέσετε το man.conf ig .

Η εντολή man εμφανίζεται στην οθόνη από ένα ειδικό πρόγραμμα σελιδοποίησης. Στα περισσότερα συστήματα Linux, αυτό το πρόγραμμα θα είναι λιγότερο. Μια άλλη επιλογή θα μπορούσε να είναι περισσότερο παλιό πρόγραμμαπερισσότερο. Εάν θέλετε να εκτυπώσετε τη σελίδα, ορίστε την επιλογή -t για να μορφοποιήσετε τη σελίδα και να εκτυπώσετε χρησιμοποιώντας το πρόγραμμα groff ή troff.

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

Άλλες πηγές τεκμηρίωσης

Εκτός από τις σελίδες man που είναι προσβάσιμες από τη γραμμή εντολών, το Free Software Foundation έχει δημιουργήσει μεγάλο αριθμό αρχείων πληροφοριών που υποβάλλονται σε επεξεργασία πρόγραμμα πληροφοριών. Διαθέτει εξαιρετικές δυνατότητες πλοήγησης, συμπεριλαμβανομένης της δυνατότητας μετακίνησης σε άλλο τμήμα. Πληκτρολογήστε πληροφορίες άνδρα ή πληροφορίες πληροφοριών για περισσότερες πληροφορίες. Δεν είναι όλες οι εντολές τεκμηριωμένες στις πληροφορίες, επομένως μπορείτε να χρησιμοποιήσετε τόσο σελίδες man όσο και πληροφορίες.

Υπάρχουν αρκετές γραφικές διεπαφές σε σελίδες man, όπως το xman (από το έργο XFree86) και το yelp (πρόγραμμα περιήγησης βοήθειας Gnome 2.0).

Εάν δεν μπορείτε να βρείτε βοήθεια για μια εντολή, δοκιμάστε να εκτελέσετε την εντολή με την επιλογή –help. Με αυτόν τον τρόπο μπορείτε να μάθετε τι θέλατε ή να πάρετε μια υπόδειξη πού αλλού μπορείτε να ψάξετε.

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