Πώς να χρησιμοποιήσετε την εντολή που στο Linux

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

Δυαδικά και Μονοπάτια

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

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

Μπορείτε να χρησιμοποιήσετε το echo για να ελέγξετε τη μεταβλητή περιβάλλοντος $PATH και να δείτε τους καταλόγους στη διαδρομή σας. Για να το κάνετε αυτό, πληκτρολογήστε τα εξής και μετά πατήστε Enter:

echo $PATH

ο

Η λίστα εξόδου διαχωρίζει κάθε διαδρομή με άνω και κάτω τελείες (:). Στον υπολογιστή που χρησιμοποιούμε, το Bash θα πραγματοποιήσει αναζήτηση στους ακόλουθους καταλόγους με αυτήν τη σειρά:

  Οι 6 καλύτερες προσθήκες συνομιλίας Pidgin για χρήστες Linux

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/αποθήκη
/χρήστης/παιχνίδια
/usr/local/games
/snap/bin

Υπάρχουν πολλοί φάκελοι που ονομάζονται /sbin και /bin στο σύστημα αρχείων, κάτι που μπορεί να οδηγήσει σε κάποια σύγχυση.

Παρακολουθήστε αυτά τα μονοπάτια

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

./htg

ο

Δεν είναι πολύ πρόγραμμα—απλώς εκτυπώνει τον αριθμό έκδοσης και μετά κλείνει. Η νέα έκδοση είναι 1.2.138.

Για να εκτελέσετε ένα πρόγραμμα στον τρέχοντα κατάλογο εργασίας, πρέπει να πληκτρολογήσετε “./” μπροστά από το όνομα του προγράμματος, ώστε ο Bash να ξέρει πού να το βρει.

Επειδή θέλουμε να εκτελέσουμε αυτό το συγκεκριμένο πρόγραμμα από οποιονδήποτε κατάλογο, θα μετακινήσουμε το εκτελέσιμο στον κατάλογο /usr/bin. Ο Bash θα βρει αυτό το πρόγραμμα στη διαδρομή και θα το εκτελέσει για εμάς.

Δεν χρειαζόμαστε το εκτελέσιμο αρχείο στον τρέχοντα κατάλογο μας, ούτε χρειάζεται να πληκτρολογήσουμε “./” μπροστά από το όνομα του προγράμματος, όπως φαίνεται παρακάτω:

sudo mv htg /usr/bin

ο

Τώρα, ας προσπαθήσουμε να εκτελέσουμε το πρόγραμμα πληκτρολογώντας:

htg

ο

Κάτι τρέχει, αλλά δεν είναι το νέο, ενημερωμένο μας πρόγραμμα. Μάλλον, είναι η παλαιότερη έκδοση, 1.2.105.

Η οποία Εντολή

Το ζήτημα που δείξαμε παραπάνω είναι γιατί η εντολή ποια σχεδιάστηκε.

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

which htg

ο

που αναφέρει ότι βρέθηκε μια έκδοση του htg στον κατάλογο /usr/local/bin. Επειδή αυτή η τοποθεσία εμφανίζεται στη διαδρομή πριν από τον κατάλογο στον οποίο μετακινήσαμε το ενημερωμένο htg, το Bash χρησιμοποιεί αυτήν την προηγούμενη έκδοση του προγράμματος.

  Χρησιμοποιήστε το Manuskript για να οργανώσετε τα γραπτά σας έργα στο Linux

Ωστόσο, αν χρησιμοποιήσουμε την επιλογή -a (όλα) όπως φαίνεται παρακάτω, η οποία συνεχίζει την αναζήτηση ακόμα κι αν βρει ταίριασμα:

which -a htg

ο

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

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

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

/usr/local/bin/htg
/usr/bin/htg

Αυτό εξηγεί το πρόβλημα και η λύση είναι απλή.

Στην πραγματικότητα, έχουμε επιλογές. Μπορούμε είτε να διαγράψουμε την παλιά έκδοση στον κατάλογο /use/local/bin είτε να την μετακινήσουμε από το /usr/bin στο /usr/local/bin.

Παρακολουθήστε αυτά τα αποτελέσματα

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

Ας δούμε ένα παράδειγμα στο οποίο θα χρησιμοποιήσουμε την εντολή who με την επιλογή -a (all) και θα αναζητήσουμε εκδόσεις του προγράμματος less:

which -a less

ο

που αναφέρει δύο τοποθεσίες που φιλοξενούν μια έκδοση του λιγότερου προγράμματος, αλλά είναι αλήθεια; Θα ήταν περίεργο να υπάρχουν δύο διαφορετικές εκδόσεις (ή η ίδια έκδοση σε πολλές τοποθεσίες) λιγότερων εγκατεστημένων σε έναν υπολογιστή Linux. Έτσι, δεν πρόκειται να δεχτούμε την έξοδο από την οποία. Αντίθετα, ας σκάψουμε λίγο πιο βαθιά.

Μπορούμε να χρησιμοποιήσουμε τις επιλογές ls, -l (μεγάλη λίστα) και -h (αναγνώσιμη από τον άνθρωπο) για να δούμε τι συμβαίνει:

ls -lh /usr/bin/less

ο

Το μέγεθος του αρχείου αναφέρεται ως εννέα byte! Αυτό σίγουρα δεν είναι ένα πλήρες αντίγραφο των λιγότερων.

  Πώς να εγκαταστήσετε το Upterm σε Linux

Ο πρώτος χαρακτήρας της καταχώρισης είναι “l”. Ένα κανονικό αρχείο θα έχει μια παύλα (-) ως πρώτο χαρακτήρα. Το “l” είναι ένα σύμβολο που σημαίνει συμβολικό σύνδεσμο. Εάν χάσατε αυτή τη λεπτομέρεια, το σύμβολο –> υποδεικνύει επίσης ότι είναι α συμβολικός σύνδεσμος, το οποίο μπορείτε να σκεφτείτε ως ένα είδος συντόμευσης. Αυτό δείχνει το αντίγραφο του less στο /bin.

Ας προσπαθήσουμε ξανά με την έκδοση του less στο /bin:

ls -lh /bin/less

ο

Αυτή η καταχώρηση είναι προφανώς ένα “πραγματικό” δυαδικό εκτελέσιμο. Ο πρώτος χαρακτήρας της καταχώρισης είναι μια παύλα (-), που σημαίνει ότι είναι ένα κανονικό αρχείο και το μέγεθος του αρχείου είναι 167 KB. Έτσι, είναι εγκατεστημένο μόνο ένα αντίγραφο των λιγότερων, αλλά υπάρχει ένας συμβολικός σύνδεσμος προς αυτό από έναν άλλο κατάλογο, τον οποίο βρίσκει και ο Bash όταν αναζητά τη διαδρομή.

Έλεγχος πολλαπλών εντολών ταυτόχρονα

Μπορείτε να περάσετε πολλά προγράμματα και εντολές στα οποία, και θα τα ελέγξει με τη σειρά.

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

which ping cat uptime date head

ο

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

Ποιο ποιο είναι ποιο;

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

which which

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

Μπορείτε να χρησιμοποιήσετε ποια σε αυτές τις περιπτώσεις για να επαληθεύσετε ότι η εντολή που εκκινεί το Bash είναι αυτή που θέλετε να χρησιμοποιήσετε.