Na Linux sistemu (kot na UNIX) je vse datoteka.
- datoteka je datoteka
- nastavitve so v tekstovnih datotekah (npr.
/etc/
za celoten sistem in~/.config/
za uporabnika) - statistika in sistemske informacije so tekstovne (kvazi)datoteke (npr. v
/proc/
in/sys/
) - celo naprave (v
/dev/
) so datoteke (npr./dev/nvme0
je SSD v prvi NVME reži) - …
Kaj to pomeni v praksi?
Nastavitve so datoteke
Kar se tiče nastavitev, jih lahko urejaš v kateremkoli urejevalniku besedil. Super praktično! Lahko tudi enostavno kopiraš od drugih, če najdeš kaj kar ti ustreza, pa je že nekdo drug naredil.
Ker so navadne tekstovne datoteke, lahko tudi enostavno iščeš po njih. Če npr. veš, da nekaj ne štima v nastavitvah, pa veš cca. kaj je narobe, lahko preiščeš celotne svoje nastavitve, da najdeš kje je napaka.
Kot primer, pred kratkim sem dodal nov SSD v svoj laptop in ga postavil v LUKS + Btrfs RAID1, kar je še kar zahtevna postavitev, in sem pozabil nekaj spremenit v boot loader (GRUB). Videl sem, da se GRUB pritožuje čez disk z UUID 2d90af35-7e6a-40f8-8353-f20433d0f994
, ki ga sedaj ni bilo več, zato sem enostavno poiskal kje vse se skriva v /etc/
(rabiš sudo
, ker navaden uporabnik zaradi varnosti nima vpogleda do vsega /etc/
):
sudo grep --recursive 2d90af35-7e6a-40f8-8353-f20433d0f994 /etc/
/etc/crypttab:luks-2d90af35-7e6a-40f8-8353-f20433d0f994 UUID=2d90af35-7e6a-40f8-8353-f20433d0f994 /crypto_keyfile.bin luks
/etc/fstab:/dev/mapper/luks-2d90af35-7e6a-40f8-8353-f20433d0f994 swap swap defaults 0 0
/etc/default/grub:GRUB_CMDLINE_LINUX_DEFAULT='nowatchdog nvme_load=YES rd.luks.uuid=1a45a072-e9ed-4416-ac7e-04b69f11a9cc rd.luks.uuid=c82fca05-59d3-4595-969b-c1c4124d8559 rd.luks.uuid=2d90af35-7e6a-40f8-8353-f20433d0f994 rd.luks.uuid=2e91342f-3d19-4f75-a9a6-fc3f9798cb30 resume=/dev/mapper/luks-2d90af35-7e6a-40f8-8353-f20433d0f994 loglevel=3 splash quiet'
/etc/dracut.conf.d/calamares-luks.conf:add_device+=" /dev/disk/by-uuid/2d90af35-7e6a-40f8-8353-f20433d0f994 "
Sistemske informacije in signali so datoteke
Kar se tiče sistemskih informacij je podobno praktično, da lahko tako iščeš z grep
ali drugače dostopaš do sistemskih informacij v /proc/
in /sys/
mapah.
Na primer, cat /proc/cpuinfo
bo izpisal ogromno informacij o CPU, ki se uporablja.
Kot drug primer, lahko pogledam kako so schedulerji nastavljeni v mojem trenutnem Linux jedru, tako da zaženem samo zgrep /proc/config.gz
(namesto zgrep
lahko tudi odzippaš config
in potem uporabiš navaden grep
), in dobim naslednji seznam:
CONFIG_SCHED_CORE=y
CONFIG_HAVE_SCHED_AVG_IRQ=y
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
# CONFIG_RT_GROUP_SCHED is not set
CONFIG_SCHED_MM_CID=y
CONFIG_SCHED_AUTOGROUP=y
CONFIG_SCHED_OMIT_FRAME_POINTER=y
CONFIG_SCHED_CLUSTER=y
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
CONFIG_SCHED_MC_PRIO=y
CONFIG_SCHED_HRTICK=y
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
CONFIG_MQ_IOSCHED_DEADLINE=y
CONFIG_MQ_IOSCHED_KYBER=y
CONFIG_IOSCHED_BFQ=y
CONFIG_BFQ_GROUP_IOSCHED=y
CONFIG_NET_SCHED=y
CONFIG_DRM_SCHED=m
CONFIG_USB_EHCI_TT_NEWSCHED=y
CONFIG_SCHED_STACK_END_CHECK=y
CONFIG_SCHED_DEBUG=y
CONFIG_SCHED_INFO=y
CONFIG_SCHEDSTATS=y
CONFIG_SCHED_TRACER=y
Še več! Ker je so sistemski statusi datoteke, lahko z njimi manipuliram!
Na mojem sistemu, na primer, lahko takole nastavim vse CPU procesorje, da gredo v »performance« mode (sudo tee
, da zapiše “performance” kot root v vse te datoteke):
echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Pa kaj, če so datoteke?
Malo za hec, pa še kako predvajaš random zvok…
aplay -c 2 -f S16_LE -r 44100 /dev/random
Pri tem je /dev/random
»naprava«, ki proizvaja (kvazi)naključen signal. In ker je datoteka, če rečeš programu za predvajanje aplay
naj predvaja to datoteko, jo pač bo. (Deluje tudi direktno z aplay /dev/random
, ampak je bolj nadležen zvok).
Podobne hecne naprave na Linuxu so še:
-
/dev/null
– vgrajena »črna luknja«, praktična, da kadar ne rabiš nekega outputa, pošlješ vanjo -
/dev/full
– večen signal, da je »naprava polna«, uporabno za testiranje -
/dev/zero
– neskončnen signal ničel, uporaben npr. za brisanje -
/dev/random
– proizvaja (kvazi)naključen signal -
/dev/urandom
– proizvaja (bolj) naključen signal, ki ga dodatno razsuje z branjem raznih drugih naprav
Več takih zanimivih: