Fermanên bingehîn ên Linux ji bo ceribandin û bêtir

Pêşniyar

Silav hemû! Navê min Sasha ye, û ez ji şeş salan zêdetir e ku pişta (karûbarên Linux û API) ceribandim. Fikra gotarê piştî daxwazek din a hevalek ceribandinê ji min re hat ku ez jê re bibêjim ka ew dikare berî hevpeyivînek li ser fermanên Linux-ê bixwîne. Bi gelemperî, berendamek ji bo pozîsyonek endezyar QA pêdivî ye ku emrên bingehîn zanibe (heke, bê guman, ew bi Linux re bixebitin), lê hûn çawa dizanin ku dema ku hûn ji bo hevpeyivînek amade dikin heke hindik hebe hûn zanibin ka kîjan ferman hêjayî xwendinê ne. an ezmûnek bi Linux re tune?

Ji ber vê yekê, her çend ev jixwe gelek caran li ser hatiye nivîsandin, dîsa jî min biryar da ku gotarek din binivîsim "Linux ji bo destpêk" û li vir fermanên bingehîn ên ku hûn hewce ne ku berî her hevpeyivînek di nav dezgehek (an pargîdaniyek) de ku Linux bikar tîne zanibin navnîş bikim. Min fikir kir ka kîjan ferman û karûbar û bi kîjan parameteran ez pir caran bikar tînim, ji hevkarên xwe bertek berhev kir, û ew hemî di yek gotarê de berhev kir. Gotar ji 3 beşan tê dabeş kirin: Pêşîn, agahdariya kurt li ser bingehên I/O di termînala Linux de, dûv re nihêrînek li ser fermanên herî bingehîn, û beşa sêyemîn diyar dike ka meriv çawa pirsgirêkên hevpar di Linux de çareser dike.

Her ferman gelek vebijark hene, dê hemî li vir neyên navnîş kirin. Hûn dikarin her gav têkevin `mêr <ferman>`an`<ferman> --alîkarî` ji bo bêtir fêrbûna tîmê.

Nimûne:

[user@testhost ~]$ mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.

Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'mkdir invocation'

Ger fermanek pir dirêj bigire ku temam bibe, hûn dikarin wê bi tikandina li konsolê biqedînin Ctrl + C (nîşanek ji pêvajoyê re tê şandin NIGAN).

Hinekî li ser derketina fermanê

Dema ku pêvajoyek di Linux-ê de dest pê dike, ji bo wê pêvajoyê 3 herikên daneya standard têne afirandin: stdin, stdout и stderr. Ew bi rêzê 0, 1 û 2 têne hejmartin. Lê niha em eleqedar in stdout û, bi rêjeyek kêmtir, stderr. Ji navan meriv hêsan e ku meriv texmîn bike stdout ji bo derxistina daneyan tê bikaranîn, û stderr - ji bo nîşankirina peyamên çewtiyê. Ji hêla xwerû dema ku fermanek li ser Linux-ê dimeşîne stdout и stderr Hemî agahdarî ji konsolê derxîne, lêbelê, heke derketina fermanê mezin be, dibe ku rehet be ku meriv wê beralî pelek bike. Ev dikare were kirin, bo nimûne, bi vî rengî:

[user@testhost ~]$ man signal > man_signal

