Απλές χρηστικές ερωτήσεις περί Linux

Rakeesh

RetroDB Feeder
Joined
10 Δεκ 2007
Μηνύματα
4.578
Αντιδράσεις
1.703
Εδω και χρονια που ψιλοασχολουμαι με το Λινουξ εβρισκα παντα χαοτικο το directory tree. Δεν μπορουσα να καταλαβω που αποσκοπει το /lib, το /var/lib, το /usr/lib και παει λεγοντας. Εκει που ενα προγραμμα στη μια διανομη ηταν στο /bin, σε μια αλλη διανομη μπορει να ηταν πχ. στο /sbin ή στο /usr/share/bin. Ισως αν ασχολιομουν περισσοτερο μπορει να εβρισκα νοημα, αλλα εχω διαβασει οτι ηδη αυτο αποτελει ενα ζητημα που προκαλει ασυμβατοτητα μεταξυ διανομων.

Σιγουρα ομως πιστευω οτι οι χρηστες εχουν καταληξει σε καποιες χρηστικες μεθοδους. Για παραδειγμα εχω διαβασει οτι πλεον το /usr/share/bin ειναι το προτεινομενο target οταν μεταγλωττιζουμε προγραμματα (αν και δεν αποτελει καποιο στανταρ).

Θελω λοιπον να ρωτησω. Οταν δουλευετε Λινουξ, ποιος ειναι ο... χμ... προτεινομενος τροπος να αποθηκευετε και να εγκαθιστατε τα υπαρχοντα σας; Οταν μεταγλωττιζω ενα προγραμμα ειπαμε θα το βαλω στο /usr/share/bin. Αμα γραψω ενα εκτελεσιμο σκριπτακι, που ειναι το καλυτερο μερος να το βαλω; Παλι στο /usr/share/bin; η μηπως στο home dir;

Τελος υπαρχει και το θεμα portability. Οταν εργαζομαι σε περισσοτερους απο ενα υπολογιστη, εστω οτι συγχρονιζω το home dir και στα δυο. Τι γινεται ομως με τα προγραμματα και τα scripts και τα λοιπα config files; Οποτε ποιος ειναι ο rule of thumb που λεει σε ποια συγκεκριμενα dirs δουλευουμε ωστε να χρειαζεται να συγχρονιζουμε μονο αυτα (και οχι ολοκληρο το συστημα);
 
Καταρχήν, έχεις μπερδευτεί. Δεν υπάρχει /usr/share/bin. Αν υπάρχει κάτι τέτοιο στο σύστημά σου θα το θεωρούσα πολύ παράξενο και πιθανόν να το έχεις φτιάξει εσύ ο ίδιος.

Μια σύντομη περιγραφή του τι είναι ο κάθε κατάλογος είναι εδώ: http://www.thegeekstuff.com/2010/09/linux-file-system-structure/

Από εκεί και πέρα, οι πλέον συνηθισμένες τοποθεσίες για εκτελέσιμα είναι οι /bin, /usr/bin, /usr/local/bin και τα αντίστοιχα /sbin, /usr/sbin και /usr/local/sbin.

* Τα bin αναφέρονται σε εκτελέσιμα διαθέσιμα σε όλους τους χρήστες.

* Τα sbin αναφέρονται σε εκτελέσιμα που έχουν τα δικαιώματα να τα εκτελέσουν μόνο όσοι έχουν δικαιώματα υπερχρήστη (είτε ως χρήστης root μέσω su είτε μέσω sudo). Ας τους πούμε "διαχειριστές".

* Ότι βρίσκεται μέσα στο /bin ή το /sbin θεωρούνται εκτελέσιμα που πρέπει να είναι διαθέσιμα στο λειτουργικό σύστημα πολύ νωρίς κατά τη διάρκεια της εκκίνησης, ουσιαστικά αμέσως και πρόκειται μόνο για τα βασικά εργαλεία του λειτουργικού συστήματος, όπως πχ η εντολή mount.

* Ότι βρίσκεται στο /usr/bin ή το /usr/sbin είναι εκτελέσιμα που δεν χρειάζεται να είναι άμεσα διαθέσιμα, όπως πχ ο browser σου (το /usr μπορεί να είναι άλλο partition ή άλλος σκληρός ή ακόμα και network mount σε άλλο σύστημα).

* Ότι βρίσκεται στο /usr/local είναι δημιούργημα του ίδιου του χρήστη (ή καλύτερα του "διαχειριστή"). Φυσικά είναι διαθέσιμο σε όλους τους χρήστες όπως και σε όλες τις προηγούμενες περιπτώσεις.

