Εάν θέλετε να κυριαρχήσετε στο κέλυφος του Bash σε Linux, macOS ή άλλο σύστημα που μοιάζει με UNIX, οι ειδικοί χαρακτήρες (όπως ~, *, | και >) είναι κρίσιμοι. Θα σας βοηθήσουμε να ξετυλίξετε αυτές τις κρυπτικές ακολουθίες εντολών Linux και να γίνετε ήρωας των ιερογλυφικών.
Πίνακας περιεχομένων
Τι είναι οι ειδικοί χαρακτήρες;
Υπάρχει ένα σύνολο χαρακτήρων το Κέλυφος Bash αντιμετωπίζει με δύο διαφορετικούς τρόπους. Όταν τα πληκτρολογείτε στο κέλυφος, λειτουργούν ως οδηγίες ή εντολές και λένε στο κέλυφος να εκτελέσει μια συγκεκριμένη λειτουργία. Σκεφτείτε τις ως εντολές ενός χαρακτήρα.
Μερικές φορές, θέλετε απλώς να εκτυπώσετε έναν χαρακτήρα και δεν τον χρειάζεστε για να λειτουργήσει ως μαγικό σύμβολο. Υπάρχει ένας τρόπος να χρησιμοποιήσετε έναν χαρακτήρα για να αναπαραστήσετε τον εαυτό του και όχι την ειδική του λειτουργία.
Θα σας δείξουμε ποιοι χαρακτήρες είναι «ειδικοί» ή «μετα-» χαρακτήρες, καθώς και πώς μπορείτε να τους χρησιμοποιήσετε λειτουργικά και κυριολεκτικά.
~ Αρχική Κατάλογος
Η περισπωμένη (~) είναι συντομογραφία για τον αρχικό σας κατάλογο. Σημαίνει ότι δεν χρειάζεται να πληκτρολογήσετε την πλήρη διαδρομή προς τον αρχικό σας κατάλογο σε εντολές. Όπου κι αν βρίσκεστε στο σύστημα αρχείων, μπορείτε να χρησιμοποιήσετε αυτήν την εντολή για να μεταβείτε στον αρχικό σας κατάλογο:
cd ~
Μπορείτε επίσης να χρησιμοποιήσετε αυτήν την εντολή με σχετικές διαδρομές. Για παράδειγμα, εάν βρίσκεστε κάπου στο σύστημα αρχείων που δεν βρίσκεται στον αρχικό σας φάκελο και θέλετε να μεταβείτε στον κατάλογο αρχειοθέτησης στον κατάλογο εργασίας σας, χρησιμοποιήστε το tilde για να το κάνετε:
cd ~/work/archive
. Τρέχων κατάλογος
Μια τελεία (.) αντιπροσωπεύει τον τρέχοντα κατάλογο. Το βλέπετε σε λίστες καταλόγου εάν χρησιμοποιήσετε την επιλογή -a (όλα) με ls.
ls -a
Μπορείτε επίσης να χρησιμοποιήσετε την τελεία στις εντολές για να αναπαραστήσετε τη διαδρομή προς τον τρέχοντα κατάλογο σας. Για παράδειγμα, εάν θέλετε να εκτελέσετε ένα σενάριο από τον τρέχοντα κατάλογο, θα το ονομάζετε ως εξής:
./script.sh
Αυτό λέει στον Bash να ψάξει στον τρέχοντα κατάλογο για το αρχείο script.sh. Με αυτόν τον τρόπο, δεν θα πραγματοποιήσει αναζήτηση στους καταλόγους στη διαδρομή σας για αντιστοίχιση εκτελέσιμου αρχείου ή σεναρίου.
.. Κατάλογος Γονέων
Η διπλή περίοδος ή “διπλή τελεία” (..) αντιπροσωπεύει τον γονικό κατάλογο του τρέχοντος καταλόγου σας. Μπορείτε να το χρησιμοποιήσετε για να ανεβείτε ένα επίπεδο στο δέντρο καταλόγου.
cd ..
Μπορείτε επίσης να χρησιμοποιήσετε αυτήν την εντολή με σχετικές διαδρομές—για παράδειγμα, εάν θέλετε να ανεβείτε ένα επίπεδο στο δέντρο καταλόγου και, στη συνέχεια, να εισαγάγετε έναν άλλο κατάλογο σε αυτό το επίπεδο.
Μπορείτε επίσης να χρησιμοποιήσετε αυτήν την τεχνική για να μετακινηθείτε γρήγορα σε έναν κατάλογο στο ίδιο επίπεδο στη δέντρο καταλόγου με τον τρέχοντα. Ανεβείτε ένα επίπεδο και, στη συνέχεια, επαναφέρετε ένα σε διαφορετικό κατάλογο.
cd ../gc_help
/ Διαχωριστής καταλόγου διαδρομής
Μπορείτε να χρησιμοποιήσετε μια κάθετο προς τα εμπρός (/)—συχνά ονομάζεται απλώς κάθετο—για να διαχωρίσετε τους καταλόγους σε ένα όνομα διαδρομής.
ls ~/work/archive
Μια κάθετο προς τα εμπρός αντιπροσωπεύει τη συντομότερη δυνατή διαδρομή καταλόγου. Επειδή όλα στο δέντρο καταλόγου Linux ξεκινούν από τον ριζικό κατάλογο, μπορείτε να χρησιμοποιήσετε αυτήν την εντολή για να μετακινηθείτε γρήγορα στον ριζικό κατάλογο:
cd /
# Σχόλιο ή Περικοπή χορδών
Τις περισσότερες φορές, χρησιμοποιείτε τον κατακερματισμό ή το σύμβολο του αριθμού (#) για να πείτε στο κέλυφος ότι αυτό που ακολουθεί είναι ένα σχόλιο και δεν πρέπει να ενεργεί σε αυτό. Μπορείτε να το χρησιμοποιήσετε σε σενάρια φλοιού και – λιγότερο χρήσιμα – στη γραμμή εντολών.
# This will be ignored by the Bash shell
Ωστόσο, δεν αγνοείται πραγματικά, επειδή έχει προστεθεί στο ιστορικό εντολών σας.
Μπορείτε επίσης να χρησιμοποιήσετε τον κατακερματισμό για να περικόψετε μια μεταβλητή συμβολοσειράς και να αφαιρέσετε κάποιο κείμενο από την αρχή. Αυτή η εντολή δημιουργεί μια μεταβλητή συμβολοσειράς που ονομάζεται this_string.
Σε αυτό το παράδειγμα, εκχωρούμε το κείμενο “Dave Geek!” στη μεταβλητή.
this_string="Dave Geek!"
Αυτή η εντολή χρησιμοποιεί echo για να εκτυπώσει τις λέξεις “How-To” στο παράθυρο του τερματικού. Ανακτά την τιμή που είναι αποθηκευμένη στη μεταβλητή συμβολοσειράς μέσω του a επέκταση παραμέτρων. Επειδή προσθέτουμε τον κατακερματισμό και το κείμενο “Dave”, κόβει αυτό το τμήμα της συμβολοσειράς πριν περάσει σε ηχώ.
echo How-To ${this_string#Dave}
Αυτό δεν αλλάζει την τιμή που είναι αποθηκευμένη στη μεταβλητή συμβολοσειράς. επηρεάζει μόνο αυτό που αποστέλλεται στην ηχώ. Μπορούμε να χρησιμοποιήσουμε το echo για να εκτυπώσουμε την τιμή της μεταβλητής συμβολοσειράς άλλη μια φορά και να ελέγξουμε αυτό:
echo $this_string
? Μπαλαντέρ μονού χαρακτήρα
Το κέλυφος Bash υποστηρίζει τρεις χαρακτήρες μπαλαντέρ, ένας από τους οποίους είναι το ερωτηματικό (?). Χρησιμοποιείτε χαρακτήρες μπαλαντέρ για να αντικαταστήσετε χαρακτήρες σε πρότυπα ονομάτων αρχείων. Ένα όνομα αρχείου που περιέχει έναν χαρακτήρα μπαλαντέρ σχηματίζει ένα πρότυπο που ταιριάζει με μια σειρά ονομάτων αρχείων και όχι μόνο με ένα.
Ο μπαλαντέρ ερωτηματικού αντιπροσωπεύει ακριβώς έναν χαρακτήρα. Εξετάστε το ακόλουθο πρότυπο ονόματος αρχείου:
ls badge?.txt
Αυτό μεταφράζεται ως “καταχώριση οποιουδήποτε αρχείου με όνομα που ξεκινά με “σήμα” και ακολουθείται από οποιονδήποτε χαρακτήρα πριν από την επέκταση ονόματος αρχείου.”
Ταιριάζει με τα παρακάτω αρχεία. Σημειώστε ότι ορισμένα έχουν αριθμούς και μερικά έχουν γράμματα μετά το τμήμα “σήμα” του ονόματος αρχείου. Ο μπαλαντέρ ερωτηματικού θα ταιριάζει και με γράμματα και αριθμούς.
Ωστόσο, αυτό το πρότυπο ονόματος αρχείου δεν ταιριάζει με το “badge.txt”, επειδή το όνομα αρχείου δεν έχει ούτε έναν χαρακτήρα μεταξύ του “σήμα” και της επέκτασης αρχείου. Ο μπαλαντέρ ερωτηματικού πρέπει να ταιριάζει με έναν αντίστοιχο χαρακτήρα στο όνομα αρχείου.
Μπορείτε επίσης να χρησιμοποιήσετε το ερωτηματικό για να βρείτε όλα τα αρχεία με συγκεκριμένο αριθμό χαρακτήρων στα ονόματα αρχείων. Αυτό παραθέτει όλα τα αρχεία κειμένου που περιέχουν ακριβώς πέντε χαρακτήρες στο όνομα αρχείου:
ls ?????.txt
* Χαρακτήρας μπαλαντέρ ακολουθίας χαρακτήρων
Μπορείτε να χρησιμοποιήσετε τον αστερίσκο
ls badge*
μπαλαντέρ για να αντιπροσωπεύει οποιαδήποτε ακολουθία χαρακτήρων, συμπεριλαμβανομένων των χαρακτήρων. Εξετάστε το ακόλουθο πρότυπο ονόματος αρχείου:
Ενα
Ταιριάζει με το “badge.txt” επειδή ο μπαλαντέρ αντιπροσωπεύει οποιαδήποτε ακολουθία χαρακτήρων ή καθόλου χαρακτήρες.
ls source.*
[] Ενα
Σετ μπαλαντέρ χαρακτήρων
Όπως καλύφθηκε παραπάνω, χρησιμοποιείτε το ερωτηματικό για να αναπαραστήσετε οποιονδήποτε μεμονωμένο χαρακτήρα και τον αστερίσκο για να αναπαραστήσετε οποιαδήποτε ακολουθία χαρακτήρων (συμπεριλαμβανομένων των χαρακτήρων). [] Μπορείτε να σχηματίσετε έναν χαρακτήρα μπαλαντέρ με τις αγκύλες (
) και τους χαρακτήρες που περιέχουν. Ο σχετικός χαρακτήρας στο όνομα αρχείου πρέπει στη συνέχεια να ταιριάζει με τουλάχιστον έναν από τους χαρακτήρες στο σύνολο χαρακτήρων μπαλαντέρ.
ls badge_0[246].txt
Ενα
ls badge_[01][789].txt
Ενα
ls badge_[23][1-5].txt
Ενα
; Διαχωριστής εντολών Shell
ls > count.txt; wc -l count.txt; rm count.txt
Ενα
count.txt; wc -l count.txt; εντολή rm count.txt” σε παράθυρο τερματικού’ width=”646″ height=”122″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>
Σημειώστε ότι η δεύτερη εντολή εκτελείται ακόμη και αν αποτύχει η πρώτη, η τρίτη εκτελείται ακόμη και αν αποτύχει η δεύτερη και ούτω καθεξής.
cd ./doesntexist && cp ~/Documents/reports/* .
ΕΝΑ
Διαδικασία & Παρασκήνιο
Αφού πληκτρολογήσετε μια εντολή σε ένα παράθυρο τερματικού και ολοκληρωθεί, επιστρέφετε στη γραμμή εντολών. Κανονικά, αυτό διαρκεί μόνο μια ή δύο στιγμές. Αλλά εάν εκκινήσετε μια άλλη εφαρμογή, όπως το gedit, δεν μπορείτε να χρησιμοποιήσετε το παράθυρο του τερματικού σας μέχρι να κλείσετε την εφαρμογή.
gedit command_address.page &
ΕΝΑ
Το Bash σάς δείχνει το αναγνωριστικό διεργασίας του τι ξεκίνησε και, στη συνέχεια, σας επιστρέφει στη γραμμή εντολών. Στη συνέχεια, μπορείτε να συνεχίσετε να χρησιμοποιείτε το παράθυρο του τερματικού σας.
sortWhen a command has input redirected into it, it might behave differently than when it reads from a named file.
If we use wc to count the words, lines, and characters in a file, it prints the values, and then the filename. If we redirect the contents of the file to wc, it prints the same numeric values but doesn’t know the name of the file from which the data came. It cannot print a filename.
Here are some examples of how you can use wc:
wc words.txtwc> Output Redirection
You can use the right-angle bracket ( > ) to redirect the output from a command (typically, into a file); here’s an example:
ls > files.txtcat files.txtΕνα
εντολή files.txt" σε ένα παράθυρο τερματικού." width="646" height="382" >
wc doesntexist.txt 2> errors.txtcat errors.txtΕΝΑ
εντολή errors.txt" σε ένα παράθυρο τερματικού." width="646" height="122" >
| Σωλήνας
Μια "σωλήνα" αλυσίδες εντολές μαζί. Παίρνει την έξοδο από μια εντολή και την τροφοδοτεί στην επόμενη ως είσοδο. Ο αριθμός των εντολών (το μήκος της αλυσίδας) είναι αυθαίρετος.
Εδώ, θα χρησιμοποιήσουμε το cat για να τροφοδοτήσουμε τα περιεχόμενα του αρχείου words.txt στο grep, το οποίο εξάγει κάθε γραμμή που περιέχει είτε πεζό είτε κεφαλαίο "C". Το grep θα περάσει στη συνέχεια αυτές τις γραμμές για ταξινόμηση. Η ταξινόμηση χρησιμοποιεί την επιλογή -r (αντίστροφη), επομένως τα ταξινομημένα αποτελέσματα θα εμφανίζονται με αντίστροφη σειρά.
cat words.txt | grep [cC] | sort -rΕΝΑ
! Pipeline λογικό NOT και History Operator
Το θαυμαστικό (!) είναι ένας λογικός τελεστής που σημαίνει ΟΧΙ.
[ ! -d ./backup ] && mkdir ./backupΥπάρχουν δύο εντολές σε αυτή τη γραμμή εντολών:
Η πρώτη εντολή είναι το κείμενο μέσα στις αγκύλες.Η δεύτερη εντολή είναι το κείμενο που ακολουθεί τα διπλά σύμβολα &&.
Η πρώτη εντολή χρησιμοποιεί ! ως λογικός τελεστής. Οι αγκύλες υποδεικνύουν ότι πρόκειται να γίνει δοκιμή. Η επιλογή -d (κατάλογος) ελέγχει την παρουσία ενός καταλόγου που ονομάζεται backup. Η δεύτερη εντολή δημιουργεί τον κατάλογο.
Επειδή τα διπλά σύμβολα χωρίζουν τις δύο εντολές, το Bash θα εκτελέσει τη δεύτερη μόνο εάν η πρώτη πετύχει. Ωστόσο, αυτό είναι το αντίθετο από αυτό που χρειαζόμαστε. Εάν η δοκιμή για τον κατάλογο "αντιγράφων ασφαλείας" πετύχει, δεν χρειάζεται να τον δημιουργήσουμε. Και αν αποτύχει η δοκιμή για τον κατάλογο "backup", η δεύτερη εντολή δεν θα εκτελεστεί και ο κατάλογος που λείπει δεν θα δημιουργηθεί.
Εδώ είναι ο λογικός τελεστής! Λειτουργεί ως λογικό ΟΧΙ. Έτσι, εάν η δοκιμή πετύχει (δηλαδή, ο κατάλογος υπάρχει), το ! το μετατρέπει σε "ΟΧΙ επιτυχία", που είναι αποτυχία. Άρα, η δεύτερη εντολή δεν είναι ενεργοποιημένη.
Εάν η δοκιμή καταλόγου αποτύχει (δηλαδή, ο κατάλογος δεν υπάρχει), το ! αλλάζει την απόκριση στο «ΟΧΙ αποτυχία», που είναι επιτυχία. Έτσι, εκτελείται η εντολή για τη δημιουργία του καταλόγου που λείπει.
Αυτό το λίγο! έχει πολλή γροθιά όταν τη χρειάζεστε!
ls -l -d backupΕΝΑ
!24ΕΝΑ
!!Το παρακάτω εκτελεί ξανά την προηγούμενη εντολή:
$ Μεταβλητές εκφράσεις Στο κέλυφος του Bash, δημιουργείτε μεταβλητές για να κρατάτε τιμές. Κάποιοι σαν μεταβλητές περιβάλλοντος,
υπάρχουν πάντα και μπορείτε να έχετε πρόσβαση σε αυτά κάθε φορά που ανοίγετε ένα παράθυρο τερματικού. Αυτές διατηρούν τιμές, όπως το όνομα χρήστη, τον αρχικό κατάλογο και τη διαδρομή σας.
echo $USERecho $HOMEecho $PATHΕνα
ThisDistro=UbuntuMyNumber=2001echo $ThisDistroecho $MyNumberΕνα
Προσθέστε άγκιστρα ( {} ) γύρω από το σύμβολο του δολαρίου και εκτελέστε μια επέκταση παραμέτρου για να λάβετε την τιμή της μεταβλητής και να επιτρέψετε περαιτέρω μετασχηματισμούς της τιμής.
MyString=123456qwertyΑυτό δημιουργεί μια μεταβλητή που περιέχει μια σειρά χαρακτήρων, όπως φαίνεται παρακάτω:
echo ${MyString}Χρησιμοποιήστε την ακόλουθη εντολή για να επαναλάβετε τη συμβολοσειρά στο παράθυρο του τερματικού:
echo ${myString:6}Για να επιστρέψετε τη δευτερεύουσα συμβολοσειρά ξεκινώντας από τη θέση 6 ολόκληρης της συμβολοσειράς, χρησιμοποιήστε την ακόλουθη εντολή (υπάρχει μηδενική μετατόπιση, επομένως η πρώτη θέση είναι μηδέν):
echo ${myString:0:6}Εάν θέλετε να επαναλάβετε μια υποσυμβολοσειρά που ξεκινά από τη θέση μηδέν και περιέχει τους επόμενους έξι χαρακτήρες, χρησιμοποιήστε την ακόλουθη εντολή:
echo ${myString:4:4}ΕΝΑ
Παράθεση ειδικών χαρακτήρων
Εάν θέλετε να χρησιμοποιήσετε έναν ειδικό χαρακτήρα ως κυριολεκτικό (μη ειδικό), πρέπει να το πείτε στο κέλυφος του Bash. Αυτό ονομάζεται παράθεση και υπάρχουν τρεις τρόποι για να το κάνετε.
Εάν εσωκλείσετε το κείμενο σε εισαγωγικά (“…”), αυτό εμποδίζει τον Bash να ενεργήσει στους περισσότερους από τους ειδικούς χαρακτήρες και απλώς εκτυπώνουν. Μια αξιοσημείωτη εξαίρεση, ωστόσο, είναι το σύμβολο του δολαρίου ($). Εξακολουθεί να λειτουργεί ως χαρακτήρας για εκφράσεις μεταβλητών, ώστε να μπορείτε να συμπεριλάβετε τις τιμές από τις μεταβλητές στην έξοδο σας.
echo "Today is $(date)"Για παράδειγμα, αυτή η εντολή εκτυπώνει την ημερομηνία και την ώρα:
echo 'Today is $(date)'Εάν περικλείσετε το κείμενο σε μονά εισαγωγικά ('…') όπως φαίνεται παρακάτω, διακόπτεται η λειτουργία όλων των ειδικών χαρακτήρων:
echo "Today is $(date)"Μπορείτε να χρησιμοποιήσετε μια ανάστροφη κάθετο ( ) για να αποτρέψετε τη λειτουργία του παρακάτω χαρακτήρα ως ειδικού χαρακτήρα. Αυτό ονομάζεται «διαφυγή» του χαρακτήρα. δείτε το παρακάτω παράδειγμα:
Απλώς σκεφτείτε τους ειδικούς χαρακτήρες ως πολύ σύντομες εντολές. Εάν απομνημονεύσετε τις χρήσεις τους, μπορεί να ωφελήσει πάρα πολύ την κατανόησή σας για το κέλυφος του Bash —και τα σενάρια άλλων ανθρώπων—.