Ger em naveroka pelê derxînin man_signal, wê hingê em ê bibînin ku heke em bi tenê fermanê bimeşînin ew ê bi çi rengî besînyala mêr`.

Operasyona beralî bike `>` default dike stdout. Hûn dikarin beralîkirinek diyar bikin stdout bi eşkereyî: `1>`. Bi heman awayî, hûn dikarin verastkirinê diyar bikin stderr:`2>`. Hûn dikarin van operasyonan tevlihev bikin û bi vî rengî derketina fermana normal û derketina peyama xeletiyê ji hev veqetînin:

[user@testhost ~]$ man signal 1> man_signal 2> man_signal_error_log

Beralîkirin û stdoutû stderr di yek pelê de wiha ye:

[user@testhost ~]$ man signal > man_signal 2>&1

Operasyona beralî bike `2> & 1` tê wateya beralîkirin stderr li heman cihê ku derhêneriya stdout.

Amûrek din a hêsan a ji bo xebata bi I/O re (an jî, ew ji bo ragihandina navpêvajoyê amûrek hêsan e) ev e lûle (an jî conveyor). Pipelines bi gelemperî ji bo ragihandina gelek fermanan têne bikar anîn: stdout ferman têne veguhestin stdin paşê, û bi vî awayî di zincîrê de:

[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

Fermanên bingehîn ên Linux

pwd

Peldanka heyî (xebatkar) nîşan bide.

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

rojek

Dîrok û demjimêra pergalê ya heyî nîşan bide.

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

w

Ev ferman nîşan dide ku kî têketin pergalê. Wekî din, dema xebatê û LA (navîna barkirinê) jî li ser ekranê têne xuyang kirin.

[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

ls

Naveroka pelrêçek çap bike. Ger hûn rêyê derbas nekin, naveroka pelrêça heyî dê were xuyang kirin.

[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

Bi kesane, ez pir caran vebijarkan bikar tînim -l (forma navnîşa dirêj - derdixe stûnek bi agahdariya zêde di derbarê pelan de), -t (li gorî dema guherandina pelê / pelrêçê veqetandin) û -r (Sertekirina berevajî - bi hev re -t pelên herî dawî dê li jêr bin):

[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

2 navên pelrêça taybetî hene: "."And"..". Ya yekem tê wateya pelrêça heyî, ya duyemîn tê wateya pelrêça dêûbav. Ew dikarin bi taybetî ji bo karanîna di tîmên cihêreng de hêsan bin 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/
qqq

Di heman demê de vebijarkek bikêr heye ku pelên veşartî nîşan bide (dest bi ".") - -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

Hûn dikarin vebijarkê jî bikar bînin -h - encam di forma mirovî ya xwendinê de (guh bidin mezinahiya pelan):

[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

Peldanka heyî biguherînin.

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

Heke hûn navê pelrêçê wekî arguman derbas nekin, guhêrbara jîngehê dê were bikar anîn $ HOME, ango pelrêça malê. Her weha dibe ku karanîna wê hêsan be~` wateyek karaktera taybetî ye $ HOME:

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

mkdir

Derhênerek çêbikin.

