Linux & το Terminal
    Το Μαύρο Κουτί: Terminal & Shell
    Filesystem & Paths
    Permissions & Root
    Linux cheatsheet: οι βασικές εντολές

Linux cheatsheet: οι βασικές εντολές

Άνοιξε δέκα αγγελίες για junior developer και μέτρα πόσες γράφουν «γνώσεις Linux», «εμπειρία με Linux» ή «άνεση στο command line». Θα το βρεις σε πολλές από αυτές, ακόμα και σε θέσεις Backend, γιατί σχεδόν κάθε server στο production τρέχει Linux. Αυτό το Linux cheatsheet μαζεύει σε μία σελίδα τις βασικές εντολές Linux του κεφαλαίου, τα λάθη που κάνουν οι junior τις πρώτες εβδομάδες και τις ερωτήσεις που θα ακούσεις σε interview.
Διάβασέ το το βράδυ πριν από μια συνέντευξη. Κράτα το ανοιχτό σε ένα tab τις πρώτες μέρες στη δουλειά, όταν κάνεις SSH σε έναν server και βλέπεις μόνο ένα prompt που αναβοσβήνει. Κάθε ενότητα σε στέλνει στο μάθημα με την πλήρη εξήγηση.

Ο χάρτης του κεφαλαίου

Ο interviewer δε θέλει να ακούσει μια λίστα με εντολές. Θέλει να δει ότι ξέρεις τη σειρά: πρώτα κινείσαι στο filesystem και βρίσκεις αρχεία, μετά ελέγχεις permissions, processes και logs. Στο τέλος στήνεις ένα service όπως ο nginx, με το sudo και το apt. Με την ίδια σειρά θα δουλέψεις και την πρώτη σου μέρα σε έναν άγνωστο server, οπότε ο χάρτης είναι και το πλάνο σου για τότε.
Ο χάρτης του Linux και του terminal Τρία στάδια. Κινείσαι: terminal και shell, filesystem και paths, αρχεία. Ελέγχεις: permissions, processes, pipes και αναζήτηση. Στήνεις: nano και sed, apt, services. Το sudo από τα permissions χρειάζεται για το apt και ένα service είναι ένα process που τρέχει μόνιμα. ΚΙΝΕΙΣΑΙ ΕΛΕΓΧΕΙΣ ΣΤΗΝΕΙΣ Terminal & Shell prompt, --help, man Filesystem & paths pwd, ls, cd Αρχεία cp, mv, rm, less Permissions chmod, chown, sudo Processes top, ps, kill Pipes & αναζήτηση |, grep, find, > nano & sed Ctrl+O, sed -i apt update, install Services restart, status sudo 24/7
Πρώτα μαθαίνεις να κινείσαι, μετά να ελέγχεις, στο τέλος να στήνεις ένα service.

Πού θα το συναντήσεις στη δουλειά

Τον πρώτο μήνα σε μια junior θέση, κανείς δε θα σου ζητήσει κάτι από την εξεταστική. Θα σου πουν «ο server είναι αργός» ή «το deploy script δεν τρέχει, γράφει Permission denied» και θα κοιτάξουν αν ξέρεις από πού να ξεκινήσεις. Ο πίνακας έχει τις πιο συχνές τέτοιες στιγμές, την πρώτη εντολή που τρέχεις και το μάθημα που την εξηγεί.
Στη δουλειάΤι τρέχειςΜάθημα
SSH σε server, δεν ξέρεις πού είσαιpwd, ls -la, cdFilesystem & Paths
Script με Permission deniedls -l, μετά chmod +xPermissions & Root
Server στο 100% CPUtop, kill <PID>Processes
Τι έγινε στις 14:32grep "14:32" app.logPipes, Redirection & Αναζήτηση
Errors live, τη στιγμή που γράφονταιtail -f app.log | grep errorPipes, Redirection & Αναζήτηση
Typo στο nginx configsudo sed -i 's/proxy_pas/proxy_pass/'sed: Επεξεργασία με script
Λείπει ένα εργαλείοsudo apt update, sudo apt installapt & Package Management
Άλλαξες config, δεν έγινε τίποταsystemctl restart nginxServices & nginx
Πρόσεξε ότι οι περισσότερες γραμμές ξεκινούν με μια εντολή που μόνο διαβάζει, όπως το ls -l, το top ή το grep. Αυτό θέλει να δει ένας senior, όταν ψάχνετε μαζί ένα πρόβλημα στον server: πρώτα καταλαβαίνεις τι συμβαίνει, μετά αλλάζεις κάτι. Αν ψάχνεις τι σημαίνει στην πράξη Linux για junior developer, είναι κυρίως αυτή η συνήθεια.

Πού βρίσκεσαι: filesystem και paths

Στο Linux δεν υπάρχουν δίσκοι C: και D:, όλα κρέμονται από ένα δέντρο με ρίζα το /. Τα configs είναι στο /etc, τα αρχεία των χρηστών στο /home, τα logs κάτω από το /var. Την πρώτη μέρα στη δουλειά θα ακούσεις «ρίξε μια ματιά στο config του nginx» και θα περιμένουν να φτάσεις εκεί με cd χωρίς να ρωτήσεις πού είναι. Τις εντολές πλοήγησης τις έχει αναλυτικά το δωρεάν μάθημα.
Το filesystem σαν δέντρο και οι δύο τρόποι να γράψεις ένα path Από τη ρίζα / ξεκινούν οι φάκελοι home, etc και var. Στο home ζει ο ioannis με τον φάκελο projects, στο etc το nginx, στο var το log. Το absolute path cd /home/ioannis/projects δουλεύει από παντού. Το relative cd projects δουλεύει μόνο αν βρίσκεσαι στο /home/ioannis. Συντομεύσεις: . εδώ, .. πάνω, ~ home. / η ρίζα home χρήστες etc ρυθμίσεις var δεδομένα ioannis ~ το home nginx config log τα logs projects ο στόχος ABSOLUTE cd /home/ioannis/projects Ξεκινά από /, δουλεύει παντού RELATIVE cd projects Μόνο αν pwd = /home/ioannis ΣΥΝΤΟΜΕΥΣΕΙΣ .εδώ..πάνω~home cd -ο προηγούμενος φάκελος
Ξεκινά με /; Είναι absolute. Αλλιώς εξαρτάται από το pwd σου.

Permissions: ποιος κάνει τι

Το Permission denied είναι από τα πρώτα errors που θα δεις στη δουλειά. Κάθε αρχείο έχει τρεις ομάδες δικαιωμάτων, για τον owner, το group και τους υπόλοιπους. Η καθεμία λέει αν μπορεί να διαβάσει, να γράψει ή να εκτελέσει. Στο interview το chmod 755 είναι από τις πιο συνηθισμένες ερωτήσεις, ενώ στη δουλειά ο junior που βάζει sudo μπροστά από όλα φαίνεται από την πρώτη εβδομάδα.
Από το -rwxr-xr-- στο chmod 754 Το -rwxr-xr-- χωρίζεται σε τύπο, owner, group και others. Με r ίσον 4, w ίσον 2 και x ίσον 1, ο owner rwx κάνει 7, το group r-x κάνει 5 και οι others r-- κάνουν 4, άρα chmod 754. Το chmod +x προσθέτει μόνο το execute. - rwx r-x r-- τύπος owner group others 4+2+1 = 7 4+0+1 = 5 4+0+0 = 4 chmod 754 script.sh r = 4readw = 2writex = 1execute -αρχείοdφάκελος-στη θέση γράμματος: όχι chmod +x script.shπρόσθεσε μόνο το execute
Τρία γράμματα ανά ομάδα, r=4, w=2, x=1, και προσθέτεις.

Pipes και redirection

Σε έναν production server δεν έχεις γραφικό περιβάλλον, έχεις logs με χιλιάδες γραμμές. Με το | το output μιας εντολής γίνεται input της επόμενης, οπότε τα grep και wc -l μαζί απαντούν στο «πόσα errors είχαμε σήμερα;» σε μία γραμμή. Το tail -f σού δείχνει τα errors τη στιγμή που γράφονται. Αυτό εννοεί μια αγγελία, όταν γράφει «troubleshooting σε Linux».
Pipes, redirection και live logs Το cat server.log περνάει με pipe στο grep ERROR, που κρατάει μόνο τα errors, και αυτό στο wc -l, που τα μετράει και δίνει έναν αριθμό. Το σύμβολο > γράφει σε αρχείο και αντικαθιστά ό,τι υπήρχε, το >> προσθέτει στο τέλος. Το tail -f app.log | grep error δείχνει live τις νέες γραμμές με error. cat server.log όλο το log grep ERROR μόνο τα errors wc -l μετράει γραμμές Πόσα errors; ένας αριθμός | | ΣΤΕΙΛΕ ΣΕ ΑΡΧΕΙΟ ls -l > files.txt Αντικαθιστά: το παλιό χάνεται echo "ok" >> log.txt Προσθέτει στο τέλος: ασφαλές LIVE LOGS tail -f app.log | grep error Κάθε νέο error μόλις γραφτεί, έξοδος με Ctrl+C
Μικρά εργαλεία στη σειρά απαντούν πραγματικές ερωτήσεις. Το > σβήνει, το >> προσθέτει.

