Linuxi pÔhikÀsud testijatele ja mitte ainult

EessÔna

Tere kĂ”igile! Minu nimi on Sasha ja olen ĂŒle kuue aasta tegelenud tagaplaneerimise testimisega (Linuxi teenused ja API-d). Idee kirjutada artikkel tuli mulle pĂ€rast seda, kui tuttav testija palus mul soovitada, mida lugeda Linuxi kĂ€skude kohta enne tööintervjuud. Tavaliselt nĂ”utakse QA inseneri ametikohale kandideerijalt pĂ”hikĂ€su tundmist (kui eeldada, et töö hĂ”lmab Linuxit), kuid kuidas mĂ”ista, milliseid kĂ€ske tasuks intervjuuks ettevalmistamisel lugeda, kui Linuxiga on vĂ€he vĂ”i ĂŒldse mitte kogemusi?

Seega, kuigi sellest on juba palju kirjutatud, otsustasin ikkagi kirjutada veel ĂŒhe artikli „Linux algajatele”, kus loetlen pĂ”hikĂ€sud, mida on vaja teada enne igasugust intervjuud osakonnas (vĂ”i ettevĂ”ttes), kus kasutatakse Linuxit. MĂ”tlesin, milliseid kĂ€ske ja tööriistu koos parameetritega ma kĂ”ige sagedamini kasutan, kogusin tagasisidet kolleegidelt ja koondasin kĂ”ik selle ĂŒhte artiklisse. Artikkel jaguneb tinglikult kolme ossa: kĂ”igepealt lĂŒhike teave Linuxi terminali sisendi ja vĂ€ljundi alustest, seejĂ€rel ĂŒlevaade kĂ”ige pĂ”hikĂ€sudest ning kolmandas osas kĂ€sitletakse tĂŒĂŒpiliste probleemide lahendamist Linuxis.

Iga kÀsu puhul on palju valikuvÔimalusi; neid kÔiki siin ei loeta. Alati vÔib sisestada `man` vÔi `--help` et saada kÀsust rohkem teavet.

NĂ€ide:

[user@testhost ~]$ mkdir --help
Kasutus: mkdir [VALIK]... KAUST...
Looge KAUST(ed), kui need veel ei eksisteeri.

Kohustuslikud valikud pikal puhul on kohustuslikud ka lĂŒhikeseks.
 -m, --mode=MODE    seadke faili reĆŸiim (nagu chmod), mitte a=rwx - umask
 -p, --parents      ei tohi eksisteerimisel viga, looge vajadusel ĂŒlevanem kaustad
 -v, --verbose      trĂŒkkige sĂ”num iga loodud kausta kohta
 -Z                   seadke iga loodud kausta SELinuxi turbekontekst
			  vaikimisi tĂŒĂŒbiks
 --context[=CTX]    nagu -Z, vÔi kui CTX on mÀÀratud, siis seadke SELinuxi
			  vÔi SMACK turbekontekst CTX-ks
 --help     nÀita seda abi ja lahku
 --version   vÀljastage versiooni teave ja lahku

GNU coreutilsi veebipÔhine abi: 
TÀieliku dokumentatsiooni saamiseks kÀivitage: info coreutils 'mkdir kutse'

Kui mÔni kÀsk tÀidab liiga kaua, saab selle lÔpetada, vajutades konsoolis Ctrl+C (protsessile saadetakse signaal SIGINT).

Veidi kÀsuviidete vÀljastamisest

Kui protsess kĂ€ivitatakse Linuxis, luuakse selle protsessi jaoks 3 standardset andmevoogu: stdin, stdout ja stderr. Need on numbrid 0, 1 ja 2. Kuid meid huvitavad praegu stdout ja vĂ€hemal mÀÀral stderr. Nagu nimedest jĂ€relduda, kasutatakse stdout andmete vĂ€ljundiks, aga stderr — vigade tĂ”husaks teavitamiseks. Vaikimisi, kui kĂ€ivitate kĂ€su Linuxis, stdout ja stderr kuvatakse kogu teave konsoolile, kuid kui kĂ€su vĂ€ljund on suur, vĂ”ib olla mugav see faili suunata. Seda saab teha nĂ€iteks nii:

[user@testhost ~]$ man signal > man_signal

Kui me kuvame faili sisu man_signal, siis nÀeme, et see on identne sellega, mis oleks olnud kÀsu lihtsa kÀivitamise korral `man signal`.

Suunamiste operatsioon `>` kasutab vaikimisi stdout. Suunamist saab mÀÀrata ka selgelt: ` stdout 1>`. Samuti saab mÀÀrata suunamist2> stderr: ``. Need toimingud saab kombineerida, et jagada kÀsu tavaline vÀljund ja veateated:[user@testhost ~]$ man signal 1> man_signal 2> man_signal_error_log

Suunata ja

ĂŒheks failiks saab jĂ€rgmiselt: stdout, ja stderr [user@testhost ~]$ man signal > man_signal 2>&1

` tÀhistab suunamist

Suunamiste operatsioon `2>&1sinna, kuhu suunatakse stderr Veel ĂŒks mugav tööriist sisendi-vĂ€ljundi töötlemiseks (kui tĂ€psustada, see on mugav protsessidevaheline suhtlemine) — stdout.

toru pipe (vÔi ). Torusid kasutatakse sageli mitme kÀsu sidumiseks:kÀsu vÀljund suunatakse stdout jÀrgnevasse, ja nii edasi ahelas: stdin [user@testhost ~]$ ps aux | grep docker | tail -n 2 root 1045894 0.0 0.0 7512 3704 ? Sl 16:04 0:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/2fbfddaf91c1bb7b9a0a6f788f3505dd7266f1139ad381d5b51ec1f47e1e7b28 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc 531 1048313 0.0 0.0 110520 2084 pts/2 S+ 16:12 0:00 grep --color=auto docker

Baasilised Linuxi kÀsud

Kuva praegune (töötav) kataloog.

pwd

[user@testhost ~]$ pwd /home/user

Kuva praegune kuupĂ€ev ja sĂŒsteemi kellaaeg.

date

[user@testhost ~]$ date Mon Dec 16 13:37:07 UTC 2019 [user@testhost ~]$ date +%s 1576503430

See kĂ€sk nĂ€itab, kes on sĂŒsteemis sisselogitud. Lisaks kuvatakse ekraanil ka uptime ja LA (load average).

w

[user@testhost ~]$ w 05:47:17 up 377 days, 17:57, 1 user, load average: 0,00, 0,01, 0,05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT user pts/0 32.175.94.241 05:47 2.00s 0.01s 0.00s w

Kuva katalooge sisu. Kui teed ei edastata, kuvatakse praeguse katalooge sisu.

ls

[user@testhost ~]$ pwd /home/user [user@testhost ~]$ ls qqq [user@testhost ~]$ ls /home/user qqq [user@testhost ~]$ ls / bin boot cgroup dev etc home lib lib64 local lost+found media mnt opt proc root run sbin selinux srv swap sys tmp usr var

