Általában a valóságban előforduló dolgokból szeretek kiindulni.
Többször is előjött a közelmúltban olyan fórumtéma, hogy a rendszert indítva a bootolás elakadt, az Ubuntu vészhelyzeti, azaz emergency módba került. Ismétlődően az állt a probléma hátterében, hogy az /etc/fstab fájlba, jellemzően verziófrissítés során, egy téves sor került. Ezt helyreállítási módban illetve akár live vagy egy másik telepített rendszer alól, a problémás rendszer fstab fájljában lévő sor kikommentelésével, remekül lehet orvosolni.
Ilyenkor néha úgy éreztem, hogy néhány már amúgy is rendelkezésre álló információt (mi a problémás rendszer fstab fájljának tartalma, ha másik rendszer alól vagyunk, akkor hová van felcsatolva a problémás rendszer rendszerpartíciója) felhasznalva egyetlen sed parancsot lehetne adni a kérdezőnek és meg is volnánk.
@Kittus2 adott tegnap egy linket nekem balacy remek cikkére, elég jól magyaráz szerintem, de ez részemre nem volt elég elolvastam ezt is.
Csak most értettem meg egy fontos dolgot, ami nem csak a Sedre igaz. Így utólag már persze egyszerű, ez nem más, mint a „visszaper”. És ezt eddig én még sehol nem láttam hangsúlyosan leírva, vagy elsiklottam felette.
Ez az a jel: \
Ez az, ami az én billentyűzetemen a AltGr+Q kombinációra jelenik meg.
Teszek egy kísérletet arra, hogy én is elmagyarázzam:
Kezdjük azzal, hogy azok a parancsok, melyek az internetes leírásokban a legtöbbször megtalálhatóak, azok, melyeket mi itt távoli segítségnyújtásnál használunk, a parancs egyes részeit a SZÓKÖZ-zel választják el egymástól.
Példának egy analógia:
parancs forrás cél
Valami picit konkrétabb:
cp /home/csuhas/1.txt /home/csuhas/Letöltések
Megpróbálom neked részekre bontani:
A cp
a copy, azaz másolás szóból jön, vagyis: Másold
a-home-per-csuhas-per-1.txt
(fájlt)
a-home-per-csuhas-per-Letöltések
(könyvtárba)
Látod? A szóköz választja el a parancs három részét egymástól.
Na most, mi történik, ha én az „1 napom.txt” nevű fájlt szeretném ugyaninnen, ugyanígy másolni?
Elsőre azt gondolnám, hogy ez lesz az:
cp /home/csuhas/1 napom.txt /home/csuhas/Letöltések
De hibára fut. Miért?
Kezdjük ezt is nézni az elejétől.
cp
, azaz másold, eddig rendben.
a-per-home-per-csuhas-per-1
(fájlt)... Hoppá! Nézd csak! Itt egy szóköz! Nagy valószínűséggel már itt elakad, mert nincs ilyen nevű fájlom..., de ha tovább is megy: A `napom.txt'-be? Hol? Itt? Mi van?! Ebből szinte borítékolhatóan hibaüzenet lesz, de, hogy nem az történik, amit szerettem volna, az biztos.
Mivel szóközökkel határól, a pluszban megjelenő szóköz(ök) összezavarják.
Itt jön be a „visszaper” jelentősége, mely arra szolgál, hogy figyelmeztesse a „parancssort”, hogy figyelj, itt most egy különleges karakter jön, nem egy határoló!
cp /home/csuhas/1\ napom.txt /home/csuhas/Letöltések
Mivel a fájlom neve „1 napom.txt”, ezért a parancssorba ezt úgy írom be, hogy
1
utána teszek egy \
jelet, ez mondja, hogy itt egy különleges karakter jön, valami, ami NEM neked szól, ami NEM határoló (vagy más az adott parancssoros alkalmazás által használt utasítást jelentő karakter)
és utána folytatom a fájl nevének gépelését: szóköz-napom.txt
.
Ezáltal tudni fogja, hogy az „1” és a „napom” közötti szóköz nem határoló, az 1-szóköz-napom.txt
összetartozik, a következő szóköz lesz a határoló (hacsak azelőtt is nem szerepel egy „\”, mert akkor az is ide tartozik és az azt követő szóköz lesz a határoló...).
Remélem valamennyire érthetően sikerült megfogalmazni és egy kicsit át tudtam neked adni ezt a dolgot, ha eddig te sem ismerted ezt!
Miután ezt megértettem már a Seddel sem volt olyan nehéz dolgom.
A Sed bizonyos részeket a / jellel határolja el egymástól.
Ami nekem kell cserélgetős parancs, annak a tanulópéldája a
sed 's/alma/körte/' alma.txt
volt.
Ez az „alma” szavakat „körte” szavakra az alma.txt könyvtárban.
Nagyjából meg is értettem a tananyagot, de amikor a tesztre használt fstab nevű fájlomban a
# /dev/sde1
sort próbáltam kicserélni
/dev/sde1
-re bizony először pórul jártam.
Ez nem is csoda, hiszen vannak benne per jelek és, ha nem jelzem, hogy ez(ek) különleges karakter(ek), akkor összezavarják az alkalmazást, hiszen az per jelekkel határol, sőt maga a #
is egy különleges karakter...
A felhasználóm könyvtárában létrehoztam egy Practice nevű könyvtárat és abba bemásoltam a rendszerem /etc/fstab fájlját, hogy itt, biztonságos környezetben gyakoroljak.
A sed -i 's/\# \/dev\/sde1/ \/dev\/sde1/g' /home/csuhas/Practice/fstab
paranccsal szépen kiszedtem a # jelet az amúgy 11. sorban lévő szöveg elejéről.
A sed -i 's/ \/dev\/sde1/\# \/dev\/sde1/g' /home/csuhas/Practice/fstab
paranccsal meg odatettem (visszatettem).
Biztos lehet ezt másképp is, jobban is, de én ennek is nagyon örülök, hiszen ezt szerettem volna! Szuper! Szerintem, ha szükséges, ezt így már tudom majd használni arra, amire gondoltam.