Services: config, restart, έλεγχος

Ένα service είναι ένα πρόγραμμα που τρέχει συνέχεια στο background, όπως ο nginx που σερβίρει ένα site. Το εγκαθιστάς με apt, αλλάζεις το config στο /etc, κάνεις restart και ελέγχεις με status ότι τρέχει. Ένα από τα πρώτα tickets που θα σου δώσουν μπορεί να είναι ακριβώς αυτό: μια αλλαγή σε config που δεν έπιασε, επειδή κανείς δεν έκανε restart. Σε production το κάνεις με systemctl, στο lab με service.
Ο κύκλος ενός service: install, config, restart, status Τέσσερα βήματα: εγκαθιστάς τον nginx με sudo apt install, αλλάζεις το config στο /etc/nginx/ με nano ή sed -i, κάνεις restart για να διαβάσει το νέο config και ελέγχεις με status. Αν δεν τρέχει, γυρνάς στο config. Σε production server γράφεις systemctl restart nginx, στο Codespace του lab service nginx restart. Το sites-enabled/app.conf είναι symlink προς το sites-available/app.conf, δηλαδή ίδιο αρχείο. 1 ΕΓΚΑΤΑΣΤΑΣΗ apt install nginx με sudo 2 CONFIG /etc/nginx/ nano ή sed -i 3 RESTART restart nginx διαβάζει το νέο 4 ΕΛΕΓΧΟΣ status nginx τρέχει σωστά; Δεν τρέχει; Πίσω στο config PRODUCTION SERVER systemctl restart nginx CODESPACE ΤΟΥ LAB service nginx restart SYMLINK sites-enabled/app.conf sites-available/app.conf Ίδιο αρχείο, δύο μονοπάτια: το διορθώνεις στο sites-available
Ο nginx διαβάζει το config μόνο όταν ξεκινά, γι' αυτό κάθε αλλαγή θέλει restart.

Εντολές και όροι

Αυτές είναι οι βασικές εντολές Linux που θα περιμένουν να ξέρεις σε μια junior θέση, με μία γραμμή εξήγηση η καθεμία. Άνοιξε τον πίνακα πριν από ένα technical interview και δες αν μπορείς να εξηγήσεις κάθε γραμμή με δικά σου λόγια. Στη δουλειά θα σου χρειαστεί όταν θυμάσαι ότι υπάρχει μια εντολή, αλλά όχι το flag της.
Εντολή ή όροςΤι σημαίνειΜάθημα
pwd, ls -la, cdΠού είμαι, τι υπάρχει, πήγαινε αλλούFilesystem & Paths
rm -r, rm -iΣβήσιμο χωρίς undo, με επιβεβαίωσηΔιαχείριση Αρχείων
chmod +x, sudoΚάνε εκτελέσιμο, μία εντολή ως rootPermissions & Root
top, kill / kill -9Ποιος τρώει πόρους, κλείσ' τον ευγενικά / βίαιαProcesses
|, grepOutput στην επόμενη εντολή, ψάξε κείμενοPipes, Redirection & Αναζήτηση
> / >>Αντικατάσταση / προσθήκη στο τέλοςPipes, Redirection & Αναζήτηση
sed -i 's/παλιό/νέο/g'Αντικατάσταση απευθείας στο αρχείοsed: Επεξεργασία με script
systemctl / serviceServices σε production / στο labServices & nginx
Αν μια γραμμή δεν μπορείς να την εξηγήσεις, άνοιξε το μάθημα της τελευταίας στήλης. Για τα υπόλοιπα flags, κανείς στη δουλειά δε θα σε κρίνει επειδή άνοιξες το man, αρκεί να ξέρεις ότι υπάρχει.

Συνηθισμένα λάθη

Τα περισσότερα λάθη στο terminal δεν έχουν undo και δε σε ρωτάνε «είσαι σίγουρος;». Ένα rm με λάθος wildcard στον server της εταιρείας δεν κοστίζει έναν βαθμό στην εξεταστική, κοστίζει ώρες δουλειάς και μια δύσκολη κουβέντα με τον team lead σου. Διάβασε τον πίνακα πριν τρέξεις κάτι επικίνδυνο, όχι αφού το τρέξεις.
ΛάθοςΑντί γι' αυτόΜάθημα
cat σε τεράστιο logless ή grepΔιαχείριση Αρχείων
rm *.log στα τυφλάΠρώτα ls *.logΔιαχείριση Αρχείων
sudo από συνήθειαΔιάβασε το error, ls -lPermissions & Root
kill -9 πρώταΠρώτα σκέτο killProcesses
> αντί για >>>> για προσθήκηPipes, Redirection & Αναζήτηση
sed -i χωρίς δοκιμήΠρώτα χωρίς -ised: Επεξεργασία με script
Config χωρίς restartrestart το serviceServices & nginx
Κόλλησες στο man ή στο lessΠάτα qTerminal & Shell
Η ερώτηση «ποιο λάθος έχεις κάνει και τι έμαθες από αυτό;» ακούγεται συχνά σε interviews. Μια ειλικρινής απάντηση από αυτόν τον πίνακα, μαζί με τον κανόνα «πρώτα κοιτάς, μετά αλλάζεις», λέει πολύ περισσότερα για σένα από ένα «δεν έχω κάνει ποτέ λάθος».

Στο interview

Σε interview για junior θέση σε Backend ή DevOps, οι ερωτήσεις Linux σπάνια είναι δύσκολες. Ελέγχουν αν έχεις δουλέψει πραγματικά σε terminal και θέλουν σύντομη, σίγουρη απάντηση, όχι «νομίζω ότι είναι κάτι με...». Εδώ έχεις τις πιο πιθανές ερωτήσεις Linux σε interview με την απάντηση σε μία γραμμή, για να την πεις πρώτα και να την εξηγήσεις μετά, αν σε ρωτήσουν.
ΕρώτησηΣύντομη απάντησηΜάθημα
Terminal ή shell;Παράθυρο / πρόγραμμα που εκτελείTerminal & Shell
Absolute ή relative path;Από / / από εκεί που είσαιFilesystem & Paths
Permission denied;ls -l, chmod +x, όχι αυτόματο sudoPermissions & Root
chmod 755;r=4, w=2, x=1: 7, 5, 5Permissions & Root
kill ή kill -9;SIGTERM καθαρά / SIGKILL αμέσωςProcesses
Server στο 100% μνήμη;top, PID, killProcesses
Πόσα errors έχει ένα log;grep error app.log | wc -lPipes, Redirection & Αναζήτηση
Άλλαξες config, τίποτα;Restart: διαβάζεται μόνο στην εκκίνησηServices & nginx
Η σύντομη απάντηση ανοίγει την κουβέντα. Αυτό που σε ξεχωρίζει είναι ένα παράδειγμα από κάτι που έκανες ο ίδιος, έστω στο lab: το «διόρθωσα ένα nginx config που δε φόρτωνε» μετράει περισσότερο από κάθε ορισμό.

Σύνοψη

Ξέρεις πλέον να βρεις πού είσαι σε έναν server, να διαβάσεις και να αλλάξεις permissions, να εντοπίσεις ένα process που τρώει τη CPU και να ψάξεις στα logs με grep. Ξέρεις ακόμα να αλλάξεις το config ενός service, να κάνεις restart και να ελέγξεις ότι τρέχει. Στο interview πες τα με ένα παράδειγμα από τα labs, όχι με ορισμούς, γιατί το παράδειγμα είναι αυτό που θυμάται ο interviewer. Αυτό σου δίνει το δικαίωμα να γράψεις στο CV «Linux command line: filesystem, permissions, processes, logs, nginx» και να το υποστηρίξεις με σιγουριά, αν σε ρωτήσουν.

Θες να συνεχίσεις;

Αυτό το μάθημα είναι δωρεάν. Κάνε σύνδεση για να κρατάς την πρόοδο και τις σημειώσεις σου, ή απόκτησε το course για να ξεκλειδώσεις τα υπόλοιπα μαθήματα, τα labs και την κοινότητα.