Isiklikult kasutan sageli valikuid

(pikk loetlemise formaat — failide tĂ€iendava teabe vĂ€ljund veergudena), Ă”pivad (jĂ€rjepidevuse jĂ€rgi mĂ€lu muutmise jĂ€rgi) ja -t (faili vĂ”i katalooge muuda. -r (tagasi pööratud jĂ€rjestus — koos -t kĂ”ige „vĂ€rskemad“ failid on all):

[user@testhost ~]$ ls -ltr \/
total 4194416
drwxr-xr-x    2 root root       4096 Jan  6  2012 srv
drwxr-xr-x    2 root root       4096 Jan  6  2012 selinux
drwxr-xr-x    2 root root       4096 Jan  6  2012 mnt
drwxr-xr-x    2 root root       4096 Jan  6  2012 media
drwx------    2 root root      16384 Oct  1  2017 lost+found
drwxr-xr-x    2 root root       4096 Oct  1  2017 local
drwxr-xr-x   13 root root       4096 Oct  1  2017 usr
drwxr-xr-x   11 root root       4096 Apr 10  2018 cgroup
drwxr-xr-x    4 root root       4096 Apr 10  2018 run
-rw-------    1 root root 4294967296 Sep 10  2018 swap
dr-xr-xr-x   10 root root       4096 Dec 13  2018 lib
drwxr-xr-x    6 root root       4096 Mar  7  2019 opt
drwxr-xr-x   20 root root       4096 Mar 19  2019 var
dr-xr-xr-x   10 root root      12288 Apr  9  2019 lib64
dr-xr-xr-x    2 root root       4096 Apr  9  2019 bin
dr-xr-xr-x    4 root root       4096 Apr  9  2019 boot
dr-xr-xr-x    2 root root      12288 Apr  9  2019 sbin
dr-xr-xr-x 3229 root root          0 Jul  2 10:19 proc
drwxr-xr-x   34 root root       4096 Oct 28 13:27 home
drwxr-xr-x   93 root root       4096 Oct 30 16:00 etc
dr-xr-x---   11 root root       4096 Nov  1 13:02 root
dr-xr-xr-x   13 root root          0 Nov 13 20:28 sys
drwxr-xr-x   16 root root       2740 Nov 26 08:55 dev
drwxrwxrwt    3 root root       4096 Nov 26 08:57 tmp

On 2 spetsiaalset kaustade nime: „." ja "..“. Esimene tĂ€hendab praegust kausta, teine — ĂŒlemkausta. Nende kasutamine on erinevates kĂ€skudes mugav, nimelt ls:

[user@testhost home]$ pwd
\/home
[user@testhost home]$ ls ..
bin  boot  cgroup  dev  etc  home  lib  lib64  local  lost+found  media  mnt  opt  proc  root  run  sbin  selinux  srv  swap  sys  tmp  usr  var
[user@testhost home]$ ls ..\/home\/user\/\nqqq

Samuti on olemas kasulik valik peidetud failide vĂ€ljastamiseks (mis algavad „.«) — -a:

[user@testhost ~]$ ls -a
.  ..  1  .bash_history  .bash_logout  .bash_profile  .bashrc  .lesshst  man_signal  man_signal_error_log  .mongorc.js  .ssh  temp  test  .viminfo

Ja veel saab kasutada valikut -h — vĂ€ljastamine human readable formaadis (pange tĂ€hele failide suurusi):

[user@testhost ~]$ ls -ltrh
total 16K
-rwxrwx--x 1 user user   31 Nov 26 11:09 temp
-rw-rw-r-- 1 user user 6.0K Dec  3 16:02 1
drwxrwxr-x 2 user user 4.0K Dec  4 10:39 test

cd

Muuda praegust kausta.

[user@testhost ~]$ pwd
\/home\/user
[user@testhost ~]$ cd \/home\/
[user@testhost home]$ pwd
\/home

Kui kausta nime argumendina ei edastata, kasutatakse keskkonnamuutujat $HOME, see tĂ€hendab kodukausta. Samuti vĂ”ib olla mugav kasutada `~` — spetsiaalne sĂŒmbol, mis tĂ€hendab $HOME:

[user@testhost etc]$ pwd
\/etc
[user@testhost etc]$ cd ~\/test\/\n[user@testhost test]$ pwd
\/home\/user\/test

mkdir

Loo kaust.

[user@testhost ~]$ mkdir test
[user@testhost ~]$ ls -ltr
total 38184
-rw-rw-r-- 1 user user 39091284 Nov 22 14:14 qqq
drwxrwxr-x 2 user user     4096 Nov 26 10:29 test

MĂ”nikord on vaja luua kindel kaustade struktuur: nĂ€iteks kaust kaustas, mis ei eksisteeri. Et mitte sisestada jĂ€rjestikku mitu korda mkdir, saab kasutada valikut -p — see vĂ”imaldab luua kĂ”ik puuduvad kataloogid hierarhias. Samuti selle valikuga mkdir ei tagasta viga, kui kataloog eksisteerib.

[user@testhost ~]$ ls
qqq test
[user@testhost ~]$ mkdir test2/subtest
mkdir: ei saa luua katalooge ‘test2/subtest’: Selline fail vĂ”i kataloog ei eksisteeri
[user@testhost ~]$ mkdir -p test2/subtest
[user@testhost ~]$ ls
qqq test test2
[user@testhost ~]$ ls test2/
subtest
[user@testhost ~]$ mkdir test2/subtest
mkdir: ei saa luua katalooge ‘test2/subtest’: Fail eksisteerib
[user@testhost ~]$ mkdir -p test2/subtest
[user@testhost ~]$ ls test2/
subtest

rm

Kustuta fail.

[user@testhost ~]$ ls
qqq test test2
[user@testhost ~]$ rm qqq
[user@testhost ~]$ ls
test test2

Valik -r vĂ”imaldab rekursiivselt kustutada katalooge koos nende kĂ”igi sisuga, valik -f vĂ”imaldab ignoreerida vigu kustutamisel (nĂ€iteks mittepĂŒsiva faili osas). Need valikud vĂ”imaldavad, ĂŒtleme nii, garanteeritult kustutada kogu failide ja kataloogide hieraaria (kui kasutajal on selleks Ă”igused), seetĂ”ttu tuleb neid kasutada ettevaatlikult (klassikaline nalja nĂ€ide — "rm -rf /", teatud oludega kustutab kui mitte kogu sĂŒsteemi, siis vĂ€ga palju olulisi faile tema töös.

[user@testhost ~]$ ls
test test2
[user@testhost ~]$ ls -ltr test2/
total 4
-rw-rw-r-- 1 user user 0 Nov 26 10:40 temp
drwxrwxr-x 2 user user 4096 Nov 26 10:40 temp_dir
[user@testhost ~]$ rm -rf test2
[user@testhost ~]$ ls
test

cp

Kopeeri fail vÔi kataloog.

[user@testhost ~]$ ls
temp test
[user@testhost ~]$ cp temp temp_clone
[user@testhost ~]$ ls
temp temp_clone test

Sellel kÀsul on samuti valikud -r ja -f, mida saab kasutada, et garanteeritult kopeerida kataloogide ja kaustade hieraaria teise kohta.

mv

Liiguta vÔi nimevahetus failile vÔi kataloogile.

[user@testhost ~]$ ls -ltr
total 4
drwxrwxr-x 2 user user 4096 Nov 26 10:29 test
-rw-rw-r-- 1 user user 0 Nov 26 10:45 temp
-rw-rw-r-- 1 user user 0 Nov 26 10:46 temp_clone
[user@testhost ~]$ ls test
[user@testhost ~]$ mv test test_renamed
[user@testhost ~]$ mv temp_clone test_renamed/
[user@testhost ~]$ ls
temp test_renamed
[user@testhost ~]$ ls test_renamed/
temp_clone

cat

Kuva faili (vÔi failide) sisu.

[user@testhost ~]$ cat temp
Failsisaldus.
Lalalala...

Tasub samuti tĂ€helepanu pöörata kĂ€skudele head (kuva n faili esimestest ridadest vĂ”i baitidest) ja tail (sellest — hiljem).

tail

VÀljasta n faili viimastest ridadest vÔi baitidest.

[user@testhost ~]$ tail -1 temp
Lalalala...

VĂ€ga kasulik on valik -f — see vĂ”imaldab kuvada uusi andmeid faili reaalajas.

less

MÔnikord on tekstifail liiga suur ja ebamugav kuvada seda kÀsuga cat. Siis saab selle avada kÀsuga less: fail kuvatakse osade kaupa, on saadaval navigeerimine nende osade vahel, otsing ja muu lihtne funktsionaalsus.

[user@testhost ~]$ less temp

Samuti vÔib olla mugav kasutada less konveijeriga (pipe):

[user@testhost ~]$ grep "ERROR" /tmp/some.log | less

ps

Kuva protsesside loend.

[user@testhost ~]$ ps
    PID TTY          TIME CMD
 761020 pts/2    00:00:00 bash
 809720 pts/2    00:00:00 ps

Mina kasutan tavaliselt BSD valikuid „aux“ – kuvab kĂ”ik sĂŒsteemi protsessid (kuna protsesse vĂ”ib olla palju, kuvatasin neist ainult viis esimest, kasutades konveijeri (pipe) ja kĂ€sku head):

[user@testhost ~]$ ps aux | head -5
USER         PID %CPU %MEM    VSZ   RSS TTY     STAT START   TIME COMMAND
root           1  0.0  0.0  19692  2600 ?        Ss   Jul02   0:10 /sbin/init
root           2  0.0  0.0     0     0 ?        S    Jul02   0:03 [kthreadd]
root           4  0.0  0.0     0     0 ?        I<   Jul02   0:00 [kworker/0:0H]
root           6  0.0  0.0     0     0 ?        I<   Jul02   0:00 [mm_percpu_wq]

Paljud kasutavad ka BSD valikuid „axjf“, mis vĂ”imaldab kuvada protsesside puu (siin olen vĂ€ljundist osa eemaldanud nĂ€itamiseks):

[user@testhost ~]$ ps axjf
   PPID     PID    PGID     SID TTY        TPGID STAT   UID   TIME COMMAND
      0       2       0       0 ?             -1 S        0   0:03 [kthreadd]
      2       4       0       0 ?             -1 I<       0   0:00  _ [kworker/0:0H]
      2       6       0       0 ?             -1 I<       0   0:00  _ [mm_percpu_wq]
      2       7       0       0 ?             -1 S        0   4:08  _ [ksoftirqd/0]
...
...
...
      1    4293   4293    4293 tty6        4293 Ss+      0   0:00 /sbin/mingetty /dev/tty6
      1  532967  532964  532964 ?             -1 Sl     495   0:00 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --group td-agent --daemon /var/run/td-agent/td-agent.pid
 532967  532970  532964  532964 ?             -1 Sl     495 803:06  _ /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --use-v1-config --group td-agent --daemon /var/run/td-agent/td-agent.pid
      1  537162  533357  532322 ?             -1 Sl       0 5067:43 /usr/bin/dockerd --default-ulimit nofile=262144:262144 --dns=172.17.0.1
 537162  537177  537177  537177 ?             -1 Ssl      0 4649:28  _ docker-containerd --config /var/run/docker/containerd/containerd.toml
 537177  537579  537579  537177 ?             -1 Sl       0   4:48  |   _ docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/0ee89b20deb3cf08648cd92e1f3e3c661ccffef7a0971
 537579  537642  537642  537642 ?             -1 Ss    1000  32:11  |   |   _ /usr/bin/python /usr/bin/supervisord -c /etc/supervisord/api.conf
 537642  539764  539764  537642 ?             -1 S     1000   0:00  |   |       _ sh -c echo "READY"; while read -r line; do echo "$line"; supervisorctl shutdown; done
 537642  539767  539767  537642 ?             -1 S     1000   5:09  |   |       _ php-fpm: master process (/etc/php73/php-fpm.conf)
 539767  783097  539767  537642 ?             -1 S     1000   0:00  |   |       |   _ php-fpm: pool test
 539767  783131  539767  537642 ?             -1 S     1000   0:00  |   |       |   _ php-fpm: pool test
 539767  783185  539767  537642 ?             -1 S     1000   0:00  |   |       |   _ php-fpm: pool test
...
...
...

Sellel kÀsul on palju erinevaid valikuid, seega soovitan tutvuda dokumentatsiooniga, kui seda aktiivselt kasutada. Enamikul juhtudel piisab aga lihtsalt teadmisest, et "ps aux«.

kill

Saata signaal protsessile. Vaikimisi saadetakse signaal SIGTERM, mis lÔpetab protsessi.

[user@testhost ~]$ ps ux
USER         PID %CPU %MEM    VSZ   RSS TTY     STAT START   TIME COMMAND
531      1027147  0.0  0.0 119956  4260 ?        S    14:51   0:00 sshd: user@pts/1
531      1027149  0.0  0.0 115408  3396 pts/1    Ss   14:51   0:00 -bash
531      1027170  0.0  0.0 119956  4136 ?        R    14:51   0:00 sshd: user@pts/2
531      1027180  0.0  0.0 115408  3564 pts/2    Ss   14:51   0:00 -bash
531      1033727  0.0  0.0 107960   708 pts/1    S+   15:17   0:00 sleep 300
531      1033752  0.0  0.0 117264  2604 pts/2    R+   15:17   0:00 ps ux
[user@testhost ~]$ kill 1033727
[user@testhost ~]$ ps ux
USER         PID %CPU %MEM    VSZ   RSS TTY     STAT START   TIME COMMAND
531      1027147  0.0  0.0 119956  4260 ?        S    14:51   0:00 sshd: user@pts/1
531      1027149  0.0  0.0 115408  3396 pts/1    Ss+  14:51   0:00 -bash
531      1027170  0.0  0.0 119956  4136 ?        R    14:51   0:00 sshd: user@pts/2
531      1027180  0.0  0.0 115408  3564 pts/2    Ss   14:51   0:00 -bash
531      1033808  0.0  0.0 117268  2492 pts/2    R+   15:17   0:00 ps ux

Kuna protsessil vĂ”ivad olla signaalide töötlejad, kill ei too see alati ootuspĂ€rast tulemust — protsessi kohene lĂ”petamine. Et protsess "tappa" kindlasti, tuleb saata protsessile signaal SIGKILL. Kuid see vĂ”ib viia andmete kadumiseni (nĂ€iteks kui protsess peab enne lĂ”petamist salvestama teatud teavet kettale), seega tuleb sellise kĂ€suga ettevaatlik olla. Signaali number SIGKILL on 9, seega kĂ€su lĂŒhivariant nĂ€eb vĂ€lja jĂ€rgmine:

[user@testhost ~]$ ps ux | grep sleep
531      1034930  0.0  0.0 107960   636 pts/1    S+   15:21   0:00 sleep 300
531      1034953  0.0  0.0 110516  2104 pts/2    S+   15:21   0:00 grep --color=auto sleep
[user@testhost ~]$ kill -9 1034930
[user@testhost ~]$ ps ux | grep sleep
531      1035004  0.0  0.0 110516  2092 pts/2    S+   15:22   0:00 grep --color=auto sleep

Lisaks mainitud SIGTERM ja SIGKILL on veel mitmeid erinevaid signaale, mille nimekirja leiate kergesti internetist. Ja Àrge unustage, et signaale SIGKILL ja SIGSTOP ei saa kinni pidada vÔi ignoreerida.

ping

Saata hostile ICMP pakett ECHO_REQUEST.

[user@testhost ~]$ ping google.com
PING google.com (172.217.15.78) 56(84) bytes of data.
64 bytes from iad23s63-in-f14.1e100.net (172.217.15.78): icmp_seq=1 ttl=47 time=1.85 ms
64 bytes from iad23s63-in-f14.1e100.net (172.217.15.78): icmp_seq=2 ttl=47 time=1.48 ms
64 bytes from iad23s63-in-f14.1e100.net (172.217.15.78): icmp_seq=3 ttl=47 time=1.45 ms
64 bytes from iad23s63-in-f14.1e100.net (172.217.15.78): icmp_seq=4 ttl=47 time=1.46 ms
64 bytes from iad23s63-in-f14.1e100.net (172.217.15.78): icmp_seq=5 ttl=47 time=1.45 ms
^C
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 1.453/1.541/1.850/0.156 ms

Vaikimisi ping töötleb, kuni see kĂ€sitsi lĂ”petatakse. Seega vĂ”ib olla kasulik valik -c — saadetavate paketide arv, pĂ€rast mida ping lĂ”petatakse automaatselt. Veel ĂŒks valik, mida ma vahel kasutan — -i, pakettide vahelise saatmise intervall.

[user@testhost ~]$ ping -c 3 -i 5 google.com
PING google.com (172.217.5.238) 56(84) baitsi andmeid.
64 baiti aadressilt iad30s07-in-f238.1e100.net (172.217.5.238): icmp_seq=1 ttl=47 aeg=1.55 ms
64 baiti aadressilt iad30s07-in-f14.1e100.net (172.217.5.238): icmp_seq=2 ttl=47 aeg=1.17 ms
64 baiti aadressilt iad30s07-in-f14.1e100.net (172.217.5.238): icmp_seq=3 ttl=47 aeg=1.16 ms

--- google.com ping statistika ---
3 paketti edastatud, 3 vastu vÔetud, 0% paketi kadu, aeg 10006ms
rtt min/avg/max/mdev = 1.162/1.295/1.551/0.181 ms

ssh

OpenSSH SSH klient, mis vĂ”imaldab ĂŒhenduda kaughosti.

MacBook-Pro-User:~ user$ ssh user@11.11.22.22
Viimane sisselogimine: TeisipÀev 26. nov 11:27:39 2019 teisest hostist
[user@testhost ~]$ hostname
testhost

SSH kasutamisel on palju nĂŒansse, samuti on sellele kliendile iseloomulikke palju vĂ”imalusi, seega soovi korral (vĂ”i vajadusel) vĂ”ib selle kohta lugeda tĂ€iendavalt.

scp

Failide kopeerimiseks hostide vahel (selleks kasutatakse ssh).

[user@testhost ~]$ pwd
/home/user
[user@testhost ~]$ ls
temp  test_renamed
[user@testhost ~]$ exit
logout
Ühendus 11.11.22.22 sulgedud.
MacBook-Pro-Aleksandr:~ user$ scp user@11.11.22.22:/home/user/temp Downloads/
temp                                                                                                                                                                               100%   31     0.2KB/s   00:00
MacBook-Pro-Aleksandr:~ user$ cat Downloads/temp
Faili sisu.
Lalalala...

rsync

Samuti saab kaustade sĂŒnkroonimiseks hostide vahel kasutada rsync (-a — arhiivireĆŸiim, mis vĂ”imaldab kopeerida kogu kausta sisu "nagu on", -v — konsoolile lisainformatsiooni vĂ€ljund):

MacBook-Pro-User:~ user$ ls Downloads/user
ls: Downloads/user: Sellist faili vÔi kausta ei ole
MacBook-Pro-User:~ user$ rsync -av user@testhost:/home/user Downloads
failide loendi vastuvÔtmine ... tehtud
user/
user/.bash_history
user/.bash_logout
user/.bash_profile
user/.bashrc
user/.lesshst
user/.mongorc.js
user/.viminfo
user/1
user/man_signal
user/man_signal_error_log
user/temp
user/.ssh/
user/.ssh/authorized_keys
user/test/
user/test/created_today
user/test/temp_clone

saadetud 346 baiti  saadud 29210 baiti  11822.40 baiti/sekundis
total size is 28079  speedup is 0.95
MacBook-Pro-User:~ user$ ls -a Downloads/user
.                  .bash_history        .bash_profile        .lesshst             .ssh                 1                  man_signal_error_log test
..                 .bash_logout         .bashrc             .mongorc.js          .viminfo             man_signal           temp

echo

Kuvab ekraanile teksti.

[user@testhost ~]$ echo "Hello"
Tere

Siin vÀÀrivad tĂ€helepanu valikud -n — ei lisa rida lĂ”ppu reavahetusega ja -e — kaasata ekraani tĂ”lgendamine lĂ€bi "".

[user@testhost ~]$ echo "tHellon"
tHellon
[user@testhost ~]$ echo -n "tHellon"
tHellon[user@testhost ~]$
[user@testhost ~]$ echo -ne "tHellon"
	Hello

Selle kÀsu abil saab ka keskkonnamuutujate vÀÀrtusi kuvada. NÀiteks Linuxi viimase lÔpetatud kÀsu vÀljundkood salvestatakse erimuutujasse $?, ja seega saab teada, milline viga viimases kÀivitatud rakenduses tekkis:

[user@testhost ~]$ ls    # viga ei tule
1  man_signal  man_signal_error_log  temp  test
[user@testhost ~]$ echo $?    # saame 0 — viga ei olnud
0
[user@testhost ~]$ ls qwerty    # saab olema viga
ls: cannot access qwerty: No such file or directory
[user@testhost ~]$ echo $?    # saame 2 — shell builtins'i vale kasutamine (Bashi dokumentatsiooni kohaselt)
2
[user@testhost ~]$ echo $?    # viimane echo töötas probleemideta, saame 0
0

telnet

TELNET protokolli klient. Kasutatakse kommunikatsiooniks teise hostiga.

[user@testhost ~]$ telnet example.com 80
Trying 93.184.216.34...
Connected to example.com.
Escape character is '^]'.
GET / HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Tue, 26 Nov 2019 11:59:18 GMT
Etag: "3147526947+gzip+ident"
Expires: Tue, 03 Dec 2019 11:59:18 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (dcb/7F3B)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256

... siin oli vastuse keha, mille ma kÀsitsi lÔikasin ...

Kui on vaja kasutada TLS-protokolli (meelespea, et SSL on juba ammu aegunud), siis telnet selleks ei sobi. Aga sobib klient openssl:

NÀide openssl kasutamisest GET pÀringule vastuse kuvamisega

[user@testhost ~]$ openssl s_client -connect example.com:443
CONNECTED(00000003)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
verify return:1
depth=0 C = US, ST = California, L = Los Angeles, O = Internet Corporation for Assigned Names and Numbers, OU = Technology, CN = www.example.org
verify return:1
---
Certificate chain
 0 s:/C=US/ST=California/L=Los Angeles/O=Internet Corporation for Assigned Names and Numbers/OU=Technology/CN=www.example.org
   i:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
 1 s:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
 2 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIHQDCCBiigAwIBAgIQD9B43Ujxor1NDyupa2A4/jANBgkqhkiG9w0BAQsFADBN
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTgxMTI4MDAwMDAwWhcN
MjAxMjAyMTIwMDAwWjCBpTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju
aWExFDASBgNVBAcTC0xvcyBBbmdlbGVzMTwwOgYDVQQKEzNJbnRlcm5ldCBDb3Jw
b3JhdGlvbiBmb3IgQXNzaWduZWQgTmFtZXMgYW5kIE51bWJlcnMxEzARBgNVBAsT
ClRlY2hub2xvZ3kxGDAWBgNVBAMTD3d3dy5leGFtcGxlLm9yZzCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBANDwEnSgliByCGUZElpdStA6jGaPoCkrp9vV
rAzPpXGSFUIVsAeSdjF11yeOTVBqddF7U14nqu3rpGA68o5FGGtFM1yFEaogEv5g
rJ1MRY/d0w4+dw8JwoVlNMci+3QTuUKf9yH28JxEdG3J37Mfj2C3cREGkGNBnY80
eyRJRqzy8I0LSPTTkhr3okXuzOXXg38ugr1x3SgZWDNuEaE6oGpyYJIBWZ9jF3pJ
QnucP9vTBejMh374qvyd0QVQq3WxHrogy4nUbWw3gihMxT98wRD1oKVma1NTydvt
hcNtBfhkp8kO64/hxLHrLWgOFT/l4tz8IWQt7mkrBHjbd2XLVPkCAwEAAaOCA8Ew
ggO9MB8GA1UdIwQYMBaAFA+AYRyCMWHVLyjnjUY4tCzhxtniMB0GA1UdDgQWBBRm
mGIC4AmRp9njNvt2xrC/oW2nvjCBgQYDVR0RBHoweIIPd3d3LmV4YW1wbGUub3Jn
ggtleGFtcGxlLmNvbYILZXhhbXBsZS5lZHWCC2V4YW1wbGUubmV0ggtleGFtcGxl
Lm9yZ4IPd3d3LmV4YW1wbGUuY29tgg93d3cuZXhhbXBsZS5lZHWCD3d3dy5leGFt
cGxlLm5ldDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
AQUFBwMCMGsGA1UdHwRkMGIwL6AtoCuGKWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNv
bS9zc2NhLXNoYTItZzYuY3JsMC+gLaArhilodHRwOi8vY3JsNC5kaWdpY2VydC5j
b20vc3NjYS1zaGEyLWc2LmNybDBMBgNVHSAERTBDMDcGCWCGSAGG/WwBATAqMCgG
CCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMAgGBmeBDAEC
AjB8BggrBgEFBQcBAQRwMG4wJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj
ZXJ0LmNvbTBGBggrBgEFBQcwAoY6aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t
L0RpZ2lDZXJ0U0hBMlNlY3VyZVNlcnZlckNBLmNydDAMBgNVHRMBAf8EAjAAMIIB
fwYKKwYBBAHWeQIEAgSCAW8EggFrAWkAdwCkuQmQtBhYFIe7E6LMZ3AKPDWYBPkb
37jjd80OyA3cEAAAAWdcMZVGAAAEAwBIMEYCIQCEZIG3IR36Gkj1dq5L6EaGVycX
sHvpO7dKV0JsooTEbAIhALuTtf4wxGTkFkx8blhTV+7sf6pFT78ORo7+cP39jkJC
AHYAh3W/51l8+IxDmV+9827/Vo1HVjb/SrVgwbTq/16ggw8AAAFnXDGWFQAABAMA
RzBFAiBvqnfSHKeUwGMtLrOG3UGLQIoaL3+uZsGTX3MfSJNQEQIhANL5nUiGBR6g
l0QlCzzqzvorGXyB/yd7nttYttzo8EpOAHYAb1N2rDHwMRnYmQCkURX/dxUcEdkC
wQApBo2yCJo32RMAAAFnXDGWnAAABAMARzBFAiEA5Hn7Q4SOyqHkT+kDsHq7ku7z
RDuM7P4UDX2ft2Mpny0CIE13WtxJAUr0aASFYZ/XjSAMMfrB0/RxClvWVss9LHKM
MA0GCSqGSIb3DQEBCwUAA4IBAQBzcIXvQEGnakPVeJx7VUjmvGuZhrr7DQOLeP4R
8CmgDM1pFAvGBHiyzvCH1QGdxFl6cf7wbp7BoLCRLR/qPVXFMwUMzcE1GLBqaGZM
v1Yh2lvZSLmMNSGRXdx113pGLCInpm/TOhfrvr0TxRImc8BdozWJavsn1N2qdHQu
N+UBO6bQMLCD0KHEdSGFsuX6ZwAworxTg02/1qiDu7zW7RyzHvFYA4IAjpzvkPIa
X6KjBtpdvp/aXabmL95YgBjT8WJ7pqOfrqhpcmOBZa6Cg6O1l4qbIFH/Gj9hQB5I
0Gs4+eH6F9h3SojmPTYkT+8KuZ9w84Mn+M8qBXUQoYoKgIjN
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Los Angeles/O=Internet Corporation for Assigned Names and Numbers/OU=Technology/CN=www.example.org
issuer=/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
---
No client certificate CA names sent
Peer signing digest: SHA256
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 4643 bytes and written 415 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol : TLSv1.2
    Cipher   : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: 91950DC50FADB57BF026D2661E6CFAA1F522E5CA60D2310E106EE0E0FD6E70BD
    Session-ID-ctx:
    Master-Key: 704E9145253EEB4E9DC47E3DC6725D296D4A470EA296D54F71D65E74EAC09EB096EA1305CBEDD9E7020B8F72FD2B68A5
    Key-Arg : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - 68 84 4e 77 be e3 f5 00-49 c5 44 40 53 4d b9 61   h.Nw....I.D@SM.a
    0010 - c9 fe df e4 05 51 d0 53-ae cf 89 4c b6 ef 6c 9e   .....Q.S...L..l.
    0020 - fe 12 9a f0 e8 e5 4e 87-42 89 ac af ca e5 4a 85   ......N.B.....J.
    0030 - 38 08 26 e3 22 89 08 b5-62 c0 8b 7e b8 05 d3 54   8.&amp;."...b..~...T
    0040 - 8c 24 91 a7 b4 4f 79 ad-36 59 7c 69 2d e5 7f 62   .$...Oy.6Y|i-..b
    0050 - f6 73 a3 8b 92 63 c1 e3-df 78 ba 8c 5a cc 82 50   .s...c...x..Z..P
    0060 - 33 4e 13 4b 10 e4 97 31-cc b4 13 65 45 60 3e 13   3N.K...1...eE`&gt;.
    0070 - ac 9e b1 bb 4b 18 d9 16-ea ce f0 9b 5b 0c 8b bf   ....K.......[...
    0080 - fd 78 74 a0 1a ef c2 15-2a 0a 14 8d d1 3f 52 7a   .xt.....*....?Rz
    0090 - 12 6b c7 81 15 c4 c4 af-7e df c2 20 a8 dd 4b 93   .k......~.. ..K.

    Start Time: 1574769867
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
GET / HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Tue, 26 Nov 2019 12:04:38 GMT
Etag: "3147526947+ident"
Expires: Tue, 03 Dec 2019 12:04:38 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (dcb/7EC8)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256

<!doctype html>
<html>
<head>
    <title>Näide Domeen</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;

    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>
</head>

<body>
<div>
    <h1>Näide Domeen</h1>
    <p>See domeen on mõeldud näidisteks dokumentides. Seda domeeni võid kasutada
    kirjanduses ilma eelneva koordineerimise või loata.</p>
    <p><a href="https://www.iana.org/domains/example">Rohkem teavet...</a></p>
</div>
</body>
</html>

TĂŒĂŒpiliste probleemide lahendamine Linuxis

Muuda faili omanikku

Faili vÔi katalooge saab omaniku muutmiseks kasutada kÀsku chown:

[user@testhost ~]$ chown user:user temp
[user@testhost ~]$ ls -l temp
-rw-rw-r-- 1 user user 31 Nov 26 11:09 temp

Selle kĂ€su parameetriks tuleb anda uus omanik ja grupp (valikuline), eraldatuna koolonitega. Samuti vĂ”ib olla kasulik, kui muudetakse ka katalooge -R — siis muutuvad omanike Ă”igused ka selle katalooge sisu jaoks.

Muuda faili ligipÀÀs Ôigusi

See ĂŒlesanne lahendatakse kĂ€sku abil chmod. NĂ€itena toon vĂ€lja Ă”iguste seadistamise "omanikule lubatud lugemine, kirjutamine ja tĂ€itmine, grupile lubatud lugemine ja kirjutamine, kĂ”ikidele teistele — mitte midagi":

[user@testhost ~]$ ls -l temp
-rw-rw-r-- 1 user user 31 Nov 26 11:09 temp
[user@testhost ~]$ chmod 760 temp
[user@testhost ~]$ ls -l temp
-rwxrw---- 1 user user 31 Nov 26 11:09 temp

Esimene 7 (see on 0b111 binaarformaadis) parameetris tĂ€hendab "kĂ”iki Ă”igusi omaniku jaoks", teine 6 (see on 0b110 binaarformaadis) — "lugemine ja kirjutamine", ning 0 — see tĂ€hendab, et teistele ei ole Ă”igusi. Bitaalne mask koosneb kolmest bitist: kĂ”ige noorem ("parem") bit vastutab tĂ€itmise eest, jĂ€rgmine bit ("keskne") — kirjutamise eest, ja kĂ”ige vanem ("vasak") — lugemise eest.
Samuti saab Ă”igusi mÀÀrata spetsiaalsete sĂŒmbolite abil (mnemooniline sĂŒntaks). NĂ€iteks jĂ€rgmises nĂ€ites eemaldatakse esmalt tĂ€itmisĂ”igused praeguselt kasutajalt ja seejĂ€rel taastatakse need:

[user@testhost ~]$ ls -l temp
-rwxrw---- 1 user user 31 Nov 26 11:09 temp
[user@testhost ~]$ chmod -x temp
[user@testhost ~]$ ls -l temp
-rw-rw---- 1 user user 31 Nov 26 11:09 temp
[user@testhost ~]$ chmod +x temp
[user@testhost ~]$ ls -l temp
-rwxrwx--x 1 user user 31 Nov 26 11:09 temp

Sellel kĂ€sul on palju kasutusvĂ”imalusi, seega soovitan lugeda selle kohta rohkem (eriti mnemoonilise sĂŒntaksi kohta, nĂ€iteks, siin).

Kuvada binaarfaili sisu

Seda saab teha utiliidi hexdump. Allpool on toodud nÀited selle kasutamisest.

[user@testhost ~]$ cat temp
File'i sisu.
Lalalala...
[user@testhost ~]$ hexdump -c temp
0000000   C   o   n   t   e   n   t       o   f       a       f   i   l
0000010   e   .  n   L   a   l   a   l   a   l   a   .   .   .  n
000001f
[user@testhost ~]$ hexdump -x temp
0000000    6f43    746e    6e65    2074    666f    6120    6620    6c69
0000010    2e65    4c0a    6c61    6c61    6c61    2e61    2e2e    000a
000001f
[user@testhost ~]$ hexdump -C temp
00000000  43 6f 6e 74 65 6e 74 20  6f 66 20 61 20 66 69 6c  |File'i sisu.|
00000010  65 2e 0a 4c 61 6c 61 6c  61 6c 61 2e 2e 2e 0a     |e..Lalalala....|
0000001f

Selle utiliidi abil saab andmeid kuvada ka teistes formaatides, kuid kÔige sagedamini vÔivad kasulikud olla just need variandid selle kasutamisest.

Otsida faile

Faili leidmine nime osade jÀrgi kataloogihierarhias on vÔimalik kÀsuga find:

[user@testhost ~]$ find test_dir/ -name "*le*"
test_dir/file_1
test_dir/file_2
test_dir/subdir/file_3

Samuti on saadaval teised otsimise valikud ja filtrid. NÀiteks saab nii leida faile kaustast test, mis on loodud rohkem kui 5 pÀeva tagasi:

[user@testhost ~]$ ls -ltr test
total 0
-rw-rw-r-- 1 user user 0 Nov 26 10:46 temp_clone
-rw-rw-r-- 1 user user 0 Dec  4 10:39 created_today
[user@testhost ~]$ find test/ -type f -ctime +5
test/temp_clone

Otsida teksti failides

Selle ĂŒlesande tĂ€itmiseks aitab kĂ€sk grep. Sellel on palju kasutusvĂ”imalusi, siin on nĂ€itena toodud kĂ”ige lihtsam.

[user@testhost ~]$ grep -nr "content" test_dir/
test_dir/file_1:1:test content for file_1
test_dir/file_2:1:test content for file_2
test_dir/subdir/file_3:1:test content for file_3

Üks populaarsest viisist kĂ€su kasutamiseks grep — kasutamine sellel konveieril (pipe):

[user@testhost ~]$ sudo tail -f /var/log/test.log | grep "ERROR"

Valik -v lubab luua efekti grep‘ast tagasi — kuvatakse ainult read, mis ei sisalda mustrit, mis edastatakse grep.

Vaata installitud pakette

Ühtset kĂ€sku ei ole, sest see sĂ”ltub Linuxi distributsioonist ja kasutatavast paketihaldurist. TĂ”enĂ€oliselt aitab ĂŒks jĂ€rgmistest kĂ€skudest:

yum list installed
apt list --installed
zypper se —installed-only
pacman -Qqe
dpkg -l
rpm -qa

Vaata, kui palju ruumi vÔtavad kaustade puu

Üks vĂ”imalus kĂ€su kasutamiseks du:

[user@testhost ~]$ du -h -d 1 test_dir/
8,0K test_dir/subdir
20K test_dir/

Saab muuta parameetri vÀÀrtust -d, et saada pÔhjalikumat teavet kaustade puu kohta. Samuti saab kÀsku kasutada koos sort:

[user@testhost ~]$ du -h -d 1 test_dir/ | sort -h
8,0K test_dir/subdir
16K test_dir/subdir_2
36K test_dir/
[user@testhost ~]$ du -h -d 1 test_dir/ | sort -h -r
36K test_dir/
16K test_dir/subdir_2
8,0K test_dir/subdir

Valik -h selle kÀsu sort vÔimaldab sorteerida inimloetavaks vorminguks sisestatud suurused (nt 1K, 2G), valik -r vÔimaldab andmeid sorteerida vastupidises jÀrjekorras.

„Otsi ja asenda” failis, failides direktoriumis

See toiming viiakse lĂ€bi utiliidiga sed (ilma liputa g lĂ”pus asendatakse ainult esimene esinemine „old-text” reas):

sed -i 's/old-text/new-text/g' input.txt

Seda saab kasutada korraga mitme faili jaoks:

[user@testhost ~]$ cat test_dir/file_*
test content for file_1
test content for file_2
[user@testhost ~]$ sed -i 's/test/edited/g' test_dir/file_*
[user@testhost ~]$ cat test_dir/file_*
edited content for file_1
edited content for file_2

Kuvada veerg vÀljundist

Selle ĂŒlesande tĂ€itmiseks aitab awk. Selles nĂ€ites kuvatakse kĂ€su vĂ€ljundi teine veerg `ps ux`:

[user@testhost ~]$ ps ux | awk '{print $2}'
PID
11023
25870
25871
25908
25909

Samas on oluline meeles pidada, et awk omab palju rikkalikumat funktsionaalsust, seega tasub tekstiga seotud tööde puhul lugeda sellest kÀsklusest rohkem.

Uuri IP-aadressi hostinime jÀrgi

Selleks aitab ĂŒks jĂ€rgmistest kĂ€skudest:

[user@testhost ~]$ host ya.ru
yа.ru has address 87.250.250.242
yа.ru has IPv6 address 2a02:6b8::2:242
yа.ru mail is handled by 10 mx.yandex.ru.

[user@testhost ~]$ dig +short ya.ru
87.250.250.242

[user@testhost ~]$ nslookup ya.ru
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: ya.ru
Address: 87.250.250.242

VÔrguteave

Seda saab kasutada ifconfig:

[user@testhost ~]$ ifconfig
eth0: flags=4163 mtu 1500
        inet 47.89.93.67 netmask 255.255.224.0 broadcast 47.89.95.255
        inet6 fd90::302:57ff:fe79:1 prefixlen 64  scopeid 0x20
        ether 04:01:57:79:00:01 txqueuelen 1000  (Ethernet)
        RX packets 11912135 bytes 9307046034 (8.6 GiB)
        RX errors 0 dropped 0 overruns 0 frame 0
        TX packets 14696632 bytes 2809191835 (2.6 GiB)
        TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0


lo: flags=73 mtu 65536
        inet 127.0.0.1 netmask 255.0.0.0
        inet6 ::1 prefixlen 128 scopeid 0x10
        loop txqueuelen 0 (Local Loopback)
        RX packets 10 bytes 866 (866.0 B)
        RX errors 0 dropped 0 overruns 0 frame 0
        TX packets 10 bytes 866 (866.0 B)
        TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Ja vÔib ka ip:

[user@testhost ~]$ ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 04:01:57:79:00:01 brd ff:ff:ff:ff:ff:ff
    inet 47.89.93.67/19 brd 47.89.95.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fd90::302:57ff:fe79:1/64 scope link
       valid_lft forever preferred_lft forever
3: ip_vti0:  mtu 1500 qdisc noop state DOWN group default
    link/ipip 0.0.0.0 brd 0.0.0.0

Samuti, kui teid huvitab ainult IPv4, saate lisada valiku -4:

[user@testhost ~]$ ip -4 a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 47.89.93.67/19 brd 47.89.95.255 scope global eth0
       valid_lft forever preferred_lft forever

Vaata avatud porte

Selleks kasutatakse utiliiti netstat. NĂ€iteks, et nĂ€ha kĂ”iki kuulavaid TCP ja UDP porte koos protsessi PID’ga, mis porti kuulab, ning porti numbrilises kujutises, peate seda kasutama jĂ€rgmiste valikute abil:

[user@testhost ~]$ netstat -lptnu

SĂŒsteemi teave

Seda teavet saab saada kÀsu abil uname.

[user@testhost ~]$ uname -a
Linux alexander 3.10.0-123.8.1.el7.x86_64 #1 SMP Mon Sep 22 19:06:58 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Et mÔista, millises formaadis vÀljund toimub, vÔite pöörduda helpselle kÀsu kohta:

[user@testhost ~]$ uname --help
Kasutamine: uname [VALIK]

Prindib teatud sĂŒsteemi teavet. Kui VALIK ei ole mÀÀratud,
siis eeldatakse -s.

  -a, --all           trĂŒki kogu teave, jĂ€rgmist korda,
                     vÀlja arvatud -p ja -i, kui need pole teada:
  -s, --kernel-name   prindi tuum nime
  -n, --nodename      prindi masin nÔrgendamise nime
  -r, --release       prindi operatsioonisĂŒsteemi versioon
  -v, --kernel-version prindi tuum versioon
  -m, --machine       prindi masina seadme tĂŒĂŒp
  -p, --processor     prindi protsessori tĂŒĂŒp vĂ”i „tundmatu”
  -i, --hardware-platform prindi riistvara platvormi tĂŒĂŒp vĂ”i „tundmatu”
  -o, --operating-system prindi operatsioonisĂŒsteemi nimi
      --help         kuva see abiteave ja vÀlju
      --version      kuva versiooni teavet ja vÀlju

MĂ€luteave

Kuna palju operatiivmÀlu on kasutatud vÔi vaba, saab kasutada kÀsku free.

[user@testhost ~]$ free -h
                total        used        free      shared  buff/cache   available
Mem:            3,9G        555M        143M         56M        3,2G        3,0G
Swap:           0B          0B         0B

FailisĂŒsteemide teave (vaba ruum kettal)

Meeskond df vĂ”imaldab nĂ€ha, kui palju ruumi on vaba ja kasutatud monteeritud failisĂŒsteemidel.

[user@testhost ~]$ df -hT
FailisĂŒsteem TĂŒĂŒp      Suurus Kasutatud  Vaba Kasutatud% Montitud
/dev/vda1        ext4        79G        21G   55G           27% /
devtmpfs         devtmpfs   2,0G          0  2,0G            0% /dev
tmpfs           tmpfs      2,0G          0  2,0G            0% /dev/shm
tmpfs           tmpfs      2,0G        57M  1,9G            3% /run
tmpfs           tmpfs      2,0G          0  2,0G            0% /sys/fs/cgroup
tmpfs           tmpfs      396M          0  396M            0% /run/user/1001

Valik -T nĂ€itab, et failisĂŒsteemi tĂŒĂŒp peab olema vĂ€lja trĂŒkitud.

Ülesannete ja sĂŒsteemi erinevate statistika teave

Kasutatakse kÀsku top. Selle kaudu saab erinevat teavet: nÀiteks protsesside tipp operatiivmÀlu kasutamise jÀrgi vÔi protsesside tipp protsessori aja kasutamise jÀrgi. Samuti prindib see teavet mÀlu, CPU, tööaega ja LA (koormuse keskmine).

[user@testhost ~]$ top | head -10
top - 17:19:13 up 154 days, 6:59, 3 users, load average: 0.21, 0.21, 0.27
Tasks: 2169 total, 2 running, 2080 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.7%us, 0.7%sy, 0.0%ni, 97.5%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 125889960k total, 82423048k used, 43466912k free, 16026020k buffers
Swap: 0k total, 0k used, 0k free, 31094516k cached

    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  25282 user      20   0 16988 3936 1964 R  7.3  0.0   0:00.04 top
   4264 telegraf  20   0 2740m 240m  22m S  1.8  0.2  23409:39 telegraf
   6718 root      20   0 35404 4768 3024 S  1.8  0.0   0:01.49 redis-server

See on tööriist, millel on palju funktsioone, nii et kui kavatsete seda sageli kasutada, on parem tutvuda selle dokumentatsiooniga.

VÔrgu liikluse jÀÀdvustamine

Linuxis kasutatakse vÔrgu liikluse redigeerimiseks tööriista tcpdump. Traffic-dumpimiseks porti 12345, saate kasutada jÀrgmist kÀsku:

[user@testhost ~]$ sudo tcpdump -i any -A port 12345

Valik -A tĂ€hendab, et meil on ASCII-vĂ€ljund (seetĂ”ttu on see hea tekstiprotokollide jaoks), -i any nĂ€itab, et meid ei huvita vĂ”rgu liides, port — millise porti liiklust jÀÀdvustada. Asetage port on vĂ”imalik kasutada host, vĂ”i kombinatsioon host ja port (host A and port X). Samuti vĂ”ib kasulik olla valik -n — mitte konverteerida aadresse hosti nimedeks vĂ€ljundis.
Mis juhtub, kui liiklus on binaarne? Siis aitab meid valik -X — andmete vĂ€ljastamine hex ja ASCII kujul:

[user@testhost ~]$ sudo tcpdump -i any -X port 12345

Samuti tuleb arvestada, et mĂ”lemal juhul vĂ€ljundis kuvatakse IP packetid, seega nĂ€ete, et igaĂŒhe alguses on binaarsed IP ja TCP pĂ€ised. Siin on nĂ€ide vĂ€ljundist pĂ€ringu "123" saatmisest serverile, mis kuulab porti 12345:

[user@testhost ~]$ sudo tcpdump -i any -X port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
14:27:13.224762 IP localhost.49794 > localhost.italk: Flags [P.], seq 2262177478:2262177483, ack 3317210845, win 342, options [nop,nop,TS val 3196604972 ecr 3196590131], length 5
    0x0000:  4510 0039 dfb6 4000 4006 5cf6 7f00 0001  E..9..@.@......
    0x0010:  7f00 0001 c282 3039 86d6 16c6 c5b8 9edd  ......09........
    0x0020:  8018 0156 fe2d 0000 0101 080a be88 522c  ...V.-........R,
    0x0030:  be88 1833 3132 330d 0a00 0000 0000 0000  ...3123.........
    0x0040:  0000 0000 0000 0000 00                     ..........

VĂ€ljundi asemel

Muidugi, Linuxis on veel palju huvitavaid asju, millest lugeda Habrast, StackOverflowist ja teistelt saitidelt (nĂ€iteks mainin The Art of a Command Line, mis on saadaval ka tĂ”lkes). SĂŒsteemi administraatorid ja DevOps kasutavad serverite konfigureerimiseks palju rohkem kĂ€ske ja utiliite, kuid isegi testijatel vĂ”ib puududa loetletud kĂ€ske. VĂ”ib olla vajalik kontrollida mĂ”ne keerulise kliendi ja serveri ajutise viivituse Ă”igsust vĂ”i serveri tööd, kui kettal pole vaba ruumi. Juba rÀÀkimata nĂ€iteks Dockerist, mida tĂ€napĂ€eval paljuski ettevĂ”tetes aktiivselt kasutatakse. Oleks huvitav, kui jĂ€tkaksime selle juhendi raames mitmete erinevate Linuxi konsooli utiliitide kasutamise nĂ€idete analĂŒĂŒsimist teenuste testimise kĂ€igus? Jagage ka oma lemmikute kĂ€skude loetelu kommentaarides 🙂

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster