Tekstualni editori
Na Linuxu se konfiguracija ne podešava kroz prozore sa dugmadima. Sve što sistem radi zapisano je u tekstualnim fajlovima — ko sme da se prijavi preko SSH-a, koja se usluga pokreće pri startu, gde web server traži sajt. Zato je editor alat koji ćeš koristiti češće od bilo kog drugog.
Ova stranica je pregled: koji editori postoje, koji da izabereš i šta
moraš da znaš pre nego što prvi put otvoriš fajl u /etc.
Dva editora koja te zanimaju
Postoji ih mnogo, ali u praksi biraš između dva:
- nano — jednostavan, prečice ispisane u dnu ekrana, radi kako očekuješ. Idealan dok učiš.
- vi — čudan na prvi pogled, ali uvek je instaliran. Na minimalnom serveru, u kontejneru, u režimu za oporavak — nano možda nema, vi ima.
Preporuka je jasna: koristi nano za svakodnevni rad, ali nauči minimum vi-ja. Nije stvar ukusa nego osiguranja. Pre ili kasnije zatećićeš se na sistemu gde drugog izbora nema, i tada ne želiš da učiš.
Postoje i emacs i grafički editori poput gedit-a ili Kate-a, ali na serverima ih po pravilu nema, pa ih ovde ne obrađujemo.
nano
$ nano beleske.txt
Otvara se fajl, kursor je u tekstu, kucanje radi odmah. Nema režima, nema iznenađenja. U dnu ekrana stoji podsetnik na prečice:
GNU nano 7.2 beleske.txt prvi red teksta ^G Help ^O Write Out ^W Where Is ^K Cut ^X Exit ^R Read File ^\ Replace ^U Paste
Znak ^ znači Ctrl. Dakle ^X je Ctrl+X.
Šta ti je zaista potrebno
Ctrl+O— snimi (pita za ime, potvrdi Enterom)Ctrl+X— izađi (ako ima izmena, pita da li da snimi)Ctrl+W— pretraga,Alt+Wsledeće pojavljivanjeCtrl+K— iseci red,Ctrl+UnalepiCtrl+_— skoči na određeni redAlt+U— poništi poslednju izmenu
Prečica Ctrl+K se ponavlja — pet pritisaka iseče pet redova, a
Ctrl+U ih vrati sve zajedno. Tako se u nano-u premešta blok
teksta.
Opcija koja se isplati
$ nano -l /etc/ssh/sshd_config
Uključuje brojeve redova. Kad servis prijavi grešku u 47. redu, hoćeš da
taj red vidiš odmah. Ako želiš da to bude podrazumevano, napravi
~/.nanorc:
set linenumbers set tabstospaces set constantshow
Redom: brojevi redova, tab se pretvara u razmake (obavezno za YAML), i stalni prikaz pozicije kursora u dnu.
Zamka: prelamanje dugačkih redova
Stariji nano je umeo da dugačak red automatski prelomi na dva — što u konfiguracionom fajlu znači pokvarenu konfiguraciju. Novije verzije to više ne rade podrazumevano, ali ako radiš na starijem sistemu, otvaraj sistemske fajlove ovako:
$ nano -w /etc/fstab
Opcija -w isključuje prelamanje. Neka ti pređe u naviku kod
svega u /etc.
vi
vi radi drugačije od svega što si do sada koristio: ima režime. Kad se otvori, slova koja kucaš nisu tekst nego komande. Zato prvo i najvažnije:
Esc :q! Enter — izlaz bez čuvanja izmena Esc :wq Enter — snimi i izađi
Ako si trenutno zaglavljen — to je rešenje. Ceo minimum, sa objašnjenjem režima i deset komandi koje su dovoljne za rad na bilo kom serveru, ima na stranici vi za preživljavanje.
Napomena o imenima: na većini distribucija vi je zapravo link
na vim, a ponegde na okrnjeni vim-tiny. Proveri sa:
$ readlink -f $(which vi) /usr/bin/vim.basic
Editor se otvorio sam, a ti ga nisi zvao
Neke komande otvaraju editor bez pitanja:
$ crontab -e $ visudo $ git commit
Koji će se editor otvoriti, određuje promenljiva EDITOR. Ako
nije postavljena, dobijaš vi:
$ echo $EDITOR $ export EDITOR=nano $ crontab -e
Za trajno, red export EDITOR=nano ide u ~/.bashrc.
Neke komande gledaju i VISUAL, pa je najsigurnije postaviti
obe.
Ali imaj na umu: na tuđem serveru tvoj .bashrc ne postoji.
Zato ovo nije zamena za poznavanje vi-ja, nego udobnost na sopstvenoj
mašini.
Rad sa sistemskim fajlovima
Ovde se prave stvarne štete, pa tri pravila.
1. Napravi kopiju pre izmene
$ sudo cp /etc/ssh/sshd_config{,.bak}
$ sudo nano /etc/ssh/sshd_config
Vitičaste zagrade su prečica iz lekcije Džokeri i navodnici — shell to proširi u dve pune putanje. Ako nešto krene naopako, povratak je jedna komanda.
2. Otvaraj sa sudo od početka
$ nano /etc/hosts
nano će te pustiti da uređuješ i tek pri snimanju javiti da nema dozvole. vi u istoj situaciji kaže:
E45: 'readonly' option is set (add ! to override)
Nije katastrofa — u vi-ju postoji spas
(:w !sudo tee % > /dev/null), a u nano-u možeš snimiti u
/tmp pa premestiti sa
sudo. Ali je jednostavnije od početka
kucati:
$ sudo nano /etc/hosts
3. Proveri sintaksu pre nego što restartuješ servis
Ovo je pravilo koje deli one koji su izgubili pristup serveru od onih koji nisu. Skoro svaki servis ima komandu za proveru konfiguracije:
$ sudo sshd -t $ sudo nginx -t nginx: configuration file /etc/nginx/nginx.conf test is successful $ sudo apachectl configtest $ sudo named-checkconf
Ako sshd -t prijavi grešku, a ti ipak restartuješ SSH —
servis se neće podići, a ti si na daljinu. Zato: izmeni, proveri, pa tek onda
restartuj. I dok testiraš SSH, drži otvorenu postojeću sesiju kao rezervu.
Za fajlove bez alata za proveru koristi se posebna komanda za tu vrstu sadržaja:
$ python3 -c "import yaml,sys; yaml.safe_load(open('docker-compose.yml'))"
$ jq . podesavanja.json > /dev/null
Poseban slučaj: visudo
Fajl /etc/sudoers se nikada ne otvara direktno.
Greška u njemu znači da niko više ne može da koristi sudo — uključujući tebe.
Umesto toga:
$ sudo visudo
Ova komanda radi na privremenoj kopiji i proverava sintaksu pre nego što išta snimi:
>>> /etc/sudoers: syntax error near line 22 <<< What now?
Isto pravilo važi i za crontab: koristi crontab -e, ne
uređuj fajlove u /var/spool/cron ručno.
Sitnice koje ume da zabole
Fajl kopiran sa Windowsa
$ ./skripta.sh bash: ./skripta.sh: /bin/bash^M: bad interpreter: No such file or directory
^M je Windows oznaka za kraj reda. Provera i popravka:
$ file skripta.sh skripta.sh: Bourne-Again shell script, ASCII text executable, with CRLF line terminators $ dos2unix skripta.sh
Ako dos2unix nije instaliran, radi i
sed:
sed -i 's/\r$//' skripta.sh.
Tabovi umesto razmaka
U YAML fajlovima tab je zabranjen, a izgleda potpuno isto kao razmaci. Kad docker-compose ili Ansible prijave nerazumljivu grešku, prvo proveri:
$ grep -P "\t" docker-compose.yml
Zato set tabstospaces u .nanorc nije kozmetika.
Suprotno važi za Makefile, gde tab mora ostati tab.
Poruka o swap fajlu u vi-ju
Found a swap file by the name ".sshd_config.swp" [O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Prethodna sesija je prekinuta — pukla veza ili zatvoren terminal. Ako ti
izmene ne trebaju, pritisni D i nastavi. Ako trebaju,
R, pa snimi, pa obriši .swp fajl. Detaljnije u
lekciji vi za preživljavanje.
Editor menja inode
Većina editora ne piše u postojeći fajl, nego pravi novi i preimenuje ga preko starog. Posledica: hard linkovi ka tom fajlu pucaju, a proces koji fajl drži otvorenim nastavlja da čita staru verziju. Objašnjenje je u lekciji Inode-ovi i linkovi.
Kad editor uopšte nije potreban
Za sitnu izmenu je često brže bez otvaranja fajla:
$ echo "127.0.0.1 test.local" | sudo tee -a /etc/hosts > /dev/null $ sudo sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
Prvi red dopisuje, drugi menja u mestu. Ovo je i jedini način da se fajl izmeni iz skripte, gde nema nikoga da kuca. Obe tehnike su objašnjene na stranicama Piping i redirekcija i sed.
A za samo gledanje sadržaja editor ti ne treba uopšte — tu su cat i less. Otvaranje fajla u editoru „da vidim šta piše" je najlakši način da slučajno pritisneš neki taster i snimiš izmenu koju nisi hteo.
Kratka referenca
nano
Ctrl+O— snimi ·Ctrl+X— izlazCtrl+W— traži ·Ctrl+\— zameniCtrl+K/Ctrl+U— iseci / nalepi redAlt+U— poništinano -lw fajl— brojevi redova, bez prelamanja
vi
Esc— komandni režim ·i— unos teksta:w— snimi ·:q!— izlaz bez čuvanja ·:wq— snimi i izađi
Opšte
export EDITOR=nano— koji editor otvaraju druge komandesudo cp fajl{,.bak}— kopija pre izmenesudo visudo— jedini ispravan način za sudoerssshd -t,nginx -t— provera pre restartados2unix fajl— uklanjanje Windows krajeva reda
Vežba
Radi na kopiji, ne na pravom fajlu:
$ cp /etc/ssh/sshd_config ~/vezba.conf
- Otvori
~/vezba.confu nano-u sa brojevima redova, pronađi red koji sadržiPorti izmeni ga. - Snimi i izađi, pa proveri izmenu sa diff u odnosu na original.
- Otvori isti fajl u vi-ju i izađi bez čuvanja izmena.
- Postavi
EDITORna nano i pokrenicrontab -eda vidiš da li se otvorio pravi editor. Izađi bez čuvanja. - Istu izmenu iz prvog zadatka napravi bez editora, komandom
sed.
Peti zadatak je onaj koji ćeš zapravo koristiti u skriptama.
Ako te zanima samo kako da izađeš iz vi-ja i preživiš rad na serveru, sve je na stranici vi za preživljavanje.
Cela lekcija je deo vodiča Linux osnove.
Comments
Post a Comment