[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

Carinan hûn hewce ne ku avahiyek pelrêça taybetî biafirînin: Mînakî, pelrêçek di nav pelrêçekê de ku tune ye. Ji bo ku çend caran li pey hev nekeve hundir mkdir, hûn dikarin vebijarkê bikar bînin -p - ew dihêle hûn di hiyerarşiyê de hemî pelrêçayên winda biafirînin. Her weha bi vê vebijarkê mkdir heke pelrêça hebe dê xeletiyek venegere.

[user@testhost ~]$ ls
qqq  test
[user@testhost ~]$ mkdir test2/subtest
mkdir: cannot create directory ‘test2/subtest’: No such file or directory
[user@testhost ~]$ mkdir -p test2/subtest
[user@testhost ~]$ ls
qqq  test  test2
[user@testhost ~]$ ls test2/
subtest
[user@testhost ~]$ mkdir test2/subtest
mkdir: cannot create directory ‘test2/subtest’: File exists
[user@testhost ~]$ mkdir -p test2/subtest
[user@testhost ~]$ ls test2/
subtest

rm

Pelek jêbirin.

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

Dibe -r destûrê dide te ku hûn pelrêçan bi hemî naverokên wan re vegerî jêbirin, vebijark -f destûrê dide te ku hûn gava jêbirinê xeletiyan paşguh bikin (mînakî, di derheqê pelek tine de). Van vebijarkan rê didin, bi gelemperî, jêbirina garantî ya tevahiya hiyerarşiya pel û peldankan (heke bikarhêner xwedî mafên ku wiya bike), ji ber vê yekê, divê ew bi hişyarî werin bikar anîn (mînakek henekek klasîk ev e "rm-rf /", di bin hin mercan de, dê we jê bibe, heke ne tevahiya pergalê, wê hingê gelek pelên ji bo performansa wê girîng in).

[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

Pelê an pelrêçek kopî bikin.

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

Vebijarkên vê fermanê jî hene -r и -f, ew dikarin werin bikar anîn da ku pê ewle bibin ku hiyerarşiya peldankan û peldankan li cîhek din were kopî kirin.

mv

Pelê an pelrêçekê biguhezînin an biguherînin.

[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

pisîk

Naveroka pelê (an pelan) çap bikin.

[user@testhost ~]$ cat temp
Content of a file.
Lalalala...

Her weha hêja ye ku bala xwe bidin fermanan serê (karûabr n rêzên yekem an jî bytên pelê) û terrî (bêtir li ser wê paşê).

terrî

Vekişîn n xêzên dawîn an bytên pelê.

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

Vebijêrk pir bikêr e -f - ew dihêle hûn di demek rast de daneyên nû di pelê de nîşan bidin.

kêmtir

Carinan pelê nivîsê pir mezin e û nerehet e ku meriv wê bi fermanê nîşan bide pisîk. Hingê hûn dikarin bi karanîna fermanê vekin kêmtir: Pelê dê di beşan de were derxistin; navîgasyon di van beşan de, lêgerîn û fonksiyonên din ên hêsan hene.

[user@testhost ~]$ less temp

Her weha dibe ku karanîna wê hêsan be kêmtir bi konveyer (lûle):

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

ps

Lîsteya pêvajoyên.

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

Ez bixwe bi gelemperî vebijarkên BSD bikar tînim "hûn"- Hemî pêvajoyên di pergalê de nîşan bide (ji ber ku dibe ku gelek pêvajo hebin, min tenê 5 ji wan yekem bi karanîna boriyê nîşan da (lûle) û tîm serê):

[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]

Pir jî vebijarkên BSD bikar tînin "axjf", ku dihêle hûn dara pêvajoyê nîşan bidin (li vir min beşek ji encam ji bo xwenîşandanê jê kir):

[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
...
...
...

Vê fermanê gelek vebijarkên cihêreng hene, ji ber vê yekê heke hûn wê bi çalak bikar bînin, ez pêşniyar dikim ku hûn belgeyê bixwînin. Ji bo pir rewşan, bes e ku meriv zanibe "ps to".

kûştin

Ji pêvajoyekê re sînyalek bişînin. Ji hêla xwerû ve sînyala tê şandin TARGET TERM, ku pêvajoyê bi dawî dike.

[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

Ji ber ku pêvajoyek dikare rêgirên sînyalê hebin, kûştin ne her gav berbi encama hêvîbûnê ve diçe - tavilê qedandina pêvajoyê. Ji bo ku pêvajoyek bê guman "bikujin", hûn hewce ne ku îşaretek ji pêvajoyê re bişînin SIGKILL. Lêbelê, ev dikare bibe sedema windabûna daneyê (mînakek, heke pêvajo pêdivî ye ku berî bidawîbûnê hin agahdarî li ser dîskê hilîne), ji ber vê yekê hûn hewce ne ku vê fermanê bi hişyariyê bikar bînin. Hejmara sînyala SIGKILL - 9, ji ber vê yekê guhertoya kurt a fermanê wiha xuya dike:

[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

Ji bilî yên ku hatine gotin TARGET TERM и SIGKILL Gelek nîşanên cûda hene; navnîşek wan bi hêsanî li ser Înternetê tê dîtin. Û ji bîr nekin ku sînyalan SIGKILL и NEXTSTOP nikare were girtin an paşguh kirin.

ping

Ji mêvandar re pakêtek ICMP bişînin 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

by default ping dixebite heta ku ew bi destan bi dawî bibe. Ji ber vê yekê vebijark dikare kêrhatî be -c - hejmara pakêtên piştî şandinê ping dê bi serê xwe temam bike. Vebijarkek din ku ez carinan bikar tînim ev e -i, navbera di navbera şandina pakêtan de.

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

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 10006ms
rtt min/avg/max/mdev = 1.162/1.295/1.551/0.181 ms

ssh

Xerîdar OpenSSH SSH dihêle hûn bi mêvandarek dûr ve girêdayî bibin.

MacBook-Pro-User:~ user$ ssh [email protected]
Last login: Tue Nov 26 11:27:39 2019 from another_host
[user@testhost ~]$ hostname
testhost

Di karanîna SSH de gelek nuwaze hene, û ev xerîdar jî hejmareke mezin jêhatî ye, ji ber vê yekê heke hûn bixwazin (an hewce bikin) hûn dikarin li ser wê bixwînin. bi hûrgulî.

scp

Pelên di navbera mêvandaran de kopî bikin (ji bo vê karanînê ssh).

[user@testhost ~]$ pwd
/home/user
[user@testhost ~]$ ls
temp  test_renamed
[user@testhost ~]$ exit
logout
Connection to 11.11.22.22 closed.
MacBook-Pro-Aleksandr:~ user$ scp [email protected]:/home/user/temp Downloads/
temp                                                                                                                                                                                                        100%   31     0.2KB/s   00:00
MacBook-Pro-Aleksandr:~ user$ cat Downloads/temp
Content of a file.
Lalalala...

rsync

Her weha hûn dikarin bikar bînin ku pelrêçan di navbera mêvandaran de hevdeng bikin rsync (-a - moda arşîvê, dihêle hûn tevahiya naveroka pelrêça "wek ku ye" kopî bikin, -v - derketina ji bo konsolê agahdariya zêde):

MacBook-Pro-User:~ user$ ls Downloads/user
ls: Downloads/user: No such file or directory
MacBook-Pro-User:~ user$ rsync -av user@testhost:/home/user Downloads
receiving file list ... done
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

sent 346 bytes  received 29210 bytes  11822.40 bytes/sec
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

dengvegerîn

Rêzek nivîsê nîşan bide.

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

Vebijarkên ku hêja li vir têne hesibandin -n - li dawiya rêza bi şikestinek xetê pêve neke, û -e - bi karanîna ""-ê ji şirovekirinê reviyayî çalak bike.

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

Her weha hûn dikarin bi karanîna vê fermanê nirxên guherbaran nîşan bidin. Mînakî, di Linux de koda derketina fermana dawîn a qedandî di guhêrbarek taybetî de tê hilanîn $?, û bi vî rengî hûn dikarin bi rastî bibînin ka çi xeletî di serlêdana paşîn a xebitandinê de derketiye:

[user@testhost ~]$ ls    # ошибки не будет
1  man_signal  man_signal_error_log  temp  test
[user@testhost ~]$ echo $?    # получим 0 — ошибки не было
0
[user@testhost ~]$ ls qwerty    # будет ошибка
ls: cannot access qwerty: No such file or directory
[user@testhost ~]$ echo $?    # получим 2 — Misuse of shell builtins (according to Bash documentation)
2
[user@testhost ~]$ echo $?    # последний echo отработал без ошибок, получим 0
0

telnet

Xerîdar ji bo protokola TELNET. Ji bo danûstandina bi mêvandarek din re tê bikar anîn.

[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

... здесь было тело ответа, которое я вырезал руками ...

Heke hûn hewce ne ku protokola TLS bikar bînin (bihêle ez ji we re bi bîr bînim ku SSL ji demek dirêj ve kevn bûye), wê hingê telnet ji bo van armancan ne guncaw e. Lê muwekîlê wê bê openssl:

Mînakek karanîna openssl bi derxistina bersivek ji daxwazek GET re

[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   [email protected]
    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.&."...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`>.
    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>Example Domain</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>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>

Pirsgirêkên hevpar ên di Linux de çareser bikin

Xwediyê pelê biguherîne

Hûn dikarin xwedan pel an pelrêçek bi karanîna fermanê biguherînin çenandin:

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

Pêdivî ye ku pîvana vê fermanê ji xwediyê nû û koma nû (vebijarkî) re were veqetandin, bi kolonek veqetandî. Di heman demê de, dema ku xwediyê pelrêçekê biguhezîne, vebijark dikare bikêr be -R - wê hingê dê xwedan hemî naverokên pelrêçê biguhezînin.

Destûrên pelê biguherînin

Ev pirsgirêk bi karanîna fermanê dikare were çareser kirin chmod. Wek mînak, ez ê mîhenga destûrê bidim "xwedan destûr e ku bixwîne, binivîsîne û bixebite, kom destûr bide xwendin û nivîsandinê, her kesê din destûr nade tiştek":

[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

Yekem 7 (ev 0b111 di temsîla bit de ye) di pîvanê de tê wateya "hemû mafên xwedan", 6 ya duyemîn (ev 0b110 di temsîla bitê de ye) tê wateya "xwendin û nivîsandin", û 0 ji bo yên mayî nayê wateya . Bitmask ji sê bitan pêk tê: bitê ya herî hindik girîng ("rast") berpirsiyarê înfazê ye, bîta din ("navîn") ji bo nivîsandinê ye, û ya herî girîng ("çep") ji bo xwendinê ye.
Her weha hûn dikarin bi karanîna tîpên taybetî destûr bidin (hevoksaziya mînemonîk). Mînakî, mînaka jêrîn pêşî mafên darvekirinê ji bo bikarhênerê heyî radike û dûv re wan vedigerîne:

[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

Vê fermanê gelek karanîn hene, ji ber vê yekê ez ji we re şîret dikim ku hûn li ser wê bêtir bixwînin (bi taybetî di derbarê hevoksaziya mnemonic, mînakî, vir).

Naveroka pelek binary çap bike

Ev dikare bi karanîna amûreyê were kirin hexdump. Li jêr mînakên bikaranîna wê hene.

[user@testhost ~]$ cat temp
Content of a file.
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  |Content of a fil|
00000010  65 2e 0a 4c 61 6c 61 6c  61 6c 61 2e 2e 2e 0a     |e..Lalalala....|
0000001f

Bi karanîna vê amûreyê, hûn dikarin daneyan di formên din de derxînin, lê ji bo karanîna wê vebijarkên herî bikêr in.

Pelên lêgerînê

Hûn dikarin pelek bi beşek navê wê di dara pelrêçê de bi karanîna fermanê bibînin dîtin:

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

Vebijarkên lêgerîn û fîlterên din jî hene. Mînakî, bi vî rengî hûn dikarin pelan di peldankê de bibînin îmtîhanbêtir ji 5 roj berê hatî afirandin:

[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

Di pelan de nivîsê bigerin

Tîm dê ji we re bibe alîkar ku hûn bi vî karî re mijûl bibin grep. Gelek karanîna wê hene, ya herî hêsan li vir wekî mînakek tê dayîn.

[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

Yek ji awayên populer ên karanîna fermanê grep - wê di boriyê de bikar bînin (lûle):

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

Dibe -v dihêle hûn bandorek çêbikin grep'û berevajî - tenê xêzên ku nexşeyê tê de ne derbas dibin grep.

Pakêtên sazkirî bibînin

Fermanek gerdûnî tune, ji ber ku her tişt bi belavkirina Linux û rêveberê pakêtê ve girêdayî ye. Bi îhtîmalek mezin yek ji fermanên jêrîn dê ji we re bibe alîkar:

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

Binêrin ka dara pelrêça çiqas cîh digire

Yek ji vebijarkên ji bo karanîna fermanê du:

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

Hûn dikarin nirxa parametreyê biguherînin -dji bo agahdariya berfirehtir li ser dara pelrêçê bistînin. Her weha hûn dikarin fermanê bi hev re bikar bînin jiberhevxistin:

[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

Dibe -h tîma jiberhevxistin destûrê dide te ku pîvanên ku di formata mirovî ya xwendinê de hatine nivîsandin (mînak, 1K, 2G), vebijark bi rêz bikin -r destûrê dide te ku hûn daneyan bi rêza berevajî rêz bikin.

Di pelê de, di pelan de di pelrêçek de "Bibînin û biguhezînin".

Ev operasyon bi karanîna karûbar tê kirin sed (ala tune g di dawiyê de, tenê yekem bûyera "kevn-text" di rêzê de dê were guheztin):

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

Hûn dikarin wê ji bo çend pelan yekcar bikar bînin:

[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

Ji dergehê stûnek xêz bikin

Ew ê ji bo çareserkirina vê peywirê bibe alîkar wow. Ev mînak stûna duyemîn a derketina fermanê nîşan dideps ux`:

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

Di heman demê de, divê di hişê xwe de were girtin wow fonksiyonek pir dewlemendtir e, ji ber vê yekê heke hûn hewce ne ku bi nivîsê re li ser rêza fermanê bixebitin, divê hûn li ser vê fermanê bêtir bixwînin.

Navnîşana IP-ê bi navê mêvandar bibînin

Yek ji fermanên jêrîn dê bi vê yekê re bibe alîkar:

[user@testhost ~]$ host ya.ru
ya.ru has address 87.250.250.242
ya.ru has IPv6 address 2a02:6b8::2:242
ya.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

Information Network

Karanîn ifconfig:

[user@testhost ~]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  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<link>
        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<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        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

An jî dibe ku ip:

[user@testhost ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <NOARP> mtu 1500 qdisc noop state DOWN group default
    link/ipip 0.0.0.0 brd 0.0.0.0

Wekî din, heke, mînakî, hûn tenê bi IPv4 re eleqedar in, wê hingê hûn dikarin vebijarkê lê zêde bikin -4:

[user@testhost ~]$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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

Portên vekirî bibînin

Ji bo vê yekê, karûbar bikar bînin netstat. Mînakî, ji bo dîtina hemî portên guhdarîkirina TCP û UDP bi pêşandana PID-a pêvajoyê ya ku li portê guhdarî dike û nûneriyek hejmarî ya portê, hûn hewce ne ku wê bi vebijarkên jêrîn bikar bînin:

[user@testhost ~]$ netstat -lptnu

Agahdariya pergalê

Hûn dikarin vê agahiyê bi karanîna fermanê bistînin yek.

[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

Ji bo ku hûn forma ku tê de hilber tê hilberandin fam bikin, hûn dikarin serî lê bidin alîkarî'ji bo vê fermanê:

[user@testhost ~]$ uname --help
Использование: uname [КЛЮЧ]…
Печатает определенные сведения о системе.  Если КЛЮЧ не задан,
подразумевается -s.

  -a, --all          напечатать всю информацию, в следующем порядке,
                       кроме -p и -i, если они неизвестны:
  -s, --kernel-name  напечатать имя ядра
  -n, --nodename     напечатать имя машины в сети
  -r, --release      напечатать номер выпуска операционной системы
  -v, --kernel-version     напечатать версию ядра
  -m, --machine            напечатать тип оборудования машины
  -p, --processor          напечатать тип процессора или «неизвестно»
  -i, --hardware-platform  напечатать тип аппаратной платформы или «неизвестно»
  -o, --operating-system   напечатать имя операционной системы
      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти

Agahdariya bîranînê

Ji bo ku hûn fêm bikin ka çiqas RAM dagirkirî an belaş e, hûn dikarin fermanê bikar bînin belaş.

[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

Agahdariya li ser pergalên pelan (cihê dîskê belaş)

tîma df destûrê dide te ku hûn bibînin ka çiqas cîh li pergalên pelan ên siwarkirî belaş û dagirkirî ye.

[user@testhost ~]$ df -hT
Файловая система Тип      Размер Использовано  Дост Использовано% Cмонтировано в
/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

Dibe -T diyar dike ku divê celeb pergala pelan were destnîşankirin.

Agahdariya li ser kar û statîstîkên cihêreng ên li ser pergalê

Ji bo vê yekê, emrê bikar bînin lûtik. Ew dikare agahdariya cihêreng nîşan bide: Mînakî, pêvajoyên jorîn ji hêla karanîna RAM-ê ve an pêvajoyên jorîn ji hêla karanîna dema CPU ve. Di heman demê de ew agahdariya di derbarê bîranîn, CPU, dema xebatê û LA (navbera barkirinê) de jî nîşan dide.

[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

Ev amûr xwedan fonksiyonek dewlemend e, ji ber vê yekê heke hûn hewce ne ku wê pir caran bikar bînin, çêtir e ku hûn belgeyên wê bixwînin.

barkirina trafîkê torê

Ji bo astengkirina seyrûsefera torê ya li Linux-ê, amûrek tê bikar anîn tcpdump. Ji bo ku seyrûsefera li ser porta 12345 hilweşîne, hûn dikarin fermana jêrîn bikar bînin:

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

Dibe -A dibêje ku em dixwazin di ASCII de encam bibînin (ji ber vê yekê ew ji bo protokolên nivîsê baş e), -i her destnîşan dike ku em bi navbeynkariya torê ne eleqedar in, bender - seyrûsefera kîjan portê davêje. Di şona bender bikar bînin mazûban, an jî tevliheviyek mazûban и bender (host A û port X). Vebijarkek din a kêrhatî dikare bibe -n - di encam de navnîşanan navên mêvandar veguherînin.
Ger seyrûsefer binary be? Wê hingê vebijark dê alîkariya me bike -X - Daneyên derketinê di hex û ASCII de:

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

Divê were hesibandin ku di her du rewşan de jî pakêtên IP-ê têne derxistin, ji ber vê yekê di destpêka her yek ji wan de sernavên IP-ya binary û TCP-ê hene. Li vir encamek mînakek ji bo pirsê ye "123" ji servera ku li porta 12345 guhdarî dike hatî şandin:

[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                   .........

Li şûna hilberê

Bê guman, di Linux de gelek tiştên balkêştir hene ku hûn dikarin li ser Habré, StackOverflow û malperên din bixwînin (ez ê mînakek bidim we Huneriya Fermandariyê, ku ew jî di wergerê de). Rêvebirên pergalê û DevOps ji bo mîhengkirina pêşkêşkeran gelek ferman û karûbaran bikar tînin, lê tewra ceribandiner jî dibe ku têra fermanên navnîşkirî nebin. Dibe ku hûn hewce ne ku rastbûna hin demên dijwar ên di navbera xerîdar û serverê de, an xebata serverê dema ku cîhê dîskê belaş tune kontrol bikin. Ez nabêjim, mînakî, Docker, ku naha ji hêla gelek pargîdaniyan ve bi rengek çalak tê bikar anîn. Ma dê balkêş be, wekî beşek ji berdewamiya vê gotara referansê, ku meriv li çend nimûneyên karanîna karûbarên cihêreng ên konsolê Linux-ê di pêvajoya ceribandina karûbaran de binêre? Di şîroveyan de tîmên xwe yên herî mezin jî parve bikin :)

Source: www.habr.com

Add a comment