Αναρτήθηκε από: ktogias | Μαρτίου 17, 2008

Εντοπίζοντας τα εκτελέσιμα αρχεία σε ένα σύστημα linux

Από 04/02/2010 το ktogias blog έχει μεταφερθεί  στο blog.ktogias.gr . Για να δείτε ενημερώσεις και νέα σχόλια και να σχολιάσετε αυτό το άρθρο χρησιμοποιήστε τη διεύθυνση: http://blog.ktogias.gr/2008/03/17/where-are-the-executable-files-in-a-linux-system/

Αφορμή γι’ αυτό το post είναι μια ερώτηση που έγινε πρόσφατα στη λίστα ηλ. ταχυδρομείου lgu. Αρκετές από τις απορίες που γεννιόνται στα πρώτα στάδια της επαφής κάποιου με το linux σχετίζονται με την κατανόηση της δομής του συστήματος αρχείων, δηλαδή ποιο αρχείο βρίσκεται πού και τι περιέχει κάθε κατάλογος. Μια αρκετά συχνή απορία είναι η εξής:

Εγκατέστησα από το διαχειριστή πακέτων της διανομής μου, ή κάνοντας compile με ./configure, make και make install μια εφαρμογή. Που πήγε το εκτελέσιμό της; Ποιο είναι και που βρίσκεται το αρχείο που εκτελείται όταν τρέχω την εφαρμογή;

Αν κάποιος δεν σκοπεύει να ασχοληθεί σοβαρά με τη διαχείριση του συστήματος ή δεν ενδιαφέρεται να μάθει σε βάθος το λειτουργικό σύστημα, δεν θα χρειαστεί να ασχοληθεί με αυτή την ερώτηση. Στο 99% των περιπτώσεων κατά την εγκατάσταση μιας εφαρμογής με οποιοδήποτε τρόπο το πρόγραμμα εγκατάστασης αναλαμβάνει να αντιγράψει τα αρχεία της εφαρμογής σε προβλεπόμενες τοποθεσίες και να δημιουργήσει καταχωρήσεις στο μενού του γραφικού περιβάλλοντος, έτσι ώστε η εφαρμογή να είναι προσβάσιμη είτε με κλικ στο αντίστοιχο εικονίδιο στο μενού είτε από κονσόλα με απλή αναφορά στο όνομά της. Αν π.χ. εγκαταστήσαμε το πρόγραμμα xchat, μπορούμε να το εκτελέσουμε είτε εντοπίζοντας την αντίστοιχη καταχώριση στο μενού του gnome ή του kde (ή όποιου άλλου γραφικού περιβάλλοντος χρησιμοποιούμε) ή γράφοντας στο τερματικό απλά «xchat» και πατώντας enter, χωρίς να χρειάζεται να ξέρουμε που ακριβώς βρίσκεται το εκτελέσιμο αρχείο. Το σύστημα στην πρώτη περίπτωση μέσω της καταχώρησης στο μενού και στη δεύτερη συμβουλευόμενο τη μεταβλητή περιβάλλοντος $PATH θα εντοπίσει το εκτελέσιμο και θα το τρέξει.

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

echo $PATH

Στο ubuntu μου η παραπάνω εντολή επιστρέφει:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Οι κατάλογοι είναι χωρισμένοι με «:». Από την παραπάνω γραμμή καταλαβαίνουμε ότι το σύστημα ψάχνει για εκτελέσιμα με τη σειρά από αριστερά προς τα δεξιά στις εξής τοποθεσίες: /usr/local/sbin, /usr/local/bin, /usr/sbin, /usr/bin, /sbin, /bin και/usr/games.

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

  • Στο /bin αν πρόκειται για βασικές εφαρμογές-εντόλες του συστήματος.
  • Στο /sbin αν πρόκειται για βασικές εφαρμογές-εντολές που η χρήση τους σχετίζεται με τη διαχείριση του συστήματος.
  • Στο /usr/bin αν πρόκειται για εκτελέσιμα προγραμμάτων που ανήκουν στη διανομή και έχουν εγκατασταθεί μέσω αντίστοιχου πακέτου.
  • Στο /usr/sbin αν πρόκειται για εκτελέσιμα μη βασικών προγραμμάτων που ανήκουν στη διανομή και η χρήση τους σχετίζεται με τη διαχείριση του συστήματος.
  • Στο /usr/local/bin αν πρόκειται για εφαρμογές που δεν ανήκουν στη διανομή και έχουν εγκατασταθεί πρόσθετα στο σύστημα με μεθόδους που δεν υποστηρίζει ο διαχειριστής πακέτων της διανομής (π.χ. compile από κώδικα, εγκατάσταση binary μορφής προγράμματος που δεν προέρχεται από τη διανομή)
  • Στο /opt βάζουν καμιά φορά τα εκτελέσιμα και άλλα αρχεία τους προγράμματα που κατεβάζεις σε binary μορφη και τα εγκαθιστάς με κάποιο ./install εκτελέσιμο.
  • Στο ~/bin του κάθε χρήστη μπορεί να υπάρχουν (ανάλογα με τις ρυθμίσεις του συστήματος) εκτελέσιμα εφαρμογών που έχει εγκαταστήσει ο χρήστης μόνο στο λογαριασμό του και όχι system-wide.