* Μπορείς φυσικά να βάλεις εκτελέσιμα όπου αλλού θέλεις, αρκεί να προσθέσεις την τοποθεσία αυτή στο $PATH σου. Πολλοί μπορεί να έχουν στο /home τους κάποια κάτω από το ~/bin. Αυτά είναι σίγουρα εκτελέσιμα του ίδιου του χρήστη και οι άλλοι χρήστες δεν έχουν πρόσβαση σε αυτά (εκτός κι αν τους τη δώσεις). Αυτό το τελευταίο καταλαβαίνεις ότι δεν είναι κάτι standard, ο καθένας μπορείς να κάνει ότι του κατέβει.

Επίσημα πακέτα κανονικά δεν πρέπει σε καμία περίπτωση να τοποθετούν οτιδήποτε μέσα στο /usr/local. Αλλά δυστυχώς υπάρχουν αρκετές διανομές (κάποιες ιδιαίτερα δημοφιλείς) που δεν ακολουθούν κανένα κανόνα και τα κάνουν όλα μακαρονάδα.

Άρα η απάντηση στο που να βάλεις τα δικά σου scripts είναι είτε στο /usr/local/bin (αν θέλεις να είναι διαθέσιμα systemwide) ή πχ στο ~/bin (αν τα θέλεις μόνο για το χρήστη σου).

Όσο για το συγχρονισμό, ποτέ μα ποτέ δεν πρέπει να συγχρονίζεις οτιδήποτε εκτός του /home σου. Η ενημέρωση των αρχείων συστήματος είναι δουλειά του package management, όχι δικιά σου. Το /usr/local, αν η διανομή σου δεν κάνει το λάθος να το χρησιμοποιεί, μπορεί να συγχρονιστεί επίσης. Τα αρχεία ρυθμίσεων του χρήστη σου είναι μέσα στο /home και δεν χρειάζεται να τα αντιμετωπίζεις διαφορετικά. Πρόσεξε μόνο γιατί μπορεί να υπάρχουν ασυμβατότητες να στα διαφορετικά PC τρέχεις διαφορετικές εκδόσεις των ίδιων προγραμμάτων. Αρχεία ρυθμίσεων για το σύστημα ολόκληρο περιέχονται στο /etc (και αντίστοιχα στο /usr/local/etc για εφαρμογές που έχεις εγκαταστήσεις εκτός package management -- σπάνιο). Αυτά έχουν να κάνουν με ολόκληρο το σύστημα και όχι τον κάθε χρήστη χωριστά.
 
Ευχαρισω για την αναλυτικη απαντηση. Φαινεται ειχα μπερδευτει καπως γιατι οπως ειπες καποιες διανομες τα εχουν κανει μακαροναδα. :)
 
Εχω μια αλλη απορια οσον αφορα τις source βιβλιοθηκες. Δεν εννοω αυτες που ειναι απαραιτητες για να τρεξουν καποια προγραμματα (φανταζομαι λεγονται runtime libraries) αλλα αυτες που χρειαζονται για να γινει compile ενα προγραμμα. Αυτες συγκεντρωνονται σε συγκεκριμενο φακελο;

Καμια φορα χρειαζεται για την εγκατασταση παοου προγραμματος να κατεβασω ενα σκασμο απο βιβλιοθηκες, οι οποιες κατα τα αλλα πιανουν αχρηστο χωρο. Λεω λοιπον να μεταφερω αυτο το φακελο σε εξωτερικο σκληρο, και να το κανω Mount μονο οταν χρειαζεται να κανω compile.
 
Ο χώρος αυτός είναι ελάχιστος και είναι κομμάτι άκυρο που κάποιες διανομές έχουν χωριστά -dev πακέτα. Μιλάμε το πολύ για κάποια KB ανά πακέτο. Δεν αξίζει καν να ασχοληθείς.

Ενημερωτικά είναι μέσα στο /usr/include.
 
Rakeesh είπε:
Εχω μια αλλη απορια οσον αφορα τις source βιβλιοθηκες. Δεν εννοω αυτες που ειναι απαραιτητες για να τρεξουν καποια προγραμματα (φανταζομαι λεγονται runtime libraries) αλλα αυτες που χρειαζονται για να γινει compile ενα προγραμμα. Αυτες συγκεντρωνονται σε συγκεκριμενο φακελο;
Καμια φορα χρειαζεται για την εγκατασταση παοου προγραμματος να κατεβασω ενα σκασμο απο βιβλιοθηκες, οι οποιες κατα τα αλλα πιανουν αχρηστο χωρο. Λεω λοιπον να μεταφερω αυτο το φακελο σε εξωτερικο σκληρο, και να το κανω Mount μονο οταν χρειαζεται να κανω compile.
Ποιός ο λόγος που θες να κάνεις compile το software, για εξάσκηση ή για κάτι άλλο;
 
Βρισκω που και που προγραμματακια που δεν τα βρισκω σε πακετα. Τουλαχιστον στη δικη μου διανομη.

Και μιας και μπαινω στη διαδικασια, καποιες svn εκδοσεις
 
Τελευταία επεξεργασία από έναν συντονιστή:
Πίσω
Μπλουζα