12 KiB
Meta
Αντικείμενο:
- Αυτός ο οδηγός απευθύνεται τόσο σε αρχάριους όσο και σε έμπειρους. Οι στόχοι είναι το εύρος (ό,τι είναι σημαντικό), η ακρίβεια (να δοθούν συγκεκριμένα παραδείγματα για τις συνηθέστερες περιπτώσεις), και η συντομία (να αποφευχθούν πράγματα που δεν είναι αναγκαία ή παρεκβάσεις που μπορεί κανείς εύκολα να αναζητήσει αλλού). Κάθε συμβουλή είναι απαραίτητη σε κάποια περίπτωση ή εξοικονομεί χρόνο σε σημαντικό βαθμό σε σύγκριση με εναλλακτικές.
- Το παρόν είναι γραμμένο για Linux, με εξαίρεση του τμήματος "Μόνο για OS X". Πολλά από τα υπόλοιπα κομμάτια ισχύουν ή μπορούν να εγκατασταθούν σε άλλα Unices ή OS X (ή ακόμη και Cygwin).
- Εστιάζεται στον διαδραστικό φλοιό Bash, αν και πολλές συμβουλές ισχύουν και για άλλους φλοιούς και γενικότερα στη συγγραφή scripts για Bash.
- Περιλαμβάνει τόσο τις "τυπικές" εντολές Unix καθώς και άλλες που απαιτούν την εγκατάσταση ειδικών πακέτων λογισμικού -- αρκεί να είναι αρκετά σημαντικές ώστε να αξίζει να περιληφθούν.
Σημειώσεις:
- Για να κρατηθεί το παρόν σε μία σελίδα, το περιεχόμενο περιλαμβάνεται έμμεσα κάνοντας αναφορά σε αυτό. Είστε αρκετά έξυπνοι ώστε να αναζητήσετε περαιτέρω λεπτομέρειες αλλού μόλις καταλάβετε την ιδέα ή την εντολή που χρειάζεται να αναζητήσετε στο Google. Χρησιμοποιήστε
apt-get
/yum
/dnf
/pacman
/pip
/brew
(ανάλογα με την περίπτωση) για να εγκαταστήσετε νέα προγράμματα. - Χρησιμοποιήστε Explainshell για να έχετε μια χρήσιμη ανάλυση του τι κάνουν κάνουν εντολές, επιλογές, σωληνώσεις κλπ.
Τα βασικά
-
Μάθετε τα βασικά του φλοιού Bash. Πράγματι, πληκτρολογήστε
man bash
και τουλάχιστον ρίξτε μια ματιά σε αυτό που εμφανίζεται· είναι αρκετά εύκολο να το ακολουθήσετε κι όχι και τόσο μεγάλο. Άλλοι φλοιοί μπορεί να είναι μια χαρά, αλλά ο φλοιός Bash έχει πολλές δυνατότητες και είναι πάντα διαθέσιμος (το να μάθετε μόνο zsh, fish κλπ., αν και δελεαστικό στο δικό σας laptop, σας περιορίζει σε πολλές περιπτώσεις, όπως στην περίπτωση servers που ήδη υπάρχουν). -
Μάθετε τουλάχιστον έναν text-based επεξεργαστή κειμένου καλά. Ιδανικά τον Vim (
vi
), καθώς στην πραγματικότητα δεν υπάρχει ανταγωνισμός όσον αφορά την τυχαία επεξεργασία κειμένου σε τερματικό (ακόμη κι αν χρησιμοποιείτε Emacs, ένα μεγάλο IDE, ή κάποιον σύγχρονο μοδάτο επεξεργαστή κειμένου τον περισσότερο χρόνο). -
Να γνωρίζετε πως να διαβάζετε τεκμηρίωση με την εντολή
man
(για τον περίεργο, ηman man
εμφανίζει σε λίστα τους αριθμούς των ενοτήτων, π.χ. το 1 είναι "απλές" εντολές, το 5 αρχεία/συμβάσεις και το 8 είναι για διαχείριση). Αναζητήστε man σελίδες με την εντολήapropos
. Να γνωρίζετε ότι μερικές εντολές δεν είναι εκτελέσιμες αλλά ενσωματωμένες στον Bash και μπορείτε να ζητήσετε βοήθεια σχετικά με αυτές μεhelp
καιhelp -d
. -
Μάθετε για την ανακατεύθυνση της εξόδου και της εισόδου με χρήση των τελεστών
>
και<
και για τις σωληνώσεις εντολών με χρήση του|
. Να γνωρίζετε ότι ο τελεστής>
αντικαθιστά το αρχείο εξόδου και ο>>
προσθέτει στο τέλος του αρχείου. Μάθετε για τα stdout και stderr. -
Μάθετε για την επέκταση αρχείων glob με
*
(και ίσως του?
και[
...]
) και τη χρήση εισαγωγικών και τη διαφορά ανάμεσα στα διπλά"
και τα μονά'
εισαγωγικά. (Δείτε περισσότερα για την επέκταση μεταβλητών παρακάτω.) -
Εξοικειωθείτε με τη διαχείριση εργασιών στον Bash:
&
, ctrl-z, ctrl-c,jobs
,fg
,bg
,kill
κλπ. -
Να γνωρίζετε την εντολή
ssh
και τα βασικά της αυθεντικοποίησης χωρίς κωδικό με χρήση τωνssh-agent
,ssh-add
κλπ. -
Βασική διαχείριση αρχείων:
ls
καιls -l
(συγκεκριμένα, μάθετε τι σημαίνει κάθε στήλη τηςls -l
),less
,head
,tail
καιtail -f
(ή ακόμη καλύτερα,less +F
),ln
καιln -s
(μάθετε τις διαφορές και τα πλεονεκτήματα των κανονικών συνδέσμων σε σύγκριση με τους συμβολικούς),chown
,chmod
,du
(για μία γρήγορη περίληψη της χρήσης του δίσκου:du -hs *
). Για διαχείριση του συστήματος αρχείων,df
,mount
,fdisk
,mkfs
,lsblk
. Μάθετε τι είναι inode (ls -i
ήdf -i
). -
Βασική διαχείριση δικτύου:
ip
ήifconfig
,dig
. -
Μάθετε και χρησιμοποιήστε ένα σύστημα διαχείρισης και ελέγχου εκδόσεων, όπως το
git
. -
Να γνωρίζετε καλά κανονικές εκφράσεις και τις διάφορες επιλογές (flags) για τις
grep
/egrep
. Τις επιλογές-i
,-o
,-v
,-A
,-B
, και-C
αξίζει να τις γνωρίζετε. -
Μάθετε να χρησιμοποιείτε τις
apt-get
,yum
,dnf
ήpacman
(ανάλογα με τη διανομή) για να βρίσκετε και εγκαθιστάτε πακέτα λογισμικού. Και βεβαιωθείτε ότι έχετε τηνpip
για να εγκαθιστάτε εργαλεία της γραμμής εντολών που βασίζονται σε Python (μερικά από τα παρακάτω είναι πιο εύκολο να εγκατασταθούν μεpip
).
Εντολές σε μία γραμμή
Μερικά παραδείγματα σωλήνωσης εντολών:
- Είναι εξαιρετικά βοηθητικό ορισμένες φορές το γεγονός ότι μπορείτε να εφαρμόσετε τις πράξεις της τομής, της ένωσης και της διαφοράς σε αρχεία κειμένου με τις εντολές
sort
/uniq
. Έστωσανa
καιb
αρχεία κείμενου που καμία γραμμή τους δεν επαναλαμβάνεται. Αυτό είναι γρήγορο και δουλεύει σε αρχεία οποιουδήποτε μεγέθους έως πολλά gigabytes. (H Sort δεν περιορίζεται από τη μνήμη, αν και ίσως χρειαστεί να χρησιμοποιήσετε την επιλογή-T
, αν ο/tmp
βρίσκεται σε μικρό root διαμέρισμα. Επίσης, δείτε την παρατήρηση παραπάνω για τη μεταβλητήLC_ALL
και την επιλογή-u
της εντολήςsort
(παραλείπεται παρακάτω ώστε να είναι πιο ξεκάθαρο το παράδειγμα).
cat a b | sort | uniq > c # c is a union b
cat a b | sort | uniq -d > c # c is a intersect b
cat a b b | sort | uniq -u > c # c is set difference a - b
-
Χρησιμοποιήστε
grep . *
για να εξετάσετε γρήγορα το περιεχόμενο όλων των αρχείων ενός καταλόγου (έτσι κάθε γραμμή αρχείου εμφανίζεται σε ζεύγος με το όνομα του αρχείου), ήhead -100 *
(έτσι κάθε αρχείο έχει μια κεφαλίδα). Αυτό μπορεί να είναι χρήσιμο για καταλόγους γεμάτους με αρχεία ρυθμίσεων όπως αυτά στους καταλόγους/sys
,/proc
,/etc
. -
Η άθροιση όλων των αριθμών στην τρίτη στήλη ενός αρχείου κειμένου (αυτό είναι μάλλον 3X γρηγορότερο και απαιτεί 3X λιγότερο κώδικα από την αντίστοιχη υλοποίηση σε Python):
awk '{ x += $3 } END { print x }' myfile
- Για να δείτε μεγέθη/ημερομηνίες σε ένα δέντρο αρχείων, η παρακάτω είναι σα μια αναδρομική
ls -l
, αλλά είναι πιο ευανάγνωστη απόls -lR
:
find . -type f -ls
- Έστω ότι έχετε ένα αρχείο κειμένου, όπως log ενός web server και μία συγκεκριμένη τιμή που εμφανίζεται σε μερικές γραμμές, όπως μία παράμετρος
acct_id
που εμφανίζεται στο URL. Αν θέλετε μια καταμέτρηση του πόσα αιτήματα έγιναν για κάθεacct_id
:
cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn
-
Για να παρακολουθείτε συνεχώς αλλαγές, χρησιμοποιήστε
watch
, π.χ. ελέγξτε αλλαγές σε αρχεία ενός καταλόγου μεwatch -d -n 2 'ls -rtlh | tail'
ή σε ρυθμίσεις δικτύου ενώ επιδιορθώνετε τις ρυθμίσεις wifi μεwatch -d -n 2 ifconfig
. -
Εκτελέστε αυτή τη μέθοδο για να πάρετε μια τυχαία συμβουλή από αυτό το έγγραφο (αναλύει Markdown και εξάγει ένα στοιχείο):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" |
xmlstarlet unesc | fmt -80
}