Direktorijumi i fajlovi Linux sistema
Na Windowsu imaš C:\, D:\ i svaki disk svoje
slovo. Na Linuxu postoji samo jedno stablo koje počinje od korena,
oznake /. Svi diskovi, particije, USB uređaji i mrežni deljeni
direktorijumi ubacuju se negde u to stablo.
Ta razlika je prva stvar koja zbunjuje, a druga je što svaki direktorijum u korenu ima tačno određenu svrhu. To nije stvar navike nego standarda koji se zove FHS — Filesystem Hierarchy Standard.
Zato se, kad naučiš ovu strukturu, snalaziš na svakom Linux sistemu na svetu, bez obzira na distribuciju.
Pogled na koren
$ ls / bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
Deluje kao gomila skraćenica, ali svaka ima logiku. Podeliću ih po tome koliko ćeš ih često koristiti.
Direktorijumi koje ćeš koristiti svakog dana
/etc — konfiguracija
Ovde je podešavanje celog sistema i svih servisa. Sve su to obični tekstualni fajlovi koje uređuješ editorom.
/etc/passwd korisnički nalozi /etc/shadow lozinke (samo root ih čita) /etc/group grupe /etc/fstab šta se montira pri butovanju /etc/hosts ručno mapiranje imena na IP adrese /etc/resolv.conf DNS serveri /etc/ssh/sshd_config podešavanje SSH servera /etc/httpd/ konfiguracija Apache-a (RHEL porodica) /etc/apache2/ isto to na Debian porodici /etc/cron.d/ zakazani poslovi
Kad god negde piše „izmeni konfiguraciju", odgovor je gotovo uvek negde
u /etc. To je i prvi direktorijum koji treba da uđe u tvoj
backup.
Činjenica da je sve u čitljivom tekstu je velika prednost — konfiguraciju možeš pregledati, uporediti sa diff-om i čuvati u sistemu za verzionisanje.
/home — korisnički fajlovi
/home/alen/ /home/marko/
Svaki korisnik ima svoj direktorijum i u njemu puna prava. Tu su dokumenti, preuzimanja i lična podešavanja programa.
Prečica je tilda:
$ cd ~ $ cd ~/Documents $ ls ~/.ssh
Fajlovi koji počinju tačkom su skriveni — to je sve što treba da ih sakrije, nema posebnog atributa. Tu žive lična podešavanja:
$ ls -a ~ .bashrc .bash_history .ssh .config .local
Zato ls u home direktorijumu deluje prazno, a
ls -a pokaže desetine stavki.
/var — podaci koji rastu
Sve što se menja tokom rada sistema.
/var/log/ logovi /var/log/messages opšti sistemski log /var/log/secure prijave i autentikacija /var/log/httpd/ logovi Apache-a /var/www/html/ sadržaj veb sajta /var/lib/mysql/ podaci baze /var/spool/ redovi čekanja (štampa, mejl) /var/cache/ keš paketa i aplikacija
Kad nešto ne radi, put te vodi u /var/log. Danas veći deo
toga čitaš kroz
journalctl,
ali servisi i dalje pišu i sopstvene fajlove.
Ovo je i direktorijum koji najčešće napuni disk. Log koji niko ne
rotira ume da pojede stotine gigabajta. Zato se /var na
serverima često stavlja na zasebnu particiju — ako se napuni, ne obori ceo
sistem.
/tmp — privremeni fajlovi
Prostor u koji svako sme da piše. Sadržaj se briše pri restartu ili posle nekoliko dana, u zavisnosti od podešavanja.
Dobro za raspakivanje nečega na brzinu. Loše za bilo šta što ti treba sutra — sistem sme da ga obriše bez najave.
Gde su programi
Ova četiri direktorijuma sadrže izvršne fajlove i razlikuju se po tome ko ih i kada koristi.
| Direktorijum | Šta sadrži |
|---|---|
/bin | osnovne komande dostupne svim korisnicima — ls, cp, bash |
/sbin | administratorske komande — fdisk, mkfs, ip |
/usr/bin | najveći deo instaliranih programa |
/usr/sbin | administratorski servisni programi |
Na modernim distribucijama /bin i /sbin su samo
simbolički linkovi na odgovarajuće u /usr. Vidi se odmah:
$ ls -l /bin lrwxrwxrwx. 1 root root 7 Apr 12 09:31 /bin -> usr/bin
Gde je konkretna komanda:
$ which ls /usr/bin/ls $ which fdisk /usr/sbin/fdisk
Šta je zapravo /usr
Skraćenica ne znači „user" nego Unix System Resources. Tu je najveći deo instaliranog sistema:
/usr/bin/ programi /usr/lib/ biblioteke /usr/share/ podaci nezavisni od arhitekture — man stranice, ikone, dokumentacija /usr/local/ ono što si sam instalirao, mimo menadžera paketa
/usr/local/bin je pravo mesto za tvoje
skripte koje treba
da budu dostupne svima na sistemu. Menadžer paketa tu ništa ne dira, pa ti
nadogradnja neće prepisati fajl.
/opt
Za softver koji se instalira kao celina, u svoj direktorijum — tipično komercijalne aplikacije koje ne dolaze iz repozitorijuma.
/opt/google/chrome/ /opt/moja-aplikacija/
Sistemski direktorijumi
/boot
Kernel, initramfs i butloader. Sve što je potrebno da se sistem digne, opisano u lekciji Proces butovanja Linuxa.
$ ls /boot vmlinuz-6.12.0-211.el10.x86_64 initramfs-6.12.0-211.el10.x86_64.img grub2/
Ovaj direktorijum je obično na zasebnoj, maloj particiji. Ume da se napuni starim kernelima posle više nadogradnji — čest uzrok neuspele nadogradnje.
/dev — uređaji
Na Linuxu je i hardver predstavljen kao fajl.
/dev/sda prvi disk /dev/sda1 prva particija na njemu /dev/null "kanta" — sve što tu upišeš nestaje /dev/zero beskonačan izvor nula /dev/random izvor slučajnih podataka
/dev/null ćeš sretati stalno, kad hoćeš da se izlaz komande
ne prikazuje:
$ komanda > /dev/null 2>&1
/proc i /sys
Ovo nisu pravi direktorijumi na disku nego prozor u kernel. Fajlovi se stvaraju u trenutku kad ih pročitaš.
$ cat /proc/cpuinfo $ cat /proc/meminfo $ cat /proc/uptime $ cat /proc/1234/status
Svaki pokrenut proces ima svoj direktorijum sa brojem PID-a. Odatle komande poput ps i top i vuku podatke.
/sys je sličan, ali za hardver i drajvere. Kroz njega se
podešavaju parametri kernela u radu.
/run
Podaci o trenutnom stanju sistema — PID fajlovi, soketi, lock fajlovi. Živi u memoriji i prazan je posle svakog restarta.
/root
Home direktorijum administratora. Nije isto što i / —
zbunjujuće ime, ali su to dve različite stvari.
/mnt i /media
/media je mesto gde sistem sam montira USB i optičke uređaje.
/mnt je za ručno montiranje, kad ti zatreba privremeno.
# mount /dev/sdb1 /mnt
Više o tome u lekciji Upravljanje particijama i mauntovanje.
/srv i /lib
/srv je predviđen za podatke servisa, ali ga u praksi mnogi
preskaču u korist /var/www. /lib i
/lib64 sadrže deljene biblioteke i njih ne diraš ručno.
Putanje
Putanja je adresa fajla u stablu. Postoje dva načina da je zapišeš.
Apsolutna
Kreće od korena i uvek znači isto, bez obzira gde se nalaziš:
/etc/ssh/sshd_config /home/alen/Documents/plan.txt /var/log/messages
Relativna
Kreće od direktorijuma u kom si trenutno:
Documents/plan.txt ../marko/ ./skripta.sh
| Oznaka | Značenje |
|---|---|
. | trenutni direktorijum |
.. | direktorijum iznad |
~ | tvoj home |
- | prethodni direktorijum u kom si bio |
$ cd /var/log $ cd /etc $ cd - /var/log
Poslednja prečica je zgodna kad skačeš između dva mesta.
Kada koju koristiti
Relativne su kraće za kucanje. Apsolutne su obavezne u skriptama — skripta koju pokreće cron ne kreće iz direktorijuma iz kog misliš, pa relativna putanja pokazuje na pogrešno mesto ili nikuda.
Sve je fajl
Ovo je osnovna ideja Unixa, i vredi je razumeti jer objašnjava mnogo toga. Fajl nije samo dokument — fajl je i disk, i tastatura, i mrežna konekcija, i proces.
Zato iste komande rade nad svim:
$ cat /etc/hostname tekstualni fajl $ cat /proc/cpuinfo podatak iz kernela $ cat /dev/urandom izvor slučajnih bajtova
Tip stavke vidiš po prvom znaku u ispisu:
$ ls -l / drwxr-xr-x. 2 root root 4096 Aug 19 11:04 bin lrwxrwxrwx. 1 root root 7 Apr 12 09:31 lib -> usr/lib brw-rw----. 1 root disk 8, 0 Aug 21 09:12 /dev/sda
| Znak | Šta je |
|---|---|
- | običan fajl |
d | direktorijum |
l | simbolički link |
b | blok uređaj (disk) |
c | znakovni uređaj (terminal) |
Ostatak reda su dozvole, tema zasebne lekcije.
Nema ekstenzija — bar ne za sistem
Na Windowsu .exe znači program. Na Linuxu ekstenzija je samo
deo imena; sistem je ne gleda. Da li je fajl izvršan određuje
dozvola, a šta je zapravo unutra otkriva:
$ file /usr/bin/ls /usr/bin/ls: ELF 64-bit LSB pie executable, x86-64 $ file /etc/passwd /etc/passwd: ASCII text
Zato skripta ne mora imati .sh u imenu, i zato fajl sa
nastavkom .txt može biti bilo šta.
Kako se snaći na tuđem sistemu
Ovih nekoliko komandi daju ti sliku za pola minuta:
$ df -h koje particije postoje i koliko su pune $ du -sh /var/log koliko zauzimaju logovi $ ls -la /etc | head -30 šta je sve konfigurisano $ find /etc -name "*.conf" -newer /etc/fstab šta je skoro menjano
A kad tražiš konkretan fajl a ne znaš gde je:
$ find / -name "httpd.conf" 2>/dev/null $ locate httpd.conf
Dodatak 2>/dev/null sakriva poruke o direktorijumima u
koje nemaš pristup, pa ispis ostaje čitljiv.
Vežba
- Izlistaj koren i pogledaj koji od direktorijuma su simbolički linkovi
(
ls -l /) - Pronađi u
/etcfajl koji definiše DNS servere - Proveri koliko zauzima
/var/log - Pogledaj koliko jezgara ima tvoj procesor, kroz
/proc - Pređi u
/var/log, pa u/etc, pa se vrati jednim potezom - Sazna gde se nalazi izvršni fajl komande
systemctl - Izlistaj skrivene fajlove u svom home direktorijumu i pogledaj
.bashrc
Povezano: ls · find · df · Linux osnove
Comments
Post a Comment