Οι παραπάνω κανόνες δεν είναι απόλυτοι και μπορεί να υπάρχουν μικροδαφορές από διανομή σε διανομή ή να έχουν παρακαμφθεί ή αλλοιωθεί από το διαχειριστή του συστήματος (π.χ. τίποτα δεν εμποδίζει κάποιον να κάνει install από κώδικα μια εφαρμογή που δεν διατίθεται από τη διανομή του, και να πει στο install script να αντιγράψει τα εκτελέσιμα στο /usr/bin (ή οπουδήποτε αλλού) και όχι στο /user/local/bin που θα έπρεπε σύμφωνα με τον παραπάνω κανόνα να μπουν).

Πολλές φορές είναι χρήσιμο να μπορέσουμε να εντοπίσουμε το εκτελέσιμο μιας εφαρμογής ξέροντας το όνομα κλήσης της. Αυτό γίνεται με την εντολή «which» (από το τερματικό). πχ:


$ which firefox
/usr/bin/firefox

$ which mount
/bin/mount

$ which fsck
/sbin/fsck

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

linux filesystem structure

Ενημέρωση-επέκταση (19/03/2007):

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

Αν τρέχουμε την εφαρμογή από το μενού του γραφικού περιβάλλοντος και δεν ξέρουμε το ακριβές όνομα κλίσης της από την κονσόλα, τότε μπορούμε να μαντέψουμε. Το όνομα κλίσης των περισσότερων εφαρμογών είναι το όνομα της εφαρμογής. Π.χ. για να τρέξουμε το xchat απλά δίνουμε στην κονσόλα «xchat» (ακολουθούμενο από enter φυσικά). Με την ίδια λογική το εκτελέσιμο του gimp είναι ένα αρχείο με όνομα gimp (και τρέχει γράφοντας «gimp») κλπ.

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

editting gnome menu

Επίσης πολύ χρήσιμο σε περιπτώσεις που ξέρουμε ή φανταζόμαστε πως ξεκινά το όνομα κλήσης μιας εφαρμογής, αλλά δεν το πετύχαμε ακριβώς με την πρώτη, είναι το autocompletion του κελύφους του τερματικού. Έστω ότι πχ. ψάχνουμε για το εκτελέσιμο του googleearth και δεν καταφέραμε να το μαντέψουμε με την πρώτη. Γράφοντας στο τερματικό «goog» και πατώντας το πλήκτρο tab, το κέλυφος θα συμπληρώσει αυτόματα αυτό που γράψαμε με τα ονόματα εκτελέσιμων που αρχίζουν από «goog» . Αν αυτά είναι περισσότερα από ένα τότε ένα μπιπ θα μας πληροφορήσει ότι μπορούμε να δούμε μια λίστα με όσα εκτελέσιμα βρίσκονται στο $PATH και αρχίσζουν από «goog» πατώντας άλλη μια φορά το πλήκτρο tab.

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

locate earth

ανάμεσα σε αυτά που θα επιστρέψει η locate στο παράδειγμά μας (που ίσως είναι πάρα πολλά και θα πρέπει να τα φιλτράρετε με διασωλήνωση σε μια εφαρμογή όπως το grep για να βγάλετε άκρη) θα δείτε να αναφέρονται πλήθος αρχείων που η τοποθεσία ή το όνομά τους περιέχει το κείμενο «googleearth». Να μαντέψω; Μάλλον το εκτελέσιμο του google earth θα λέγεται κι αυτό googleearth. Πράγματι:


$ which googleearth


/usr/bin/googleearth

Advertisements

Σχολιάστε

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s

Kατηγορίες

Αρέσει σε %d bloggers: